Skip to content

fix(obligations): VALID AT pickers take the newest stamp from the whole report (#155) - #252

Closed
MendixMau wants to merge 1 commit into
masterfrom
fix/obligation-valid-at-picker
Closed

MendixMau wants to merge 1 commit into
masterfrom
fix/obligation-valid-at-picker

Conversation

@MendixMau

Copy link
Copy Markdown
Owner

What changed and why

bin/lib/obligation-check.sh had two VALID AT pickers (_ob_stale and the proof check's vhash) that took the first stamp within the first 8000 bytes. Reports with per-build addenda therefore went false-STALE. Both now read the whole file and take the last stamp. The 4000-byte "N of M" denominator read is untouched. Fixes #155.

New fixture tests/wave2/test-obligation-valid-at.sh builds a scratch git repo with two mdlsource commits and runs the real checker: T1 old-only stamp is STALE (control), T2 old stamp plus a HEAD addendum is not STALE, T3 HEAD stamp past byte 8000 is not STALE. Passes 3/3 with the fix, 1/3 without.

Field evidence

The build behind #155 (field run 2026-09-26, requirements-driven app).

Checklist

  • Size cap: 3 files
  • Test tier: T1 (fixture runs the real script against a scratch repo). The fixture's report files are hand-built from the checker's own stamp shape, since there is no tool output to capture.
  • Instrument rules: both pickers, same behaviour
  • CHANGELOG line under Unreleased
  • bash -n, check-portability, check-scripts, leak guard, check-pr-discipline clean

🤖 Generated with Claude Code

https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw


Generated by Claude Code

_ob_stale and the proof check took `head -c 8000 | ... | head -1`, the first stamp in the
first 8000 bytes, so a review file with dated per-build addenda was judged by its headline
stamp and went false-STALE. Now reads the whole file and takes `tail -1`.

New fixture tests/wave2/test-obligation-valid-at.sh (git scratch repo, synthetic reports):
control old-only stamp -> STALE; old then HEAD stamp -> not STALE; HEAD stamp past 8000 bytes
-> not STALE. Result 3/3 pass post-fix; pre-fix 1/3 (T2, T3 fail). Golden input is not a
tool-output parse here, so hand-built reports are the stamp shape from module-review.md.
Also ran bash -n, check-portability, check-scripts, leak guard, check-pr-discipline: clean.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
MendixMau added a commit that referenced this pull request Oct 8, 2026
Squash of integration/2026-10-08, which merges:

- #225 perf(ui-loop): test-stack-up.sh recognises a live mxcli run --local
- #231 fix(sync): sync-project.sh no longer exits 1 silently before its bin/ refresh
- #242 fix(init): local by default, no Dev Container
- #243 docs(lint): process/lint-backlog.md, the lint rollout plan
- #247 new(lint): the lint gate keeps a ledger
- #249 learn(test): skills/e2e-locators-that-lie.md
- #250 learn(skills): unhappy-path-testing.md
- #251 fix(testing-shape): mxcli test --local shares the deploy directory (#230)
- #252 fix(obligations): LOOK staleness reads the newest VALID AT stamp (#155)
- #253 docs(lint): quality-source review, Batch 4 backlog rows and skill additions
- #254 fix(lint): CONV020 works out of the box, page navigation counts as feedback (#229, #245)
- #255 fix(e2e): journey-runner rung 2 runs for a negative-only span claim (#150)
- #256 fix(gates): Stage 6 Surface, source-sufficiency title, ${JOURNEY_DIR} manifest token (#233, #234, #235)

Verified on the branch: tests/run-tests.sh 33/0, tests/test-lint-delivery.sh ALL GREEN, tests/wave2 73/75 (two environmental), render-routing --check, check-scripts, check-portability, leak guard, check-no-private-citations, check-pr-discipline all clean; scaffold smoke run without crashes.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
@MendixMau

Copy link
Copy Markdown
Owner Author

Merged into master via integration PR #258 (squash 9dd9be4), on the maintainer's approval. Closing this PR; its branch is part of that squash.


Generated by Claude Code

@MendixMau MendixMau closed this Oct 8, 2026
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.

obligation-check.sh: LOOK staleness reads the FIRST VALID AT in a report, so a review file with dated addenda goes STALE

2 participants