fix(board): the verify nudge ignored needs:you, so its own escape did not exit it - #106
Open
Dygreens wants to merge 1 commit into
Open
fix(board): the verify nudge ignored needs:you, so its own escape did not exit it#106Dygreens wants to merge 1 commit into
Dygreens wants to merge 1 commit into
Conversation
… not exit it (AEAB-9) The nudge closes with "Cards that genuinely cannot be verified by you ... should be tagged `needs:you` so they surface in the owner digest rather than sitting here indefinitely." Neither `done_verify_candidates` nor `done_card_count` ever touched `issue_tags`, so taking that escape changed nothing. AEAB-5 carried the tag for two days and was nudged again today. That is ethos rule 6: walk the documented escape using only the sanctioned tooling, and if you cannot, the constraint is theatre. Here the sanctioned tooling was `amux board needsyou`, it worked, and the loop kept running anyway. It also double-nagged. The `needsyou.renag` job in this same file already chases the HUMAN on these cards every 3d. Nudging the agent as well asks the one party who by construction cannot answer. Not a missing capability — a missed consumer. `select_pickup` already excludes these correctly, with the same LIKE form, and its comment says the two loops must never disagree about which cards are human-blocked. This is the AC-223 shape one tier down: that card closed the auto-pickup hole and noted in its own fix that the representation question stayed open. Factored the fragment into `needs_human_sql()` alongside `unverifiable_types_sql()` so the selector and the counter cannot drift; the file already warns that if they do, the prompt states a total its own list cannot account for. `LIKE 'needs:you%'` not `= 'needs:you'`, so a sub-tagged ask (`needs:you:decision`) does not slip through — the exact split that made the python advance path leak. The test discriminates: reverted to an empty fragment it fails, listing all three tagged cards leaking through. Its N-1/N-5 control is load-bearing — a predicate matching EVERYTHING also yields an empty list and would pass a bare "the tagged card is absent" assertion, which is the unbounded-filter failure this repo has shipped twice. cargo test --workspace: 1011 + 189 + 27 + ... across 37 binaries, 0 failed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01B4vuEScunv4K6RMwQoT9xx Amux-Session: amux-errors-and-bugs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The bug
The verify nudge ends by telling the session how to get out:
Neither
done_verify_candidatesnordone_card_countever referencedissue_tags. So the escape it names does not exit it. AEAB-5 was taggedneeds:youon 2026-08-14 viaamux board needsyou— the sanctioned command, which worked — and the nudge fired on it again today.Ethos rule 6: walk the documented escape using only the sanctioned tooling; if you cannot, the constraint is theatre. This one is walkable and still does nothing.
It also nags twice.
needsyou.renagin this same file already chases the human on these cards every 3d. The verify nudge then asks the agent, who by construction cannot answer — the human owes the decision.Why this is a missed consumer, not a missing capability
select_pickupin the same file already excludes these correctly, and its comment is explicit that the loops must not disagree:This is the AC-223 shape one tier down. That card closed the auto-pickup hole and said in its own fix note that the representation question (tag vs
status=needsyou) stayed open. Each remaining consumer that readsissueswithout joiningissue_tagsis another instance; this is one of them.The change
Factored the exclusion into
needs_human_sql(), sitting next to the existingunverifiable_types_sql(), and applied it to both queries. They must move together — the file's own comment on the counter says that if they diverge, "the prompt states a total its own list cannot account for."LIKE 'needs:you%'rather than= 'needs:you', matchingselect_pickup, so a sub-tagged ask (needs:you:decision) does not slip past. That exact split is what leaked in the python advance path.Firing is unaffected otherwise: the caller already short-circuits on
total == 0, so a lane whose only done cards are human-blocked now goes quiet instead of nagging forever.Test
a_card_tagged_needs_you_is_not_nudged_at_its_agent— five done cards: untagged,needs:you,NEEDS:YOU,needs:you:decision, and an unrelatedmobiletag.It discriminates. Reverted to an empty fragment it fails with:
The
N-1/N-5control is load-bearing rather than decorative: a predicate matching everything also produces an empty candidate list, and would pass a bare "the tagged card is absent" assertion. That is the unbounded-filter failure this repo has shipped twice.cargo test --workspace: every one of 37 result linesok, 0 failed.cargo clippy -p amux-server --lib: clean. (cargo fmt --checkreports diffs across ~165 files including ones untouched here; CI does not run it.)🤖 Generated with Claude Code
https://claude.ai/code/session_01B4vuEScunv4K6RMwQoT9xx