Skip to content

Select an import-list doc block as module description only on an explicit @module marker, and re-attach the eight wedged schema comments - #13794

Merged
os-sam merged 4 commits into
mainfrom
claude/issue-13334-module-doc-block-selection
Sep 1, 2026
Merged

Select an import-list doc block as module description only on an explicit @module marker, and re-attach the eight wedged schema comments#13794
os-sam merged 4 commits into
mainfrom
claude/issue-13334-module-doc-block-selection

Conversation

@os-warren

@os-warren os-warren commented Aug 31, 2026

Copy link
Copy Markdown
Collaborator

Fixes #13334

Session: https://claude.ai/code/session_01PBjwYLS6BciTQW3c9xQiD2

Both routes of the triage ruling (comment 5476358037), landed in order: the marker gate first, the corpus repair second.

Route 1 — the @module gate (commit 505d711)

packages/spec/scripts/lib/file-description.ts: a doc block sitting inside the import list — imports before it, an import the first thing after it — is selected as the module description only when it carries an explicit @module marker on a prose line. The marker decides in both directions: with it the block selects whatever lies beyond the plumbing; without it the block is refused even where a far-side comment once kept it. One deliberate exception: plumbing that runs to the end of the file (a pure re-export module) still selects bare — no symbol exists for the block to have been torn from. No positional or wording heuristic was added, per the dispatch order; the card measured all of them dead.

The two genuine headers in the ambiguous position — shared/mapping.zod.ts, system/cache.zod.ts — each gain the one-line marker, the repo's existing spelling (fourteen headers above their imports already open with it, and the marker line renders on their published pages the same way today). No other source header was touched.

Selection reconciliation, old selector vs new, all 208 corpus sources (script re-run at b25f061, on the merged tree): after route 1 alone — 200 verdicts byte-identical, exactly the 8 misattributed openings flip SELECTED to null, 0 change to a different block. After route 2 — 208 of 208 identical under both selectors: the corpus is unambiguous again, and the gate is what keeps drift-back from republishing a wrong opening (an unmarked block in that position now renders nothing).

Route 2 — the eight corpus repairs (commit a78e387)

Each wedged lazySchema import (and its co-wedged companions) moved up into the import block; each doc block moved back against its subject, verbatim — position fix, not rewrite:

module comment now sits hover
ai/agent.zod.ts directly above AIModelConfigSchema restored (had none)
data/datasource.zod.ts directly above DriverType restored (had none)
ui/action.zod.ts directly above ActionParamSchema restored (had none)
ui/page.zod.ts directly above PageRegionSchema restored (had none)
data/hook.zod.ts section lead above HookEvent's own JSDoc already correct — see below
security/permission.zod.ts section lead opening the object-permission family members carry their own docs
ui/app.zod.ts section lead above BaseNavItemSchema's own JSDoc already correct
ui/component.zod.ts section lead above the emptyProps factory's own JSDoc already correct

Card-reading refinement: the card's hover claim ("broken for every one of the eight") holds for four of the eight. In data/hook, security/permission, ui/app and ui/component the documented symbol (or family head) already carries its own, richer JSDoc directly attached, so hover there was already correct; the wedged block was a redundant title. Those four blocks are placed as section leads directly above the existing docs — content preserved, position honest, and none is selectable as a module description any more. Attachment for the four restored symbols is verified by a blank-free adjacency check (closing delimiter line immediately above the declaration), 4 of 4 OK.

Regenerated artifacts (same commit as the source change)

  • 10 reference pages under content/docs/references/: 8 lose the misattributed opening (they now honestly print no module description — the card's own 宁可缺,不要错), shared/mapping and system/cache gain their @module line, consistent with the fourteen pages that already render one.
  • 4 published skill indexes: the 8 pointer rows fall back from one schema's comment to the honest export list (the extractor already skips at-sign lines, so the two @module headers keep their real titles).

skills/ diff readings (generated pointer rows only, zero net growth; re-measured against main at 62a137b):
whole files before/after — objectstack-ai/references/_index.md 45/45 · objectstack-data/references/_index.md 65/65 · objectstack-platform/references/_index.md 61/61 · objectstack-ui/references/_index.md 56/56; whole catalog, sum of every SKILL.md under skills/: 10475/10475 (untouched). The catalog total reads 10475 rather than the 10505 recorded before the main-sync because main itself edited SKILL.md files in the merge window — the branch's own contribution to the governed surface is unchanged at zero.

⚠️ skills/** is a governed surface (Prime Directive 14): this PR stays draft for the maintainer's hand-merge or pinned-approval path. The skill-index files are generated artifacts that check:skill-refs requires in the same PR as the source change, so the diff is deliberately not split.

Clause-2: no

Zero accept/reject behavior changes: the diff moves imports and comments and changes the docs generator's block selection. Evidence: full @objectstack/spec suite 447 files / 12000 tests pass and check:authorable-surface + check:api-surface (via check:generated, "All 15 generated artifacts are up to date") report no surface movement, all re-run at b25f061.

main-sync round (merge commit 3f4d5c7 + regeneration commit b25f061)

main moved ~11 hours under this branch and the PR went dirty. Resolved by merge commit (never rebase, never force-push), following scripts/pm/os-regen-merge.sh's fixed order — merge, choose the generated side per file, commit the merge FIRST, then regenerate.

Verification (all at b25f061, after the final commit)

  • pnpm --filter @objectstack/spec test — "Test Files 447 passed · Tests 12000 passed" (includes file-description.test.ts, 87 cases, run separately as well and green: the new positive/negative marker pins, the marker-wins pin, the fenced/mid-sentence non-marker pins, and three new corpus limbs re-deriving the gate from the real tree).
  • pnpm --filter @objectstack/spec typecheck — green ("check:test-typecheck: OK").
  • pnpm --filter @objectstack/spec check:generated — "All 15 generated artifacts are up to date."
  • Selection reconciliation re-run on the merged tree — 208 corpus sources scanned, 208 byte-identical verdicts under old and new selector, 0 flips in either direction. The identity conclusion still holds after the main advance.
  • All 51 dispatch-derived gate families run locally after a full pnpm exec turbo run build (70/70 tasks), 50 exit 0 — including check:docs, check:skill-refs, check:authorable-surface, check:strictness-ledger, check:docs-single-h1, check:skill-examples, check:pm-governed-merges, check:merge-driver, check:type-check-debt and the two @objectstack/lint doc gates. check:nul-bytes is not in the derived family for this diff and was run additionally — green (7668 text files scanned, no raw control bytes).
  • NOT MEASURED: check:react-declaration-parity — its right-hand input is objectui's sdui.manifest.json, produced only by a browser run at the objectui pin; it is an on-demand gate whose trigger is a pin bump (maintainer ruling 2026-08-07), which this PR does not perform, and no prop declaration moved. It exits 1 with the "cannot produce the manifest here" refusal, unchanged by the sync.

The selection-rule change subsumes the far-side rule that #13263 introduced (that card is not reopened; its corpus limb still passes verbatim). An unmarked block with a declaration beyond the plumbing is still refused — now by the marker gate.

Generated by Claude Code

claude added 2 commits August 31, 2026 11:32
…icit @module marker

Route 1 of #13334: inside the import list — imports before the block, an
import the first thing after it — no positional signal separates a genuine
module header from one schema's detached comment (the card measured every
signal; only the prose differs). The selector now asks the author instead:
only a block carrying @module on a prose line selects there, in both
directions, with the one exception of plumbing that runs to EOF (a pure
re-export module has no symbol the block could have been torn from).

The two genuine headers in that position, shared/mapping and system/cache,
each gain the one-line marker — the repo's existing spelling, fourteen
headers above their imports already open with it. No other source is touched.

Measured over all 208 corpus sources, old selector vs new: 200 verdicts
byte-identical, exactly the 8 misattributed openings flip SELECTED->null,
0 change to a different block.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PBjwYLS6BciTQW3c9xQiD2
Route 2 of #13334. The lazify codemod's injected import had wedged itself
between each block and its symbol; the injected imports move up into the
import block and each comment moves back against its subject — verbatim, a
position fix, not a rewrite. Editor hover is restored for the four symbols
that had no attached doc at all: AIModelConfigSchema, DriverType,
ActionParamSchema, PageRegionSchema. In the other four modules (data/hook,
security/permission, ui/app, ui/component) the documented symbol or family
head already carries its own richer JSDoc, so the moved block sits directly
above it as a section lead and hover was already correct — a refinement of
the card's reading, recorded in the PR.

Regenerated: 10 reference pages (8 lose the misattributed opening, 2 gain
their @module line) and 4 published skill indexes (8 pointer rows fall back
to the honest export list). Changeset included; no schema behavior changes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PBjwYLS6BciTQW3c9xQiD2
@github-actions

github-actions Bot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 1 package(s): @objectstack/spec, touching 5 documentable anchor(s). ⚠️ 7 changed file(s) yielded no anchor (packages/spec/src/ai/agent.zod.ts, packages/spec/src/data/hook.zod.ts, packages/spec/src/security/permission.zod.ts, …), so the pages documenting them are NOT COVERED by this run — this is not a clean bill of health for those files.

8 hand-written doc(s) NAME something this change touched and may need an implementation-accuracy re-verification:

  • content/docs/data-modeling/drivers.mdx (via com.vendor.snowflake (literal, a string literal on a changed line))
  • content/docs/deployment/environment-variables.mdx (via sys_member (literal, a string literal on a changed line))
  • content/docs/deployment/tenancy-modes.mdx (via sys_member (literal, a string literal on a changed line))
  • content/docs/permissions/authentication.mdx (via sys_member (literal, a string literal on a changed line))
  • content/docs/permissions/delegated-administration.mdx (via sys_member (literal, a string literal on a changed line))
  • content/docs/permissions/permission-sets.mdx (via sys_member (literal, a string literal on a changed line))
  • content/docs/permissions/positions.mdx (via sys_member (literal, a string literal on a changed line))
  • content/docs/ui/apps.mdx (via nav_settings (literal, a string literal on a changed line))

3 release-owned page(s) also name something this change touched. These are read-only:

  • content/docs/releases/implementation-status.mdx (via sys_member (literal, a string literal on a changed line))
  • content/docs/releases/v16.mdx (via sys_member (literal, a string literal on a changed line))
  • content/docs/releases/v17.mdx (via sys_member (literal, a string literal on a changed line))

content/docs/releases/ is RELEASE-OWNED (AGENTS.md "Documentation Guardrails"): release
notes are written centrally at release time, and a code PR that edits them is the exact PR
that guardrail exists to stop. They are still audited — read-only. If one of them is actually
wrong, file an issue or open a dedicated docs-only PR; do not edit it here.

What this run could not see
  • 7 changed file(s) yielded no anchor (packages/spec/src/ai/agent.zod.ts, packages/spec/src/data/hook.zod.ts, packages/spec/src/security/permission.zod.ts, …) — pages documenting those are invisible to this run
  • 1 anchor(s) matched too much of the corpus to be a work list: sys_user (literal, 30 pages)
  • a page that states a rule by its inputs shares no identifier with the emitter that implements the rule, so an emitter-only diff cannot list it — not on this run and not on any run. Measured on fix(driver-sql): emit varchar(maxLength) for a text field a declared index keys on #11430: content/docs/protocol/objectql/types.mdx documents the text-family column mapping by the ObjectQL type names it maps FROM (text / textarea / html) while the diff changed createColumn; it went unlisted, and it was the page that diff falsified, in four places. No shared token exists to detect this on, so a rule your change carries has to be re-read by hand in the pages that restate it.

Coarse fallback — 128 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json 102a5047e6d3a2c841f2174470dc0d09652b5afapackageMentionDocs.

Which tree this was computed on

This run read content/docs from 9998df3a0813d3aad47f2c5b943eb5054f3de637 — the merge of head b25f061c68df855f5098b44b0580a76cb034e3cf into base 102a5047e6d3a2c841f2174470dc0d09652b5afa, which is what actions/checkout gives a pull_request run. Not the PR head.

A worktree cut from an older main holds a different content/docs, so re-deriving there can legitimately return a different list — that is a different tree, not a wrong row. To answer on the same tree:

# while this PR is open — GitHub drops the merge commit once it closes
git fetch origin 9998df3a0813d3aad47f2c5b943eb5054f3de637 && git checkout 9998df3a0813d3aad47f2c5b943eb5054f3de637
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin 102a5047e6d3a2c841f2174470dc0d09652b5afa b25f061c68df855f5098b44b0580a76cb034e3cf && git checkout -B drift-repro 102a5047e6d3a2c841f2174470dc0d09652b5afa && git merge --no-ff b25f061c68df855f5098b44b0580a76cb034e3cf

node scripts/docs-audit/affected-docs.mjs --json 102a5047e6d3a2c841f2174470dc0d09652b5afa

⚠️ That checkout carried uncommitted changes, so the commit above does not fully identify what was read.

Advisory only, and a precision-first one (#9192): a page is listed because it names a
symbol, wire route or SDK method this diff touched — not because it mentions a changed
package. Each row says which anchor put it there, so a wrong row is reportable rather than
merely annoying. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs 102a5047e6d3a2c841f2174470dc0d09652b5afa → pass the list as
args.docs, on the commit named under Which tree this was computed on.

Copy link
Copy Markdown
Collaborator Author

受治理面放行(维护者词)+ 落地跟进 — Provenance:维护者于本席 Claude Code 会话(session_01PBjwYLS6BciTQW3c9xQiD2,2026-08-31 ~20:4xZ)原话:

13794 跟进到合并

本 PR 触发布面 skills/** 生成索引 ⇒ Prime Directive 14 受治理面,终局两条(维护者人工直合 / 授权批准人钉 head 入队),派发席 ⛔ 永不代批。上句维护者指令即本 PR 的放行授权,本席据此驱动其落地,并如实记录两点边界:

  1. 本席不代批:若 Governed Surface Queue Guard 或分支保护在机制层要求受治理面的人工 approval,那不是本席可绕过的——届时本席只报告「还差您一次 approval / 直合」,⛔ 不寻找变通。
  2. 落地前先解冲突:当前 mergeable_state: dirty(base 停在 12:51Z 6207c9ec,main 已前移约 8 小时,期间 Add field-reference-to-alias conversion so stored reference_to serves as reference #13847/fix(spec): drop four dead ghost members from SEARCH_AUTO_EXCLUDED_TYPES and extend the [#13695] pin to every search type vocabulary #13869/fix(spec): require a non-empty reference on lookup/master_detail fields #13927/spec: generate declaration-map/ — TS declaration names to spec registry names (docs-audit option D, spec half) #13939/docs(pm-dispatch): move clause-2 contract review in-seat — dispatching seat reviews and releases; external chain becomes optional audit #13812 等合入,多个触生成物)。已派 main-sync 轮:只解冲突、零行为变化——生成物冲突走工具重生成、源码冲突保双方、不可自决即停手回报;⚠️ 特别核对 spec: generate declaration-map/ — TS declaration names to spec registry names (docs-audit option D, spec half) #13939check:generated 从 14 项加到 15 项后的随动事实更新。sync 全绿后本席转 ready 并入队,跟到 MERGED

复核结论不变(ACCEPT,见 #13334 comment 5478663412):两路线按序、208 语料新旧选择器对账恒等、skills/ 索引零净增长(45/65/61/56 行数不变,SKILL.md 目录和 10505 不变)、Clause-② no。sync 轮后本席会复验该对账在新 main 上仍成立。


Generated by Claude Code

claude added 2 commits August 31, 2026 23:47
…ollows)

Resolved the one source conflict in packages/spec/src/ui/component.zod.ts by
stacking both intents: this branch's hoist of the wedged import group to the
top import block, and main's new section-group-reference import, which travels
with the group it was appended to.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PBjwYLS6BciTQW3c9xQiD2
Discharges the os-regen deferral recorded by the merge commit. The page now
carries main's section-group-reference body and no longer opens with the
misattributed 'Empty Properties Schema' block, which is this branch's route-1
gate acting on the merged tree.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PBjwYLS6BciTQW3c9xQiD2

Copy link
Copy Markdown
Collaborator Author

os-dev-report

{
  "issue": "PR#13794-sync",
  "status": "done",
  "branch": "claude/issue-13334-module-doc-block-selection",
  "pr": "https://github.com/objectstack-ai/objectstack/pull/13794",
  "premise_still_valid": true,
  "summary": "main-sync only, zero behavior change, no shape re-litigated and the diff neither narrowed nor widened (still 27 files vs main). Worktree REUSED: ../objectstack-13794-sync already existed at the PR head a78e3871, tree clean, no merge in progress, but node_modules absent (the 429 killed the previous dev before pnpm install) - so it was reused as-is after a fresh install. Merged origin/main 62a137ba into the branch as a MERGE COMMIT (no rebase, no amend, no force-push), following scripts/pm/os-regen-merge.sh's fixed order with the merge base 8ab4ace4 recorded BEFORE the merge. CONFLICT INVENTORY - exactly two files, one per class. (1) SOURCE, hand-resolved keeping both sides: packages/spec/src/ui/component.zod.ts, a single hunk. This branch hoists the wedged import group (lazySchema, ExpressionInputSchema, retiredKey, SortItemSchema, strictObject, KeySetGuidance) out of mid-file up into the top import block; #13855 on main had appended SectionGroupKeySchema + sectionGroupReferenceRefinement to the TAIL of that same wedged group. Orthogonal intents, so they stack: the new import travels with the group it was appended to, keeping its explanatory comment, and lands at the top block. Verified after resolution - 0 conflict markers repo-wide, all 13 imports at top, no wedged import left, the branch's relocated 'Empty Properties Schema' section lead still at line 316, and #13855's group key present at all 4 use sites (declaration, describe, two superRefine/link references). (2) GENERATED, tool-regenerated not hand-merged: content/docs/references/ui/component.mdx, the ONLY os-regen path both sides moved (computed against the pre-merge base: branch moved 10 reference pages, main moved 13 regen paths, intersection = this one). Took main's side into the WORKTREE only via git restore --source=origin/main (never the index), committed the merge FIRST, then regenerated. The nine other branch-edited reference pages and the four skill indexes were branch-only - main did not touch them - so the branch's bytes were kept per the script's per-file rule, and regeneration reproduced them byte-unchanged. skills/*/references/_index.md did not conflict at all: main touched SKILL.md files, this branch touches only references/_index.md, disjoint. No census-anchor conflict. REGENERATION: pnpm --filter @objectstack/spec build closure, then gen:schema, gen:docs, gen:skill-refs. The whole chain produced exactly ONE changed file - component.mdx, 2 deletions - i.e. the misattributed opening this PR removes, and nothing else drifted. The os-regen pre-commit hook recorded the deferral on the merge commit and confirmed 'deferred regeneration discharged - all artifacts current, marker cleared' on the regeneration commit. Staged diff (not the working-tree diff) was inspected before committing, per the runbook. Silent-drop check passed: main's deriveFieldGroupLayout body is present in the regenerated page and matches origin/main's copy, so the driver's dropped side was restored rather than ridden into the merge. 208-CORPUS RECONCILIATION RE-RUN on the merged tree (the committed PR carried no such script - it was ad-hoc, so it was reconstructed: old selector extracted from the merge base 8ab4ace4, new selector from the branch, both run over every .zod.ts under packages/spec/src): 208 sources scanned, 208 verdicts byte-identical, 0 SELECTED-to-null, 0 null-to-SELECTED, 0 changed-to-a-different-block. Corpus is still 208 after main's advance, so the identity conclusion re-verifies unchanged. FOLLOW-ON FACT CORRECTIONS applied to the PR body (random facts moving with main, not behavior): check:generated 14 to 15 artifacts (#13939's declaration-map GATED row) and it is green at 15; spec suite 444 files/11893 tests to 447/12000; dispatch-derived gate family 47 to 51; skills catalog sum 10505 to 10475 - that last one moved because MAIN edited SKILL.md files in the window, and the branch's own governed-surface contribution is still exactly zero net growth (the four indexes read 45/65/61/56 identical before and after). PR body was read back in full after the PATCH - intact to the footer, no sanitizer truncation. mergeable_state moved dirty to blocked, i.e. the conflict is gone and what remains is the governed-surface gate, which is not mine to touch. Left untouched per dispatch: still DRAFT, not readied, not merged, no label changes, no releases/ edits. DEVIATION DECLARED: the worktree ../objectstack-13794-sync was deliberately NOT torn down, because the maintainer instruction is to follow this PR to merge and further sync rounds on this same branch are likely; the tree is clean and every commit is pushed, so nothing uncommitted is at risk there.",
  "tests": "All at final head b25f061c6 (= remote head; the union below was re-run after the last commit, nothing landed since). Heavy runs serialized through scripts/pm/os-verify-lock.sh with OS_VERIFY_LOCK_SLOT=dev-13794-sync; every step redirected to a file FIRST and the exit code captured before any pipe, and verdicts quoted from each gate's own printed line rather than a bare exit status. (1) pnpm --filter @objectstack/spec exec vitest run --maxWorkers=2 scripts/file-description.test.ts - EXIT 0, 'Test Files 1 passed (1) / Tests 87 passed (87)' - the PR's 87 cases all green after the merge. (2) pnpm --filter @objectstack/spec test - EXIT 0, 'Test Files 447 passed (447) / Tests 12000 passed (12000)' (grew from 444/11893; the growth is main's). (3) pnpm --filter @objectstack/spec typecheck - EXIT 0, 'check:test-typecheck: OK'. (4) pnpm --filter @objectstack/spec check:generated - EXIT 0, 'All 15 generated artifacts are up to date.' - confirms #13939's 14-to-15 change and that all 15 are current on the merged tree. (5) pnpm --filter @objectstack/spec check:skill-refs - EXIT 0, '9 generated files in sync with packages/spec'. (6) Full workspace build for the gates that refuse an unbuilt tree: pnpm exec turbo run build --filter=./packages/* --filter=./packages/*/* - EXIT 0, '70 successful, 70 total'. (7) node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack (no paths passed - the script derived its own change set) - EXIT 0; it asserted the answer belongs to objectstack-ai/objectstack at b25f061c6 and derived 27 changed paths vs merge base 62a137bae, i.e. exactly the branch's own files with the merge fully absorbed. 51 gate families derived; all 51 run: 50 EXIT 0, 1 non-zero. (8) The single non-zero is check:react-declaration-parity, which is NOT a regression and NOT a measurement: its right-hand input is objectui's sdui.manifest.json, which this repo cannot produce (needs a browser run at the objectui pin); its log is the standard 'produce one, then re-run' refusal. The PR body already recorded it as NOT MEASURED before this round and that reading is unchanged. (9) check:nul-bytes - not in this diff's derived family, so run additionally - EXIT 0, 'scanned 7668 text file(s) ... no raw ASCII control bytes'; plus a direct control-byte scan over every file changed vs main, clean. (10) Reconciliation harness re-run on the merged tree - EXIT 0, 'RECONCILE VERDICT: IDENTICAL - 208/208 agree under both selectors'.",
  "mcp_calls": "6 - two pull_request_read at the start (get, get_comments), one update_pull_request, one pull_request_read readback, plus this report comment and its readback. No searches, no wide listings.",
  "open_questions": [],
  "out_of_scope_findings": []
}

Generated by Claude Code


Generated by Claude Code

Copy link
Copy Markdown
Collaborator Author

Sync 轮验收:PASS,转 ready 入队 — head a78e3871b25f061c

⚠️ 更正上一条 provenance(comment 5486334435)的一处事实:那里把维护者「13794 跟进到合并」的指令时间记作「~20:4xZ」,实际是 2026-08-31 ~23:4xZ(本席按上一轮探针时间推算,推错约 3 小时)。逐字引文、会话 ID、授权本身均不受影响;GitHub 自带的评论时间戳为准。

冲突处置核验(逐类)

  • 恰两个冲突文件,一类一个,与该 PR 的面完全吻合:
  • 208 语料对账在新树复验(该脚本原为 ad-hoc,dev 从 merge-base 与分支两侧重建后重跑):208/208 逐字一致,0 翻转、0 改指他块——main 前移后语料仍是 208,恒等结论不变 ✓
  • 随动事实更正(事实随 main 移动,非行为变化):check:generated 14→15 项(spec: generate declaration-map/ — TS declaration names to spec registry names (docs-audit option D, spec half) #13939 的 declaration-map GATED 行)且 15 项全绿;spec 套件 444/11893→447/12000;派生门 47→51;skills 目录和 10505→10475——该位移由 main 编辑 SKILL.md 造成,本 PR 自身的受治理面贡献仍是零净增长(四个索引 45/65/61/56 前后不变)✓
  • 门:87 例 file-description 全绿、typecheck OK、check:skill-refs「9 files in sync」、51 派生门 50 绿;唯一非零是 check:react-declaration-parity——其右侧输入是 objectui 的 sdui.manifest.json(本仓产不出),NOT MEASURED 非回归,与本 PR 落地前读数一致 ✓
  • 形状纪律:merge commit(无 rebase/amend/force-push)、仍 draft、未动标签、未碰 releases/ ✓;mergeable_state dirty→blocked(冲突已消,余下即受治理面闸门)

放行动作

按维护者授权(见更正后的 provenance)转 ready 并入队。⛔ 席位不代批:若受治理面在机制层要求人工 approval,本席只报告「还差维护者一次 approval / 直合」,不寻变通。


Generated by Claude Code

@os-warren
os-warren marked this pull request as ready for review September 1, 2026 00:24
@os-warren
os-warren enabled auto-merge September 1, 2026 00:24
@os-warren
os-warren added this pull request to the merge queue Sep 1, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Sep 1, 2026
@os-warren
os-warren added this pull request to the merge queue Sep 1, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Sep 1, 2026
@os-sam
os-sam added this pull request to the merge queue Sep 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

4 participants