fix(#4830): re-land #4768's letter-suffix phase-id fix and its lint-phase-id-drift ratchets on current next (#4873)
* fix(#4830): re-land #4768's letter-suffix phase-id fix and its lint-phase-id-drift ratchets on current next Commit740ba0d8a(#4781) removed every change #4768 had merged for #4748: the first-non-digit split at execute-phase.md's two arithmetic sites, the init-emitted `padded_phase` the REVIEW.md lookup binds instead of `printf "%02d"`, the canonical-grammar extractions in autonomous.md and plan-review-convergence.md, the `.changeset/zesty-wolves-tumble.md` fragment, and the three lint-phase-id-drift ratchets with their tests. The guard and the code it guarded left together, so nothing went red. This is a cherry-pick of092d9256bonto current `next`, resolved against the #4683 threat-id fields on execute-phase.md's Parse-JSON line, with the changeset `pr:` reset to the placeholder and the compact-content benchmark baseline regenerated against the current base. (cherry picked from commit092d9256b8) Emitted-Drift-Ack-Growth: autonomous.md — restores #4768's canonical-grammar extraction and its explanatory comment for --from/--to/--only Emitted-Drift-Ack-Growth: execute-phase.md — restores #4768's first-non-digit split at two arithmetic sites and the padded_phase binding for the REVIEW.md lookup Emitted-Drift-Ack-Growth: plan-review-convergence.md — restores #4768's canonical-grammar phase extraction and its comment Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AX7LXxc3uAkGki6iaYiAMP * chore(#4830): set changeset fragment pr to 4873 --------- Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com> Co-authored-by: Tom Boucher <trekkie@nomorestars.com>
This commit is contained in:
@@ -27,16 +27,18 @@ Returns JSON with:
|
||||
|
||||
## Manual Normalization (Legacy)
|
||||
|
||||
Zero-pad integer phases to 2 digits. Preserve decimal suffixes.
|
||||
Zero-pad the leading integer to 2 digits. Preserve a letter suffix and any dotted
|
||||
segments — the canonical grammar in `src/phase-id.cts` (`normalizePhaseName`):
|
||||
`8 → 08`, `2.1 → 02.1`, `3A → 03A`, `23.1.2 → 23.1.2`.
|
||||
|
||||
```bash
|
||||
# Normalize phase number
|
||||
if [[ "$PHASE" =~ ^[0-9]+$ ]]; then
|
||||
# Integer: 8 → 08
|
||||
PHASE=$(printf "%02d" "$PHASE")
|
||||
elif [[ "$PHASE" =~ ^([0-9]+)\.([0-9]+)$ ]]; then
|
||||
# Decimal: 2.1 → 02.1
|
||||
PHASE=$(printf "%02d.%s" "${BASH_REMATCH[1]}" "${BASH_REMATCH[2]}")
|
||||
# #4748: one branch for the whole canonical token — digits, optional [A-Z],
|
||||
# dotted segments. Pad through $((10#…)) so an already-padded `08` is not read
|
||||
# as octal by printf; anything non-canonical passes through untouched.
|
||||
if [[ "$PHASE" =~ ^([0-9]+)([A-Z]?)((\.[0-9]+)*)$ ]]; then
|
||||
PHASE_INT=${BASH_REMATCH[1]}
|
||||
PHASE=$(printf "%02d" "$((10#$PHASE_INT))")${BASH_REMATCH[2]}${BASH_REMATCH[3]}
|
||||
fi
|
||||
```
|
||||
|
||||
|
||||
@@ -297,8 +297,9 @@ After completing a `type: tdd` plan, the executor validates the git log:
|
||||
# The commit protocol promises no zero-padding for ${PHASE}/${PLAN} — strip both and
|
||||
# match the commit-scope position anchored (#4003). #4619: PHASE may be decimal/
|
||||
# N-segment; zero-strip only the leading integer segment, escape the rest.
|
||||
PHASE_INT=${PHASE%%.*}; PHASE_FRAC=${PHASE#"$PHASE_INT"}
|
||||
PHASE_N="$((10#$PHASE_INT))${PHASE_FRAC//./\\.}"
|
||||
# #4748: it may also carry a letter suffix (03A), so split at the first non-digit.
|
||||
PHASE_INT=${PHASE%%[!0-9]*}; PHASE_REST=${PHASE#"$PHASE_INT"}
|
||||
PHASE_N="$((10#$PHASE_INT))${PHASE_REST//./\\.}"
|
||||
PLAN_N=$((10#${PLAN}))
|
||||
# Check for RED gate commit
|
||||
git log --oneline -E --grep="^test\((0*${PHASE_N})-(0*${PLAN_N})\):" | head -1
|
||||
|
||||
Reference in New Issue
Block a user