* fix(#2388): gate shared-ID requirement marking and revert on gaps_found Adds requirements.ready-ids (execute-plan.md's update_requirements step) so a requirement ID declared by multiple plans in a phase only marks Complete once every declaring plan has produced a SUMMARY.md, and requirements.revert-phase (execute-phase.md's gaps_found branch) so a gaps_found verdict reverts the phase's own prematurely-Complete IDs before the gap report renders. Single-plan IDs still mark immediately. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * chore(#2388): regenerate fixtures + lint gate-prep * fix(#2388): repair failing tests after gate verification * chore(#2388): add changeset (#2424) --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
5
.changeset/2388-shared-requirement-gate.md
Normal file
5
.changeset/2388-shared-requirement-gate.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
type: Fixed
|
||||
pr: 2424
|
||||
---
|
||||
**Shared requirement IDs across multiple plans no longer read `Complete` before every declaring plan (and phase verification) has finished** — `execute-plan.md` now gates completion on sibling plans' `SUMMARY.md` files via a new read-only `requirements ready-ids` check, and a `gaps_found` phase verification reverts any requirement ID this phase owns back out of `Complete` before the gap report renders. Single-plan requirement IDs are unaffected — no added latency. (#2388)
|
||||
@@ -229,6 +229,7 @@
|
||||
"execute-mvp-tdd.md",
|
||||
"execute-phase-between-wave-reset.md",
|
||||
"execute-phase-context-guard.md",
|
||||
"execute-phase-requirement-revert.md",
|
||||
"execute-phase-wave-guard.md",
|
||||
"executor-examples.md",
|
||||
"gate-prompts.md",
|
||||
|
||||
@@ -315,6 +315,7 @@ Full roster at `gsd-core/references/*.md`. References are shared knowledge docum
|
||||
| `agent-contracts.md` | Formal interface between orchestrators and agents. |
|
||||
| `context-budget.md` | Context window budget allocation rules. |
|
||||
| `execute-phase-context-guard.md` | Context exhaustion guard step for `execute-phase` wave loop — `workflow.context_guard_mode` dispatch table (warn/auto/off) and POOR-tier pause-work trigger (#1452). |
|
||||
| `execute-phase-requirement-revert.md` | Gap-report step for `execute-phase` — reverts this phase's own shared requirement IDs out of `Complete` in REQUIREMENTS.md before rendering a `gaps_found` report, scoped to `PHASE_REQ_IDS` so other phases' rows are untouched (#2388). |
|
||||
| `continuation-format.md` | Session continuation/resume format. |
|
||||
| `domain-probes.md` | Domain-specific probing questions for discuss-phase. |
|
||||
| `edge-probe.md` | Spec-phase edge-completeness probe — 8-category edge taxonomy, shape classification, and the `requirements → checks → verifier` resolution model (Step 5.5). |
|
||||
|
||||
@@ -59,6 +59,10 @@
|
||||
* Requirements Operations:
|
||||
* requirements mark-complete <ids> Mark requirement IDs as complete in REQUIREMENTS.md
|
||||
* Accepts: REQ-01,REQ-02 or REQ-01 REQ-02 or [REQ-01, REQ-02]
|
||||
* requirements ready-ids <plan-path> <ids> Read-only: which of <ids> are safe to mark-complete now
|
||||
* (no sibling *-PLAN.md in the same phase dir still missing its SUMMARY for that ID)
|
||||
* requirements revert-phase <ids> Revert requirement IDs out of Complete (checkbox + traceability row);
|
||||
* gaps_found-only, never call on the pass path
|
||||
*
|
||||
* Milestone Operations:
|
||||
* milestone complete <version> Archive milestone, create MILESTONES.md
|
||||
@@ -1216,8 +1220,19 @@ function dispatchOverlayCapabilityCommand({ command, args, cwd, raw, error, load
|
||||
const subcommand = args[1];
|
||||
if (subcommand === 'mark-complete') {
|
||||
milestone.cmdRequirementsMarkComplete(cwd, args.slice(2), raw);
|
||||
} else if (subcommand === 'ready-ids') {
|
||||
// #2388: read-only shared-ID gate — computes which of the given
|
||||
// requirement IDs are safe to hand to mark-complete right now
|
||||
// (no sibling *-PLAN.md in the same phase dir still missing its
|
||||
// *-SUMMARY.md for that ID).
|
||||
milestone.cmdRequirementsReadyIds(cwd, args.slice(2), raw);
|
||||
} else if (subcommand === 'revert-phase') {
|
||||
// #2388: gaps_found-only revert — flips this phase's own
|
||||
// requirement IDs back out of Complete (checkbox + traceability
|
||||
// row) before the gap report renders.
|
||||
milestone.cmdRequirementsRevertPhase(cwd, args.slice(2), raw);
|
||||
} else {
|
||||
error('Unknown requirements subcommand. Available: mark-complete', ERROR_REASON.SDK_UNKNOWN_COMMAND);
|
||||
error('Unknown requirements subcommand. Available: mark-complete, ready-ids, revert-phase', ERROR_REASON.SDK_UNKNOWN_COMMAND);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
8
gsd-core/references/execute-phase-requirement-revert.md
Normal file
8
gsd-core/references/execute-phase-requirement-revert.md
Normal file
@@ -0,0 +1,8 @@
|
||||
**Revert this phase's own requirement IDs out of `Complete` before rendering the gap report (#2388).** A shared requirement ID can already read `Complete` at this point (its first-declaring plan finished before this verification ran) — a `gaps_found` verdict must not leave that premature `Complete` sitting in REQUIREMENTS.md. Scoped strictly to `PHASE_REQ_IDS` (this phase's own citations from `init.execute-phase`), so another phase's `Complete` row is never touched:
|
||||
|
||||
```bash
|
||||
if [ -n "${PHASE_REQ_IDS}" ]; then
|
||||
gsd_run query requirements.revert-phase ${PHASE_REQ_IDS} >/dev/null 2>&1 || true
|
||||
gsd_run query commit "docs(phase-{X}): revert premature Complete requirements after gaps found" --files .planning/REQUIREMENTS.md >/dev/null 2>&1 || true
|
||||
fi
|
||||
```
|
||||
@@ -1439,9 +1439,10 @@ Verify-work will walk you through each item and mark the phase complete when all
|
||||
|
||||
**If user acknowledges without reporting issues (including "ok", "noted", "ack", "got it", "approved", "done", "yes", "pass", or similar):** Stop. The phase remains pending. No further orchestrator action — wait for the user to run `/gsd:verify-work`.
|
||||
|
||||
**If user reports issues now (before running verify-work):** Proceed to gap closure as currently implemented.
|
||||
**If user reports issues now:** Proceed to gap closure.
|
||||
|
||||
**If gaps_found:**
|
||||
@~/.claude/gsd-core/references/execute-phase-requirement-revert.md
|
||||
```
|
||||
## ⚠ Phase {X}: {Name} — Gaps Found
|
||||
|
||||
|
||||
@@ -470,13 +470,21 @@ Counts PLAN vs SUMMARY files on disk. Updates progress table row with correct co
|
||||
</step>
|
||||
|
||||
<step name="update_requirements">
|
||||
Mark completed requirements from the PLAN.md frontmatter `requirements:` field:
|
||||
Mark completed requirements from the PLAN.md frontmatter `requirements:` field.
|
||||
|
||||
Extract requirement IDs from the plan's frontmatter (e.g., `requirements: [AUTH-01, AUTH-02]`) into `REQ_IDS`. If no requirements field, skip this step.
|
||||
|
||||
**Shared-ID gate (#2388):** a requirement ID declared by more than one plan in this phase must not read `Complete` until every plan declaring it has finished (produced a `*-SUMMARY.md`) — otherwise the first plan to finish flips it `Complete` while its sibling plans are still running, before phase verification ever gets a chance to catch a real gap. Compute the ready subset first, then mark only those:
|
||||
|
||||
```bash
|
||||
gsd_run query requirements.mark-complete ${REQ_IDS}
|
||||
READY=$(gsd_run query requirements.ready-ids "${PLAN_PATH}" ${REQ_IDS} --raw)
|
||||
READY_IDS=$(printf '%s' "$READY" | jq -r '.ready[]' 2>/dev/null | tr '\n' ' ')
|
||||
if [ -n "$(printf '%s' "$READY_IDS" | tr -d '[:space:]')" ]; then
|
||||
gsd_run query requirements.mark-complete ${READY_IDS}
|
||||
fi
|
||||
```
|
||||
|
||||
Extract requirement IDs from the plan's frontmatter (e.g., `requirements: [AUTH-01, AUTH-02]`). If no requirements field, skip.
|
||||
`requirements.ready-ids` is read-only: it scans sibling `*-PLAN.md` files in this plan's phase directory and blocks an ID only when a sibling ALSO declares it and that sibling has no `*-SUMMARY.md` yet. An ID no sibling declares is always ready (single-plan requirements mark immediately, no added latency). A blocked ID is re-evaluated the next time any plan in this phase finishes its own `update_requirements` step, and becomes ready once the LAST declaring plan's SUMMARY exists.
|
||||
</step>
|
||||
|
||||
<step name="git_commit_metadata">
|
||||
|
||||
@@ -746,6 +746,20 @@ export const NON_FAMILY_COMMAND_ALIASES: NonFamilyCommandAlias[] = [
|
||||
],
|
||||
"mutation": true
|
||||
},
|
||||
{
|
||||
"canonical": "requirements.ready-ids",
|
||||
"aliases": [
|
||||
"requirements ready-ids"
|
||||
],
|
||||
"mutation": false
|
||||
},
|
||||
{
|
||||
"canonical": "requirements.revert-phase",
|
||||
"aliases": [
|
||||
"requirements revert-phase"
|
||||
],
|
||||
"mutation": true
|
||||
},
|
||||
{
|
||||
"canonical": "stats.json",
|
||||
"aliases": [
|
||||
|
||||
@@ -268,6 +268,193 @@ function cmdRequirementsMarkComplete(cwd: string, reqIdsRaw: string[], raw: bool
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* #2388: a requirement ID shared by more than one plan in a phase must not be
|
||||
* handed to `cmdRequirementsMarkComplete` until every plan declaring it has
|
||||
* finished (i.e. has a `*-SUMMARY.md`) — otherwise the ID reads `Complete` in
|
||||
* REQUIREMENTS.md ~20 minutes before its sibling plans even run, and long
|
||||
* before `verify_phase_goal` has a chance to catch a gap.
|
||||
*
|
||||
* Pure read-only gate: scans sibling `*-PLAN.md` files in the SAME phase
|
||||
* directory as `planPath` (excluding `planPath` itself) and, for each
|
||||
* candidate ID, blocks it only when a sibling plan ALSO declares that ID in
|
||||
* its own `requirements:` frontmatter AND that sibling has no matching
|
||||
* `*-SUMMARY.md` yet. An ID no sibling declares is never blocked — a
|
||||
* single-plan (non-shared) ID is always `ready`, preserving immediate
|
||||
* marking with no added latency (acceptance criterion 4). Does not read or
|
||||
* write REQUIREMENTS.md itself; callers pass the `ready` subset on to
|
||||
* `cmdRequirementsMarkComplete` (whose own flip semantics are untouched).
|
||||
*/
|
||||
function cmdRequirementsReadyIds(cwd: string, args: string[], raw: boolean): void {
|
||||
const planPathArg = args[0];
|
||||
if (!planPathArg) {
|
||||
error('plan path required. Usage: requirements ready-ids <plan-path> REQ-01,REQ-02');
|
||||
}
|
||||
|
||||
const reqIds = args
|
||||
.slice(1)
|
||||
.join(' ')
|
||||
.replace(/[\[\]]/g, '')
|
||||
.split(/[,\s]+/)
|
||||
.map((r) => r.trim())
|
||||
.filter(Boolean);
|
||||
|
||||
if (reqIds.length === 0) {
|
||||
output({ ready: [], blocked: [], total: 0 }, raw, 'no requirement IDs provided');
|
||||
return;
|
||||
}
|
||||
|
||||
const planAbsPath = path.resolve(cwd, planPathArg);
|
||||
const phaseDir = path.dirname(planAbsPath);
|
||||
const currentBasename = path.basename(planAbsPath);
|
||||
|
||||
let siblingPlanFiles: string[] = [];
|
||||
try {
|
||||
siblingPlanFiles = fs
|
||||
.readdirSync(phaseDir)
|
||||
.filter((f) => f.endsWith('-PLAN.md') && f !== currentBasename);
|
||||
} catch {
|
||||
siblingPlanFiles = [];
|
||||
}
|
||||
|
||||
const parseFrontmatterReqIds = (content: string): string[] => {
|
||||
const fm = extractFrontmatter(content);
|
||||
const fmReq = fm.requirements;
|
||||
if (Array.isArray(fmReq)) return fmReq.map((r) => String(r).trim()).filter(Boolean);
|
||||
if (typeof fmReq === 'string') {
|
||||
return fmReq
|
||||
.replace(/[\[\]]/g, '')
|
||||
.split(/[,\s]+/)
|
||||
.map((r) => r.trim())
|
||||
.filter(Boolean);
|
||||
}
|
||||
return [];
|
||||
};
|
||||
|
||||
const ready: string[] = [];
|
||||
const blocked: string[] = [];
|
||||
|
||||
for (const reqId of reqIds) {
|
||||
let blockedBySibling = false;
|
||||
|
||||
for (const siblingFile of siblingPlanFiles) {
|
||||
const siblingPath = path.join(phaseDir, siblingFile);
|
||||
let siblingContent: string;
|
||||
try {
|
||||
siblingContent = fs.readFileSync(siblingPath, 'utf-8');
|
||||
} catch {
|
||||
continue;
|
||||
}
|
||||
|
||||
const siblingReqIds = parseFrontmatterReqIds(siblingContent);
|
||||
const siblingDeclaresId = siblingReqIds.some((id) => id.toLowerCase() === reqId.toLowerCase());
|
||||
if (!siblingDeclaresId) continue;
|
||||
|
||||
// Sibling declares the SAME ID — it must have finished (produced a
|
||||
// SUMMARY) before this ID is ready to mark Complete.
|
||||
const siblingSummaryPath = siblingPath.replace(/-PLAN\.md$/, '-SUMMARY.md');
|
||||
if (!fs.existsSync(siblingSummaryPath)) {
|
||||
blockedBySibling = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (blockedBySibling) blocked.push(reqId);
|
||||
else ready.push(reqId);
|
||||
}
|
||||
|
||||
output(
|
||||
{ ready, blocked, total: reqIds.length },
|
||||
raw,
|
||||
`${ready.length}/${reqIds.length} requirement(s) ready to mark complete`,
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* #2388: revert this phase's own requirement IDs out of `Complete` when
|
||||
* `verify_phase_goal` returns `gaps_found` — a gap verdict must not leave a
|
||||
* premature `Complete` (from a shared ID's first-declaring plan, or from any
|
||||
* other early write) sitting in REQUIREMENTS.md indefinitely.
|
||||
*
|
||||
* Mirrors `cmdRequirementsMarkComplete`'s two write surfaces in reverse:
|
||||
* checkbox `[x]` -> `[ ]`, and traceability Status `Complete` -> `Gaps
|
||||
* Found`. Phase-scoping is the CALLER's responsibility — this function only
|
||||
* ever touches the exact IDs it is given, so a caller passing just this
|
||||
* phase's own `phase_req_ids` never touches another phase's `Complete` row.
|
||||
* Never call this on the pass path; it is `gaps_found`-only.
|
||||
*/
|
||||
function cmdRequirementsRevertPhase(cwd: string, reqIdsRaw: string[], raw: boolean): void {
|
||||
const reqIds = (reqIdsRaw || [])
|
||||
.join(' ')
|
||||
.replace(/[\[\]]/g, '')
|
||||
.split(/[,\s]+/)
|
||||
.map((r) => r.trim())
|
||||
.filter(Boolean);
|
||||
|
||||
if (reqIds.length === 0) {
|
||||
output({ reverted: [], unchanged: [], total: 0 }, raw, 'no requirement IDs provided');
|
||||
return;
|
||||
}
|
||||
|
||||
const reqPath = planningPaths(cwd).requirements;
|
||||
if (!fs.existsSync(reqPath)) {
|
||||
output(
|
||||
{ reverted: [], unchanged: reqIds, total: reqIds.length, reason: 'REQUIREMENTS.md not found' },
|
||||
raw,
|
||||
'no requirements file',
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
let reqContent = fs.readFileSync(reqPath, 'utf-8');
|
||||
const reverted: string[] = [];
|
||||
const unchanged: string[] = [];
|
||||
|
||||
for (const reqId of reqIds) {
|
||||
const reqEscaped = escapeRegex(reqId);
|
||||
let idReverted = false;
|
||||
|
||||
// Surface 1 — checkbox: - [x] **REQ-ID** -> - [ ] **REQ-ID**
|
||||
const checkboxPattern = new RegExp(`(-\\s*\\[)x(\\]\\s*\\*\\*${reqEscaped}\\*\\*)`, 'gi');
|
||||
const afterCheckbox = reqContent.replace(checkboxPattern, '$1 $2');
|
||||
if (afterCheckbox !== reqContent) {
|
||||
reqContent = afterCheckbox;
|
||||
idReverted = true;
|
||||
}
|
||||
|
||||
// Surface 2 — traceability row: Status Complete -> Gaps Found. Only
|
||||
// flips a row currently reading Complete (mirrors mark-complete's own
|
||||
// "only flip Pending -> Complete" gate, in reverse).
|
||||
const rowMatch = (row: Record<string, string>): boolean =>
|
||||
(Object.values(row)[0] ?? '').trim().toLowerCase() === reqId.toLowerCase();
|
||||
let tableHit = false;
|
||||
const tableUpdate = updateTraceabilityCell(reqContent, rowMatch, 'Status', (current) => {
|
||||
if (/^complete$/i.test(current.trim())) {
|
||||
tableHit = true;
|
||||
return ' Gaps Found ';
|
||||
}
|
||||
return current;
|
||||
});
|
||||
if (tableUpdate.ok) {
|
||||
reqContent = tableUpdate.value;
|
||||
if (tableHit) idReverted = true;
|
||||
}
|
||||
|
||||
if (idReverted) reverted.push(reqId);
|
||||
else unchanged.push(reqId);
|
||||
}
|
||||
|
||||
if (reverted.length > 0) {
|
||||
platformWriteSync(reqPath, reqContent);
|
||||
}
|
||||
|
||||
output(
|
||||
{ reverted, unchanged, total: reqIds.length },
|
||||
raw,
|
||||
`${reverted.length}/${reqIds.length} requirement(s) reverted from Complete`,
|
||||
);
|
||||
}
|
||||
|
||||
function cmdMilestoneComplete(cwd: string, version: string, options: MilestoneCompleteOptions, raw: boolean): void {
|
||||
if (!version) {
|
||||
error('version required for milestone complete (e.g., v1.0)');
|
||||
@@ -766,6 +953,8 @@ function archivePhaseDirectories(cwd: string, phasesDir: string, dirs: ReadonlyA
|
||||
|
||||
export = {
|
||||
cmdRequirementsMarkComplete,
|
||||
cmdRequirementsReadyIds,
|
||||
cmdRequirementsRevertPhase,
|
||||
cmdMilestoneComplete,
|
||||
cmdPhasesClear,
|
||||
};
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
"gsd-core/VERSION": "ef0deccd81a6723c",
|
||||
"gsd-core/bin/check-latest-version.cjs": "e4a224058c8f4d74",
|
||||
"gsd-core/bin/ensure-runtime-build.cjs": "ea841e2865248e74",
|
||||
"gsd-core/bin/gsd-tools.cjs": "bcccc9e975b37e39",
|
||||
"gsd-core/bin/gsd-tools.cjs": "0a2fc4e226f009c5",
|
||||
"gsd-core/bin/gsd_run": "62d9b647ede212e6",
|
||||
"gsd-core/bin/shared/config-defaults.manifest.json": "517e6a7c1e9f4f16",
|
||||
"gsd-core/bin/shared/config-schema.manifest.json": "0109a5a9866a24e0",
|
||||
@@ -88,6 +88,7 @@
|
||||
"gsd-core/references/execute-mvp-tdd.md": "a98a270a7ab126bc",
|
||||
"gsd-core/references/execute-phase-between-wave-reset.md": "3ad96ca0f7fee37e",
|
||||
"gsd-core/references/execute-phase-context-guard.md": "a5a1058d35806a8e",
|
||||
"gsd-core/references/execute-phase-requirement-revert.md": "48ade76866c57ce2",
|
||||
"gsd-core/references/execute-phase-wave-guard.md": "826cf9315e592a1d",
|
||||
"gsd-core/references/executor-examples.md": "ba59243ed45c8ab1",
|
||||
"gsd-core/references/few-shot-examples/plan-checker.md": "2574808188ac9de4",
|
||||
@@ -241,13 +242,13 @@
|
||||
"gsd-core/workflows/docs-update.md": "8e986e26d0e6e1a0",
|
||||
"gsd-core/workflows/edit-phase.md": "fc932e82ba1f585a",
|
||||
"gsd-core/workflows/eval-review.md": "eb4040eaa5b8497f",
|
||||
"gsd-core/workflows/execute-phase.md": "a349bfdfcdf2c011",
|
||||
"gsd-core/workflows/execute-phase.md": "e35fc8cb7e4b2097",
|
||||
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "55d0706e80a2554a",
|
||||
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
|
||||
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "5e9635a80ca6c3a5",
|
||||
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "3c66870732e77709",
|
||||
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
|
||||
"gsd-core/workflows/execute-plan.md": "dea5df2e142f66bd",
|
||||
"gsd-core/workflows/execute-plan.md": "b5eec9e33626aefa",
|
||||
"gsd-core/workflows/explore.md": "934c00f9f216dbdb",
|
||||
"gsd-core/workflows/extract-learnings.md": "167ea7f0e23bf496",
|
||||
"gsd-core/workflows/fast.md": "568e6c3ec00b6e00",
|
||||
|
||||
@@ -110,7 +110,7 @@
|
||||
"gsd-core/VERSION": "ef0deccd81a6723c",
|
||||
"gsd-core/bin/check-latest-version.cjs": "e4a224058c8f4d74",
|
||||
"gsd-core/bin/ensure-runtime-build.cjs": "51bc64467ab30f62",
|
||||
"gsd-core/bin/gsd-tools.cjs": "cae92a5bde4f3414",
|
||||
"gsd-core/bin/gsd-tools.cjs": "bcecc5e92220b2b3",
|
||||
"gsd-core/bin/gsd_run": "62d9b647ede212e6",
|
||||
"gsd-core/bin/shared/config-defaults.manifest.json": "517e6a7c1e9f4f16",
|
||||
"gsd-core/bin/shared/config-schema.manifest.json": "0109a5a9866a24e0",
|
||||
@@ -159,6 +159,7 @@
|
||||
"gsd-core/references/execute-mvp-tdd.md": "a98a270a7ab126bc",
|
||||
"gsd-core/references/execute-phase-between-wave-reset.md": "3ad96ca0f7fee37e",
|
||||
"gsd-core/references/execute-phase-context-guard.md": "982006c1f3364242",
|
||||
"gsd-core/references/execute-phase-requirement-revert.md": "48ade76866c57ce2",
|
||||
"gsd-core/references/execute-phase-wave-guard.md": "de9ac22cead4cfd8",
|
||||
"gsd-core/references/executor-examples.md": "ba59243ed45c8ab1",
|
||||
"gsd-core/references/few-shot-examples/plan-checker.md": "2574808188ac9de4",
|
||||
@@ -312,13 +313,13 @@
|
||||
"gsd-core/workflows/docs-update.md": "f35922d15b7061c9",
|
||||
"gsd-core/workflows/edit-phase.md": "966a3eadd1bebc04",
|
||||
"gsd-core/workflows/eval-review.md": "f898936e2cfe4130",
|
||||
"gsd-core/workflows/execute-phase.md": "42bb004d479f7706",
|
||||
"gsd-core/workflows/execute-phase.md": "c18baf04228abf68",
|
||||
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "4e265392b3f2ba0e",
|
||||
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
|
||||
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "09ea1680a375b979",
|
||||
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "5f24c5ad58c2518f",
|
||||
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
|
||||
"gsd-core/workflows/execute-plan.md": "7bc87fa99a1f9b0e",
|
||||
"gsd-core/workflows/execute-plan.md": "83cb02952b514bd8",
|
||||
"gsd-core/workflows/explore.md": "6c04f2e658d93261",
|
||||
"gsd-core/workflows/extract-learnings.md": "b6f01ca3d8f58de4",
|
||||
"gsd-core/workflows/fast.md": "11f5cd10ae5cc7d3",
|
||||
|
||||
@@ -109,7 +109,7 @@
|
||||
"gsd-core/VERSION": "ef0deccd81a6723c",
|
||||
"gsd-core/bin/check-latest-version.cjs": "e4a224058c8f4d74",
|
||||
"gsd-core/bin/ensure-runtime-build.cjs": "51bc64467ab30f62",
|
||||
"gsd-core/bin/gsd-tools.cjs": "cae92a5bde4f3414",
|
||||
"gsd-core/bin/gsd-tools.cjs": "bcecc5e92220b2b3",
|
||||
"gsd-core/bin/gsd_run": "62d9b647ede212e6",
|
||||
"gsd-core/bin/shared/config-defaults.manifest.json": "517e6a7c1e9f4f16",
|
||||
"gsd-core/bin/shared/config-schema.manifest.json": "0109a5a9866a24e0",
|
||||
@@ -158,6 +158,7 @@
|
||||
"gsd-core/references/execute-mvp-tdd.md": "a98a270a7ab126bc",
|
||||
"gsd-core/references/execute-phase-between-wave-reset.md": "3ad96ca0f7fee37e",
|
||||
"gsd-core/references/execute-phase-context-guard.md": "a5a1058d35806a8e",
|
||||
"gsd-core/references/execute-phase-requirement-revert.md": "48ade76866c57ce2",
|
||||
"gsd-core/references/execute-phase-wave-guard.md": "de9ac22cead4cfd8",
|
||||
"gsd-core/references/executor-examples.md": "ba59243ed45c8ab1",
|
||||
"gsd-core/references/few-shot-examples/plan-checker.md": "2574808188ac9de4",
|
||||
@@ -311,13 +312,13 @@
|
||||
"gsd-core/workflows/docs-update.md": "cd753783ab95da00",
|
||||
"gsd-core/workflows/edit-phase.md": "dbbb6191f5a8b65e",
|
||||
"gsd-core/workflows/eval-review.md": "086a1f2b3c11462c",
|
||||
"gsd-core/workflows/execute-phase.md": "a0f26f223218812d",
|
||||
"gsd-core/workflows/execute-phase.md": "e4babdc61b00b387",
|
||||
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "6d38bfd540030da4",
|
||||
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
|
||||
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "e5d65c3a0ae0ed2a",
|
||||
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "ccd95645902f57af",
|
||||
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
|
||||
"gsd-core/workflows/execute-plan.md": "e81d3476290ef292",
|
||||
"gsd-core/workflows/execute-plan.md": "587757b937368212",
|
||||
"gsd-core/workflows/explore.md": "95e463d4bdd6dadd",
|
||||
"gsd-core/workflows/extract-learnings.md": "fd75072c339b58bd",
|
||||
"gsd-core/workflows/fast.md": "7f7687b920d79b29",
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
"gsd-core/VERSION": "ef0deccd81a6723c",
|
||||
"gsd-core/bin/check-latest-version.cjs": "e4a224058c8f4d74",
|
||||
"gsd-core/bin/ensure-runtime-build.cjs": "51bc64467ab30f62",
|
||||
"gsd-core/bin/gsd-tools.cjs": "cae92a5bde4f3414",
|
||||
"gsd-core/bin/gsd-tools.cjs": "bcecc5e92220b2b3",
|
||||
"gsd-core/bin/gsd_run": "62d9b647ede212e6",
|
||||
"gsd-core/bin/shared/config-defaults.manifest.json": "517e6a7c1e9f4f16",
|
||||
"gsd-core/bin/shared/config-schema.manifest.json": "0109a5a9866a24e0",
|
||||
@@ -87,6 +87,7 @@
|
||||
"gsd-core/references/execute-mvp-tdd.md": "a98a270a7ab126bc",
|
||||
"gsd-core/references/execute-phase-between-wave-reset.md": "3ad96ca0f7fee37e",
|
||||
"gsd-core/references/execute-phase-context-guard.md": "a5a1058d35806a8e",
|
||||
"gsd-core/references/execute-phase-requirement-revert.md": "48ade76866c57ce2",
|
||||
"gsd-core/references/execute-phase-wave-guard.md": "de9ac22cead4cfd8",
|
||||
"gsd-core/references/executor-examples.md": "ba59243ed45c8ab1",
|
||||
"gsd-core/references/few-shot-examples/plan-checker.md": "2574808188ac9de4",
|
||||
@@ -240,13 +241,13 @@
|
||||
"gsd-core/workflows/docs-update.md": "63082608d3ae92be",
|
||||
"gsd-core/workflows/edit-phase.md": "8323bfe10faa0c0a",
|
||||
"gsd-core/workflows/eval-review.md": "f59e8329dae1e528",
|
||||
"gsd-core/workflows/execute-phase.md": "a5ca7da9e551bf4c",
|
||||
"gsd-core/workflows/execute-phase.md": "7f2b133debb7b88f",
|
||||
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "facb0e816d87a0c7",
|
||||
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
|
||||
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "09ea1680a375b979",
|
||||
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "5f24c5ad58c2518f",
|
||||
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
|
||||
"gsd-core/workflows/execute-plan.md": "2cddec7d1b197e48",
|
||||
"gsd-core/workflows/execute-plan.md": "bc1c2a159117642c",
|
||||
"gsd-core/workflows/explore.md": "b9eea1bac358c9ce",
|
||||
"gsd-core/workflows/extract-learnings.md": "d8177b0c13b7e5ee",
|
||||
"gsd-core/workflows/fast.md": "41a6568b873aef99",
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
"gsd-core/VERSION": "ef0deccd81a6723c",
|
||||
"gsd-core/bin/check-latest-version.cjs": "e4a224058c8f4d74",
|
||||
"gsd-core/bin/ensure-runtime-build.cjs": "476aa24e8c4f03cf",
|
||||
"gsd-core/bin/gsd-tools.cjs": "01e301fba0dc2101",
|
||||
"gsd-core/bin/gsd-tools.cjs": "0f718645418266a8",
|
||||
"gsd-core/bin/gsd_run": "62d9b647ede212e6",
|
||||
"gsd-core/bin/shared/config-defaults.manifest.json": "517e6a7c1e9f4f16",
|
||||
"gsd-core/bin/shared/config-schema.manifest.json": "0109a5a9866a24e0",
|
||||
@@ -91,6 +91,7 @@
|
||||
"gsd-core/references/execute-mvp-tdd.md": "a98a270a7ab126bc",
|
||||
"gsd-core/references/execute-phase-between-wave-reset.md": "e9582246dbc617e0",
|
||||
"gsd-core/references/execute-phase-context-guard.md": "982006c1f3364242",
|
||||
"gsd-core/references/execute-phase-requirement-revert.md": "48ade76866c57ce2",
|
||||
"gsd-core/references/execute-phase-wave-guard.md": "742bb890af014c87",
|
||||
"gsd-core/references/executor-examples.md": "ba59243ed45c8ab1",
|
||||
"gsd-core/references/few-shot-examples/plan-checker.md": "2574808188ac9de4",
|
||||
@@ -244,13 +245,13 @@
|
||||
"gsd-core/workflows/docs-update.md": "39f288623a8f6f32",
|
||||
"gsd-core/workflows/edit-phase.md": "9c9fadc047c61d74",
|
||||
"gsd-core/workflows/eval-review.md": "3e1d7829ed2ed494",
|
||||
"gsd-core/workflows/execute-phase.md": "7cafa358f645936a",
|
||||
"gsd-core/workflows/execute-phase.md": "2b087f64c9fa112c",
|
||||
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "67ebc93f51968cb6",
|
||||
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
|
||||
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "27505ecd7d5b4e57",
|
||||
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "91eac50d2e1f5a2f",
|
||||
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
|
||||
"gsd-core/workflows/execute-plan.md": "7f186055a0246932",
|
||||
"gsd-core/workflows/execute-plan.md": "0db7b9db6454f380",
|
||||
"gsd-core/workflows/explore.md": "e83af8ceae314cf9",
|
||||
"gsd-core/workflows/extract-learnings.md": "6f39375b7dc775f9",
|
||||
"gsd-core/workflows/fast.md": "e4f74a454b6ca5e8",
|
||||
|
||||
@@ -110,7 +110,7 @@
|
||||
"gsd-core/VERSION": "ef0deccd81a6723c",
|
||||
"gsd-core/bin/check-latest-version.cjs": "e4a224058c8f4d74",
|
||||
"gsd-core/bin/ensure-runtime-build.cjs": "51bc64467ab30f62",
|
||||
"gsd-core/bin/gsd-tools.cjs": "cae92a5bde4f3414",
|
||||
"gsd-core/bin/gsd-tools.cjs": "bcecc5e92220b2b3",
|
||||
"gsd-core/bin/gsd_run": "62d9b647ede212e6",
|
||||
"gsd-core/bin/shared/config-defaults.manifest.json": "517e6a7c1e9f4f16",
|
||||
"gsd-core/bin/shared/config-schema.manifest.json": "0109a5a9866a24e0",
|
||||
@@ -159,6 +159,7 @@
|
||||
"gsd-core/references/execute-mvp-tdd.md": "a98a270a7ab126bc",
|
||||
"gsd-core/references/execute-phase-between-wave-reset.md": "3ad96ca0f7fee37e",
|
||||
"gsd-core/references/execute-phase-context-guard.md": "982006c1f3364242",
|
||||
"gsd-core/references/execute-phase-requirement-revert.md": "48ade76866c57ce2",
|
||||
"gsd-core/references/execute-phase-wave-guard.md": "de9ac22cead4cfd8",
|
||||
"gsd-core/references/executor-examples.md": "ba59243ed45c8ab1",
|
||||
"gsd-core/references/few-shot-examples/plan-checker.md": "2574808188ac9de4",
|
||||
@@ -312,13 +313,13 @@
|
||||
"gsd-core/workflows/docs-update.md": "f35922d15b7061c9",
|
||||
"gsd-core/workflows/edit-phase.md": "966a3eadd1bebc04",
|
||||
"gsd-core/workflows/eval-review.md": "f898936e2cfe4130",
|
||||
"gsd-core/workflows/execute-phase.md": "4d6f9e033792619a",
|
||||
"gsd-core/workflows/execute-phase.md": "64b6a432d49e3136",
|
||||
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "4e265392b3f2ba0e",
|
||||
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
|
||||
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "09ea1680a375b979",
|
||||
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "5f24c5ad58c2518f",
|
||||
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
|
||||
"gsd-core/workflows/execute-plan.md": "90cfc1e6e677d43f",
|
||||
"gsd-core/workflows/execute-plan.md": "1c26c1cf464fa6b7",
|
||||
"gsd-core/workflows/explore.md": "6c04f2e658d93261",
|
||||
"gsd-core/workflows/extract-learnings.md": "b6f01ca3d8f58de4",
|
||||
"gsd-core/workflows/fast.md": "11f5cd10ae5cc7d3",
|
||||
|
||||
@@ -145,7 +145,7 @@
|
||||
"gsd-core/VERSION": "ef0deccd81a6723c",
|
||||
"gsd-core/bin/check-latest-version.cjs": "e4a224058c8f4d74",
|
||||
"gsd-core/bin/ensure-runtime-build.cjs": "51bc64467ab30f62",
|
||||
"gsd-core/bin/gsd-tools.cjs": "cae92a5bde4f3414",
|
||||
"gsd-core/bin/gsd-tools.cjs": "bcecc5e92220b2b3",
|
||||
"gsd-core/bin/gsd_run": "62d9b647ede212e6",
|
||||
"gsd-core/bin/shared/config-defaults.manifest.json": "517e6a7c1e9f4f16",
|
||||
"gsd-core/bin/shared/config-schema.manifest.json": "0109a5a9866a24e0",
|
||||
@@ -194,6 +194,7 @@
|
||||
"gsd-core/references/execute-mvp-tdd.md": "a98a270a7ab126bc",
|
||||
"gsd-core/references/execute-phase-between-wave-reset.md": "3ad96ca0f7fee37e",
|
||||
"gsd-core/references/execute-phase-context-guard.md": "a483199612e216f1",
|
||||
"gsd-core/references/execute-phase-requirement-revert.md": "48ade76866c57ce2",
|
||||
"gsd-core/references/execute-phase-wave-guard.md": "95e55087876a0d96",
|
||||
"gsd-core/references/executor-examples.md": "ba59243ed45c8ab1",
|
||||
"gsd-core/references/few-shot-examples/plan-checker.md": "2574808188ac9de4",
|
||||
@@ -347,13 +348,13 @@
|
||||
"gsd-core/workflows/docs-update.md": "e255317df939e302",
|
||||
"gsd-core/workflows/edit-phase.md": "e592a4d85ce5380f",
|
||||
"gsd-core/workflows/eval-review.md": "63d0d0670b54c244",
|
||||
"gsd-core/workflows/execute-phase.md": "8176e734cd927891",
|
||||
"gsd-core/workflows/execute-phase.md": "916e24c2bd0da0f7",
|
||||
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "f4cacd27d37bac65",
|
||||
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
|
||||
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "09ea1680a375b979",
|
||||
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "5f24c5ad58c2518f",
|
||||
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
|
||||
"gsd-core/workflows/execute-plan.md": "89dda78cf3c1f1b7",
|
||||
"gsd-core/workflows/execute-plan.md": "4492431f93e1df8c",
|
||||
"gsd-core/workflows/explore.md": "2ef10d17c8864a04",
|
||||
"gsd-core/workflows/extract-learnings.md": "f716aa03fcb5f8da",
|
||||
"gsd-core/workflows/fast.md": "e4ed60f96a7b3ac8",
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
"gsd-core/VERSION": "ef0deccd81a6723c",
|
||||
"gsd-core/bin/check-latest-version.cjs": "e4a224058c8f4d74",
|
||||
"gsd-core/bin/ensure-runtime-build.cjs": "ea841e2865248e74",
|
||||
"gsd-core/bin/gsd-tools.cjs": "bcccc9e975b37e39",
|
||||
"gsd-core/bin/gsd-tools.cjs": "0a2fc4e226f009c5",
|
||||
"gsd-core/bin/gsd_run": "62d9b647ede212e6",
|
||||
"gsd-core/bin/shared/config-defaults.manifest.json": "517e6a7c1e9f4f16",
|
||||
"gsd-core/bin/shared/config-schema.manifest.json": "0109a5a9866a24e0",
|
||||
@@ -89,6 +89,7 @@
|
||||
"gsd-core/references/execute-mvp-tdd.md": "a98a270a7ab126bc",
|
||||
"gsd-core/references/execute-phase-between-wave-reset.md": "3ad96ca0f7fee37e",
|
||||
"gsd-core/references/execute-phase-context-guard.md": "a5a1058d35806a8e",
|
||||
"gsd-core/references/execute-phase-requirement-revert.md": "48ade76866c57ce2",
|
||||
"gsd-core/references/execute-phase-wave-guard.md": "1eb1e1e552ebd17b",
|
||||
"gsd-core/references/executor-examples.md": "ba59243ed45c8ab1",
|
||||
"gsd-core/references/few-shot-examples/plan-checker.md": "2574808188ac9de4",
|
||||
@@ -242,13 +243,13 @@
|
||||
"gsd-core/workflows/docs-update.md": "9292cfa3c52c434e",
|
||||
"gsd-core/workflows/edit-phase.md": "8667c28b22b1599f",
|
||||
"gsd-core/workflows/eval-review.md": "81c8e72ba3862856",
|
||||
"gsd-core/workflows/execute-phase.md": "75bc8795af213c29",
|
||||
"gsd-core/workflows/execute-phase.md": "95afff0cf3e75bf6",
|
||||
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "63b712920f21a40f",
|
||||
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
|
||||
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "1963079fe27412c6",
|
||||
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "bce45e41bc6802e8",
|
||||
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
|
||||
"gsd-core/workflows/execute-plan.md": "66879e62abcc33ae",
|
||||
"gsd-core/workflows/execute-plan.md": "388f3cd58a3adac5",
|
||||
"gsd-core/workflows/explore.md": "5fd91a8510e1114b",
|
||||
"gsd-core/workflows/extract-learnings.md": "f34d0b1927545b18",
|
||||
"gsd-core/workflows/fast.md": "66821090b6b8ed3b",
|
||||
|
||||
@@ -110,7 +110,7 @@
|
||||
"gsd-core/VERSION": "ef0deccd81a6723c",
|
||||
"gsd-core/bin/check-latest-version.cjs": "e4a224058c8f4d74",
|
||||
"gsd-core/bin/ensure-runtime-build.cjs": "2525f1ae8b086828",
|
||||
"gsd-core/bin/gsd-tools.cjs": "1cb30e24bc75c677",
|
||||
"gsd-core/bin/gsd-tools.cjs": "35ec4c40e46036eb",
|
||||
"gsd-core/bin/gsd_run": "62d9b647ede212e6",
|
||||
"gsd-core/bin/shared/config-defaults.manifest.json": "517e6a7c1e9f4f16",
|
||||
"gsd-core/bin/shared/config-schema.manifest.json": "0109a5a9866a24e0",
|
||||
@@ -159,6 +159,7 @@
|
||||
"gsd-core/references/execute-mvp-tdd.md": "a98a270a7ab126bc",
|
||||
"gsd-core/references/execute-phase-between-wave-reset.md": "44e31bdae72ed5d5",
|
||||
"gsd-core/references/execute-phase-context-guard.md": "a5a1058d35806a8e",
|
||||
"gsd-core/references/execute-phase-requirement-revert.md": "48ade76866c57ce2",
|
||||
"gsd-core/references/execute-phase-wave-guard.md": "b0e27ed2d8405974",
|
||||
"gsd-core/references/executor-examples.md": "ba59243ed45c8ab1",
|
||||
"gsd-core/references/few-shot-examples/plan-checker.md": "2574808188ac9de4",
|
||||
@@ -312,13 +313,13 @@
|
||||
"gsd-core/workflows/docs-update.md": "e86d7d7e2e3dac6d",
|
||||
"gsd-core/workflows/edit-phase.md": "8323bfe10faa0c0a",
|
||||
"gsd-core/workflows/eval-review.md": "a86279dd98dd5c03",
|
||||
"gsd-core/workflows/execute-phase.md": "f67b5d55c3e7dc4b",
|
||||
"gsd-core/workflows/execute-phase.md": "875819cbb102d6bc",
|
||||
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "facb0e816d87a0c7",
|
||||
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
|
||||
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "09ea1680a375b979",
|
||||
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "5f24c5ad58c2518f",
|
||||
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
|
||||
"gsd-core/workflows/execute-plan.md": "a57ce521a92348ef",
|
||||
"gsd-core/workflows/execute-plan.md": "13e9664263d3844d",
|
||||
"gsd-core/workflows/explore.md": "b9eea1bac358c9ce",
|
||||
"gsd-core/workflows/extract-learnings.md": "d8177b0c13b7e5ee",
|
||||
"gsd-core/workflows/fast.md": "77b49793e26b3323",
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
"gsd-core/VERSION": "ef0deccd81a6723c",
|
||||
"gsd-core/bin/check-latest-version.cjs": "e4a224058c8f4d74",
|
||||
"gsd-core/bin/ensure-runtime-build.cjs": "3a3409215044af9f",
|
||||
"gsd-core/bin/gsd-tools.cjs": "ce9059c4e3fa8d33",
|
||||
"gsd-core/bin/gsd-tools.cjs": "693bd27cb9b76b76",
|
||||
"gsd-core/bin/gsd_run": "62d9b647ede212e6",
|
||||
"gsd-core/bin/shared/config-defaults.manifest.json": "517e6a7c1e9f4f16",
|
||||
"gsd-core/bin/shared/config-schema.manifest.json": "0109a5a9866a24e0",
|
||||
@@ -88,6 +88,7 @@
|
||||
"gsd-core/references/execute-mvp-tdd.md": "a98a270a7ab126bc",
|
||||
"gsd-core/references/execute-phase-between-wave-reset.md": "4d6ea8e85e88b1fe",
|
||||
"gsd-core/references/execute-phase-context-guard.md": "a5a1058d35806a8e",
|
||||
"gsd-core/references/execute-phase-requirement-revert.md": "48ade76866c57ce2",
|
||||
"gsd-core/references/execute-phase-wave-guard.md": "b13d8860a76b7a41",
|
||||
"gsd-core/references/executor-examples.md": "ba59243ed45c8ab1",
|
||||
"gsd-core/references/few-shot-examples/plan-checker.md": "2574808188ac9de4",
|
||||
@@ -241,13 +242,13 @@
|
||||
"gsd-core/workflows/docs-update.md": "ba4cf926fc463cbe",
|
||||
"gsd-core/workflows/edit-phase.md": "7f27003f20e88fb8",
|
||||
"gsd-core/workflows/eval-review.md": "f510e5762212dc6f",
|
||||
"gsd-core/workflows/execute-phase.md": "3205cca9fe364951",
|
||||
"gsd-core/workflows/execute-phase.md": "e69d330bed0d9468",
|
||||
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "14a27cc0828f59d3",
|
||||
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "26ee34c543926402",
|
||||
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "5d3a54df40320dbf",
|
||||
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "1ec347a324814b1d",
|
||||
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
|
||||
"gsd-core/workflows/execute-plan.md": "274b22f8e53c88d1",
|
||||
"gsd-core/workflows/execute-plan.md": "ed1528fcbfb792a8",
|
||||
"gsd-core/workflows/explore.md": "d931b4d85a74c795",
|
||||
"gsd-core/workflows/extract-learnings.md": "e9e167c718949c0b",
|
||||
"gsd-core/workflows/fast.md": "c801145115755524",
|
||||
|
||||
@@ -110,7 +110,7 @@
|
||||
"gsd-core/VERSION": "ef0deccd81a6723c",
|
||||
"gsd-core/bin/check-latest-version.cjs": "e4a224058c8f4d74",
|
||||
"gsd-core/bin/ensure-runtime-build.cjs": "51bc64467ab30f62",
|
||||
"gsd-core/bin/gsd-tools.cjs": "cae92a5bde4f3414",
|
||||
"gsd-core/bin/gsd-tools.cjs": "bcecc5e92220b2b3",
|
||||
"gsd-core/bin/gsd_run": "62d9b647ede212e6",
|
||||
"gsd-core/bin/shared/config-defaults.manifest.json": "517e6a7c1e9f4f16",
|
||||
"gsd-core/bin/shared/config-schema.manifest.json": "0109a5a9866a24e0",
|
||||
@@ -159,6 +159,7 @@
|
||||
"gsd-core/references/execute-mvp-tdd.md": "a98a270a7ab126bc",
|
||||
"gsd-core/references/execute-phase-between-wave-reset.md": "3ad96ca0f7fee37e",
|
||||
"gsd-core/references/execute-phase-context-guard.md": "a5a1058d35806a8e",
|
||||
"gsd-core/references/execute-phase-requirement-revert.md": "48ade76866c57ce2",
|
||||
"gsd-core/references/execute-phase-wave-guard.md": "de9ac22cead4cfd8",
|
||||
"gsd-core/references/executor-examples.md": "ba59243ed45c8ab1",
|
||||
"gsd-core/references/few-shot-examples/plan-checker.md": "2574808188ac9de4",
|
||||
@@ -312,13 +313,13 @@
|
||||
"gsd-core/workflows/docs-update.md": "79afaaf19fd527cc",
|
||||
"gsd-core/workflows/edit-phase.md": "8323bfe10faa0c0a",
|
||||
"gsd-core/workflows/eval-review.md": "926eda8bbee28b23",
|
||||
"gsd-core/workflows/execute-phase.md": "4babf365129ad14b",
|
||||
"gsd-core/workflows/execute-phase.md": "a470b8e99e963c83",
|
||||
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "facb0e816d87a0c7",
|
||||
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
|
||||
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "09ea1680a375b979",
|
||||
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "5f24c5ad58c2518f",
|
||||
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
|
||||
"gsd-core/workflows/execute-plan.md": "21c1dc158588803a",
|
||||
"gsd-core/workflows/execute-plan.md": "0e40eda4ae70fcab",
|
||||
"gsd-core/workflows/explore.md": "14242d36d4822df6",
|
||||
"gsd-core/workflows/extract-learnings.md": "d8177b0c13b7e5ee",
|
||||
"gsd-core/workflows/fast.md": "41a6568b873aef99",
|
||||
|
||||
@@ -103,7 +103,7 @@
|
||||
"gsd-core/VERSION": "ef0deccd81a6723c",
|
||||
"gsd-core/bin/check-latest-version.cjs": "e4a224058c8f4d74",
|
||||
"gsd-core/bin/ensure-runtime-build.cjs": "51bc64467ab30f62",
|
||||
"gsd-core/bin/gsd-tools.cjs": "cae92a5bde4f3414",
|
||||
"gsd-core/bin/gsd-tools.cjs": "bcecc5e92220b2b3",
|
||||
"gsd-core/bin/gsd_run": "62d9b647ede212e6",
|
||||
"gsd-core/bin/shared/config-defaults.manifest.json": "517e6a7c1e9f4f16",
|
||||
"gsd-core/bin/shared/config-schema.manifest.json": "0109a5a9866a24e0",
|
||||
@@ -152,6 +152,7 @@
|
||||
"gsd-core/references/execute-mvp-tdd.md": "a98a270a7ab126bc",
|
||||
"gsd-core/references/execute-phase-between-wave-reset.md": "3ad96ca0f7fee37e",
|
||||
"gsd-core/references/execute-phase-context-guard.md": "982006c1f3364242",
|
||||
"gsd-core/references/execute-phase-requirement-revert.md": "48ade76866c57ce2",
|
||||
"gsd-core/references/execute-phase-wave-guard.md": "de9ac22cead4cfd8",
|
||||
"gsd-core/references/executor-examples.md": "ba59243ed45c8ab1",
|
||||
"gsd-core/references/few-shot-examples/plan-checker.md": "2574808188ac9de4",
|
||||
@@ -305,13 +306,13 @@
|
||||
"gsd-core/workflows/docs-update.md": "f35922d15b7061c9",
|
||||
"gsd-core/workflows/edit-phase.md": "966a3eadd1bebc04",
|
||||
"gsd-core/workflows/eval-review.md": "f898936e2cfe4130",
|
||||
"gsd-core/workflows/execute-phase.md": "2629630eb4a94a6b",
|
||||
"gsd-core/workflows/execute-phase.md": "d06e2f3aa15eba2b",
|
||||
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "4e265392b3f2ba0e",
|
||||
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
|
||||
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "09ea1680a375b979",
|
||||
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "5f24c5ad58c2518f",
|
||||
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
|
||||
"gsd-core/workflows/execute-plan.md": "3c4310c2dd9ef0ad",
|
||||
"gsd-core/workflows/execute-plan.md": "045ad8cb48444e57",
|
||||
"gsd-core/workflows/explore.md": "6c04f2e658d93261",
|
||||
"gsd-core/workflows/extract-learnings.md": "b6f01ca3d8f58de4",
|
||||
"gsd-core/workflows/fast.md": "11f5cd10ae5cc7d3",
|
||||
|
||||
@@ -110,7 +110,7 @@
|
||||
"gsd-core/VERSION": "ef0deccd81a6723c",
|
||||
"gsd-core/bin/check-latest-version.cjs": "e4a224058c8f4d74",
|
||||
"gsd-core/bin/ensure-runtime-build.cjs": "51bc64467ab30f62",
|
||||
"gsd-core/bin/gsd-tools.cjs": "cae92a5bde4f3414",
|
||||
"gsd-core/bin/gsd-tools.cjs": "bcecc5e92220b2b3",
|
||||
"gsd-core/bin/gsd_run": "62d9b647ede212e6",
|
||||
"gsd-core/bin/shared/config-defaults.manifest.json": "517e6a7c1e9f4f16",
|
||||
"gsd-core/bin/shared/config-schema.manifest.json": "0109a5a9866a24e0",
|
||||
@@ -159,6 +159,7 @@
|
||||
"gsd-core/references/execute-mvp-tdd.md": "a98a270a7ab126bc",
|
||||
"gsd-core/references/execute-phase-between-wave-reset.md": "3ad96ca0f7fee37e",
|
||||
"gsd-core/references/execute-phase-context-guard.md": "a5a1058d35806a8e",
|
||||
"gsd-core/references/execute-phase-requirement-revert.md": "48ade76866c57ce2",
|
||||
"gsd-core/references/execute-phase-wave-guard.md": "de9ac22cead4cfd8",
|
||||
"gsd-core/references/executor-examples.md": "ba59243ed45c8ab1",
|
||||
"gsd-core/references/few-shot-examples/plan-checker.md": "2574808188ac9de4",
|
||||
@@ -312,13 +313,13 @@
|
||||
"gsd-core/workflows/docs-update.md": "850366c2ef8fb780",
|
||||
"gsd-core/workflows/edit-phase.md": "1876c855fb0a0a39",
|
||||
"gsd-core/workflows/eval-review.md": "5394694d29ad7543",
|
||||
"gsd-core/workflows/execute-phase.md": "895f8e910b32ebd4",
|
||||
"gsd-core/workflows/execute-phase.md": "e5a4f684bd87245c",
|
||||
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "1804215577f1ad35",
|
||||
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
|
||||
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "01c2fe9e5bcb57be",
|
||||
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "86b8a7f50115162f",
|
||||
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
|
||||
"gsd-core/workflows/execute-plan.md": "cdd49ac15770c9d1",
|
||||
"gsd-core/workflows/execute-plan.md": "ac4a07ff7e42190d",
|
||||
"gsd-core/workflows/explore.md": "7f5f9231cfd3089b",
|
||||
"gsd-core/workflows/extract-learnings.md": "92b3c0979604b7d0",
|
||||
"gsd-core/workflows/fast.md": "12187b242e6af970",
|
||||
|
||||
7
tests/fixtures/golden-install-parity/pi.json
vendored
7
tests/fixtures/golden-install-parity/pi.json
vendored
@@ -6,7 +6,7 @@
|
||||
"gsd-core/VERSION": "ef0deccd81a6723c",
|
||||
"gsd-core/bin/check-latest-version.cjs": "e4a224058c8f4d74",
|
||||
"gsd-core/bin/ensure-runtime-build.cjs": "51bc64467ab30f62",
|
||||
"gsd-core/bin/gsd-tools.cjs": "cae92a5bde4f3414",
|
||||
"gsd-core/bin/gsd-tools.cjs": "bcecc5e92220b2b3",
|
||||
"gsd-core/bin/gsd_run": "62d9b647ede212e6",
|
||||
"gsd-core/bin/shared/config-defaults.manifest.json": "517e6a7c1e9f4f16",
|
||||
"gsd-core/bin/shared/config-schema.manifest.json": "0109a5a9866a24e0",
|
||||
@@ -55,6 +55,7 @@
|
||||
"gsd-core/references/execute-mvp-tdd.md": "a98a270a7ab126bc",
|
||||
"gsd-core/references/execute-phase-between-wave-reset.md": "3ad96ca0f7fee37e",
|
||||
"gsd-core/references/execute-phase-context-guard.md": "982006c1f3364242",
|
||||
"gsd-core/references/execute-phase-requirement-revert.md": "48ade76866c57ce2",
|
||||
"gsd-core/references/execute-phase-wave-guard.md": "de9ac22cead4cfd8",
|
||||
"gsd-core/references/executor-examples.md": "ba59243ed45c8ab1",
|
||||
"gsd-core/references/few-shot-examples/plan-checker.md": "2574808188ac9de4",
|
||||
@@ -208,13 +209,13 @@
|
||||
"gsd-core/workflows/docs-update.md": "f35922d15b7061c9",
|
||||
"gsd-core/workflows/edit-phase.md": "966a3eadd1bebc04",
|
||||
"gsd-core/workflows/eval-review.md": "f898936e2cfe4130",
|
||||
"gsd-core/workflows/execute-phase.md": "353711104c33d19f",
|
||||
"gsd-core/workflows/execute-phase.md": "01ccacd935b7c620",
|
||||
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "4e265392b3f2ba0e",
|
||||
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
|
||||
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "09ea1680a375b979",
|
||||
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "5f24c5ad58c2518f",
|
||||
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
|
||||
"gsd-core/workflows/execute-plan.md": "d797619290e91120",
|
||||
"gsd-core/workflows/execute-plan.md": "6412aa2edd5a4452",
|
||||
"gsd-core/workflows/explore.md": "6c04f2e658d93261",
|
||||
"gsd-core/workflows/extract-learnings.md": "b6f01ca3d8f58de4",
|
||||
"gsd-core/workflows/fast.md": "11f5cd10ae5cc7d3",
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
"gsd-core/VERSION": "ef0deccd81a6723c",
|
||||
"gsd-core/bin/check-latest-version.cjs": "e4a224058c8f4d74",
|
||||
"gsd-core/bin/ensure-runtime-build.cjs": "6e98d76e955e35a2",
|
||||
"gsd-core/bin/gsd-tools.cjs": "5690fc2c19953392",
|
||||
"gsd-core/bin/gsd-tools.cjs": "3f367ea99374b291",
|
||||
"gsd-core/bin/gsd_run": "62d9b647ede212e6",
|
||||
"gsd-core/bin/shared/config-defaults.manifest.json": "517e6a7c1e9f4f16",
|
||||
"gsd-core/bin/shared/config-schema.manifest.json": "0109a5a9866a24e0",
|
||||
@@ -88,6 +88,7 @@
|
||||
"gsd-core/references/execute-mvp-tdd.md": "a98a270a7ab126bc",
|
||||
"gsd-core/references/execute-phase-between-wave-reset.md": "8c2e5a596401dd33",
|
||||
"gsd-core/references/execute-phase-context-guard.md": "a5a1058d35806a8e",
|
||||
"gsd-core/references/execute-phase-requirement-revert.md": "48ade76866c57ce2",
|
||||
"gsd-core/references/execute-phase-wave-guard.md": "41d8123374d3838b",
|
||||
"gsd-core/references/executor-examples.md": "ba59243ed45c8ab1",
|
||||
"gsd-core/references/few-shot-examples/plan-checker.md": "2574808188ac9de4",
|
||||
@@ -241,13 +242,13 @@
|
||||
"gsd-core/workflows/docs-update.md": "45d2f0d173c84e07",
|
||||
"gsd-core/workflows/edit-phase.md": "0fb5e0123cfc6f36",
|
||||
"gsd-core/workflows/eval-review.md": "6dee8a1e40ececd4",
|
||||
"gsd-core/workflows/execute-phase.md": "840ce6d4ff582aed",
|
||||
"gsd-core/workflows/execute-phase.md": "e51bcc011f22d197",
|
||||
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "36af8d91e4ae8b9c",
|
||||
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
|
||||
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "94765e9fc206efbf",
|
||||
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "463e4e1b57b22b24",
|
||||
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
|
||||
"gsd-core/workflows/execute-plan.md": "79410db4a6bb5a46",
|
||||
"gsd-core/workflows/execute-plan.md": "25ef51fc9900f4b4",
|
||||
"gsd-core/workflows/explore.md": "e1a83a8982532e5b",
|
||||
"gsd-core/workflows/extract-learnings.md": "dd4fdb88605de49a",
|
||||
"gsd-core/workflows/fast.md": "93ed453edddd8c0c",
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
"gsd-core/VERSION": "ef0deccd81a6723c",
|
||||
"gsd-core/bin/check-latest-version.cjs": "e4a224058c8f4d74",
|
||||
"gsd-core/bin/ensure-runtime-build.cjs": "de4627dff103d527",
|
||||
"gsd-core/bin/gsd-tools.cjs": "38fe136ab7f63b5c",
|
||||
"gsd-core/bin/gsd-tools.cjs": "84762454c60a6c9a",
|
||||
"gsd-core/bin/gsd_run": "62d9b647ede212e6",
|
||||
"gsd-core/bin/shared/config-defaults.manifest.json": "517e6a7c1e9f4f16",
|
||||
"gsd-core/bin/shared/config-schema.manifest.json": "0109a5a9866a24e0",
|
||||
@@ -88,6 +88,7 @@
|
||||
"gsd-core/references/execute-mvp-tdd.md": "a98a270a7ab126bc",
|
||||
"gsd-core/references/execute-phase-between-wave-reset.md": "7a1aa0ad7963f809",
|
||||
"gsd-core/references/execute-phase-context-guard.md": "a5a1058d35806a8e",
|
||||
"gsd-core/references/execute-phase-requirement-revert.md": "48ade76866c57ce2",
|
||||
"gsd-core/references/execute-phase-wave-guard.md": "973a3a6a5db7e449",
|
||||
"gsd-core/references/executor-examples.md": "ba59243ed45c8ab1",
|
||||
"gsd-core/references/few-shot-examples/plan-checker.md": "2574808188ac9de4",
|
||||
@@ -241,13 +242,13 @@
|
||||
"gsd-core/workflows/docs-update.md": "f13571f08e083356",
|
||||
"gsd-core/workflows/edit-phase.md": "7facd0faa33c8cad",
|
||||
"gsd-core/workflows/eval-review.md": "37d545d4f0db4927",
|
||||
"gsd-core/workflows/execute-phase.md": "cadbd19b2a828111",
|
||||
"gsd-core/workflows/execute-phase.md": "13789ed1d5ffc4e4",
|
||||
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "c985a30317a1aa6b",
|
||||
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
|
||||
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "06f115a379580094",
|
||||
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "9d58274a5a1b14f5",
|
||||
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
|
||||
"gsd-core/workflows/execute-plan.md": "feae1e61007feab2",
|
||||
"gsd-core/workflows/execute-plan.md": "1a409bc80100b6ee",
|
||||
"gsd-core/workflows/explore.md": "8a5437aa0c239c38",
|
||||
"gsd-core/workflows/extract-learnings.md": "3fcc858b20d0d0e6",
|
||||
"gsd-core/workflows/fast.md": "0f05b1e008ac2fc2",
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
"gsd-core/VERSION": "ef0deccd81a6723c",
|
||||
"gsd-core/bin/check-latest-version.cjs": "e4a224058c8f4d74",
|
||||
"gsd-core/bin/ensure-runtime-build.cjs": "5636ca0b726871b2",
|
||||
"gsd-core/bin/gsd-tools.cjs": "8f1e439594006870",
|
||||
"gsd-core/bin/gsd-tools.cjs": "3a0f24b2def05244",
|
||||
"gsd-core/bin/gsd_run": "62d9b647ede212e6",
|
||||
"gsd-core/bin/shared/config-defaults.manifest.json": "517e6a7c1e9f4f16",
|
||||
"gsd-core/bin/shared/config-schema.manifest.json": "0109a5a9866a24e0",
|
||||
@@ -88,6 +88,7 @@
|
||||
"gsd-core/references/execute-mvp-tdd.md": "a98a270a7ab126bc",
|
||||
"gsd-core/references/execute-phase-between-wave-reset.md": "1587345770b19c7f",
|
||||
"gsd-core/references/execute-phase-context-guard.md": "a5a1058d35806a8e",
|
||||
"gsd-core/references/execute-phase-requirement-revert.md": "48ade76866c57ce2",
|
||||
"gsd-core/references/execute-phase-wave-guard.md": "96485eccd4606e54",
|
||||
"gsd-core/references/executor-examples.md": "ba59243ed45c8ab1",
|
||||
"gsd-core/references/few-shot-examples/plan-checker.md": "2574808188ac9de4",
|
||||
@@ -241,13 +242,13 @@
|
||||
"gsd-core/workflows/docs-update.md": "70f73cc8c27e0ca0",
|
||||
"gsd-core/workflows/edit-phase.md": "c0ae7d0063f3e789",
|
||||
"gsd-core/workflows/eval-review.md": "b28be79ef29f16fd",
|
||||
"gsd-core/workflows/execute-phase.md": "46a363f3f33cc596",
|
||||
"gsd-core/workflows/execute-phase.md": "0fc874e8103061d5",
|
||||
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "47ae5482f8e64100",
|
||||
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
|
||||
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "003c6a0f21a4aa61",
|
||||
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "e469e777fb8e7fbb",
|
||||
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
|
||||
"gsd-core/workflows/execute-plan.md": "403c53e3148033a3",
|
||||
"gsd-core/workflows/execute-plan.md": "864931070aedf894",
|
||||
"gsd-core/workflows/explore.md": "04e461ff8159a24e",
|
||||
"gsd-core/workflows/extract-learnings.md": "af793bdf4ffd1c8a",
|
||||
"gsd-core/workflows/fast.md": "b03b9f595892479a",
|
||||
|
||||
@@ -110,7 +110,7 @@
|
||||
"gsd-core/VERSION": "ef0deccd81a6723c",
|
||||
"gsd-core/bin/check-latest-version.cjs": "e4a224058c8f4d74",
|
||||
"gsd-core/bin/ensure-runtime-build.cjs": "51bc64467ab30f62",
|
||||
"gsd-core/bin/gsd-tools.cjs": "cae92a5bde4f3414",
|
||||
"gsd-core/bin/gsd-tools.cjs": "bcecc5e92220b2b3",
|
||||
"gsd-core/bin/gsd_run": "62d9b647ede212e6",
|
||||
"gsd-core/bin/shared/config-defaults.manifest.json": "517e6a7c1e9f4f16",
|
||||
"gsd-core/bin/shared/config-schema.manifest.json": "0109a5a9866a24e0",
|
||||
@@ -159,6 +159,7 @@
|
||||
"gsd-core/references/execute-mvp-tdd.md": "a98a270a7ab126bc",
|
||||
"gsd-core/references/execute-phase-between-wave-reset.md": "3ad96ca0f7fee37e",
|
||||
"gsd-core/references/execute-phase-context-guard.md": "982006c1f3364242",
|
||||
"gsd-core/references/execute-phase-requirement-revert.md": "48ade76866c57ce2",
|
||||
"gsd-core/references/execute-phase-wave-guard.md": "de9ac22cead4cfd8",
|
||||
"gsd-core/references/executor-examples.md": "ba59243ed45c8ab1",
|
||||
"gsd-core/references/few-shot-examples/plan-checker.md": "2574808188ac9de4",
|
||||
@@ -312,13 +313,13 @@
|
||||
"gsd-core/workflows/docs-update.md": "f35922d15b7061c9",
|
||||
"gsd-core/workflows/edit-phase.md": "966a3eadd1bebc04",
|
||||
"gsd-core/workflows/eval-review.md": "f898936e2cfe4130",
|
||||
"gsd-core/workflows/execute-phase.md": "4bd16cf990e3ee63",
|
||||
"gsd-core/workflows/execute-phase.md": "2f43fae80c4c4fab",
|
||||
"gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "4e265392b3f2ba0e",
|
||||
"gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028",
|
||||
"gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "09ea1680a375b979",
|
||||
"gsd-core/workflows/execute-phase/steps/regression-gate.md": "5f24c5ad58c2518f",
|
||||
"gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e",
|
||||
"gsd-core/workflows/execute-plan.md": "4614bb2145a7f737",
|
||||
"gsd-core/workflows/execute-plan.md": "ee300f9c6f7626c8",
|
||||
"gsd-core/workflows/explore.md": "6c04f2e658d93261",
|
||||
"gsd-core/workflows/extract-learnings.md": "b6f01ca3d8f58de4",
|
||||
"gsd-core/workflows/fast.md": "11f5cd10ae5cc7d3",
|
||||
|
||||
1
tests/fixtures/install-tree/antigravity.json
vendored
1
tests/fixtures/install-tree/antigravity.json
vendored
@@ -88,6 +88,7 @@
|
||||
"gsd-core/references/execute-mvp-tdd.md",
|
||||
"gsd-core/references/execute-phase-between-wave-reset.md",
|
||||
"gsd-core/references/execute-phase-context-guard.md",
|
||||
"gsd-core/references/execute-phase-requirement-revert.md",
|
||||
"gsd-core/references/execute-phase-wave-guard.md",
|
||||
"gsd-core/references/executor-examples.md",
|
||||
"gsd-core/references/few-shot-examples/plan-checker.md",
|
||||
|
||||
1
tests/fixtures/install-tree/augment.json
vendored
1
tests/fixtures/install-tree/augment.json
vendored
@@ -159,6 +159,7 @@
|
||||
"gsd-core/references/execute-mvp-tdd.md",
|
||||
"gsd-core/references/execute-phase-between-wave-reset.md",
|
||||
"gsd-core/references/execute-phase-context-guard.md",
|
||||
"gsd-core/references/execute-phase-requirement-revert.md",
|
||||
"gsd-core/references/execute-phase-wave-guard.md",
|
||||
"gsd-core/references/executor-examples.md",
|
||||
"gsd-core/references/few-shot-examples/plan-checker.md",
|
||||
|
||||
@@ -158,6 +158,7 @@
|
||||
"gsd-core/references/execute-mvp-tdd.md",
|
||||
"gsd-core/references/execute-phase-between-wave-reset.md",
|
||||
"gsd-core/references/execute-phase-context-guard.md",
|
||||
"gsd-core/references/execute-phase-requirement-revert.md",
|
||||
"gsd-core/references/execute-phase-wave-guard.md",
|
||||
"gsd-core/references/executor-examples.md",
|
||||
"gsd-core/references/few-shot-examples/plan-checker.md",
|
||||
|
||||
1
tests/fixtures/install-tree/claude.json
vendored
1
tests/fixtures/install-tree/claude.json
vendored
@@ -87,6 +87,7 @@
|
||||
"gsd-core/references/execute-mvp-tdd.md",
|
||||
"gsd-core/references/execute-phase-between-wave-reset.md",
|
||||
"gsd-core/references/execute-phase-context-guard.md",
|
||||
"gsd-core/references/execute-phase-requirement-revert.md",
|
||||
"gsd-core/references/execute-phase-wave-guard.md",
|
||||
"gsd-core/references/executor-examples.md",
|
||||
"gsd-core/references/few-shot-examples/plan-checker.md",
|
||||
|
||||
1
tests/fixtures/install-tree/cline.json
vendored
1
tests/fixtures/install-tree/cline.json
vendored
@@ -91,6 +91,7 @@
|
||||
"gsd-core/references/execute-mvp-tdd.md",
|
||||
"gsd-core/references/execute-phase-between-wave-reset.md",
|
||||
"gsd-core/references/execute-phase-context-guard.md",
|
||||
"gsd-core/references/execute-phase-requirement-revert.md",
|
||||
"gsd-core/references/execute-phase-wave-guard.md",
|
||||
"gsd-core/references/executor-examples.md",
|
||||
"gsd-core/references/few-shot-examples/plan-checker.md",
|
||||
|
||||
1
tests/fixtures/install-tree/codebuddy.json
vendored
1
tests/fixtures/install-tree/codebuddy.json
vendored
@@ -159,6 +159,7 @@
|
||||
"gsd-core/references/execute-mvp-tdd.md",
|
||||
"gsd-core/references/execute-phase-between-wave-reset.md",
|
||||
"gsd-core/references/execute-phase-context-guard.md",
|
||||
"gsd-core/references/execute-phase-requirement-revert.md",
|
||||
"gsd-core/references/execute-phase-wave-guard.md",
|
||||
"gsd-core/references/executor-examples.md",
|
||||
"gsd-core/references/few-shot-examples/plan-checker.md",
|
||||
|
||||
1
tests/fixtures/install-tree/codex.json
vendored
1
tests/fixtures/install-tree/codex.json
vendored
@@ -194,6 +194,7 @@
|
||||
"gsd-core/references/execute-mvp-tdd.md",
|
||||
"gsd-core/references/execute-phase-between-wave-reset.md",
|
||||
"gsd-core/references/execute-phase-context-guard.md",
|
||||
"gsd-core/references/execute-phase-requirement-revert.md",
|
||||
"gsd-core/references/execute-phase-wave-guard.md",
|
||||
"gsd-core/references/executor-examples.md",
|
||||
"gsd-core/references/few-shot-examples/plan-checker.md",
|
||||
|
||||
1
tests/fixtures/install-tree/copilot.json
vendored
1
tests/fixtures/install-tree/copilot.json
vendored
@@ -89,6 +89,7 @@
|
||||
"gsd-core/references/execute-mvp-tdd.md",
|
||||
"gsd-core/references/execute-phase-between-wave-reset.md",
|
||||
"gsd-core/references/execute-phase-context-guard.md",
|
||||
"gsd-core/references/execute-phase-requirement-revert.md",
|
||||
"gsd-core/references/execute-phase-wave-guard.md",
|
||||
"gsd-core/references/executor-examples.md",
|
||||
"gsd-core/references/few-shot-examples/plan-checker.md",
|
||||
|
||||
1
tests/fixtures/install-tree/cursor.json
vendored
1
tests/fixtures/install-tree/cursor.json
vendored
@@ -159,6 +159,7 @@
|
||||
"gsd-core/references/execute-mvp-tdd.md",
|
||||
"gsd-core/references/execute-phase-between-wave-reset.md",
|
||||
"gsd-core/references/execute-phase-context-guard.md",
|
||||
"gsd-core/references/execute-phase-requirement-revert.md",
|
||||
"gsd-core/references/execute-phase-wave-guard.md",
|
||||
"gsd-core/references/executor-examples.md",
|
||||
"gsd-core/references/few-shot-examples/plan-checker.md",
|
||||
|
||||
1
tests/fixtures/install-tree/hermes.json
vendored
1
tests/fixtures/install-tree/hermes.json
vendored
@@ -88,6 +88,7 @@
|
||||
"gsd-core/references/execute-mvp-tdd.md",
|
||||
"gsd-core/references/execute-phase-between-wave-reset.md",
|
||||
"gsd-core/references/execute-phase-context-guard.md",
|
||||
"gsd-core/references/execute-phase-requirement-revert.md",
|
||||
"gsd-core/references/execute-phase-wave-guard.md",
|
||||
"gsd-core/references/executor-examples.md",
|
||||
"gsd-core/references/few-shot-examples/plan-checker.md",
|
||||
|
||||
1
tests/fixtures/install-tree/kilo.json
vendored
1
tests/fixtures/install-tree/kilo.json
vendored
@@ -159,6 +159,7 @@
|
||||
"gsd-core/references/execute-mvp-tdd.md",
|
||||
"gsd-core/references/execute-phase-between-wave-reset.md",
|
||||
"gsd-core/references/execute-phase-context-guard.md",
|
||||
"gsd-core/references/execute-phase-requirement-revert.md",
|
||||
"gsd-core/references/execute-phase-wave-guard.md",
|
||||
"gsd-core/references/executor-examples.md",
|
||||
"gsd-core/references/few-shot-examples/plan-checker.md",
|
||||
|
||||
1
tests/fixtures/install-tree/kimi.json
vendored
1
tests/fixtures/install-tree/kimi.json
vendored
@@ -152,6 +152,7 @@
|
||||
"gsd-core/references/execute-mvp-tdd.md",
|
||||
"gsd-core/references/execute-phase-between-wave-reset.md",
|
||||
"gsd-core/references/execute-phase-context-guard.md",
|
||||
"gsd-core/references/execute-phase-requirement-revert.md",
|
||||
"gsd-core/references/execute-phase-wave-guard.md",
|
||||
"gsd-core/references/executor-examples.md",
|
||||
"gsd-core/references/few-shot-examples/plan-checker.md",
|
||||
|
||||
1
tests/fixtures/install-tree/opencode.json
vendored
1
tests/fixtures/install-tree/opencode.json
vendored
@@ -159,6 +159,7 @@
|
||||
"gsd-core/references/execute-mvp-tdd.md",
|
||||
"gsd-core/references/execute-phase-between-wave-reset.md",
|
||||
"gsd-core/references/execute-phase-context-guard.md",
|
||||
"gsd-core/references/execute-phase-requirement-revert.md",
|
||||
"gsd-core/references/execute-phase-wave-guard.md",
|
||||
"gsd-core/references/executor-examples.md",
|
||||
"gsd-core/references/few-shot-examples/plan-checker.md",
|
||||
|
||||
1
tests/fixtures/install-tree/pi.json
vendored
1
tests/fixtures/install-tree/pi.json
vendored
@@ -55,6 +55,7 @@
|
||||
"gsd-core/references/execute-mvp-tdd.md",
|
||||
"gsd-core/references/execute-phase-between-wave-reset.md",
|
||||
"gsd-core/references/execute-phase-context-guard.md",
|
||||
"gsd-core/references/execute-phase-requirement-revert.md",
|
||||
"gsd-core/references/execute-phase-wave-guard.md",
|
||||
"gsd-core/references/executor-examples.md",
|
||||
"gsd-core/references/few-shot-examples/plan-checker.md",
|
||||
|
||||
1
tests/fixtures/install-tree/qwen.json
vendored
1
tests/fixtures/install-tree/qwen.json
vendored
@@ -88,6 +88,7 @@
|
||||
"gsd-core/references/execute-mvp-tdd.md",
|
||||
"gsd-core/references/execute-phase-between-wave-reset.md",
|
||||
"gsd-core/references/execute-phase-context-guard.md",
|
||||
"gsd-core/references/execute-phase-requirement-revert.md",
|
||||
"gsd-core/references/execute-phase-wave-guard.md",
|
||||
"gsd-core/references/executor-examples.md",
|
||||
"gsd-core/references/few-shot-examples/plan-checker.md",
|
||||
|
||||
1
tests/fixtures/install-tree/trae.json
vendored
1
tests/fixtures/install-tree/trae.json
vendored
@@ -88,6 +88,7 @@
|
||||
"gsd-core/references/execute-mvp-tdd.md",
|
||||
"gsd-core/references/execute-phase-between-wave-reset.md",
|
||||
"gsd-core/references/execute-phase-context-guard.md",
|
||||
"gsd-core/references/execute-phase-requirement-revert.md",
|
||||
"gsd-core/references/execute-phase-wave-guard.md",
|
||||
"gsd-core/references/executor-examples.md",
|
||||
"gsd-core/references/few-shot-examples/plan-checker.md",
|
||||
|
||||
1
tests/fixtures/install-tree/windsurf.json
vendored
1
tests/fixtures/install-tree/windsurf.json
vendored
@@ -88,6 +88,7 @@
|
||||
"gsd-core/references/execute-mvp-tdd.md",
|
||||
"gsd-core/references/execute-phase-between-wave-reset.md",
|
||||
"gsd-core/references/execute-phase-context-guard.md",
|
||||
"gsd-core/references/execute-phase-requirement-revert.md",
|
||||
"gsd-core/references/execute-phase-wave-guard.md",
|
||||
"gsd-core/references/executor-examples.md",
|
||||
"gsd-core/references/few-shot-examples/plan-checker.md",
|
||||
|
||||
1
tests/fixtures/install-tree/zcode.json
vendored
1
tests/fixtures/install-tree/zcode.json
vendored
@@ -159,6 +159,7 @@
|
||||
"gsd-core/references/execute-mvp-tdd.md",
|
||||
"gsd-core/references/execute-phase-between-wave-reset.md",
|
||||
"gsd-core/references/execute-phase-context-guard.md",
|
||||
"gsd-core/references/execute-phase-requirement-revert.md",
|
||||
"gsd-core/references/execute-phase-wave-guard.md",
|
||||
"gsd-core/references/executor-examples.md",
|
||||
"gsd-core/references/few-shot-examples/plan-checker.md",
|
||||
|
||||
@@ -1162,6 +1162,201 @@ describe('requirements mark-complete: traceability write (regression, ADR-2143
|
||||
});
|
||||
});
|
||||
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
// requirements ready-ids command — shared-ID sibling-plan gate (#2388)
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
describe('requirements ready-ids command (#2388 shared-ID gate)', () => {
|
||||
let tmpDir;
|
||||
|
||||
beforeEach(() => { tmpDir = createTempProject(); });
|
||||
afterEach(() => { cleanup(tmpDir); });
|
||||
|
||||
function writeRequirements(tmpDir, content) {
|
||||
fs.writeFileSync(path.join(tmpDir, '.planning', 'REQUIREMENTS.md'), content, 'utf-8');
|
||||
}
|
||||
|
||||
function readRequirements(tmpDir) {
|
||||
return fs.readFileSync(path.join(tmpDir, '.planning', 'REQUIREMENTS.md'), 'utf-8');
|
||||
}
|
||||
|
||||
function makePhaseDir(tmpDir) {
|
||||
const dir = path.join(tmpDir, '.planning', 'phases', '05-05-feature');
|
||||
fs.mkdirSync(dir, { recursive: true });
|
||||
return dir;
|
||||
}
|
||||
|
||||
const SHARED_REQUIREMENTS = `# Requirements
|
||||
|
||||
## Feature
|
||||
|
||||
- [ ] **SHARED-01**: shared across two plans
|
||||
- [ ] **SOLO-01**: only plan-02 declares this
|
||||
|
||||
## Traceability
|
||||
|
||||
| Requirement | Phase | Status |
|
||||
|-------------|-------|--------|
|
||||
| SHARED-01 | Phase 5 | Pending |
|
||||
| SOLO-01 | Phase 5 | Pending |
|
||||
`;
|
||||
|
||||
// #2388 acceptance criteria 2+3: a requirement ID shared by two plans in
|
||||
// the same phase must not read Complete until BOTH plans have a SUMMARY —
|
||||
// then, once the last declaring plan finishes, it marks Complete via the
|
||||
// normal (unmodified) mark-complete path.
|
||||
test('shared ID stays Pending until every declaring plan has a SUMMARY, then marks Complete', () => {
|
||||
writeRequirements(tmpDir, SHARED_REQUIREMENTS);
|
||||
const dir = makePhaseDir(tmpDir);
|
||||
const plan1 = path.join(dir, '05-05-01-a-PLAN.md');
|
||||
const plan2 = path.join(dir, '05-05-02-b-PLAN.md');
|
||||
fs.writeFileSync(plan1, '---\nphase: 05-05\nplan: 01\nrequirements: [SHARED-01]\n---\nPlan A\n');
|
||||
fs.writeFileSync(plan2, '---\nphase: 05-05\nplan: 02\nrequirements: [SHARED-01, SOLO-01]\n---\nPlan B\n');
|
||||
|
||||
// Plan 01 finishes first (its own SUMMARY now exists) and gates its own
|
||||
// requirement IDs before calling mark-complete — plan 02 has not
|
||||
// finished yet, so SHARED-01 must be blocked.
|
||||
fs.writeFileSync(path.join(dir, '05-05-01-a-SUMMARY.md'), 'done\n');
|
||||
const readyForPlan1 = JSON.parse(
|
||||
runGsdTools(['query', 'requirements.ready-ids', plan1, 'SHARED-01'], tmpDir).output,
|
||||
);
|
||||
assert.deepStrictEqual(readyForPlan1.ready, [], 'SHARED-01 must be blocked — plan 02 has not finished yet');
|
||||
assert.deepStrictEqual(readyForPlan1.blocked, ['SHARED-01']);
|
||||
|
||||
// The workflow only hands the READY subset to mark-complete (empty here),
|
||||
// so REQUIREMENTS.md must be untouched.
|
||||
let content = readRequirements(tmpDir);
|
||||
assert.ok(content.includes('- [ ] **SHARED-01**'), 'SHARED-01 checkbox must stay unchecked');
|
||||
assert.ok(content.includes('| SHARED-01 | Phase 5 | Pending |'), 'SHARED-01 traceability must stay Pending');
|
||||
|
||||
// Plan 02 finishes: its own SUMMARY now exists too, so when IT gates its
|
||||
// own IDs, plan 01 (the sibling) already has a SUMMARY — SHARED-01 is
|
||||
// ready. SOLO-01 has no sibling declaring it at all, so it was always ready.
|
||||
fs.writeFileSync(path.join(dir, '05-05-02-b-SUMMARY.md'), 'done\n');
|
||||
const readyForPlan2 = JSON.parse(
|
||||
runGsdTools(['query', 'requirements.ready-ids', plan2, 'SHARED-01,SOLO-01'], tmpDir).output,
|
||||
);
|
||||
assert.deepStrictEqual(readyForPlan2.ready.sort(), ['SHARED-01', 'SOLO-01']);
|
||||
assert.deepStrictEqual(readyForPlan2.blocked, []);
|
||||
|
||||
// Hand the ready subset to the UNMODIFIED mark-complete path.
|
||||
runGsdTools(['query', 'requirements.mark-complete', ...readyForPlan2.ready], tmpDir);
|
||||
content = readRequirements(tmpDir);
|
||||
assert.ok(content.includes('- [x] **SHARED-01**'), 'SHARED-01 checkbox should now be checked');
|
||||
assert.ok(content.includes('| SHARED-01 | Phase 5 | Complete |'), 'SHARED-01 traceability should now be Complete');
|
||||
});
|
||||
|
||||
// #2388 acceptance criteria 4: a single-plan (non-shared) ID must not incur
|
||||
// any added latency — it is ready even before its OWN plan has a SUMMARY,
|
||||
// as long as no sibling plan also declares it.
|
||||
test('a single-plan (non-shared) requirement ID is always ready — no added latency', () => {
|
||||
writeRequirements(tmpDir, SHARED_REQUIREMENTS);
|
||||
const dir = makePhaseDir(tmpDir);
|
||||
const plan1 = path.join(dir, '05-05-01-a-PLAN.md');
|
||||
fs.writeFileSync(plan1, '---\nphase: 05-05\nplan: 01\nrequirements: [SOLO-01]\n---\nSolo plan\n');
|
||||
|
||||
const result = JSON.parse(
|
||||
runGsdTools(['query', 'requirements.ready-ids', plan1, 'SOLO-01'], tmpDir).output,
|
||||
);
|
||||
assert.deepStrictEqual(result.ready, ['SOLO-01']);
|
||||
assert.deepStrictEqual(result.blocked, []);
|
||||
});
|
||||
|
||||
test('no sibling *-PLAN.md files at all → every ID is ready', () => {
|
||||
writeRequirements(tmpDir, SHARED_REQUIREMENTS);
|
||||
const dir = makePhaseDir(tmpDir);
|
||||
const plan1 = path.join(dir, '05-05-01-a-PLAN.md');
|
||||
fs.writeFileSync(plan1, '---\nphase: 05-05\nplan: 01\nrequirements: [SHARED-01]\n---\nOnly plan\n');
|
||||
|
||||
const result = JSON.parse(
|
||||
runGsdTools(['query', 'requirements.ready-ids', plan1, 'SHARED-01'], tmpDir).output,
|
||||
);
|
||||
assert.deepStrictEqual(result.ready, ['SHARED-01']);
|
||||
assert.deepStrictEqual(result.blocked, []);
|
||||
});
|
||||
});
|
||||
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
// requirements revert-phase command — gaps_found revert (#2388)
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
describe('requirements revert-phase command (#2388 gaps_found revert)', () => {
|
||||
let tmpDir;
|
||||
|
||||
beforeEach(() => { tmpDir = createTempProject(); });
|
||||
afterEach(() => { cleanup(tmpDir); });
|
||||
|
||||
function writeRequirements(tmpDir, content) {
|
||||
fs.writeFileSync(path.join(tmpDir, '.planning', 'REQUIREMENTS.md'), content, 'utf-8');
|
||||
}
|
||||
|
||||
function readRequirements(tmpDir) {
|
||||
return fs.readFileSync(path.join(tmpDir, '.planning', 'REQUIREMENTS.md'), 'utf-8');
|
||||
}
|
||||
|
||||
// #2388 acceptance criterion 5 (phase-scoping): reverting one phase's IDs
|
||||
// must never touch a DIFFERENT phase's Complete row.
|
||||
test('reverts a phase\'s own Complete IDs (checkbox + traceability) without touching another phase\'s Complete', () => {
|
||||
writeRequirements(
|
||||
tmpDir,
|
||||
`# Requirements
|
||||
|
||||
## Feature
|
||||
|
||||
- [x] **PHASE5-01**: phase 5 thing
|
||||
- [x] **PHASE6-01**: phase 6 thing
|
||||
|
||||
## Traceability
|
||||
|
||||
| Requirement | Phase | Status |
|
||||
|-------------|-------|--------|
|
||||
| PHASE5-01 | Phase 5 | Complete |
|
||||
| PHASE6-01 | Phase 6 | Complete |
|
||||
`,
|
||||
);
|
||||
|
||||
const result = runGsdTools('requirements revert-phase PHASE5-01', tmpDir);
|
||||
assert.ok(result.success, `Command failed: ${result.error}`);
|
||||
const out = JSON.parse(result.output);
|
||||
assert.deepStrictEqual(out.reverted, ['PHASE5-01']);
|
||||
assert.deepStrictEqual(out.unchanged, []);
|
||||
|
||||
const content = readRequirements(tmpDir);
|
||||
assert.ok(content.includes('- [ ] **PHASE5-01**'), 'PHASE5-01 checkbox must revert to unchecked');
|
||||
assert.ok(content.includes('| PHASE5-01 | Phase 5 | Gaps Found |'), 'PHASE5-01 traceability must revert to Gaps Found');
|
||||
assert.ok(content.includes('- [x] **PHASE6-01**'), 'a DIFFERENT phase\'s Complete checkbox must be untouched');
|
||||
assert.ok(content.includes('| PHASE6-01 | Phase 6 | Complete |'), 'a DIFFERENT phase\'s traceability row must be untouched');
|
||||
});
|
||||
|
||||
test('an ID that is not currently Complete is reported unchanged, not reverted', () => {
|
||||
writeRequirements(
|
||||
tmpDir,
|
||||
`# Requirements
|
||||
|
||||
## Feature
|
||||
|
||||
- [ ] **PHASE5-01**: not complete yet
|
||||
|
||||
## Traceability
|
||||
|
||||
| Requirement | Phase | Status |
|
||||
|-------------|-------|--------|
|
||||
| PHASE5-01 | Phase 5 | Pending |
|
||||
`,
|
||||
);
|
||||
|
||||
const result = runGsdTools('requirements revert-phase PHASE5-01', tmpDir);
|
||||
assert.ok(result.success, `Command failed: ${result.error}`);
|
||||
const out = JSON.parse(result.output);
|
||||
assert.deepStrictEqual(out.reverted, []);
|
||||
assert.deepStrictEqual(out.unchanged, ['PHASE5-01']);
|
||||
|
||||
const content = readRequirements(tmpDir);
|
||||
assert.ok(content.includes('- [ ] **PHASE5-01**'), 'checkbox must stay unchecked (nothing to revert)');
|
||||
assert.ok(content.includes('| PHASE5-01 | Phase 5 | Pending |'), 'traceability status must stay Pending (nothing to revert)');
|
||||
});
|
||||
});
|
||||
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
// new-milestone workflow verification gate (#1269)
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
@@ -24,8 +24,8 @@
|
||||
"docs-update.md": 55706,
|
||||
"edit-phase.md": 12927,
|
||||
"eval-review.md": 9967,
|
||||
"execute-phase.md": 93363,
|
||||
"execute-plan.md": 33113,
|
||||
"execute-phase.md": 93376,
|
||||
"execute-plan.md": 34262,
|
||||
"explore.md": 10541,
|
||||
"extract-learnings.md": 12893,
|
||||
"fast.md": 7613,
|
||||
|
||||
Reference in New Issue
Block a user