Skip to content

docs(rules): a rejected flag reads as "no results"; CI waits race check registration - #342

Merged
laurigates merged 1 commit into
mainfrom
docs/gh-search-false-negative-and-check-race
Jul 28, 2026
Merged

docs(rules): a rejected flag reads as "no results"; CI waits race check registration#342
laurigates merged 1 commit into
mainfrom
docs/gh-search-false-negative-and-check-race

Conversation

@laurigates

Copy link
Copy Markdown
Owner

Two silent-wrong-answer traps, both hit live this session while deduping an upstream report and merging a pair of PRs.

tool-use-patterns.md — a rejected flag looks exactly like "no results"

Any cmd … | jq/grep whose non-zero exit yields empty stdout masquerades as a legitimate empty result. The worst place for that is a dedup step: you conclude nobody reported the bug and file a duplicate.

Live instance: gh search issues --state all is invalid — that flag takes only {open|closed}; all belongs to gh issue list. It prints usage to stderr, so a --jq pipeline emits nothing. That produced six consecutive false "no duplicate" verdicts, caught by exactly one control run against a title I knew existed, which failed identically and exposed the bad flag.

The durable rule is the control-test discipline from never-fabricate-test-identifiers.md applied to search: control-test every negative that gates an action.

git-hazards.md #7 — waiting for CI races check registration

A loop on "zero pending checks" can exit immediately after a push or update-branch, because zero-pending is trivially true before the jobs are registered. Observed state=CLEAN on a single check while three CI jobs had not yet appeared — merging on that read merges untested code. Gate on both nothing-pending and a minimum expected check count.

Same root cause as the mergeability race directly above it in the file: an asynchronously-populated field read once, too early.

Budget bump — 110,000 → 114,000

The test file asks for a justification in the commit message, so: the always-loaded surface had reached 109,998 of 110,000 — two bytes free. At that point the budget had stopped being a cleanup trigger and become a hard stop on any new rule content.

Good-faith steps taken before bumping:

  • both additions compressed ~50% from their first draft
  • both host files brought back under PER_FILE_CAP_BYTES (9,917 and 9,706, from 10,835 and 10,147)

The cleanup pass is deferred, not skipped. The standing CONSOLIDATE candidate — multi-model-delegation.md (~6.6 kB), which largely duplicates the agent-patterns-plugin:multi-model-delegation skill — is recorded in the test file's comment so the budget can ratchet back toward 110,000 once it lands. It was being edited by a concurrent session at the time, so touching it here would have collided.

dot_zshrc.tmpl was modified in the working tree by other work and is deliberately not included.

🤖 Generated with Claude Code

https://claude.ai/code/session_01PKbmsKBLRJMKNejkwujokZ

…ck registration

Two silent-wrong-answer traps, both hit live while deduping and merging.

tool-use-patterns: any `cmd | jq/grep` whose NON-ZERO exit yields empty stdout
masquerades as a legitimate empty result. Worst case is a dedup step — you
conclude nobody reported the bug and file a duplicate. Live instance:
`gh search issues --state all` is invalid (that flag takes only open|closed;
`all` belongs to `gh issue list`), so it prints usage to stderr and a --jq
pipeline emits nothing. Six consecutive false "no duplicate" verdicts, caught
by exactly one control run against a title known to exist. The rule is the
control-test discipline from never-fabricate-test-identifiers, applied to
search: control-test every negative that gates an action.

git-hazards #7: waiting for CI races check REGISTRATION, not just completion.
A loop on "zero pending checks" can exit immediately after a push or
update-branch, because zero pending is trivially true before the jobs are
registered. Observed state=CLEAN on a single check while three CI jobs had not
yet appeared; merging there merges untested. Gate on both nothing-pending and
a minimum expected check count. Same root cause as the mergeability race
directly above it: an async field read once, too early.

Budget: raises TOTAL_BUDGET_BYTES 110,000 -> 114,000, with the justification
the test file requires. The surface had reached 109,998 of 110,000 — 2 bytes
free — so the budget had stopped being a cleanup trigger and become a hard
stop on any new rule content. Both additions were compressed ~50% before
bumping, and both host files are back under PER_FILE_CAP_BYTES (9,917 and
9,706). The cleanup pass is deferred, not skipped: the standing CONSOLIDATE
candidate is recorded in the test file so the budget can ratchet back down.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKbmsKBLRJMKNejkwujokZ
@laurigates laurigates self-assigned this Jul 28, 2026
@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Broken Links Detected

Summary

Status Count
🔍 Total 170
✅ Successful 160
⏳ Timeouts 0
🔀 Redirected 0
👻 Excluded 9
❓ Unknown 0
🚫 Errors 1

Errors per input

Errors in exact_dot_claude/docs/prds/daily-catchup.PRD.md


Please fix the broken links before merging.

@github-actions github-actions Bot added documentation Improvements or additions to documentation claude labels Jul 28, 2026
@laurigates
laurigates merged commit 195ad84 into main Jul 28, 2026
7 of 8 checks passed
@laurigates
laurigates deleted the docs/gh-search-false-negative-and-check-race branch July 28, 2026 09:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

claude documentation Improvements or additions to documentation size/s

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant