mirror of
https://github.com/garrytan/gstack.git
synced 2026-08-08 07:18:38 +02:00
chore: update tests and golden fixtures for new hosts
- Host count: 8 → 10 (hermes, gbrain) - OpenClaw adapter test: expects undefined (dead code removed) - Golden ship fixtures: updated with Confusion Protocol + vendoring Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.6
parent
8ef13aa500
commit
b05f0cc7af
+53
@@ -86,6 +86,14 @@ fi
|
|||||||
_ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false")
|
_ROUTING_DECLINED=$(~/.claude/skills/gstack/bin/gstack-config get routing_declined 2>/dev/null || echo "false")
|
||||||
echo "HAS_ROUTING: $_HAS_ROUTING"
|
echo "HAS_ROUTING: $_HAS_ROUTING"
|
||||||
echo "ROUTING_DECLINED: $_ROUTING_DECLINED"
|
echo "ROUTING_DECLINED: $_ROUTING_DECLINED"
|
||||||
|
# Vendoring deprecation: detect if CWD has a vendored gstack copy
|
||||||
|
_VENDORED="no"
|
||||||
|
if [ -d ".claude/skills/gstack" ] && [ ! -L ".claude/skills/gstack" ]; then
|
||||||
|
if [ -f ".claude/skills/gstack/VERSION" ] || [ -d ".claude/skills/gstack/.git" ]; then
|
||||||
|
_VENDORED="yes"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
echo "VENDORED_GSTACK: $_VENDORED"
|
||||||
# Detect spawned session (OpenClaw or other orchestrator)
|
# Detect spawned session (OpenClaw or other orchestrator)
|
||||||
[ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true
|
[ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true
|
||||||
```
|
```
|
||||||
@@ -214,6 +222,38 @@ Say "No problem. You can add routing rules later by running `gstack-config set r
|
|||||||
|
|
||||||
This only happens once per project. If `HAS_ROUTING` is `yes` or `ROUTING_DECLINED` is `true`, skip this entirely.
|
This only happens once per project. If `HAS_ROUTING` is `yes` or `ROUTING_DECLINED` is `true`, skip this entirely.
|
||||||
|
|
||||||
|
If `VENDORED_GSTACK` is `yes`: This project has a vendored copy of gstack at
|
||||||
|
`.claude/skills/gstack/`. Vendoring is deprecated. We will not keep vendored copies
|
||||||
|
up to date, so this project's gstack will fall behind.
|
||||||
|
|
||||||
|
Use AskUserQuestion (one-time per project, check for `~/.gstack/.vendoring-warned-$SLUG` marker):
|
||||||
|
|
||||||
|
> This project has gstack vendored in `.claude/skills/gstack/`. Vendoring is deprecated.
|
||||||
|
> We won't keep this copy up to date, so you'll fall behind on new features and fixes.
|
||||||
|
>
|
||||||
|
> Want to migrate to team mode? It takes about 30 seconds.
|
||||||
|
|
||||||
|
Options:
|
||||||
|
- A) Yes, migrate to team mode now
|
||||||
|
- B) No, I'll handle it myself
|
||||||
|
|
||||||
|
If A:
|
||||||
|
1. Run `git rm -r .claude/skills/gstack/`
|
||||||
|
2. Run `echo '.claude/skills/gstack/' >> .gitignore`
|
||||||
|
3. Run `~/.claude/skills/gstack/bin/gstack-team-init required` (or `optional`)
|
||||||
|
4. Run `git add .claude/ .gitignore CLAUDE.md && git commit -m "chore: migrate gstack from vendored to team mode"`
|
||||||
|
5. Tell the user: "Done. Each developer now runs: `cd ~/.claude/skills/gstack && ./setup --team`"
|
||||||
|
|
||||||
|
If B: say "OK, you're on your own to keep the vendored copy up to date."
|
||||||
|
|
||||||
|
Always run (regardless of choice):
|
||||||
|
```bash
|
||||||
|
eval "$(~/.claude/skills/gstack/bin/gstack-slug 2>/dev/null)" 2>/dev/null || true
|
||||||
|
touch ~/.gstack/.vendoring-warned-${SLUG:-unknown}
|
||||||
|
```
|
||||||
|
|
||||||
|
This only happens once per project. If the marker file exists, skip entirely.
|
||||||
|
|
||||||
If `SPAWNED_SESSION` is `"true"`, you are running inside a session spawned by an
|
If `SPAWNED_SESSION` is `"true"`, you are running inside a session spawned by an
|
||||||
AI orchestrator (e.g., OpenClaw). In spawned sessions:
|
AI orchestrator (e.g., OpenClaw). In spawned sessions:
|
||||||
- Do NOT use AskUserQuestion for interactive prompts. Auto-choose the recommended option.
|
- Do NOT use AskUserQuestion for interactive prompts. Auto-choose the recommended option.
|
||||||
@@ -339,6 +379,19 @@ AI makes completeness near-free. Always recommend the complete option over short
|
|||||||
|
|
||||||
Include `Completeness: X/10` for each option (10=all edge cases, 7=happy path, 3=shortcut).
|
Include `Completeness: X/10` for each option (10=all edge cases, 7=happy path, 3=shortcut).
|
||||||
|
|
||||||
|
## Confusion Protocol
|
||||||
|
|
||||||
|
When you encounter high-stakes ambiguity during coding:
|
||||||
|
- Two plausible architectures or data models for the same requirement
|
||||||
|
- A request that contradicts existing patterns and you're unsure which to follow
|
||||||
|
- A destructive operation where the scope is unclear
|
||||||
|
- Missing context that would change your approach significantly
|
||||||
|
|
||||||
|
STOP. Name the ambiguity in one sentence. Present 2-3 options with tradeoffs.
|
||||||
|
Ask the user. Do not guess on architectural or data model decisions.
|
||||||
|
|
||||||
|
This does NOT apply to routine coding, small features, or obvious changes.
|
||||||
|
|
||||||
## Repo Ownership — See Something, Say Something
|
## Repo Ownership — See Something, Say Something
|
||||||
|
|
||||||
`REPO_MODE` controls how to handle issues outside your branch:
|
`REPO_MODE` controls how to handle issues outside your branch:
|
||||||
|
|||||||
+53
@@ -80,6 +80,14 @@ fi
|
|||||||
_ROUTING_DECLINED=$($GSTACK_BIN/gstack-config get routing_declined 2>/dev/null || echo "false")
|
_ROUTING_DECLINED=$($GSTACK_BIN/gstack-config get routing_declined 2>/dev/null || echo "false")
|
||||||
echo "HAS_ROUTING: $_HAS_ROUTING"
|
echo "HAS_ROUTING: $_HAS_ROUTING"
|
||||||
echo "ROUTING_DECLINED: $_ROUTING_DECLINED"
|
echo "ROUTING_DECLINED: $_ROUTING_DECLINED"
|
||||||
|
# Vendoring deprecation: detect if CWD has a vendored gstack copy
|
||||||
|
_VENDORED="no"
|
||||||
|
if [ -d ".agents/skills/gstack" ] && [ ! -L ".agents/skills/gstack" ]; then
|
||||||
|
if [ -f ".agents/skills/gstack/VERSION" ] || [ -d ".agents/skills/gstack/.git" ]; then
|
||||||
|
_VENDORED="yes"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
echo "VENDORED_GSTACK: $_VENDORED"
|
||||||
# Detect spawned session (OpenClaw or other orchestrator)
|
# Detect spawned session (OpenClaw or other orchestrator)
|
||||||
[ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true
|
[ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true
|
||||||
```
|
```
|
||||||
@@ -208,6 +216,38 @@ Say "No problem. You can add routing rules later by running `gstack-config set r
|
|||||||
|
|
||||||
This only happens once per project. If `HAS_ROUTING` is `yes` or `ROUTING_DECLINED` is `true`, skip this entirely.
|
This only happens once per project. If `HAS_ROUTING` is `yes` or `ROUTING_DECLINED` is `true`, skip this entirely.
|
||||||
|
|
||||||
|
If `VENDORED_GSTACK` is `yes`: This project has a vendored copy of gstack at
|
||||||
|
`.agents/skills/gstack/`. Vendoring is deprecated. We will not keep vendored copies
|
||||||
|
up to date, so this project's gstack will fall behind.
|
||||||
|
|
||||||
|
Use AskUserQuestion (one-time per project, check for `~/.gstack/.vendoring-warned-$SLUG` marker):
|
||||||
|
|
||||||
|
> This project has gstack vendored in `.agents/skills/gstack/`. Vendoring is deprecated.
|
||||||
|
> We won't keep this copy up to date, so you'll fall behind on new features and fixes.
|
||||||
|
>
|
||||||
|
> Want to migrate to team mode? It takes about 30 seconds.
|
||||||
|
|
||||||
|
Options:
|
||||||
|
- A) Yes, migrate to team mode now
|
||||||
|
- B) No, I'll handle it myself
|
||||||
|
|
||||||
|
If A:
|
||||||
|
1. Run `git rm -r .agents/skills/gstack/`
|
||||||
|
2. Run `echo '.agents/skills/gstack/' >> .gitignore`
|
||||||
|
3. Run `$GSTACK_BIN/gstack-team-init required` (or `optional`)
|
||||||
|
4. Run `git add .claude/ .gitignore CLAUDE.md && git commit -m "chore: migrate gstack from vendored to team mode"`
|
||||||
|
5. Tell the user: "Done. Each developer now runs: `cd $GSTACK_ROOT && ./setup --team`"
|
||||||
|
|
||||||
|
If B: say "OK, you're on your own to keep the vendored copy up to date."
|
||||||
|
|
||||||
|
Always run (regardless of choice):
|
||||||
|
```bash
|
||||||
|
eval "$($GSTACK_BIN/gstack-slug 2>/dev/null)" 2>/dev/null || true
|
||||||
|
touch ~/.gstack/.vendoring-warned-${SLUG:-unknown}
|
||||||
|
```
|
||||||
|
|
||||||
|
This only happens once per project. If the marker file exists, skip entirely.
|
||||||
|
|
||||||
If `SPAWNED_SESSION` is `"true"`, you are running inside a session spawned by an
|
If `SPAWNED_SESSION` is `"true"`, you are running inside a session spawned by an
|
||||||
AI orchestrator (e.g., OpenClaw). In spawned sessions:
|
AI orchestrator (e.g., OpenClaw). In spawned sessions:
|
||||||
- Do NOT use AskUserQuestion for interactive prompts. Auto-choose the recommended option.
|
- Do NOT use AskUserQuestion for interactive prompts. Auto-choose the recommended option.
|
||||||
@@ -333,6 +373,19 @@ AI makes completeness near-free. Always recommend the complete option over short
|
|||||||
|
|
||||||
Include `Completeness: X/10` for each option (10=all edge cases, 7=happy path, 3=shortcut).
|
Include `Completeness: X/10` for each option (10=all edge cases, 7=happy path, 3=shortcut).
|
||||||
|
|
||||||
|
## Confusion Protocol
|
||||||
|
|
||||||
|
When you encounter high-stakes ambiguity during coding:
|
||||||
|
- Two plausible architectures or data models for the same requirement
|
||||||
|
- A request that contradicts existing patterns and you're unsure which to follow
|
||||||
|
- A destructive operation where the scope is unclear
|
||||||
|
- Missing context that would change your approach significantly
|
||||||
|
|
||||||
|
STOP. Name the ambiguity in one sentence. Present 2-3 options with tradeoffs.
|
||||||
|
Ask the user. Do not guess on architectural or data model decisions.
|
||||||
|
|
||||||
|
This does NOT apply to routine coding, small features, or obvious changes.
|
||||||
|
|
||||||
## Repo Ownership — See Something, Say Something
|
## Repo Ownership — See Something, Say Something
|
||||||
|
|
||||||
`REPO_MODE` controls how to handle issues outside your branch:
|
`REPO_MODE` controls how to handle issues outside your branch:
|
||||||
|
|||||||
+53
@@ -82,6 +82,14 @@ fi
|
|||||||
_ROUTING_DECLINED=$($GSTACK_BIN/gstack-config get routing_declined 2>/dev/null || echo "false")
|
_ROUTING_DECLINED=$($GSTACK_BIN/gstack-config get routing_declined 2>/dev/null || echo "false")
|
||||||
echo "HAS_ROUTING: $_HAS_ROUTING"
|
echo "HAS_ROUTING: $_HAS_ROUTING"
|
||||||
echo "ROUTING_DECLINED: $_ROUTING_DECLINED"
|
echo "ROUTING_DECLINED: $_ROUTING_DECLINED"
|
||||||
|
# Vendoring deprecation: detect if CWD has a vendored gstack copy
|
||||||
|
_VENDORED="no"
|
||||||
|
if [ -d ".factory/skills/gstack" ] && [ ! -L ".factory/skills/gstack" ]; then
|
||||||
|
if [ -f ".factory/skills/gstack/VERSION" ] || [ -d ".factory/skills/gstack/.git" ]; then
|
||||||
|
_VENDORED="yes"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
echo "VENDORED_GSTACK: $_VENDORED"
|
||||||
# Detect spawned session (OpenClaw or other orchestrator)
|
# Detect spawned session (OpenClaw or other orchestrator)
|
||||||
[ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true
|
[ -n "$OPENCLAW_SESSION" ] && echo "SPAWNED_SESSION: true" || true
|
||||||
```
|
```
|
||||||
@@ -210,6 +218,38 @@ Say "No problem. You can add routing rules later by running `gstack-config set r
|
|||||||
|
|
||||||
This only happens once per project. If `HAS_ROUTING` is `yes` or `ROUTING_DECLINED` is `true`, skip this entirely.
|
This only happens once per project. If `HAS_ROUTING` is `yes` or `ROUTING_DECLINED` is `true`, skip this entirely.
|
||||||
|
|
||||||
|
If `VENDORED_GSTACK` is `yes`: This project has a vendored copy of gstack at
|
||||||
|
`.factory/skills/gstack/`. Vendoring is deprecated. We will not keep vendored copies
|
||||||
|
up to date, so this project's gstack will fall behind.
|
||||||
|
|
||||||
|
Use AskUserQuestion (one-time per project, check for `~/.gstack/.vendoring-warned-$SLUG` marker):
|
||||||
|
|
||||||
|
> This project has gstack vendored in `.factory/skills/gstack/`. Vendoring is deprecated.
|
||||||
|
> We won't keep this copy up to date, so you'll fall behind on new features and fixes.
|
||||||
|
>
|
||||||
|
> Want to migrate to team mode? It takes about 30 seconds.
|
||||||
|
|
||||||
|
Options:
|
||||||
|
- A) Yes, migrate to team mode now
|
||||||
|
- B) No, I'll handle it myself
|
||||||
|
|
||||||
|
If A:
|
||||||
|
1. Run `git rm -r .factory/skills/gstack/`
|
||||||
|
2. Run `echo '.factory/skills/gstack/' >> .gitignore`
|
||||||
|
3. Run `$GSTACK_BIN/gstack-team-init required` (or `optional`)
|
||||||
|
4. Run `git add .claude/ .gitignore CLAUDE.md && git commit -m "chore: migrate gstack from vendored to team mode"`
|
||||||
|
5. Tell the user: "Done. Each developer now runs: `cd $GSTACK_ROOT && ./setup --team`"
|
||||||
|
|
||||||
|
If B: say "OK, you're on your own to keep the vendored copy up to date."
|
||||||
|
|
||||||
|
Always run (regardless of choice):
|
||||||
|
```bash
|
||||||
|
eval "$($GSTACK_BIN/gstack-slug 2>/dev/null)" 2>/dev/null || true
|
||||||
|
touch ~/.gstack/.vendoring-warned-${SLUG:-unknown}
|
||||||
|
```
|
||||||
|
|
||||||
|
This only happens once per project. If the marker file exists, skip entirely.
|
||||||
|
|
||||||
If `SPAWNED_SESSION` is `"true"`, you are running inside a session spawned by an
|
If `SPAWNED_SESSION` is `"true"`, you are running inside a session spawned by an
|
||||||
AI orchestrator (e.g., OpenClaw). In spawned sessions:
|
AI orchestrator (e.g., OpenClaw). In spawned sessions:
|
||||||
- Do NOT use AskUserQuestion for interactive prompts. Auto-choose the recommended option.
|
- Do NOT use AskUserQuestion for interactive prompts. Auto-choose the recommended option.
|
||||||
@@ -335,6 +375,19 @@ AI makes completeness near-free. Always recommend the complete option over short
|
|||||||
|
|
||||||
Include `Completeness: X/10` for each option (10=all edge cases, 7=happy path, 3=shortcut).
|
Include `Completeness: X/10` for each option (10=all edge cases, 7=happy path, 3=shortcut).
|
||||||
|
|
||||||
|
## Confusion Protocol
|
||||||
|
|
||||||
|
When you encounter high-stakes ambiguity during coding:
|
||||||
|
- Two plausible architectures or data models for the same requirement
|
||||||
|
- A request that contradicts existing patterns and you're unsure which to follow
|
||||||
|
- A destructive operation where the scope is unclear
|
||||||
|
- Missing context that would change your approach significantly
|
||||||
|
|
||||||
|
STOP. Name the ambiguity in one sentence. Present 2-3 options with tradeoffs.
|
||||||
|
Ask the user. Do not guess on architectural or data model decisions.
|
||||||
|
|
||||||
|
This does NOT apply to routine coding, small features, or obvious changes.
|
||||||
|
|
||||||
## Repo Ownership — See Something, Say Something
|
## Repo Ownership — See Something, Say Something
|
||||||
|
|
||||||
`REPO_MODE` controls how to handle issues outside your branch:
|
`REPO_MODE` controls how to handle issues outside your branch:
|
||||||
|
|||||||
@@ -30,8 +30,8 @@ const ROOT = path.resolve(import.meta.dir, '..');
|
|||||||
// ─── hosts/index.ts ─────────────────────────────────────────
|
// ─── hosts/index.ts ─────────────────────────────────────────
|
||||||
|
|
||||||
describe('hosts/index.ts', () => {
|
describe('hosts/index.ts', () => {
|
||||||
test('ALL_HOST_CONFIGS has 8 hosts', () => {
|
test('ALL_HOST_CONFIGS has 10 hosts', () => {
|
||||||
expect(ALL_HOST_CONFIGS.length).toBe(8);
|
expect(ALL_HOST_CONFIGS.length).toBe(10);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('ALL_HOST_NAMES matches config names', () => {
|
test('ALL_HOST_NAMES matches config names', () => {
|
||||||
@@ -479,9 +479,8 @@ describe('host config correctness', () => {
|
|||||||
expect(openclaw.pathRewrites.some(r => r.from === 'CLAUDE.md' && r.to === 'AGENTS.md')).toBe(true);
|
expect(openclaw.pathRewrites.some(r => r.from === 'CLAUDE.md' && r.to === 'AGENTS.md')).toBe(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('openclaw has adapter path', () => {
|
test('openclaw has no adapter (dead code removed)', () => {
|
||||||
expect(openclaw.adapter).toBeDefined();
|
expect(openclaw.adapter).toBeUndefined();
|
||||||
expect(openclaw.adapter).toContain('openclaw-adapter');
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test('openclaw has no staticFiles (SOUL.md removed)', () => {
|
test('openclaw has no staticFiles (SOUL.md removed)', () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user