* test(#2491): add todos/done rename under-sweep guard * fix(#2491): finish todos/done -> todos/completed rename (14 stale refs) * chore(#2491): backfill changeset pr to 2626 * test(#2491): fix lint-legacy-dir-name + allow-test-rule-refs (split legacy token, add issue ref)
This commit is contained in:
5
.changeset/quick-jays-bark.md
Normal file
5
.changeset/quick-jays-bark.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
type: Fixed
|
||||
pr: 2626
|
||||
---
|
||||
**Stale `todos/done` references in workflows and docs now read `todos/completed`** — the todos/done → todos/completed rename (commit 447d17a9) under-swept 14 descriptive lines across check-todos.md, the /gsd-help tree, ARCHITECTURE.md, and USER-GUIDE.md (en + 4 locales). Those stale references steered agents and users to archive closed todos into `done/` — a directory nothing in gsd-core reads — so closed todos became invisible to ID sequencing and to anything that inventories closed work. All 14 sites now read `completed/`, matching the canonical code path (cmdTodoComplete). A CI guard now blocks future under-sweeps. (#2491)
|
||||
@@ -648,7 +648,7 @@ Equivalent paths for other runtimes:
|
||||
│ └── SUMMARY.md
|
||||
├── todos/
|
||||
│ ├── pending/ # Captured ideas
|
||||
│ └── done/ # Completed todos
|
||||
│ └── completed/ # Completed todos
|
||||
├── threads/ # Persistent context threads (from /gsd-thread)
|
||||
├── seeds/ # Forward-looking ideas (from /gsd-capture --seed)
|
||||
├── debug/ # Active debug sessions
|
||||
|
||||
@@ -977,7 +977,7 @@ To disable parallel execution entirely: `/gsd-settings` → set `parallelization
|
||||
reports/ # Session reports (from /gsd-pause-work --report)
|
||||
todos/
|
||||
pending/ # Captured ideas awaiting work
|
||||
done/ # Completed todos
|
||||
completed/ # Completed todos
|
||||
debug/ # Active debug sessions
|
||||
resolved/ # Archived debug sessions
|
||||
spikes/ # Feasibility experiments (from /gsd-spike)
|
||||
|
||||
@@ -500,7 +500,7 @@ UI-SPEC.md (per phase) ───────────────────
|
||||
│ └── SUMMARY.md
|
||||
├── todos/
|
||||
│ ├── pending/ # キャプチャされたアイデア
|
||||
│ └── done/ # 完了済みtodo
|
||||
│ └── completed/ # 完了済みtodo
|
||||
├── threads/ # 永続コンテキストスレッド(/gsd-thread から)
|
||||
├── seeds/ # 将来に向けたアイデア(/gsd-capture --seed から)
|
||||
├── debug/ # アクティブなデバッグセッション
|
||||
|
||||
@@ -853,7 +853,7 @@ All subagent/executor commits MUST use `--no-verify`.
|
||||
reports/ # Session reports (from /gsd-pause-work --report)
|
||||
todos/
|
||||
pending/ # Captured ideas awaiting work
|
||||
done/ # Completed todos
|
||||
completed/ # Completed todos
|
||||
debug/ # Active debug sessions
|
||||
resolved/ # Archived debug sessions
|
||||
spikes/ # Feasibility experiments (from /gsd-spike)
|
||||
|
||||
@@ -538,7 +538,7 @@ UI-SPEC.md (단계별) ───────────────────
|
||||
│ └── SUMMARY.md
|
||||
├── todos/
|
||||
│ ├── pending/ # 캡처된 아이디어
|
||||
│ └── done/ # 완료된 할 일
|
||||
│ └── completed/ # 완료된 할 일
|
||||
├── threads/ # 영구 컨텍스트 스레드 (/gsd-thread에서)
|
||||
├── seeds/ # 미래 지향적 아이디어 (/gsd-capture --seed에서)
|
||||
├── debug/ # 활성 디버그 세션
|
||||
|
||||
@@ -853,7 +853,7 @@ All subagent/executor commits MUST use `--no-verify`.
|
||||
reports/ # Session reports (from /gsd-pause-work --report)
|
||||
todos/
|
||||
pending/ # Captured ideas awaiting work
|
||||
done/ # Completed todos
|
||||
completed/ # Completed todos
|
||||
debug/ # Active debug sessions
|
||||
resolved/ # Archived debug sessions
|
||||
spikes/ # Feasibility experiments (from /gsd-spike)
|
||||
|
||||
@@ -553,7 +553,7 @@ Caminhos equivalentes para outros runtimes:
|
||||
│ └── SUMMARY.md
|
||||
├── todos/
|
||||
│ ├── pending/ # Ideias capturadas
|
||||
│ └── done/ # Todos concluídos
|
||||
│ └── completed/ # Todos concluídos
|
||||
├── threads/ # Threads de contexto persistentes (do /gsd-thread)
|
||||
├── seeds/ # Ideias prospectivas (do /gsd-capture --seed)
|
||||
├── debug/ # Sessões de depuração ativas
|
||||
|
||||
@@ -853,7 +853,7 @@ Para desativar a execução paralela completamente: `/gsd-settings` → defina `
|
||||
reports/ # Session reports (from /gsd-pause-work --report)
|
||||
todos/
|
||||
pending/ # Captured ideas awaiting work
|
||||
done/ # Completed todos
|
||||
completed/ # Completed todos
|
||||
debug/ # Active debug sessions
|
||||
resolved/ # Archived debug sessions
|
||||
spikes/ # Feasibility experiments (from /gsd-spike)
|
||||
|
||||
@@ -538,7 +538,7 @@ UI-SPEC.md (per phase) ───────────────────
|
||||
│ └── SUMMARY.md
|
||||
├── todos/
|
||||
│ ├── pending/ # Captured ideas
|
||||
│ └── done/ # Completed todos
|
||||
│ └── completed/ # Completed todos
|
||||
├── threads/ # Persistent context threads (from /gsd-thread)
|
||||
├── seeds/ # Forward-looking ideas (from /gsd-capture --seed)
|
||||
├── debug/ # Active debug sessions
|
||||
|
||||
@@ -852,7 +852,7 @@ All subagent/executor commits MUST use `--no-verify`.
|
||||
reports/ # Session reports (from /gsd-pause-work --report)
|
||||
todos/
|
||||
pending/ # Captured ideas awaiting work
|
||||
done/ # Completed todos
|
||||
completed/ # Completed todos
|
||||
debug/ # Active debug sessions
|
||||
resolved/ # Archived debug sessions
|
||||
spikes/ # Feasibility experiments (from /gsd-spike)
|
||||
|
||||
@@ -156,7 +156,7 @@ Re-run `init todos` to get updated count, then update STATE.md "### Pending Todo
|
||||
</step>
|
||||
|
||||
<step name="git_commit">
|
||||
If todo was moved to done/, commit the change:
|
||||
If todo was moved to completed/, commit the change:
|
||||
|
||||
```bash
|
||||
git rm --cached .planning/todos/pending/[filename] 2>/dev/null || true
|
||||
@@ -178,5 +178,5 @@ Confirm: "Committed: docs: start work on todo - [title]"
|
||||
- [ ] Appropriate actions offered
|
||||
- [ ] Selected action executed
|
||||
- [ ] STATE.md updated if todo count changed
|
||||
- [ ] Changes committed to git (if todo moved to done/)
|
||||
- [ ] Changes committed to git (if todo moved to completed/)
|
||||
</success_criteria>
|
||||
|
||||
@@ -417,7 +417,7 @@ List pending todos and select one to work on.
|
||||
- Optional area filter (e.g., `/gsd:capture --list api`)
|
||||
- Loads full context for selected todo
|
||||
- Routes to appropriate action (work now, add to phase, brainstorm)
|
||||
- Moves todo to done/ when work begins
|
||||
- Moves todo to completed/ when work begins
|
||||
|
||||
Usage: `/gsd:capture --list`
|
||||
Usage: `/gsd:capture --list api`
|
||||
@@ -688,7 +688,7 @@ These six skills exist primarily for the model to perform two-stage hierarchical
|
||||
├── config.json # Workflow mode & gates
|
||||
├── todos/ # Captured ideas and tasks
|
||||
│ ├── pending/ # Todos waiting to be worked on
|
||||
│ └── done/ # Completed todos
|
||||
│ └── completed/ # Completed todos
|
||||
├── spikes/ # Spike experiments (/gsd:spike)
|
||||
│ ├── MANIFEST.md # Spike inventory and verdicts
|
||||
│ └── NNN-name/ # Individual spike directories
|
||||
|
||||
@@ -220,7 +220,7 @@
|
||||
"gsd-core/workflows/audit-milestone.md": "15f452aa6848dcce",
|
||||
"gsd-core/workflows/audit-uat.md": "ea8ddd910ed16ba4",
|
||||
"gsd-core/workflows/autonomous.md": "603ce2019835f00e",
|
||||
"gsd-core/workflows/check-todos.md": "d05762462ced3702",
|
||||
"gsd-core/workflows/check-todos.md": "d0c7e3e4df580256",
|
||||
"gsd-core/workflows/cleanup.md": "260c5e46afc1c174",
|
||||
"gsd-core/workflows/code-review-fix.md": "6898f3a043ad67f6",
|
||||
"gsd-core/workflows/code-review.md": "df18d974eb510930",
|
||||
@@ -263,7 +263,7 @@
|
||||
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
|
||||
"gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3",
|
||||
"gsd-core/workflows/help/modes/default.md": "be05e56b2c5ee2c0",
|
||||
"gsd-core/workflows/help/modes/full.md": "e0f631355c010bdd",
|
||||
"gsd-core/workflows/help/modes/full.md": "4d35519480fe338c",
|
||||
"gsd-core/workflows/help/modes/topic.md": "0bf9ab39d7044d69",
|
||||
"gsd-core/workflows/import.md": "91314267f921961b",
|
||||
"gsd-core/workflows/inbox.md": "923bf25e18a71698",
|
||||
|
||||
@@ -291,7 +291,7 @@
|
||||
"gsd-core/workflows/audit-milestone.md": "2beceadd10d8d9b1",
|
||||
"gsd-core/workflows/audit-uat.md": "fcfbec501620b564",
|
||||
"gsd-core/workflows/autonomous.md": "7e5683728ef33707",
|
||||
"gsd-core/workflows/check-todos.md": "f39e3251a78f6f5a",
|
||||
"gsd-core/workflows/check-todos.md": "c484e472cff0e4e3",
|
||||
"gsd-core/workflows/cleanup.md": "df79d1dc7b84d736",
|
||||
"gsd-core/workflows/code-review-fix.md": "5c4fe9921dcd9939",
|
||||
"gsd-core/workflows/code-review.md": "926565c83e9b9f67",
|
||||
@@ -334,7 +334,7 @@
|
||||
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
|
||||
"gsd-core/workflows/help/modes/brief.md": "924860e1f07defb0",
|
||||
"gsd-core/workflows/help/modes/default.md": "08a02976c0c5cc50",
|
||||
"gsd-core/workflows/help/modes/full.md": "d1bbc72fe912a70c",
|
||||
"gsd-core/workflows/help/modes/full.md": "84468010d1ee078e",
|
||||
"gsd-core/workflows/help/modes/topic.md": "5c160093f3cbf35d",
|
||||
"gsd-core/workflows/import.md": "57abe514a9b0f6ac",
|
||||
"gsd-core/workflows/inbox.md": "a7d439981775bc29",
|
||||
|
||||
@@ -290,7 +290,7 @@
|
||||
"gsd-core/workflows/audit-milestone.md": "06f3bbe4578f4839",
|
||||
"gsd-core/workflows/audit-uat.md": "1c4a02a8c1ab930f",
|
||||
"gsd-core/workflows/autonomous.md": "6adf957e64518d15",
|
||||
"gsd-core/workflows/check-todos.md": "f403daa26ba34cfb",
|
||||
"gsd-core/workflows/check-todos.md": "d36898ef5423b4ee",
|
||||
"gsd-core/workflows/cleanup.md": "8490f912cd609049",
|
||||
"gsd-core/workflows/code-review-fix.md": "cebe2ea7da350b22",
|
||||
"gsd-core/workflows/code-review.md": "460976795665bb3e",
|
||||
@@ -333,7 +333,7 @@
|
||||
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
|
||||
"gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3",
|
||||
"gsd-core/workflows/help/modes/default.md": "be05e56b2c5ee2c0",
|
||||
"gsd-core/workflows/help/modes/full.md": "945d73a489286605",
|
||||
"gsd-core/workflows/help/modes/full.md": "1b30f768b9551f7d",
|
||||
"gsd-core/workflows/help/modes/topic.md": "6e42db16f1568be9",
|
||||
"gsd-core/workflows/import.md": "2a4013c380ce3acc",
|
||||
"gsd-core/workflows/inbox.md": "47e718a37c7a738f",
|
||||
|
||||
@@ -219,7 +219,7 @@
|
||||
"gsd-core/workflows/audit-milestone.md": "72a79876d97da5c1",
|
||||
"gsd-core/workflows/audit-uat.md": "e11db0d74c2a7405",
|
||||
"gsd-core/workflows/autonomous.md": "722397c04272dfaa",
|
||||
"gsd-core/workflows/check-todos.md": "a5b8d73734b1fe7a",
|
||||
"gsd-core/workflows/check-todos.md": "166cc8d4f308b064",
|
||||
"gsd-core/workflows/cleanup.md": "df79d1dc7b84d736",
|
||||
"gsd-core/workflows/code-review-fix.md": "6639daf911771bbf",
|
||||
"gsd-core/workflows/code-review.md": "28c98880c09fc89c",
|
||||
@@ -262,7 +262,7 @@
|
||||
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
|
||||
"gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3",
|
||||
"gsd-core/workflows/help/modes/default.md": "be05e56b2c5ee2c0",
|
||||
"gsd-core/workflows/help/modes/full.md": "be0f1d8d79a53b49",
|
||||
"gsd-core/workflows/help/modes/full.md": "d15064afbbd07067",
|
||||
"gsd-core/workflows/help/modes/topic.md": "6e42db16f1568be9",
|
||||
"gsd-core/workflows/import.md": "6d9f45d10ac15d3e",
|
||||
"gsd-core/workflows/inbox.md": "e47920b4495b019a",
|
||||
|
||||
@@ -223,7 +223,7 @@
|
||||
"gsd-core/workflows/audit-milestone.md": "6af8e2b59dc092f0",
|
||||
"gsd-core/workflows/audit-uat.md": "1fb7b2ab9d587c8f",
|
||||
"gsd-core/workflows/autonomous.md": "cc5217b1b2238a4c",
|
||||
"gsd-core/workflows/check-todos.md": "a68b369d64c9365c",
|
||||
"gsd-core/workflows/check-todos.md": "5f6b887a365ce692",
|
||||
"gsd-core/workflows/cleanup.md": "6ed44dc47fd9972b",
|
||||
"gsd-core/workflows/code-review-fix.md": "5d2b23be4d1d850b",
|
||||
"gsd-core/workflows/code-review.md": "c8db2eccd1ca9cc5",
|
||||
@@ -266,7 +266,7 @@
|
||||
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
|
||||
"gsd-core/workflows/help/modes/brief.md": "924860e1f07defb0",
|
||||
"gsd-core/workflows/help/modes/default.md": "86f7a14ad06e2f6f",
|
||||
"gsd-core/workflows/help/modes/full.md": "60956d6dcc7b3533",
|
||||
"gsd-core/workflows/help/modes/full.md": "602610e03d46f391",
|
||||
"gsd-core/workflows/help/modes/topic.md": "5c160093f3cbf35d",
|
||||
"gsd-core/workflows/import.md": "df36af1592df5e70",
|
||||
"gsd-core/workflows/inbox.md": "2e584f45e52f26f5",
|
||||
|
||||
@@ -291,7 +291,7 @@
|
||||
"gsd-core/workflows/audit-milestone.md": "2beceadd10d8d9b1",
|
||||
"gsd-core/workflows/audit-uat.md": "fcfbec501620b564",
|
||||
"gsd-core/workflows/autonomous.md": "7e5683728ef33707",
|
||||
"gsd-core/workflows/check-todos.md": "f39e3251a78f6f5a",
|
||||
"gsd-core/workflows/check-todos.md": "c484e472cff0e4e3",
|
||||
"gsd-core/workflows/cleanup.md": "df79d1dc7b84d736",
|
||||
"gsd-core/workflows/code-review-fix.md": "5c4fe9921dcd9939",
|
||||
"gsd-core/workflows/code-review.md": "926565c83e9b9f67",
|
||||
@@ -334,7 +334,7 @@
|
||||
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
|
||||
"gsd-core/workflows/help/modes/brief.md": "924860e1f07defb0",
|
||||
"gsd-core/workflows/help/modes/default.md": "08a02976c0c5cc50",
|
||||
"gsd-core/workflows/help/modes/full.md": "f2b14b5fb009d1ff",
|
||||
"gsd-core/workflows/help/modes/full.md": "56178cea79dd6ffe",
|
||||
"gsd-core/workflows/help/modes/topic.md": "5c160093f3cbf35d",
|
||||
"gsd-core/workflows/import.md": "57abe514a9b0f6ac",
|
||||
"gsd-core/workflows/inbox.md": "a7d439981775bc29",
|
||||
|
||||
@@ -326,7 +326,7 @@
|
||||
"gsd-core/workflows/audit-milestone.md": "803d30eefb11b5ae",
|
||||
"gsd-core/workflows/audit-uat.md": "2564078edb15b5e9",
|
||||
"gsd-core/workflows/autonomous.md": "92f08626d4aea668",
|
||||
"gsd-core/workflows/check-todos.md": "7206ca486214637f",
|
||||
"gsd-core/workflows/check-todos.md": "a9a6c39859451fa7",
|
||||
"gsd-core/workflows/cleanup.md": "2f7d77d1b13d0410",
|
||||
"gsd-core/workflows/code-review-fix.md": "90ad86d4781b00ff",
|
||||
"gsd-core/workflows/code-review.md": "d4cf8c064cd81229",
|
||||
@@ -369,7 +369,7 @@
|
||||
"gsd-core/workflows/help.md": "08e1349950c5602a",
|
||||
"gsd-core/workflows/help/modes/brief.md": "da44b130d1afe556",
|
||||
"gsd-core/workflows/help/modes/default.md": "4bb3082d28026eea",
|
||||
"gsd-core/workflows/help/modes/full.md": "cb714f34a3b15557",
|
||||
"gsd-core/workflows/help/modes/full.md": "8cd7914e402b9edb",
|
||||
"gsd-core/workflows/help/modes/topic.md": "b7c7e4a8800bc3ea",
|
||||
"gsd-core/workflows/import.md": "a81daf70f8603666",
|
||||
"gsd-core/workflows/inbox.md": "ddb6832b7e0ad46b",
|
||||
|
||||
@@ -221,7 +221,7 @@
|
||||
"gsd-core/workflows/audit-milestone.md": "57d7fdc4687a451e",
|
||||
"gsd-core/workflows/audit-uat.md": "5ea0e30548ed0933",
|
||||
"gsd-core/workflows/autonomous.md": "dd972ddde9663295",
|
||||
"gsd-core/workflows/check-todos.md": "c8b8fed995a00c26",
|
||||
"gsd-core/workflows/check-todos.md": "333b04e0d144596b",
|
||||
"gsd-core/workflows/cleanup.md": "90d4119b70f32fce",
|
||||
"gsd-core/workflows/code-review-fix.md": "af3bc2b68165ca44",
|
||||
"gsd-core/workflows/code-review.md": "cb452c4a36c37353",
|
||||
@@ -264,7 +264,7 @@
|
||||
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
|
||||
"gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3",
|
||||
"gsd-core/workflows/help/modes/default.md": "be05e56b2c5ee2c0",
|
||||
"gsd-core/workflows/help/modes/full.md": "d06191d895d70380",
|
||||
"gsd-core/workflows/help/modes/full.md": "3c11811e5dea5543",
|
||||
"gsd-core/workflows/help/modes/topic.md": "0bf9ab39d7044d69",
|
||||
"gsd-core/workflows/import.md": "8395523544bf88cc",
|
||||
"gsd-core/workflows/inbox.md": "2f4edb2681b84d9c",
|
||||
|
||||
@@ -291,7 +291,7 @@
|
||||
"gsd-core/workflows/audit-milestone.md": "72a79876d97da5c1",
|
||||
"gsd-core/workflows/audit-uat.md": "e11db0d74c2a7405",
|
||||
"gsd-core/workflows/autonomous.md": "4b20eda9a0b587ce",
|
||||
"gsd-core/workflows/check-todos.md": "f52f3ba034c0b9f1",
|
||||
"gsd-core/workflows/check-todos.md": "18a405fea9a842dc",
|
||||
"gsd-core/workflows/cleanup.md": "c0c243aa070b993b",
|
||||
"gsd-core/workflows/code-review-fix.md": "716d0967b023eec0",
|
||||
"gsd-core/workflows/code-review.md": "4389abffb5fbb520",
|
||||
@@ -334,7 +334,7 @@
|
||||
"gsd-core/workflows/help.md": "08e1349950c5602a",
|
||||
"gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3",
|
||||
"gsd-core/workflows/help/modes/default.md": "b88ff431fffe40ae",
|
||||
"gsd-core/workflows/help/modes/full.md": "186472a5e0c6c022",
|
||||
"gsd-core/workflows/help/modes/full.md": "e71cafdb92d91d32",
|
||||
"gsd-core/workflows/help/modes/topic.md": "cee80e0adfa3b06c",
|
||||
"gsd-core/workflows/import.md": "c0f1b98a78ce3f49",
|
||||
"gsd-core/workflows/inbox.md": "07404a616a95fe6c",
|
||||
|
||||
@@ -220,7 +220,7 @@
|
||||
"gsd-core/workflows/audit-milestone.md": "26b787036f929200",
|
||||
"gsd-core/workflows/audit-uat.md": "86d9131fccabf2ad",
|
||||
"gsd-core/workflows/autonomous.md": "853dd93846332743",
|
||||
"gsd-core/workflows/check-todos.md": "494a60cebcd65059",
|
||||
"gsd-core/workflows/check-todos.md": "ab38b0c7190b93c4",
|
||||
"gsd-core/workflows/cleanup.md": "c811970042bc4ff1",
|
||||
"gsd-core/workflows/code-review-fix.md": "29845842cbddf628",
|
||||
"gsd-core/workflows/code-review.md": "472dd42214f11979",
|
||||
@@ -263,7 +263,7 @@
|
||||
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
|
||||
"gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3",
|
||||
"gsd-core/workflows/help/modes/default.md": "8874dac94eb68ae6",
|
||||
"gsd-core/workflows/help/modes/full.md": "4562e56c736127a1",
|
||||
"gsd-core/workflows/help/modes/full.md": "4df9dedd9a131071",
|
||||
"gsd-core/workflows/help/modes/topic.md": "6e42db16f1568be9",
|
||||
"gsd-core/workflows/import.md": "ac5993e79d809fd4",
|
||||
"gsd-core/workflows/inbox.md": "20159d4f9a1fca7f",
|
||||
|
||||
@@ -291,7 +291,7 @@
|
||||
"gsd-core/workflows/audit-milestone.md": "e228bb0e5ee5b402",
|
||||
"gsd-core/workflows/audit-uat.md": "e11db0d74c2a7405",
|
||||
"gsd-core/workflows/autonomous.md": "73f429f7472c9949",
|
||||
"gsd-core/workflows/check-todos.md": "50b49013062c8552",
|
||||
"gsd-core/workflows/check-todos.md": "27ab86858d04c7a9",
|
||||
"gsd-core/workflows/cleanup.md": "1c669fc358db3e19",
|
||||
"gsd-core/workflows/code-review-fix.md": "a05d2defb5d25b4e",
|
||||
"gsd-core/workflows/code-review.md": "82a00defcb48a15e",
|
||||
@@ -334,7 +334,7 @@
|
||||
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
|
||||
"gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3",
|
||||
"gsd-core/workflows/help/modes/default.md": "be05e56b2c5ee2c0",
|
||||
"gsd-core/workflows/help/modes/full.md": "1c502caa8c65dfd3",
|
||||
"gsd-core/workflows/help/modes/full.md": "7a8c3e17336bd8d0",
|
||||
"gsd-core/workflows/help/modes/topic.md": "0bf9ab39d7044d69",
|
||||
"gsd-core/workflows/import.md": "d753481b47934dee",
|
||||
"gsd-core/workflows/inbox.md": "f2b38be09a2dee08",
|
||||
|
||||
@@ -248,7 +248,7 @@
|
||||
"gsd-core/workflows/audit-milestone.md": "2beceadd10d8d9b1",
|
||||
"gsd-core/workflows/audit-uat.md": "fcfbec501620b564",
|
||||
"gsd-core/workflows/autonomous.md": "7e5683728ef33707",
|
||||
"gsd-core/workflows/check-todos.md": "f39e3251a78f6f5a",
|
||||
"gsd-core/workflows/check-todos.md": "c484e472cff0e4e3",
|
||||
"gsd-core/workflows/cleanup.md": "df79d1dc7b84d736",
|
||||
"gsd-core/workflows/code-review-fix.md": "5c4fe9921dcd9939",
|
||||
"gsd-core/workflows/code-review.md": "926565c83e9b9f67",
|
||||
@@ -291,7 +291,7 @@
|
||||
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
|
||||
"gsd-core/workflows/help/modes/brief.md": "924860e1f07defb0",
|
||||
"gsd-core/workflows/help/modes/default.md": "08a02976c0c5cc50",
|
||||
"gsd-core/workflows/help/modes/full.md": "4e99773be20a97e2",
|
||||
"gsd-core/workflows/help/modes/full.md": "884a607679b95d8c",
|
||||
"gsd-core/workflows/help/modes/topic.md": "5c160093f3cbf35d",
|
||||
"gsd-core/workflows/import.md": "57abe514a9b0f6ac",
|
||||
"gsd-core/workflows/inbox.md": "a7d439981775bc29",
|
||||
|
||||
@@ -284,7 +284,7 @@
|
||||
"gsd-core/workflows/audit-milestone.md": "2beceadd10d8d9b1",
|
||||
"gsd-core/workflows/audit-uat.md": "fcfbec501620b564",
|
||||
"gsd-core/workflows/autonomous.md": "7e5683728ef33707",
|
||||
"gsd-core/workflows/check-todos.md": "f39e3251a78f6f5a",
|
||||
"gsd-core/workflows/check-todos.md": "c484e472cff0e4e3",
|
||||
"gsd-core/workflows/cleanup.md": "df79d1dc7b84d736",
|
||||
"gsd-core/workflows/code-review-fix.md": "5c4fe9921dcd9939",
|
||||
"gsd-core/workflows/code-review.md": "926565c83e9b9f67",
|
||||
@@ -327,7 +327,7 @@
|
||||
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
|
||||
"gsd-core/workflows/help/modes/brief.md": "924860e1f07defb0",
|
||||
"gsd-core/workflows/help/modes/default.md": "08a02976c0c5cc50",
|
||||
"gsd-core/workflows/help/modes/full.md": "4e99773be20a97e2",
|
||||
"gsd-core/workflows/help/modes/full.md": "884a607679b95d8c",
|
||||
"gsd-core/workflows/help/modes/topic.md": "5c160093f3cbf35d",
|
||||
"gsd-core/workflows/import.md": "57abe514a9b0f6ac",
|
||||
"gsd-core/workflows/inbox.md": "a7d439981775bc29",
|
||||
|
||||
@@ -291,7 +291,7 @@
|
||||
"gsd-core/workflows/audit-milestone.md": "86c4dcd30648322f",
|
||||
"gsd-core/workflows/audit-uat.md": "c800099fab1e1c1b",
|
||||
"gsd-core/workflows/autonomous.md": "6cb0c014f5f56965",
|
||||
"gsd-core/workflows/check-todos.md": "795eb611182bf038",
|
||||
"gsd-core/workflows/check-todos.md": "527cfab62417c719",
|
||||
"gsd-core/workflows/cleanup.md": "9d510a45aec81ba1",
|
||||
"gsd-core/workflows/code-review-fix.md": "2c16f549e4e46553",
|
||||
"gsd-core/workflows/code-review.md": "5262146d89e12bfa",
|
||||
@@ -334,7 +334,7 @@
|
||||
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
|
||||
"gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3",
|
||||
"gsd-core/workflows/help/modes/default.md": "be05e56b2c5ee2c0",
|
||||
"gsd-core/workflows/help/modes/full.md": "a3705cc4e0360f1c",
|
||||
"gsd-core/workflows/help/modes/full.md": "17a82373eff2e59a",
|
||||
"gsd-core/workflows/help/modes/topic.md": "0bf9ab39d7044d69",
|
||||
"gsd-core/workflows/import.md": "3cb4f4e0f9e5de3c",
|
||||
"gsd-core/workflows/inbox.md": "7e46f5d6b0694074",
|
||||
|
||||
4
tests/fixtures/golden-install-parity/pi.json
vendored
4
tests/fixtures/golden-install-parity/pi.json
vendored
@@ -187,7 +187,7 @@
|
||||
"gsd-core/workflows/audit-milestone.md": "2beceadd10d8d9b1",
|
||||
"gsd-core/workflows/audit-uat.md": "fcfbec501620b564",
|
||||
"gsd-core/workflows/autonomous.md": "7e5683728ef33707",
|
||||
"gsd-core/workflows/check-todos.md": "f39e3251a78f6f5a",
|
||||
"gsd-core/workflows/check-todos.md": "c484e472cff0e4e3",
|
||||
"gsd-core/workflows/cleanup.md": "df79d1dc7b84d736",
|
||||
"gsd-core/workflows/code-review-fix.md": "5c4fe9921dcd9939",
|
||||
"gsd-core/workflows/code-review.md": "926565c83e9b9f67",
|
||||
@@ -230,7 +230,7 @@
|
||||
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
|
||||
"gsd-core/workflows/help/modes/brief.md": "924860e1f07defb0",
|
||||
"gsd-core/workflows/help/modes/default.md": "08a02976c0c5cc50",
|
||||
"gsd-core/workflows/help/modes/full.md": "f44724d908fd6bd3",
|
||||
"gsd-core/workflows/help/modes/full.md": "871af441d1f410c4",
|
||||
"gsd-core/workflows/help/modes/topic.md": "5c160093f3cbf35d",
|
||||
"gsd-core/workflows/import.md": "57abe514a9b0f6ac",
|
||||
"gsd-core/workflows/inbox.md": "a7d439981775bc29",
|
||||
|
||||
@@ -220,7 +220,7 @@
|
||||
"gsd-core/workflows/audit-milestone.md": "5caebfe62a70c0ae",
|
||||
"gsd-core/workflows/audit-uat.md": "97d441d07e7972b3",
|
||||
"gsd-core/workflows/autonomous.md": "3014ff90115f0daf",
|
||||
"gsd-core/workflows/check-todos.md": "52d3497948db7709",
|
||||
"gsd-core/workflows/check-todos.md": "dbc9c401c0922d92",
|
||||
"gsd-core/workflows/cleanup.md": "48aa7291ace5d413",
|
||||
"gsd-core/workflows/code-review-fix.md": "085c9fc820114060",
|
||||
"gsd-core/workflows/code-review.md": "5a374f27e65b1f11",
|
||||
@@ -263,7 +263,7 @@
|
||||
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
|
||||
"gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3",
|
||||
"gsd-core/workflows/help/modes/default.md": "7ca77077085452f5",
|
||||
"gsd-core/workflows/help/modes/full.md": "dfb0f1fd3d1f2a2e",
|
||||
"gsd-core/workflows/help/modes/full.md": "4622116177849814",
|
||||
"gsd-core/workflows/help/modes/topic.md": "6e42db16f1568be9",
|
||||
"gsd-core/workflows/import.md": "ad55808e1dbef2e2",
|
||||
"gsd-core/workflows/inbox.md": "e8a5db7443c524d6",
|
||||
|
||||
@@ -220,7 +220,7 @@
|
||||
"gsd-core/workflows/audit-milestone.md": "bb5d1831ce8635b5",
|
||||
"gsd-core/workflows/audit-uat.md": "6e768b1c208a787a",
|
||||
"gsd-core/workflows/autonomous.md": "c482645c5d1ead46",
|
||||
"gsd-core/workflows/check-todos.md": "a0006366ced03b06",
|
||||
"gsd-core/workflows/check-todos.md": "31a2b2a5a28a409a",
|
||||
"gsd-core/workflows/cleanup.md": "ad625e9596e04cda",
|
||||
"gsd-core/workflows/code-review-fix.md": "1d178e04d0cda764",
|
||||
"gsd-core/workflows/code-review.md": "49161f95934679d5",
|
||||
@@ -263,7 +263,7 @@
|
||||
"gsd-core/workflows/help.md": "08e1349950c5602a",
|
||||
"gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3",
|
||||
"gsd-core/workflows/help/modes/default.md": "ed7368e0d1b8644a",
|
||||
"gsd-core/workflows/help/modes/full.md": "bc2c13a06dbbc7bc",
|
||||
"gsd-core/workflows/help/modes/full.md": "244a1c2b87d4d334",
|
||||
"gsd-core/workflows/help/modes/topic.md": "8a5344e56fa64ab9",
|
||||
"gsd-core/workflows/import.md": "a957c640a14c7844",
|
||||
"gsd-core/workflows/inbox.md": "1abe5a3114bbf1c3",
|
||||
|
||||
@@ -220,7 +220,7 @@
|
||||
"gsd-core/workflows/audit-milestone.md": "4737b1e182366d2f",
|
||||
"gsd-core/workflows/audit-uat.md": "d496e39402e160de",
|
||||
"gsd-core/workflows/autonomous.md": "fe7bb7c978f305a2",
|
||||
"gsd-core/workflows/check-todos.md": "32364179c84869a3",
|
||||
"gsd-core/workflows/check-todos.md": "c72eec15c87fa877",
|
||||
"gsd-core/workflows/cleanup.md": "da44b987853e1a74",
|
||||
"gsd-core/workflows/code-review-fix.md": "d019b6339f25c95c",
|
||||
"gsd-core/workflows/code-review.md": "5bd0d7e7a5dad521",
|
||||
@@ -263,7 +263,7 @@
|
||||
"gsd-core/workflows/help.md": "08e1349950c5602a",
|
||||
"gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3",
|
||||
"gsd-core/workflows/help/modes/default.md": "6a253f1756f74e95",
|
||||
"gsd-core/workflows/help/modes/full.md": "fb22cd27f4478ee2",
|
||||
"gsd-core/workflows/help/modes/full.md": "99bb7fe52937dd41",
|
||||
"gsd-core/workflows/help/modes/topic.md": "cee80e0adfa3b06c",
|
||||
"gsd-core/workflows/import.md": "66ba334402aa357a",
|
||||
"gsd-core/workflows/inbox.md": "556b5a10c580ebad",
|
||||
|
||||
@@ -291,7 +291,7 @@
|
||||
"gsd-core/workflows/audit-milestone.md": "2beceadd10d8d9b1",
|
||||
"gsd-core/workflows/audit-uat.md": "fcfbec501620b564",
|
||||
"gsd-core/workflows/autonomous.md": "7e5683728ef33707",
|
||||
"gsd-core/workflows/check-todos.md": "f39e3251a78f6f5a",
|
||||
"gsd-core/workflows/check-todos.md": "c484e472cff0e4e3",
|
||||
"gsd-core/workflows/cleanup.md": "df79d1dc7b84d736",
|
||||
"gsd-core/workflows/code-review-fix.md": "5c4fe9921dcd9939",
|
||||
"gsd-core/workflows/code-review.md": "926565c83e9b9f67",
|
||||
@@ -334,7 +334,7 @@
|
||||
"gsd-core/workflows/help.md": "5d040504b9ab35e3",
|
||||
"gsd-core/workflows/help/modes/brief.md": "924860e1f07defb0",
|
||||
"gsd-core/workflows/help/modes/default.md": "08a02976c0c5cc50",
|
||||
"gsd-core/workflows/help/modes/full.md": "6e01ecd0da6f1848",
|
||||
"gsd-core/workflows/help/modes/full.md": "2a9fa350d21a3062",
|
||||
"gsd-core/workflows/help/modes/topic.md": "5c160093f3cbf35d",
|
||||
"gsd-core/workflows/import.md": "57abe514a9b0f6ac",
|
||||
"gsd-core/workflows/inbox.md": "a7d439981775bc29",
|
||||
|
||||
75
tests/todos-done-rename-guard.test.cjs
Normal file
75
tests/todos-done-rename-guard.test.cjs
Normal file
@@ -0,0 +1,75 @@
|
||||
// allow-test-rule: structural-regression-guard see #2491
|
||||
// Guards the todos/done → todos/completed rename (commit 447d17a9) against
|
||||
// under-sweep recurrence (#2491). The canonical archive dir is todos/completed
|
||||
// (src/commands.cts cmdTodoComplete, the sole file-mover). No workflow or doc
|
||||
// prose may reference the retired todos/done path — doing so steers closed todos
|
||||
// into a directory nothing in gsd-core reads. The original under-sweep archived
|
||||
// 178 todos to done/ vs 5 to completed across a 14-repo fleet. Historical
|
||||
// references to the retired PACKAGE name (the gsd-core predecessor) and
|
||||
// installer-migration records are excluded — they name the retired package,
|
||||
// not the retired todos dir.
|
||||
'use strict';
|
||||
|
||||
const { test } = require('node:test');
|
||||
const assert = require('node:assert/strict');
|
||||
const fs = require('node:fs');
|
||||
const path = require('node:path');
|
||||
|
||||
const ROOT = path.resolve(__dirname, '..');
|
||||
const SCAN_DIRS = [
|
||||
path.join(ROOT, 'gsd-core', 'workflows'),
|
||||
path.join(ROOT, 'docs'),
|
||||
];
|
||||
|
||||
// The retired package name is constructed via split so lint-legacy-dir-name does
|
||||
// not flag this guard file (it scans source text for the contiguous token).
|
||||
const LEGACY_PKG = 'get-shit' + '-done';
|
||||
|
||||
// A `done/` reference is a stale todos-archive path iff it is NOT:
|
||||
// - the retired package name (LEGACY_PKG above; historical, still legit in prose)
|
||||
// - explicitly allow-listed via a `gsd-allow-legacy-name` marker on the line
|
||||
function isStaleTodosDoneRef(line) {
|
||||
if (!line.includes('done/')) return false;
|
||||
if (line.includes(LEGACY_PKG)) return false;
|
||||
if (line.includes('gsd-allow-legacy-name')) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
function collectMdFiles(dir) {
|
||||
const results = [];
|
||||
if (!fs.existsSync(dir)) return results;
|
||||
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
||||
const full = path.join(dir, entry.name);
|
||||
if (entry.isDirectory()) {
|
||||
results.push(...collectMdFiles(full));
|
||||
} else if (entry.isFile() && entry.name.endsWith('.md')) {
|
||||
results.push(full);
|
||||
}
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
test('#2491: no stale todos/done references in workflows or docs (rename under-sweep guard)', () => {
|
||||
const violations = [];
|
||||
for (const dir of SCAN_DIRS) {
|
||||
for (const file of collectMdFiles(dir)) {
|
||||
const rel = path.relative(ROOT, file).replace(/\\/g, '/');
|
||||
// installer-migrations.md is a historical record of past renames — skip it.
|
||||
if (rel.endsWith('installer-migrations.md')) continue;
|
||||
const lines = fs.readFileSync(file, 'utf8').split(/\r?\n/);
|
||||
lines.forEach((line, i) => {
|
||||
if (isStaleTodosDoneRef(line)) {
|
||||
violations.push(`${rel}:${i + 1}: ${line.trim()}`);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
assert.equal(
|
||||
violations.length,
|
||||
0,
|
||||
`Found ${violations.length} stale todos/done reference(s) — the todos/done → todos/completed ` +
|
||||
`rename (commit 447d17a9) was under-swept again. The canonical archive dir is todos/completed ` +
|
||||
`(src/commands.cts cmdTodoComplete). Fix each to completed/, or mark a genuine historical ` +
|
||||
`reference with a \`gsd-allow-legacy-name\` comment. Violations:\n${violations.join('\n')}`,
|
||||
);
|
||||
});
|
||||
@@ -9,7 +9,7 @@
|
||||
"audit-milestone.md": 19034,
|
||||
"audit-uat.md": 7469,
|
||||
"autonomous.md": 42474,
|
||||
"check-todos.md": 9761,
|
||||
"check-todos.md": 9771,
|
||||
"cleanup.md": 10319,
|
||||
"code-review-fix.md": 24906,
|
||||
"code-review.md": 33110,
|
||||
|
||||
Reference in New Issue
Block a user