its-magic 0.1.2-27 → 0.1.2-29
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 +59 -0
- package/installer.ps1 +12 -1
- package/installer.py +13 -1
- package/installer.sh +12 -1
- package/package.json +1 -1
- package/template/.cursor/agents/po.mdc +32 -0
- package/template/.cursor/commands/execute.md +51 -0
- package/template/.cursor/commands/intake.md +54 -8
- package/template/.cursor/commands/qa.md +63 -0
- package/template/.cursor/commands/release.md +59 -0
- package/template/.cursor/commands/verify-work.md +12 -0
- package/template/.cursor/rules/core.mdc +10 -0
- package/template/.cursor/rules/quality.mdc +7 -0
- package/template/README.md +59 -0
- package/template/docs/engineering/context/installer-owned-paths.manifest +1 -0
- package/template/docs/engineering/runbook.md +183 -0
- package/template/handoffs/release_notes.md +13 -0
- package/template/handoffs/releases/Sxxxx-release-notes.md +35 -0
package/README.md
CHANGED
|
@@ -225,6 +225,37 @@ Intake runtime safety behavior (US-0059):
|
|
|
225
225
|
writers; true conflicting external writes fail safe with
|
|
226
226
|
`INTAKE_CONCURRENT_WRITER_DETECTED`.
|
|
227
227
|
|
|
228
|
+
Runtime QA autopilot behavior (US-0065):
|
|
229
|
+
- Generated-project QA must include runtime proof chain:
|
|
230
|
+
`startup -> readiness/connectivity -> log scan -> bounded retry -> verdict`.
|
|
231
|
+
- Deterministic runtime fail codes:
|
|
232
|
+
`RUNTIME_STARTUP_FAILED`, `RUNTIME_ENDPOINT_UNREACHABLE`,
|
|
233
|
+
`RUNTIME_LOG_CRITICAL_DETECTED`, `RUNTIME_RETRY_BUDGET_EXHAUSTED`,
|
|
234
|
+
`RUNTIME_STACK_PROFILE_UNRESOLVED`.
|
|
235
|
+
- Runtime evidence must include startup command/profile, runtime mode
|
|
236
|
+
(`local|remote`), health result, retry ledger, and log severity summary.
|
|
237
|
+
- Stack-aware runtime profile resolution is required for Node/Python/Go/Java/.NET;
|
|
238
|
+
unresolved stacks fail closed (no generic silent PASS fallback).
|
|
239
|
+
- For webapp contexts, QA includes browser-surface verification with
|
|
240
|
+
console/network error signals.
|
|
241
|
+
|
|
242
|
+
Generated test scaffolding + auto-run behavior (US-0066):
|
|
243
|
+
- `/execute` resolves stack profile (`node|python|go|java|dotnet`) and generates
|
|
244
|
+
missing baseline unit/integration/acceptance tests only.
|
|
245
|
+
- Generation is non-destructive by default: preserve user-authored tests/config,
|
|
246
|
+
fill only missing baseline assets, keep reruns idempotent.
|
|
247
|
+
- `TEST_COMMAND` wiring is deterministic:
|
|
248
|
+
- preserve existing non-empty user command,
|
|
249
|
+
- set stack baseline only when command is missing/unset.
|
|
250
|
+
- `/qa` automatically runs the generated baseline tests and records deterministic
|
|
251
|
+
evidence (`command`, `result`, `output ref`, `generated paths ref`).
|
|
252
|
+
- Fail-closed scaffold diagnostics:
|
|
253
|
+
`TEST_SCAFFOLD_STACK_UNRESOLVED`,
|
|
254
|
+
`TEST_SCAFFOLD_UNSUPPORTED_STACK`,
|
|
255
|
+
`TEST_SCAFFOLD_GENERATION_FAILED`.
|
|
256
|
+
- Static baseline test pass does not bypass runtime autopilot; runtime verdict
|
|
257
|
+
remains mandatory for QA PASS.
|
|
258
|
+
|
|
228
259
|
## Workflow
|
|
229
260
|
|
|
230
261
|
### Core commands
|
|
@@ -277,6 +308,34 @@ broad/high-risk requests:
|
|
|
277
308
|
(`docs/product/backlog.md`, `docs/product/acceptance.md`,
|
|
278
309
|
`handoffs/po_to_tl.md`)
|
|
279
310
|
|
|
311
|
+
### Mandatory intake question packs (US-0068)
|
|
312
|
+
|
|
313
|
+
`/intake` now enforces deterministic minimum questionnaire packs before
|
|
314
|
+
backlog/acceptance persistence:
|
|
315
|
+
|
|
316
|
+
- `first-intake-pack` for first/new/broad requests
|
|
317
|
+
- `small-intake-pack` for narrow follow-up requests
|
|
318
|
+
|
|
319
|
+
Fail-closed coverage behavior:
|
|
320
|
+
|
|
321
|
+
- required topic answers must be covered for the selected pack before write
|
|
322
|
+
- unknown/ambiguous stack cues fail closed to `first-intake-pack`
|
|
323
|
+
- persistence blocks with deterministic reason codes when required coverage is
|
|
324
|
+
incomplete and assumptions are not explicitly confirmed
|
|
325
|
+
|
|
326
|
+
Deterministic reason codes:
|
|
327
|
+
|
|
328
|
+
- `INTAKE_REQUIRED_TOPIC_MISSING`
|
|
329
|
+
- `INTAKE_REQUIRED_PACK_INCOMPLETE`
|
|
330
|
+
- `INTAKE_ASSUMPTION_CONFIRMATION_REQUIRED`
|
|
331
|
+
- `INTAKE_PERSISTENCE_BLOCKED`
|
|
332
|
+
|
|
333
|
+
Intake artifacts must persist coverage evidence fields:
|
|
334
|
+
|
|
335
|
+
- `asked_topics`
|
|
336
|
+
- `missing_topics`
|
|
337
|
+
- `assumptions_confirmed`
|
|
338
|
+
|
|
280
339
|
### Optional ID namespace bootstrap (US-0052)
|
|
281
340
|
|
|
282
341
|
Fresh-project ID bootstrap behavior is explicit and default-off:
|
package/installer.ps1
CHANGED
|
@@ -111,7 +111,7 @@ function Choose-Mode {
|
|
|
111
111
|
function Classify-File($RelPath) {
|
|
112
112
|
$normalized = $RelPath -replace '\\','/'
|
|
113
113
|
|
|
114
|
-
$mixedFiles = @('.cursor/scratchpad.md')
|
|
114
|
+
$mixedFiles = @('.cursor/scratchpad.md', 'README.md')
|
|
115
115
|
if ($mixedFiles -contains $normalized) { return 'mixed' }
|
|
116
116
|
|
|
117
117
|
$frameworkPrefixes = @(
|
|
@@ -174,6 +174,15 @@ function Write-InstalledVersion($TargetRoot, $Ver) {
|
|
|
174
174
|
}
|
|
175
175
|
}
|
|
176
176
|
|
|
177
|
+
function Sync-RootReadmeToItsMagic($TargetRoot) {
|
|
178
|
+
$rootReadme = Join-Path $TargetRoot "README.md"
|
|
179
|
+
if (-not (Test-Path $rootReadme -PathType Leaf)) { return $false }
|
|
180
|
+
$itsMagicReadme = Join-Path $TargetRoot "its_magic\README.md"
|
|
181
|
+
Ensure-Parent $itsMagicReadme
|
|
182
|
+
Copy-Item -Path $rootReadme -Destination $itsMagicReadme -Force
|
|
183
|
+
return $true
|
|
184
|
+
}
|
|
185
|
+
|
|
177
186
|
function Read-RunbookKeyValue($RunbookPath, $Key) {
|
|
178
187
|
if (-not (Test-Path $RunbookPath -PathType Leaf)) { return "" }
|
|
179
188
|
$needle = "${Key}:"
|
|
@@ -617,6 +626,7 @@ if ($mode -eq "upgrade") {
|
|
|
617
626
|
}
|
|
618
627
|
|
|
619
628
|
Write-InstalledVersion $targetRoot $appVersion
|
|
629
|
+
Sync-RootReadmeToItsMagic $targetRoot | Out-Null
|
|
620
630
|
$runbookBootstrap = Invoke-RunbookBootstrap -TargetRoot $targetRoot
|
|
621
631
|
foreach ($note in $runbookBootstrap.notes) { Write-Host $note }
|
|
622
632
|
if (-not $runbookBootstrap.ok) { exit 1 }
|
|
@@ -694,6 +704,7 @@ foreach ($rel in $files) {
|
|
|
694
704
|
}
|
|
695
705
|
|
|
696
706
|
Write-InstalledVersion $targetRoot $appVersion
|
|
707
|
+
Sync-RootReadmeToItsMagic $targetRoot | Out-Null
|
|
697
708
|
$runbookBootstrap = Invoke-RunbookBootstrap -TargetRoot $targetRoot
|
|
698
709
|
foreach ($note in $runbookBootstrap.notes) { Write-Host $note }
|
|
699
710
|
if (-not $runbookBootstrap.ok) { exit 1 }
|
package/installer.py
CHANGED
|
@@ -119,7 +119,7 @@ USER_DATA_PREFIXES = (
|
|
|
119
119
|
"docs/product/", "docs/engineering/", "docs/user-guides/",
|
|
120
120
|
"sprints/", "handoffs/", "decisions/",
|
|
121
121
|
)
|
|
122
|
-
MIXED_FILES = {".cursor/scratchpad.md"}
|
|
122
|
+
MIXED_FILES = {".cursor/scratchpad.md", "README.md"}
|
|
123
123
|
|
|
124
124
|
|
|
125
125
|
def classify_file(rel_path):
|
|
@@ -159,6 +159,16 @@ def write_installed_version(target_root, ver):
|
|
|
159
159
|
os.remove(legacy)
|
|
160
160
|
|
|
161
161
|
|
|
162
|
+
def sync_root_readme_to_its_magic(target_root):
|
|
163
|
+
root_readme = os.path.join(target_root, "README.md")
|
|
164
|
+
if not os.path.isfile(root_readme):
|
|
165
|
+
return False
|
|
166
|
+
its_magic_readme = os.path.join(target_root, "its_magic", "README.md")
|
|
167
|
+
ensure_parent(its_magic_readme)
|
|
168
|
+
shutil.copy2(root_readme, its_magic_readme)
|
|
169
|
+
return True
|
|
170
|
+
|
|
171
|
+
|
|
162
172
|
def read_runbook_key(runbook_path, key):
|
|
163
173
|
if not os.path.isfile(runbook_path):
|
|
164
174
|
return ""
|
|
@@ -550,6 +560,7 @@ def main():
|
|
|
550
560
|
continue
|
|
551
561
|
|
|
552
562
|
write_installed_version(target_root, version)
|
|
563
|
+
sync_root_readme_to_its_magic(target_root)
|
|
553
564
|
runbook_ok, runbook_notes = bootstrap_runbook_commands(target_root)
|
|
554
565
|
for note in runbook_notes:
|
|
555
566
|
print(note)
|
|
@@ -620,6 +631,7 @@ def main():
|
|
|
620
631
|
shutil.copy2(src, dst)
|
|
621
632
|
|
|
622
633
|
write_installed_version(target_root, version)
|
|
634
|
+
sync_root_readme_to_its_magic(target_root)
|
|
623
635
|
runbook_ok, runbook_notes = bootstrap_runbook_commands(target_root)
|
|
624
636
|
for note in runbook_notes:
|
|
625
637
|
print(note)
|
package/installer.sh
CHANGED
|
@@ -133,7 +133,7 @@ choose_mode() {
|
|
|
133
133
|
classify_file() {
|
|
134
134
|
rel="$1"
|
|
135
135
|
case "$rel" in
|
|
136
|
-
.cursor/scratchpad.md) echo "mixed" ;;
|
|
136
|
+
.cursor/scratchpad.md|README.md) echo "mixed" ;;
|
|
137
137
|
.cursor/commands/*|.cursor/rules/*|.cursor/agents/*|.cursor/skills/*) echo "framework" ;;
|
|
138
138
|
.cursor/hooks/*|.cursor/hooks.json|.cursor/scratchpad.local.example.md) echo "framework" ;;
|
|
139
139
|
.github/workflows/*|scripts/validate-and-push*|docs/engineering/context/*|its_magic/*) echo "framework" ;;
|
|
@@ -166,6 +166,15 @@ write_installed_version() {
|
|
|
166
166
|
[ -f "$legacy" ] && rm -f "$legacy"
|
|
167
167
|
}
|
|
168
168
|
|
|
169
|
+
sync_root_readme_to_its_magic() {
|
|
170
|
+
target_root="$1"
|
|
171
|
+
[ -f "$target_root/README.md" ] || return 1
|
|
172
|
+
dst="$target_root/its_magic/README.md"
|
|
173
|
+
ensure_parent "$dst"
|
|
174
|
+
cp -p "$target_root/README.md" "$dst"
|
|
175
|
+
return 0
|
|
176
|
+
}
|
|
177
|
+
|
|
169
178
|
read_runbook_key() {
|
|
170
179
|
runbook_path="$1"
|
|
171
180
|
key="$2"
|
|
@@ -505,6 +514,7 @@ if [ "$MODE" = "upgrade" ]; then
|
|
|
505
514
|
done
|
|
506
515
|
|
|
507
516
|
write_installed_version "$TARGET_ROOT" "$APP_VERSION"
|
|
517
|
+
sync_root_readme_to_its_magic "$TARGET_ROOT" || true
|
|
508
518
|
bootstrap_runbook_commands "$TARGET_ROOT"
|
|
509
519
|
[ -n "$BOOTSTRAP_NOTES" ] && printf "%s" "$BOOTSTRAP_NOTES"
|
|
510
520
|
[ "$BOOTSTRAP_OK" = "true" ] || exit 1
|
|
@@ -572,6 +582,7 @@ for rel in $FILES; do
|
|
|
572
582
|
done
|
|
573
583
|
|
|
574
584
|
write_installed_version "$TARGET_ROOT" "$APP_VERSION"
|
|
585
|
+
sync_root_readme_to_its_magic "$TARGET_ROOT" || true
|
|
575
586
|
bootstrap_runbook_commands "$TARGET_ROOT"
|
|
576
587
|
[ -n "$BOOTSTRAP_NOTES" ] && printf "%s" "$BOOTSTRAP_NOTES"
|
|
577
588
|
[ "$BOOTSTRAP_OK" = "true" ] || exit 1
|
package/package.json
CHANGED
|
@@ -76,3 +76,35 @@ Low-touch mode (`INTAKE_GUIDED_MODE=0`):
|
|
|
76
76
|
- Keep duplicate/overlap backlog check active as baseline safety.
|
|
77
77
|
- Keep single-story default unless user explicitly requests decomposition.
|
|
78
78
|
|
|
79
|
+
Mandatory intake question packs (`US-0068` / `DEC-0050`):
|
|
80
|
+
- Before persisting backlog/acceptance artifacts, select exactly one deterministic
|
|
81
|
+
question pack:
|
|
82
|
+
- `first-intake-pack` (first/new/broad intake)
|
|
83
|
+
- `small-intake-pack` (small follow-up intake)
|
|
84
|
+
- Required-topic coverage is mandatory before persistence unless assumptions are
|
|
85
|
+
explicitly confirmed by the user:
|
|
86
|
+
- `first-intake-pack` required topic IDs:
|
|
87
|
+
`users_problem`, `runtime_target_environment`, `language_framework_runtime`,
|
|
88
|
+
`architecture_preference`, `ui_design_expectations`,
|
|
89
|
+
`security_compliance`, `non_functional_priorities`, `scope_timeline`
|
|
90
|
+
- `small-intake-pack` required topic IDs:
|
|
91
|
+
`outcome_success_criteria`, `impacted_components`,
|
|
92
|
+
`constraints_compatibility_risks`, `required_tests_acceptance_checks`,
|
|
93
|
+
`done_definition`
|
|
94
|
+
- Deterministic pack selection guard:
|
|
95
|
+
- unknown/ambiguous stack or project cues must fail closed to
|
|
96
|
+
`first-intake-pack`.
|
|
97
|
+
- Deterministic fail-closed reason codes:
|
|
98
|
+
- `INTAKE_REQUIRED_TOPIC_MISSING`
|
|
99
|
+
- `INTAKE_REQUIRED_PACK_INCOMPLETE`
|
|
100
|
+
- `INTAKE_ASSUMPTION_CONFIRMATION_REQUIRED`
|
|
101
|
+
- `INTAKE_PERSISTENCE_BLOCKED`
|
|
102
|
+
- Remediation output on block must include:
|
|
103
|
+
- `missing_topics`
|
|
104
|
+
- targeted follow-up questions for unresolved required topics
|
|
105
|
+
- explicit request for assumption confirmation when assumptions are used
|
|
106
|
+
- Persist auditable intake evidence in artifact outputs:
|
|
107
|
+
- `asked_topics`
|
|
108
|
+
- `missing_topics`
|
|
109
|
+
- `assumptions_confirmed`
|
|
110
|
+
|
|
@@ -131,4 +131,55 @@ Release gate semantics (US-0039): mandatory gates (check-in test, QA, UAT) and n
|
|
|
131
131
|
fail fast with `REMOTE_CONNECTIVITY_CONFIG_INVALID`.
|
|
132
132
|
- Never expose secrets in execution outputs; only sanitized endpoint data and
|
|
133
133
|
env-reference names are allowed.
|
|
134
|
+
18. Runtime QA autopilot execution contract (US-0065 / DEC-0047):
|
|
135
|
+
- Treat runtime verification as mandatory for generated-project scope; static
|
|
136
|
+
checks alone are not sufficient evidence for PASS readiness.
|
|
137
|
+
- Follow canonical stage order:
|
|
138
|
+
`startup -> readiness/connectivity -> log scan -> bounded retry -> verdict`.
|
|
139
|
+
- Record runtime execution evidence in execute outputs:
|
|
140
|
+
- startup command and selected stack profile,
|
|
141
|
+
- runtime mode (`local|remote`) and endpoint/health snapshot,
|
|
142
|
+
- retry ledger (`attempt`, `delay_ms`, `outcome`),
|
|
143
|
+
- log severity summary (`info|warn|error|fatal` counts),
|
|
144
|
+
- final runtime verdict with deterministic reason code.
|
|
145
|
+
- Supported stack profiles (minimum): `node`, `python`, `go`, `java`, `dotnet`.
|
|
146
|
+
- If stack profile cannot be resolved deterministically, fail closed with
|
|
147
|
+
`RUNTIME_STACK_PROFILE_UNRESOLVED` and remediation guidance.
|
|
148
|
+
- Bounded retry policy:
|
|
149
|
+
- retries are allowed only for transient startup/connectivity failures,
|
|
150
|
+
- retry attempts must not exceed configured max,
|
|
151
|
+
- critical log signals are non-transient and fail closed immediately.
|
|
152
|
+
- Runtime failure reason-code baseline:
|
|
153
|
+
- `RUNTIME_STARTUP_FAILED`
|
|
154
|
+
- `RUNTIME_ENDPOINT_UNREACHABLE`
|
|
155
|
+
- `RUNTIME_LOG_CRITICAL_DETECTED`
|
|
156
|
+
- `RUNTIME_RETRY_BUDGET_EXHAUSTED`
|
|
157
|
+
- `RUNTIME_STACK_PROFILE_UNRESOLVED`
|
|
158
|
+
- When HTTP/UI context is detected, include webapp runtime evidence path for
|
|
159
|
+
QA handoff (browser-surface checks plus console/network error signals).
|
|
160
|
+
19. Generated baseline test scaffolding contract (US-0066 / DEC-0048):
|
|
161
|
+
- Resolve deterministic stack/project profile before scaffold generation:
|
|
162
|
+
`node|python|go|java|dotnet` (minimum supported set).
|
|
163
|
+
- Generate baseline tests only when missing; create minimal runnable assets for
|
|
164
|
+
unit, integration, and acceptance layers using stable paths.
|
|
165
|
+
- Record generated-test evidence in execute outputs:
|
|
166
|
+
- resolved stack profile,
|
|
167
|
+
- generated paths inventory (`unit|integration|acceptance`),
|
|
168
|
+
- scaffold command/actions and outcome.
|
|
169
|
+
- Deterministic runbook baseline wiring:
|
|
170
|
+
- if `TEST_COMMAND` is missing/unset, write stack baseline command,
|
|
171
|
+
- if `TEST_COMMAND` is user-authored and non-empty, preserve it.
|
|
172
|
+
- Fail-closed diagnostics for generation/profile failures:
|
|
173
|
+
- `TEST_SCAFFOLD_STACK_UNRESOLVED`
|
|
174
|
+
- `TEST_SCAFFOLD_UNSUPPORTED_STACK`
|
|
175
|
+
- `TEST_SCAFFOLD_GENERATION_FAILED`
|
|
176
|
+
- Non-destructive precedence is mandatory:
|
|
177
|
+
- preserve existing user-authored test files and config by default,
|
|
178
|
+
- fill only missing baseline scaffold assets.
|
|
179
|
+
- Rerun behavior must be idempotent:
|
|
180
|
+
- no duplicate scaffold files on repeated `/execute`,
|
|
181
|
+
- no oscillating `TEST_COMMAND` rewrites between runs.
|
|
182
|
+
- Runtime boundary:
|
|
183
|
+
- static generated-test PASS is necessary but not sufficient for QA PASS;
|
|
184
|
+
runtime startup/connectivity/log verdict remains governed by `US-0065`.
|
|
134
185
|
|
|
@@ -48,6 +48,41 @@ description: "its-magic intake: clarify idea and capture story + acceptance."
|
|
|
48
48
|
- external conflicting mutation during active run must fail safe with
|
|
49
49
|
`INTAKE_CONCURRENT_WRITER_DETECTED` and no partial overwrite.
|
|
50
50
|
|
|
51
|
+
## Mandatory intake question packs and fail-closed persistence gate (US-0068 / DEC-0050)
|
|
52
|
+
|
|
53
|
+
- Intake must apply one deterministic questionnaire pack before any backlog or
|
|
54
|
+
acceptance persistence:
|
|
55
|
+
- `first-intake-pack` for first/new/broad requests,
|
|
56
|
+
- `small-intake-pack` for narrow follow-up requests.
|
|
57
|
+
- Pack selection must be deterministic and auditable:
|
|
58
|
+
- evaluate request breadth (`new capability` vs `bounded refinement`),
|
|
59
|
+
- use known stack/runtime cues when present,
|
|
60
|
+
- unresolved/unknown stack cues must fail closed to `first-intake-pack`
|
|
61
|
+
(never bypass to a smaller pack by default).
|
|
62
|
+
- Required topic coverage must be complete before persistence unless bounded
|
|
63
|
+
assumptions are explicitly confirmed:
|
|
64
|
+
- `first-intake-pack` required topics:
|
|
65
|
+
`users_problem`, `runtime_target_environment`, `language_framework_runtime`,
|
|
66
|
+
`architecture_preference`, `ui_design_expectations`,
|
|
67
|
+
`security_compliance`, `non_functional_priorities`, `scope_timeline`.
|
|
68
|
+
- `small-intake-pack` required topics:
|
|
69
|
+
`outcome_success_criteria`, `impacted_components`,
|
|
70
|
+
`constraints_compatibility_risks`, `required_tests_acceptance_checks`,
|
|
71
|
+
`done_definition`.
|
|
72
|
+
- Fail-closed deterministic reason codes:
|
|
73
|
+
- `INTAKE_REQUIRED_TOPIC_MISSING`
|
|
74
|
+
- `INTAKE_REQUIRED_PACK_INCOMPLETE`
|
|
75
|
+
- `INTAKE_ASSUMPTION_CONFIRMATION_REQUIRED`
|
|
76
|
+
- `INTAKE_PERSISTENCE_BLOCKED`
|
|
77
|
+
- Remediation guidance surface (mandatory on block):
|
|
78
|
+
- list `missing_topics`,
|
|
79
|
+
- request targeted answers for missing required topics,
|
|
80
|
+
- if assumptions are used, require explicit confirmation before write.
|
|
81
|
+
- Persistence evidence contract (must be written in intake outputs):
|
|
82
|
+
- `asked_topics`
|
|
83
|
+
- `missing_topics`
|
|
84
|
+
- `assumptions_confirmed`
|
|
85
|
+
|
|
51
86
|
## Steps
|
|
52
87
|
1. Determine intake mode from `.cursor/scratchpad.md`:
|
|
53
88
|
- guided mode: `INTAKE_GUIDED_MODE=1` (default)
|
|
@@ -94,7 +129,18 @@ description: "its-magic intake: clarify idea and capture story + acceptance."
|
|
|
94
129
|
explicitly requests depth.
|
|
95
130
|
- Keep single-story default (no forced decomposition), unless the user
|
|
96
131
|
explicitly requests decomposition.
|
|
97
|
-
5.
|
|
132
|
+
5. Enforce mandatory question-pack coverage before persistence (US-0068):
|
|
133
|
+
- deterministically select one pack (`first-intake-pack` or
|
|
134
|
+
`small-intake-pack`) and record `selected_pack`.
|
|
135
|
+
- ask required questions for the selected pack; adaptive follow-ups remain
|
|
136
|
+
allowed but bounded.
|
|
137
|
+
- before writing backlog/acceptance artifacts, compute required coverage:
|
|
138
|
+
- if complete, proceed to persistence;
|
|
139
|
+
- if incomplete and no explicit assumption confirmation, fail closed with
|
|
140
|
+
deterministic reason code and remediation guidance.
|
|
141
|
+
- persist intake evidence fields (`asked_topics`, `missing_topics`,
|
|
142
|
+
`assumptions_confirmed`) in relevant intake artifacts.
|
|
143
|
+
6. Optional fresh-project ID namespace bootstrap (US-0052 / DEC-0034):
|
|
98
144
|
- Read `ID_NAMESPACE_BOOTSTRAP` from `.cursor/scratchpad.md` (`0|1`,
|
|
99
145
|
default `0`).
|
|
100
146
|
- Freshness eligibility is deterministic and auditable:
|
|
@@ -109,31 +155,31 @@ description: "its-magic intake: clarify idea and capture story + acceptance."
|
|
|
109
155
|
- Never rewrite or renumber historical IDs.
|
|
110
156
|
- If bootstrap was requested but checks fail, emit deterministic diagnostic:
|
|
111
157
|
`ID_BOOTSTRAP_NOT_FRESH` with brief remediation guidance.
|
|
112
|
-
|
|
158
|
+
7. Traceability persistence contract (US-0051):
|
|
113
159
|
- `docs/product/backlog.md`: include decomposition evidence (single-story vs
|
|
114
160
|
split decision, rationale, and boundaries).
|
|
115
161
|
- `docs/product/acceptance.md`: maintain acceptance traceability for resulting
|
|
116
162
|
story set (or single-story decision) with clear scope boundaries.
|
|
117
163
|
- `handoffs/po_to_tl.md`: include split decision summary and adaptive
|
|
118
164
|
questioning evidence (risk/unknown triggers and key assumptions).
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
165
|
+
8. Persist the story and acceptance in product docs.
|
|
166
|
+
9. Write a PO -> TL handoff with scope and risks.
|
|
167
|
+
10. Optional cross-repo observability declaration (US-0034):
|
|
122
168
|
- If `CROSS_REPO_OBSERVABILITY=0`, add zero required overhead.
|
|
123
169
|
- If `CROSS_REPO_OBSERVABILITY=1`, capture monitored source list from
|
|
124
170
|
`COMPATIBILITY_SOURCES` (`repo/module/contract/docs`) and include
|
|
125
171
|
compatibility observability intent in handoff context.
|
|
126
|
-
|
|
172
|
+
11. Optional component scope declaration (US-0035):
|
|
127
173
|
- If `COMPONENT_SCOPE_MODE=0`, add zero required scope overhead.
|
|
128
174
|
- If `COMPONENT_SCOPE_MODE=1`, declare in-scope and out-of-scope components
|
|
129
175
|
in `docs/engineering/component-scope.md` and include references in
|
|
130
176
|
`handoffs/po_to_tl.md`.
|
|
131
|
-
|
|
177
|
+
12. Optional spec-pack (US-0031):
|
|
132
178
|
- If `SPEC_PACK_MODE=0`, add no required spec-pack steps (zero overhead).
|
|
133
179
|
- If `SPEC_PACK_MODE=1`, ensure CRS artifact for the new story is created or
|
|
134
180
|
updated at canonical path per runbook spec-pack contract; link story ID in
|
|
135
181
|
handoff.
|
|
136
|
-
|
|
182
|
+
13. Optional user-guide (US-0032):
|
|
137
183
|
- If `USER_GUIDE_MODE=0`, add no required user-guide steps or blocking checks (zero overhead).
|
|
138
184
|
- If `USER_GUIDE_MODE=1`, ensure handoff references canonical user-guide path
|
|
139
185
|
`docs/user-guides/US-xxxx.md` for the new story when applicable; see runbook.
|
|
@@ -108,4 +108,67 @@ verify no unresolved blockers.
|
|
|
108
108
|
- If remote connectivity config is incomplete for required remote checks,
|
|
109
109
|
mark blocking with deterministic reason code
|
|
110
110
|
`REMOTE_CONNECTIVITY_CONFIG_INVALID`.
|
|
111
|
+
13. Runtime QA autopilot contract (US-0065 / DEC-0047):
|
|
112
|
+
- Runtime truth path is mandatory for generated-project QA:
|
|
113
|
+
`startup -> readiness/connectivity -> log scan -> bounded retry -> verdict`.
|
|
114
|
+
- PASS requires runtime startup and endpoint/process reachability evidence.
|
|
115
|
+
- Deterministic failure outcomes:
|
|
116
|
+
- startup command/process fails: `RUNTIME_STARTUP_FAILED`
|
|
117
|
+
- endpoint/process unreachable after retries:
|
|
118
|
+
`RUNTIME_ENDPOINT_UNREACHABLE`
|
|
119
|
+
- critical runtime log signals detected:
|
|
120
|
+
`RUNTIME_LOG_CRITICAL_DETECTED`
|
|
121
|
+
- retry budget exhausted without recovery:
|
|
122
|
+
`RUNTIME_RETRY_BUDGET_EXHAUSTED`
|
|
123
|
+
- stack profile unresolved for runtime checks:
|
|
124
|
+
`RUNTIME_STACK_PROFILE_UNRESOLVED`
|
|
125
|
+
- Runtime profile resolution must be stack-aware for:
|
|
126
|
+
`node|python|go|java|dotnet` at minimum.
|
|
127
|
+
- Unknown/ambiguous stacks must fail closed with
|
|
128
|
+
`RUNTIME_STACK_PROFILE_UNRESOLVED` (no silent generic PASS fallback).
|
|
129
|
+
- Bounded retry loop requirements:
|
|
130
|
+
- retry only transient startup/connectivity failures,
|
|
131
|
+
- enforce configured attempt cap (`attempt <= max`),
|
|
132
|
+
- write per-attempt ledger evidence (`attempt`, `delay_ms`, `outcome`),
|
|
133
|
+
- stop retrying on non-transient critical log failures.
|
|
134
|
+
- Required QA runtime evidence schema fields in `sprints/Sxxxx/qa-findings.md`:
|
|
135
|
+
- `runtime_startup_command`
|
|
136
|
+
- `runtime_stack_profile`
|
|
137
|
+
- `runtime_mode` (`local|remote`)
|
|
138
|
+
- `runtime_health_target` (process/endpoint)
|
|
139
|
+
- `runtime_health_result`
|
|
140
|
+
- `runtime_log_summary` (severity counts + key signals)
|
|
141
|
+
- `runtime_retry_count`
|
|
142
|
+
- `runtime_retry_ledger`
|
|
143
|
+
- `runtime_final_verdict` (`pass|fail`)
|
|
144
|
+
- `runtime_reason_code`
|
|
145
|
+
- `runtime_evidence_refs`
|
|
146
|
+
- Webapp runtime verification path (when applicable):
|
|
147
|
+
- run browser-surface check for expected app load path,
|
|
148
|
+
- capture console error summary and failed network request summary,
|
|
149
|
+
- include results in runtime evidence fields.
|
|
150
|
+
- Optional debug escalation path:
|
|
151
|
+
- use only for reproducible runtime failures,
|
|
152
|
+
- keep instrumentation bounded and reversible,
|
|
153
|
+
- record debug actions/evidence and cleanup confirmation.
|
|
154
|
+
14. Generated baseline test auto-run contract (US-0066 / DEC-0048):
|
|
155
|
+
- For generated-project QA scope, run baseline tests automatically using the
|
|
156
|
+
resolved `TEST_COMMAND`; do not treat baseline tests as optional.
|
|
157
|
+
- Deterministic generated-test evidence fields in `sprints/Sxxxx/qa-findings.md`:
|
|
158
|
+
- `generated_test_stack_profile`
|
|
159
|
+
- `generated_test_command`
|
|
160
|
+
- `generated_test_result` (`pass|fail`)
|
|
161
|
+
- `generated_test_output_ref`
|
|
162
|
+
- `generated_test_paths_ref`
|
|
163
|
+
- `generated_test_reason_code`
|
|
164
|
+
- Deterministic scaffold failure outcomes:
|
|
165
|
+
- unresolved profile: `TEST_SCAFFOLD_STACK_UNRESOLVED`
|
|
166
|
+
- unsupported profile: `TEST_SCAFFOLD_UNSUPPORTED_STACK`
|
|
167
|
+
- generation/run failure: `TEST_SCAFFOLD_GENERATION_FAILED`
|
|
168
|
+
- Non-destructive baseline guardrails:
|
|
169
|
+
- preserve user-authored tests/config/commands,
|
|
170
|
+
- validate generated scaffold behavior as fill-missing/idempotent only.
|
|
171
|
+
- Runtime integration boundary:
|
|
172
|
+
- generated-test PASS does not override runtime-autopilot failures from
|
|
173
|
+
`US-0065`; non-starting apps cannot PASS QA.
|
|
111
174
|
|
|
@@ -96,6 +96,11 @@ Optional runbook keys (`LINT_COMMAND`, `TYPECHECK_COMMAND`) are not mandatory re
|
|
|
96
96
|
|
|
97
97
|
Default: no bypass. Override only via explicit decision gate with documented rationale and evidence (see Override evidence contract below).
|
|
98
98
|
|
|
99
|
+
## No-bypass default (US-0039)
|
|
100
|
+
|
|
101
|
+
Release gates are mandatory by default. Bypass is not allowed unless an
|
|
102
|
+
explicit decision gate is approved and evidence is recorded.
|
|
103
|
+
|
|
99
104
|
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`.
|
|
100
105
|
|
|
101
106
|
## QA completion evidence gate (US-0039)
|
|
@@ -106,6 +111,23 @@ Release may not proceed until QA completion evidence shows no unresolved blockin
|
|
|
106
111
|
- **Pass condition**: No unresolved blocking or critical findings; QA phase has been run and findings recorded.
|
|
107
112
|
- **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`.
|
|
108
113
|
|
|
114
|
+
## Generated-test evidence prerequisite (US-0066 / DEC-0048)
|
|
115
|
+
|
|
116
|
+
For generated-project scope, release evidence must include deterministic
|
|
117
|
+
generated-test auto-run references:
|
|
118
|
+
|
|
119
|
+
- **Execution evidence source**: `sprints/Sxxxx/summary.md` generated baseline
|
|
120
|
+
test section (stack profile, generated paths, scaffold actions).
|
|
121
|
+
- **QA evidence source**: `sprints/Sxxxx/qa-findings.md` generated-test auto-run
|
|
122
|
+
fields (`generated_test_command`, `generated_test_result`,
|
|
123
|
+
`generated_test_output_ref`, `generated_test_paths_ref`,
|
|
124
|
+
`generated_test_reason_code`).
|
|
125
|
+
- **Pass condition**: generated-test evidence exists, is traceable, and does not
|
|
126
|
+
contradict QA/runtime verdicts.
|
|
127
|
+
- **Fail condition**: missing/ambiguous generated-test evidence or unresolved
|
|
128
|
+
scaffold failure reason code; block release with
|
|
129
|
+
`TEST_SCAFFOLD_GENERATION_FAILED` and rerun `/execute` and/or `/qa`.
|
|
130
|
+
|
|
109
131
|
## UAT completion gate (US-0039)
|
|
110
132
|
|
|
111
133
|
Release may not proceed until UAT artifacts are in verified state (no placeholder, incomplete, or unresolved-fail).
|
|
@@ -335,6 +357,37 @@ Guardrails:
|
|
|
335
357
|
and local vs remote execution context.
|
|
336
358
|
- In release output/handoffs, include operator connection guidance
|
|
337
359
|
(where hosted, how to connect) without exposing secrets.
|
|
360
|
+
18. Release operator Run/Connect/Verify hints contract (US-0067 / DEC-0049):
|
|
361
|
+
- `handoffs/releases/Sxxxx-release-notes.md` must include a deterministic
|
|
362
|
+
operator section order and required fields:
|
|
363
|
+
1) `## Run`:
|
|
364
|
+
- `start_command`
|
|
365
|
+
- `runtime_mode` (`local|remote`)
|
|
366
|
+
- `runtime_context_ref` (link to `docs/engineering/runtime-connectivity.md`
|
|
367
|
+
when available)
|
|
368
|
+
2) `## Connect`:
|
|
369
|
+
- `service_url`
|
|
370
|
+
- `service_port`
|
|
371
|
+
- `health_endpoint`
|
|
372
|
+
3) `## Verify`:
|
|
373
|
+
- `verification_steps` (deterministic numbered list)
|
|
374
|
+
- `expected_health_signal`
|
|
375
|
+
4) `## Credentials`:
|
|
376
|
+
- env-reference-only credential source refs (for example `API_TOKEN_ENV`)
|
|
377
|
+
- expected value source location guidance (for example CI secret store,
|
|
378
|
+
operator shell profile) with no inline secret values
|
|
379
|
+
5) `## Known Issues`:
|
|
380
|
+
- concise deterministic known issues list, or explicit `None`.
|
|
381
|
+
- `handoffs/release_notes.md` must include a concise latest release operator
|
|
382
|
+
summary (start command + endpoint + verify pointer) and link to canonical
|
|
383
|
+
sprint notes.
|
|
384
|
+
- Fail closed when required operator hints are missing/ambiguous or contain
|
|
385
|
+
inline secrets:
|
|
386
|
+
- `RELEASE_OPERATOR_HINTS_MISSING`
|
|
387
|
+
- `RELEASE_OPERATOR_HINTS_AMBIGUOUS`
|
|
388
|
+
- `RELEASE_OPERATOR_HINTS_SECRET_EXPOSURE`
|
|
389
|
+
- Remediation: populate required fields in canonical sprint notes with
|
|
390
|
+
sanitized env-ref-only credential guidance, then rerun `/release`.
|
|
338
391
|
|
|
339
392
|
## Fail-safe reason codes and remediation guidance
|
|
340
393
|
|
|
@@ -373,8 +426,14 @@ Required deterministic reason codes:
|
|
|
373
426
|
- `PUBLISH_TARGET_EXECUTION_FAILED`
|
|
374
427
|
- `REMOTE_CONNECTIVITY_CONFIG_INVALID`
|
|
375
428
|
- `RUNTIME_CONNECTIVITY_DOC_WRITE_FAILED`
|
|
429
|
+
- `RELEASE_OPERATOR_HINTS_MISSING`
|
|
430
|
+
- `RELEASE_OPERATOR_HINTS_AMBIGUOUS`
|
|
431
|
+
- `RELEASE_OPERATOR_HINTS_SECRET_EXPOSURE`
|
|
376
432
|
- `PHASE_OWNERSHIP_VIOLATION`
|
|
377
433
|
- `PHASE_OVERRIDE_EVIDENCE_MISSING`
|
|
434
|
+
- `TEST_SCAFFOLD_STACK_UNRESOLVED`
|
|
435
|
+
- `TEST_SCAFFOLD_UNSUPPORTED_STACK`
|
|
436
|
+
- `TEST_SCAFFOLD_GENERATION_FAILED`
|
|
378
437
|
|
|
379
438
|
When any reason code is emitted:
|
|
380
439
|
- Preserve existing release note artifacts (non-destructive default).
|
|
@@ -82,6 +82,18 @@ Fail-closed behavior (no continuation):
|
|
|
82
82
|
Remediation: rerun affected phase(s) in fresh subagent contexts and write new
|
|
83
83
|
strict-proof tuples linked to checkpoint evidence.
|
|
84
84
|
|
|
85
|
+
## Generated-test readiness evidence gate (US-0066 / DEC-0048)
|
|
86
|
+
|
|
87
|
+
Before handing off to `/release`, verify generated-test evidence is present and
|
|
88
|
+
traceable for generated-project scope:
|
|
89
|
+
|
|
90
|
+
- `sprints/Sxxxx/summary.md` must include generated baseline test scope/evidence refs.
|
|
91
|
+
- `sprints/Sxxxx/qa-findings.md` must include generated-test auto-run evidence
|
|
92
|
+
(`command`, `result`, `output ref`, `paths ref`, reason code when failing).
|
|
93
|
+
- If generated-test evidence is missing/ambiguous, fail closed with
|
|
94
|
+
`TEST_SCAFFOLD_GENERATION_FAILED` and require `/execute` or `/qa` rerun with
|
|
95
|
+
deterministic evidence capture.
|
|
96
|
+
|
|
85
97
|
## Steps
|
|
86
98
|
1. Convert acceptance criteria into testable UAT steps. Derive steps directly from the story's acceptance criteria in `docs/product/acceptance.md`. Each AC should map to at least one UAT step.
|
|
87
99
|
2. Populate UAT artifacts: write derived steps into `uat.json` (with description and result per step, accurate pass/fail counts) and `uat.md` (step list with results, summary section). Ensure UAT artifacts are in **populated** state per DEC-0009 — not placeholder.
|
|
@@ -80,6 +80,16 @@ globs: ["**/*"]
|
|
|
80
80
|
- Default behavior is strict no-bypass for release gates.
|
|
81
81
|
- Overrides require explicit decision evidence with rationale and risk
|
|
82
82
|
acceptance.
|
|
83
|
+
- Release operator hints contract (US-0067 / DEC-0049):
|
|
84
|
+
- `/release` output must include deterministic sections:
|
|
85
|
+
`Run -> Connect -> Verify -> Credentials -> Known Issues`.
|
|
86
|
+
- Required fields include start command, runtime mode/context ref, endpoint +
|
|
87
|
+
port + health endpoint, verification steps, credentials source refs
|
|
88
|
+
(env-ref-only), and known issues.
|
|
89
|
+
- Missing/ambiguous fields or inline secrets fail closed with
|
|
90
|
+
`RELEASE_OPERATOR_HINTS_MISSING`,
|
|
91
|
+
`RELEASE_OPERATOR_HINTS_AMBIGUOUS`, or
|
|
92
|
+
`RELEASE_OPERATOR_HINTS_SECRET_EXPOSURE`.
|
|
83
93
|
- Cross-phase artifact ownership guard (US-0061 / DEC-0043):
|
|
84
94
|
- All delivery phases must enforce
|
|
85
95
|
`docs/engineering/artifact-ownership-policy.md` before mutating artifacts.
|
|
@@ -32,4 +32,11 @@ globs: ["**/*"]
|
|
|
32
32
|
`[REMOTE_CONFIG_ERROR] <path>: expected <rule>, got <actual>. Fix: <hint>.`
|
|
33
33
|
Include all of: failing path, expected rule/range, actual value or type, and
|
|
34
34
|
a concrete remediation hint.
|
|
35
|
+
- Runtime QA autopilot failures (US-0065) must use deterministic reason codes
|
|
36
|
+
and evidence:
|
|
37
|
+
`RUNTIME_STARTUP_FAILED`, `RUNTIME_ENDPOINT_UNREACHABLE`,
|
|
38
|
+
`RUNTIME_LOG_CRITICAL_DETECTED`, `RUNTIME_RETRY_BUDGET_EXHAUSTED`,
|
|
39
|
+
`RUNTIME_STACK_PROFILE_UNRESOLVED`.
|
|
40
|
+
Include startup command/profile, runtime mode, health result, retry ledger,
|
|
41
|
+
and log summary in QA artifacts.
|
|
35
42
|
|
package/template/README.md
CHANGED
|
@@ -225,6 +225,37 @@ Intake runtime safety behavior (US-0059):
|
|
|
225
225
|
writers; true conflicting external writes fail safe with
|
|
226
226
|
`INTAKE_CONCURRENT_WRITER_DETECTED`.
|
|
227
227
|
|
|
228
|
+
Runtime QA autopilot behavior (US-0065):
|
|
229
|
+
- Generated-project QA must include runtime proof chain:
|
|
230
|
+
`startup -> readiness/connectivity -> log scan -> bounded retry -> verdict`.
|
|
231
|
+
- Deterministic runtime fail codes:
|
|
232
|
+
`RUNTIME_STARTUP_FAILED`, `RUNTIME_ENDPOINT_UNREACHABLE`,
|
|
233
|
+
`RUNTIME_LOG_CRITICAL_DETECTED`, `RUNTIME_RETRY_BUDGET_EXHAUSTED`,
|
|
234
|
+
`RUNTIME_STACK_PROFILE_UNRESOLVED`.
|
|
235
|
+
- Runtime evidence must include startup command/profile, runtime mode
|
|
236
|
+
(`local|remote`), health result, retry ledger, and log severity summary.
|
|
237
|
+
- Stack-aware runtime profile resolution is required for Node/Python/Go/Java/.NET;
|
|
238
|
+
unresolved stacks fail closed (no generic silent PASS fallback).
|
|
239
|
+
- For webapp contexts, QA includes browser-surface verification with
|
|
240
|
+
console/network error signals.
|
|
241
|
+
|
|
242
|
+
Generated test scaffolding + auto-run behavior (US-0066):
|
|
243
|
+
- `/execute` resolves stack profile (`node|python|go|java|dotnet`) and generates
|
|
244
|
+
missing baseline unit/integration/acceptance tests only.
|
|
245
|
+
- Generation is non-destructive by default: preserve user-authored tests/config,
|
|
246
|
+
fill only missing baseline assets, keep reruns idempotent.
|
|
247
|
+
- `TEST_COMMAND` wiring is deterministic:
|
|
248
|
+
- preserve existing non-empty user command,
|
|
249
|
+
- set stack baseline only when command is missing/unset.
|
|
250
|
+
- `/qa` automatically runs the generated baseline tests and records deterministic
|
|
251
|
+
evidence (`command`, `result`, `output ref`, `generated paths ref`).
|
|
252
|
+
- Fail-closed scaffold diagnostics:
|
|
253
|
+
`TEST_SCAFFOLD_STACK_UNRESOLVED`,
|
|
254
|
+
`TEST_SCAFFOLD_UNSUPPORTED_STACK`,
|
|
255
|
+
`TEST_SCAFFOLD_GENERATION_FAILED`.
|
|
256
|
+
- Static baseline test pass does not bypass runtime autopilot; runtime verdict
|
|
257
|
+
remains mandatory for QA PASS.
|
|
258
|
+
|
|
228
259
|
## Workflow
|
|
229
260
|
|
|
230
261
|
### Core commands
|
|
@@ -277,6 +308,34 @@ broad/high-risk requests:
|
|
|
277
308
|
(`docs/product/backlog.md`, `docs/product/acceptance.md`,
|
|
278
309
|
`handoffs/po_to_tl.md`)
|
|
279
310
|
|
|
311
|
+
### Mandatory intake question packs (US-0068)
|
|
312
|
+
|
|
313
|
+
`/intake` now enforces deterministic minimum questionnaire packs before
|
|
314
|
+
backlog/acceptance persistence:
|
|
315
|
+
|
|
316
|
+
- `first-intake-pack` for first/new/broad requests
|
|
317
|
+
- `small-intake-pack` for narrow follow-up requests
|
|
318
|
+
|
|
319
|
+
Fail-closed coverage behavior:
|
|
320
|
+
|
|
321
|
+
- required topic answers must be covered for the selected pack before write
|
|
322
|
+
- unknown/ambiguous stack cues fail closed to `first-intake-pack`
|
|
323
|
+
- persistence blocks with deterministic reason codes when required coverage is
|
|
324
|
+
incomplete and assumptions are not explicitly confirmed
|
|
325
|
+
|
|
326
|
+
Deterministic reason codes:
|
|
327
|
+
|
|
328
|
+
- `INTAKE_REQUIRED_TOPIC_MISSING`
|
|
329
|
+
- `INTAKE_REQUIRED_PACK_INCOMPLETE`
|
|
330
|
+
- `INTAKE_ASSUMPTION_CONFIRMATION_REQUIRED`
|
|
331
|
+
- `INTAKE_PERSISTENCE_BLOCKED`
|
|
332
|
+
|
|
333
|
+
Intake artifacts must persist coverage evidence fields:
|
|
334
|
+
|
|
335
|
+
- `asked_topics`
|
|
336
|
+
- `missing_topics`
|
|
337
|
+
- `assumptions_confirmed`
|
|
338
|
+
|
|
280
339
|
### Optional ID namespace bootstrap (US-0052)
|
|
281
340
|
|
|
282
341
|
Fresh-project ID bootstrap behavior is explicit and default-off:
|
|
@@ -101,6 +101,60 @@ decomposition and adaptive questioning behavior:
|
|
|
101
101
|
`docs/product/backlog.md`, `docs/product/acceptance.md`, and
|
|
102
102
|
`handoffs/po_to_tl.md`.
|
|
103
103
|
|
|
104
|
+
## Mandatory intake question packs and persistence coverage gate (US-0068 / DEC-0050)
|
|
105
|
+
|
|
106
|
+
Intake persistence is fail-closed unless required topic coverage is complete (or
|
|
107
|
+
bounded assumptions are explicitly confirmed).
|
|
108
|
+
|
|
109
|
+
Deterministic pack contract:
|
|
110
|
+
|
|
111
|
+
- `first-intake-pack` (first/new/broad intake)
|
|
112
|
+
- required topics:
|
|
113
|
+
- `users_problem`
|
|
114
|
+
- `runtime_target_environment`
|
|
115
|
+
- `language_framework_runtime`
|
|
116
|
+
- `architecture_preference`
|
|
117
|
+
- `ui_design_expectations`
|
|
118
|
+
- `security_compliance`
|
|
119
|
+
- `non_functional_priorities`
|
|
120
|
+
- `scope_timeline`
|
|
121
|
+
- `small-intake-pack` (small follow-up intake)
|
|
122
|
+
- required topics:
|
|
123
|
+
- `outcome_success_criteria`
|
|
124
|
+
- `impacted_components`
|
|
125
|
+
- `constraints_compatibility_risks`
|
|
126
|
+
- `required_tests_acceptance_checks`
|
|
127
|
+
- `done_definition`
|
|
128
|
+
|
|
129
|
+
Pack selection and coverage behavior:
|
|
130
|
+
|
|
131
|
+
- Select exactly one pack per intake write path.
|
|
132
|
+
- Unknown/ambiguous stack or project cues must fail closed to
|
|
133
|
+
`first-intake-pack`.
|
|
134
|
+
- Required coverage must be evaluated before writing
|
|
135
|
+
`docs/product/backlog.md` or `docs/product/acceptance.md`.
|
|
136
|
+
- Incomplete required coverage blocks persistence unless assumptions are
|
|
137
|
+
explicitly confirmed.
|
|
138
|
+
|
|
139
|
+
Deterministic fail-closed reason codes:
|
|
140
|
+
|
|
141
|
+
- `INTAKE_REQUIRED_TOPIC_MISSING`
|
|
142
|
+
- `INTAKE_REQUIRED_PACK_INCOMPLETE`
|
|
143
|
+
- `INTAKE_ASSUMPTION_CONFIRMATION_REQUIRED`
|
|
144
|
+
- `INTAKE_PERSISTENCE_BLOCKED`
|
|
145
|
+
|
|
146
|
+
Required remediation output on block:
|
|
147
|
+
|
|
148
|
+
- include `missing_topics`
|
|
149
|
+
- provide targeted follow-up prompts for missing required topics
|
|
150
|
+
- request explicit assumption confirmation when assumptions are used
|
|
151
|
+
|
|
152
|
+
Required persisted intake evidence fields:
|
|
153
|
+
|
|
154
|
+
- `asked_topics`
|
|
155
|
+
- `missing_topics`
|
|
156
|
+
- `assumptions_confirmed`
|
|
157
|
+
|
|
104
158
|
## Optional ID namespace bootstrap (US-0052)
|
|
105
159
|
|
|
106
160
|
Fresh-project ID bootstrap is optional and default-off in
|
|
@@ -216,6 +270,34 @@ Safety contract:
|
|
|
216
270
|
- Canonical operator endpoint summary is written to
|
|
217
271
|
`docs/engineering/runtime-connectivity.md` with sanitized values only.
|
|
218
272
|
|
|
273
|
+
## Release operator hints contract (US-0067 / DEC-0049)
|
|
274
|
+
|
|
275
|
+
Release outputs must include deterministic operator-ready hints with mandatory
|
|
276
|
+
section order:
|
|
277
|
+
|
|
278
|
+
`Run -> Connect -> Verify -> Credentials -> Known Issues`
|
|
279
|
+
|
|
280
|
+
Required fields for canonical sprint notes
|
|
281
|
+
(`handoffs/releases/Sxxxx-release-notes.md`):
|
|
282
|
+
|
|
283
|
+
- `Run`: `start_command`, `runtime_mode`, `runtime_context_ref`
|
|
284
|
+
- `Connect`: `service_url`, `service_port`, `health_endpoint`
|
|
285
|
+
- `Verify`: deterministic `verification_steps`, `expected_health_signal`
|
|
286
|
+
- `Credentials`: env-reference-only source refs and expected value-source
|
|
287
|
+
location guidance (never inline secrets)
|
|
288
|
+
- `Known Issues`: concise issue list or explicit `None`
|
|
289
|
+
|
|
290
|
+
Legacy pointer contract (`handoffs/release_notes.md`):
|
|
291
|
+
|
|
292
|
+
- keep concise latest run/connect/verify summary only
|
|
293
|
+
- always link to canonical sprint-scoped release notes for full details
|
|
294
|
+
|
|
295
|
+
Fail-closed reason codes:
|
|
296
|
+
|
|
297
|
+
- `RELEASE_OPERATOR_HINTS_MISSING`
|
|
298
|
+
- `RELEASE_OPERATOR_HINTS_AMBIGUOUS`
|
|
299
|
+
- `RELEASE_OPERATOR_HINTS_SECRET_EXPOSURE`
|
|
300
|
+
|
|
219
301
|
## Deterministic status reconciliation mode (US-0055 / DEC-0037)
|
|
220
302
|
|
|
221
303
|
Use the dedicated reconciliation command to normalize status drift across
|
|
@@ -474,6 +556,107 @@ Operator troubleshooting:
|
|
|
474
556
|
- Replace with env-var reference fields (`tokenEnv`, `passwordEnv`,
|
|
475
557
|
`privateKeyPathEnv`, ...).
|
|
476
558
|
|
|
559
|
+
## Runtime QA autopilot contract (US-0065 / DEC-0047)
|
|
560
|
+
|
|
561
|
+
Generated-project validation requires runtime proof, not static checks alone.
|
|
562
|
+
|
|
563
|
+
Mandatory runtime stage order:
|
|
564
|
+
|
|
565
|
+
`startup -> readiness/connectivity -> log scan -> bounded retry -> verdict`
|
|
566
|
+
|
|
567
|
+
Deterministic runtime failure reason codes:
|
|
568
|
+
|
|
569
|
+
- `RUNTIME_STARTUP_FAILED`
|
|
570
|
+
- `RUNTIME_ENDPOINT_UNREACHABLE`
|
|
571
|
+
- `RUNTIME_LOG_CRITICAL_DETECTED`
|
|
572
|
+
- `RUNTIME_RETRY_BUDGET_EXHAUSTED`
|
|
573
|
+
- `RUNTIME_STACK_PROFILE_UNRESOLVED`
|
|
574
|
+
|
|
575
|
+
Runtime evidence schema (record in QA findings):
|
|
576
|
+
|
|
577
|
+
- `runtime_startup_command`
|
|
578
|
+
- `runtime_stack_profile` (`node|python|go|java|dotnet`)
|
|
579
|
+
- `runtime_mode` (`local|remote`)
|
|
580
|
+
- `runtime_health_target`
|
|
581
|
+
- `runtime_health_result`
|
|
582
|
+
- `runtime_log_summary` (severity counts and key error signals)
|
|
583
|
+
- `runtime_retry_count`
|
|
584
|
+
- `runtime_retry_ledger` (`attempt`, `delay_ms`, `outcome`)
|
|
585
|
+
- `runtime_final_verdict`
|
|
586
|
+
- `runtime_reason_code`
|
|
587
|
+
- `runtime_evidence_refs`
|
|
588
|
+
|
|
589
|
+
Bounded retry policy:
|
|
590
|
+
|
|
591
|
+
- retry only transient startup/connectivity failures
|
|
592
|
+
- enforce configured max-attempt cap (`attempt <= max`)
|
|
593
|
+
- fail fast on non-transient critical runtime log signals
|
|
594
|
+
|
|
595
|
+
Stack/profile resolution:
|
|
596
|
+
|
|
597
|
+
- Minimum supported runtime profiles: Node, Python, Go, Java, .NET.
|
|
598
|
+
- Unknown or ambiguous profile must fail closed with
|
|
599
|
+
`RUNTIME_STACK_PROFILE_UNRESOLVED`.
|
|
600
|
+
|
|
601
|
+
Webapp verification path (when applicable):
|
|
602
|
+
|
|
603
|
+
- include browser-surface load validation
|
|
604
|
+
- capture console error summary and failed network request summary
|
|
605
|
+
- add these signals to `runtime_log_summary` and evidence refs
|
|
606
|
+
|
|
607
|
+
Optional debug escalation (bounded):
|
|
608
|
+
|
|
609
|
+
- use for reproducible runtime failures only
|
|
610
|
+
- keep instrumentation bounded and reversible
|
|
611
|
+
- record applied debug steps and explicit cleanup confirmation
|
|
612
|
+
|
|
613
|
+
## Generated test scaffolding + auto-run contract (US-0066 / DEC-0048)
|
|
614
|
+
|
|
615
|
+
Generated app projects require deterministic baseline test scaffolding and
|
|
616
|
+
automatic QA test execution evidence.
|
|
617
|
+
|
|
618
|
+
Detection/profile contract:
|
|
619
|
+
|
|
620
|
+
- Resolve one deterministic stack profile from:
|
|
621
|
+
`node|python|go|java|dotnet` (minimum supported).
|
|
622
|
+
- If profile cannot be resolved, fail closed with
|
|
623
|
+
`TEST_SCAFFOLD_STACK_UNRESOLVED`.
|
|
624
|
+
- If detected stack is outside supported baseline set, fail closed with
|
|
625
|
+
`TEST_SCAFFOLD_UNSUPPORTED_STACK`.
|
|
626
|
+
|
|
627
|
+
Generation contract (`/execute`):
|
|
628
|
+
|
|
629
|
+
- Generate only missing baseline assets for:
|
|
630
|
+
- unit tests
|
|
631
|
+
- integration tests
|
|
632
|
+
- acceptance tests
|
|
633
|
+
- Use stable scaffold paths so reruns are idempotent (no duplicate file churn).
|
|
634
|
+
- Record generated paths and actions in execution evidence.
|
|
635
|
+
- If generation fails, fail closed with `TEST_SCAFFOLD_GENERATION_FAILED`.
|
|
636
|
+
|
|
637
|
+
Runbook command wiring:
|
|
638
|
+
|
|
639
|
+
- `TEST_COMMAND` baseline is stack-aware and deterministic.
|
|
640
|
+
- Non-destructive precedence is mandatory:
|
|
641
|
+
- preserve user-authored non-empty `TEST_COMMAND`,
|
|
642
|
+
- write baseline command only when `TEST_COMMAND` is missing/unset.
|
|
643
|
+
|
|
644
|
+
QA auto-run evidence contract (`/qa`):
|
|
645
|
+
|
|
646
|
+
- Execute generated baseline tests automatically.
|
|
647
|
+
- Record evidence fields:
|
|
648
|
+
- `generated_test_stack_profile`
|
|
649
|
+
- `generated_test_command`
|
|
650
|
+
- `generated_test_result`
|
|
651
|
+
- `generated_test_output_ref`
|
|
652
|
+
- `generated_test_paths_ref`
|
|
653
|
+
- `generated_test_reason_code`
|
|
654
|
+
|
|
655
|
+
Runtime boundary with US-0065:
|
|
656
|
+
|
|
657
|
+
- Generated static test PASS is required but never sufficient for QA PASS.
|
|
658
|
+
- Runtime-autopilot verdict remains mandatory; non-starting apps cannot PASS QA.
|
|
659
|
+
|
|
477
660
|
## Auto continuation resume contract
|
|
478
661
|
|
|
479
662
|
`/auto` continuation uses deterministic phase resolution (DEC-0017):
|
|
@@ -23,6 +23,19 @@ Canonical queue state now lives under:
|
|
|
23
23
|
Check `handoffs/release_queue.md` for all pending entries where `status=unreleased`
|
|
24
24
|
or `status=blocked` before finalization.
|
|
25
25
|
|
|
26
|
+
## Latest operator summary (Run/Connect/Verify)
|
|
27
|
+
|
|
28
|
+
- **Start command:** Refer to `## Run` in
|
|
29
|
+
`handoffs/releases/Sxxxx-release-notes.md`.
|
|
30
|
+
- **Endpoint + port:** Refer to `## Connect` in
|
|
31
|
+
`handoffs/releases/Sxxxx-release-notes.md`.
|
|
32
|
+
- **Verification steps + health signal:** Refer to `## Verify` in
|
|
33
|
+
`handoffs/releases/Sxxxx-release-notes.md`.
|
|
34
|
+
- **Credentials source refs (sanitized):** Refer to `## Credentials` in
|
|
35
|
+
`handoffs/releases/Sxxxx-release-notes.md` (env-ref only).
|
|
36
|
+
- **Known issues:** Refer to `## Known Issues` in
|
|
37
|
+
`handoffs/releases/Sxxxx-release-notes.md`.
|
|
38
|
+
|
|
26
39
|
## Historical references
|
|
27
40
|
|
|
28
41
|
- `Sxxxx`: `handoffs/releases/Sxxxx-release-notes.md`
|
|
@@ -16,10 +16,45 @@
|
|
|
16
16
|
|
|
17
17
|
---
|
|
18
18
|
|
|
19
|
+
## Run
|
|
20
|
+
|
|
21
|
+
- `start_command`: `<required>`
|
|
22
|
+
- `runtime_mode`: `local|remote` (required)
|
|
23
|
+
- `runtime_context_ref`: `docs/engineering/runtime-connectivity.md` (required
|
|
24
|
+
when present)
|
|
25
|
+
|
|
26
|
+
## Connect
|
|
27
|
+
|
|
28
|
+
- `service_url`: `<required>`
|
|
29
|
+
- `service_port`: `<required>`
|
|
30
|
+
- `health_endpoint`: `<required>`
|
|
31
|
+
|
|
32
|
+
## Verify
|
|
33
|
+
|
|
34
|
+
- `verification_steps`:
|
|
35
|
+
1. `<required step 1>`
|
|
36
|
+
2. `<required step 2>`
|
|
37
|
+
3. `<required step 3>`
|
|
38
|
+
- `expected_health_signal`: `<required>`
|
|
39
|
+
|
|
40
|
+
## Credentials
|
|
41
|
+
|
|
42
|
+
- `credential_source_refs` (env names only):
|
|
43
|
+
- `<ENV_VAR_NAME>`
|
|
44
|
+
- `expected_value_source`:
|
|
45
|
+
- `<CI secret store | operator shell profile | deployment platform variable set>`
|
|
46
|
+
- Never place inline secrets/tokens/passwords in this file.
|
|
47
|
+
|
|
48
|
+
## Known Issues
|
|
49
|
+
|
|
50
|
+
- `None` or deterministic concise issue list.
|
|
51
|
+
|
|
19
52
|
## Notes
|
|
20
53
|
|
|
21
54
|
- Sprint-scoped notes are canonical history artifacts.
|
|
22
55
|
- Do not overwrite notes for non-target sprints.
|
|
56
|
+
- Required section order is deterministic:
|
|
57
|
+
`Run -> Connect -> Verify -> Credentials -> Known Issues`.
|
|
23
58
|
|
|
24
59
|
## Queue linkage
|
|
25
60
|
|