Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
15 commits
Select commit Hold shift + click to select a range
5e60eab
Drop this repo's own PR numbers from rule prose
edbert-bot Sep 10, 2026
3b37920
Reject a bare #N citing this repo in rule prose
edbert-bot Sep 10, 2026
d3b9142
invoker: wf-1788998779228-5/ban-pr-refs-in-rule-text — Review claim: …
edbert-bot Sep 10, 2026
aefda70
invoker: wf-1788998779228-5/verify-ban-pr-refs — Review claim: the wi…
edbert-bot Sep 10, 2026
68e82f1
invoker: wf-1788998779228-5/verify-ban-pr-refs — Review claim: the wi…
edbert-bot Sep 10, 2026
8ad3eb4
invoker: wf-1788998779228-5/verify-ban-pr-refs — Review claim: the wi…
edbert-bot Sep 10, 2026
346e7ce
invoker: wf-1788998779228-5/clean-existing-pr-refs — Review claim: no…
edbert-bot Sep 10, 2026
89ea734
invoker: wf-1788998779228-5/clean-existing-pr-refs — Review claim: no…
edbert-bot Sep 10, 2026
ade377d
Close dangling clauses left by the PR-number cleanup
edbert-bot Sep 10, 2026
4981a58
invoker: wf-1788998779228-5/clean-existing-pr-refs — Review claim: no…
edbert-bot Sep 10, 2026
9993225
invoker: wf-1788998779228-5/verify-clean — Review claim: the tree is …
edbert-bot Sep 10, 2026
e49d03d
invoker: wf-1788998779228-5/verify-clean — Review claim: the tree is …
edbert-bot Sep 10, 2026
576f069
invoker: wf-1788998779228-5/verify-clean — Review claim: the tree is …
edbert-bot Sep 10, 2026
a1e2978
Merge experiment/wf-1788998779228-5/verify-ban-pr-refs/g1.t4.a-ae49aa…
edbert-bot Sep 10, 2026
791b960
Merge experiment/wf-1788998779228-5/verify-clean/g1.t6.a-a6b471424-fe…
edbert-bot Sep 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion corpus/CLAUDE.learned.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ Engine-only install drops this file; reflect Accepted global rules land here.
- When a fix changes which identity, binary, or database a process uses, verify the one the *service* resolves, not the one your shell resolves. Same session: `which invoker-cli` from an ssh login returned a 0.1.0 system install under `/usr/lib/node_modules`, while the owner process's own `PATH` resolved a different 0.1.1 binary under `~/.local/npm-global/bin`; and a worker's inventory query shelled a checkout script that opened a database holding a week-old snapshot (60 workflows, newest 8 days old) instead of the live owner's (18 workflows, newest that day).
- Absence of a field in a projection (CLI, MCP, or API output) is not proof of absent state. Say "not projected" and find the emitter before retrying, resubmitting, or switching agents. Seen once: a task sat in `needs_input` with its reason stored by the owner but omitted by every headless query; the session guessed three causes (usage limit, agent switch, dirty branch) and resubmitted twice before reading the emitter, which then took four minutes.
- When delegating a file-finding task to a subagent and two files could plausibly hold the same answer (a duplicate, a moved file, a same-named symbol in two packages), tell the subagent to state whether each file:line claim is "read-confirmed" (it opened the actual reference/import and traced it) or "name-matched" (it assumes the file is the one in use because the name/path looked right). A subagent that reasons by name-proximity instead of tracing the real reference can hand back a confident wrong file — a judgment call about how the subagent qualifies its own confidence, not something a mechanical check can catch. Seen once: a subagent named a dead, unused duplicate file as the source of a bug; the citation was relayed as fact for three turns before a direct Read caught it.
- A `file:line` citation, mine or a subagent's, also names the ref it was read at: working tree, `HEAD`, `origin/<base>`, or the installed bundle. A working-tree read in a checkout with untracked or modified files under the cited path is name-matched, not read-confirmed, until the same line is shown at the ref the change will actually run on. Subagent prompts that ask for read-confirmed vs name-matched must also ask for the ref. Seen repeatedly: a fix was planned against `scripts/e2e-regression-watch.mjs:330` read on a dirty feature branch after `origin/master` had already removed it (#11593); a launch-time freshness gate was misdiagnosed from an untracked copy of `task-specification-preflight.ts`; three Explore subagents reported branch-local lines as read-confirmed. Third instance after the memory `verify-bug-findings-against-master`.
- A `file:line` citation, mine or a subagent's, also names the ref it was read at: working tree, `HEAD`, `origin/<base>`, or the installed bundle. A working-tree read in a checkout with untracked or modified files under the cited path is name-matched, not read-confirmed, until the same line is shown at the ref the change will actually run on. Subagent prompts that ask for read-confirmed vs name-matched must also ask for the ref. Seen repeatedly: a fix was planned against `scripts/e2e-regression-watch.mjs:330` read on a dirty feature branch after `origin/master` had already removed it (Invoker #11593); a launch-time freshness gate was misdiagnosed from an untracked copy of `task-specification-preflight.ts`; three Explore subagents reported branch-local lines as read-confirmed. Third instance after the memory `verify-bug-findings-against-master`.
- When a pipeline switches from test/synthetic inputs to my real inputs, re-derive or explicitly re-validate every artifact built under the old conditions — voice clones, cached device lists, presigned URLs, browser sessions that predate a driver install. State which artifacts were rebuilt and which were kept. Seen once: a voice clone built from a bench test-mp3 silently became the live demo voice ("WHY IS MY VOICE ROBOTIC?"), and a Chrome that predated the BlackHole driver install couldn't enumerate it until fully relaunched.

# Session hygiene (apply everywhere, every project)
Expand Down
4 changes: 3 additions & 1 deletion engine/hooks/skill-usage-log/tests/test_hooks.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,9 @@ def test_disabled_flag_writes_nothing(self):
state_dir=tmp,
)
self.assertEqual(read_lines(tmp), [])
self.assertFalse(os.path.exists(claude_pretooluse_log.log_path()))
self.assertFalse(
os.path.exists(os.path.join(tmp, claude_pretooluse_log.LOG_FILE_NAME))
)

def test_missing_skill_name_writes_nothing(self):
with tempfile.TemporaryDirectory() as tmp:
Expand Down
2 changes: 1 addition & 1 deletion product/skills/ship-a-detector/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ Measured on this repo's own history: 65 of 185 merged PRs touch
`engine/hooks/`, 13 of 28 hooks needed post-ship repair, and 37 PRs did
nothing but repair a shipped detector. `diu-stop` took 8, `pr-schema-gate`
7, `wrong-check-reflect` 6, `scope-lock` 4. `gh-write-verification` hit two
separate known kinds in three days (#322, #323, #324). None of those were
separate known kinds in three days. None of those were
new problems; each was a kind already fixed in another hook.

## The playbook
Expand Down
Loading
Loading