Skip to content

Charter: the filing door — a card exists only for four classes, every seat paces its writes, and the grading contract closes the gaps it measured (successor of the lost #19494 / #19546) #19570

Description

@os-project-manager

Path: none | tooling | maintainer-directed — dispatched at filing, never queued

Filed by the director seat, summon #25 (session_012GcsUbuqFGBibkEDMRC1eE). Three maintainer sentences govern it, verbatim (chat, 2026-09-21): 「19546 帮我派发处理」; 「刚才 os-sam 又被封号了,也是因为分诊批量处理issue的时候,所以现在 issue 太多对于车队是负担。 19546 我希望在创建issue 的环节就卡死,没必要的issue就不要创建。」; 「19546 卡片好像也丢了,要重新写。你创建一个新的吧,而且注意不要和之前的一模一样」. The two earlier cards on this subject (#19494, then its rebuild #19546) disappeared with the accounts that filed them; this card is written fresh from the seat's own notes, shorter, and carries the maintainer's new direction first. ⛔ It restates nothing from the rulings already on main (ruling #202 B via #19457; the feature axis via #19483; ruling #208 via #19496 / #19497 / #19498).

What the board looks like today

reading (2026-09-21T08:45Z, REST) value
issues created in the last 24 h, objectstack + objectui 183 (116 + 67)
of those, already closed the same day 64
of those, titled [finding] 41
seat accounts suspended by GitHub during bulk issue operations today 2 (their cards vanished with them)

The cost is no longer the dev queue — it is the board itself: every open card is scanned by every seat every fire, every write is a strike against an account's standing, and a third of what gets filed is closed within the day.

Part A — the filing door (the maintainer's direction; lands first)

  1. Four classes, or no card. An issue is created only for (a) a product defect with a named landing spot or a reproduction; (b) a decision only the maintainer can make (needs-user-decision, 速读 + 四棱 on filing); (c) a task the maintainer directed, quoting the sentence; (d) a coordination node that rule 2 requires (a cross-repo or cross-layer parent and its per-layer sub-issues). The body's first line names the letter.
  2. Named non-cards. An instrument's misfire or a gate's false reading (ruling 🔗 Broken links detected in documentation #208 R2: no dev — now also no card); a seat's own mistake, protocol observation or lesson (seat post or closing brief); a finding outside the three classes (formerly 「首触即关」, now never filed); a rebuild of a lost card unless it is (a)–(d) on its own merits; any pointer, notice or request a comment on an existing card can carry; a pin, bump or hygiene reminder a sweep re-derives each fire.
  3. Three answers before POST. The filer writes the class letter, the reader who acts on it (which seat, which step) and the dedupe query it ran with the hit count. A card missing any of the three is closed at first touch by triage, ungraded, with one line naming what is missing.
  4. Quota. A seat files at most three new issues per fire; a sweep that finds more folds the rest into one card carrying the list, or into the seat post. Stock cleanup stays in maintainer-confirmed groups of ten (Stock cleanup under ruling #202 B (maintainer 「B(荐)A + 清理存量」, amended to close): the triage seat closes the 90 listed tooling pm:queue cards not_planned #19458's shape).
  5. Paced writes. Every seat spaces its REST writes (issues, comments, labels, closes) by at least three seconds and keeps under forty writes per hour per account; a 429 or a secondary-rate-limit response stops that seat's writes for the rest of the fire, logged on the seat post; no script loops closes without a confirmed group and a pause between writes.

Part B — the grading contract's measured gaps (the seat's notes, each with the card it happened on)

Landing

.claude/skills/pm-dispatch/SKILL.md (〈立卡门〉 beside the filing rules of 〈分诊座位职责〉; the grading lines), references/core-rules.md (twins only), references/platform-readings.md (the reading criteria extend 「零命中须配同主体必中词」). Tier H, the maintainer merges by hand. Ratchet paid in place — the former finding first-touch lines merge into the door; ⛔ no ceiling raise, ⛔ no rule deleted to pay.

Not in this card, each needs the maintainer's own word (ruling #208 R6): a mechanical throttle inside post-stamped.mjs / label-write.mjs; a refusal in label-write.mjs when domain:* / priority:* is written without a pm-state label; a filed.log for filed cards; the backup status written into the board snapshot.

Class: (c). Reader: the domain:skills lane, via the director's dispatched dev. Dedupe: titles over 445 open objectstack cards for 立卡|filing|grading|定级|判据 → #19457 (landed), #19483 (landed), #19127 (landed via #19506); none carries the door.


Generated by Claude Code

Activity

  1. os-project-manager commented on Sep 21, 2026

    @os-project-manager
    CollaboratorAuthor

    Claim: objectstack#19570 — director seat, summon #25, session_012GcsUbuqFGBibkEDMRC1eE, 2026-09-21T09:13Z
    Branch: claude/issue-19570-filing-door
    Seat: director
    Mode: subagent
    Clause-②: no

    Direct dispatch under the maintainer's 「19546 帮我派发处理」 and, after that card vanished, 「19546 卡片好像也丢了,要重新写。你创建一个新的吧,而且注意不要和之前的一模一样」. The dev round already running for the lost #19546 continues on this card: same scope (Part A first, Part B second; the four items under 「Not in this card」 excluded), branch renamed as above, PR closes this number. File surface: .claude/skills/pm-dispatch/SKILL.md, references/core-rules.md, references/platform-readings.md. Base: origin/main after PR #19513 (3e8e2b0d). Review: at-tier, R5 shape. Tier H.


    Generated by Claude Code

  2. os-project-manager commented on Sep 21, 2026

    @os-project-manager
    CollaboratorAuthor

    os-dev-report
    {
    "issue": 19570,
    "status": "done",
    "branch": "claude/issue-19570-filing-door",
    "pr": "#19575",
    "head": "34a97c480a5741169728b67d5911a1b67b7f5c75",
    "session": "session_012GcsUbuqFGBibkEDMRC1eE",
    "premise_still_valid": true,
    "summary": "Part A (the filing door) and Part B (the grading contract's measured gaps) both landed as charter text. A new .claude/skills/pm-dispatch/references/filing-gate.md (61 lines) carries the door's six rules — four classes or no card, the named non-cards, three answers before POST, the quota, paced writes, and writes through the App identity claude[bot] — plus the grading criteria (false green, the four answers, chain inheritance as an upper bound, the three-state checklist test, North Star item 4's two qualifiers) and the reading criteria (the reach radius with both corollaries, the three-part zero, git-ignored directories, exact-name matching, one board enumeration per fire). SKILL.md carries the door and its pointer at :351-:352, the three states at :373, the premise re-read at :365, retriage content-not-shape at :400, the sweep reconciliation at :391, the reading-criteria pointer at :170, and the paced-writes plus identity invariant at :99; core-rules.md mirrors only its twins (:80, :84). Every added line is paid in place: SKILL.md 815 -> 819 against ceiling 819, core-rules.md 151 -> 151, no ceiling raised and no rule deleted (each of the seven lines removed from SKILL.md is present verbatim-in-substance at a line named in the PR body). origin/main (with #19513 merged as 3e8e2b0) is merged into the branch and the one conflict is resolved in favour of both texts.",
    "tests": "Gate families derived on the final tree with node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack at 34a97c4 — 40 commands, byte-identical to the list derived two commits earlier (diff exit 0). All 40 run with the exit code captured before any pipe; all exit 0. Named families: check:pm-skill-ratchet exit 0 (self-test 157 cases; SKILL.md is 819 lines (ceiling 819; headroom 0), core-rules.md is 151 lines (ceiling 151; headroom 0), filing-gate.md is 61 lines (ceiling 61; headroom 0), filing-gate.md: widest table row is 0 bytes (pin 0; headroom 0)); check:pm-widening-tells exit 0 (self-test: 525 cases pass, report-only family, nothing to report on this diff); check:pm-label-desc-cap exit 0 (39 label descriptions ... all <=100 characters); check:pm-skill-id-lint exit 0 (30 file(s) clean (pattern /#[0-9]{3,}/g)) — the new charter text cites no issue number; check:skill-frame-sync exit 0 (77 markdown files scanned for undeclared copies); check:nul-bytes exit 0 (scanned 9134 text file(s) ... no raw ASCII control bytes); check:pm-governed-prose, check:pm-governed-merges, check:pm-dispatch-gates, check:ratchet-remedy-authority, check:self-test-wired all exit 0. Nine of the forty first returned exit 3 PREREQUISITE NOT MET in a fresh worktree; they were re-run green after pnpm install, and check:doc-formula-expressions after turbo run build --filter=@objectstack/formula --filter=@objectstack/lint under scripts/pm/os-verify-lock.sh (VERDICT command-exit 0, held 179s, waited 0s). Exit 3 was read as NOT MEASURED, never as a finding. No ablation applies: this is charter text, not code. Acceptance greps both hit — git grep -n '三态\\|会 fail' .claude reaches SKILL.md:373, and git grep -n '半径' .claude reaches filing-gate.md:48-:56 alongside the pre-existing SKILL.md:168-:169. CI is not waited on; its verdict is in_progress at the time of this report, read at 2026-09-21T09:47Z.",
    "mcp_calls": "0 — no MCP tool was called at all, read or write. Every GitHub read and write went through the REST proxy with curl.",
    "api_writes": "2 REST writes — POST /repos/objectstack-ai/objectstack/pulls (draft PR 19575) and POST /repos//issues/19570/comments (this report, through scripts/pm/post-stamped.mjs). No labels, no assignee, no issues, no PATCH of the PR body, no ready flip, no auto-merge. Git pushes are separate from the REST budget: four pushes to the branch plus one refused branch delete (see open_questions).",
    "open_questions": [
    {
    "question": "The PR create was read back as user.login = os-project-manager, user.type = User — a USER-class write, not the App identity claude[bot] that door rule 6 (which this very PR authors) requires. By platform-readings.md:135 that write is bound to its author and would 404 with the account, which is exactly how #19494 and #19546 were lost. This run filed no new cards after that reading, per the rule.",
    "options": [
    "A — accept for this PR: the branch and its commits survive an account loss, so the maintainer can reopen the PR from the branch; the seat records the User reading on its seat post and the next fire re-reads user.type.",
    "B — hold this PR and re-create it once the Claude account's GitHub connection resolves to the installation identity, so the PR itself is durable."
    ],
    "recommendation": "A, because the durable artefact is the branch, not the PR row: claude/issue-19570-filing-door at 34a97c4 carries every line, and a lost PR is re-openable from it in one write. B costs the whole delivery on a condition no seat can flip — the class is set by the Claude account's GitHub connection, not by the session (platform-readings.md:130-:134)."
    },
    {
    "question": "git push origin :claude/issue-19546-grading-contract-amendments (the pre-rename branch, pushed at cf5f224) was refused with HTTP 403 by GitHub's receive-pack. The agent proxy's own status shows no github.com denial, so the refusal is a permission on ref deletion for this token, not a transport failure. The stale branch is still on origin.",
    "options": [
    "A — a seat with ref-delete permission removes claude/issue-19546-grading-contract-amendments.",
    "B — leave it; it is orphaned but harmless, and it will not be picked up by any sweep because no open card names it."
    ],
    "recommendation": "A, because a branch whose name still carries the vanished card number is a false claim carrier: a seat reading branch names for claim evidence would read it as live work on a card that no longer exists. Per the standard clause the write was not retried through another channel."
    }
    ],
    "out_of_scope_findings": [
    "noted, not filed: references/instrument-discipline.md landed on main (#19513, merged 3e8e2b0) with no CEILINGS row and no max-table-row-bytes pin in scripts/pm/check-skill-line-ratchet.mjs, so a pm-dispatch reference file the map's own header calls covered is silently unratcheted. This PR adds those two rows for its OWN new file but does not touch that one (out of scope). Under the door this PR lands, an instrument-coverage observation is explicitly ⛔ not a card; 承接者: the next domain:skills PR that edits instrument-discipline.md.",
    "noted, not filed: the reading criteria the card places in references/platform-readings.md could not land there — measured, not assumed: that file is 469/469 with ZERO adjacent bullet pairs merging under the 120-byte cap (smallest pair 135 bytes), and dispatch-runbook.md is 241/241 with zero (smallest 122). They land in the new references/filing-gate.md with the pointer at SKILL.md:170, directly under the 零命中须配同主体必中词 line the card names. 承接者: none — this is a placement declared in the PR body, not a defect.",
    "noted, not filed: item ⑪ (one board enumeration per fire) sits in filing-gate.md's 〈读数判据〉 rather than beside SKILL.md's two-level-inventory rules, which have no free line; SKILL.md:170's pointer names 枚举配额 so the reader's path still reaches it. 承接者: none.",
    "noted, not filed: core-rules.md carries only the twins it already had — the three answers at :80 and the door headline at :84. The quota, the pacing numbers and the identity rule have no twin there, and that file is at 151/151 with 「⛔ 不新增规则」 in its own header, so they live in SKILL.md and filing-gate.md only. 承接者: none."
    ]
    }


    Generated by Claude Code

  3. os-project-manager commented on Sep 21, 2026

    @os-project-manager
    CollaboratorAuthor

    os-dev-report
    {
    "issue": 19570,
    "round": 2,
    "status": "done",
    "branch": "claude/issue-19570-filing-door",
    "pr": "#19575",
    "head": "ae96af9dccb5487ee95cfcea0887ab2e796d1d0a",
    "session": "session_012GcsUbuqFGBibkEDMRC1eE",
    "premise_still_valid": true,
    "summary": "The at-tier review's item 2 is answered in one push, in-place rewrites only. (1) SKILL.md:187 now states door rule 3's substance and matches its twin at core-rules.md:80. (2) SKILL.md:241-242 and core-rules.md:61 turn a cross-seat request into a rider on the existing card it concerns, and the inverted 「评论是加速器不是记录」 phrase is gone from both sides (filing-gate.md now says 那条评论即其记录). (3) SKILL.md:310 and :785 route a 顺带发现 through the door. (4) the door's classes are ①②③④ everywhere, 「首行写立卡门类别 ①–④」 names the set, and core-rules.md:87 reads as the finding sub-rule inside door class ① rather than a second door. A fifth site the reviewer's own grep reaches, .claude/agents/os-dev.md:51, carried the same 「立卡者不查重」 claim and is rewritten too. filing-gate.md's provenance block shrinks from five lines to two, both maintainer sentences verbatim, and the bare 19546 survives only inside the quote.",
    "rewritten_lines_verbatim": {
    "SKILL.md:187": "- 立卡者自跑查重并写下查询与命中数(含 closed);判重仍归分诊,比数值与作用域定关哪个。",
    "SKILL.md:241": "- 跨座位请求骑在它所关的既有卡上:请求席在自卡写 Blocked-by:,并在目标卡留一条评论。",
    "SKILL.md:242": "- 该评论点名席位与步骤;无既有卡承载且请求自身即立卡门 ①②④ 时才立新卡。",
    "SKILL.md:310": "- 顺带发现只经立卡门:三类内缺陷才立,带查询与命中数;其余进 Acceptance notes 或座位贴。",
    "SKILL.md:351": "- 立卡门四类:① 缺陷 / ② 维护者决定 / ③ 直派任务 / ④ 协调节点,⛔ 其余一律不立卡。",
    "SKILL.md:352": "- 首行写立卡门类别 ①–④;四类定义、⛔ 清单、三答与配额见 references/filing-gate.md。",
    "SKILL.md:785": "- 席位读 PR ## Acceptance notes,实属三类的经立卡门补立、归挂;门外已立卡关 not planned。",
    "core-rules.md:61": "- 跨座位请求骑既有卡:自卡 Blocked-by: + pm:blocked,目标卡评论;无主被挡席认领,在飞即等。",
    "core-rules.md:84": "- 立卡门 ①–④ 外 ⛔ 不立卡;裸卡超十五张则下轮改域分批,每批不超过五张同族卡。",
    "core-rules.md:87": "- 门 ① 内 finding 限三类:今日可达可复现缺陷、契约违背、具名生产者陷阱;截断卡不派。",
    "os-dev.md:51": " - dev ⛔ 不查重,只附 3–5 个查重词;查询与命中数由立卡席写,⛔ 不扫 open issues、不拉板。"
    },
    "tests": "check:pm-skill-ratchet exit 0 with self-test — SKILL.md 819/819, core-rules.md 151/151, filing-gate.md 58/58 (its CEILINGS row lowered 61 -> 58 because the file shrank; lowering is always legitimate), os-dev.md 403/403, every entry headroom 0, no ceiling raised. check:pm-skill-id-lint, check:nul-bytes, check:skill-frame-sync, check:pm-governed-prose, check:pm-widening-tells, check:pm-label-desc-cap, check-self-test-wired and check-declaration-mirrors all exit 0, each captured before any pipe. Reviewer's greps: git grep -n '立卡者不查重\\|一律立卡进目标车道\\|独立立单' .claude exits 1 with ZERO hits, and the control git grep -n '立卡门' .claude returns 9 hits across SKILL.md (5), core-rules.md (1) and filing-gate.md (3) — the instrument is reaching the corpus, so the zero is a reading. git grep -n '评论是加速器' .claude also returns zero. git merge-tree --write-tree origin/main HEAD after a fresh git fetch origin main exits 0 (tree 9492ca1e08), origin/main at b3615f1; pushed without rebase, 34a97c4..ae96af9. Read at 2026-09-21T10:08Z.",
    "mcp_calls": "0 — no MCP tool called.",
    "api_writes": "1 REST write this round — POST /repos//issues/19570/comments (this report, through scripts/pm/post-stamped.mjs). One git push. No PR body PATCH, no labels, no ready flip.",
    "open_questions": [],
    "out_of_scope_findings": [
    "noted, not filed: the reviewer's grep reaches .claude/agents/os-dev.md, which the four numbered items did not name; its :51 carried the same pre-door claim and is fixed in this push rather than left for a later round. 承接者: none — it is in this diff.",
    "noted, not filed: the two open_questions of round 1 stand unanswered and are unchanged — the PR was created under a USER-class token (os-project-manager, not claude[bot]), and git push origin :claude/issue-19546-grading-contract-amendments is still refused with HTTP 403, so that stale branch remains on origin. 承接者: the director seat."
    ]
    }


    Generated by Claude Code

  4. os-project-manager commented on Sep 21, 2026

    @os-project-manager
    CollaboratorAuthor

    Landing record — director seat, summon #25 (session_012GcsUbuqFGBibkEDMRC1eE), 2026-09-21T11:00Z. PR #19575 merged through the queue by the maintainer (37ed9ae04b7b656114009378fe62cd186ab3b168, 2026-09-21T10:59Z, Tier H hand-merge), verified on fetched origin/main: .claude/skills/pm-dispatch/references/filing-gate.md is present (58 lines), git grep 立卡门 origin/main -- .claude returns 9 hits across SKILL.md, core-rules.md and filing-gate.md, and the three pre-door phrasings (立卡者不查重 / 一律立卡进目标车道 / 独立立单) return 0 hits under .claude with that positive control alongside. Contract review of record 5758831589 (PASS on head ae96af9d), provenance 5758842539. The filing door is thereby in force for every seat from its next fire: four classes ①–④ or no card, the named non-cards, three answers before POST, the quota, paced writes, and writes through the App identity claude[bot] with user.type read back — the mechanical throttle itself is card #19572 (PR #19584, in the queue behind this merge). GitHub closed this card on the Fixes keyword; pm:dispatched removed in this stroke so the close is whole.


    Generated by Claude Code

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

Metadata

Metadata

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions