@@ -23,2 +23,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -33,3 +34,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -43,2 +44,4 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. |
@@ -178,2 +178,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -188,3 +189,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -198,5 +199,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| --- | ||
@@ -203,0 +206,0 @@ |
@@ -75,2 +75,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -85,3 +86,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -95,5 +96,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| --- | ||
@@ -100,0 +103,0 @@ |
@@ -191,2 +191,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -201,3 +202,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -211,5 +212,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| --- | ||
@@ -216,0 +219,0 @@ |
@@ -182,2 +182,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -192,3 +193,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -202,5 +203,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| ## gspec-orchestrator | ||
@@ -207,0 +210,0 @@ |
@@ -125,2 +125,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -135,3 +136,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -145,5 +146,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| --- | ||
@@ -150,0 +153,0 @@ |
@@ -195,2 +195,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -205,3 +206,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -215,5 +216,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| --- | ||
@@ -220,0 +223,0 @@ |
@@ -141,2 +141,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -151,3 +152,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -161,5 +162,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| --- | ||
@@ -166,0 +169,0 @@ |
@@ -49,2 +49,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -59,3 +60,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -69,2 +70,4 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. |
@@ -216,2 +216,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -226,3 +227,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -236,5 +237,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| --- | ||
@@ -241,0 +244,0 @@ |
@@ -180,2 +180,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -190,3 +191,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -200,5 +201,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| --- | ||
@@ -205,0 +208,0 @@ |
@@ -41,6 +41,6 @@ --- | ||
| - **Paused for spec review** (exit 0; log says "Paused for spec review"; manifest `review` stage is `paused`). This is the expected second human gate: every spec is written, no code exists yet. Summarize the specs for the user (`gspec/profile.md`, `research.md` if `--research` ran, `stack.md`, `practices.md`, `style.*`, `architecture.md` + any `architecture/` sub-files, `features/`, `tasks/`), help them review and edit anything they want changed — on a `--research` run, remind them the research findings were **auto-accepted** by the build, so this pause is where to prune any they disagree with, and on their go-ahead relaunch with `gspec build --resume` (background/detached, as in step 4) — that resume **is** the approval and continues into implementation. Do not treat this pause as an error. | ||
| - **Paused on a failure** (exit 1). Surface the failing stage and **why**: the runtime prints the failing verdict/output and keeps it in full in `.gspec/build/last-failure.md` and in the failed stage's `detail` field in the manifest — relay those findings verbatim (not just the one-line reason), and tell the user they can fix the issue and re-run this command to **resume** from exactly there. If the failure was a QA gate that just needs more attempts, resume with `--qa-retries <n>`. | ||
| - **Build complete** (exit 0; log says "Build complete"). Report that specs + code are in place and point at the run record. Either way, the runtime finishes by printing a **"Learnings recorded this run"** report — the lessons agents captured to memory during the build (promotable via `/gspec-distill`) and the QA feedback events that drove a self-heal; relay it, and surface any captured lessons to the user. | ||
| - **Paused on a failure** (exit 1). Surface the failing stage and **why**: the runtime prints the failing verdict/output and keeps it in full in `.gspec/build/last-failure.md` and in the failed stage's `detail` field in the manifest — relay those findings verbatim (not just the one-line reason), and tell the user they can fix the issue and re-run this command to **resume** from exactly there. A gate fails only on a `blocker`/`major` finding, so a pause is a real defect, not polish. The user may **hand-edit the flagged spec** to unblock: on resume, a stage left `failed` re-validates the current on-disk deliverable (their edit is honored, not overwritten), so a hand-fix that resolves the finding lets the run continue. If the failure was a QA gate that just needs more attempts, resume with `--qa-retries <n>`. For tuning the build loop, every QA failure this run — including ones a self-heal already recovered from — is also kept in full in the cumulative `.gspec/build/qa-failures.md` (never auto-removed). | ||
| - **Build complete** (exit 0; log says "Build complete"). Report that specs + code are in place and point at the run record. Either way, the runtime finishes by printing a **"Learnings recorded this run"** report — the lessons agents captured to memory during the build (promotable via `/gspec-distill`) and the QA feedback events that drove a self-heal; relay it, and surface any captured lessons to the user. The full verdict behind each feedback event (even recovered ones) is in `.gspec/build/qa-failures.md`. | ||
| ## Input Idea (and any flags: --engine, --no-qa, --qa-retries, --no-review, --research, --dry-run, --resume, --pi-permission-level) | ||
| $ARGUMENTS |
@@ -23,2 +23,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -33,3 +34,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -43,2 +44,4 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. |
@@ -26,2 +26,3 @@ name = "architecture-validator" | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -36,3 +37,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -46,5 +47,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| ## gspec-architect | ||
@@ -51,0 +54,0 @@ |
@@ -54,2 +54,3 @@ name = "distiller" | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -64,3 +65,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -74,5 +75,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| --- | ||
@@ -79,0 +82,0 @@ |
@@ -26,2 +26,3 @@ name = "feature-validator" | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -36,3 +37,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -46,5 +47,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| ## gspec-product | ||
@@ -51,0 +54,0 @@ |
@@ -26,2 +26,3 @@ name = "implementation-validator" | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -36,3 +37,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -46,5 +47,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| ## gspec-engineer | ||
@@ -51,0 +54,0 @@ |
@@ -26,2 +26,3 @@ name = "plan-validator" | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -36,3 +37,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -46,5 +47,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| ## gspec-engineer | ||
@@ -51,0 +54,0 @@ |
@@ -26,2 +26,3 @@ name = "practices-validator" | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -36,3 +37,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -46,5 +47,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| ## gspec-practices | ||
@@ -51,0 +54,0 @@ |
@@ -26,2 +26,3 @@ name = "profile-validator" | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -36,3 +37,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -46,5 +47,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| ## gspec-product | ||
@@ -51,0 +54,0 @@ |
@@ -26,2 +26,3 @@ name = "stack-validator" | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -36,3 +37,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -46,5 +47,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| ## gspec-architect | ||
@@ -51,0 +54,0 @@ |
@@ -26,2 +26,3 @@ name = "style-validator" | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -36,3 +37,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -46,5 +47,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| ## gspec-designer | ||
@@ -51,0 +54,0 @@ |
@@ -42,5 +42,5 @@ --- | ||
| - **Paused for spec review** (exit 0; log says "Paused for spec review"; manifest `review` stage is `paused`). This is the expected second human gate: every spec is written, no code exists yet. Summarize the specs for the user (`gspec/profile.md`, `research.md` if `--research` ran, `stack.md`, `practices.md`, `style.*`, `architecture.md` + any `architecture/` sub-files, `features/`, `tasks/`), help them review and edit anything they want changed — on a `--research` run, remind them the research findings were **auto-accepted** by the build, so this pause is where to prune any they disagree with, and on their go-ahead relaunch with `gspec build --resume` (background/detached, as in step 4) — that resume **is** the approval and continues into implementation. Do not treat this pause as an error. | ||
| - **Paused on a failure** (exit 1). Surface the failing stage and **why**: the runtime prints the failing verdict/output and keeps it in full in `.gspec/build/last-failure.md` and in the failed stage's `detail` field in the manifest — relay those findings verbatim (not just the one-line reason), and tell the user they can fix the issue and re-run this command to **resume** from exactly there. If the failure was a QA gate that just needs more attempts, resume with `--qa-retries <n>`. | ||
| - **Build complete** (exit 0; log says "Build complete"). Report that specs + code are in place and point at the run record. Either way, the runtime finishes by printing a **"Learnings recorded this run"** report — the lessons agents captured to memory during the build (promotable via `/gspec-distill`) and the QA feedback events that drove a self-heal; relay it, and surface any captured lessons to the user. | ||
| - **Paused on a failure** (exit 1). Surface the failing stage and **why**: the runtime prints the failing verdict/output and keeps it in full in `.gspec/build/last-failure.md` and in the failed stage's `detail` field in the manifest — relay those findings verbatim (not just the one-line reason), and tell the user they can fix the issue and re-run this command to **resume** from exactly there. A gate fails only on a `blocker`/`major` finding, so a pause is a real defect, not polish. The user may **hand-edit the flagged spec** to unblock: on resume, a stage left `failed` re-validates the current on-disk deliverable (their edit is honored, not overwritten), so a hand-fix that resolves the finding lets the run continue. If the failure was a QA gate that just needs more attempts, resume with `--qa-retries <n>`. For tuning the build loop, every QA failure this run — including ones a self-heal already recovered from — is also kept in full in the cumulative `.gspec/build/qa-failures.md` (never auto-removed). | ||
| - **Build complete** (exit 0; log says "Build complete"). Report that specs + code are in place and point at the run record. Either way, the runtime finishes by printing a **"Learnings recorded this run"** report — the lessons agents captured to memory during the build (promotable via `/gspec-distill`) and the QA feedback events that drove a self-heal; relay it, and surface any captured lessons to the user. The full verdict behind each feedback event (even recovered ones) is in `.gspec/build/qa-failures.md`. | ||
| ## Input Idea (and any flags: --engine, --no-qa, --qa-retries, --no-review, --research, --dry-run, --resume, --pi-permission-level) |
@@ -29,2 +29,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -39,3 +40,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -49,5 +50,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| ## gspec-architect | ||
@@ -54,0 +57,0 @@ |
@@ -57,2 +57,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -67,3 +68,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -77,5 +78,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| --- | ||
@@ -82,0 +85,0 @@ |
@@ -29,2 +29,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -39,3 +40,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -49,5 +50,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| ## gspec-product | ||
@@ -54,0 +57,0 @@ |
@@ -29,2 +29,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -39,3 +40,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -49,5 +50,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| ## gspec-engineer | ||
@@ -54,0 +57,0 @@ |
@@ -29,2 +29,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -39,3 +40,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -49,5 +50,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| ## gspec-engineer | ||
@@ -54,0 +57,0 @@ |
@@ -29,2 +29,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -39,3 +40,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -49,5 +50,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| ## gspec-practices | ||
@@ -54,0 +57,0 @@ |
@@ -29,2 +29,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -39,3 +40,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -49,5 +50,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| ## gspec-product | ||
@@ -54,0 +57,0 @@ |
@@ -29,2 +29,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -39,3 +40,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -49,5 +50,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| ## gspec-architect | ||
@@ -54,0 +57,0 @@ |
@@ -29,2 +29,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -39,3 +40,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -49,5 +50,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| ## gspec-designer | ||
@@ -54,0 +57,0 @@ |
@@ -37,5 +37,5 @@ Run the autonomous "idea → built" gspec build: hold the one-time intake interview here, then hand off to the headless `gspec build` runtime, which drives every stage (profile → competitive research (opt-in, `--research`) → stack → practices → style → features → architecture → plans → **spec review** → implement → reconcile) unattended — pausing once at the spec-review gate, after every spec is written and before any code is generated, so the user can review the specs (skippable with `--no-review`) — self-healing each writer/validator and build/test gate. | ||
| - **Paused for spec review** (exit 0; log says "Paused for spec review"; manifest `review` stage is `paused`). This is the expected second human gate: every spec is written, no code exists yet. Summarize the specs for the user (`gspec/profile.md`, `research.md` if `--research` ran, `stack.md`, `practices.md`, `style.*`, `architecture.md` + any `architecture/` sub-files, `features/`, `tasks/`), help them review and edit anything they want changed — on a `--research` run, remind them the research findings were **auto-accepted** by the build, so this pause is where to prune any they disagree with, and on their go-ahead relaunch with `gspec build --resume` (background/detached, as in step 4) — that resume **is** the approval and continues into implementation. Do not treat this pause as an error. | ||
| - **Paused on a failure** (exit 1). Surface the failing stage and **why**: the runtime prints the failing verdict/output and keeps it in full in `.gspec/build/last-failure.md` and in the failed stage's `detail` field in the manifest — relay those findings verbatim (not just the one-line reason), and tell the user they can fix the issue and re-run this command to **resume** from exactly there. If the failure was a QA gate that just needs more attempts, resume with `--qa-retries <n>`. | ||
| - **Build complete** (exit 0; log says "Build complete"). Report that specs + code are in place and point at the run record. Either way, the runtime finishes by printing a **"Learnings recorded this run"** report — the lessons agents captured to memory during the build (promotable via `/gspec-distill`) and the QA feedback events that drove a self-heal; relay it, and surface any captured lessons to the user. | ||
| - **Paused on a failure** (exit 1). Surface the failing stage and **why**: the runtime prints the failing verdict/output and keeps it in full in `.gspec/build/last-failure.md` and in the failed stage's `detail` field in the manifest — relay those findings verbatim (not just the one-line reason), and tell the user they can fix the issue and re-run this command to **resume** from exactly there. A gate fails only on a `blocker`/`major` finding, so a pause is a real defect, not polish. The user may **hand-edit the flagged spec** to unblock: on resume, a stage left `failed` re-validates the current on-disk deliverable (their edit is honored, not overwritten), so a hand-fix that resolves the finding lets the run continue. If the failure was a QA gate that just needs more attempts, resume with `--qa-retries <n>`. For tuning the build loop, every QA failure this run — including ones a self-heal already recovered from — is also kept in full in the cumulative `.gspec/build/qa-failures.md` (never auto-removed). | ||
| - **Build complete** (exit 0; log says "Build complete"). Report that specs + code are in place and point at the run record. Either way, the runtime finishes by printing a **"Learnings recorded this run"** report — the lessons agents captured to memory during the build (promotable via `/gspec-distill`) and the QA feedback events that drove a self-heal; relay it, and surface any captured lessons to the user. The full verdict behind each feedback event (even recovered ones) is in `.gspec/build/qa-failures.md`. | ||
| ## Input Idea (and any flags: --engine, --no-qa, --qa-retries, --no-review, --research, --dry-run, --resume, --pi-permission-level) |
@@ -23,2 +23,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -33,3 +34,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -43,2 +44,4 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. |
@@ -33,2 +33,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -43,3 +44,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -53,5 +54,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| ## gspec-architect | ||
@@ -58,0 +61,0 @@ |
@@ -61,2 +61,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -71,3 +72,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -81,5 +82,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| --- | ||
@@ -86,0 +89,0 @@ |
@@ -33,2 +33,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -43,3 +44,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -53,5 +54,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| ## gspec-product | ||
@@ -58,0 +61,0 @@ |
@@ -33,2 +33,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -43,3 +44,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -53,5 +54,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| ## gspec-engineer | ||
@@ -58,0 +61,0 @@ |
@@ -33,2 +33,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -43,3 +44,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -53,5 +54,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| ## gspec-engineer | ||
@@ -58,0 +61,0 @@ |
@@ -33,2 +33,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -43,3 +44,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -53,5 +54,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| ## gspec-practices | ||
@@ -58,0 +61,0 @@ |
@@ -33,2 +33,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -43,3 +44,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -53,5 +54,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| ## gspec-product | ||
@@ -58,0 +61,0 @@ |
@@ -33,2 +33,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -43,3 +44,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -53,5 +54,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| ## gspec-architect | ||
@@ -58,0 +61,0 @@ |
@@ -33,2 +33,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -43,3 +44,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -53,5 +54,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| ## gspec-designer | ||
@@ -58,0 +61,0 @@ |
@@ -41,6 +41,6 @@ --- | ||
| - **Paused for spec review** (exit 0; log says "Paused for spec review"; manifest `review` stage is `paused`). This is the expected second human gate: every spec is written, no code exists yet. Summarize the specs for the user (`gspec/profile.md`, `research.md` if `--research` ran, `stack.md`, `practices.md`, `style.*`, `architecture.md` + any `architecture/` sub-files, `features/`, `tasks/`), help them review and edit anything they want changed — on a `--research` run, remind them the research findings were **auto-accepted** by the build, so this pause is where to prune any they disagree with, and on their go-ahead relaunch with `gspec build --resume` (background/detached, as in step 4) — that resume **is** the approval and continues into implementation. Do not treat this pause as an error. | ||
| - **Paused on a failure** (exit 1). Surface the failing stage and **why**: the runtime prints the failing verdict/output and keeps it in full in `.gspec/build/last-failure.md` and in the failed stage's `detail` field in the manifest — relay those findings verbatim (not just the one-line reason), and tell the user they can fix the issue and re-run this command to **resume** from exactly there. If the failure was a QA gate that just needs more attempts, resume with `--qa-retries <n>`. | ||
| - **Build complete** (exit 0; log says "Build complete"). Report that specs + code are in place and point at the run record. Either way, the runtime finishes by printing a **"Learnings recorded this run"** report — the lessons agents captured to memory during the build (promotable via `/gspec-distill`) and the QA feedback events that drove a self-heal; relay it, and surface any captured lessons to the user. | ||
| - **Paused on a failure** (exit 1). Surface the failing stage and **why**: the runtime prints the failing verdict/output and keeps it in full in `.gspec/build/last-failure.md` and in the failed stage's `detail` field in the manifest — relay those findings verbatim (not just the one-line reason), and tell the user they can fix the issue and re-run this command to **resume** from exactly there. A gate fails only on a `blocker`/`major` finding, so a pause is a real defect, not polish. The user may **hand-edit the flagged spec** to unblock: on resume, a stage left `failed` re-validates the current on-disk deliverable (their edit is honored, not overwritten), so a hand-fix that resolves the finding lets the run continue. If the failure was a QA gate that just needs more attempts, resume with `--qa-retries <n>`. For tuning the build loop, every QA failure this run — including ones a self-heal already recovered from — is also kept in full in the cumulative `.gspec/build/qa-failures.md` (never auto-removed). | ||
| - **Build complete** (exit 0; log says "Build complete"). Report that specs + code are in place and point at the run record. Either way, the runtime finishes by printing a **"Learnings recorded this run"** report — the lessons agents captured to memory during the build (promotable via `/gspec-distill`) and the QA feedback events that drove a self-heal; relay it, and surface any captured lessons to the user. The full verdict behind each feedback event (even recovered ones) is in `.gspec/build/qa-failures.md`. | ||
| ## Input Idea (and any flags: --engine, --no-qa, --qa-retries, --no-review, --research, --dry-run, --resume, --pi-permission-level) | ||
| $ARGUMENTS |
@@ -23,2 +23,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -33,3 +34,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -43,2 +44,4 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. |
@@ -28,2 +28,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -38,3 +39,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -48,5 +49,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| ## gspec-architect | ||
@@ -53,0 +56,0 @@ |
@@ -56,2 +56,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -66,3 +67,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -76,5 +77,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| --- | ||
@@ -81,0 +84,0 @@ |
@@ -28,2 +28,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -38,3 +39,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -48,5 +49,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| ## gspec-product | ||
@@ -53,0 +56,0 @@ |
@@ -28,2 +28,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -38,3 +39,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -48,5 +49,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| ## gspec-engineer | ||
@@ -53,0 +56,0 @@ |
@@ -28,2 +28,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -38,3 +39,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -48,5 +49,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| ## gspec-engineer | ||
@@ -53,0 +56,0 @@ |
@@ -28,2 +28,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -38,3 +39,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -48,5 +49,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| ## gspec-practices | ||
@@ -53,0 +56,0 @@ |
@@ -28,2 +28,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -38,3 +39,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -48,5 +49,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| ## gspec-product | ||
@@ -53,0 +56,0 @@ |
@@ -28,2 +28,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -38,3 +39,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -48,5 +49,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| ## gspec-architect | ||
@@ -53,0 +56,0 @@ |
@@ -28,2 +28,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -38,3 +39,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -48,5 +49,7 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. | ||
| ## gspec-designer | ||
@@ -53,0 +56,0 @@ |
@@ -41,6 +41,6 @@ --- | ||
| - **Paused for spec review** (exit 0; log says "Paused for spec review"; manifest `review` stage is `paused`). This is the expected second human gate: every spec is written, no code exists yet. Summarize the specs for the user (`gspec/profile.md`, `research.md` if `--research` ran, `stack.md`, `practices.md`, `style.*`, `architecture.md` + any `architecture/` sub-files, `features/`, `tasks/`), help them review and edit anything they want changed — on a `--research` run, remind them the research findings were **auto-accepted** by the build, so this pause is where to prune any they disagree with, and on their go-ahead relaunch with `gspec build --resume` (background/detached, as in step 4) — that resume **is** the approval and continues into implementation. Do not treat this pause as an error. | ||
| - **Paused on a failure** (exit 1). Surface the failing stage and **why**: the runtime prints the failing verdict/output and keeps it in full in `.gspec/build/last-failure.md` and in the failed stage's `detail` field in the manifest — relay those findings verbatim (not just the one-line reason), and tell the user they can fix the issue and re-run this command to **resume** from exactly there. If the failure was a QA gate that just needs more attempts, resume with `--qa-retries <n>`. | ||
| - **Build complete** (exit 0; log says "Build complete"). Report that specs + code are in place and point at the run record. Either way, the runtime finishes by printing a **"Learnings recorded this run"** report — the lessons agents captured to memory during the build (promotable via `/gspec-distill`) and the QA feedback events that drove a self-heal; relay it, and surface any captured lessons to the user. | ||
| - **Paused on a failure** (exit 1). Surface the failing stage and **why**: the runtime prints the failing verdict/output and keeps it in full in `.gspec/build/last-failure.md` and in the failed stage's `detail` field in the manifest — relay those findings verbatim (not just the one-line reason), and tell the user they can fix the issue and re-run this command to **resume** from exactly there. A gate fails only on a `blocker`/`major` finding, so a pause is a real defect, not polish. The user may **hand-edit the flagged spec** to unblock: on resume, a stage left `failed` re-validates the current on-disk deliverable (their edit is honored, not overwritten), so a hand-fix that resolves the finding lets the run continue. If the failure was a QA gate that just needs more attempts, resume with `--qa-retries <n>`. For tuning the build loop, every QA failure this run — including ones a self-heal already recovered from — is also kept in full in the cumulative `.gspec/build/qa-failures.md` (never auto-removed). | ||
| - **Build complete** (exit 0; log says "Build complete"). Report that specs + code are in place and point at the run record. Either way, the runtime finishes by printing a **"Learnings recorded this run"** report — the lessons agents captured to memory during the build (promotable via `/gspec-distill`) and the QA feedback events that drove a self-heal; relay it, and surface any captured lessons to the user. The full verdict behind each feedback event (even recovered ones) is in `.gspec/build/qa-failures.md`. | ||
| ## Input Idea (and any flags: --engine, --no-qa, --qa-retries, --no-review, --research, --dry-run, --resume, --pi-permission-level) | ||
| $ARGUMENTS |
@@ -23,2 +23,3 @@ --- | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -33,3 +34,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -43,2 +44,4 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. |
+1
-1
| { | ||
| "name": "gspec", | ||
| "version": "2.3.0", | ||
| "version": "2.5.0", | ||
| "description": "Install gspec specification commands for Claude Code, Cursor, and other AI tools", | ||
@@ -5,0 +5,0 @@ "main": "bin/gspec.js", |
@@ -37,6 +37,6 @@ Run the autonomous "idea → built" gspec build: hold the one-time intake interview here, then hand off to the headless `gspec build` runtime, which drives every stage (profile → competitive research (opt-in, `--research`) → stack → practices → style → features → architecture → plans → **spec review** → implement → reconcile) unattended — pausing once at the spec-review gate, after every spec is written and before any code is generated, so the user can review the specs (skippable with `--no-review`) — self-healing each writer/validator and build/test gate. | ||
| - **Paused for spec review** (exit 0; log says "Paused for spec review"; manifest `review` stage is `paused`). This is the expected second human gate: every spec is written, no code exists yet. Summarize the specs for the user (`gspec/profile.md`, `research.md` if `--research` ran, `stack.md`, `practices.md`, `style.*`, `architecture.md` + any `architecture/` sub-files, `features/`, `tasks/`), help them review and edit anything they want changed — on a `--research` run, remind them the research findings were **auto-accepted** by the build, so this pause is where to prune any they disagree with, and on their go-ahead relaunch with `gspec build --resume` (background/detached, as in step 4) — that resume **is** the approval and continues into implementation. Do not treat this pause as an error. | ||
| - **Paused on a failure** (exit 1). Surface the failing stage and **why**: the runtime prints the failing verdict/output and keeps it in full in `.gspec/build/last-failure.md` and in the failed stage's `detail` field in the manifest — relay those findings verbatim (not just the one-line reason), and tell the user they can fix the issue and re-run this command to **resume** from exactly there. If the failure was a QA gate that just needs more attempts, resume with `--qa-retries <n>`. | ||
| - **Build complete** (exit 0; log says "Build complete"). Report that specs + code are in place and point at the run record. Either way, the runtime finishes by printing a **"Learnings recorded this run"** report — the lessons agents captured to memory during the build (promotable via `/gspec-distill`) and the QA feedback events that drove a self-heal; relay it, and surface any captured lessons to the user. | ||
| - **Paused on a failure** (exit 1). Surface the failing stage and **why**: the runtime prints the failing verdict/output and keeps it in full in `.gspec/build/last-failure.md` and in the failed stage's `detail` field in the manifest — relay those findings verbatim (not just the one-line reason), and tell the user they can fix the issue and re-run this command to **resume** from exactly there. A gate fails only on a `blocker`/`major` finding, so a pause is a real defect, not polish. The user may **hand-edit the flagged spec** to unblock: on resume, a stage left `failed` re-validates the current on-disk deliverable (their edit is honored, not overwritten), so a hand-fix that resolves the finding lets the run continue. If the failure was a QA gate that just needs more attempts, resume with `--qa-retries <n>`. For tuning the build loop, every QA failure this run — including ones a self-heal already recovered from — is also kept in full in the cumulative `.gspec/build/qa-failures.md` (never auto-removed). | ||
| - **Build complete** (exit 0; log says "Build complete"). Report that specs + code are in place and point at the run record. Either way, the runtime finishes by printing a **"Learnings recorded this run"** report — the lessons agents captured to memory during the build (promotable via `/gspec-distill`) and the QA feedback events that drove a self-heal; relay it, and surface any captured lessons to the user. The full verdict behind each feedback event (even recovered ones) is in `.gspec/build/qa-failures.md`. | ||
| ## Input Idea (and any flags: --engine, --no-qa, --qa-retries, --no-review, --research, --dry-run, --resume, --pi-permission-level) | ||
| <<<BUILD_IDEA>>> |
@@ -18,2 +18,3 @@ You are a **QA reviewer** for specifications — a rigorous, fair, evidence-driven critic. Your job is to judge whether a spec meets its quality bar and to say precisely what's wrong and how to fix it. You never rewrite the spec and you never edit files; you return a verdict. | ||
| ## Severity | ||
| Every finding MUST carry exactly one severity tag — it is load-bearing, not decoration: the verdict is decided by severity, and the autonomous build reads the tags to decide whether a FAIL actually blocks. | ||
| - **blocker** — unsafe to build on until fixed. | ||
@@ -28,3 +29,3 @@ - **major** — a real defect that will cause rework. | ||
| ``` | ||
| VERDICT: PASS | FAIL # FAIL if any blocker or major finding | ||
| VERDICT: PASS | FAIL # FAIL only if a blocker or major finding stands; minor/nit NEVER cause FAIL | ||
| SPEC: <path> | ||
@@ -38,2 +39,4 @@ SUMMARY: <2-3 sentences> | ||
| A PASS may still carry minor/nit findings — list them, don't fail the spec for them. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **PASS is a reachable state — reach it.** A spec with only minor/nit findings PASSes; list those findings as advisory, don't fail the spec for them. Reserve `blocker`/`major` for defects that genuinely make the spec unsafe or wrong to build on — do not inflate a polish preference to major to force another revision. A large document will always have another precision nit; "zero findings" is not the bar, "no standing blocker/major" is. Judge strictly against the paired domain skill's quality bar; cite evidence for every finding; propose the smallest fix that resolves it. | ||
| **Re-validating a revised spec.** When you are re-checking a spec after a revision (you're shown the prior verdict), first state for each prior finding whether it is **resolved**; only then raise anything new. Hold the bar steady — judge against the same bar, and grade a concern you notice only in text just added to address a prior finding no higher than `minor` unless it is a genuine blocker/major. This is how the loop converges instead of chasing fresh nits into an ever-growing document. |
Sorry, the diff of this file is too big to display
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
Found 2 instances
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
2633810
3%5197
5.16%33
-2.94%