Skip to content

merge queue: checking #477 on main (2754b47) - #484

Closed
mergify[bot] wants to merge 2 commits into
mainfrom
mergify/merge-queue/d2ec350ba5
Closed

merge queue: checking #477 on main (2754b47)#484
mergify[bot] wants to merge 2 commits into
mainfrom
mergify/merge-queue/d2ec350ba5

Conversation

@mergify

@mergify mergify Bot commented Sep 12, 2026

Copy link
Copy Markdown
Contributor

🎉 This pull request has been checked successfully and will be merged soon. 🎉

#477 is queued for merge on branch main (2754b47).

This pull request has been created by Mergify to check the mergeability of #477.
You don't need to do anything. Mergify will close this pull request automatically when it is complete.

Required conditions of queue rule admin-bypass for merge:

  • check-success = lint
  • check-success = test

Required conditions to stay in the queue:

---
checking_base_sha: 2754b47affca87f33774e1e345771bf5f696febd
previous_check_retries: []
previous_failed_batches: []
pull_requests:
  - number: 477
    scopes: []
scopes: []
...

EdbertChan and others added 2 commits September 11, 2026 23:51
…at ran no check

cat-mode/SKILL.md:269 says a hedge is "a trigger to verify, never a place to
stop". Every evidence hook implemented the opposite: markers.well_formed_tags()
is consumed as equivalent to evidence (prove-it-ship-gate/detect.py), so a
correctly-formed tag silenced the whole stack, was counted nowhere, and was
revisited never. Only malformed and legacy shapes ever fired. The prose forbade
stopping while the tooling rewarded it.

unverified-tag-ledger records each well-formed tag against the session, refuses
a turn that tagged a claim without running any verification tool, and
re-surfaces anything still open on the next prompt. Requiring an ATTEMPT is not
requiring success: run the check, and if it cannot settle the claim the tag is
then honest. stop_hook_active releases the refusal, or the rewrite turn -- which
has no tool call of its own -- would loop forever. A claim is discharged once a
later turn verifies and stops repeating it; one outstanding three turns or more
is reported as a reflect trigger.

Observed 2026-09-11 in a NiceSpeak streaming session: two well-formed tags were
emitted, each ended its turn, neither left a trace. Both are the positive
fixtures in tests/test_hooks.py. Replaying that session's own turn:

  A) tag, zero tools      -> exit=2, "ran no verification tool. Untried
                             claim(s): that it widened scope past the one
                             session I gave it"
  B) same tag after Bash  -> exit=0
  C) stop_hook_active     -> exit=0, no loop
  D) no tag, no tools     -> exit=0

Three of this repo's own gates caught real defects while landing it, and each
fix is in this commit:

- test_every_claude_hook_entrypoint_is_in_settings / TestSubagentStopInheritance:
  the hook shipped with no install_claude_hook.py, so neither entry point
  reached settings.json. Added on diu-stop's pattern, called from install.sh.
- the same two gates again, after the installer was copied from diu-stop and
  kept its bare basename markers. Because this hook uses the same two
  basenames, the idempotent "replace our own entry" step deleted diu-stop's
  entries instead. Markers are now directory-qualified, so an installer only
  ever touches its own entries. Without this, install.sh would have silenced
  diu-stop's word count, evidence and plain-words checks.
- test_no_instructional_file_names_the_retired_marker: the README wrote the
  retired bare marker without naming it as retired.

Lands as one commit because each earlier slice failed those gates on its own,
and a slice that cannot go green alone is not a reviewable slice. The
pre-squash heads are on backup/tagledger-0fc2a13 and backup/tagledger2-81157a3.

subagent_stop opts out with a reason, registered in
tests/test_mirror_subagent_stop.py and docs/ecosystem.md: the ledger is keyed by
session id, so a subagent would log its tags against the parent's ledger, and it
has no next user prompt to be reminded at.

17 hook tests, 10 mirror tests, 6 vocabulary tests, and the full local
tests/test_install.py run all pass.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018u8S5ct3kFhosinSbybc7W
Change-Id: I3466baee81db9fd240f1a527df4610ad5507919a
@mergify mergify Bot closed this Sep 12, 2026
@mergify
mergify Bot deleted the mergify/merge-queue/d2ec350ba5 branch September 12, 2026 07:04
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