* feat(#441): add /gsd-capture --list-seeds for seed listing and audit Seeds (.planning/seeds/SEED-NNN-slug.md) could only be created (--seed), enriched (--enrich), or auto-surfaced at /gsd-new-milestone. There was no way to browse or audit parked seeds on demand. This adds a read-only listing, following the established --list → workflow pattern (per the approved scope on - gsd-tools `list-seeds [status]` (cmdListSeeds in src/commands.cts): scans the seeds dir, returns { count, seeds[], summary } JSON with each seed's id, slug, status, scope, trigger_when, planted, title. Optional case-insensitive status filter. User-controlled content is sanitized (sanitizeForDisplay) and every path validated (requireSafePath); read-only. Independent of audit.scanSeeds, which only returns unimplemented seeds for the milestone surface. - /gsd-capture --list-seeds routes to a new read-only list-seeds workflow that renders the seed table. Closes #441 * chore(#441): point changeset fragment at PR #722 * test(#441): allowlist list-seeds test in prompt-injection scan The test asserts that list-seeds neutralizes injection payloads (<system>, [INST]) embedded in seed content, so the fixtures legitimately contain those patterns — same as the sibling security tests already on the allowlist. * fix(#441): use canonical /gsd:capture colon form in list-seeds workflow Claude-facing source (commands/, agents/, gsd-core/workflows/, ...) must use the /gsd:<cmd> colon form per ADR/CONTEXT.md; the hyphen /gsd-<cmd> form is retired there (enforced by bug-2543-gsd-slash-namespace.test.cjs). The new list-seeds workflow used the hyphen form. * docs(#441): sync help full.md + INVENTORY for --list-seeds Adds the --list-seeds entry to the help reference (help/modes/full.md, per bug-2954 argument-hint↔help parity) and registers the new list-seeds workflow in docs/INVENTORY.md (88→89) and the generated INVENTORY-MANIFEST.json. * docs(#441): add --list-seeds how-to + drop phantom statuses Addresses CHANGES_REQUESTED on PR #722 (two documentation blockers): - USER-GUIDE.md Seeds section (how-to): extend the task to cover auditing parked seeds on demand via --list-seeds, including the status filter — kept task-oriented per Diataxis how-to mode. - CLI-TOOLS.md (reference): drop phantom statuses implemented|rejected from the list-seeds filter vocabulary; the system only produces dormant|active|triggered (src/audit.cts scanSeeds). Reference must be factually accurate and complete. * fix(#441): guard non-scalar status frontmatter in cmdListSeeds A seed with a bare `status:` line (extractFrontmatter yields {}) or a `status: [a, b]` value (yields an array) crashed the whole audit list: `(fm.status || 'dormant').toLowerCase()` throws a TypeError on a non-string. Coerce every frontmatter read through a `fmStr` helper (mirrors the existing `typeof fm.id === 'string'` guard), so a non-scalar status falls back to dormant and non-scalar scope/trigger_when/title can no longer leak a raw array/object into the JSON contract. Title is now capped symmetrically. Adds regression coverage for empty and array `status:` and non-scalar fields. Refs #441 * docs(#441): align list-seeds workflow status vocabulary The load_seeds step listed `implemented` as an example status filter, but the real seed vocabulary is dormant|active|triggered (src/audit.cts scanSeeds); `implemented` has no producer. Matches the earlier CLI-TOOLS.md correction. Refs #441 * refactor(#441): extract pure deriveSeedIdentity; match raw status in list-seeds Pull the seed_id/slug derivation out of cmdListSeeds into a pure, exported deriveSeedIdentity(stem, rawFmId) so the parsing contract can be property-tested in-process (review minor #1). No behavior change. Filter comparison now matches the raw lowercased status (both sides already normalized) instead of sanitizeForDisplay(status); sanitization is for output, not matching (review nit #3). * test(#441): add fast-check property coverage and count=1 boundary for list-seeds Adds tests/list-seeds.property.test.cjs with four fast-check properties over deriveSeedIdentity (never-throws, string-only contract, canonical id->seed_id/slug invariant, filename-prefix fallback) per RULESET.TESTS.property-based-testing (review minor #1). Adds an N==1 status-filter boundary case to list-seeds.test.cjs (review minor #2). * chore(#441): sync runtime launcher snippet into list-seeds workflow Propagate the current _runtime-launcher.snippet.sh (with non-Claude runtime home probes) into the new list-seeds.md workflow via scripts/sync-runtime-launcher.cjs, satisfying bug-891 (E) propagation. * test(#441): record list-seeds.md in workflow size baseline (#1074) --------- Co-authored-by: Tom Boucher <trekkie@nomorestars.com>
92 lines
2.3 KiB
JSON
92 lines
2.3 KiB
JSON
{
|
|
"add-backlog.md": 7132,
|
|
"add-phase.md": 7203,
|
|
"add-tests.md": 16901,
|
|
"add-todo.md": 8952,
|
|
"ai-integration-phase.md": 14761,
|
|
"analyze-dependencies.md": 3887,
|
|
"audit-fix.md": 10988,
|
|
"audit-milestone.md": 17637,
|
|
"audit-uat.md": 7425,
|
|
"autonomous.md": 42778,
|
|
"check-todos.md": 9431,
|
|
"cleanup.md": 9897,
|
|
"code-review-fix.md": 23890,
|
|
"code-review.md": 31602,
|
|
"complete-milestone.md": 29987,
|
|
"debug.md": 13505,
|
|
"diagnose-issues.md": 12820,
|
|
"discovery-phase.md": 8651,
|
|
"discuss-phase-assumptions.md": 26984,
|
|
"discuss-phase-power.md": 11273,
|
|
"discuss-phase.md": 31990,
|
|
"do.md": 10068,
|
|
"docs-update.md": 55662,
|
|
"edit-phase.md": 12883,
|
|
"eval-review.md": 9923,
|
|
"execute-phase.md": 93426,
|
|
"execute-plan.md": 31365,
|
|
"explore.md": 10497,
|
|
"extract-learnings.md": 12849,
|
|
"fast.md": 4149,
|
|
"forensics.md": 12463,
|
|
"graduation.md": 11578,
|
|
"health.md": 11824,
|
|
"help.md": 1722,
|
|
"import.md": 14604,
|
|
"inbox.md": 14407,
|
|
"ingest-docs.md": 18336,
|
|
"insert-phase.md": 8943,
|
|
"list-phase-assumptions.md": 4305,
|
|
"list-seeds.md": 6943,
|
|
"list-workspaces.md": 5655,
|
|
"manager.md": 26265,
|
|
"map-codebase.md": 20789,
|
|
"milestone-summary.md": 11774,
|
|
"mvp-phase.md": 13582,
|
|
"new-milestone.md": 32422,
|
|
"new-project.md": 61802,
|
|
"new-workspace.md": 11254,
|
|
"next.md": 20094,
|
|
"node-repair.md": 4173,
|
|
"note.md": 6563,
|
|
"pause-work.md": 14397,
|
|
"plan-milestone-gaps.md": 11765,
|
|
"plan-phase.md": 93166,
|
|
"plan-review-convergence.md": 23468,
|
|
"plant-seed.md": 11741,
|
|
"pr-branch.md": 15919,
|
|
"profile-user.md": 20650,
|
|
"progress.md": 29387,
|
|
"quick.md": 48830,
|
|
"reapply-patches.md": 20393,
|
|
"remove-phase.md": 8469,
|
|
"remove-workspace.md": 7507,
|
|
"resume-project.md": 17226,
|
|
"review.md": 39404,
|
|
"scan.md": 7688,
|
|
"secure-phase.md": 12282,
|
|
"session-report.md": 4044,
|
|
"settings-advanced.md": 39666,
|
|
"settings-integrations.md": 15848,
|
|
"settings.md": 33413,
|
|
"ship.md": 24388,
|
|
"sketch-wrap-up.md": 14223,
|
|
"sketch.md": 19960,
|
|
"spec-phase.md": 31503,
|
|
"spike-wrap-up.md": 15092,
|
|
"spike.md": 24517,
|
|
"stats.md": 6718,
|
|
"sync-skills.md": 6125,
|
|
"thread.md": 12400,
|
|
"transition.md": 21787,
|
|
"ui-phase.md": 15477,
|
|
"ui-review.md": 11289,
|
|
"ultraplan-phase.md": 10468,
|
|
"undo.md": 10431,
|
|
"update.md": 21053,
|
|
"validate-phase.md": 10745,
|
|
"verify-phase.md": 38228,
|
|
"verify-work.md": 31157
|
|
}
|