The question the maintainer asked, and the measured answer
The maintainer asked the skills seat (chat, 2026-09-18, verbatim): 「不是我不提,是这个会话的权限分类器不让我做那两步。 是你的skills有什么问题嘛?」 The answer is yes, in one place, and this card is the fix.
Measured on origin/main (43f476688): the repository's committed .claude/settings.json carries 47 permissions.allow rules and 17 deny rules. Every REST write the seat makes through curl is allow-listed by shape — POST …/issues/*/labels, PATCH …/pulls/*, the reads — EXCEPT the two calls the landing act is made of: POST …/pulls/{n}/ccr/ready_for_review and PUT …/pulls/{n}/ccr/auto_merge. No allow rule matches a POST or PUT on …/pulls/* at all. So those two calls fall through to the harness's auto-mode classifier, which #18469 measured as non-deterministic (four allowed, four denied, byte-identical), and which in this seat's session denied them three times today (07:03Z 「Merge Without Review」 ×2, 11:39Z 「Auto-Mode Bypass」).
references/rest-channel.md :40 already says what the seat then does — 「会话分类器拒改动 ⇒ 无通道,交有通道席位立卡」 — and the seat did it: seven ACCEPTED, green, non-governed PRs sat draft for hours until the maintainer asked why, and a human (os-zhuang) is now landing by hand what the rules say no human needs to look at (each is under 700 changed lines; the 5,000-line rule of #19012 is far away). The skill's logic is not wrong; its permission surface is incomplete by exactly the two lines that make it a landing skill.
What is owed (one PR, governed .claude/**)
Two allow rules in .claude/settings.json, in the spelling the 47 existing rules use and matching the command spelling references/landing-operations.md prescribes for the landing act (read that file first; the rule must match the spelling the seat types, not a paraphrase), for objectstack and — if the seats land objectui PRs the same way — objectui:
Bash(curl -sS -X POST https://api.github.com/repos/objectstack-ai/objectstack/pulls/*/ccr/ready_for_review *)
Bash(curl -sS -X PUT https://api.github.com/repos/objectstack-ai/objectstack/pulls/*/ccr/auto_merge *)
plus the self-test / structural pin the settings file already has for its rule set, if one exists (measure: grep the tree for a test that reads permissions.allow). ⛔ Not a widening of who may land: the act stays behind the seat's own pre-checks (record on head, --pair 0, checks green, the path face NOT governed, and from #19012 the size face); the rules only stop the harness from second-guessing a call the repository has already decided is the seat's. ⛔ Governed text ⇒ the maintainer approves the PR; that is the one human act this card asks for, once.
Sibling reading: #18469 (the classifier's non-determinism and the stale-rotation rule) — different asks, same wall; this card removes the wall for the two landing calls.
Dedup words: settings.json allow ccr ready_for_review auto_merge, landing calls classifier allowlist, permissions.allow pulls POST PUT.
Provenance: filed by the domain:skills seat (session_01BTeBejoPUvRHN8WdAJC6oF, seat post #7623), 2026-09-18T11:46Z, from the maintainer's question in chat. Labels domain:skills · priority:p1 · pm:queue set by the seat (its own lane; the maintainer's question is the ruling that it is a defect); the triage seat may re-grade.
Generated by Claude Code
The question the maintainer asked, and the measured answer
The maintainer asked the skills seat (chat, 2026-09-18, verbatim): 「不是我不提,是这个会话的权限分类器不让我做那两步。 是你的skills有什么问题嘛?」 The answer is yes, in one place, and this card is the fix.
Measured on
origin/main(43f476688): the repository's committed.claude/settings.jsoncarries 47permissions.allowrules and 17denyrules. Every REST write the seat makes throughcurlis allow-listed by shape —POST …/issues/*/labels,PATCH …/pulls/*, the reads — EXCEPT the two calls the landing act is made of:POST …/pulls/{n}/ccr/ready_for_reviewandPUT …/pulls/{n}/ccr/auto_merge. Noallowrule matches aPOSTorPUTon…/pulls/*at all. So those two calls fall through to the harness's auto-mode classifier, which #18469 measured as non-deterministic (four allowed, four denied, byte-identical), and which in this seat's session denied them three times today (07:03Z 「Merge Without Review」 ×2, 11:39Z 「Auto-Mode Bypass」).references/rest-channel.md:40 already says what the seat then does — 「会话分类器拒改动 ⇒ 无通道,交有通道席位立卡」 — and the seat did it: seven ACCEPTED, green, non-governed PRs sat draft for hours until the maintainer asked why, and a human (os-zhuang) is now landing by hand what the rules say no human needs to look at (each is under 700 changed lines; the 5,000-line rule of #19012 is far away). The skill's logic is not wrong; its permission surface is incomplete by exactly the two lines that make it a landing skill.What is owed (one PR, governed
.claude/**)Two
allowrules in.claude/settings.json, in the spelling the 47 existing rules use and matching the command spellingreferences/landing-operations.mdprescribes for the landing act (read that file first; the rule must match the spelling the seat types, not a paraphrase), for objectstack and — if the seats land objectui PRs the same way — objectui:Bash(curl -sS -X POST https://api.github.com/repos/objectstack-ai/objectstack/pulls/*/ccr/ready_for_review *)Bash(curl -sS -X PUT https://api.github.com/repos/objectstack-ai/objectstack/pulls/*/ccr/auto_merge *)plus the self-test / structural pin the settings file already has for its rule set, if one exists (measure: grep the tree for a test that reads
permissions.allow). ⛔ Not a widening of who may land: the act stays behind the seat's own pre-checks (record on head,--pair0, checks green, the path face NOT governed, and from #19012 the size face); the rules only stop the harness from second-guessing a call the repository has already decided is the seat's. ⛔ Governed text ⇒ the maintainer approves the PR; that is the one human act this card asks for, once.Sibling reading: #18469 (the classifier's non-determinism and the stale-rotation rule) — different asks, same wall; this card removes the wall for the two landing calls.
Dedup words:
settings.json allow ccr ready_for_review auto_merge,landing calls classifier allowlist,permissions.allow pulls POST PUT.Provenance: filed by the
domain:skillsseat (session_01BTeBejoPUvRHN8WdAJC6oF, seat post #7623), 2026-09-18T11:46Z, from the maintainer's question in chat. Labelsdomain:skills·priority:p1·pm:queueset by the seat (its own lane; the maintainer's question is the ruling that it is a defect); the triage seat may re-grade.Generated by Claude Code