its-magic 0.1.2-9 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1602 -755
- package/bin/its-magic.js +121 -11
- package/bin/postinstall.js +21 -0
- package/installer.ps1 +759 -0
- package/installer.py +981 -0
- package/installer.sh +649 -0
- package/package.json +18 -14
- package/scripts/check_intake_template_parity.py +284 -0
- package/scripts/doc_profile_lib.py +415 -0
- package/scripts/guard_installer_publish.py +88 -0
- package/scripts/intake_bug_routing_guard.py +67 -0
- package/scripts/intake_evidence_lib.py +802 -0
- package/scripts/intake_evidence_validate.py +73 -0
- package/scripts/materialize_codebase_map.py +184 -0
- package/scripts/remote_config_summary.py +243 -0
- package/template/.cursor/agents/curator.mdc +35 -0
- package/template/.cursor/agents/dev.mdc +29 -0
- package/template/.cursor/agents/po.mdc +141 -0
- package/template/.cursor/agents/qa.mdc +28 -0
- package/template/.cursor/agents/release.mdc +28 -0
- package/template/.cursor/agents/security.mdc +98 -0
- package/template/.cursor/agents/tech-lead.mdc +57 -0
- package/template/.cursor/commands/architecture.md +127 -0
- package/template/.cursor/commands/ask.md +55 -0
- package/template/.cursor/commands/auto.md +533 -0
- package/template/.cursor/commands/discovery.md +47 -0
- package/template/.cursor/commands/execute.md +343 -0
- package/template/.cursor/commands/intake.md +323 -0
- package/template/.cursor/commands/map-codebase.md +46 -0
- package/template/.cursor/commands/memory-audit.md +175 -0
- package/template/.cursor/commands/milestone-complete.md +51 -0
- package/template/.cursor/commands/milestone-start.md +59 -0
- package/template/.cursor/commands/pause.md +64 -0
- package/{.cursor/commands/gsd-phase-context.md → template/.cursor/commands/phase-context.md} +6 -2
- package/template/.cursor/commands/plan-verify.md +34 -0
- package/template/.cursor/commands/qa.md +226 -0
- package/template/.cursor/commands/quick.md +41 -0
- package/template/.cursor/commands/refresh-context.md +82 -0
- package/template/.cursor/commands/release.md +505 -0
- package/template/.cursor/commands/research.md +49 -0
- package/template/.cursor/commands/resume.md +67 -0
- package/template/.cursor/commands/security-review.md +81 -0
- package/template/.cursor/commands/sprint-plan.md +103 -0
- package/template/.cursor/commands/status-reconcile.md +95 -0
- package/template/.cursor/commands/verify-work.md +152 -0
- package/template/.cursor/dev-environment.json.example +22 -0
- package/{.cursor → template/.cursor}/hooks/README.md +3 -2
- package/{.cursor/hooks/gsd-hook.py → template/.cursor/hooks/hook.py} +15 -6
- package/template/.cursor/hooks.json +26 -0
- package/template/.cursor/remote.json +31 -0
- package/template/.cursor/rules/caveman.mdc +184 -0
- package/template/.cursor/rules/coding-standards.mdc +39 -0
- package/template/.cursor/rules/core.mdc +111 -0
- package/template/.cursor/rules/handoffs.mdc +27 -0
- package/template/.cursor/rules/quality.mdc +49 -0
- package/template/.cursor/scratchpad.local.example.md +323 -0
- package/template/.cursor/scratchpad.md +324 -0
- package/{.cursor/skills/gsd-team → template/.cursor/skills/its-magic}/SKILL.md +2 -2
- package/template/.cursorignore +6 -0
- package/template/.env.example +28 -0
- package/template/.github/workflows/ci.yml +194 -0
- package/{.github → template/.github}/workflows/deploy.yml +5 -2
- package/template/.its-magic-version +1 -0
- package/template/README.md +1602 -0
- package/template/decisions/DEC-0001.md +11 -0
- package/template/decisions/DEC-0002.md +11 -0
- package/template/docs/developer/README.md +44 -0
- package/template/docs/engineering/architecture.md +9 -0
- package/template/docs/engineering/artifact-ordering-policy.md +48 -0
- package/template/docs/engineering/artifact-ownership-policy.md +57 -0
- package/template/docs/engineering/auto-orchestration-reference.md +1211 -0
- package/{docs → template/docs}/engineering/codebase-map.md +0 -5
- package/template/docs/engineering/compatibility-report.md +20 -0
- package/template/docs/engineering/compatibility-signals.md +7 -0
- package/template/docs/engineering/component-scope-report.md +16 -0
- package/template/docs/engineering/component-scope.md +19 -0
- package/template/docs/engineering/context/installer-owned-paths.manifest +96 -0
- package/template/docs/engineering/context/readme-section-affinity.json +30 -0
- package/template/docs/engineering/decisions.md +16 -0
- package/template/docs/engineering/legacy-drift-audit.md +21 -0
- package/template/docs/engineering/manifests/components/api-gateway.manifest.yaml +12 -0
- package/template/docs/engineering/manifests/registry.manifest.yaml +20 -0
- package/template/docs/engineering/manifests/repo.manifest.yaml +11 -0
- package/template/docs/engineering/phase-context.md +16 -0
- package/template/docs/engineering/release-targets.json +123 -0
- package/template/docs/engineering/research.md +29 -0
- package/template/docs/engineering/runbook.md +2320 -0
- package/template/docs/engineering/runtime-connectivity.md +81 -0
- package/template/docs/engineering/security-review.md +33 -0
- package/template/docs/engineering/spec-pack/README.md +20 -0
- package/template/docs/engineering/state-archive/README.md +15 -0
- package/template/docs/engineering/state.md +20 -0
- package/template/docs/engineering/status-normalization-report.md +19 -0
- package/template/docs/engineering/token-cost-parity-manifest.md +16 -0
- package/template/docs/engineering/us-0084-remote-e2e.md +44 -0
- package/template/docs/product/acceptance.md +1 -0
- package/template/docs/product/backlog.md +5 -0
- package/template/docs/product/vision.md +11 -0
- package/template/docs/user-guides/README.md +40 -0
- package/{handoffs → template/handoffs}/dev_to_qa.md +0 -3
- package/{handoffs → template/handoffs}/po_to_tl.md +0 -3
- package/{handoffs → template/handoffs}/qa_to_dev.md +1 -2
- package/template/handoffs/release_notes.md +51 -0
- package/template/handoffs/release_queue.md +47 -0
- package/template/handoffs/release_to_dev.md +31 -0
- package/template/handoffs/releases/Sxxxx-release-notes.md +62 -0
- package/template/handoffs/resume_brief.md +14 -0
- package/{handoffs → template/handoffs}/tl_to_dev.md +0 -2
- package/template/handoffs/token_cost_runs/README.md +26 -0
- package/template/its_magic/.its-magic-version +1 -0
- package/template/its_magic/README.md +9 -0
- package/template/scripts/auto_outer_driver.py +521 -0
- package/template/scripts/caveman_compress_input.py +903 -0
- package/template/scripts/check_downstream_ci_guard.py +67 -0
- package/template/scripts/check_intake_template_parity.py +284 -0
- package/template/scripts/check_token_cost_parity.py +69 -0
- package/template/scripts/dev_environment_lib.py +463 -0
- package/template/scripts/doc_profile_lib.py +415 -0
- package/template/scripts/downstream_ci_guard_lib.py +222 -0
- package/template/scripts/enforce-triad-hot-surface.py +753 -0
- package/template/scripts/guard_installer_publish.py +88 -0
- package/template/scripts/intake_bug_resume_brief_refresh.py +303 -0
- package/template/scripts/intake_bug_routing_guard.py +67 -0
- package/template/scripts/intake_evidence_lib.py +802 -0
- package/template/scripts/intake_evidence_validate.py +73 -0
- package/template/scripts/materialize_codebase_map.py +184 -0
- package/template/scripts/pack_json_validate.py +130 -0
- package/template/scripts/project_readme_coverage_lib.py +417 -0
- package/template/scripts/readme_feature_coverage_lib.py +608 -0
- package/template/scripts/remote_config_summary.py +243 -0
- package/template/scripts/sync_push_gates.py +198 -0
- package/template/scripts/token_cost_compare.py +40 -0
- package/template/scripts/token_cost_lib.py +108 -0
- package/template/scripts/uat_probe_lib.py +868 -0
- package/template/scripts/validate-and-push.ps1 +280 -0
- package/template/scripts/validate-and-push.sh +243 -0
- package/template/scripts/validate_doc_profile.py +103 -0
- package/template/scripts/validate_project_readme_coverage.py +151 -0
- package/template/scripts/validate_readme_feature_coverage.py +140 -0
- package/template/sprints/S0001/progress.md +1 -0
- package/template/sprints/S0001/qa-findings.md +9 -0
- package/template/sprints/S0001/release-findings.md +24 -0
- package/template/sprints/S0001/sprint.md +9 -0
- package/template/sprints/S0001/summary.md +7 -0
- package/template/sprints/S0001/tasks.md +1 -0
- package/template/sprints/S0001/uat.json +6 -0
- package/template/sprints/S0001/uat.md +5 -0
- package/template/sprints/quick/Q0001/summary.md +1 -0
- package/{sprints → template/sprints}/quick/Q0001/task.json +0 -1
- package/.cursor/agents/curator.mdc +0 -21
- package/.cursor/agents/dev.mdc +0 -20
- package/.cursor/agents/po.mdc +0 -19
- package/.cursor/agents/qa.mdc +0 -19
- package/.cursor/agents/release.mdc +0 -19
- package/.cursor/agents/tech-lead.mdc +0 -21
- package/.cursor/commands/gsd-architecture.md +0 -29
- package/.cursor/commands/gsd-auto.md +0 -27
- package/.cursor/commands/gsd-discovery.md +0 -27
- package/.cursor/commands/gsd-execute.md +0 -32
- package/.cursor/commands/gsd-intake.md +0 -28
- package/.cursor/commands/gsd-map-codebase.md +0 -25
- package/.cursor/commands/gsd-milestone-complete.md +0 -24
- package/.cursor/commands/gsd-milestone-start.md +0 -26
- package/.cursor/commands/gsd-pause.md +0 -25
- package/.cursor/commands/gsd-plan-verify.md +0 -26
- package/.cursor/commands/gsd-qa.md +0 -28
- package/.cursor/commands/gsd-quick.md +0 -24
- package/.cursor/commands/gsd-refresh-context.md +0 -26
- package/.cursor/commands/gsd-release.md +0 -29
- package/.cursor/commands/gsd-research.md +0 -28
- package/.cursor/commands/gsd-resume.md +0 -26
- package/.cursor/commands/gsd-sprint-plan.md +0 -30
- package/.cursor/commands/gsd-verify-work.md +0 -25
- package/.cursor/hooks.json +0 -26
- package/.cursor/plans/cursor-gsd-team-kit_8cfee9b8.plan.md +0 -57
- package/.cursor/remote.json +0 -18
- package/.cursor/rules/gsd-core.mdc +0 -18
- package/.cursor/rules/gsd-handoffs.mdc +0 -10
- package/.cursor/rules/gsd-quality.mdc +0 -15
- package/.cursor/scratchpad.md +0 -34
- package/.github/workflows/ci.yml +0 -47
- package/decisions/DEC-0001.md +0 -21
- package/decisions/DEC-0002.md +0 -21
- package/docs/engineering/architecture.md +0 -354
- package/docs/engineering/decisions.md +0 -6
- package/docs/engineering/research.md +0 -11
- package/docs/engineering/runbook.md +0 -32
- package/docs/engineering/state.md +0 -33
- package/docs/product/acceptance.md +0 -6
- package/docs/product/backlog.md +0 -7
- package/docs/product/vision.md +0 -46
- package/gsd-installer.ps1 +0 -189
- package/gsd-installer.py +0 -195
- package/gsd-installer.sh +0 -201
- package/handoffs/release_notes.md +0 -14
- package/handoffs/resume_brief.md +0 -8
- package/milestones/M0001/milestone.json +0 -7
- package/milestones/M0001/phases.json +0 -9
- package/milestones/M0001/progress.md +0 -3
- package/milestones/M0001/summary.md +0 -3
- package/scripts/generate-release-notes.ps1 +0 -74
- package/scripts/generate-release-notes.sh +0 -63
- package/scripts/release-all.ps1 +0 -423
- package/scripts/release-all.sh +0 -226
- package/sprints/S0001/progress.md +0 -4
- package/sprints/S0001/qa-findings.md +0 -113
- package/sprints/S0001/sprint.md +0 -70
- package/sprints/S0001/summary.md +0 -46
- package/sprints/S0001/tasks.md +0 -35
- package/sprints/S0001/uat.json +0 -8
- package/sprints/S0001/uat.md +0 -8
- package/sprints/quick/Q0001/summary.md +0 -3
- /package/{.cursor/rules/gsd-escalation.mdc → template/.cursor/rules/escalation.mdc} +0 -0
- /package/{.cursor/skills/gsd-team → template/.cursor/skills/its-magic}/templates/acceptance.json +0 -0
- /package/{.cursor/skills/gsd-team → template/.cursor/skills/its-magic}/templates/acceptance.md +0 -0
- /package/{.cursor/skills/gsd-team → template/.cursor/skills/its-magic}/templates/architecture.json +0 -0
- /package/{.cursor/skills/gsd-team → template/.cursor/skills/its-magic}/templates/architecture.md +0 -0
- /package/{.cursor/skills/gsd-team → template/.cursor/skills/its-magic}/templates/decision.json +0 -0
- /package/{.cursor/skills/gsd-team → template/.cursor/skills/its-magic}/templates/decision.md +0 -0
- /package/{.cursor/skills/gsd-team → template/.cursor/skills/its-magic}/templates/handoff.json +0 -0
- /package/{.cursor/skills/gsd-team → template/.cursor/skills/its-magic}/templates/handoff.md +0 -0
- /package/{.cursor/skills/gsd-team → template/.cursor/skills/its-magic}/templates/milestone.json +0 -0
- /package/{.cursor/skills/gsd-team → template/.cursor/skills/its-magic}/templates/phase-context.json +0 -0
- /package/{.cursor/skills/gsd-team → template/.cursor/skills/its-magic}/templates/plan-verify.json +0 -0
- /package/{.cursor/skills/gsd-team → template/.cursor/skills/its-magic}/templates/sprint.json +0 -0
- /package/{.cursor/skills/gsd-team → template/.cursor/skills/its-magic}/templates/sprint.md +0 -0
- /package/{.cursor/skills/gsd-team → template/.cursor/skills/its-magic}/templates/story.json +0 -0
- /package/{.cursor/skills/gsd-team → template/.cursor/skills/its-magic}/templates/story.md +0 -0
- /package/{.cursor/skills/gsd-team → template/.cursor/skills/its-magic}/templates/uat.json +0 -0
- /package/{docs → template/docs}/engineering/context/phase-template.json +0 -0
- /package/{docs → template/docs}/engineering/dependencies.json +0 -0
- /package/{sprints → template/sprints}/S0001/plan-verify.json +0 -0
|
@@ -0,0 +1,505 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "its-magic release: prepare release notes and runbook updates."
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# /release
|
|
6
|
+
|
|
7
|
+
## Subagents
|
|
8
|
+
- release
|
|
9
|
+
|
|
10
|
+
## Execution model
|
|
11
|
+
- Run `/release` in a fresh Release subagent context.
|
|
12
|
+
- After writing outputs, stop and optionally hand off to `/refresh-context` in a
|
|
13
|
+
new subagent/chat.
|
|
14
|
+
|
|
15
|
+
## Isolation evidence write requirement (US-0048 / DEC-0029)
|
|
16
|
+
|
|
17
|
+
At the end of `/release`, append an isolation evidence entry to
|
|
18
|
+
`docs/engineering/state.md`:
|
|
19
|
+
|
|
20
|
+
- `phase_id=release`
|
|
21
|
+
- `role=release`
|
|
22
|
+
- `fresh_context_marker=<new marker for this subagent>`
|
|
23
|
+
- `timestamp=<ISO UTC>`
|
|
24
|
+
- `evidence_ref=<primary output ref>` (recommended: `sprints/Sxxxx/release-findings.md` and `handoffs/releases/Sxxxx-release-notes.md`)
|
|
25
|
+
|
|
26
|
+
## Inputs
|
|
27
|
+
|
|
28
|
+
- **Narrow-read (US-0053 / US-0096 Tranche A)**: Start at docs/engineering/phase-context.md
|
|
29
|
+
and the story section anchor in vision/architecture/decisions when a heading exists; forbid
|
|
30
|
+
full-file reads when a section heading exists.
|
|
31
|
+
- `sprints/Sxxxx/summary.md` (target sprint)
|
|
32
|
+
- `sprints/Sxxxx/qa-findings.md` (target sprint)
|
|
33
|
+
- `sprints/Sxxxx/release-findings.md` (target sprint; create/update during release gate evaluation)
|
|
34
|
+
- `sprints/Sxxxx/uat.json`
|
|
35
|
+
- `sprints/Sxxxx/uat.md`
|
|
36
|
+
- `docs/engineering/runbook.md`
|
|
37
|
+
- `docs/engineering/state.md`
|
|
38
|
+
- `handoffs/release_notes.md` (legacy compatibility pointer)
|
|
39
|
+
- `handoffs/release_queue.md` (canonical queue tracker)
|
|
40
|
+
|
|
41
|
+
## Outputs (artifacts)
|
|
42
|
+
- `handoffs/releases/Sxxxx-release-notes.md` (canonical per-sprint notes)
|
|
43
|
+
- `handoffs/release_queue.md` (canonical queue state)
|
|
44
|
+
- `handoffs/release_notes.md`
|
|
45
|
+
- `sprints/Sxxxx/release-findings.md` (canonical post-QA release issue log)
|
|
46
|
+
- `handoffs/release_to_dev.md` (if release gate blocks and remediation is needed)
|
|
47
|
+
- `docs/engineering/runbook.md`
|
|
48
|
+
- `docs/engineering/state.md`
|
|
49
|
+
|
|
50
|
+
## Stop conditions
|
|
51
|
+
- Deploy command missing for requested environment
|
|
52
|
+
- Decision gate triggered
|
|
53
|
+
- Sprint identity unresolved
|
|
54
|
+
- Queue/notes mismatch detected with no safe auto-remediation
|
|
55
|
+
|
|
56
|
+
## Canonical release artifacts (US-0040 / DEC-0020)
|
|
57
|
+
|
|
58
|
+
- Canonical release history is sprint-scoped:
|
|
59
|
+
`handoffs/releases/Sxxxx-release-notes.md`.
|
|
60
|
+
- Canonical release state tracker is `handoffs/release_queue.md`.
|
|
61
|
+
- Legacy compatibility file `handoffs/release_notes.md` remains supported as a
|
|
62
|
+
latest-release pointer/summary (not canonical history storage).
|
|
63
|
+
- Never overwrite release notes for non-target sprints.
|
|
64
|
+
|
|
65
|
+
## Release queue schema contract
|
|
66
|
+
|
|
67
|
+
Each queue row must include at minimum:
|
|
68
|
+
- `sprint_id`
|
|
69
|
+
- `story_refs`
|
|
70
|
+
- `status` (`planned|ready|unreleased|released|blocked`)
|
|
71
|
+
- `last_updated` (ISO timestamp)
|
|
72
|
+
- `release_notes_ref` (`handoffs/releases/Sxxxx-release-notes.md`)
|
|
73
|
+
- `gate_snapshot` (gate summary or deterministic reason code)
|
|
74
|
+
- `release_version` (optional until finalization)
|
|
75
|
+
|
|
76
|
+
## Deterministic target-sprint-only transition rules
|
|
77
|
+
|
|
78
|
+
Allowed transitions per target sprint:
|
|
79
|
+
- `planned -> ready -> unreleased -> released`
|
|
80
|
+
- `blocked` may be set for deterministic failure conditions.
|
|
81
|
+
|
|
82
|
+
Strict mutation semantics:
|
|
83
|
+
- During one `/release` run, only the target sprint row may be created/updated.
|
|
84
|
+
- Do not mutate unrelated sprint rows in `handoffs/release_queue.md`.
|
|
85
|
+
- Do not write/update `handoffs/releases/Syyyy-release-notes.md` when target is
|
|
86
|
+
`Sxxxx`.
|
|
87
|
+
|
|
88
|
+
## Release gate chain (US-0039 / DEC-0019)
|
|
89
|
+
|
|
90
|
+
Mandatory gate order (strict, deterministic). No step may be skipped or reordered:
|
|
91
|
+
|
|
92
|
+
1. **Check-in test gate** — Verify latest `TEST_COMMAND` result is passing; block on missing, stale, or failing evidence. When `TEST_COMMAND` runs the consolidated repo runner (`tests/run-tests.*`), passing results must include **US-0071** user-visible metadata guard coverage (positive, leak detection, idempotence); otherwise treat as incomplete release evidence for this repository (`METADATA_SANITIZATION_POLICY_MISSING` / missing regression row).
|
|
93
|
+
2. **QA completion gate** — Require no unresolved blocking findings in current sprint context before proceeding.
|
|
94
|
+
3. **UAT completion gate** — Require UAT artifacts populated and verified; block on placeholder, incomplete, or unresolved-fail state.
|
|
95
|
+
4. **Isolation compliance gate** — Require valid per-phase isolation evidence (US-0048 / DEC-0029); block on missing/invalid/stale evidence or violation.
|
|
96
|
+
4b. **Strict runtime proof gate** — Require valid strict runtime attestation tuples (US-0056 / DEC-0038); block on missing/invalid/reused/stale/ambiguous proof linkage.
|
|
97
|
+
5. **Release finalization** — Only after gates 1–4 pass: write release notes, update queue, reconcile backlog/runbook/state.
|
|
98
|
+
|
|
99
|
+
Optional runbook keys (`LINT_COMMAND`, `TYPECHECK_COMMAND`) are not mandatory release gates. When blank, they must not cause release to fail; report as `skipped`. Mandatory gates remain check-in test + QA + UAT + isolation only (US-0039 AC-10, US-0048).
|
|
100
|
+
|
|
101
|
+
Default: no bypass. Override only via explicit decision gate with documented rationale and evidence (see Override evidence contract below).
|
|
102
|
+
|
|
103
|
+
## No-bypass default (US-0039)
|
|
104
|
+
|
|
105
|
+
Release gates are mandatory by default. Bypass is not allowed unless an
|
|
106
|
+
explicit decision gate is approved and evidence is recorded.
|
|
107
|
+
|
|
108
|
+
Check-in test evidence: canonical source `tests/report.md`; valid = present + fresh + passing. Fail reasons: `RELEASE_TEST_EVIDENCE_MISSING`, `RELEASE_TEST_STALE`, `RELEASE_TEST_FAILED`. QA gate: no unresolved blocking findings; `RELEASE_QA_BLOCKERS_OPEN`, `RELEASE_QA_EVIDENCE_MISSING`. UAT gate: no placeholder/incomplete/unresolved-fail; `RELEASE_UAT_INCOMPLETE`, `RELEASE_UAT_FAILED`. Override evidence: decision record, rationale, approver, risk acceptance; `RELEASE_GATE_OVERRIDE_APPROVED`.
|
|
109
|
+
|
|
110
|
+
## QA completion evidence gate (US-0039)
|
|
111
|
+
|
|
112
|
+
Release may not proceed until QA completion evidence shows no unresolved blocking findings for the target sprint.
|
|
113
|
+
|
|
114
|
+
- **Evidence source**: `sprints/Sxxxx/qa-findings.md` (and optionally `handoffs/qa_to_dev.md` for handoff context).
|
|
115
|
+
- **Pass condition**: No unresolved blocking or critical findings; QA phase has been run and findings recorded.
|
|
116
|
+
- **Fail condition**: Unresolved blocking findings exist, or QA evidence is missing for target sprint — block with `RELEASE_QA_BLOCKERS_OPEN` or `RELEASE_QA_EVIDENCE_MISSING`; remediation: resolve blockers, re-run `/qa`, then rerun `/release`.
|
|
117
|
+
|
|
118
|
+
## Generated-test evidence prerequisite (US-0066 / DEC-0048)
|
|
119
|
+
|
|
120
|
+
For generated-project scope, release evidence must include deterministic
|
|
121
|
+
generated-test auto-run references:
|
|
122
|
+
|
|
123
|
+
- **Execution evidence source**: `sprints/Sxxxx/summary.md` generated baseline
|
|
124
|
+
test section (stack profile, generated paths, scaffold actions).
|
|
125
|
+
- **QA evidence source**: `sprints/Sxxxx/qa-findings.md` generated-test auto-run
|
|
126
|
+
fields (`generated_test_command`, `generated_test_result`,
|
|
127
|
+
`generated_test_output_ref`, `generated_test_paths_ref`,
|
|
128
|
+
`generated_test_reason_code`).
|
|
129
|
+
- **Pass condition**: generated-test evidence exists, is traceable, and does not
|
|
130
|
+
contradict QA/runtime verdicts.
|
|
131
|
+
- **Fail condition**: missing/ambiguous generated-test evidence or unresolved
|
|
132
|
+
scaffold failure reason code; block release with
|
|
133
|
+
`TEST_SCAFFOLD_GENERATION_FAILED` and rerun `/execute` and/or `/qa`.
|
|
134
|
+
|
|
135
|
+
## UAT completion gate (US-0039)
|
|
136
|
+
|
|
137
|
+
Release may not proceed until UAT artifacts are in verified state (no placeholder, incomplete, or unresolved-fail).
|
|
138
|
+
|
|
139
|
+
- **Evidence sources**: `sprints/Sxxxx/uat.json`, `sprints/Sxxxx/uat.md` (per DEC-0009).
|
|
140
|
+
- **Pass condition**: All UAT steps populated with results; `passed` + `failed` = total; no unresolved fail state; not placeholder-only content.
|
|
141
|
+
- **Fail conditions** (block release with remediation):
|
|
142
|
+
- **Placeholder**: UAT steps empty or template-only — `RELEASE_UAT_INCOMPLETE`; run `/verify-work`, populate steps, rerun `/release`.
|
|
143
|
+
- **Incomplete**: Steps exist but not all have results or counts inconsistent — `RELEASE_UAT_INCOMPLETE`; complete UAT, rerun `/release`.
|
|
144
|
+
- **Unresolved fail**: One or more steps recorded as failed and not resolved — `RELEASE_UAT_FAILED`; resolve failures or document acceptance, then rerun `/release`.
|
|
145
|
+
|
|
146
|
+
Do not infer pass from missing or placeholder UAT; block and emit the appropriate reason code.
|
|
147
|
+
|
|
148
|
+
## Backlog reconciliation contract (US-0043 / DEC-0021)
|
|
149
|
+
|
|
150
|
+
At release finalization boundary, reconcile backlog state for target sprint
|
|
151
|
+
stories using canonical release evidence precedence.
|
|
152
|
+
|
|
153
|
+
Canonical evidence precedence:
|
|
154
|
+
1. `handoffs/release_queue.md` target sprint row (`released` required)
|
|
155
|
+
2. `handoffs/releases/Sxxxx-release-notes.md` gate summary
|
|
156
|
+
3. `sprints/Sxxxx/qa-findings.md`
|
|
157
|
+
4. `sprints/Sxxxx/uat.json` and `sprints/Sxxxx/uat.md`
|
|
158
|
+
5. `sprints/Sxxxx/release-findings.md` (if present)
|
|
159
|
+
|
|
160
|
+
Deterministic reconciliation behavior:
|
|
161
|
+
- mutate only target sprint story blocks in `docs/product/backlog.md`
|
|
162
|
+
- set target story `Status: DONE` when mandatory release evidence is PASS
|
|
163
|
+
- reconcile target story acceptance checkboxes to checked state
|
|
164
|
+
- never mutate unrelated backlog stories
|
|
165
|
+
- if contradiction is detected (for example sprint is `released` but backlog
|
|
166
|
+
story remains OPEN/unchecked), fail safe with reason code
|
|
167
|
+
`BACKLOG_STATUS_DRIFT` and remediation guidance
|
|
168
|
+
|
|
169
|
+
## Canonical status source and global drift guard (US-0045 / DEC-0025)
|
|
170
|
+
|
|
171
|
+
Canonical ownership:
|
|
172
|
+
- Story status (`OPEN|DONE`) is authoritative in `docs/product/backlog.md`.
|
|
173
|
+
- `docs/product/acceptance.md` and `docs/engineering/state.md` are derived views.
|
|
174
|
+
|
|
175
|
+
Deterministic reconciliation precedence:
|
|
176
|
+
1. `docs/product/backlog.md` story status (canonical status owner)
|
|
177
|
+
2. target sprint release evidence (`handoffs/release_queue.md`,
|
|
178
|
+
`handoffs/releases/Sxxxx-release-notes.md`, `sprints/Sxxxx/qa-findings.md`,
|
|
179
|
+
`sprints/Sxxxx/uat.json`, `sprints/Sxxxx/uat.md`, `sprints/Sxxxx/release-findings.md`)
|
|
180
|
+
3. derived-view updates (`docs/product/acceptance.md`, `docs/engineering/state.md`)
|
|
181
|
+
|
|
182
|
+
Guardrails:
|
|
183
|
+
- Mutations remain target-scoped; never rewrite unrelated stories/sprints.
|
|
184
|
+
- On contradictory canonical vs release evidence at reconciliation boundary,
|
|
185
|
+
fail closed with `CANONICAL_STATUS_CONFLICT` and remediation guidance.
|
|
186
|
+
- Normalization and reconciliation outputs must be auditable in
|
|
187
|
+
`docs/engineering/status-normalization-report.md`.
|
|
188
|
+
|
|
189
|
+
## Steps
|
|
190
|
+
1. Resolve target sprint identity from current sprint context.
|
|
191
|
+
- If unresolved, fail closed:
|
|
192
|
+
- do not write any sprint-scoped notes file,
|
|
193
|
+
- do not mutate another sprint queue row,
|
|
194
|
+
- record/update blocked queue row keyed as `UNKNOWN` with reason
|
|
195
|
+
`RELEASE_SPRINT_UNRESOLVED`,
|
|
196
|
+
- include remediation guidance (set explicit sprint context and rerun).
|
|
197
|
+
2. Verify sync-policy prerequisite evidence (US-0038):
|
|
198
|
+
- Latest sync verdict must include deterministic evidence fields:
|
|
199
|
+
`phase_boundary`, `policy_mode`, `checks`, `push_decision`, `reason_code`,
|
|
200
|
+
`evidence_refs`.
|
|
201
|
+
- `TEST_COMMAND` baseline evidence is mandatory for any push-eligible path.
|
|
202
|
+
- Optional checks (`LINT_COMMAND`, `TYPECHECK_COMMAND`) are required only when
|
|
203
|
+
configured; missing optional commands must be reported as `skipped`, not fail.
|
|
204
|
+
- If baseline test evidence fails, append/update `sprints/Sxxxx/release-findings.md`
|
|
205
|
+
with `RELEASE_TEST_FAILED`, include evidence refs/remediation, write
|
|
206
|
+
`handoffs/release_to_dev.md`, and stop.
|
|
207
|
+
3. Enforce blocker-aware release safety:
|
|
208
|
+
- If unresolved blocking QA findings or unresolved critical issues exist,
|
|
209
|
+
require `no_push` semantics (`BLOCKING_QA_FINDINGS`) and hold release until
|
|
210
|
+
remediation evidence is present.
|
|
211
|
+
- Record blocking findings in `sprints/Sxxxx/release-findings.md` and handoff
|
|
212
|
+
in `handoffs/release_to_dev.md` before stopping.
|
|
213
|
+
3a. Optional compatibility critical gate (US-0034):
|
|
214
|
+
- If `CROSS_REPO_OBSERVABILITY=0`, skip with zero required overhead.
|
|
215
|
+
- If `CROSS_REPO_OBSERVABILITY=1`, read
|
|
216
|
+
`docs/engineering/compatibility-report.md`.
|
|
217
|
+
- If unresolved `critical` compatibility findings exist and
|
|
218
|
+
`COMPATIBILITY_GATE_ON_CRITICAL=1`, trigger decision gate and stop release
|
|
219
|
+
progression with reason code `COMPATIBILITY_CRITICAL_OPEN`.
|
|
220
|
+
3b. Optional component-scope gate (US-0035):
|
|
221
|
+
- If `COMPONENT_SCOPE_MODE=0`, skip with zero required overhead.
|
|
222
|
+
- If `COMPONENT_SCOPE_MODE=1`, read
|
|
223
|
+
`docs/engineering/component-scope-report.md`.
|
|
224
|
+
- If unapproved out-of-scope impact remains open, trigger decision gate and
|
|
225
|
+
stop release progression with reason code
|
|
226
|
+
`COMPONENT_SCOPE_VIOLATION_UNAPPROVED`.
|
|
227
|
+
3c. Optional spec-pack completeness gate (US-0031):
|
|
228
|
+
- If `SPEC_PACK_MODE=0`, skip with zero required overhead.
|
|
229
|
+
- If `SPEC_PACK_MODE=1`, validate target-story spec-pack artifacts per
|
|
230
|
+
runbook (Design Concept, CRS, Technical Specification); required sections
|
|
231
|
+
must be present and non-empty. If any required section is missing, block
|
|
232
|
+
release with reason code `SPEC_PACK_INCOMPLETE` and remediation guidance.
|
|
233
|
+
3d. Optional user-guide completeness gate (US-0032):
|
|
234
|
+
- If `USER_GUIDE_MODE=0`, skip with zero required overhead.
|
|
235
|
+
- If `USER_GUIDE_MODE=1`, validate target-story user guide at
|
|
236
|
+
`docs/user-guides/US-xxxx.md` per runbook (minimum required sections);
|
|
237
|
+
if guide missing or required sections absent, block release with reason
|
|
238
|
+
code `USER_GUIDE_INCOMPLETE` and remediation guidance.
|
|
239
|
+
3e. Legacy drift guard (US-0049 / DEC-0031):
|
|
240
|
+
- Run legacy-drift detection over DONE stories (backlog DONE and acceptance
|
|
241
|
+
unchecked OR traceability/state lacks entry OR release artifacts lack
|
|
242
|
+
representation). If legacy drift is detected, either block with reason code
|
|
243
|
+
(`BACKLOG_DONE_ACCEPTANCE_UNCHECKED`, `BACKLOG_DONE_TRACEABILITY_MISSING`,
|
|
244
|
+
`BACKLOG_DONE_RELEASE_ARTIFACT_MISSING`) and remediation, or perform
|
|
245
|
+
target-scoped repair and append entry to `docs/engineering/legacy-drift-audit.md`.
|
|
246
|
+
- Behavior is deterministic and documented in runbook; do not mutate
|
|
247
|
+
unrelated stories.
|
|
248
|
+
3f. README feature coverage gate (US-0091 / DEC-0074):
|
|
249
|
+
- Read merged scratchpad `README_FEATURE_COVERAGE_ENFORCE` (default `0`).
|
|
250
|
+
- When `0`: skip with `skipped` evidence in `sprints/Sxxxx/release-findings.md`
|
|
251
|
+
§ doc gates (grandfathering / migration pass).
|
|
252
|
+
- When `1`: run
|
|
253
|
+
`python scripts/validate_readme_feature_coverage.py --repo . --enforce`.
|
|
254
|
+
- On failure: emit `README_FEATURE_COVERAGE_BLOCKED` plus sub-codes on stderr;
|
|
255
|
+
remediation lists each missing id and target `root_h2` / `dev_h2` from
|
|
256
|
+
`docs/engineering/context/readme-section-affinity.json`.
|
|
257
|
+
- Active + `template/.cursor/commands/release.md` byte-identical step **3f**
|
|
258
|
+
block (full-file parity per US-0017).
|
|
259
|
+
3g. Project README coverage gate (US-0097 / DEC-0083):
|
|
260
|
+
- Read merged scratchpad `PROJECT_README_ENFORCE` (default `1` post-bootstrap).
|
|
261
|
+
- When `0`: skip with `PROJECT_README_ENFORCE_SKIPPED` evidence in
|
|
262
|
+
`sprints/Sxxxx/release-findings.md` § doc gates (migration/grandfathering only).
|
|
263
|
+
- When `1`: run
|
|
264
|
+
`python scripts/validate_project_readme_coverage.py --repo . --enforce`.
|
|
265
|
+
- On failure: emit `PROJECT_README_COVERAGE_BLOCKED` plus sub-codes
|
|
266
|
+
(`PROJECT_README_COVERAGE_GAP:<US-xxxx>`, `PROJECT_README_MIGRATION_AMBIGUOUS`,
|
|
267
|
+
`PROJECT_README_INPUT_INVALID`) on stderr; remediation lists each missing id.
|
|
268
|
+
- Gate order is strict: **3e → 3f (framework / US-0091) → 3g (project / US-0097) → 4 (UAT)**.
|
|
269
|
+
Framework and project enforce toggles are independent (`README_FEATURE_COVERAGE_ENFORCE`
|
|
270
|
+
vs `PROJECT_README_ENFORCE`).
|
|
271
|
+
- Active + `template/.cursor/commands/release.md` byte-identical step **3g**
|
|
272
|
+
block (full-file parity per US-0017).
|
|
273
|
+
4. Verify UAT completeness (DEC-0009): confirm all sprint UAT artifacts (`uat.json`,
|
|
274
|
+
`uat.md`) are in populated/verified state per DEC-0009. All steps must have
|
|
275
|
+
recorded results. If any UAT is placeholder or incomplete, block release and
|
|
276
|
+
recommend `/verify-work`.
|
|
277
|
+
- Record `RELEASE_UAT_INCOMPLETE` in `sprints/Sxxxx/release-findings.md` with
|
|
278
|
+
remediation and evidence refs before stop.
|
|
279
|
+
4a. Isolation compliance gate (US-0048 / DEC-0029): verify per-phase isolation
|
|
280
|
+
evidence is present and valid in `docs/engineering/state.md` for the target
|
|
281
|
+
sprint lifecycle (at minimum: `execute`, `qa`, `verify-work`).
|
|
282
|
+
- Missing evidence: block with `PHASE_CONTEXT_ISOLATION_MISSING`
|
|
283
|
+
- Invalid schema/fields: block with `ISOLATION_EVIDENCE_INVALID`
|
|
284
|
+
- Stale/reused evidence: block with `ISOLATION_EVIDENCE_STALE`
|
|
285
|
+
- Orchestrator/phase executed without fresh subagent: block with
|
|
286
|
+
`PHASE_CONTEXT_ISOLATION_VIOLATION`
|
|
287
|
+
- **Phase role alignment (US-0069 / DEC-0051)**: each entry's `role` must
|
|
288
|
+
match the canonical expected role for its `phase_id` (matrix + scratchpad
|
|
289
|
+
alternates as documented in `/auto`). Mismatch → `PHASE_ROLE_MISMATCH`.
|
|
290
|
+
- Remediation: re-run the affected phase(s) in fresh subagent contexts,
|
|
291
|
+
write new isolation evidence, then rerun `/release`.
|
|
292
|
+
4b. Strict runtime proof gate (US-0056 / DEC-0038): verify strict runtime-proof
|
|
293
|
+
tuples are present and valid for target lifecycle phases (`execute`, `qa`,
|
|
294
|
+
`verify-work`) and deterministically linked to checkpoint evidence.
|
|
295
|
+
- Missing tuple: block with `RUNTIME_PROOF_MISSING`
|
|
296
|
+
- Invalid tuple/hash/linkage: block with `RUNTIME_PROOF_INVALID`
|
|
297
|
+
- Reused `runtime_proof_id`: block with `RUNTIME_PROOF_REUSED`
|
|
298
|
+
- Expired/stale proof: block with `RUNTIME_PROOF_STALE`
|
|
299
|
+
- Ambiguous proof-to-checkpoint linkage: block with
|
|
300
|
+
`RUNTIME_PROOF_AMBIGUOUS_LINK`
|
|
301
|
+
- **Strict-proof role alignment (US-0069 / DEC-0051)**: tuple `role` must
|
|
302
|
+
equal the sibling isolation evidence `role` and the expected phase contract
|
|
303
|
+
role; `proof_hash` must be consistent with sorted-key JSON of the tuple
|
|
304
|
+
fields per `DEC-0038`. Violation → `RUNTIME_PROOF_INVALID` or
|
|
305
|
+
`PHASE_ROLE_MISMATCH` as applicable.
|
|
306
|
+
- Remediation: rerun affected phase(s), write fresh runtime proof tuples,
|
|
307
|
+
then rerun `/release`.
|
|
308
|
+
5. Ensure target queue row exists; set status to `unreleased` before finalization.
|
|
309
|
+
- Create row if missing.
|
|
310
|
+
- Set `release_notes_ref` to target sprint notes path.
|
|
311
|
+
- Keep all non-target rows unchanged.
|
|
312
|
+
6. Write/update only target sprint notes at:
|
|
313
|
+
`handoffs/releases/Sxxxx-release-notes.md`.
|
|
314
|
+
- Preserve any existing historical sprint file content unless explicitly
|
|
315
|
+
working on that same sprint.
|
|
316
|
+
7. Perform legacy migration/backfill check (one-time, non-destructive):
|
|
317
|
+
- If legacy content exists only in `handoffs/release_notes.md` and target
|
|
318
|
+
sprint can be resolved, backfill target sprint file without deleting legacy.
|
|
319
|
+
- If legacy sprint context is unresolved, keep legacy file unchanged and
|
|
320
|
+
record `LEGACY_NOTES_SPRINT_UNRESOLVED` with manual migration guidance.
|
|
321
|
+
- Migration must be idempotent; do not overwrite existing target sprint notes
|
|
322
|
+
as part of backfill.
|
|
323
|
+
8. Run mismatch fail-safe checks before finalization:
|
|
324
|
+
- If queue row missing for resolved sprint: reason `QUEUE_ENTRY_MISSING`.
|
|
325
|
+
- If queue row missing `release_notes_ref`: reason `NOTES_REF_MISSING`.
|
|
326
|
+
- If attempted transition is invalid: reason `STATUS_TRANSITION_INVALID`.
|
|
327
|
+
- For any mismatch: fail closed, preserve existing notes, keep queue in
|
|
328
|
+
`unreleased` or `blocked`, and include remediation guidance.
|
|
329
|
+
- Append/update `sprints/Sxxxx/release-findings.md` and
|
|
330
|
+
`handoffs/release_to_dev.md` for blocked outcomes.
|
|
331
|
+
9. On successful finalization, transition only target sprint:
|
|
332
|
+
`unreleased -> released`.
|
|
333
|
+
- Update `last_updated`, `release_version` (when available), and gate summary.
|
|
334
|
+
10. Reconcile target story backlog status + acceptance checkboxes in
|
|
335
|
+
`docs/product/backlog.md` using US-0043 and US-0045 contracts.
|
|
336
|
+
- Apply only to target sprint-linked stories.
|
|
337
|
+
- If contradictory states remain after reconciliation attempt, fail closed
|
|
338
|
+
with `BACKLOG_STATUS_DRIFT` or `CANONICAL_STATUS_CONFLICT`, write
|
|
339
|
+
remediation guidance, and stop.
|
|
340
|
+
11. Reconcile derived status views from canonical backlog status:
|
|
341
|
+
- update linked rows/checklists in `docs/product/acceptance.md`,
|
|
342
|
+
- append deterministic status checkpoint in `docs/engineering/state.md`,
|
|
343
|
+
- preserve non-target entries unchanged.
|
|
344
|
+
12. If one-time normalization baseline is missing, run the documented
|
|
345
|
+
normalization pass and write auditable report rows to
|
|
346
|
+
`docs/engineering/status-normalization-report.md` (story id, prior values,
|
|
347
|
+
resolved values, evidence refs, timestamp).
|
|
348
|
+
13. Update backward-compatible legacy file `handoffs/release_notes.md` as
|
|
349
|
+
latest-release pointer and summary:
|
|
350
|
+
- include latest released sprint id,
|
|
351
|
+
- include pointer to canonical sprint-scoped notes file,
|
|
352
|
+
- include visibility section for unreleased queue entries.
|
|
353
|
+
14. Update runbook/state readiness and evidence references for release outcome.
|
|
354
|
+
- On pass, ensure `sprints/Sxxxx/release-findings.md` records release outcome
|
|
355
|
+
(`PASS`) and references final evidence artifacts.
|
|
356
|
+
15. If `AUTO_RELEASE_NOTES=1` in `.cursor/scratchpad.md`, generation logic must
|
|
357
|
+
still target sprint-scoped notes first and update legacy pointer second.
|
|
358
|
+
16. Optional configurable publish targets (US-0054 / DEC-0036):
|
|
359
|
+
- Read `.cursor/scratchpad.md`:
|
|
360
|
+
- `RELEASE_PUBLISH_MODE=disabled|confirm|auto`
|
|
361
|
+
- `RELEASE_TARGETS_FILE`
|
|
362
|
+
- `RELEASE_TARGETS_DEFAULT`
|
|
363
|
+
- If `RELEASE_PUBLISH_MODE=disabled`, skip publish target execution with
|
|
364
|
+
deterministic no-op evidence.
|
|
365
|
+
- Validate target schema in `RELEASE_TARGETS_FILE` before execution:
|
|
366
|
+
- stable `id`, `type`, `enabled`, `order`,
|
|
367
|
+
- supported `type`: `npm|choco|brew|git|docker|cloud|custom|ssh`,
|
|
368
|
+
- env-reference-only secret fields (`*Env`) for sensitive values.
|
|
369
|
+
- fail fast on invalid/missing required fields with
|
|
370
|
+
`PUBLISH_TARGET_CONFIG_INVALID`.
|
|
371
|
+
- Resolve selected targets (explicit request, else
|
|
372
|
+
`RELEASE_TARGETS_DEFAULT`), filter `enabled=true`, and execute in
|
|
373
|
+
deterministic order (`order`, then `id`).
|
|
374
|
+
- If `RELEASE_PUBLISH_MODE=confirm`, require explicit operator confirmation
|
|
375
|
+
before execution; if confirmation is denied/absent, stop with
|
|
376
|
+
`PUBLISH_CONFIRMATION_REQUIRED`.
|
|
377
|
+
- For `ssh` targets, require `hostEnv`, `userEnv`, `authEnv`, and
|
|
378
|
+
`remoteCommand`. Missing required fields fail with
|
|
379
|
+
`PUBLISH_TARGET_CONFIG_INVALID`.
|
|
380
|
+
- If target execution fails, emit `PUBLISH_TARGET_EXECUTION_FAILED` with
|
|
381
|
+
target ID and remediation; do not mutate unrelated release artifacts.
|
|
382
|
+
17. Remote runtime connectivity contract (US-0064 / DEC-0044):
|
|
383
|
+
- Extend target interpretation with runtime metadata from
|
|
384
|
+
`RELEASE_TARGETS_FILE`:
|
|
385
|
+
- `runtime.mode` (`local|remote`),
|
|
386
|
+
- endpoint fields (`domainEnv|ipEnv|hostEnv`, `port`, `protocol`),
|
|
387
|
+
- optional ingress metadata (`traefik.enabled`, `router`, `entrypoint`,
|
|
388
|
+
`tls`),
|
|
389
|
+
- optional `dockerOverSsh` contract for ssh targets.
|
|
390
|
+
- Validate remote connectivity fields for remote-mode targets; fail with
|
|
391
|
+
`REMOTE_CONNECTIVITY_CONFIG_INVALID` on missing/invalid requirements.
|
|
392
|
+
- Write/update canonical operator doc:
|
|
393
|
+
`docs/engineering/runtime-connectivity.md` with sanitized endpoint summary
|
|
394
|
+
and local vs remote execution context.
|
|
395
|
+
- In release output/handoffs, include operator connection guidance
|
|
396
|
+
(where hosted, how to connect) without exposing secrets.
|
|
397
|
+
18. Release operator Run/Connect/Verify hints contract (US-0067 / DEC-0049):
|
|
398
|
+
- `handoffs/releases/Sxxxx-release-notes.md` must include a deterministic
|
|
399
|
+
operator section order and required fields:
|
|
400
|
+
1) `## Run`:
|
|
401
|
+
- `start_command`
|
|
402
|
+
- `runtime_mode` (`local|remote`)
|
|
403
|
+
- `runtime_context_ref` (link to `docs/engineering/runtime-connectivity.md`
|
|
404
|
+
when available)
|
|
405
|
+
2) `## Connect`:
|
|
406
|
+
- `service_url`
|
|
407
|
+
- `service_port`
|
|
408
|
+
- `health_endpoint`
|
|
409
|
+
3) `## Verify`:
|
|
410
|
+
- `verification_steps` (deterministic numbered list)
|
|
411
|
+
- `expected_health_signal`
|
|
412
|
+
4) `## Credentials`:
|
|
413
|
+
- env-reference-only credential source refs (for example `API_TOKEN_ENV`)
|
|
414
|
+
- expected value source location guidance (for example CI secret store,
|
|
415
|
+
operator shell profile) with no inline secret values
|
|
416
|
+
5) `## Known Issues`:
|
|
417
|
+
- concise deterministic known issues list, or explicit `None`.
|
|
418
|
+
- `handoffs/release_notes.md` must include a concise latest release operator
|
|
419
|
+
summary (start command + endpoint + verify pointer) and link to canonical
|
|
420
|
+
sprint notes.
|
|
421
|
+
- Fail closed when required operator hints are missing/ambiguous or contain
|
|
422
|
+
inline secrets:
|
|
423
|
+
- `RELEASE_OPERATOR_HINTS_MISSING`
|
|
424
|
+
- `RELEASE_OPERATOR_HINTS_AMBIGUOUS`
|
|
425
|
+
- `RELEASE_OPERATOR_HINTS_SECRET_EXPOSURE`
|
|
426
|
+
- Remediation: populate required fields in canonical sprint notes with
|
|
427
|
+
sanitized env-ref-only credential guidance, then rerun `/release`.
|
|
428
|
+
|
|
429
|
+
## Fail-safe reason codes and remediation guidance
|
|
430
|
+
|
|
431
|
+
Required deterministic reason codes:
|
|
432
|
+
- `RELEASE_SPRINT_UNRESOLVED`
|
|
433
|
+
- `RELEASE_TEST_FAILED`
|
|
434
|
+
- `RELEASE_QA_BLOCKERS_OPEN`
|
|
435
|
+
- `RELEASE_QA_EVIDENCE_MISSING`
|
|
436
|
+
- `RELEASE_UAT_INCOMPLETE`
|
|
437
|
+
- `RELEASE_UAT_FAILED`
|
|
438
|
+
- `PHASE_CONTEXT_ISOLATION_MISSING`
|
|
439
|
+
- `PHASE_CONTEXT_ISOLATION_VIOLATION`
|
|
440
|
+
- `ISOLATION_EVIDENCE_STALE`
|
|
441
|
+
- `ISOLATION_EVIDENCE_INVALID`
|
|
442
|
+
- `RUNTIME_PROOF_MISSING`
|
|
443
|
+
- `RUNTIME_PROOF_INVALID`
|
|
444
|
+
- `RUNTIME_PROOF_REUSED`
|
|
445
|
+
- `RUNTIME_PROOF_STALE`
|
|
446
|
+
- `RUNTIME_PROOF_AMBIGUOUS_LINK`
|
|
447
|
+
- `RELEASE_GATE_OVERRIDE_APPROVED`
|
|
448
|
+
- `LEGACY_NOTES_SPRINT_UNRESOLVED`
|
|
449
|
+
- `QUEUE_ENTRY_MISSING`
|
|
450
|
+
- `NOTES_REF_MISSING`
|
|
451
|
+
- `STATUS_TRANSITION_INVALID`
|
|
452
|
+
- `BACKLOG_STATUS_DRIFT`
|
|
453
|
+
- `CANONICAL_STATUS_CONFLICT`
|
|
454
|
+
- `COMPATIBILITY_CRITICAL_OPEN`
|
|
455
|
+
- `COMPONENT_SCOPE_VIOLATION_UNAPPROVED`
|
|
456
|
+
- `SPEC_PACK_INCOMPLETE`
|
|
457
|
+
- `USER_GUIDE_INCOMPLETE`
|
|
458
|
+
- `BACKLOG_DONE_ACCEPTANCE_UNCHECKED`
|
|
459
|
+
- `BACKLOG_DONE_TRACEABILITY_MISSING`
|
|
460
|
+
- `BACKLOG_DONE_RELEASE_ARTIFACT_MISSING`
|
|
461
|
+
- `PUBLISH_TARGET_CONFIG_INVALID`
|
|
462
|
+
- `PUBLISH_CONFIRMATION_REQUIRED`
|
|
463
|
+
- `PUBLISH_TARGET_EXECUTION_FAILED`
|
|
464
|
+
- `REMOTE_CONNECTIVITY_CONFIG_INVALID`
|
|
465
|
+
- `RUNTIME_CONNECTIVITY_DOC_WRITE_FAILED`
|
|
466
|
+
- `RELEASE_OPERATOR_HINTS_MISSING`
|
|
467
|
+
- `RELEASE_OPERATOR_HINTS_AMBIGUOUS`
|
|
468
|
+
- `RELEASE_OPERATOR_HINTS_SECRET_EXPOSURE`
|
|
469
|
+
- `PHASE_OWNERSHIP_VIOLATION`
|
|
470
|
+
- `PHASE_OVERRIDE_EVIDENCE_MISSING`
|
|
471
|
+
- `TEST_SCAFFOLD_STACK_UNRESOLVED`
|
|
472
|
+
- `TEST_SCAFFOLD_UNSUPPORTED_STACK`
|
|
473
|
+
- `TEST_SCAFFOLD_GENERATION_FAILED`
|
|
474
|
+
|
|
475
|
+
When any reason code is emitted:
|
|
476
|
+
- Preserve existing release note artifacts (non-destructive default).
|
|
477
|
+
- Do not auto-reconcile by deleting/rebuilding unrelated sprint history.
|
|
478
|
+
- Provide actionable remediation steps and require rerun after correction.
|
|
479
|
+
|
|
480
|
+
## Deterministic artifact ordering contract (US-0058 / DEC-0040)
|
|
481
|
+
|
|
482
|
+
- Mutations in `/release` must comply with
|
|
483
|
+
`docs/engineering/artifact-ordering-policy.md`.
|
|
484
|
+
- Ordering expectations:
|
|
485
|
+
- `docs/engineering/state.md`: append-bottom checkpoint entries only.
|
|
486
|
+
- `docs/product/backlog.md` + `docs/product/acceptance.md`: target story
|
|
487
|
+
normalization while preserving sorted-canonical order.
|
|
488
|
+
- `handoffs/release_queue.md`: append one target sprint row/update in-place for
|
|
489
|
+
that row only.
|
|
490
|
+
- `handoffs/release_notes.md`: update latest pointer section first; keep
|
|
491
|
+
historical list stable.
|
|
492
|
+
- Missing/ambiguous placement anchors must fail with
|
|
493
|
+
`ARTIFACT_ORDERING_ANCHOR_AMBIGUOUS` and no partial mutation.
|
|
494
|
+
|
|
495
|
+
## Cross-phase ownership guard (US-0061 / DEC-0043)
|
|
496
|
+
|
|
497
|
+
- `/release` mutations must also satisfy
|
|
498
|
+
`docs/engineering/artifact-ownership-policy.md`.
|
|
499
|
+
- Release may mutate only release-owned scopes (target sprint queue row, release
|
|
500
|
+
notes pointer/sprint notes, and target story reconciliation surfaces).
|
|
501
|
+
- Cross-phase non-owned section rewrites/deletions fail closed with
|
|
502
|
+
`PHASE_OWNERSHIP_VIOLATION`.
|
|
503
|
+
- If an override-authorized mutation path is configured but override evidence is
|
|
504
|
+
missing, fail closed with `PHASE_OVERRIDE_EVIDENCE_MISSING`.
|
|
505
|
+
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "its-magic research: gather references and risks before architecture."
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# /research
|
|
6
|
+
|
|
7
|
+
## Subagents
|
|
8
|
+
- tech-lead
|
|
9
|
+
- po
|
|
10
|
+
|
|
11
|
+
## Execution model
|
|
12
|
+
- Run `/research` in a fresh subagent context (tech-lead by default; include PO
|
|
13
|
+
support only if needed for requirements clarification).
|
|
14
|
+
- After writing outputs, stop and hand off to `/architecture` in a new
|
|
15
|
+
subagent/chat.
|
|
16
|
+
|
|
17
|
+
## Inputs
|
|
18
|
+
|
|
19
|
+
- **Narrow-read (US-0053 / US-0096 Tranche A)**: Start at docs/engineering/phase-context.md
|
|
20
|
+
and the story section anchor in vision/architecture/decisions when a heading exists; forbid
|
|
21
|
+
full-file reads when a section heading exists.
|
|
22
|
+
- `docs/product/vision.md`
|
|
23
|
+
- `docs/product/backlog.md`
|
|
24
|
+
- `docs/product/acceptance.md`
|
|
25
|
+
|
|
26
|
+
## Outputs (artifacts)
|
|
27
|
+
- `docs/engineering/research.md`
|
|
28
|
+
- `docs/engineering/decisions.md`
|
|
29
|
+
- `docs/engineering/state.md`
|
|
30
|
+
|
|
31
|
+
## Stop conditions
|
|
32
|
+
- Decision gate triggered
|
|
33
|
+
- Missing acceptance criteria
|
|
34
|
+
|
|
35
|
+
## Steps
|
|
36
|
+
1. Identify research topics from product vision, backlog, and acceptance criteria.
|
|
37
|
+
2. Search the web for relevant patterns, libraries, APIs, and risks.
|
|
38
|
+
3. Persist each finding as an R-xxxx entry in `docs/engineering/research.md`.
|
|
39
|
+
Use deterministic ID policy:
|
|
40
|
+
- if `ID_NAMESPACE_BOOTSTRAP=1` and freshness checks pass
|
|
41
|
+
(`docs/product/backlog.md` has no `US-`, `docs/engineering/decisions.md` has
|
|
42
|
+
no `DEC-`, and `docs/engineering/research.md` has no `R-`), start at
|
|
43
|
+
`R-0001`;
|
|
44
|
+
- otherwise auto-increment from the highest existing entry.
|
|
45
|
+
Never rewrite historical IDs. If bootstrap is requested but freshness fails,
|
|
46
|
+
emit `ID_BOOTSTRAP_NOT_FRESH` diagnostic and continue with highest-existing
|
|
47
|
+
continuation. Follow the entry schema defined in the research.md header
|
|
48
|
+
(per DEC-0011 / DEC-0034).
|
|
49
|
+
4. Record any decisions triggered by research and update state.
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "its-magic resume: deterministic continuation context loader."
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# /resume
|
|
6
|
+
|
|
7
|
+
## Subagents
|
|
8
|
+
- curator
|
|
9
|
+
|
|
10
|
+
## Execution model
|
|
11
|
+
- Run `/resume` in a fresh Curator subagent context.
|
|
12
|
+
- When continuing to another phase, start that phase in a new subagent/chat.
|
|
13
|
+
|
|
14
|
+
## Isolation evidence write requirement (US-0048 / DEC-0029)
|
|
15
|
+
|
|
16
|
+
At the end of `/resume`, append an isolation evidence entry to
|
|
17
|
+
`docs/engineering/state.md`:
|
|
18
|
+
|
|
19
|
+
- `phase_id=resume`
|
|
20
|
+
- `role=curator`
|
|
21
|
+
- `fresh_context_marker=<new marker for this subagent>`
|
|
22
|
+
- `timestamp=<ISO UTC>`
|
|
23
|
+
- `evidence_ref=docs/engineering/state.md` (resume resolution summary and next-phase recommendation)
|
|
24
|
+
|
|
25
|
+
## Inputs
|
|
26
|
+
|
|
27
|
+
- **Narrow-read (US-0053 / US-0096 Tranche A)**: Start at docs/engineering/phase-context.md
|
|
28
|
+
and the story section anchor in vision/architecture/decisions when a heading exists; forbid
|
|
29
|
+
full-file reads when a section heading exists.
|
|
30
|
+
- `docs/engineering/state.md`
|
|
31
|
+
- `docs/engineering/decisions.md`
|
|
32
|
+
- `sprints/S0001/summary.md`
|
|
33
|
+
- `handoffs/resume_brief.md`
|
|
34
|
+
- Optional automation flags from `.cursor/scratchpad.md`
|
|
35
|
+
- Optional operator intent to continue via `/auto start-from=<phase>`
|
|
36
|
+
|
|
37
|
+
## Outputs (artifacts)
|
|
38
|
+
- Updated `docs/engineering/state.md` (if needed)
|
|
39
|
+
|
|
40
|
+
## Stop conditions
|
|
41
|
+
- Missing resume brief or stale state
|
|
42
|
+
|
|
43
|
+
## Steps
|
|
44
|
+
1. Load the context pack and open decisions.
|
|
45
|
+
2. Parse intended resume phase from `handoffs/resume_brief.md`.
|
|
46
|
+
3. Validate that `resume_brief` phase is canonical and consistent with latest
|
|
47
|
+
`docs/engineering/state.md` checkpoint.
|
|
48
|
+
3a. Validate isolation provenance (US-0048 / DEC-0029):
|
|
49
|
+
- If `resume_brief.md` includes `isolation_provenance_ref`, confirm it points
|
|
50
|
+
to the latest relevant isolation evidence entry in `docs/engineering/state.md`.
|
|
51
|
+
- If `resume_requires_fresh_context=1`, ensure the next phase is executed in a
|
|
52
|
+
fresh subagent context and writes a new `fresh_context_marker` (no reuse).
|
|
53
|
+
4. If `resume_brief.md` is stale/unparseable/conflicting, fail fast with the
|
|
54
|
+
`/auto` resolver contract format:
|
|
55
|
+
`[AUTO_RESUME_ERROR] <code>: <summary>. Source=<source>. Fix: <action>.`
|
|
56
|
+
5. Summarize current status, deterministic resume source, and next steps.
|
|
57
|
+
6. For deterministic continuation, recommend:
|
|
58
|
+
- explicit override: `/auto start-from=<phase>`
|
|
59
|
+
- default precedence: `/auto` (argument > resume brief > state fallback)
|
|
60
|
+
7. If `AUTO_FLOW_MODE=auto_until_decision`, continue automation with existing
|
|
61
|
+
decision gates and stop conditions preserved.
|
|
62
|
+
|
|
63
|
+
## Compatibility notes
|
|
64
|
+
|
|
65
|
+
- `/resume` remains valid for manual/interactive status recovery.
|
|
66
|
+
- `/resume` does not bypass `/auto` stop conditions or gate behavior.
|
|
67
|
+
|