Skip to content

[finding] the committed .claude/settings.json allow-lists every REST write the seat makes except the two landing calls (ccr/ready_for_review, ccr/auto_merge) — so landing falls to the non-deterministic auto-mode classifier and seven green PRs waited for a human #19014

Description

@os-elon-musk

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions