The reading
From the #19014 dev's report (5729818025): a Claude Code Bash(...) permission rule is a literal PREFIX match up to its first glob. The landing-call allow rules the maintainer is committing (#19014 / objectui #9862) read Bash(curl -sS -X POST https://api.github.com/repos/<repo>/pulls/*/ccr/ready_for_review *) and Bash(curl -sS -X PUT …/ccr/auto_merge *), so they match ONLY a command that begins curl -sS -X POST https://api.github.com/repos/… — the bare, unquoted url directly after the verb, every header and data flag AFTER it. Measured in the dev's session: its own card reads spelled curl -sS -H … "https://…" and curl -sS -X GET -H … "https://…" matched none of the 47 existing allow rules for the same reason and fell to the classifier (which happened to allow them). Nothing in .claude/skills/** or scripts/pm/** prescribes the flag order — a grep for curl -sS finds no invocation example at all.
⇒ With the four lines committed, a seat that types the landing act in its habitual shape (-H first, quoted url) still reaches the classifier, and this shift's symptom (seven green PRs waiting for a human) reproduces with every rule in place.
What is owed (references layer, one PR)
One row in references/rest-channel.md (and the landing rows :48 / :52 of references/landing-operations.md if they spell the call) prescribing the spelling that the allow rules match, verbatim — e.g. curl -sS -X POST https://api.github.com/repos/objectstack-ai/objectstack/pulls/<n>/ccr/ready_for_review -H "Authorization: Bearer $GH_TOKEN" -H "Content-Type: application/json" -d '{}' — with the reason (literal-prefix match) in one clause, and the same for the PUT …/ccr/auto_merge call with {"merge_method":"SQUASH"}. ⛔ Not a rule widening; the rule text stays the maintainer's. references/ ⇒ lands through the queue after the seat's contract-tier review (ratchet: rest-channel.md 82 — fold or pay).
Dedup: the corpus read 2026-09-18 for literal prefix, flag order, curl -sS -X — none; #19014 / objectui #9862 carry the rules themselves, #18469 the classifier's non-determinism. Dedup words: allow rule literal prefix, landing command spelling, curl flag order, rest-channel spelling row.
Provenance: filed by the domain:skills seat (session_01BTeBejoPUvRHN8WdAJC6oF, seat post #7623) from the #19014 report, 2026-09-18T12:15Z. Labels domain:skills · priority:p2 · pm:queue set by the seat (its own lane); the triage seat may re-grade.
Generated by Claude Code
The reading
From the #19014 dev's report (5729818025): a Claude Code
Bash(...)permission rule is a literal PREFIX match up to its first glob. The landing-call allow rules the maintainer is committing (#19014 / objectui #9862) readBash(curl -sS -X POST https://api.github.com/repos/<repo>/pulls/*/ccr/ready_for_review *)andBash(curl -sS -X PUT …/ccr/auto_merge *), so they match ONLY a command that beginscurl -sS -X POST https://api.github.com/repos/…— the bare, unquoted url directly after the verb, every header and data flag AFTER it. Measured in the dev's session: its own card reads spelledcurl -sS -H … "https://…"andcurl -sS -X GET -H … "https://…"matched none of the 47 existing allow rules for the same reason and fell to the classifier (which happened to allow them). Nothing in.claude/skills/**orscripts/pm/**prescribes the flag order — a grep forcurl -sSfinds no invocation example at all.⇒ With the four lines committed, a seat that types the landing act in its habitual shape (
-Hfirst, quoted url) still reaches the classifier, and this shift's symptom (seven green PRs waiting for a human) reproduces with every rule in place.What is owed (references layer, one PR)
One row in
references/rest-channel.md(and the landing rows :48 / :52 ofreferences/landing-operations.mdif they spell the call) prescribing the spelling that the allow rules match, verbatim — e.g.curl -sS -X POST https://api.github.com/repos/objectstack-ai/objectstack/pulls/<n>/ccr/ready_for_review -H "Authorization: Bearer $GH_TOKEN" -H "Content-Type: application/json" -d '{}'— with the reason (literal-prefix match) in one clause, and the same for thePUT …/ccr/auto_mergecall with{"merge_method":"SQUASH"}. ⛔ Not a rule widening; the rule text stays the maintainer's.references/⇒ lands through the queue after the seat's contract-tier review (ratchet: rest-channel.md 82 — fold or pay).Dedup: the corpus read 2026-09-18 for
literal prefix,flag order,curl -sS -X— none; #19014 / objectui #9862 carry the rules themselves, #18469 the classifier's non-determinism. Dedup words:allow rule literal prefix,landing command spelling,curl flag order,rest-channel spelling row.Provenance: filed by the
domain:skillsseat (session_01BTeBejoPUvRHN8WdAJC6oF, seat post #7623) from the #19014 report, 2026-09-18T12:15Z. Labelsdomain:skills·priority:p2·pm:queueset by the seat (its own lane); the triage seat may re-grade.Generated by Claude Code