* test(meta): invalidate bug-2543 outdated /gsd:<cmd> namespace invariant
The "no /gsd-<cmd> hyphen form in source files" scan (test 2 of the
describe block) is skipped via test.skip. Motivation:
- Bug-3584 (2026-05-15) introduced runtime-slash.cjs, which intentionally
emits `/gsd-${token}` for skills-based runtimes. This is the correct
canonical form for runtime-persisted strings (ROADMAP.md, STATE.md,
recommended_actions, fix hints).
- Bug-2543 was last updated 2026-05-12, three days BEFORE bug-3584 landed.
The "no hyphen form" invariant was never updated to reflect the new
two-tier model.
- PR #154 first-pass: an agent misread bug-2543 and reverted the correct
`/gsd-plan-phase` to `/gsd:plan-phase` in phase-lifecycle-policy.ts:156,
breaking tests/bug-3584-runtime-slash-emitters.test.cjs. A 2nd-pass agent
reverted.
The canonical active invariant for runtime-emitter context is:
tests/bug-3584-runtime-slash-emitters.test.cjs
The remaining 4 tests in this file (commands/gsd/ existence, command
filename slug format, transformer behavior, non-command identifier safety)
are still valid and remain active — only test 2 is skipped. This avoids
vacuous-truth (a full describe-block skip would let all assertions pass
trivially).
See CONTEXT.md § "Slash-command form: /gsd-<cmd> vs /gsd:<cmd>" (added
in the companion commit) for the full two-tier model documentation.
User directive: 2026-05-23 session authorizing this invalidation.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* docs(context): document /gsd-<cmd> slash-command migration for AI agents
Adds CONTEXT.md § "Slash-command form: /gsd-<cmd> (current) vs /gsd:<cmd>
(legacy)" to give future agents an unambiguous reference for which form
to use in which context.
Covers:
- The two-tier model (source text → colon; runtime-emitted strings → hyphen)
- The runtime-emitter authority: get-shit-done/bin/lib/runtime-slash.cjs
- The canonical invariant test: bug-3584-runtime-slash-emitters.test.cjs
- The PR #154 incident: how an agent misread bug-2543 and applied the wrong form
- An explicit "Context for AI agents" block: stop and re-read if bug-2543 is
influencing a patch
- A note that DEFECT.AGENT-RETIRED-SLASH-SYNTAX-DRIFT.* predicates (written
pre-two-tier) are stale for runtime-emitter contexts
Also updates the stale DEFECT predicates at the end of CONTEXT.md with a
clarifying note (the predicates remain for historical reference; the new §
supersedes their fix-forward guidance for runtime-emitter contexts).
Motivation: PR #154 first-pass incident (2026-05-23 session).
Canonical runtime contract: tests/bug-3584-runtime-slash-emitters.test.cjs.
Companion: test(meta) commit invalidating bug-2543's scan.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* test(meta): re-activate bug-2543 scan as scoped invariant, exclude runtime-emitter contexts
Codex adversarial review of PR #164 [high finding]: the single content-scanning
test in bug-2543 was test.skip, leaving a vacuous test surface. The transformer/
filename unit tests remained active but no live source surface was guarded.
Fix: replace test.skip with an active scoped invariant.
Scope change:
- REMOVED get-shit-done/bin/lib/ from SEARCH_DIRS entirely. That directory is
runtime-emitter territory (runtime-slash.cjs, *.generated.cjs,
phase-lifecycle-policy.ts) and intentionally uses /gsd-<cmd> (hyphen) per
bug-3584's contract. Scanning it causes false positives that led to PR #154
first-pass incident.
- Added RUNTIME_EMITTER_EXCLUDES set documenting exactly why each file is exempt.
- Remaining SEARCH_DIRS (workflows/, references/, templates/, commands/gsd/,
agents/, hooks/) are Claude-facing source — colon form is correct there.
Verified: 9/9 tests pass, 0 skipped.
Canonical runtime-emitter contract: tests/bug-3584-runtime-slash-emitters.test.cjs
bug-2543's scoped scope: excludes bin/lib/ (runtime-emitter contexts).
* docs(context): rewrite slash-command section as directory-level matrix
Codex adversarial review of PR #164 [high finding]: the previous CONTEXT.md
section was internally contradictory — line 616 claimed /gsd-<cmd> was globally
canonical while lines 634/640 correctly stated Claude-facing source text uses
/gsd:<cmd>. Same document; opposite claims.
Root cause: the first push of this section (2026-05-23) overstated the hyphen
form as universal, when the project has always had a two-tier model.
Fix: replace the section with an unambiguous directory-level matrix.
New structure:
- Single table mapping each directory/surface to its correct form and enforcement.
- "How to choose" decision tree (4 steps, replaces ambiguous prose).
- "What was WRONG previously" retains historical motivation and adds the
PR #164 contradiction incident to the record.
- "Context for AI agents" updated: ban mass-rewrites based on single test failure,
cite the two-tier model explicitly.
Two-tier model (unchanged from reality, now clearly documented):
- Claude-facing source (commands/, agents/, workflows/, etc.): /gsd:<cmd> colon.
- Runtime-emitter contexts (runtime-slash.cjs, *.generated.cjs, ROADMAP.md
persistence): /gsd-<cmd> hyphen per bug-3584 invariant.
Canonical authorities: bug-2543 (colon contract), bug-3584 (hyphen contract).
* fix(workflows): replace dead /gsd-* tokens with live registry forms
Codex adversarial review of PR #164 [medium finding]: stale slash-command
references in user-facing workflow content. Registry-backed sweep confirmed
the following tokens are not in commands/gsd/ registry.
Tokens removed/updated (dead token → live registry form):
1. /gsd-remove-workspace → /gsd:workspace --remove <name>
File: get-shit-done/workflows/list-workspaces.md:58
Reason: no commands/gsd/remove-workspace.md; remove-workspace is a subcommand
of /gsd:workspace (commands/gsd/workspace.md, --remove flag).
2. /gsd-list-workspaces → /gsd:workspace --list
File: get-shit-done/workflows/remove-workspace.md:35
Reason: no commands/gsd/list-workspaces.md; list-workspaces is a subcommand
of /gsd:workspace (commands/gsd/workspace.md, --list flag).
3. /gsd-list-phase-assumptions <phase> → /gsd:discuss-phase <phase> --assumptions
File: get-shit-done/workflows/list-phase-assumptions.md:17-18 (usage block)
Reason: no commands/gsd/list-phase-assumptions.md; the workflow is invoked
via commands/gsd/discuss-phase.md with --assumptions flag.
4. /gsd-list-phase-assumptions 2 → /gsd:discuss-phase 2 --assumptions
File: get-shit-done/references/continuation-format.md:59
Reason: same as #3.
Sweep scope: user-facing markdown only (workflows/, references/). Runtime-emitter
hyphen-form references in bin/lib/ are guarded by bug-3584 and were not touched.
* chore(164): add changeset fragment for adversarial-review fixes
The 3 commits addressing Codex review touched user-facing surfaces
(get-shit-done/workflows/, get-shit-done/references/, CONTEXT.md,
bug-2543 test). Add fragment to satisfy changeset-lint.
Refs #164
---------
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
254 lines
4.7 KiB
Markdown
254 lines
4.7 KiB
Markdown
# Continuation Format
|
|
|
|
Standard format for presenting next steps after completing a command or workflow.
|
|
|
|
## Core Structure
|
|
|
|
```
|
|
---
|
|
|
|
## ▶ Next Up — [${PROJECT_CODE}] ${PROJECT_TITLE}
|
|
|
|
**{identifier}: {name}** — {one-line description}
|
|
|
|
`/clear` then:
|
|
|
|
`{command to copy-paste}`
|
|
|
|
---
|
|
|
|
**Also available:**
|
|
- `{alternative option 1}` — description
|
|
- `{alternative option 2}` — description
|
|
|
|
---
|
|
```
|
|
|
|
> If `project_code` is not set in the init context, omit the project identity suffix:
|
|
> `## ▶ Next Up` (no ` — [CODE] Title`).
|
|
|
|
## Format Rules
|
|
|
|
1. **Always show what it is** — name + description, never just a command path
|
|
2. **Pull context from source** — ROADMAP.md for phases, PLAN.md `<objective>` for plans
|
|
3. **Command in inline code** — backticks, easy to copy-paste, renders as clickable link
|
|
4. **`/clear` first** — always show `/clear` before the command so users run it in the correct order
|
|
5. **"Also available" not "Other options"** — sounds more app-like
|
|
6. **Visual separators** — `---` above and below to make it stand out
|
|
7. **Project identity in heading** — include `[PROJECT_CODE] PROJECT_TITLE` from init context so handoffs are self-identifying across sessions. If `project_code` is not set, omit the suffix entirely (just `## ▶ Next Up`)
|
|
|
|
## Variants
|
|
|
|
### Execute Next Plan
|
|
|
|
```
|
|
---
|
|
|
|
## ▶ Next Up — [${PROJECT_CODE}] ${PROJECT_TITLE}
|
|
|
|
**02-03: Refresh Token Rotation** — Add /api/auth/refresh with sliding expiry
|
|
|
|
`/clear` then:
|
|
|
|
`/gsd:execute-phase 2`
|
|
|
|
---
|
|
|
|
**Also available:**
|
|
- Review plan before executing
|
|
- `/gsd:discuss-phase 2 --assumptions` — check assumptions
|
|
|
|
---
|
|
```
|
|
|
|
### Execute Final Plan in Phase
|
|
|
|
Add note that this is the last plan and what comes after:
|
|
|
|
```
|
|
---
|
|
|
|
## ▶ Next Up — [${PROJECT_CODE}] ${PROJECT_TITLE}
|
|
|
|
**02-03: Refresh Token Rotation** — Add /api/auth/refresh with sliding expiry
|
|
<sub>Final plan in Phase 2</sub>
|
|
|
|
`/clear` then:
|
|
|
|
`/gsd:execute-phase 2`
|
|
|
|
---
|
|
|
|
**After this completes:**
|
|
- Phase 2 → Phase 3 transition
|
|
- Next: **Phase 3: Core Features** — User dashboard and settings
|
|
|
|
---
|
|
```
|
|
|
|
### Plan a Phase
|
|
|
|
```
|
|
---
|
|
|
|
## ▶ Next Up — [${PROJECT_CODE}] ${PROJECT_TITLE}
|
|
|
|
**Phase 2: Authentication** — JWT login flow with refresh tokens
|
|
|
|
`/clear` then:
|
|
|
|
`/gsd:plan-phase 2`
|
|
|
|
---
|
|
|
|
**Also available:**
|
|
- `/gsd:discuss-phase 2` — gather context first
|
|
- `/gsd:plan-phase --research-phase 2` — investigate unknowns
|
|
- Review roadmap
|
|
|
|
---
|
|
```
|
|
|
|
### Phase Complete, Ready for Next
|
|
|
|
Show completion status before next action:
|
|
|
|
```
|
|
---
|
|
|
|
## ✓ Phase 2 Complete
|
|
|
|
3/3 plans executed
|
|
|
|
## ▶ Next Up — [${PROJECT_CODE}] ${PROJECT_TITLE}
|
|
|
|
**Phase 3: Core Features** — User dashboard, settings, and data export
|
|
|
|
`/clear` then:
|
|
|
|
`/gsd:plan-phase 3`
|
|
|
|
---
|
|
|
|
**Also available:**
|
|
- `/gsd:discuss-phase 3` — gather context first
|
|
- `/gsd:plan-phase --research-phase 3` — investigate unknowns
|
|
- Review what Phase 2 built
|
|
|
|
---
|
|
```
|
|
|
|
### Multiple Equal Options
|
|
|
|
When there's no clear primary action:
|
|
|
|
```
|
|
---
|
|
|
|
## ▶ Next Up — [${PROJECT_CODE}] ${PROJECT_TITLE}
|
|
|
|
**Phase 3: Core Features** — User dashboard, settings, and data export
|
|
|
|
`/clear` then one of:
|
|
|
|
**To plan directly:** `/gsd:plan-phase 3`
|
|
|
|
**To discuss context first:** `/gsd:discuss-phase 3`
|
|
|
|
**To research unknowns:** `/gsd:plan-phase --research-phase 3`
|
|
|
|
---
|
|
```
|
|
|
|
### Milestone Complete
|
|
|
|
```
|
|
---
|
|
|
|
## 🎉 Milestone v1.0 Complete
|
|
|
|
All 4 phases shipped
|
|
|
|
## ▶ Next Up — [${PROJECT_CODE}] ${PROJECT_TITLE}
|
|
|
|
**Start v1.1** — questioning → research → requirements → roadmap
|
|
|
|
`/clear` then:
|
|
|
|
`/gsd:new-milestone`
|
|
|
|
---
|
|
```
|
|
|
|
## Pulling Context
|
|
|
|
### For phases (from ROADMAP.md):
|
|
|
|
```markdown
|
|
### Phase 2: Authentication
|
|
**Goal**: JWT login flow with refresh tokens
|
|
```
|
|
|
|
Extract: `**Phase 2: Authentication** — JWT login flow with refresh tokens`
|
|
|
|
### For plans (from ROADMAP.md):
|
|
|
|
```markdown
|
|
Plans:
|
|
- [ ] 02-03: Add refresh token rotation
|
|
```
|
|
|
|
Or from PLAN.md `<objective>`:
|
|
|
|
```xml
|
|
<objective>
|
|
Add refresh token rotation with sliding expiry window.
|
|
|
|
Purpose: Extend session lifetime without compromising security.
|
|
</objective>
|
|
```
|
|
|
|
Extract: `**02-03: Refresh Token Rotation** — Add /api/auth/refresh with sliding expiry`
|
|
|
|
## Anti-Patterns
|
|
|
|
### Don't: Command-only (no context)
|
|
|
|
```
|
|
## To Continue
|
|
|
|
Run `/clear`, then paste:
|
|
/gsd:execute-phase 2
|
|
```
|
|
|
|
User has no idea what 02-03 is about.
|
|
|
|
### Don't: Missing /clear explanation
|
|
|
|
```
|
|
`/gsd:plan-phase 3`
|
|
|
|
Run /clear first.
|
|
```
|
|
|
|
Doesn't explain why. User might skip it.
|
|
|
|
### Don't: "Other options" language
|
|
|
|
```
|
|
Other options:
|
|
- Review roadmap
|
|
```
|
|
|
|
Sounds like an afterthought. Use "Also available:" instead.
|
|
|
|
### Don't: Fenced code blocks for commands
|
|
|
|
```
|
|
```
|
|
/gsd:plan-phase 3
|
|
```
|
|
```
|
|
|
|
Fenced blocks inside templates create nesting ambiguity. Use inline backticks instead.
|