Skip to content

fix(dev-loop): close proof-guard gaps from the dev-loop PR stack - #1078

Merged
aaronjmars merged 1 commit into
mainfrom
fix/dev-loop-proof-guards
Sep 18, 2026
Merged

aaronjmars merged 1 commit into
mainfrom
fix/dev-loop-proof-guards

Conversation

@aaronjmars

Copy link
Copy Markdown
Collaborator

Follow-up to the merged dev-loop stack (#1075, #1076, #1077) - closes the review nits.

Changes

  1. aeon.yml proof-head invariant (the real one). The "Commit read-only failure log" step lacked the !startsWith(inputs.dispatch_id, 'prove-') guard that its sibling "Commit results" step has. A proof run re-runs a read-only skill on the PR's attested head branch; on a failed run this step would commit memory/logs/ and push a stray aeonframework commit onto the very head the proof is meant to leave immutable. Fail-closed (the proof then flunks the SHA re-check), but it contradicts the invariant feat(dev-loop): require live behavioral proof, not just review #1075 headlines. Now skipped for prove-* dispatches.

  2. telegram-route.sh target regex. Tightened (#[0-9]+)? -> (#[1-9][0-9]*)? to match the workflow validator in dev-loop-pr.sh. The router no longer accepts #0 / zero-padded issue refs that the workflow rejects downstream (wasting an Actions run). Stale header side-effects note now mentions the chain-runner.yml dispatch path.

  3. Vacuous test guard. test_idea_pipeline_dev_loop_offer.sh's "pick: sends no force-reply" guard captured 0 lines - its sed range start pattern omitted the backticks around ${var} that SKILL.md actually has, so the grep ran on empty input and could never fail. Corrected pattern now captures the 16-line block and still passes.

  4. Regression test. Added a test_telegram_route.sh case asserting a #0 issue ref is rejected at the router edge.

Note: the reviewer's suggested "redundant case-arm" nit on dispatch_dev_loop was not applied - the char class [a-zA-Z0-9_.-] excludes #, so the second case alternative is actually required to match owner/repo#N targets.

Verification

All local tests pass: test_idea_pipeline_dev_loop_offer.sh, test_dev_loop_proof.sh, test_telegram_route.sh (incl. new case). shellcheck -S error clean on telegram-route.sh; aeon.yml parses.

Follow-up nits from reviewing #1075/#1076/#1077 (all merged):

- aeon.yml "Commit read-only failure log" step now also skips prove-*
  dispatches. A proof run re-runs a read-only skill on the PR's attested
  head branch; on a failed run this step would commit memory/logs and push
  a stray commit onto the very head the proof must not move. The sibling
  "Commit results" step already had this guard; this closes the asymmetry.

- telegram-route.sh dev-loop target regex tightened from (#[0-9]+)? to
  (#[1-9][0-9]*)?, matching the workflow validator (dev-loop-pr.sh). The
  router no longer accepts #0 / zero-padded refs that the workflow would
  reject downstream, wasting an Actions run. Header side-effects note now
  mentions the chain-runner.yml dispatch path.

- test_idea_pipeline_dev_loop_offer.sh: the pick: no-force-reply guard was
  vacuous - its sed range start pattern omitted the backticks around ${var}
  that SKILL.md actually has, so it captured 0 lines and could never fail.
  Fixed the pattern (now captures the block, still passes).

- test_telegram_route.sh: added a regression case asserting a #0 issue ref
  is rejected at the router edge.
@aaronjmars
aaronjmars merged commit ba01e9f into main Sep 18, 2026
3 checks passed
@aaronjmars
aaronjmars deleted the fix/dev-loop-proof-guards branch September 18, 2026 16:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant