pumuki 6.3.13 → 6.3.15
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 +95 -7
- package/VERSION +1 -1
- package/bin/pumuki-mcp-enterprise.js +5 -0
- package/bin/pumuki-pre-write.js +11 -0
- package/docs/API_REFERENCE.md +2 -1
- package/docs/CORE_INTEGRATIONS_UNTESTED_INVENTORY.md +57 -0
- package/docs/INSTALLATION.md +101 -54
- package/docs/MCP_SERVERS.md +167 -74
- package/docs/PUMUKI_FULL_VALIDATION_CHECKLIST.md +46 -45
- package/docs/PUMUKI_OPENSPEC_SDD_ROADMAP.md +55 -0
- package/docs/README.md +9 -0
- package/docs/REFRACTOR_PROGRESS.md +288 -6
- package/docs/USAGE.md +115 -8
- package/docs/validation/README.md +5 -0
- package/docs/validation/mock-consumer-next-cycle-enterprise-checklist.md +68 -0
- package/docs/validation/mock-consumer-next-round-scope.md +222 -0
- package/docs/validation/mock-consumer-post-release-handoff-pack.md +486 -0
- package/docs/validation/phase12-go-no-go-report.md +73 -0
- package/docs/validation/post-phase12-next-lot-decision.md +75 -0
- package/integrations/config/skillsRuleSet.ts +53 -6
- package/integrations/evidence/buildEvidence.ts +42 -3
- package/integrations/evidence/generateEvidence.test.ts +59 -0
- package/integrations/evidence/readEvidence.test.ts +61 -0
- package/integrations/evidence/schema.test.ts +81 -0
- package/integrations/evidence/schema.ts +11 -0
- package/integrations/evidence/writeEvidence.test.ts +18 -0
- package/integrations/evidence/writeEvidence.ts +11 -0
- package/integrations/git/resolveGitRefs.ts +2 -2
- package/integrations/git/runPlatformGate.ts +64 -0
- package/integrations/git/runPlatformGateEvidence.ts +13 -0
- package/integrations/git/stageRunners.ts +10 -1
- package/integrations/lifecycle/artifacts.ts +57 -4
- package/integrations/lifecycle/cli.ts +248 -12
- package/integrations/lifecycle/constants.ts +1 -0
- package/integrations/lifecycle/gitService.ts +1 -0
- package/integrations/lifecycle/install.ts +24 -1
- package/integrations/lifecycle/openSpecBootstrap.ts +190 -0
- package/integrations/lifecycle/state.ts +57 -0
- package/integrations/lifecycle/uninstall.ts +3 -1
- package/integrations/lifecycle/update.ts +11 -0
- package/integrations/mcp/enterpriseServer.cli.ts +12 -0
- package/integrations/mcp/enterpriseServer.ts +762 -0
- package/integrations/mcp/evidenceFacets.ts +5 -2
- package/integrations/mcp/evidenceFacetsBase.ts +3 -94
- package/integrations/mcp/evidenceFacetsFindings.ts +39 -0
- package/integrations/mcp/evidenceFacetsLedger.ts +27 -0
- package/integrations/mcp/evidenceFacetsPlatforms.ts +21 -0
- package/integrations/mcp/evidenceFacetsRulesets.ts +53 -0
- package/integrations/mcp/evidenceFacetsSeverity.ts +62 -0
- package/integrations/mcp/evidenceFacetsSnapshot.ts +4 -104
- package/integrations/mcp/evidencePayloadBuilders.ts +2 -0
- package/integrations/mcp/evidencePayloadContext.ts +5 -0
- package/integrations/mcp/evidencePayloadStatus.ts +100 -0
- package/integrations/mcp/evidencePayloadSummary.ts +0 -81
- package/integrations/mcp/evidencePayloads.ts +2 -8
- package/integrations/mcp/index.ts +1 -0
- package/integrations/sdd/index.ts +11 -0
- package/integrations/sdd/openSpecCli.ts +180 -0
- package/integrations/sdd/policy.ts +190 -0
- package/integrations/sdd/sessionStore.ts +152 -0
- package/integrations/sdd/types.ts +69 -0
- package/package.json +10 -5
- package/scripts/framework-menu-runner-path-lib.ts +10 -3
- package/scripts/framework-menu.ts +86 -5
- package/scripts/package-install-smoke-gate-lib.ts +6 -1
- package/scripts/package-install-smoke-lifecycle-lib.ts +3 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Mock Consumer Next-Cycle Enterprise Checklist
|
|
2
|
+
|
|
3
|
+
Operational checklist for the next mock validation cycle after the post-release hardening closeout.
|
|
4
|
+
|
|
5
|
+
## Legend
|
|
6
|
+
|
|
7
|
+
- `✅` completed
|
|
8
|
+
- `🚧` in progress (single active item)
|
|
9
|
+
- `⏳` pending
|
|
10
|
+
|
|
11
|
+
## Scope
|
|
12
|
+
|
|
13
|
+
- Target repository: `pumuki-mock-consumer`
|
|
14
|
+
- Goal: keep deterministic matrix + stage/evidence contract stable across cycles.
|
|
15
|
+
- Constraint: execute validations in mock repository only (not in framework repository).
|
|
16
|
+
|
|
17
|
+
## Execution Sequence
|
|
18
|
+
|
|
19
|
+
1. `⏳` Baseline preflight
|
|
20
|
+
- `git status --short --branch` must be clean.
|
|
21
|
+
- Ensure branch is the expected validation branch.
|
|
22
|
+
2. `⏳` Install target package version
|
|
23
|
+
- `npm install --save-exact pumuki@<version>`
|
|
24
|
+
- `npx pumuki install`
|
|
25
|
+
3. `⏳` Deterministic matrix run
|
|
26
|
+
- `npm run pumuki:matrix`
|
|
27
|
+
- Expected:
|
|
28
|
+
- `clean => 0/0/0`
|
|
29
|
+
- `violations => 1/1/1`
|
|
30
|
+
- `mixed => 1/1/1`
|
|
31
|
+
4. `⏳` Stage/evidence contract run (temp clone)
|
|
32
|
+
- Use a temp clone of mock repo.
|
|
33
|
+
- Open SDD session and run violations path for `PRE_COMMIT`, `PRE_PUSH`, `CI`.
|
|
34
|
+
5. `⏳` Ruleset bundle contract verification
|
|
35
|
+
- Confirm stage outputs include:
|
|
36
|
+
- `androidRuleSet@1.0.0`
|
|
37
|
+
- `backendRuleSet@1.0.0`
|
|
38
|
+
- `frontendRuleSet@1.0.0`
|
|
39
|
+
- `iosEnterpriseRuleSet@1.0.0`
|
|
40
|
+
- `project-rules`
|
|
41
|
+
- `gate-policy.default.<stage>`
|
|
42
|
+
6. `⏳` Closeout update
|
|
43
|
+
- Append command output summary to handoff pack.
|
|
44
|
+
- Update tracker with `✅` for completed step and move `🚧` to the next item.
|
|
45
|
+
|
|
46
|
+
## Acceptance Criteria
|
|
47
|
+
|
|
48
|
+
- Matrix exits match expected deterministic contract exactly.
|
|
49
|
+
- Stage summaries expose valid `snapshot.stage` and `snapshot.outcome`.
|
|
50
|
+
- Findings totals are stable for equivalent inputs.
|
|
51
|
+
- Ruleset bundles are present for all validated stages.
|
|
52
|
+
- No ad-hoc bypass needed for standard matrix execution.
|
|
53
|
+
|
|
54
|
+
## Required Output Artifacts
|
|
55
|
+
|
|
56
|
+
- Runtime summary in:
|
|
57
|
+
- `docs/validation/mock-consumer-post-release-handoff-pack.md`
|
|
58
|
+
- Progress tracking in:
|
|
59
|
+
- `docs/REFRACTOR_PROGRESS.md`
|
|
60
|
+
|
|
61
|
+
## Common Failure Signatures
|
|
62
|
+
|
|
63
|
+
- `SDD_SESSION_MISSING`:
|
|
64
|
+
- session lifecycle not initialized for current run.
|
|
65
|
+
- `methodology.tdd.backend-domain-change-requires-tests` in `clean`:
|
|
66
|
+
- missing backend domain test artifact in clean scenario.
|
|
67
|
+
- `methodology.bdd.backend-application-change-requires-spec` in `clean`:
|
|
68
|
+
- missing backend spec artifact recognized by commit-range diff extensions.
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
# Mock Consumer Next-Round Scope (Post Next-Cycle Closure)
|
|
2
|
+
|
|
3
|
+
This document defines the scope of the next enterprise round after the successful closure of the normalized next-cycle checklist.
|
|
4
|
+
|
|
5
|
+
## Round Objective
|
|
6
|
+
|
|
7
|
+
Harden operational reproducibility and operator safety of the mock validation flow, so matrix execution remains deterministic and fail-fast under invalid local baselines.
|
|
8
|
+
|
|
9
|
+
## Acceptance Criteria
|
|
10
|
+
|
|
11
|
+
1. Matrix runner fails fast when the source mock repository baseline is dirty.
|
|
12
|
+
2. Failure message is explicit and actionable (what is dirty and what command to run next).
|
|
13
|
+
3. Clean baseline keeps current deterministic contract unchanged:
|
|
14
|
+
- `clean => 0/0/0`
|
|
15
|
+
- `violations => 1/1/1`
|
|
16
|
+
- `mixed => 1/1/1`
|
|
17
|
+
4. Handoff/tracker include outcome evidence and exit status.
|
|
18
|
+
|
|
19
|
+
## First Atomic Task
|
|
20
|
+
|
|
21
|
+
- Add a preflight guard in `pumuki-mock-consumer/scripts/run-pumuki-matrix.sh` that validates source repo cleanliness before cloning/running scenarios.
|
|
22
|
+
- If dirty, exit non-zero with deterministic guidance and do not continue stage execution.
|
|
23
|
+
|
|
24
|
+
Status:
|
|
25
|
+
- `✅` implemented (mock commit `5f8c06b`), validated with dirty baseline `exit 17` and clean baseline matrix `PASS`.
|
|
26
|
+
|
|
27
|
+
## Second Atomic Task
|
|
28
|
+
|
|
29
|
+
- Add deterministic run-summary artifact output in `pumuki-mock-consumer/scripts/run-pumuki-matrix.sh`.
|
|
30
|
+
- On successful matrix completion, write a machine-readable summary file under repo `artifacts/` with:
|
|
31
|
+
- package spec used,
|
|
32
|
+
- per-scenario exit codes (`pre-commit`, `pre-push`, `ci`),
|
|
33
|
+
- final matrix verdict (`PASS`/`FAIL`),
|
|
34
|
+
- execution timestamp.
|
|
35
|
+
|
|
36
|
+
### Acceptance Criteria for Second Task
|
|
37
|
+
|
|
38
|
+
1. `npm run pumuki:matrix` with clean baseline still prints current console contract unchanged.
|
|
39
|
+
2. A deterministic summary artifact file is produced under `artifacts/` after each successful run.
|
|
40
|
+
3. Artifact fields are stable and parseable with `jq`.
|
|
41
|
+
4. Existing expected exits remain unchanged:
|
|
42
|
+
- `clean => 0/0/0`
|
|
43
|
+
- `violations => 1/1/1`
|
|
44
|
+
- `mixed => 1/1/1`
|
|
45
|
+
|
|
46
|
+
Status:
|
|
47
|
+
- `✅` implemented (mock commit `24dd39a`), validated with artifact contract check `summary_contract=PASS`.
|
|
48
|
+
|
|
49
|
+
## Third Atomic Task
|
|
50
|
+
|
|
51
|
+
- Harden artifact lifecycle behavior in `pumuki-mock-consumer/scripts/run-pumuki-matrix.sh` so failed runs do not leave stale-success summaries.
|
|
52
|
+
- On non-zero execution (guardrail or stage failure), ensure `artifacts/pumuki-matrix-summary.json` is removed or updated with a deterministic `FAIL` verdict (single-source-of-truth, no stale PASS file).
|
|
53
|
+
|
|
54
|
+
### Acceptance Criteria for Third Task
|
|
55
|
+
|
|
56
|
+
1. Dirty-baseline run (expected fail-fast) does not leave a stale `PASS` summary artifact.
|
|
57
|
+
2. Successful run still writes a valid `PASS` summary artifact with the same parseable schema.
|
|
58
|
+
3. Console output contract remains unchanged.
|
|
59
|
+
4. The behavior is reproducible in back-to-back runs (`fail` then `pass`, `pass` then `fail`).
|
|
60
|
+
|
|
61
|
+
Status:
|
|
62
|
+
- `✅` implemented (mock commit `9b49a6e`), validated with deterministic sequence:
|
|
63
|
+
- `fail` (`exit 17`) => summary artifact absent
|
|
64
|
+
- `pass` (`npm run pumuki:matrix`) => summary artifact present with `final_verdict=PASS`
|
|
65
|
+
- `fail` (`exit 17`) => summary artifact absent again (no stale `PASS`)
|
|
66
|
+
|
|
67
|
+
## Fourth Atomic Task
|
|
68
|
+
|
|
69
|
+
- Add deterministic failure-report artifact handling in `pumuki-mock-consumer/scripts/run-pumuki-matrix.sh`.
|
|
70
|
+
- On non-zero execution, write `artifacts/pumuki-matrix-last-failure.json` with stable machine-readable fields:
|
|
71
|
+
- package spec,
|
|
72
|
+
- timestamp UTC,
|
|
73
|
+
- exit code,
|
|
74
|
+
- failure phase (`preflight` or scenario name when available),
|
|
75
|
+
- final verdict (`FAIL`).
|
|
76
|
+
- On successful matrix completion, remove any stale `pumuki-matrix-last-failure.json`.
|
|
77
|
+
|
|
78
|
+
### Acceptance Criteria for Fourth Task
|
|
79
|
+
|
|
80
|
+
1. Dirty-baseline fail-fast run (`exit 17`) creates `pumuki-matrix-last-failure.json` with `final_verdict=FAIL` and `exit_code=17`.
|
|
81
|
+
2. Successful run removes stale `pumuki-matrix-last-failure.json` and still writes valid `pumuki-matrix-summary.json` (`final_verdict=PASS`).
|
|
82
|
+
3. Back-to-back behavior is deterministic (`fail -> pass -> fail`) for both artifacts (`summary` and `last-failure`).
|
|
83
|
+
4. Existing console output contract remains unchanged.
|
|
84
|
+
|
|
85
|
+
Status:
|
|
86
|
+
- `✅` implemented (mock commit `d3427c7`), validated with deterministic sequence:
|
|
87
|
+
- `fail` (`exit 17`) => `summary` absent, `last-failure` present (`final_verdict=FAIL`, `exit_code=17`, `failure_phase=preflight`)
|
|
88
|
+
- `pass` (`npm run pumuki:matrix`) => `summary` present (`final_verdict=PASS`), `last-failure` absent
|
|
89
|
+
- `fail` (`exit 17`) => `summary` absent, `last-failure` present again with `final_verdict=FAIL`
|
|
90
|
+
|
|
91
|
+
## Fifth Atomic Task
|
|
92
|
+
|
|
93
|
+
- Extend failure metadata in `artifacts/pumuki-matrix-last-failure.json` to include deterministic execution context for triage:
|
|
94
|
+
- `failure_step` (stable enum-like value),
|
|
95
|
+
- `failure_log_path` (when an internal step log exists),
|
|
96
|
+
- keep existing fields unchanged for backward compatibility.
|
|
97
|
+
- Ensure the runner sets scenario-aware context when a failure happens after preflight (`scenario=<name>` + step), not only `preflight`.
|
|
98
|
+
|
|
99
|
+
### Acceptance Criteria for Fifth Task
|
|
100
|
+
|
|
101
|
+
1. Dirty-baseline fail-fast (`exit 17`) still reports `failure_phase=preflight`, includes deterministic `failure_step`, and keeps `final_verdict=FAIL`.
|
|
102
|
+
2. A forced scenario failure path after preflight records scenario-aware failure context (`failure_phase=<scenario>` + deterministic `failure_step`).
|
|
103
|
+
3. Existing consumers of `pumuki-matrix-last-failure.json` remain compatible (old keys still present; schema stable).
|
|
104
|
+
4. Console output contract remains unchanged and summary artifact behavior from task 3/4 is preserved.
|
|
105
|
+
|
|
106
|
+
Status:
|
|
107
|
+
- `✅` implemented (mock commit `5af7ded`), validated with deterministic checks:
|
|
108
|
+
- dirty preflight failure: `exit=17`, `failure_phase=preflight`, `failure_step=source_repo_cleanliness`, `failure_log_path=null`
|
|
109
|
+
- scenario-aware failure after preflight (forced with invalid package): `exit=1`, `failure_phase=clean`, `failure_step=npm_install_package`, `failure_log_path=/tmp/pumuki-clean-npm-install.log` (file exists)
|
|
110
|
+
- successful run keeps behavior from task 3/4: `summary` present with `final_verdict=PASS`, `last-failure` absent
|
|
111
|
+
|
|
112
|
+
## Sixth Atomic Task
|
|
113
|
+
|
|
114
|
+
- Add deterministic run identifier propagation to matrix artifacts:
|
|
115
|
+
- include `run_id` in `pumuki-matrix-summary.json`,
|
|
116
|
+
- include the same `run_id` in `pumuki-matrix-last-failure.json`.
|
|
117
|
+
- `run_id` must be generated once per runner execution and reused in both artifacts to correlate success/failure evidence across logs.
|
|
118
|
+
|
|
119
|
+
### Acceptance Criteria for Sixth Task
|
|
120
|
+
|
|
121
|
+
1. Successful run produces `pumuki-matrix-summary.json` with non-empty `run_id`.
|
|
122
|
+
2. Failed run produces `pumuki-matrix-last-failure.json` with non-empty `run_id`.
|
|
123
|
+
3. For a given execution, `run_id` is stable and identical across any emitted artifact in that run.
|
|
124
|
+
4. Existing artifact keys remain backward-compatible and console output contract stays unchanged.
|
|
125
|
+
|
|
126
|
+
Status:
|
|
127
|
+
- `✅` implemented (mock commit `a9d9b29`), validated with deterministic checks:
|
|
128
|
+
- dirty preflight failure: `exit=17` and `last-failure.run_id` non-empty
|
|
129
|
+
- successful run: `summary.run_id` non-empty, final line unchanged (`All scenario matrix checks passed for package: pumuki@latest`), `last-failure` absent
|
|
130
|
+
- forced scenario failure after preflight: `exit=1` and `last-failure.run_id` non-empty
|
|
131
|
+
- run-level stability check: repeated reads in the same run keep identical `run_id`
|
|
132
|
+
|
|
133
|
+
## Seventh Atomic Task
|
|
134
|
+
|
|
135
|
+
- Add deterministic failure-log artifact capture for triage portability:
|
|
136
|
+
- when `failure_log_path` exists, copy it into `artifacts/` as a deterministic file (for example `pumuki-matrix-last-failure.log`),
|
|
137
|
+
- include `failure_log_artifact` in `pumuki-matrix-last-failure.json` pointing to the copied artifact path.
|
|
138
|
+
- Preserve backward compatibility of existing fields (`failure_log_path`, `failure_phase`, `failure_step`, `run_id`, etc.).
|
|
139
|
+
- On successful runs, remove stale copied failure-log artifact alongside `pumuki-matrix-last-failure.json`.
|
|
140
|
+
|
|
141
|
+
### Acceptance Criteria for Seventh Task
|
|
142
|
+
|
|
143
|
+
1. Scenario failure with an internal step log produces `failure_log_artifact` in JSON and a real file under `artifacts/`.
|
|
144
|
+
2. Preflight dirty failure keeps `failure_log_artifact=null` (no synthetic log).
|
|
145
|
+
3. Successful run removes stale failure JSON and stale copied failure-log artifact.
|
|
146
|
+
4. Existing console output and current artifact fields remain backward-compatible.
|
|
147
|
+
|
|
148
|
+
Status:
|
|
149
|
+
- `✅` implemented (mock commit `a4fb8e8`), validated with deterministic checks:
|
|
150
|
+
- preflight dirty failure: `exit=17`, `failure_log_artifact=null`
|
|
151
|
+
- scenario failure after preflight (invalid package): `exit=1`, `failure_log_artifact=/.../artifacts/pumuki-matrix-last-failure.log`, copied file exists
|
|
152
|
+
- successful run: `summary` present, stale `last-failure` JSON removed, stale copied failure-log artifact removed
|
|
153
|
+
- final console line preserved: `All scenario matrix checks passed for package: pumuki@latest`
|
|
154
|
+
|
|
155
|
+
## Eighth Atomic Task
|
|
156
|
+
|
|
157
|
+
- Add deterministic artifact-integrity metadata for copied failure logs:
|
|
158
|
+
- when `failure_log_artifact` exists, include `failure_log_artifact_sha256` and `failure_log_artifact_bytes` in `pumuki-matrix-last-failure.json`.
|
|
159
|
+
- Keep fields null when no copied artifact exists (preflight failure path).
|
|
160
|
+
- Preserve existing fields and console behavior unchanged.
|
|
161
|
+
|
|
162
|
+
### Acceptance Criteria for Eighth Task
|
|
163
|
+
|
|
164
|
+
1. Scenario failure with copied log sets non-empty `failure_log_artifact_sha256` and positive `failure_log_artifact_bytes`.
|
|
165
|
+
2. Preflight dirty failure keeps `failure_log_artifact=null`, `failure_log_artifact_sha256=null`, `failure_log_artifact_bytes=null`.
|
|
166
|
+
3. Successful run still removes stale failure JSON + copied failure log artifact.
|
|
167
|
+
4. Existing artifact keys remain backward-compatible and console output contract remains unchanged.
|
|
168
|
+
|
|
169
|
+
Status:
|
|
170
|
+
- `✅` implemented (mock commit `ecf4e9c`), validated with deterministic checks:
|
|
171
|
+
- preflight dirty failure: `exit=17`, `failure_log_artifact=null`, `failure_log_artifact_sha256=null`, `failure_log_artifact_bytes=null`
|
|
172
|
+
- scenario failure after preflight (invalid package): `exit=1`, `failure_log_artifact` present, `failure_log_artifact_sha256` non-empty, `failure_log_artifact_bytes=378 (>0)`
|
|
173
|
+
- successful run: `summary` present (`final_verdict=PASS`), stale `last-failure` JSON/log artifacts removed
|
|
174
|
+
- final console line preserved: `All scenario matrix checks passed for package: pumuki@latest`
|
|
175
|
+
|
|
176
|
+
## Ninth Atomic Task
|
|
177
|
+
|
|
178
|
+
- Add deterministic `failure_command` metadata to `artifacts/pumuki-matrix-last-failure.json`.
|
|
179
|
+
- Map each `failure_step` to a canonical command string used by the runner for that step.
|
|
180
|
+
- Keep backward compatibility: preserve all existing keys; `failure_command` can be `null` only when the step is not command-backed.
|
|
181
|
+
|
|
182
|
+
### Acceptance Criteria for Ninth Task
|
|
183
|
+
|
|
184
|
+
1. Preflight dirty failure (`exit 17`) includes `failure_step=source_repo_cleanliness` and non-empty `failure_command`.
|
|
185
|
+
2. Scenario failure after preflight (for example invalid package on `npm_install_package`) includes non-empty `failure_command` matching that step.
|
|
186
|
+
3. Successful run still removes stale `pumuki-matrix-last-failure.json` + `pumuki-matrix-last-failure.log` and preserves summary contract.
|
|
187
|
+
4. Existing artifact keys remain backward-compatible and console output contract remains unchanged.
|
|
188
|
+
|
|
189
|
+
Status:
|
|
190
|
+
- `✅` implemented (mock commit `eec64fd`), validated with deterministic checks:
|
|
191
|
+
- preflight dirty failure: `exit=17`, `failure_step=source_repo_cleanliness`, `failure_command` no vacío
|
|
192
|
+
- scenario failure after preflight (invalid package): `exit=1`, `failure_step=npm_install_package`, `failure_command="npm install --save-exact \"pumuki@0.0.0-not-a-real-version\""`
|
|
193
|
+
- successful run: `summary` presente (`final_verdict=PASS`) y artefactos stale de fallo eliminados
|
|
194
|
+
- final console line preserved: `All scenario matrix checks passed for package: pumuki@latest`
|
|
195
|
+
|
|
196
|
+
## Tenth Atomic Task
|
|
197
|
+
|
|
198
|
+
- Add deterministic, portable command metadata in failure artifact:
|
|
199
|
+
- keep `failure_command` (resolved command) for operator copy/paste,
|
|
200
|
+
- add `failure_command_template` with placeholders (`{repo_root}`, `{clone_dir}`, `{scenario}`, `{package_spec}`, `{base_ref}`) to avoid machine-specific path coupling.
|
|
201
|
+
- Optionally include `failure_command_variables` object with resolved values used in the template.
|
|
202
|
+
- Preserve backward compatibility for all existing keys and current console behavior.
|
|
203
|
+
|
|
204
|
+
### Acceptance Criteria for Tenth Task
|
|
205
|
+
|
|
206
|
+
1. Preflight dirty failure (`exit 17`) includes non-empty `failure_command_template` without absolute local paths.
|
|
207
|
+
2. Scenario failure on `npm_install_package` includes template `npm install --save-exact "{package_spec}"` and resolved `package_spec` in variables.
|
|
208
|
+
3. Existing `failure_command` remains present and non-empty where command-backed step exists.
|
|
209
|
+
4. Successful run still removes stale failure artifacts and preserves summary/console contracts unchanged.
|
|
210
|
+
|
|
211
|
+
Status:
|
|
212
|
+
- `✅` implemented (mock commit `ab9f616`), validated with deterministic checks:
|
|
213
|
+
- preflight dirty failure: `exit=17`, `failure_command_template` no vacío y portable (`{repo_root}` presente, sin paths absolutos de usuario)
|
|
214
|
+
- scenario failure after preflight (invalid package): `exit=1`, `failure_step=npm_install_package`, `failure_command_template="npm install --save-exact \"{package_spec}\""`, `failure_command_variables.package_spec="pumuki@0.0.0-not-a-real-version"`
|
|
215
|
+
- `failure_command` legado sigue presente y no vacío en steps command-backed
|
|
216
|
+
- successful run: `summary` presente (`final_verdict=PASS`) y artefactos stale de fallo eliminados
|
|
217
|
+
|
|
218
|
+
## Out of Scope (current round)
|
|
219
|
+
|
|
220
|
+
- Changes to rule semantics.
|
|
221
|
+
- Changes to stage policy severity thresholds.
|
|
222
|
+
- Additional scenario creation.
|