cleargate 0.14.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/dist/MANIFEST.json +71 -15
- package/dist/admin-api/index.cjs +0 -1
- package/dist/admin-api/index.js +1 -2
- package/dist/auth/factory.cjs +0 -1
- package/dist/auth/factory.js +2 -3
- package/dist/auth/require-token.cjs +0 -1
- package/dist/auth/require-token.js +1 -2
- package/dist/auth/token-store.cjs +0 -1
- package/dist/auth/token-store.js +1 -2
- package/dist/{bootstrap-root-QKSA5V75.js → bootstrap-root-2H5HVTCC.js} +1 -2
- package/dist/{chunk-PDE37WFQ.js → chunk-A7MSQUU7.js} +2 -3
- package/dist/{chunk-BTSZOEWC.js → chunk-P6KEDAK2.js} +0 -1
- package/dist/{chunk-E3X7IE5E.js → chunk-PY6FHGV5.js} +1 -2
- package/dist/{chunk-5DI2Z3C2.js → chunk-Y53ZZYYU.js} +1 -2
- package/dist/cli.cjs +1564 -1414
- package/dist/cli.js +1514 -1364
- package/dist/lib/ledger.cjs +0 -1
- package/dist/lib/ledger.js +1 -2
- package/dist/lib/lifecycle-reconcile.cjs +0 -1
- package/dist/lib/lifecycle-reconcile.js +2 -3
- package/dist/{whoami-EANGN46Z.js → whoami-JKQQPABQ.js} +3 -4
- package/package.json +4 -3
- package/templates/cleargate-planning/.claude/agents/architect.md +4 -2
- package/templates/cleargate-planning/.claude/agents/developer.md +4 -11
- package/templates/cleargate-planning/.claude/agents/qa.md +14 -6
- package/templates/cleargate-planning/.claude/hooks/pending-task-sentinel.sh +2 -2
- package/templates/cleargate-planning/.claude/skills/sprint-execution/SKILL.md +19 -1
- package/templates/cleargate-planning/.cleargate/config.example.yml +16 -0
- package/templates/cleargate-planning/.cleargate/scripts/close_sprint.deferred-verify.red.node.test.ts +245 -0
- package/templates/cleargate-planning/.cleargate/scripts/close_sprint.mjs +227 -0
- package/templates/cleargate-planning/.cleargate/scripts/gate-checks.json +5 -4
- package/templates/cleargate-planning/.cleargate/scripts/init_sprint.mjs +75 -2
- package/templates/cleargate-planning/.cleargate/scripts/pre_gate_common.sh +48 -0
- package/templates/cleargate-planning/.cleargate/scripts/pre_gate_runner.sh +57 -1
- package/templates/cleargate-planning/.cleargate/scripts/provision_worktree_config.sh +155 -0
- package/templates/cleargate-planning/.cleargate/scripts/qa_red_lint.mjs +380 -0
- package/templates/cleargate-planning/.cleargate/scripts/run_script.sh +34 -1
- package/templates/cleargate-planning/.cleargate/scripts/test/cr077_eviction.red.sh +113 -0
- package/templates/cleargate-planning/.cleargate/scripts/test/cr078_init.test.sh +309 -0
- package/templates/cleargate-planning/.cleargate/scripts/test/cr079_provision.red.sh +262 -0
- package/templates/cleargate-planning/.cleargate/scripts/test/cr080_wrapper.test.sh +177 -0
- package/templates/cleargate-planning/.cleargate/scripts/test/cr081_qa_red_lint.red.sh +348 -0
- package/templates/cleargate-planning/.cleargate/sprint-runs/_off-sprint/.session-totals.json +1 -0
- package/templates/cleargate-planning/.cleargate/sprint-runs/_off-sprint/token-ledger.jsonl +27 -0
- package/templates/cleargate-planning/.cleargate/templates/sprint_context.md +17 -0
- package/templates/cleargate-planning/.cleargate/templates/story.md +1 -0
- package/templates/cleargate-planning/MANIFEST.json +71 -15
- package/dist/admin-api/index.cjs.map +0 -1
- package/dist/admin-api/index.js.map +0 -1
- package/dist/auth/factory.cjs.map +0 -1
- package/dist/auth/factory.js.map +0 -1
- package/dist/auth/require-token.cjs.map +0 -1
- package/dist/auth/require-token.js.map +0 -1
- package/dist/auth/token-store.cjs.map +0 -1
- package/dist/auth/token-store.js.map +0 -1
- package/dist/bootstrap-root-QKSA5V75.js.map +0 -1
- package/dist/chunk-5DI2Z3C2.js.map +0 -1
- package/dist/chunk-BTSZOEWC.js.map +0 -1
- package/dist/chunk-E3X7IE5E.js.map +0 -1
- package/dist/chunk-PDE37WFQ.js.map +0 -1
- package/dist/cli.cjs.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/lib/ledger.cjs.map +0 -1
- package/dist/lib/ledger.js.map +0 -1
- package/dist/lib/lifecycle-reconcile.cjs.map +0 -1
- package/dist/lib/lifecycle-reconcile.js.map +0 -1
- package/dist/templates/cleargate-planning/.claude/agents/architect-reader.md +0 -61
- package/dist/templates/cleargate-planning/.claude/agents/architect-synth.md +0 -124
- package/dist/templates/cleargate-planning/.claude/agents/architect.md +0 -230
- package/dist/templates/cleargate-planning/.claude/agents/cleargate-wiki-contradict.md +0 -108
- package/dist/templates/cleargate-planning/.claude/agents/cleargate-wiki-ingest.md +0 -194
- package/dist/templates/cleargate-planning/.claude/agents/cleargate-wiki-lint.md +0 -261
- package/dist/templates/cleargate-planning/.claude/agents/cleargate-wiki-query.md +0 -143
- package/dist/templates/cleargate-planning/.claude/agents/developer.md +0 -185
- package/dist/templates/cleargate-planning/.claude/agents/devops.md +0 -257
- package/dist/templates/cleargate-planning/.claude/agents/qa.md +0 -171
- package/dist/templates/cleargate-planning/.claude/agents/reporter.md +0 -274
- package/dist/templates/cleargate-planning/.claude/hooks/pending-task-sentinel.sh +0 -209
- package/dist/templates/cleargate-planning/.claude/hooks/pre-commit-surface-gate.sh +0 -33
- package/dist/templates/cleargate-planning/.claude/hooks/pre-commit-test-ratchet.sh +0 -58
- package/dist/templates/cleargate-planning/.claude/hooks/pre-commit.sh +0 -19
- package/dist/templates/cleargate-planning/.claude/hooks/pre-edit-gate.sh +0 -162
- package/dist/templates/cleargate-planning/.claude/hooks/pre-tool-use-autonomy.sh +0 -58
- package/dist/templates/cleargate-planning/.claude/hooks/pre-tool-use-task.sh +0 -148
- package/dist/templates/cleargate-planning/.claude/hooks/session-start.sh +0 -75
- package/dist/templates/cleargate-planning/.claude/hooks/stamp-and-gate.sh +0 -43
- package/dist/templates/cleargate-planning/.claude/hooks/token-ledger.sh +0 -590
- package/dist/templates/cleargate-planning/.claude/settings.json +0 -68
- package/dist/templates/cleargate-planning/.claude/skills/flashcard/SKILL.md +0 -102
- package/dist/templates/cleargate-planning/.claude/skills/sprint-execution/SKILL.md +0 -742
- package/dist/templates/cleargate-planning/.cleargate/FLASHCARD.md +0 -7
- package/dist/templates/cleargate-planning/.cleargate/config.example.yml +0 -67
- package/dist/templates/cleargate-planning/.cleargate/config.yml +0 -18
- package/dist/templates/cleargate-planning/.cleargate/delivery/archive/.gitkeep +0 -0
- package/dist/templates/cleargate-planning/.cleargate/delivery/pending-sync/.gitkeep +0 -0
- package/dist/templates/cleargate-planning/.cleargate/knowledge/cleargate-enforcement.md +0 -551
- package/dist/templates/cleargate-planning/.cleargate/knowledge/cleargate-protocol.md +0 -878
- package/dist/templates/cleargate-planning/.cleargate/knowledge/mid-sprint-triage-rubric.md +0 -160
- package/dist/templates/cleargate-planning/.cleargate/knowledge/readiness-gates.md +0 -213
- package/dist/templates/cleargate-planning/.cleargate/knowledge/sprint-closeout-checklist.md +0 -71
- package/dist/templates/cleargate-planning/.cleargate/scripts/_migrate-schema-v3.mjs +0 -120
- package/dist/templates/cleargate-planning/.cleargate/scripts/assert_story_files.mjs +0 -265
- package/dist/templates/cleargate-planning/.cleargate/scripts/close_sprint.mjs +0 -1012
- package/dist/templates/cleargate-planning/.cleargate/scripts/collision_surface.sh +0 -114
- package/dist/templates/cleargate-planning/.cleargate/scripts/constants.mjs +0 -62
- package/dist/templates/cleargate-planning/.cleargate/scripts/dedupe_frontmatter.mjs +0 -219
- package/dist/templates/cleargate-planning/.cleargate/scripts/file_surface_diff.sh +0 -320
- package/dist/templates/cleargate-planning/.cleargate/scripts/gate-checks.json +0 -15
- package/dist/templates/cleargate-planning/.cleargate/scripts/init_gate_config.sh +0 -38
- package/dist/templates/cleargate-planning/.cleargate/scripts/init_sprint.mjs +0 -240
- package/dist/templates/cleargate-planning/.cleargate/scripts/launch_wave.mjs +0 -341
- package/dist/templates/cleargate-planning/.cleargate/scripts/lib/report-filename.mjs +0 -54
- package/dist/templates/cleargate-planning/.cleargate/scripts/pre_gate_common.sh +0 -206
- package/dist/templates/cleargate-planning/.cleargate/scripts/pre_gate_runner.sh +0 -371
- package/dist/templates/cleargate-planning/.cleargate/scripts/prefill_report.mjs +0 -280
- package/dist/templates/cleargate-planning/.cleargate/scripts/prep_doc_refresh.mjs +0 -378
- package/dist/templates/cleargate-planning/.cleargate/scripts/prep_qa_context.mjs +0 -888
- package/dist/templates/cleargate-planning/.cleargate/scripts/run_script.sh +0 -209
- package/dist/templates/cleargate-planning/.cleargate/scripts/sprint_trends.mjs +0 -71
- package/dist/templates/cleargate-planning/.cleargate/scripts/state.schema.json +0 -127
- package/dist/templates/cleargate-planning/.cleargate/scripts/suggest_improvements.mjs +0 -717
- package/dist/templates/cleargate-planning/.cleargate/scripts/surface-whitelist.txt +0 -27
- package/dist/templates/cleargate-planning/.cleargate/scripts/test/test_assert_story_files.sh +0 -261
- package/dist/templates/cleargate-planning/.cleargate/scripts/test/test_file_surface.sh +0 -210
- package/dist/templates/cleargate-planning/.cleargate/scripts/test/test_flashcard_gate.sh +0 -190
- package/dist/templates/cleargate-planning/.cleargate/scripts/test/test_prep_qa_context.sh +0 -482
- package/dist/templates/cleargate-planning/.cleargate/scripts/test/test_test_ratchet.sh +0 -327
- package/dist/templates/cleargate-planning/.cleargate/scripts/test_ratchet.mjs +0 -261
- package/dist/templates/cleargate-planning/.cleargate/scripts/update_state.mjs +0 -246
- package/dist/templates/cleargate-planning/.cleargate/scripts/validate_bounce_readiness.mjs +0 -111
- package/dist/templates/cleargate-planning/.cleargate/scripts/validate_state.mjs +0 -184
- package/dist/templates/cleargate-planning/.cleargate/scripts/write_dispatch.sh +0 -172
- package/dist/templates/cleargate-planning/.cleargate/templates/Bug.md +0 -126
- package/dist/templates/cleargate-planning/.cleargate/templates/CR.md +0 -130
- package/dist/templates/cleargate-planning/.cleargate/templates/Sprint Plan Template.md +0 -137
- package/dist/templates/cleargate-planning/.cleargate/templates/epic.md +0 -166
- package/dist/templates/cleargate-planning/.cleargate/templates/hotfix.md +0 -111
- package/dist/templates/cleargate-planning/.cleargate/templates/initiative.md +0 -122
- package/dist/templates/cleargate-planning/.cleargate/templates/sprint_context.md +0 -50
- package/dist/templates/cleargate-planning/.cleargate/templates/sprint_report.md +0 -224
- package/dist/templates/cleargate-planning/.cleargate/templates/story.md +0 -213
- package/dist/templates/cleargate-planning/CLAUDE.md +0 -66
- package/dist/templates/cleargate-planning/MANIFEST.json +0 -503
- package/dist/templates/synthesis/active-sprint.md +0 -30
- package/dist/templates/synthesis/open-gates.md +0 -38
- package/dist/templates/synthesis/product-state.md +0 -31
- package/dist/templates/synthesis/roadmap.md +0 -63
- package/dist/whoami-EANGN46Z.js.map +0 -1
|
@@ -1,378 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* prep_doc_refresh.mjs <sprint-id>
|
|
4
|
-
*
|
|
5
|
-
* Generates a per-sprint tailored doc-refresh checklist by scanning what
|
|
6
|
-
* changed in the sprint window and matching trigger patterns from the
|
|
7
|
-
* canonical checklist at .cleargate/knowledge/sprint-closeout-checklist.md.
|
|
8
|
-
*
|
|
9
|
-
* Output: .cleargate/sprint-runs/<sprint-id>/.doc-refresh-checklist.md
|
|
10
|
-
*
|
|
11
|
-
* Each canonical-checklist category is evaluated; items where the trigger
|
|
12
|
-
* pattern matches at least one changed file get `- [ ]`; items where it
|
|
13
|
-
* does not get `- [x] — no changes detected, skip`.
|
|
14
|
-
*
|
|
15
|
-
* Does NOT modify any documentation. Application is human-driven.
|
|
16
|
-
*
|
|
17
|
-
* Exit codes:
|
|
18
|
-
* 0 — success
|
|
19
|
-
* 1 — sprint state.json not found (sprint dir missing)
|
|
20
|
-
* 2 — usage error (missing sprint-id argument)
|
|
21
|
-
*/
|
|
22
|
-
|
|
23
|
-
import fs from 'node:fs';
|
|
24
|
-
import path from 'node:path';
|
|
25
|
-
import { execSync } from 'node:child_process';
|
|
26
|
-
import { fileURLToPath } from 'node:url';
|
|
27
|
-
|
|
28
|
-
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
29
|
-
const REPO_ROOT = path.resolve(__dirname, '..', '..');
|
|
30
|
-
|
|
31
|
-
/** @typedef {{ surface: string, trigger: RegExp | null, triggerDesc: string }} Item */
|
|
32
|
-
/** @typedef {{ name: string, items: Item[] }} Category */
|
|
33
|
-
|
|
34
|
-
/** @type {Category[]} */
|
|
35
|
-
const CATEGORIES = [
|
|
36
|
-
{
|
|
37
|
-
name: '1. Project READMEs',
|
|
38
|
-
items: [
|
|
39
|
-
{
|
|
40
|
-
surface: '`README.md`',
|
|
41
|
-
trigger: /^README\.md$/,
|
|
42
|
-
triggerDesc: 'any feature that changes user-visible product behavior',
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
surface: '`cleargate-cli/README.md`',
|
|
46
|
-
trigger: /^cleargate-cli\/src\/commands\//,
|
|
47
|
-
triggerDesc: 'any change to cleargate-cli/src/commands/*.ts',
|
|
48
|
-
},
|
|
49
|
-
{
|
|
50
|
-
surface: '`cleargate-planning/README.md`',
|
|
51
|
-
trigger: /^cleargate-planning\//,
|
|
52
|
-
triggerDesc: 'any change under cleargate-planning/',
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
surface: '`mcp/README.md`',
|
|
56
|
-
trigger: /^mcp\/src\//,
|
|
57
|
-
triggerDesc: 'any change under mcp/src/ (nested repo — check separately)',
|
|
58
|
-
},
|
|
59
|
-
{
|
|
60
|
-
surface: '`admin/README.md`',
|
|
61
|
-
trigger: /^admin\//,
|
|
62
|
-
triggerDesc: 'any change under admin/ (currently stub)',
|
|
63
|
-
},
|
|
64
|
-
],
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
name: '2. CHANGELOG files (Common-Changelog format per STORY-016-03)',
|
|
68
|
-
items: [
|
|
69
|
-
{
|
|
70
|
-
surface: '`cleargate-cli/CHANGELOG.md`',
|
|
71
|
-
trigger: /^cleargate-cli\//,
|
|
72
|
-
triggerDesc: 'any user-visible change in cleargate-cli/ (CLI surface, error messages, package contents)',
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
surface: '`mcp/CHANGELOG.md`',
|
|
76
|
-
trigger: /^mcp\//,
|
|
77
|
-
triggerDesc: 'any user-visible change in mcp/ (if file exists)',
|
|
78
|
-
},
|
|
79
|
-
],
|
|
80
|
-
},
|
|
81
|
-
{
|
|
82
|
-
name: '3. Manifest / package metadata',
|
|
83
|
-
items: [
|
|
84
|
-
{
|
|
85
|
-
surface: '`cleargate-planning/MANIFEST.json`',
|
|
86
|
-
trigger: /^(\.claude\/agents\/|\.cleargate\/templates\/|\.cleargate\/knowledge\/|\.cleargate\/scripts\/)/,
|
|
87
|
-
triggerDesc: 'any change to .claude/agents/*.md, .cleargate/templates/*, .cleargate/knowledge/*, or .cleargate/scripts/*',
|
|
88
|
-
},
|
|
89
|
-
{
|
|
90
|
-
surface: '`cleargate-cli/package.json` (version bump)',
|
|
91
|
-
trigger: /^cleargate-cli\//,
|
|
92
|
-
triggerDesc: 'only if releasing this sprint (release lane is separate from sprint close)',
|
|
93
|
-
},
|
|
94
|
-
{
|
|
95
|
-
surface: '`mcp/package.json` (version bump)',
|
|
96
|
-
trigger: /^mcp\//,
|
|
97
|
-
triggerDesc: 'only if releasing this sprint',
|
|
98
|
-
},
|
|
99
|
-
],
|
|
100
|
-
},
|
|
101
|
-
{
|
|
102
|
-
name: '4. CLAUDE.md "Active state" subsection',
|
|
103
|
-
items: [
|
|
104
|
-
{
|
|
105
|
-
surface: '`CLAUDE.md` "Active state" section',
|
|
106
|
-
trigger: /\.(cleargate\/delivery\/archive\/|cleargate\/delivery\/pending-sync\/)/,
|
|
107
|
-
triggerDesc: 'any EPIC / CR / Bug / Hotfix archived this sprint, OR any stack version bumped',
|
|
108
|
-
},
|
|
109
|
-
{
|
|
110
|
-
surface: '`cleargate-planning/CLAUDE.md` mirror',
|
|
111
|
-
trigger: /\.(cleargate\/delivery\/archive\/|cleargate\/delivery\/pending-sync\/)/,
|
|
112
|
-
triggerDesc: 'same edit as live (CLEARGATE-tag-block region only — outside-block diverges intentionally)',
|
|
113
|
-
},
|
|
114
|
-
],
|
|
115
|
-
},
|
|
116
|
-
{
|
|
117
|
-
name: '5. Wiki surfaces (auto-rebuilt by PostToolUse hooks; verify after close)',
|
|
118
|
-
items: [
|
|
119
|
-
{
|
|
120
|
-
surface: '`.cleargate/wiki/active-sprint.md`',
|
|
121
|
-
trigger: null,
|
|
122
|
-
triggerDesc: 'always verify at sprint close — confirm sprint ID, status, and date are current',
|
|
123
|
-
},
|
|
124
|
-
{
|
|
125
|
-
surface: '`.cleargate/wiki/index.md`',
|
|
126
|
-
trigger: null,
|
|
127
|
-
triggerDesc: 'always verify at sprint close — confirm new artifacts appear in relevant sections',
|
|
128
|
-
},
|
|
129
|
-
{
|
|
130
|
-
surface: '`.cleargate/wiki/product-state.md`',
|
|
131
|
-
trigger: null,
|
|
132
|
-
triggerDesc: 'always verify at sprint close — confirm shipped capabilities are listed',
|
|
133
|
-
},
|
|
134
|
-
{
|
|
135
|
-
surface: '`.cleargate/wiki/roadmap.md`',
|
|
136
|
-
trigger: null,
|
|
137
|
-
triggerDesc: 'always verify at sprint close — confirm closed sprint moved from Active to Completed',
|
|
138
|
-
},
|
|
139
|
-
],
|
|
140
|
-
},
|
|
141
|
-
{
|
|
142
|
-
name: '6. INDEX surfaces (manual updates)',
|
|
143
|
-
items: [
|
|
144
|
-
{
|
|
145
|
-
surface: '`.cleargate/INDEX.md`',
|
|
146
|
-
trigger: null,
|
|
147
|
-
triggerDesc: 'if maintained as a curated roadmap; update when sprint closes',
|
|
148
|
-
},
|
|
149
|
-
{
|
|
150
|
-
surface: '`.cleargate/delivery/INDEX.md`',
|
|
151
|
-
trigger: null,
|
|
152
|
-
triggerDesc: 'update epic/sprint map when new artifacts archived',
|
|
153
|
-
},
|
|
154
|
-
],
|
|
155
|
-
},
|
|
156
|
-
{
|
|
157
|
-
name: '7. Frontmatter version stamps',
|
|
158
|
-
items: [
|
|
159
|
-
{
|
|
160
|
-
surface: 'Modified `.cleargate/templates/*.md` (run `cleargate stamp <path>`)',
|
|
161
|
-
trigger: /^\.cleargate\/templates\//,
|
|
162
|
-
triggerDesc: 'any .cleargate/templates/*.md modified this sprint',
|
|
163
|
-
},
|
|
164
|
-
{
|
|
165
|
-
surface: '`.cleargate/knowledge/cleargate-protocol.md` (run `cleargate stamp`)',
|
|
166
|
-
trigger: /^\.cleargate\/knowledge\/cleargate-protocol\.md$/,
|
|
167
|
-
triggerDesc: 'if cleargate-protocol.md was modified this sprint (post-EPIC-024 slim)',
|
|
168
|
-
},
|
|
169
|
-
{
|
|
170
|
-
surface: '`.cleargate/knowledge/cleargate-enforcement.md` (run `cleargate stamp`)',
|
|
171
|
-
trigger: /^\.cleargate\/knowledge\/cleargate-enforcement\.md$/,
|
|
172
|
-
triggerDesc: 'if cleargate-enforcement.md was modified this sprint (post-EPIC-024 split)',
|
|
173
|
-
},
|
|
174
|
-
{
|
|
175
|
-
surface: 'Other modified `.cleargate/knowledge/*.md` (run `cleargate stamp <path>`)',
|
|
176
|
-
trigger: /^\.cleargate\/knowledge\//,
|
|
177
|
-
triggerDesc: 'any other .cleargate/knowledge/*.md touched this sprint',
|
|
178
|
-
},
|
|
179
|
-
],
|
|
180
|
-
},
|
|
181
|
-
{
|
|
182
|
-
name: '8. Knowledge doc cross-references',
|
|
183
|
-
items: [
|
|
184
|
-
{
|
|
185
|
-
surface: 'Knowledge docs citing `§N` of protocol or enforcement.md',
|
|
186
|
-
trigger: /^\.cleargate\/knowledge\//,
|
|
187
|
-
triggerDesc: 'any knowledge doc modified — verify §N citations still resolve post-rewrite',
|
|
188
|
-
},
|
|
189
|
-
],
|
|
190
|
-
},
|
|
191
|
-
{
|
|
192
|
-
name: '9. Mirror parity audit',
|
|
193
|
-
items: [
|
|
194
|
-
{
|
|
195
|
-
surface: '`cleargate-planning/.claude/agents/` diff',
|
|
196
|
-
trigger: /^\.claude\/agents\//,
|
|
197
|
-
triggerDesc: 'any change to .claude/agents/*.md — run diff -r to verify parity',
|
|
198
|
-
},
|
|
199
|
-
{
|
|
200
|
-
surface: '`cleargate-planning/.cleargate/templates/` diff',
|
|
201
|
-
trigger: /^\.cleargate\/templates\//,
|
|
202
|
-
triggerDesc: 'any change to .cleargate/templates/ — run diff -r to verify parity',
|
|
203
|
-
},
|
|
204
|
-
{
|
|
205
|
-
surface: '`cleargate-planning/.cleargate/knowledge/` diff',
|
|
206
|
-
trigger: /^\.cleargate\/knowledge\//,
|
|
207
|
-
triggerDesc: 'any change to .cleargate/knowledge/ — run diff -r to verify parity',
|
|
208
|
-
},
|
|
209
|
-
],
|
|
210
|
-
},
|
|
211
|
-
];
|
|
212
|
-
|
|
213
|
-
/**
|
|
214
|
-
* Get changed files for a sprint using available strategies.
|
|
215
|
-
* Strategy 1: git log sprint/<sprint-id> ^main --name-only (if branch exists)
|
|
216
|
-
* Strategy 2: git log --since <start_date> --name-only (from sprint frontmatter)
|
|
217
|
-
* Strategy 3: git log --grep <sprint-id> --name-only (commit-message grep fallback)
|
|
218
|
-
*
|
|
219
|
-
* @param {string} sprintId
|
|
220
|
-
* @param {string} sprintDir
|
|
221
|
-
* @returns {string[]} deduped array of changed file paths
|
|
222
|
-
*/
|
|
223
|
-
function getChangedFiles(sprintId, sprintDir) {
|
|
224
|
-
// Strategy 1: sprint branch
|
|
225
|
-
try {
|
|
226
|
-
const branchCheck = execSync(`git rev-parse --verify "refs/heads/sprint/${sprintId}"`, {
|
|
227
|
-
cwd: REPO_ROOT,
|
|
228
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
229
|
-
}).toString().trim();
|
|
230
|
-
if (branchCheck) {
|
|
231
|
-
const out = execSync(
|
|
232
|
-
`git log "sprint/${sprintId}" ^main --name-only --format=""`,
|
|
233
|
-
{ cwd: REPO_ROOT, stdio: ['pipe', 'pipe', 'pipe'] }
|
|
234
|
-
).toString();
|
|
235
|
-
const files = out.split('\n').map(f => f.trim()).filter(Boolean);
|
|
236
|
-
if (files.length > 0) {
|
|
237
|
-
return [...new Set(files)];
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
} catch {
|
|
241
|
-
// branch does not exist — fall through to next strategy
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
// Strategy 2: --since <start_date> from sprint frontmatter
|
|
245
|
-
const startDate = readStartDateFromFrontmatter(sprintId);
|
|
246
|
-
if (startDate) {
|
|
247
|
-
try {
|
|
248
|
-
const out = execSync(
|
|
249
|
-
`git log --since="${startDate}" --name-only --format=""`,
|
|
250
|
-
{ cwd: REPO_ROOT, stdio: ['pipe', 'pipe', 'pipe'] }
|
|
251
|
-
).toString();
|
|
252
|
-
const files = out.split('\n').map(f => f.trim()).filter(Boolean);
|
|
253
|
-
if (files.length > 0) {
|
|
254
|
-
return [...new Set(files)];
|
|
255
|
-
}
|
|
256
|
-
} catch {
|
|
257
|
-
// fall through to strategy 3
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
// Strategy 3: commit-message grep for sprint ID
|
|
262
|
-
try {
|
|
263
|
-
const out = execSync(
|
|
264
|
-
`git log --grep="${sprintId}" --name-only --format=""`,
|
|
265
|
-
{ cwd: REPO_ROOT, stdio: ['pipe', 'pipe', 'pipe'] }
|
|
266
|
-
).toString();
|
|
267
|
-
const files = out.split('\n').map(f => f.trim()).filter(Boolean);
|
|
268
|
-
return [...new Set(files)];
|
|
269
|
-
} catch {
|
|
270
|
-
return [];
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
/**
|
|
275
|
-
* Read start_date from sprint frontmatter file.
|
|
276
|
-
* Looks in pending-sync first, then archive.
|
|
277
|
-
*
|
|
278
|
-
* @param {string} sprintId
|
|
279
|
-
* @returns {string | null}
|
|
280
|
-
*/
|
|
281
|
-
function readStartDateFromFrontmatter(sprintId) {
|
|
282
|
-
const dirs = [
|
|
283
|
-
path.join(REPO_ROOT, '.cleargate', 'delivery', 'pending-sync'),
|
|
284
|
-
path.join(REPO_ROOT, '.cleargate', 'delivery', 'archive'),
|
|
285
|
-
];
|
|
286
|
-
for (const dir of dirs) {
|
|
287
|
-
if (!fs.existsSync(dir)) continue;
|
|
288
|
-
const entries = fs.readdirSync(dir);
|
|
289
|
-
const match = entries.find(e => e.startsWith(`${sprintId}_`) && e.endsWith('.md'));
|
|
290
|
-
if (match) {
|
|
291
|
-
const content = fs.readFileSync(path.join(dir, match), 'utf8');
|
|
292
|
-
const m = content.match(/^start_date:\s*["']?(.+?)["']?\s*$/m);
|
|
293
|
-
if (m) return m[1].trim();
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
return null;
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
/**
|
|
300
|
-
* Evaluate each checklist category against the changed file set.
|
|
301
|
-
*
|
|
302
|
-
* @param {string[]} changedFiles
|
|
303
|
-
* @returns {{ category: Category, results: Array<{ item: Item, triggered: boolean }> }[]}
|
|
304
|
-
*/
|
|
305
|
-
function evaluateChecklist(changedFiles) {
|
|
306
|
-
return CATEGORIES.map(category => ({
|
|
307
|
-
category,
|
|
308
|
-
results: category.items.map(item => ({
|
|
309
|
-
item,
|
|
310
|
-
triggered: item.trigger === null
|
|
311
|
-
? true // null trigger = always review
|
|
312
|
-
: changedFiles.some(f => item.trigger.test(f)),
|
|
313
|
-
})),
|
|
314
|
-
}));
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
/**
|
|
318
|
-
* Render the checklist markdown.
|
|
319
|
-
*
|
|
320
|
-
* @param {ReturnType<typeof evaluateChecklist>} evaluation
|
|
321
|
-
* @param {string} sprintId
|
|
322
|
-
* @returns {string}
|
|
323
|
-
*/
|
|
324
|
-
function renderChecklist(evaluation, sprintId) {
|
|
325
|
-
const lines = [
|
|
326
|
-
`# Doc & Metadata Refresh Checklist — ${sprintId}`,
|
|
327
|
-
'',
|
|
328
|
-
`> Generated by \`prep_doc_refresh.mjs\` at ${new Date().toISOString()}.`,
|
|
329
|
-
'> Each item is pre-evaluated against the sprint\'s changed file set.',
|
|
330
|
-
'> `- [ ]` = action required; `- [x]` = no changes detected, skip.',
|
|
331
|
-
'> Apply or defer each `- [ ]` item during Gate 4 ack.',
|
|
332
|
-
'> Canonical checklist: `.cleargate/knowledge/sprint-closeout-checklist.md`',
|
|
333
|
-
'',
|
|
334
|
-
];
|
|
335
|
-
|
|
336
|
-
for (const { category, results } of evaluation) {
|
|
337
|
-
lines.push(`### ${category.name}`);
|
|
338
|
-
lines.push('');
|
|
339
|
-
for (const { item, triggered } of results) {
|
|
340
|
-
if (triggered) {
|
|
341
|
-
lines.push(`- [ ] ${item.surface} — **trigger:** ${item.triggerDesc}`);
|
|
342
|
-
} else {
|
|
343
|
-
lines.push(`- [x] ${item.surface} — no changes detected, skip`);
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
lines.push('');
|
|
347
|
-
}
|
|
348
|
-
|
|
349
|
-
return lines.join('\n');
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
function main() {
|
|
353
|
-
const sprintId = process.argv[2];
|
|
354
|
-
if (!sprintId) {
|
|
355
|
-
console.error('Usage: prep_doc_refresh.mjs <sprint-id>');
|
|
356
|
-
console.error('Example: prep_doc_refresh.mjs SPRINT-16');
|
|
357
|
-
process.exit(2);
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
const sprintDir = path.join(REPO_ROOT, '.cleargate', 'sprint-runs', sprintId);
|
|
361
|
-
if (!fs.existsSync(sprintDir)) {
|
|
362
|
-
console.error(`Error: sprint state.json not found at ${path.join(sprintDir, 'state.json')}`);
|
|
363
|
-
console.error(`Sprint directory does not exist: ${sprintDir}`);
|
|
364
|
-
process.exit(1);
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
const changedFiles = getChangedFiles(sprintId, sprintDir);
|
|
368
|
-
console.log(`Found ${changedFiles.length} changed files in sprint window.`);
|
|
369
|
-
|
|
370
|
-
const evaluation = evaluateChecklist(changedFiles);
|
|
371
|
-
const markdown = renderChecklist(evaluation, sprintId);
|
|
372
|
-
|
|
373
|
-
const outFile = path.join(sprintDir, '.doc-refresh-checklist.md');
|
|
374
|
-
fs.writeFileSync(outFile, markdown, 'utf8');
|
|
375
|
-
console.log(`Wrote ${outFile}`);
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
main();
|