Skip to content

docs(pm-dispatch): a UI card names the generic block or spec door it needs (rider for objectstack-ai/objectui#12224) - #23051

Merged
objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/issue-12224-objectui-filing-gate-rider
Oct 12, 2026
Merged

objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/issue-12224-objectui-filing-gate-rider

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Clause-②: no

This is the objectstack rider for objectstack-ai/objectui#12224, the card for objectui as a product-neutral renderer. The objectui half is draft PR objectstack-ai/objectui#12253: an AGENTS.md rule, ADR-0060, and a ratchet test. This pull request adds the matching line to the filing gate, so a UI card is filed in a shape the renderer can accept. It closes no card. .claude/** is governed at Tier S, so the pull request stays a draft until a contract-tier review of record. Drafted in session session_012dGTuJen61ECNHXYXKChoC, on branch claude/issue-12224-objectui-filing-gate-rider.

The maintainer's ruling, verbatim and untranslated:

规则应该写入 objectui 仓库,要不然每个项目都会有页面定制的需求

维护者速读(草稿)

改了什么

  • 立卡门(.claude/skills/pm-dispatch/references/filing-gate.md 〈立卡门〉)新增一行:UI 卡必须写明它需要哪个通用块,或哪个 @objectstack/spec 契约门。向 objectui 要产品命名的 widget、dialog、hook 或文案命名空间的卡,一律退回重立。
  • 为了给这一行腾地方,删掉了文件开头引言里的一句自我描述:「本文是「什么才算一张卡」与定级、读数三组判据的执行说明」。

为什么改

风险与代价(含回滚)

  • 文件行数棘轮的上限是 58 行,这个文件本来就是 58 行。新增的一行靠删内容付账,文件仍是 58 行,上限不动,也没有靠合并折行凑出空行。
  • 删掉的那句只是复述文件的三个标题(## 立卡门、## 定级判据…、## 读数判据…),内容仍在标题里,不丢任何规则。
  • 回滚:revert 本 PR 即可。这是内部指令面,不发版。

席位意见

(留空,由席位定稿)

你要做的

  • 无需您批准:.claude/** 是 Tier S,由席位做契约档复核后落地。若您不同意这条立卡门规则,请直接在本 PR 上说。

What changes

.claude/skills/pm-dispatch/references/filing-gate.md (58 → 58 lines; check-skill-line-ratchet ceiling 58, unchanged):

  • Deleted from the intro: the clause 「本文是「什么才算一张卡」与定级、读数三组判据的执行说明」. The intro becomes its pointer sentence alone, on one line: 「见 triage-duties.md 与 reading-discipline.md 的指针行。」
  • Added under ## 立卡门: 「- UI 卡写明所需通用块或 spec 契约门;要产品命名 widget/dialog/hook/命名空间的卡退回重立。」 (116 bytes, under the 120-byte line rule).

Acceptance notes

Gates (at 6b43997f7)

The list was derived with node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack (no paths; change set .claude/skills/pm-dispatch/references/filing-gate.md, +2 / −2). Every command ran, and each exit code was captured before any pipe. --ran reconciliation: 17 derived, 17 run, 0 NOT-MEASURED, 0 UNRUN (a derived zero: all 17 recorded an exit code).

Command Exit Verdict line
pnpm check:pm-skill-ratchet 0 ✓ check-skill-line-ratchet: …/filing-gate.md is 58 lines (ceiling 58; headroom 0).
pnpm check:pm-skill-id-lint 0 ✓ check-skill-id-lint: 87 file(s) clean (pattern /#[0-9]{3,}/g).
pnpm check:nul-bytes 0 check-nul-bytes: OK (scanned 11047 text file(s) … no raw ASCII control bytes).
pnpm check:pm-governed-merges 0 self-test passes; live generator certified the tree
pnpm check:skill-frame-sync 0 binding sentence present; 90 markdown files scanned
pnpm check:doc-authoring 0 ✓ doc authoring guard: … clean
pnpm check:cross-package-test-inputs 0 OK: 30 package(s) read outside themselves, all declared
pnpm check:agent-test-spelling 0 clean
pnpm check:driver-memory-census 0 check-driver-memory-census: OK
pnpm check:gitlink-declared 0 check-gitlink-declared: OK
pnpm check:refd-timer-probe 0 OK check-refd-timer-probe
pnpm check:watch-hint-literal 0 ✓ check-watch-hint-literal: 73 declaration(s)
node scripts/check-closing-keyword-parity.mjs · --self-test 0 · 0 sweep done · 40 assertions, 5 mutations … driven to red
node scripts/check-comment-mask-corpus.mjs 0 8862 files, 0 disagree, 0 unparseable
node scripts/pm/check-harness-current.mjs --self-test 0 all 26 cases passed
pnpm --filter @objectstack/lint run check:doc-formula-expressions 0 gate ran after its declared prerequisites were built (see below)

check:doc-formula-expressions first exited 3, PREREQUISITE NOT MET (@objectstack/formula and @objectstack/lint were not built in the fresh worktree). That run measured nothing. After turbo run build --filter=@objectstack/formula --filter=@objectstack/lint (4/4), the re-run exited 0.


Generated by Claude Code

…needs

The filing gate gains one line: a UI card states the generic block or
the spec contract door it needs, and a card asking the renderer for a
product-named widget, dialog, hook or copy namespace is refiled.

Paid for by deleting the intro's self-description clause, which only
restated the file's three headings; the line ceiling stays at 58.

Claude-Session: https://claude.ai/code/session_012dGTuJen61ECNHXYXKChoC
Co-authored-by: Claude <noreply@anthropic.com>
@objectstack-fleet objectstack-fleet Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Oct 12, 2026
@github-actions github-actions Bot added the documentation Improvements or additions to documentation label Oct 12, 2026
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: 6b43997f770fab6c6fdc127f305d9581e8a66c49
Local-runs: none

Inputs read: card objectstack-ai/objectui#12224 (body and all five comments, including the PM's payment ruling 6125224340 and the two dev reports 6125187793 / 6125436892); PR #23051 (body, file list, the diff, and the main...head compare); the check-runs on the head. Nothing was built, run or re-run on the head; the record's own shape was checked offline with the repo's recognisers before posting.

① Derived judgments

  • Public surface: none changed — right. The file list is one path, .claude/skills/pm-dispatch/references/filing-gate.md (+2 / −2). No package source, no packages/spec schema, no export, no REST route, no generated artifact. The main...head compare lists the same one file; main at 36b2889cd still holds the base blob e15766f53e7, so the net diff against main is the PR diff.
  • Accept-set change (the fleet's own filing gate): one rule added — right, and faithful to the card. The new bullet under ## 立卡门, 「UI 卡写明所需通用块或 spec 契约门;要产品命名 widget/dialog/hook/命名空间的卡退回重立。」, is the card's rider item 5 (a UI card must say what generic block or spec door it needs; a card asking objectui for a product-named widget is refiled) and tracks the card's rule 2 enumeration (widget, dialog, hook, namespace). It serves the maintainer's ruling quoted verbatim on the card and in the PR body, 「规则应该写入 objectui 仓库,要不然每个项目都会有页面定制的需求」: the rule itself lands in objectui (draft docs(governance): objectui is a product-neutral renderer — AGENTS.md rule, ADR-0060, and a ratchet over registry keys, files and locale keys objectui#12253); this line keeps product-specific page demands from reaching that lane as cards. Placement is right: inside the 立卡门 bullet list, after the ⛔ 不是卡 rows and before the POST-前 checklist. One executable sentence, no tracker number in it.
  • Deleted clause: a description, no rule lost — right. The intro's 「;本文是「什么才算一张卡」与定级、读数三组判据的执行说明」 restates the file's three H2 headings (## 立卡门, ## 定级判据(北极星「优先级」的执行说明), ## 读数判据(判据的可达半径与零)), all three of which remain. The pointer sentence 「见 triage-duties.md 与 reading-discipline.md 的指针行。」 stands alone on line 3 with its full stop. This is option A of the dev's open question, as the PM ruled in 6125224340.
  • Line ratchet: 58 → 58 against a ceiling of 58, headroom 0, ceiling untouched — right. Measured on the fetched blobs at main and at the head: 58 lines each; diff shows exactly lines 3–4 collapsing to line 3 and one insertion at line 24, nothing else moved and no re-wrap. The new line is 116 bytes, under the ratchet's 120-byte line cap. The file's table-row pin (0) is unchanged. The freed line comes from deleted content, not from merging lines, which is what the ratchet's discipline asks.
  • PR body: names the card, no closing keyword — right. objectstack-ai/objectui#12224 and objectstack-ai/objectui#12253 appear with no keyword before either; a keyword-plus-reference scan of the body finds no hit. The sentence "It closes no card." contains the verb but no reference, so it binds none of the repo's three registered parsers (all require #N or owner/repo#N); the Part-of PR must not also close its card and The card this PR closes must claim this branch check-runs are success. Branch, title and body match the claim 6124339842 and the dev report 6125436892.
  • Check-runs on the head (re-read before posting): 38, all completed; 26 success, 12 skipped, 0 failure, 0 in_progress. Of the five required contexts: Lint & Repo Gates success (its Lint · PM dispatch-gates leg carries the ratchet and id-lint), TypeScript Type Check success, Test Core success, Governed Surface Queue Guard success; Build Core is skipped by the filter job (no package path in the diff), recorded here as skipped, not as a pass. The remaining skips are the same paths filter (Build Docs, Console Pin Gate, the Test Core and Dogfood shard matrices, Temporal Conformance, the opt-in tarball smoke) and the labeled re-run's no-op legs. Nothing red, nothing pending.

② Semver level

  • skip-changeset — right. The diff publishes nothing from any released package: .claude/** is the repo-internal instruction tree (metadata.internal: true), not the shipped skills/ catalog. No .changeset/*.md is in the file list, and none is owed. Check Changeset is success.
  • Clause-②: no — right and well-formed. It is the body's first line, carries no (widening) / (narrowing) arm, and matches the claim's Clause-②: no. No authorable key, export or config field is added, removed or renamed, so no migration text and no ADR-0087 disposition are owed.

③ Boundary flags

  • Dev open question (report 6125187793): how to pay for the rider line at 58/58. Answered by the PM in 6125224340 — option A, deleting the intro's self-description clause, with the claim's file surface widened to lines 3–4 plus the one new line. The diff implements exactly that and nothing more. Closed.
  • Dev deviations (report 6125436892): the rider branch pre-existed as an empty push and was fast-forwarded to origin/main 38d98d8d8 before the edit — the compare's merge base is 38d98d8d8, one commit ahead, no force-push; the body opens with Clause-②: no per the claim; the worktree was removed after the reports. All three are bookkeeping, answered, none escalated.
  • Governed surface, Tier S. .claude/** is the claude-tree row of GOVERNED_SURFACES at Tier S. The PR is a draft with auto-merge off, as Prime Directive feat: Comprehensive CRM example demonstrating all ObjectStack protocol features #14 requires before this record. On this PASS the owning seat lands it through the queue; the post-merge audit is the compensating control. No maintainer approval is owed; the maintainer may still object on the PR, as the body invites.
  • Where this record lives. Posted on the PR thread, which the review-of-record locator always reads; the locator's card-thread fallback for this PR derives from the branch name and would name objectstack [PM seat] repo:www.objectos.ai — 🟢 held · hotlong · session_01FeA1nwBz1ohH65dvffUGKr · R1 opened 2026-10-05 · positioning wave (copy PR + 5 posts on slots 10-08…10-22) · slot Routine trig_017aGwYCcm4ToQxSuQxU1gSi #12224, an unrelated issue in this repository, so the PR thread is the one that carries the record.
  • No needs-user-decision is raised. Nothing in the diff moves a ceiling, cites a tracker number in rule text, or touches a line outside the amended claim surface.

Implemented-by: claude/issue-12224-objectui-filing-gate-rider
Reviewed-by: session_012dGTuJen61ECNHXYXKChoC

VERDICT: PASS


Generated by Claude Code

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

Labels

documentation Improvements or additions to documentation size/xs skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants