diff --git a/cmd/specsync/main.go b/cmd/specsync/main.go index 6315e7e..4f12561 100644 --- a/cmd/specsync/main.go +++ b/cmd/specsync/main.go @@ -33,7 +33,7 @@ var knownSubcommands = map[string]bool{ "sync": true, "audit": true, "audit-tasks": true, "validate": true, "spinoff": true, "pr-body": true, "verify": true, "agent-help": true, "doctor": true, "idea": true, "ideas": true, "archive": true, - "epic": true, "adopt": true, + "epic": true, "adopt": true, "topology": true, } // knownConfusions maps a word someone might reach for by habit (e.g. git's @@ -94,7 +94,7 @@ func deprecatedSlugFlag(args []string) error { func main() { cmd, rest, err := resolveSubcommand(os.Args[1:]) if err != nil { - fmt.Fprintf(os.Stderr, "specsync: %v\n\nRun with no subcommand (optionally with flags) to sync, or use one of: pull, adopt, link, scan, trace, release-plan, changelog, install-skill, changes, set-stage, set-priority, note, audit, audit-tasks, validate, spinoff, pr-body, verify, idea, ideas, archive, epic\n", err) + fmt.Fprintf(os.Stderr, "specsync: %v\n\nRun with no subcommand (optionally with flags) to sync, or use one of: pull, adopt, link, scan, trace, release-plan, changelog, install-skill, changes, set-stage, set-priority, note, audit, audit-tasks, validate, spinoff, pr-body, verify, idea, ideas, archive, epic, topology\n", err) os.Exit(2) } @@ -151,6 +151,8 @@ func main() { runArchive(rest) case "epic": runEpic(rest) + case "topology": + runTopology(rest) default: runSync(rest) } diff --git a/openspec/changes/restore-topology-dispatch/proposal.md b/openspec/changes/restore-topology-dispatch/proposal.md new file mode 100644 index 0000000..44ea6e3 --- /dev/null +++ b/openspec/changes/restore-topology-dispatch/proposal.md @@ -0,0 +1,26 @@ +# Restore the topology command and fix stale "soon" badges on the site + +## Why +PR #174 (store support) was rebased from a branch that predated two pieces of +already-shipped work: the `topology` subcommand's dispatch wiring in +`cmd/specsync/main.go`, and the "See who's already working what" feature card +on specsync.se. The flat-diff reapplication silently dropped the `topology` +case from `knownSubcommands` and the `main()` switch, so `specsync topology` +now fails with "unknown subcommand" even though `runTopology` and all its +tests are still present and working. + +Separately, while reviewing the site after that merge: three feature cards +(design notes overflow #139, topology #168, adopt #160) still carry a "soon" +badge even though all three shipped weeks ago. + +## What Changes +- Restore `"topology": true` in `knownSubcommands`, the `case "topology": + runTopology(rest)` dispatch arm, and `topology` in the subcommand list + printed on an unknown-subcommand error. +- Drop the stale `"status": "soon"` / `"issue"` fields from the three + already-shipped feature cards in `site/features.json`. + +## Impact +- Affected code: `cmd/specsync/main.go`, `site/features.json` +- No spec delta: restores previously-specified, previously-tested behavior + that regressed in a merge; doesn't change any contract. diff --git a/openspec/changes/restore-topology-dispatch/tasks.md b/openspec/changes/restore-topology-dispatch/tasks.md new file mode 100644 index 0000000..fa5feec --- /dev/null +++ b/openspec/changes/restore-topology-dispatch/tasks.md @@ -0,0 +1,2 @@ +- [x] Restore topology to knownSubcommands and the dispatch switch +- [x] Drop stale soon/issue fields from the three shipped feature cards diff --git a/site/features.json b/site/features.json index 2e03a9a..3dee950 100644 --- a/site/features.json +++ b/site/features.json @@ -9,9 +9,7 @@ "group": "plan", "icon": "flow", "title": "Design notes survive the worktree", - "body": "A design.md renders as ## Design notes in the synced issue, so decisions made while planning aren't lost if the local worktree is force-removed. Oversized notes overflow to a linked issue comment instead of getting truncated.", - "status": "soon", - "issue": 139 + "body": "A design.md renders as ## Design notes in the synced issue, so decisions made while planning aren't lost if the local worktree is force-removed. Oversized notes overflow to a linked issue comment instead of getting truncated." }, { "group": "plan", @@ -23,9 +21,7 @@ "group": "plan", "icon": "flow", "title": "See who's already working what", - "body": "specsync topology joins every change with its tracker issue, git branch, and worktree across coordinated stores — a read-only check before an agent starts, so it doesn't duplicate work already in flight.", - "status": "soon", - "issue": 168 + "body": "specsync topology joins every change with its tracker issue, git branch, and worktree across coordinated stores — a read-only check before an agent starts, so it doesn't duplicate work already in flight." }, { "group": "plan", @@ -49,9 +45,7 @@ "group": "collaborate", "icon": "idempotent", "title": "Adopt an existing issue", - "body": "specsync adopt -issue 3691 -change my-change binds a change and an issue that already exist independently, writing the ref cache before touching the issue body so the link holds immediately instead of racing search indexing.", - "status": "soon", - "issue": 160 + "body": "specsync adopt -issue 3691 -change my-change binds a change and an issue that already exist independently, writing the ref cache before touching the issue body so the link holds immediately instead of racing search indexing." }, { "group": "collaborate",