Skip to content

Commit d185aa2

Browse files
authored
Merge pull request #21 from ericpassmore/codex/remove-revalidate
Remove revalidate stage from ACAC lifecycle
2 parents 74bf453 + d509b1a commit d185aa2

17 files changed

Lines changed: 85 additions & 1019 deletions

codex/AGENTS.md

Lines changed: 12 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
## Autonomous Coding Agent Contract
44

55
This contract defines cross-stage invariants for the lifecycle:
6-
`establish-goals` -> `prepare-takeoff` -> `prepare-phased-impl` -> `implement` -> `revalidate` -> `land-the-plan`
6+
`establish-goals` -> `prepare-takeoff` -> `prepare-phased-impl` -> `implement` -> `land-the-plan`
77

88
Stage mechanics, commands, and file-surface details are owned by stage artifacts under `codex/skills/*/SKILL.md`.
99

@@ -16,8 +16,7 @@ Stages must run in lifecycle order and emit only these verdicts:
1616
- `establish-goals`: `GOALS LOCKED` or `BLOCKED`
1717
- `prepare-takeoff`: `READY FOR PLANNING` or `BLOCKED`
1818
- `prepare-phased-impl`: `READY FOR IMPLEMENTATION` or `BLOCKED`
19-
- `implement`: `READY FOR REVERIFICATION` or `BLOCKED`
20-
- `revalidate`: `READY TO REPLAN`, `READY TO LAND`, or `BLOCKED`
19+
- `implement`: `READY TO LAND` or `BLOCKED`
2120
- `land-the-plan`: `LANDED` or `BLOCKED`
2221

2322
If any stage emits `BLOCKED`, progression stops immediately.
@@ -71,7 +70,7 @@ Traceability is mandatory:
7170

7271
- planned phase work maps to locked goals
7372
- implemented changes maps to approved phase work
74-
- reverification evidence maps to implemented changes
73+
- verification evidence maps to implemented changes
7574

7675
### 3.1 Principles Traceability Matrix
7776

@@ -82,7 +81,7 @@ Traceability is mandatory:
8281
- `Keep Changes Minimal` -> Section 3 (`Execution Invariants`)
8382
- `Fail Fast and Explicitly` -> Section 3 (`Execution Invariants`)
8483
- `Verify, Then Declare Done` -> Section 4 (`Verification and Completion Contract`)
85-
- `Revalidate on Drift` -> Section 5 and Section 6 (`Drift and Revalidation`)
84+
- `Detect Drift and Stop` -> Section 5 (`Drift Hard Gate`)
8685

8786
---
8887

@@ -93,7 +92,7 @@ Completion requires passing verification or explicit blocker documentation.
9392
- tests or equivalent validation must exist
9493
- tests are mandatory when behavior is changed
9594
- unverifiable goals are invalid
96-
- `lint`, `build`, and `test` are mandatory reverification command classes
95+
- `lint`, `build`, and `test` are mandatory verification command classes
9796
- command instances must come from pinned task/repo command records:
9897
- `spec.md`
9998
- `./codex/project-structure.md`
@@ -103,9 +102,9 @@ A stage MAY be declared complete only when locked success criteria and verificat
103102

104103
---
105104

106-
## 5. Drift and Revalidation Hard Gate
105+
## 5. Drift Hard Gate
107106

108-
Post-lock stages MUST continuously detect drift and enter `revalidate` on drift.
107+
Post-lock stages MUST continuously detect drift and stop immediately on drift.
109108

110109
### 5.1 Drift signals
111110

@@ -148,52 +147,14 @@ New evidence is at least one of:
148147
- reduced failure surface
149148
- concrete reproducible observation not previously recorded
150149

151-
Exceeding `N`, `M`, or `K` is drift and requires `revalidate`.
152-
153-
---
154-
155-
## 6. Revalidate Contract
156-
157-
All revalidation decisions must be documented.
158-
159-
- `revalidate` wipes prior working memory/history for active execution context
160-
- `establish-goals` and `prepare-takeoff` remain locked context-only inputs
161-
- each revalidate run appends an entry to:
162-
- `./tasks/<TASK_NAME_IN_KEBAB_CASE>/audit-log.md`
163-
- each revalidate audit entry must include, at minimum:
164-
- findings summary (status/count/severity/verdict/confidence)
165-
- complexity score snapshot (score/level/recommended goals and phases)
166-
- fragile artifacts snapshot sourced from `./codex/project-structure.md`
167-
- diff surface/churn snapshot
168-
- lifecycle counters snapshot (`Stage 3 runs`, `Stage 3 current cycle`, `Drift revalidation count`)
169-
- trigger classes:
170-
- drift-triggered revalidation
171-
- direct reverification revalidation (direct from `implement` verdict `READY FOR REVERIFICATION`)
172-
173-
Allowed exits by trigger:
174-
175-
- drift-triggered: `READY TO REPLAN` or `BLOCKED`
176-
- direct reverification: `READY TO LAND` or `BLOCKED`
177-
178-
Outcome routing:
179-
180-
- `READY TO REPLAN`: resume at `prepare-phased-impl` (Stage 3 restart)
181-
- `READY TO LAND`: hand off directly to `land-the-plan` (no Stage 3 restart)
182-
183-
`READY TO LAND` is valid only when:
184-
185-
- `prepare-phased-impl` has been executed at least once total for the task
186-
- current `revalidate` entry is direct from Stage 4 verdict `READY FOR REVERIFICATION`
187-
- no open actionable code-review findings
188-
- code-review verdict is `patch is correct`
189-
- unresolved actionable findings are covered by explicit risk acceptance at:
190-
- `./tasks/<TASK_NAME_IN_KEBAB_CASE>/risk-acceptance.md`
150+
Exceeding `N`, `M`, or `K` is drift and requires immediate stage stop with `BLOCKED`.
191151

192152
Stage 3 state source of truth:
193153

194154
- `./tasks/<TASK_NAME_IN_KEBAB_CASE>/lifecycle-state.md`:
195155
- `- Stage 3 runs: <N>`
196-
- `- Drift revalidation count: <N>`
156+
- `- Stage 3 current cycle: <N>`
157+
- `- Stage 3 last validated cycle: <N>`
197158

198159
Stage 3 restart archival requirement:
199160

@@ -207,13 +168,13 @@ Stage 3 restart archival requirement:
207168

208169
---
209170

210-
## 7. Land Cleanly
171+
## 6. Land Cleanly
211172

212173
Do not finalize until:
213174

214175
- Definition of Done is met
215176
- verification is complete or explicitly blocked
216177
- task artifacts are current
217-
- latest reverification includes `lint`, `build`, and `test` outcomes
178+
- latest verification includes `lint`, `build`, and `test` outcomes
218179

219180
Finalization requires approved commit workflow and reviewer-ready handoff details.

codex/codex-config.yaml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
code_review:
2-
base_branch: main
2+
base_branch: qa
33

44
notes:
55
- "Update this manifest only when the repository's canonical commands change."
@@ -14,10 +14,12 @@ notes:
1414

1515

1616

17+
18+
1719
# PREPARE-TAKEOFF BOOTSTRAP START
1820
bootstrap:
19-
codex_root: "/Users/eric/.codex/worktrees/d4c7/prompts/codex"
20-
codex_scripts_dir: "/Users/eric/.codex/worktrees/d4c7/prompts/codex/scripts"
21+
codex_root: "/Users/eric/side-projects/prompts/codex"
22+
codex_scripts_dir: "/Users/eric/side-projects/prompts/codex/scripts"
2123
canonical_scripts_path: "./.codex/scripts"
2224
repository_local_fallback_scripts_path: "./codex/scripts"
2325
home_fallback_scripts_path: "$HOME/.codex/scripts"

codex/principles.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ Do not hide uncertainty or errors.
2626
Completion requires passing verification or explicitly documented blockers.
2727
Tests are mandatory when behavior is changed.
2828

29-
### 6. Revalidate on Drift
29+
### 6. Detect Drift and Stop
3030

31-
If goals, scope, tests, touched surfaces, verification plans, or locked completion criteria drift, enter `revalidate` before continuing.
31+
If goals, scope, tests, touched surfaces, verification plans, or locked completion criteria drift, stop the active stage and emit `BLOCKED`.
3232
Treat drift detection as a hard gate, including loop-prevention limits (`N=45m`, `M=5 cycles`, `K=2 no-evidence cycles`).

codex/project-structure.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060
- `codex/project-structure.md` (required bootstrap input; missing or stale records block stage execution)
6161
- `codex/scripts/resolve-codex-root.sh` (root path selection used by stage scripts)
6262
- `codex/scripts/read-codex-paths.sh` (runtime path hydration for selected codex root/scripts dir)
63-
- `codex/scripts/revalidate-validate.sh` (terminal gate validator for Stage 5 verdict integrity)
63+
- `codex/scripts/implement-validate.sh` (terminal gate validator for Stage 4 -> Stage 5 readiness)
6464
- `goals/task-manifest.csv` (landing metadata and task identity continuity)
6565

6666
## Success Criteria

codex/rules/expand-task-spec.rules

Lines changed: 3 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ prefix_rule(
243243
prefix_rule(
244244
pattern=["/Users/eric/.codex/scripts/implement-validate.sh"],
245245
decision="allow",
246-
justification="Validate Stage 4 gates and emit READY FOR REVERIFICATION or BLOCKED.",
246+
justification="Validate Stage 4 gates and emit READY TO LAND or BLOCKED.",
247247
match=[
248248
"/Users/eric/.codex/scripts/implement-validate.sh add-feature-x",
249249
],
@@ -252,7 +252,7 @@ prefix_rule(
252252
prefix_rule(
253253
pattern=["./.codex/scripts/implement-validate.sh"],
254254
decision="allow",
255-
justification="Validate Stage 4 gates and emit READY FOR REVERIFICATION or BLOCKED (canonical repo path).",
255+
justification="Validate Stage 4 gates and emit READY TO LAND or BLOCKED (canonical repo path).",
256256
match=[
257257
"./.codex/scripts/implement-validate.sh add-feature-x",
258258
],
@@ -261,7 +261,7 @@ prefix_rule(
261261
prefix_rule(
262262
pattern=["./codex/scripts/implement-validate.sh"],
263263
decision="allow",
264-
justification="Validate Stage 4 gates and emit READY FOR REVERIFICATION or BLOCKED (repo-local fallback path).",
264+
justification="Validate Stage 4 gates and emit READY TO LAND or BLOCKED (repo-local fallback path).",
265265
match=[
266266
"./codex/scripts/implement-validate.sh add-feature-x",
267267
],
@@ -301,40 +301,6 @@ prefix_rule(
301301
],
302302
)
303303

304-
# -------------------------
305-
# Revalidate stage validator script
306-
# -------------------------
307-
308-
prefix_rule(
309-
pattern=["/Users/eric/.codex/scripts/revalidate-validate.sh"],
310-
decision="allow",
311-
justification="Validate Stage 5 Step 4/5 gates and emit READY TO REPLAN, READY TO LAND, or BLOCKED.",
312-
match=[
313-
"/Users/eric/.codex/scripts/revalidate-validate.sh add-feature-x",
314-
"/Users/eric/.codex/scripts/revalidate-validate.sh add-feature-x main",
315-
],
316-
)
317-
318-
prefix_rule(
319-
pattern=["./.codex/scripts/revalidate-validate.sh"],
320-
decision="allow",
321-
justification="Validate Stage 5 Step 4/5 gates and emit READY TO REPLAN, READY TO LAND, or BLOCKED (canonical repo path).",
322-
match=[
323-
"./.codex/scripts/revalidate-validate.sh add-feature-x",
324-
"./.codex/scripts/revalidate-validate.sh add-feature-x main",
325-
],
326-
)
327-
328-
prefix_rule(
329-
pattern=["./codex/scripts/revalidate-validate.sh"],
330-
decision="allow",
331-
justification="Validate Stage 5 Step 4/5 gates and emit READY TO REPLAN, READY TO LAND, or BLOCKED (repo-local fallback path).",
332-
match=[
333-
"./codex/scripts/revalidate-validate.sh add-feature-x",
334-
"./codex/scripts/revalidate-validate.sh add-feature-x main",
335-
],
336-
)
337-
338304
# -------------------------
339305
# Node / TypeScript (npm/bun)
340306
# -------------------------

codex/scripts/implement-validate.sh

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,8 @@ if [[ ! -f "${FINAL_PHASE_FILE}" ]]; then
7676
fi
7777

7878
if [[ -f "${PHASE_PLAN_FILE}" ]]; then
79-
if ! grep -q '^- Verdict: READY FOR IMPLEMENTATION$' "${PHASE_PLAN_FILE}"; then
80-
issues+=("Precondition failed: ${PHASE_PLAN_FILE} must contain '- Verdict: READY FOR IMPLEMENTATION' before Stage 4 closeout.")
79+
if ! grep -Eq '^- Verdict: (READY FOR IMPLEMENTATION|READY TO LAND)$' "${PHASE_PLAN_FILE}"; then
80+
issues+=("Precondition failed: ${PHASE_PLAN_FILE} must contain '- Verdict: READY FOR IMPLEMENTATION' or '- Verdict: READY TO LAND' before Stage 4/5 validation.")
8181
fi
8282
fi
8383

@@ -138,8 +138,8 @@ if [[ -f "${FINAL_PHASE_FILE}" ]]; then
138138
fi
139139

140140
if [[ "${#issues[@]}" -eq 0 ]]; then
141-
set_verdict "READY FOR REVERIFICATION"
142-
echo "READY FOR REVERIFICATION"
141+
set_verdict "READY TO LAND"
142+
echo "READY TO LAND"
143143
exit 0
144144
fi
145145

codex/scripts/prepare-phased-impl-scaffold.sh

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -172,19 +172,16 @@ ensure_lifecycle_state_file() {
172172
local stage3_runs="0"
173173
local current_cycle="0"
174174
local last_validated_cycle="0"
175-
local drift_revalidation_count="0"
176175

177176
if [[ -f "${LIFECYCLE_STATE_FILE}" ]]; then
178177
stage3_runs="$(sed -nE 's/^- Stage 3 runs:[[:space:]]*([0-9]+)[[:space:]]*$/\1/p' "${LIFECYCLE_STATE_FILE}" | head -n 1)"
179178
current_cycle="$(sed -nE 's/^- Stage 3 current cycle:[[:space:]]*([0-9]+)[[:space:]]*$/\1/p' "${LIFECYCLE_STATE_FILE}" | head -n 1)"
180179
last_validated_cycle="$(sed -nE 's/^- Stage 3 last validated cycle:[[:space:]]*([0-9]+)[[:space:]]*$/\1/p' "${LIFECYCLE_STATE_FILE}" | head -n 1)"
181-
drift_revalidation_count="$(sed -nE 's/^- Drift revalidation count:[[:space:]]*([0-9]+)[[:space:]]*$/\1/p' "${LIFECYCLE_STATE_FILE}" | head -n 1)"
182180
fi
183181

184182
[[ "${stage3_runs}" =~ ^[0-9]+$ ]] || stage3_runs="0"
185183
[[ "${current_cycle}" =~ ^[0-9]+$ ]] || current_cycle="0"
186184
[[ "${last_validated_cycle}" =~ ^[0-9]+$ ]] || last_validated_cycle="0"
187-
[[ "${drift_revalidation_count}" =~ ^[0-9]+$ ]] || drift_revalidation_count="0"
188185

189186
current_cycle=$((current_cycle + 1))
190187

@@ -193,7 +190,6 @@ ensure_lifecycle_state_file() {
193190
- Stage 3 runs: ${stage3_runs}
194191
- Stage 3 current cycle: ${current_cycle}
195192
- Stage 3 last validated cycle: ${last_validated_cycle}
196-
- Drift revalidation count: ${drift_revalidation_count}
197193
EOF
198194
}
199195

codex/scripts/prepare-phased-impl-validate.sh

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -105,19 +105,16 @@ update_lifecycle_stage3_runs() {
105105
local stage3_runs="0"
106106
local current_cycle="0"
107107
local last_validated_cycle="0"
108-
local drift_revalidation_count="0"
109108

110109
if [[ -f "${LIFECYCLE_STATE_FILE}" ]]; then
111110
stage3_runs="$(sed -nE 's/^- Stage 3 runs:[[:space:]]*([0-9]+)[[:space:]]*$/\1/p' "${LIFECYCLE_STATE_FILE}" | head -n 1)"
112111
current_cycle="$(sed -nE 's/^- Stage 3 current cycle:[[:space:]]*([0-9]+)[[:space:]]*$/\1/p' "${LIFECYCLE_STATE_FILE}" | head -n 1)"
113112
last_validated_cycle="$(sed -nE 's/^- Stage 3 last validated cycle:[[:space:]]*([0-9]+)[[:space:]]*$/\1/p' "${LIFECYCLE_STATE_FILE}" | head -n 1)"
114-
drift_revalidation_count="$(sed -nE 's/^- Drift revalidation count:[[:space:]]*([0-9]+)[[:space:]]*$/\1/p' "${LIFECYCLE_STATE_FILE}" | head -n 1)"
115113
fi
116114

117115
[[ "${stage3_runs}" =~ ^[0-9]+$ ]] || stage3_runs="0"
118116
[[ "${current_cycle}" =~ ^[0-9]+$ ]] || current_cycle="0"
119117
[[ "${last_validated_cycle}" =~ ^[0-9]+$ ]] || last_validated_cycle="0"
120-
[[ "${drift_revalidation_count}" =~ ^[0-9]+$ ]] || drift_revalidation_count="0"
121118

122119
if [[ "${current_cycle}" -eq 0 ]]; then
123120
current_cycle=1
@@ -133,7 +130,6 @@ update_lifecycle_stage3_runs() {
133130
- Stage 3 runs: ${stage3_runs}
134131
- Stage 3 current cycle: ${current_cycle}
135132
- Stage 3 last validated cycle: ${last_validated_cycle}
136-
- Drift revalidation count: ${drift_revalidation_count}
137133
EOF
138134
}
139135

@@ -201,12 +197,12 @@ if [[ -f "${COMPLEXITY_LOCK_FILE}" ]]; then
201197
lock_signals_sha256="$(jq -r '.selected_signals_sha256 // empty' "${COMPLEXITY_LOCK_FILE}" 2>/dev/null || true)"
202198

203199
if [[ -z "${lock_signals_path}" ]]; then
204-
issues+=("Complexity lock metadata incomplete: missing 'selected_signals_path' in ${COMPLEXITY_LOCK_FILE}. Remediation: rerun prepare-phased-impl-scaffold.sh, then enter revalidate.")
200+
issues+=("Complexity lock metadata incomplete: missing 'selected_signals_path' in ${COMPLEXITY_LOCK_FILE}. Remediation: rerun prepare-phased-impl-scaffold.sh, then rerun Stage 3 validation.")
205201
lock_metadata_complete="false"
206202
fi
207203

208204
if [[ -z "${lock_signals_sha256}" ]]; then
209-
issues+=("Complexity lock metadata incomplete: missing 'selected_signals_sha256' in ${COMPLEXITY_LOCK_FILE}. Remediation: rerun prepare-phased-impl-scaffold.sh, then enter revalidate.")
205+
issues+=("Complexity lock metadata incomplete: missing 'selected_signals_sha256' in ${COMPLEXITY_LOCK_FILE}. Remediation: rerun prepare-phased-impl-scaffold.sh, then rerun Stage 3 validation.")
210206
lock_metadata_complete="false"
211207
fi
212208

@@ -218,18 +214,18 @@ else
218214
fi
219215

220216
if [[ ! -f "${COMPLEXITY_SIGNALS_FILE}" ]]; then
221-
issues+=("Missing required complexity signals file: ${COMPLEXITY_SIGNALS_FILE}. Remediation: create it, rerun prepare-phased-impl-scaffold.sh, then enter revalidate.")
217+
issues+=("Missing required complexity signals file: ${COMPLEXITY_SIGNALS_FILE}. Remediation: create it, rerun prepare-phased-impl-scaffold.sh, then rerun Stage 3 validation.")
222218
fi
223219

224220
if [[ ! -f "${COMPLEXITY_LOCK_FILE}" ]]; then
225-
issues+=("Missing required complexity lock file: ${COMPLEXITY_LOCK_FILE}. Remediation: rerun prepare-phased-impl-scaffold.sh for this task, then enter revalidate.")
221+
issues+=("Missing required complexity lock file: ${COMPLEXITY_LOCK_FILE}. Remediation: rerun prepare-phased-impl-scaffold.sh for this task, then rerun Stage 3 validation.")
226222
fi
227223

228224
if [[ -f "${COMPLEXITY_LOCK_FILE}" && -f "${PHASE_PLAN_FILE}" ]]; then
229225
phase_plan_signals_path="$(signals_path_from_phase_plan)"
230226
if [[ -n "${phase_plan_signals_path}" ]]; then
231227
if [[ -n "${lock_signals_path}" && "${phase_plan_signals_path}" != "${lock_signals_path}" ]]; then
232-
issues+=("Complexity drift detected: phase-plan signals path '${phase_plan_signals_path}' differs from locked path '${lock_signals_path}'. BLOCKED; run revalidate before continuing.")
228+
issues+=("Complexity drift detected: phase-plan signals path '${phase_plan_signals_path}' differs from locked path '${lock_signals_path}'. BLOCKED; resolve drift before continuing.")
233229
fi
234230
fi
235231
fi
@@ -239,9 +235,9 @@ score_script="${SCRIPT_DIR}/complexity-score.sh"
239235
if [[ ! -x "${score_script}" ]]; then
240236
issues+=("Missing executable complexity scorer: ${score_script}")
241237
elif [[ -z "${complexity_signals_file}" ]]; then
242-
issues+=("Complexity lock metadata incomplete: selected signals path could not be resolved from ${COMPLEXITY_LOCK_FILE}. BLOCKED; run revalidate after regenerating lock metadata.")
238+
issues+=("Complexity lock metadata incomplete: selected signals path could not be resolved from ${COMPLEXITY_LOCK_FILE}. BLOCKED; resolve lock metadata before continuing.")
243239
elif [[ ! -f "${complexity_signals_file}" ]]; then
244-
issues+=("Selected complexity signals file not found: ${complexity_signals_file}. BLOCKED; run revalidate after restoring the selected signals file.")
240+
issues+=("Selected complexity signals file not found: ${complexity_signals_file}. BLOCKED; restore the selected signals file before continuing.")
245241
else
246242
if score_json="$("${score_script}" "${complexity_signals_file}" --format json 2>&1)"; then
247243
complexity_goals_min="$(printf '%s' "${score_json}" | jq -r '.ranges.goals.min // empty' 2>/dev/null || true)"
@@ -269,13 +265,13 @@ if [[ -f "${COMPLEXITY_LOCK_FILE}" && "${complexity_ranges_ready}" == "true" ]];
269265
lock_phases_max="$(jq -r '.ranges.phases.max // empty' "${COMPLEXITY_LOCK_FILE}" 2>/dev/null || true)"
270266

271267
if [[ -n "${lock_signals_path}" && "${complexity_signals_file}" != "${lock_signals_path}" ]]; then
272-
issues+=("Complexity drift detected: selected signals path changed from '${lock_signals_path}' to '${complexity_signals_file}'. BLOCKED; run revalidate before continuing.")
268+
issues+=("Complexity drift detected: selected signals path changed from '${lock_signals_path}' to '${complexity_signals_file}'. BLOCKED; resolve drift before continuing.")
273269
fi
274270

275271
if [[ -n "${lock_signals_sha256}" ]]; then
276272
if current_signals_sha256="$(sha256_file "${complexity_signals_file}")"; then
277273
if [[ "${current_signals_sha256}" != "${lock_signals_sha256}" ]]; then
278-
issues+=("Complexity drift detected: selected signals content changed since Stage 3 lock. BLOCKED; run revalidate before continuing.")
274+
issues+=("Complexity drift detected: selected signals content changed since Stage 3 lock. BLOCKED; resolve drift before continuing.")
279275
fi
280276
else
281277
issues+=("Unable to compute SHA-256 for ${complexity_signals_file} to enforce complexity drift policy.")
@@ -288,7 +284,7 @@ if [[ -f "${COMPLEXITY_LOCK_FILE}" && "${complexity_ranges_ready}" == "true" ]];
288284
"${lock_goals_max}" != "${complexity_goals_max}" || \
289285
"${lock_phases_min}" != "${complexity_phases_min}" || \
290286
"${lock_phases_max}" != "${complexity_phases_max}" ]]; then
291-
issues+=("Complexity drift detected: scorer-derived ranges changed since Stage 3 lock (${lock_goals_min}-${lock_goals_max}/${lock_phases_min}-${lock_phases_max} -> ${complexity_goals_min}-${complexity_goals_max}/${complexity_phases_min}-${complexity_phases_max}). BLOCKED; run revalidate before continuing.")
287+
issues+=("Complexity drift detected: scorer-derived ranges changed since Stage 3 lock (${lock_goals_min}-${lock_goals_max}/${lock_phases_min}-${lock_phases_max} -> ${complexity_goals_min}-${complexity_goals_max}/${complexity_phases_min}-${complexity_phases_max}). BLOCKED; resolve drift before continuing.")
292288
fi
293289
else
294290
issues+=("Complexity lock file has invalid range metadata: ${COMPLEXITY_LOCK_FILE}")

0 commit comments

Comments
 (0)