Skip to content

[Decision] Every objectui pin hop rewrites spec docblocks: move the objectui read-point citations out of packages/spec/src? #23434

Closed

Description

@objectstack-fleet

Ruled: 6181034096 · letter A (Q2) · 2026-10-14T23:49Z

Ruled: 6165388570 · letter C · 2026-10-14T09:37Z

Filing gate ② a decision only the maintainer can make. Filed by domain:devx seat 1 · os-support-ai · session_012VGBku7tEi8DX2uvi1gtXk, on the maintainer's choice in that session. The maintainer asked, verbatim: 「升级 objectui pin ,为什么会导致 spec 协议变更,这些代码有必要嘛?不是应该 objectui 遵守 spec 协议吗」. The seat offered three options, and the maintainer picked 「照常落地 + 立决策卡 (Recommended)」: PR #23424 lands as is, and this card holds the mechanism question.

Background, measured at filing

  • packages/spec/src/** carries read-point records: docblocks that say "this key is live, and objectui File.tsx:NNN at the pin reads it". The gate check:objectui-pin-citations requires every record in the asserting spelling (`.objectui-sha` = `<sha>`) to name the current pin. So every pin hop must re-measure and rewrite them.
  • On origin/main 04a314873: the asserting spelling is on 37 lines in 11 files. The historical spelling (`.objectui-sha` pin `<sha>`, "measured at"), which the gate does not tie to the pin, is already on 98 lines in 47 files.
  • This hop, PR chore(objectui): move the console pin to b9814b334d8a (objectui main tip, carrying objectui#12270 and objectui#11773) #23424, adds 378 and deletes 107 lines in packages/spec/src/**. About 4 to 9 of those lines are true describe changes: markers this pin makes false. The rest are re-measured citations, hop sentences and corpus counts. The hop also owed a contract review only because spec files moved.
  • .objectui-sha changed in at least 24 commits since 2026-09-01 (a shallow-history count; the true number is not lower).
  • Precedent cost: the last hop, PR chore(objectui): move the console pin to 1fb1ced36243 (objectui main tip, Half 1 of #23104) #23110, edited 13 spec source files the same way.

The question

Each console update makes packages/spec, the published contract, change dozens of lines that describe the renderer's line numbers. Should the published spec stop carrying objectui line numbers, so that a pin hop changes spec only when a key's truth changes?

Options

What it does What a customer or author notices Effort
A keep Every hop keeps re-measuring the asserting records, and the gate stays as is. Nothing. Each console update keeps costing about 10 spec files and a contract review. 0 now; recurring on every hop
B historical spelling Convert the 37 asserting lines to the historical spelling, and retire the gate's asserting leg (or the whole gate). Nothing. Pin hops stop touching spec unless a describe's truth flips. domain:spec · 1 PR · about 37 lines in 11 files plus the gate; no exact precedent
C move out of spec Move the read points into the liveness ledger (packages/spec/liveness/*.json; its notes already cite objectui readers, e.g. this hop's two notes), in the historical spelling. Delete them from the docblocks and retire the gate. Published spec text reads as a contract with no renderer line numbers. Pin hops stop touching spec source unless a describe's truth flips. domain:spec · 1–2 PRs · about 135 lines across about 50 files plus the gate; no exact precedent

What each means for the business:

  • A: like keeping a product manual that quotes the factory's internal part numbers, and reprinting the manual on every factory change.
  • B: the manual says "measured at plant revision X" and stays valid; reprint only when the product's behaviour changes.
  • C: the part numbers move to the factory's own logbook, and the manual describes only the product.

四轴分析(从业务角度)

  • 项目长远合理性: spec 是发布出去的协议,方向应当是 spec 定义、渲染端遵守。把渲染端的源码行号写进协议包,是协议对实现的反向依赖,每次前端更新都要回头改协议文字。C 让协议包只承载契约,读点归活性台账一处;B 把依赖从「每次必改」降成「历史记录」,但行号仍留在发布物里;A 保持反向依赖。
  • 实际业务需求: 这些读点的读者是内部 agent 的活性巡查,客户与写元数据的 AI 都不读行号(他们读的是 describe 正文与 [PLANNED] 标记,那部分三个选项都保留)。拉动是真实的(门禁头记录过一次缺读点导致整轮重派),但它要的是「能找到读点」,不要求读点住在协议源码里。
  • 防 AI 犯错: 三个选项对 AI 写元数据的影响相同:真正影响 AI 的 describe 标记照旧随实现翻转。C 另外去掉了 AI 读 spec 源码时会看到的几百行无关行号噪音。出错时谁看到什么:A/B/C 下,标记过期都由活性门禁响亮报出,不变。
  • 创业阶段不扩散: 门禁是只减不增的零件。B 与 C 都是减门禁、减每次跳转的固定成本;B 工作量最小,C 一次付清。

Recommendation

C. Two years out, the spec package should read like OpenAPI or Kubernetes API types: a contract whose prose never cites an implementation's line numbers, with renderer conformance tracked on the renderer side or in a ledger (here, the liveness ledger already exists and already cites objectui readers). Fallback: B, if the per-hop cost should stop with the least work today; it keeps the line numbers in published text but ends the forced rewrite. Confidence gap: the seat has not measured how often liveness sweeps actually read these records, nor whether any test asserts a docblock citation's text.

只看①选 C;②③④ 是否翻转:否(④ 倾向 B 的工作量更小,只影响时序,不翻字母)。

After the ruling

  • C: the domain:spec seat claims one card. In one PR it moves each asserting and historical read point into the matching liveness/*.json note in the historical spelling, deletes them from the docblocks, retires check:objectui-pin-citations and its dispatch-gates routing, and adds a patch changeset. The contract review is owed because packages/spec/src/** moves.
  • B: the same seat, one PR: rewrite the 37 asserting lines, retire the gate's asserting leg, patch changeset.
  • A: close this card not_planned.
  • Whichever is ruled, scripts/bump-objectui.sh and the pin procedure in docs/releases-maintenance.md drop the re-measure step in the same PR.

os-decision-facets

  • ① 项目长远合理性:C 缩小契约增生(协议包不再承载渲染端行号),B 次之,A 维持反向依赖。
  • ② 实际业务拉动:读者仅内部活性巡查;客户与 AI 作者不读行号,今天撞上它的是每次 pin 跳转的席位与复核。
  • ③ 防 AI 犯错:三项相同,describe 标记照旧随实现翻转并由活性门禁响亮报出。
  • ④ 创业阶段不扩散:B、C 都删门禁、删每次跳转的固定成本;remove 优于 declare-and-maintain。

Prior rulings read: objectui-pin-citations, read-point, pin citation → 0 maintainer rulings on the mechanism; ADR none; thread: #10274 (1 comment, a contract-review release, not a ruling on the mechanism).


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 14, 2026

    @objectstack-fleet
    ContributorAuthor

    Seat reading of the dev's measurement (6168538808): two execution premises falsified; delivery split; one question to the maintainer · domain:spec seat 3 · 2026-10-14T12:40Z

    Session session_01D6F9axfoPzR7t8G1J7Ytzz · baozhoutao. The dev measured before writing anything (on origin/main 73c7dc4a3; check-objectui-pin-citations.ts --list plus greps; full numbers in the report). Ruling C's direction stands. Two of its execution premises do not:

    • Size: the 37 + 98 figure counts grep lines. A record is a multi-line docblock paragraph: 179 citations in 63 tracked files (49 asserting, 130 historical), 1,400 lines of hop-chain prose alone. One PR is far over the 3,000-line threshold, against "about 135 lines".
    • Homes: a matching ledger row exists for 43 of the 179. 96 are ComponentPropsMap member read points, whose only ledger home is page.regions (an undrilled container by design). 40 are retirement history: conversion entries, v18 migration entries, retirement pins.

    What the seat settles (ordering and the reading of item 1; no product or contract choice):

    • Delivery (Q3 → A): PR-1 now, Part of #23434. It retires the gate whole (script, package script, the lint.yml step, the check-generated.ts ledger row, the PM routing, the prose that names it). It respells the 49 asserting citations as dated readings at b9814b334 (true: each was re-read there today), so no record claims to track the pin once the gate is gone. It moves the 43 that have a row into those rows in objectui @<sha> <file>#<symbol> form. The per-hop rewrite the maintainer asked about (「升级 objectui pin,为什么会导致 spec 协议变更」) ends with PR-1. PR-2, Fixes #23434, carries the other two groups.
    • The 96 ComponentPropsMap citations (Q1 → A): ruling item 1 says "moves into the matching packages/spec/liveness/*.json note". For component members that note is page.regions's, the row that contains them. They go there as one evidence list (COMPONENT.member: objectui @SHA FILE#SYMBOL), asserting no verdicts. No rows are invented, and component-level liveness stays unclassified as the row says. This is a reading of item 1, not a new decision. Rows for every component member (Q1 B) would be new scope and would need its own ruling.

    Put to the maintainer (Q2): the 40 retirement-history citations. Ruling item 4 keeps two named v18 migration entries as "dated history". Item 1 says every record leaves packages/spec/src. The other 38 entries of the same class (14 conversion entries, 22 v18 migration entries, 4 retirement pins; 6 of them asserting citations inside migration reason strings, which are runtime data) sit between the two items. Keeping them narrows item 1, so the seat does not choose.

    四维分析(中文)

    • 选项 A(推荐): 这 40 处跟裁决第 4 条点名的两条同类,一并按"带日期的历史"保留;其中 6 处断言式引用改写成"在 objectui @sha 测得"的日期读数。改动约 6 个字符串。

    • 选项 B: 移到对应类型的台账 _note(view、dashboard、report、field…),从条目里删掉。退役证据会离开退役记录本身,工作量中等。

    • 选项 C: 直接从条目里删掉 objectui 引用,证据只留在 git 历史里。

    • ① 项目长远合理性: ADR-0087 的条目就是"这个键为什么被删"的记录,测量依据跟着它最自然;已退役的键永远不会再测,6 处改成日期读数后,pin 升级再也不会逼它们改写。A 最贴合;B 让证据和记录分家;C 丢证据。

    • ② 实际业务拉动: 退役条目由 os migrate meta 和升级指南呈现给作者;作者需要的是"为什么删、改成什么",不需要渲染器引用随 pin 变动。三者对作者可见行为无差别。

    • ③ 防 AI 犯错: 中性。三者都不改 describe 标记和拒收行为。

    • ④ 创业阶段不扩散: A 改动最小、不新增台账结构;B 中等;C 最小但要从运行时数据里删内容。

    推荐 A。 置信缺口:A 让"已发布的 spec 源码不再带渲染器引用"(第 1 条)在退役历史上留一个例外,这正是需要您点头的地方。

    你要做的(一个动作): 回一个字母(A / B / C)。PR-1 不等这个答复;PR-2 在答复后派发。

    Governing text: ruling 6165388570 items 1 and 4. Prior rulings read: 6165388570 (this card); no other ruling covers retirement-entry citations.

    os-decision-facets

    • ① 项目长远合理性:A 让退役证据随退役记录,B 证据分家,C 丢证据。
    • ② 实际业务拉动:三者对作者可见行为无差别。
    • ③ 防 AI 犯错:中性。
    • ④ 创业阶段不扩散:A 改动最小、不新增结构。

    State: the card stays pm:dispatched for PR-1 (this seat's claim, amended at this act to add packages/spec/scripts/check-generated.ts:343, packages/spec/scripts/check-llms-txt.ts:136 and the prose mentions at packages/spec/src/ui/component.zod.ts:3367 and packages/spec/src/ui/view.zod.ts:2404). When PR-1 lands, the seat releases the card into needs-user-decision if Q2 is still open, or dispatches PR-2 if it is answered.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 14, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
    "issue": 23434,
    "status": "done",
    "branch": "claude/issue-23434-objectui-read-points-to-ledger",
    "pr": "#23502",
    "session": "session_01D6F9axfoPzR7t8G1J7Ytzz",
    "premise_still_valid": true,
    "summary": "PR-1 is open as a draft at #23502 (Part of #23434, Tier H because of lint.yml, assignee baozhoutao, 2,899 changed lines). It does three things. (1) It retires check:objectui-pin-citations whole: the script, the package.json script, the lint.yml step, the check-generated.ts NO_GENERATOR row, the bare-root-worklist.mjs row and prose (self-test green at 13 members), and the prose naming the gate in dispatch-gates.mjs, check-llms-txt.ts, component.zod.ts and view.zod.ts. (2) It respells all 49 asserting citations as dated readings at objectui b9814b3, six of them inside v18 migration reason strings. (3) It moves 38 group-M citations into 23 ledger-row notes as objectui @sha FILE#SYMBOL, every symbol resolved against the objectui clone at that sha. Three of the 43 group-M citations turned out to be ComponentPropsMap read points and were re-classified to group C: ui/page.zod.ts visibleWhen roots, and the inline-grid-column-carriers.test.ts master-detail and line_items key sets. That makes C 99 citations; R stays at 40. Two moves are held back to stay under 3,000 lines and ride in PR-2, as the PM directed: api-methods-batch-conformance.test.ts (object enable.apiMethods) and dataset.zod.ts measures.format. Their respell stays in PR-1, and the moved form is saved at scratchpad issue-23434/pr1b-deferred.patch. The retired gate's --list, re-run from the base tree, now finds 0 asserting and 100 historical: 66 in C and 34 in R.",
    "tests": "Head 7fe6ffd, base d54e239. spec build exit 0. check:generated: 1/14 stale (check:docs, from the span describe), fixed with --fix (content/docs/references/ui/view.mdx). spec test (local): 676 files, 20580 passed. spec test:repo: 60 files, 1029 passed. Both ran before the final hold-back commit; after it, the two reverted files' suites passed at head (3 files, 89 tests). lint tests: 139 files, 6726 passed. At head: check:liveness, check:spec-changes, check:upgrade-guide, check:nul-bytes, check:issue-citations and check-spec-docblock-symbol-anchors all exit 0. No ablation (prose and ledger move only).",
    "gates": "dispatch-gates --repo objectstack-ai/objectstack --ran (with exit codes): 174 derived, 174 accounted, 166 run, 8 with exit 3. 164 exited 0. Two of the exit-3 gates (lint check:doc-formula-expressions, check:doc-security-posture) re-ran at exit 0 after building lint and formula. NOT MEASURED, prerequisite not built (needs the CLI or a whole-repo dist): spec check:skill-examples, check:docs-transcript-drift, check:dual-build-cjs-loads, check:i18n, check:i18n-walk-parity, check:lean-entry-closure. RED exit 1: check:platform-checklist, 8 ABSENT SYMBOL findings in docs/qa/platform-checklist/areas/{access-security,attachments-storage,search}.json pointing at packages/metadata-protocol/src/protocol.ts and service-storage attachment-access-hooks.ts. This diff touches none of those files; not judged as this PR. The full battery ran at 7ebc084, before the hold-back commit; the re-run subset is listed under tests. CI: in_progress, not awaited.",
    "line_budget": "2899 changed lines (252 insertions, 2647 deletions; PR additions+deletions = 2899). The full move would have been 3253; 1363 of those are the deleted gate script.",
    "deviations": "(1) Three group-M citations re-classified to C (no matching row: they are component-level keys under the undrilled page.regions). (2) Two moves deferred to PR-2 on the PM's instruction. (3) Zero label writes: the dispatch named no labels, and skip-changeset does not apply (there is a patch changeset). (4) Progress status sent once via SendMessage to the PM in answer to the status query.",
    "files_changed": [
    ".changeset/23434-objectui-read-points-to-ledger.md",
    ".github/workflows/lint.yml",
    "content/docs/references/ui/view.mdx",
    "packages/spec/liveness/action.json",
    "packages/spec/liveness/dashboard.json",
    "packages/spec/liveness/field.json",
    "packages/spec/liveness/report.json",
    "packages/spec/liveness/translation.json",
    "packages/spec/liveness/view.json",
    "packages/spec/package.json",
    "packages/spec/scripts/check-generated.ts",
    "packages/spec/scripts/check-llms-txt.ts",
    "packages/spec/scripts/check-objectui-pin-citations.ts",
    "packages/spec/src/data/api-methods-batch-conformance.test.ts",
    "packages/spec/src/data/field-rows-option-description.test.ts",
    "packages/spec/src/data/field-scale.ts",
    "packages/spec/src/data/inline-grid-columns.test.ts",
    "packages/spec/src/data/inline-grid-columns.ts",
    "packages/spec/src/data/inline-grid-sort-fields.ts",
    "packages/spec/src/data/object.form.ts",
    "packages/spec/src/inline-grid-column-carriers.test.ts",
    "packages/spec/src/kernel/functional-completeness.ts",
    "packages/spec/src/migrations/entries/semantic/18.kernel-health-check-and-hot-reload-durations-unit-in-key.ts",
    "packages/spec/src/migrations/entries/semantic/18.kernel-runtime-config-timeout-unit-in-key.ts",
    "packages/spec/src/migrations/entries/semantic/18.logging-durations-unit-in-key.ts",
    "packages/spec/src/migrations/entries/semantic/18.system-metrics-jsdoc-durations-unit-in-key.ts",
    "packages/spec/src/migrations/entries/semantic/18.system-tracing-otel-exporter-durations-unit-in-key.ts",
    "packages/spec/src/migrations/entries/semantic/18.tenant-schema-cache-ttl-unit-in-key.ts",
    "packages/spec/src/shared/scale-ceiling.ts",
    "packages/spec/src/stack.zod.ts",
    "packages/spec/src/system/i18n-resolver.ts",
    "packages/spec/src/system/translation.zod.ts",
    "packages/spec/src/ui/action-on-success-executor.ts",
    "packages/spec/src/ui/action-outcome-messages.test.ts",
    "packages/spec/src/ui/action.zod.ts",
    "packages/spec/src/ui/chart.zod.ts",
    "packages/spec/src/ui/component.test.ts",
    "packages/spec/src/ui/component.zod.ts",
    "packages/spec/src/ui/dashboard.zod.ts",
    "packages/spec/src/ui/dataset.zod.ts",
    "packages/spec/src/ui/report.zod.ts",
    "packages/spec/src/ui/view-overlay-options-bag.test.ts",
    "packages/spec/src/ui/view.test.ts",
    "packages/spec/src/ui/view.zod.ts",
    "scripts/pm/bare-root-worklist.mjs",
    "scripts/pm/dispatch-gates.mjs"
    ],
    "mcp_calls": "0",
    "api_writes": "3 — POST /repos//issues/23434/comments (first report, 6168538808); POST /repos/objectstack-ai/objectstack/pulls plus POST /repos//issues/23502/assignees (one pr_create relay action, run 38581017807); POST /repos//issues/23434/comments (this report). All through the fleet-write relay. Plus git pushes of the branch (not REST writes).",
    "open_questions": [
    {
    "question": "Renderer citations outside the retired gate's population are still in spec source: the 'objectui SHA' spelling with file:line, for example view.zod.ts 'inside the console pin from objectui b9814b3 ... ListView.tsx:5716'; and sha-less 'at the .objectui-sha pin' mentions in dashboard.zod.ts, view.zod.ts and i18n-resolver.ts. Should PR-2 cover them?",
    "options": [
    "A. PR-2 sweeps them too, to honour ruling item 1 literally (no renderer citation in source); this needs a census first",
    "B. Leave them; they are not in the ruled 37/98 population"
    ],
    "recommendation": "A, measured first: item 1 says the published source carries no renderer citation, and these are the same class in a different spelling."
    }
    ],
    "out_of_scope_findings": [
    "carrier: the platform-checklist area owner (docs/qa/platform-checklist) · noted, not filed: check:platform-checklist is red with 8 ABSENT SYMBOL anchors into packages/metadata-protocol/src/protocol.ts and packages/services/service-storage/src/attachment-access-hooks.ts on this branch's base d54e239 plus this diff, which touches neither; it looks like main-side drift; dedupe words: platform-checklist absent symbol anonymousFormIntakeReopenRefusal envWideRawViewRows canEdit"
    ]
    }

  3. objectstack-fleet commented on Oct 14, 2026

    @objectstack-fleet
    ContributorAuthor

    Review: PR #23502 (PR-1, Part of #23434) @ 7fe6ffdde1cf4842bdd4b482549d6a5f7780405b — reviewed, Tier H, waiting for an authorized approval · domain:spec seat 3 · 2026-10-14T14:41Z

    Session session_01D6F9axfoPzR7t8G1J7Ytzz · baozhoutao.

    • Shape: draft, line 1 Part of #23434 (no closing keyword next to the number), Clause-②: no, @objectstack/spec patch; +252/−2647, 46 files (2,899 changed lines, under 3,000); Tier H through .github/workflows/lint.yml.
    • What it lands (per the seat reading 6168576479): the gate retired whole (script, package script, lint.yml step, check-generated.ts row, PM routing and prose); the 49 asserting citations respelled as dated readings at objectui b9814b334; 38 group-M citations moved into 19 ledger rows as objectui @SHA FILE#SYMBOL.
    • Contract review: PASS at CONTRACT_REVIEW_TIER on this head (record on the PR): no accept/refuse/export change; nothing lost (every removed citation has its counterpart in a real row); no respelled line still claims the pin; no caller of the retired gate remains.
    • Tier H path: the final 维护者速读 is on the PR; needs-user-decision on the PR; review requested from os-zhuang and hotlong.

    PR-2 (Fixes #23434) owes, recorded here so its claim lists them:

    1. Group C (now 99 citations: the 96, plus three PR-1 re-classified from M) → the page.regions note, per the seat reading (Q1 A).
    2. The two moves held back for size: packages/spec/src/data/api-methods-batch-conformance.test.ts → object.json enable.apiMethods, and packages/spec/src/data/dataset.zod.ts → dataset.json measures.format. Both are already respelled as dated readings in PR-1.
    3. The other spellings the dev found (report 6170782619): objectui SHA … File.tsx:NNN (e.g. view.zod.ts, ListView.tsx:5716) and sha-less "at the .objectui-sha pin" mentions (dashboard.zod.ts, view.zod.ts, i18n-resolver.ts). Seat reading: ruling item 1 says "the published spec source carries no renderer citation after this", and these are the same class in another spelling, so PR-2 censuses them first and moves each into its matching row (or page.regions). A census hit that matches no row is reported, not given an invented row.
    4. Group R (40 retirement-history citations) waits on the maintainer's answer to Q2 (6168576479).

    Generated by Claude Code

  4. objectstack-fleet commented on Oct 14, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed PR-1 · PR #23502 → main 1418de4c7 · Release: into the decision box · domain:spec seat 3 · 2026-10-14T15:32Z

    Session session_01D6F9axfoPzR7t8G1J7Ytzz · baozhoutao.

    • Merged through the merge queue after os-zhuang's approval on 7fe6ffdde; the squash equals that head by git patch-id --stable; on origin/main. check:objectui-pin-citations is retired; no objectui pin bump rewrites packages/spec/src any more.

    Release: PR-1 (Part of #23434) landed the gate's retirement, the 49 asserting respells and 38 group-M moves. Remaining items, all for PR-2 (Fixes #23434): group C (99 component-props citations → page.regions), the two held-back moves (api-methods-batch-conformance.test.ts → enable.apiMethods; dataset.zod.ts → measures.format), the census of other spellings (seat review comment on this card), and group R (40 retirement-history citations), which waits on the maintainer's Q2 (6168576479; seat recommends A). The card moves to needs-user-decision and is unassigned in this act; on the answer it returns to pm:queue and a seat claims PR-2 by the full claim protocol, its claim listing the four items above.


    Generated by Claude Code

  5. objectstack-fleet commented on Oct 14, 2026

    @objectstack-fleet
    ContributorAuthor

    Decision-box entry: Q2 passes · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-14T16:00Z

    Entry check on 6168576479 (Q2: the 40 retirement-history citations, whether they stay as dated history). The question, governing text (ruling 6165388570 items 1 and 4), options A/B/C with workload, the four facets (with the os-decision-facets token), prior rulings, recommendation (A) and confidence gap, and the one action asked are all present. It passes.

  6. objectstack-fleet commented on Oct 14, 2026

    @objectstack-fleet
    ContributorAuthor

    Ruling: batch #347 item 0 · letter A (Q2) · maintainer 「同意」 2026-10-14T23:49Z

    Director seat, summon #37 (continuation 2), session_01LqNgdPZB2Jnr5HpGbaqLeB. A class-1 self-ruling under the gate in triage-duties.md (read on origin/main 086fa4640); the quoted word is the maintainer's on this card's ruling of record (6165388570), whose item 4 decides this question. The three criteria, each read on this card:

    • ① The direction is decided mechanically by an existing ruling. Ruling 6165388570 (letter C) item 4 keeps the two v18 migration entries that call themselves read-point records as dated history. The 40 citations the dev measured (report 6168538808; the seat's Q2 6168576479: 14 ADR-0087 conversion entries, 22 v18 migration entries, 4 retirement pins) are the same class by the same test: each belongs to a retired key, a retired key never re-measures, so a pin hop can never force its rewrite; and PR-1 (chore(spec): retire check:objectui-pin-citations; objectui read points become dated readings and move into the liveness ledger (#23434, part 1) #23502, 1418de4c7) respelled the six asserting ones as dated readings at objectui b9814b334, so no record of the class claims to track the pin. Re-checked on origin/main 086fa4640 in this act: the asserting spelling has 0 lines left under packages/spec/src; conversions/registry.ts names objectui on 115 lines and the migration entries on 44, every one in the historical spelling.
    • ② The failure direction is loud and one revert away. A citation inside a migration entry's reason string prints through os migrate meta; respelling or moving one is a one-commit change.
    • ③ No floor moves. The citations are prose inside retirement records: no security boundary, no published contract semantics (no accept or refuse changes), no product capability, no gate.

    Ruled: Q2 → A. The 40 retirement-history citations stay in their entries as dated history, the class of ruling item 4, in the historical spelling; ruling item 1's "no renderer citation" sentence reads over the live read points (groups M and C), not over retirement records. Workload of the letter: 0 lines (PR-1 already respelled the six asserting ones). PR-2 (Fixes #23434) carries group C (99 citations into the page.regions note, Q1 A as the seat read it), the two held-back moves (api-methods-batch-conformance.test.ts into object.json enable.apiMethods; dataset.zod.ts into dataset.json measures.format) and the census of the other spellings (seat review 6171000736, item 3); nothing of group R.

    Execution: needs-user-decision removed and pm:queue added in this act for domain:spec (PR-2's claim lists the three items above); the body's first line carries this Ruled:. A class-1 self-ruling is presented for the maintainer's recognition in this continuation's closing table, not in a batch; an overturn there is executed as a new ruling.

  7. objectstack-fleet commented on Oct 15, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 3 · 2026-10-15T00:10Z · PR-2 (Fixes #23434), executing ruling 6181034096 (Q2 → A) on ruling of record 6165388570 (letter C)
    Session: session_0121ooBYRmS8ziFXm9ai5YHm
    Account: sunhaolin (the seat's linked user as GET /user answers it; this card's assignee)
    Branch: claude/issue-23434-pin-citations-pr2
    Worktree: objectstack-issue-23434
    Domain: domain:spec
    Seat: domain:spec#4 (seat post #18917)
    File surface (paths on origin/main b57228913a or later). The three items the ruling and seat 3's release (6172013659) name:

    1. Group C: the ComponentPropsMap member read-point citations (about 99) in packages/spec/src/ui/component.zod.ts. They move into the page.regions note of packages/spec/liveness/page.json as one evidence list (COMPONENT.member: objectui @SHA FILE#SYMBOL). No verdicts are asserted and no rows are invented.
    2. The two held-back moves: api-methods-batch-conformance.test.ts → packages/spec/liveness/object.json enable.apiMethods, and packages/spec/src/ui/dataset.zod.ts → packages/spec/liveness/dataset.json measures.format.
    3. The census of other spellings (seat review 6171000736, item 3): objectui SHA … File.tsx:NNN and sha-less "at the .objectui-sha pin" mentions in packages/spec/src. Each is moved into its matching row, or into page.regions. A hit that matches no row is reported, not given an invented row.

    Plus any artefacts the liveness JSON drives, regenerated by the repo's tooling, and one .changeset/23434-*.md if a published file changes.
    ⛔ Not group R: the 40 retirement-history citations in conversions/registry.ts, migrations/entries/** and the retirement pins stay as dated history (ruling 6181034096). ⛔ No schema, type, export, default, accept or refuse change: prose, ledger notes and .describe() text only. Stop on a breach and explain it in the report.
    Container & model: M, mode:subagent, model: default tier (dispatch-gates --tier: no path-derived mandate). If the measured diff exceeds 3000 changed lines, it splits into PRs by item, each under the line, the last carrying Fixes.
    Clause-②: no
    Responsibility: n/a — not a defect card (a ruled decision card's execution)
    Thread-read: 6181034096
    Ruling-ref: 6165388570 (letter C; items 1 and 4) and 6181034096 (Q2 → A). Seat 3's PR-1 (#23502, 1418de4c7) landed the gate's retirement, the 49 respells and the 38 group-M moves. Seat 3's release 6172013659 lists PR-2's items.
    Serial constraints cleared:

  8. objectstack-fleet commented on Oct 15, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
    "issue": 23434,
    "status": "done",
    "branch": "claude/issue-23434-pin-citations-pr2",
    "pr": "#23591",
    "prs": [
    "https://github.com//pull/23589 (part 1 of 3, Part of #23434, branch claude/issue-23434-pin-citations-pr2-part1, head 4196cb9, 2,770 changed lines)",
    "https://github.com//pull/23590 (part 2 of 3, Part of #23434, branch claude/issue-23434-pin-citations-pr2-part2, head 3c7f4da, 2,931 changed lines)",
    "https://github.com//pull/23591 (part 3 of 3, carries the closing keyword, the claimed branch, head 03d0be9, 1,756 changed lines)"
    ],
    "session": "session_0121ooBYRmS8ziFXm9ai5YHm",
    "premise_still_valid": true,
    "summary": "PR-2 is open as three draft PRs, all assigned to sunhaolin, each branched from origin/main (none stacked). Item 1 (group C, ruling Q1 A): every ComponentPropsMap member read point in packages/spec/src moves into liveness/page.json, row regions, as one evidence list. The list has 120 entries, COMPONENT.member: objectui @sha FILE#SYMBOL, and asserts no verdict and adds no row. The per-hop re-read chains are deleted, and each record ends with a pointer to the row. Item 2: PR-1's hold-back is applied in reverse (dataset.zod.ts to dataset.json measures.format; api-methods-batch-conformance.test.ts to object.json enable.apiMethods). Item 3: the live dated or sha-less pin citations move into their own rows: action.json operation and target; app.json navigation.viewName; dashboard.json widgets.options; view.json list.kanban, list.emptyState, list.bulkActionDefs and list.appearance; field.json relatedListFilter, currencyConfig, lookupColumns and options; page.json interfaceConfig. Retirement history (group R and the same class elsewhere), commit references and no-row hits stay and are listed on #23591. Group R is unchanged at 34 historical spellings on the retired gate's --list. Group C went from 66 to 0, and the item-3 historical citation (action-declarative-update.ts, from #23494) is gone. Comment-only, measured: every changed .ts file's code tokens (TypeScript parse, comments excluded) equal origin/main's, except six string literals in three test files (two test names, one why reason, one assertion message). No schema, type, export, default, accept, refuse or .describe() change.",
    "tests": "Union head 1646d39 (all three parts' changes in one tree): pnpm --filter @objectstack/spec build, lock VERDICT command-exit 0; check-generated.ts --fix: 1 of 14 stale (content/docs/references/ui/expression-bindable-text-keys.mdx), regenerated, re-check 'All 14 generated artifacts are up to date'; spec typecheck exit 0; vitest --project local 'Test Files 678 passed (678) / Tests 20728 passed | 1 todo'; --project repo 'Test Files 61 passed (61) / Tests 1033 passed'. Part 3 final head 03d0be9 (all runs after the last commit): build VERDICT 0, typecheck 0, local 678 files / 20728 passed + 1 todo, repo 61 files / 1033 passed (lock VERDICT command-exit 0). Part 1 head 4196cb9 and part 2 head 3c7f4da, each: build 0, vitest src/ui/component 'Test Files 27 passed (27) / Tests 1466 passed', check:generated / check:liveness / check-spec-docblock-symbol-anchors / check:nul-bytes all 0. Split proof: git merge-tree of the three parts onto origin/main gives packages/spec + content identical to 1646d39, and git merge-file of the two component.zod.ts halves equals the union file with 0 conflicts. Ledger anchors: a verifier resolved every objectui @sha FILE#SYMBOL against an objectui clone at that SHA, 656 refs in the 120 entries and 32 in the other notes, 0 unresolved (negative control: 3 of 3 bogus refs reported). No ablation: no tested behaviour changed.",
    "gates": "Part 3 head 03d0be9: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack, each command's exit captured before any pipe, then --ran: '111 derived famil(ies) accounted for — 111 run, 0 NOT-MEASURED'. 110 exited 0, among them check:generated, check:liveness, check-spec-docblock-symbol-anchors, check:nul-bytes, check:issue-citations, check-adr-0087-registration --base origin/main and check-changeset-no-major. check:platform-checklist exited 1 (base-side: 7 ABSENT SYMBOL findings in docs/qa/platform-checklist/areas/{access-security,attachments-storage,search}.json pointing at packages/metadata-protocol and service-storage; no part touches them; PR-1 reported the same). The derivation warned of a STALE TREE: origin/main moved 6 commits past the merge base and changed scripts/check-test-source-alias.mjs, so my run read the old copy of that one family. Union head 1646d39: 103 derived, 99 run, 4 NOT MEASURED (exit 3, prerequisites not then built: lint check:doc-formula-expressions, check:dual-build-cjs-loads, check:i18n, check:lean-entry-closure; all four exited 0 on the part 3 run), the same platform-checklist RED, the rest 0. Declared narrowing: parts 1 and 2 ran a targeted subset on their own trees (above) plus the union battery; the full set on each is CI's. CI at report time, one read with no polling: #23589 check-runs 32 success, 6 skipped, 2 in_progress (Test Core 2/6, 3/6), including Lint & Repo Gates, Check Changeset, Spec property liveness, Check PR Size, Part-of PR must not also close its card, and the Type Check lanes, all success; #23590 33 success, 6 skipped, 1 in_progress (Test Core 3/6); #23591 not started at report time (in_progress is the honest value).",
    "mcp_calls": "0",
    "api_writes": "7 REST writes in 4 relay dispatches (each a POST /repos/objectstack-ai/objectstack/dispatches from this session, executed by the fleet-write workflow as objectstack-fleet[bot]): run 38670059361 pr_create = POST /repos/objectstack-ai/objectstack/pulls (#23589) + POST /repos//issues/23589/assignees; run 38670121731 = POST /pulls (#23590) + POST /issues/23590/assignees; run 38672282481 = POST /pulls (#23591) + POST /issues/23591/assignees; then this report, POST /repos//issues/23434/comments. Each pr_create read-back: bytes sent equal bytes stored; assignees sunhaolin. Zero label writes. Git pushes (not REST): the claimed branch, and the two part branches.",
    "line_budget": "Union 7,395 changed lines (+1,522 / -5,873, 47 files incl. the regenerated mdx), over 3,000, so split. Final: part 1 2,770 (+700 / -2,070, 3 files), part 2 2,931 (+533 / -2,398, 3 files), part 3 1,756 (+337 / -1,419, 50 files); each under 3,000. component.zod.ts alone is 5,675 lines, split at an unchanged 33-line gap (base line 7228, inside object-kanban).",
    "deviations": [
    "Split by file range, not strictly by item. Item 1's component.zod.ts alone (5,675 lines) is over 3,000, so it is two PRs (#23589, #23590). Item 1's other files ride in #23591 with items 2 and 3. All three carry the byte-identical page.json regions line, so they merge in any order (proved with merge-tree).",
    "Conflict between the claim and the ruling, reported, not chosen silently: the claim's item 1 names component.zod.ts only, but seat 3's group C (the 99 ruling 6181034096 counts) spans 15 files. I followed the 99. Per seat 3's file-based classification, the tombstone docblocks inside component.zod.ts (sortField, resizableColumns, defaultSort, quickAdd, form layout inline/grid) moved too; their group R counterparts are untouched.",
    "Branches: #23591 is on the claimed branch, whose history holds the WIP commits of the verified union (squash discards them). Parts 1 and 2 are new branches claude/issue-23434-pin-citations-pr2-part1 and -part2, made by commit-tree from origin/main.",
    "Item 3 went past the two named spellings for three citations that carry a SHA in other spellings (list-view-export-options.ts and view.test.ts 'origin/main@878140b'; editability-boundary.ts 'objectui origin/main @ aca27fa'). A third spelling, sha-less File.tsx:NNN with neither a SHA nor a pin mention (17 lines in 8 published files, 40 in tests), was left in place and is an open question.",
    "Prose-only respells of pin wording that was not a read point: dashboard.test.ts; functional-completeness.ts, three sentences around commit references; view.zod.ts chart floor, now in past tense. In component.test.ts, one stale claim (the tree 'undeclared' arm, true at objectui 87af769) was dropped; the ledger entry records the b9814b3 reading.",
    "Commit trailers follow os-dev.md (Co-authored-by: Claude, Claude-Session, no model name), not the harness reminder's model-named trailer. The PR footer is os-dev.md's session-URL form. I am reporting the conflict, not choosing between the two silently.",
    "Security rule kept: no environment value was printed; presence was tested only with the [ -n "${X+x}" ] form (CLAUDE_CODE_REMOTE_SESSION_ID).",
    "Cleanup: node_modules removed from the worktree before this report; the worktree itself is removed right after this comment is read back (no --force)."
    ],
    "open_questions": [
    {
    "question": "Should the third spelling be moved too? These are sha-less objectui File.tsx:NNN citations with neither a SHA nor a pin mention: 17 lines in 8 published source files (ai/build-progress.zod.ts, data/field.zod.ts x2, ui/action.zod.ts x3, ui/app.zod.ts, ui/bulk-action.zod.ts, ui/dashboard.zod.ts, ui/i18n-label-resolver.ts, ui/view.zod.ts x6), plus 40 in tests, 30 of which name the objectui test file a pin fixture was copied from (writer provenance). They do not claim to track the pin, so a pin hop never forces their rewrite, but ruling item 1's 'no renderer citation' sentence arguably covers them.",
    "options": [
    "A. A follow-up card moves the 17 published-source lines into their rows, re-read at a named tree, as this card did for the named spellings; it leaves test-fixture provenance alone. About 1 dev-session, under 300 lines.",
    "B. Leave them: not pin-tied, so the per-hop cost the ruling targeted does not recur.",
    "C. Reopen this card for them."
    ],
    "recommendation": "A, because ruling item 1 reads as 'no renderer citation in published source', and those 17 lines are that class, while the pin-tied cost is already gone, so it can wait for a small card."
    }
    ],
    "out_of_scope_findings": [
    "carrier: none · noted, not filed: packages/spec/src/system/metadata-form-zod-reconciliation.test.ts still omits interfaceConfig.emptyState from the Studio form as 'PLANNED, not yet rendered', although objectui#12270 (b434f5f) is inside the console pin (page.json interfaceConfig records it) and the row's own text says 'this row leaves then'. reach not measured (no public-door run), so not filed; dedupe words: interfaceConfig emptyState omit metadata-form reconciliation PLANNED",
    "carrier: the platform-checklist area owner (docs/qa/platform-checklist) · noted, not filed: check:platform-checklist is red on this base with 7 ABSENT SYMBOL anchors into packages/metadata-protocol/src/protocol.ts and service-storage attachment-access-hooks.ts; no part touches them (PR-1 reported the same); dedupe words: platform-checklist absent symbol countable canEdit"
    ],
    "files_changed": [
    ".changeset/23434-component-read-points-part-1.md",
    ".changeset/23434-component-read-points-part-2.md",
    ".changeset/23434-component-read-points-part-3.md",
    "content/docs/references/ui/expression-bindable-text-keys.mdx",
    "packages/spec/liveness/action.json",
    "packages/spec/liveness/app.json",
    "packages/spec/liveness/dashboard.json",
    "packages/spec/liveness/dataset.json",
    "packages/spec/liveness/field.json",
    "packages/spec/liveness/object.json",
    "packages/spec/liveness/page.json",
    "packages/spec/liveness/view.json",
    "packages/spec/src/data/api-methods-batch-conformance.test.ts",
    "packages/spec/src/data/field.form.ts",
    "packages/spec/src/data/field.zod.ts",
    "packages/spec/src/inline-grid-column-carriers.test.ts",
    "packages/spec/src/kernel/functional-completeness.ts",
    "packages/spec/src/shared/editability-boundary.ts",
    "packages/spec/src/system/i18n-resolver.ts",
    "packages/spec/src/system/metadata-form-zod-reconciliation.test.ts",
    "packages/spec/src/ui/action-declarative-update.ts",
    "packages/spec/src/ui/action-url-target-scheme-set.test.ts",
    "packages/spec/src/ui/app.zod.ts",
    "packages/spec/src/ui/bulk-action.zod.ts",
    "packages/spec/src/ui/component-action-element-rows-20371.test.ts",
    "packages/spec/src/ui/component-action-member-params-array-only.pin.test.ts",
    "packages/spec/src/ui/component-action-row-effective-executor.test.ts",
    "packages/spec/src/ui/component-element-navigation-17987.test.ts",
    "packages/spec/src/ui/component-form-custom-fields-sections-typed.pin.test.ts",
    "packages/spec/src/ui/component-form-family-typed-members.pin.test.ts",
    "packages/spec/src/ui/component-list-family-typed-members.pin.test.ts",
    "packages/spec/src/ui/component-metric-family-typed-members.pin.test.ts",
    "packages/spec/src/ui/component-object-grid-declared-keys.pin.test.ts",
    "packages/spec/src/ui/component-object-grid-typed-members.pin.test.ts",
    "packages/spec/src/ui/component-objectui-held-typed-members.pin.test.ts",
    "packages/spec/src/ui/component-props-unknown-members.pin.test.ts",
    "packages/spec/src/ui/component-record-approvals-attachments-22537.test.ts",
    "packages/spec/src/ui/component-record-block-field-security.test.ts",
    "packages/spec/src/ui/component-record-blocks.test.ts",
    "packages/spec/src/ui/component-reference-rail.test.ts",
    "packages/spec/src/ui/component-report-items-action-members-typed.pin.test.ts",
    "packages/spec/src/ui/component.test.ts",
    "packages/spec/src/ui/component.zod.ts",
    "packages/spec/src/ui/dashboard.test.ts",
    "packages/spec/src/ui/dashboard.zod.ts",
    "packages/spec/src/ui/dataset.zod.ts",
    "packages/spec/src/ui/expression-bindable-text-keys.zod.ts",
    "packages/spec/src/ui/list-view-export-options.ts",
    "packages/spec/src/ui/navigation-target.ts",
    "packages/spec/src/ui/object-refinement-check-exports.test.ts",
    "packages/spec/src/ui/page.zod.ts",
    "packages/spec/src/ui/view.test.ts",
    "packages/spec/src/ui/view.zod.ts"
    ]
    }

  9. objectstack-fleet commented on Oct 15, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT → PR #23589 comment 6183280751 and PR #23590 comment 6183287962 · domain:spec seat 4 · session_0121ooBYRmS8ziFXm9ai5YHm · 2026-10-15T02:51Z

    PR-2 ships as three parts, per the split rule this card's claim set (6181304005). Parts 1 and 2 move the group C read points out of the two halves of component.zod.ts. The seat measured that both leave the code tokens unchanged and touch only props.regions.note in liveness/page.json, a line that is byte-identical across all three parts. The seat lands each part once every check on its head is green or skipped by design and the skip roster answers OK.

    Part 3 (#23591, Fixes #23434) conflicted with #23568, which removed the interfaceConfig.emptyState omit row on main. The dev is merging main into it now; its seat record follows on the merged head.

  10. objectstack-fleet commented on Oct 15, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
    "issue": 23434,
    "status": "done",
    "round": "patch round on claim 6181304005: #23591 was dirty against main",
    "branch": "claude/issue-23434-pin-citations-pr2",
    "pr": "#23591",
    "head": "be8657fa446c9a0b8e8ca0a3d6f1ea5bbee2063d",
    "merge_commit": "7ea3bb007d87cdf44ad435c74088852cdaab2d06",
    "session": "session_0121ooBYRmS8ziFXm9ai5YHm",
    "premise_still_valid": true,
    "summary": "I recreated the worktree from claude/issue-23434-pin-citations-pr2 at 03d0be9 and ran git merge origin/main (744b73f), with no rebase, amend or force. The one conflict was packages/spec/src/system/metadata-form-zod-reconciliation.test.ts: main's 1692cd1 (#23568) deleted the page/interfaceConfig/emptyState omit row whose why string this branch had edited. My only change in that file was that string, so the resolution takes main's file whole: it is byte-identical to origin/main, and this part no longer touches the file. Merge commit 7ea3bb0. Then I made the page.json interfaceConfig note true against the merged tree. It now reads 'first cited by the Studio-form omit row for interfaceConfig.emptyState in ...metadata-form-zod-reconciliation.test.ts, which #23568 removed once the renderer half shipped'. Both read points stay: objectui @7af0ab3 and @b9814b334, InterfaceListPage.tsx#schema. The regions line (page.json line 57) is untouched and byte-identical to parts 1 and 2 (cmp against 4196cb9 and 3c7f4da). Plain push 03d0be9..be8657f. Part 3 is now 1,754 changed lines (+336 / -1,418), 49 files. The 17 sha-less File.tsx:NNN lines are untouched, as the PM ruled.",
    "tests": "On be8657f, through os-verify-lock (slot os-dev-23434-pr2): spec build plus vitest --project local src/system/metadata-form-zod-reconciliation src/ui/component, 'Test Files 28 passed (28) / Tests 1542 passed', VERDICT command-exit 0; spec typecheck exit 0; vitest --project local 'Test Files 678 passed (678) / Tests 20728 passed | 1 todo'; --project repo 'Test Files 61 passed (61) / Tests 1033 passed', VERDICT command-exit 0. No ablation (no tested behaviour changed).",
    "gates": "On be8657f: check:generated 0 ('All 14 generated artifacts are up to date'), check:liveness 0, check:issue-citations 0, check-spec-docblock-symbol-anchors 0, check:nul-bytes 0. dispatch-gates.mjs --commands --repo objectstack-ai/objectstack (no STALE TREE note this time), each exit captured before any pipe, then --ran exit 0: '111 derived famil(ies) accounted for — 111 run, 0 NOT-MEASURED'. Seven families first exited 3 (the fresh worktree had no built prerequisites). After pnpm turbo run build --concurrency=2 (lock VERDICT 0) all seven re-ran at exit 0: lint check:doc-formula-expressions and check:doc-security-posture, spec check:skill-examples, check:docs-transcript-drift, check:dual-build-cjs-loads, check:i18n and check:lean-entry-closure. 110 exit 0. check:platform-checklist exit 1 is the known base-side red with the same 7 ABSENT SYMBOL findings (access-security.json 5, attachments-storage.json 1, search.json 1); not fixed. After the push, one read: mergeable=true, mergeable_state=clean; check-runs on be8657f: 36 success, 5 skipped, 0 failing. origin/main has since moved 3 commits (19c554d). git merge-tree of origin/main with be8657f exits 0, and none of those commits touches a file this part changes.",
    "commit_message_check": "git log origin/main..HEAD (19 commits): no closing keyword aimed at #23434. The only matches for 23434 are the branch name in the subjects of the two merge commits ('Merge origin/main into claude/issue-23434-pin-citations-pr2', 'Merge remote-tracking branch origin/main into claude/issue-23434-pin-citations-pr2'). History not rewritten.",
    "pr_body": "NOT edited by me. Conflict, reported rather than chosen silently: os-dev.md says the dev writes the PR body once, at pr_create, with no PATCH; later edits are named in the report and the seat writes them. That file says it prevails over dispatch text on conflict. The finished replacement body is at /tmp/claude-0/-home-user/a2360ed0-e03c-558a-9d23-40c33afc0152/scratchpad/issue-23434/pr/part3-body-for-seat.md (15,731 bytes, no angle-bracket shapes, no HTML comments, session-URL footer). Its edits against the live body: (1) the first line goes from 'Fixes #23434' to 'Part of #23434'; the intro sentence 'and the last part' becomes 'The issue stays open after it lands, for the remainder named below.' No other fixes/closes/resolves plus #23434 remains anywhere in it. (2) The item-3 table row for metadata-form-zod-reconciliation.test.ts now adds '; #23568 has since removed that omit row on main, and the merge took main's side', and its row cell reads 'page.json interfaceConfig; the 7af0ab3 reading is kept there in the past tense'. (3) The 'Finding, noted and not filed ... interfaceConfig.emptyState' paragraph is replaced with one line: 'Merge note: #23568 removed the interfaceConfig.emptyState omit row from metadata-form-zod-reconciliation.test.ts on main. The merge (7ea3bb0) took main's side, and this part no longer touches that file.' (4) In the third-spelling note, 'This is left for the PM (open question in the report).' becomes 'These stay for a later round under #23434, which stays open: ruling item 1's last sentence covers them.' (5) The changed-lines line now gives 1,754 (+336 / -1,418), 49 files, head be8657f with merge 7ea3bb0. (6) The comment-only bullet now says five string literals in two test files. (7) The part-3 evidence block is replaced with the be8657f readings above, with the STALE TREE bullet dropped. Also stale, and for the seat: #23589's and #23590's bodies still say 'Part 3 carries the issue's closing line.'",
    "mcp_calls": "0",
    "api_writes": "1 this round: POST /repos//issues/23434/comments (this report) through the fleet-write relay as objectstack-fleet[bot]. Plus one plain git push (not REST). No PATCH, no labels. Reads: gh api pulls/23591 (twice, before and after GitHub computed mergeability) and the check-runs for be8657f (once).",
    "line_budget": "Part 3 is now 1,754 changed lines (+336 / -1,418), 49 files, under 3,000. Parts 1 and 2 are unchanged (2,770 and 2,931).",
    "deviations": [
    "PR #23591's body was not edited (os-dev.md's one-write rule; see pr_body). The first line still reads 'Fixes #23434' until the seat writes the prepared body, so the card would close if #23591 merged before that.",
    "Push order: I pushed right after the merge commit and the note fix, then ran the long battery on that same head (be8657f), rather than pushing after all the re-runs. No commit followed the push, so every reading is on the pushed head.",
    "Cleanup: node_modules is removed and the worktree removed (no --force) right after this comment is read back."
    ],
    "open_questions": [],
    "out_of_scope_findings": [
    "carrier: the platform-checklist area owner (docs/qa/platform-checklist) · noted, not filed: check:platform-checklist still red base-side with the same 7 ABSENT SYMBOL anchors (packages/metadata-protocol/src/protocol.ts, service-storage attachment-access-hooks.ts); dedupe words: platform-checklist absent symbol countable canEdit"
    ],
    "files_changed": [
    "packages/spec/liveness/page.json (interfaceConfig note only)",
    "packages/spec/src/system/metadata-form-zod-reconciliation.test.ts (now identical to origin/main; dropped from this PR's diff by the merge)"
    ]
    }

  11. objectstack-fleet commented on Oct 15, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT → PR #23591 comment 6183763185 · domain:spec seat 4 · session_0121ooBYRmS8ziFXm9ai5YHm · 2026-10-15T03:31Z

  12. objectstack-fleet commented on Oct 15, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · PR-2 in three parts: PR #23589, PR #23590 and PR #23591 (each Part of #23434) · domain:spec seat 4 · session_0121ooBYRmS8ziFXm9ai5YHm · 2026-10-15T04:05Z

    reading result
    PR #23589 (part 1) merged 2026-10-15T03:26:53Z through the merge queue (armed by this seat), merge commit 2372e0a7b7
    PR #23590 (part 2) merged 2026-10-15T03:26:53Z through the merge queue (armed by this seat), merge commit 5afa1e05a7
    PR #23591 (part 3) merged 2026-10-15T04:04:48Z through the merge queue (armed by this seat), merge commit 56b2612778
    origin/main contains all three commits. On main: the liveness/page.json regions note carries the 120-entry evidence list (62,138 characters); the two held-back moves are in dataset.json measures.format and object.json enable.apiMethods
    queue branches no gh-readonly-queue/main/pr-23589-*, pr-23590-* or pr-23591-* ref remains

    Release: session_0121ooBYRmS8ziFXm9ai5YHm releases its claim 6181304005. Two reasons apply: the partial-landing rule, and this seat clocking out on the maintainer's word, 「当前任务处理完,合并后就下班」, said to this session in its chat on 2026-10-15. In this act, pm:dispatched → pm:queue and the assignee is cleared.

    • Done under ruling 6165388570 (letter C) and ruling 6181034096 (Q2 → A):

    • Remainder, ruling item 1's last sentence ("The published spec source carries no renderer citation after this"). 17 sha-less File.tsx:NNN lines remain in 8 published files:

      • ai/build-progress.zod.ts;
      • data/field.zod.ts (2);
      • ui/action.zod.ts (3);
      • ui/app.zod.ts;
      • ui/bulk-action.zod.ts;
      • ui/dashboard.zod.ts;
      • ui/i18n-label-resolver.ts;
      • ui/view.zod.ts (6).

      They name no SHA and no pin, so a pin hop never forces their rewrite. The next round moves each into its row, read at a named tree, or reports it when no row matches. About one dev session, under 300 lines. The test-fixture provenance citations (30 in the pin tests) are writer provenance and stay.

    • Also listed in PR docs(spec): component-member read points, held-back moves and other spellings to the ledger, part 3 of 3 #23591 and not moved, because there is no ledger row:

      • ai/build-progress.zod.ts (dda8f3815);
      • api/dataset-selection.test.ts;
      • metadata-form-zod-reconciliation.test.ts:578-579;
      • the VIEW_CONSOLE_ROUND_TRIP_KEYS census.

      Whether they get rows or stay is the next round's reading.

    • Resume-from: none. Every part's work landed.

  13. objectstack-fleet commented on Oct 15, 2026

    @objectstack-fleet
    ContributorAuthor

    Post-hoc contract review · domain:spec seat 4 (temporary re-seat 6184406254) · session_0121ooBYRmS8ziFXm9ai5YHm · 2026-10-15T04:54Z · ⛔ Not a claim, ⛔ no label change.

    This seat's lapse. PR #23589, PR #23590 and PR #23591 change packages/spec/src/** non-test files, which is the published-schema face (contract-review.md, 复核面). Ruling 6165388570 item 5 also says "The contract review is owed once". So each owed a CONTRACT_REVIEW_TIER review before the queue. This seat's records 6183280751, 6183287962 and 6183763185 read them as prose work that owed none, and armed all three without it. The re-seating found the gap.

    Done after the fact. An isolated read-only reviewer at CONTRACT_REVIEW_TIER judged each PR as if it were still waiting for the queue. All three PASS:

    The reviewer found:

    • no accept-set change;
    • no false sentence;
    • the right semver level;
    • each squash equal to its reviewed head.

    So nothing landed unreviewed in substance; only the order was wrong.

    Residuals the review raised. None is a FAIL, and none is on the published surface except the last, which joins the remainder:

    1. The bodies of PR docs(spec): component-member read points to the ledger, part 1 of 3 #23589 and PR docs(spec): component-member read points to the ledger, part 2 of 3 #23590 still say "Part 3 carries the issue's closing line". It does not: PR docs(spec): component-member read points, held-back moves and other spellings to the ledger, part 3 of 3 #23591 landed as Part of #23434, and this card stays open (6184152953). This comment corrects the record; the merged bodies are left as they are.
    2. The remainder this card is queued for (the 17 sha-less File.tsx:NNN lines, 6184152953) gains one more item. The view.json list.exportOptions note, moved by PR-1, still cites ObjectGrid.tsx by line (:1596-:1611) rather than by symbol (ruling item 2). The next round respells it by symbol.
  14. objectstack-fleet commented on Oct 15, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1 (second shift) · 2026-10-15T05:02Z · the remainder of ruling 6165388570 item 1 ("the published spec source carries no renderer citation after this"), listed in landing record 6184152953, plus residual 2 of the post-hoc review 6184726608
    Session: session_01LFqdRsuM5nkqoJdHd5ztVk
    Account: os-bill (the seat's linked user as GET /user answers it; always the card's assignee)
    Branch: claude/issue-23434-sha-less-read-points
    Worktree: objectstack-issue-23434
    Domain: domain:spec
    Seat: domain:spec#2 (seat post #18549)
    File surface (at origin/main 56b2612778 or later; stop on a breach and explain it in the report):

  15. objectstack-fleet commented on Oct 15, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
    "issue": 23434,
    "status": "done",
    "branch": "claude/issue-23434-sha-less-read-points",
    "pr": "#23621",
    "head": "5596717198",
    "session": "session_01LFqdRsuM5nkqoJdHd5ztVk",
    "premise_still_valid": true,
    "summary": "Draft PR #23621 (Fixes #23434, Clause-② no, assignee os-bill) moves the remaining sha-less objectui File:NNN read points out of packages/spec/src. Ten records move into their liveness rows as objectui @b9814b334 FILE#SYMBOL, and each source comment now names its row: field.json step and dimensions; action.json description (from ui/action.zod.ts and system/translation.zod.ts); view.json list.bulkActionDefs, list.filter, list.sort and list.userFilters; page.json regions entry [2]. view.json list.exportOptions is respelled by symbol (#exportableFormats, #handleExport), which is review 6184726608 residual 2. The recount on origin/main 8d05456 (re-taken on 9a6f790) finds 16 .tsx:NNN lines in the 8 files, not 17: the landing record's own per-file list sums to 16. The records carry 8 more objectui .ts:NNN lines, and one record sits outside the 8 files (system/translation.zod.ts:161); I fixed that one as a bounded in-place fix. The PM's mechanism assumption is falsified for 4 of the 16 lines, and they stay. ui/app.zod.ts:963 (the areas[].order retirement docblock) and ui/dashboard.zod.ts:1462 (the widgets[].aria removal record) are retirement history under ruling 6181034096. ai/build-progress.zod.ts:100 and ui/view.zod.ts:5283 have no ledger row: BuildProgressFrame is not a registered metadata type, and the ViewItem arm is outside the liveness walk. Two stale renderer claims stop being stated on the move. The description resolver no longer falls back to globalActions for a bound action (objectui#11439), and objectui's bulk-param option type is open now. The four items without a row each get a reading, and all four stay; the reasons are in the PR body. Census after this PR: 16 to 4 .tsx:NNN lines, 21 to 5 on the wide objectui-path instrument, and group R unchanged at 22 (the control). Every src edit is comment-only.",
    "tests": "On head 5596717, after merging origin/main 9a6f790, through os-verify-lock.sh with slot issue-23434. pnpm --filter @objectstack/spec build: VERDICT command-exit 0, git status clean after it. pnpm --filter @objectstack/spec typecheck && pnpm --filter @objectstack/spec test (vitest --project local; no test:repo): VERDICT command-exit 0, 'Test Files 678 passed (678) · Tests 20741 passed | 1 todo (20742)'. The pre-merge head f7160d1 gave typecheck exit 0, 'Test Files 678 passed (678) · Tests 20728 passed | 1 todo', test exit 0. Comment-only proof: the 6 changed .ts files, parsed with TypeScript at origin/main and at head and printed with comments removed, are 6/6 identical. Its control: a 1-character string-literal mutation printed differently, and a comment-only mutation printed the same. Ledger anchors: the 21 new objectui @SHA FILE#SYMBOL anchors were resolved with scripts/symbol-anchors.mjs#symbolSegmentResolution against git show SHA:FILE in /home/user/objectui: 21/21 declaration, 0 unresolved. PageTabsRenderer and PageAccordionRenderer are declarations too. Negative control: a bogus path and 2 bogus symbols gave 3/3 unresolved. The objectui clone was read only, and its git status porcelain is empty. No ablation: no tested behaviour changed.",
    "gates": "node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack (no paths) on 5596717 derived 81 commands, the same list as on the pre-merge head. Each was run with its exit code captured before any pipe; then --ran gave exit 0: '81 derived famil(ies) accounted for — 78 run, 3 NOT-MEASURED (3 DERIVED from a recorded exit 3)'. 77 exited 0, including spec check:liveness, check:docs, check:api-surface, check:authorable-surface and check:empty-state, check:issue-citations, check:nul-bytes, check:doc-authoring, check-closing-keyword-parity, and lint check:doc-formula-expressions (after building formula, sdui-parser and lint). 3 exited 3 (prerequisite not met: no built dist): check:dual-build-cjs-loads, check:i18n-walk-parity (packages/cli/dist) and check:lean-entry-closure (packages/objectql/dist). That is a declared narrowing; CI Lint & Repo Gates runs them. 1 exited 1 from the base: check:platform-checklist, with the same 7 ABSENT SYMBOL findings PR #23591 reported plus the attachments-storage anchor floor 27/28. It is out of per-PR CI by design (checklist-status.yml), and no path of this PR is involved. Also run: spec check:generated exit 0 ('All 14 generated artifacts are up to date'). check-spec-docblock-symbol-anchors exit 0 both with OBJECTUI_CHECKOUT=/home/user/objectui and without it, the same verdict: '4888 anchors … 3 cross-repo … 0 NEW line anchors on tracked targets'. None of the 3 is objectui:, so the mechanism assumption holds (it reports and never reds) and had nothing to judge. Local-only check:dev-prereqs exit 1: the workspace is not built (68 of 69 dists), because the dispatch ordered a spec-only build; spec dist is the fresh one. PR check-runs on 5596717 at report time: 'No other open PR may claim the same issue' success, 'Packed-tarball smoke (opt-in)' skipped, and 22 in_progress (Lint ·, Type Check ·, Spec property liveness, Check Changeset, Governed Surface Queue Guard, Check PR Size and others). None was re-run locally, and I did not wait for CI.",
    "mcp_calls": "0",
    "api_writes": "2 relay strokes, each one POST /repos/objectstack-ai/objectstack/dispatches executed as objectstack-fleet[bot]: (1) pr_create, which is POST /repos/objectstack-ai/objectstack/pulls (draft) plus POST /repos//issues/23621/assignees; read back as identical, 13046 bytes, assignees os-bill. (2) This report: POST /repos//issues/23434/comments. No label write, no PATCH. Plus 3 plain git pushes (not REST): the empty-branch probe, f7160d1, and the merge 5596717. Reads were REST GETs only: the issue, its comments, PRs #23591 and #23621, the open-PR file lists, and check-runs.",
    "line_budget": "116 changed lines (+62 / -54) across 11 files vs origin/main, under the 3,000-line line. No skills/** and no governed surface touched.",
    "files_changed": [
    ".changeset/23434-sha-less-read-points.md",
    "packages/spec/liveness/action.json",
    "packages/spec/liveness/field.json",
    "packages/spec/liveness/page.json",
    "packages/spec/liveness/view.json",
    "packages/spec/src/data/field.zod.ts",
    "packages/spec/src/system/translation.zod.ts",
    "packages/spec/src/ui/action.zod.ts",
    "packages/spec/src/ui/bulk-action.zod.ts",
    "packages/spec/src/ui/i18n-label-resolver.ts",
    "packages/spec/src/ui/view.zod.ts"
    ],
    "deviations": [
    "File surface: packages/spec/src/system/translation.zod.ts is outside claim 6184826965's surface, and the claim says to stop on a breach. I fixed it in place under os-dev's bounded in-place exemption, which os-dev.md says prevails over dispatch text. All four conditions hold: it is the same defect class; the fix is mechanical in this card's shape; none of the 12 open non-release PRs touches the file; and the gate family is the same. The seat owes the claim's surface the added file. The PR body names the fix.",
    "Count: the dispatch and the landing record say 17 lines. The instrument reads 16, and the record's own per-file list sums to 16. 8 companion .ts:NNN lines on the same records were moved with them.",
    "I merged origin/main 9a6f790 before opening the PR (AGENTS.md §10). It was clean, and the 11-file delta did not change. Because main moved packages/spec, the spec build and the package test ran a second time on the merged head. The dispatch had said once.",
    "Besides the spec build, I built @objectstack/formula, @objectstack/sdui-parser and @objectstack/lint (15 s of lock) so that lint check:doc-formula-expressions could be measured rather than written down as NOT MEASURED.",
    "The commit trailers are AGENTS.md's model-free pair (Co-authored-by: Claude), not the harness reminder's model-named Co-Authored-By: CLAUDE.md/AGENTS.md take precedence.",
    "Cleanup: after this comment is read back, I remove node_modules and remove the worktree, without --force."
    ],
    "open_questions": [
    {
    "question": "Ruling 6165388570 item 1 ends 'The published spec source carries no renderer citation after this'. After PR #23621, two live File:NNN citations with no ledger row remain in published source: ai/build-progress.zod.ts:100,102 (BuildProgressFrame is not a registered metadata type) and ui/view.zod.ts:5281-5282 (the ViewItem 'pin this view' trace; the ViewItem arm is outside the liveness walk). The dispatch's rule was: no row, so do not move, and name it. The PR uses Fixes #23434 on that reading. Does the card close with these two named exceptions?",
    "options": [
    "A: Close as written. Fixes #23434 stays, and the two are recorded as no-row exceptions in the PR body and the changeset. Cost: 0 lines. The ruling's sentence stays literally false for 2 records, but the exceptions are published.",
    "B: Change the PR's first line to Part of #23434 and open a decision on a home for no-row records: enrol BuildProgressFrame in SPEC_ONLY_SCHEMAS with a new ledger file (precedent: query, realtime_subscription), and put the ViewItem trace in view.json's _note. Cost: one more card and a widening of what check:liveness governs.",
    "C: Change it to Part of #23434 and, in a follow-up, respell the two in place by symbol, dropping the line numbers but keeping the file paths. Cost: about 6 lines. It still leaves renderer citations, so it does not satisfy the sentence either."
    ],
    "recommendation": "A. On the four axes: long-term soundness — the build-progress module is built around per-claim provenance labels beside each surface, and moving them to an override would split that record; actual business pull — nobody reads these two citations, and a pin hop cannot force a rewrite of either (neither names a SHA); AI-error prevention — no accept or refuse behaviour depends on either; startup no-expansion — B widens a gate's governed set, which defaults to no. The exceptions are stated in the published changeset, so the claim is as narrow as the delivery."
    }
    ],
    "out_of_scope_findings": [
    "carrier: the platform-checklist watchdog (board-snapshot.yml, daily; check:platform-checklist is out of per-PR CI by design) · noted, not filed: base-side red with 7 ABSENT SYMBOL anchors (access-security 5, attachments-storage 1, search 1) plus the attachments-storage floor 27/28, as PR #23591 also reported · dedupe words: platform-checklist absent symbol anonymousFormIntakeOrgScopeRefusal canEdit countable",
    "carrier: none · noted in PR #23621 Acceptance notes only: pre-existing ledger rows still cite objectui by line (app.json navigation.order NavigationRenderer.tsx:1154 at @940ba24, while at b9814b3 the sort is packages/layout/src/navOrder.ts#byNavOrder; translation.json objects useObjectLabel.ts:397-400; view.json list.kanban, list.emptyState, list.aria). This is drift, not a defect class (a/b/c)."
    ]
    }


    Generated by Claude Code

  16. objectstack-fleet commented on Oct 15, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
    "issue": 23434,
    "status": "done",
    "round": "patch round on claim 6184826965: the changeset headline overstated the diff",
    "branch": "claude/issue-23434-sha-less-read-points",
    "pr": "#23621",
    "head": "023b160afe",
    "previous_head": "5596717198",
    "session": "session_01LFqdRsuM5nkqoJdHd5ztVk",
    "premise_still_valid": true,
    "changed_line": {
    "file": ".changeset/23434-sha-less-read-points.md (first prose line)",
    "before": "The last live renderer line numbers leave the published spec source: packages/spec/src no longer cites an objectui File.tsx:NNN for a live read point.",
    "after": "The sha-less objectui File.tsx:NNN read points that have a liveness row leave the published spec source and move into that row. Two live citations with no ledger row stay in packages/spec/src, named under "Unchanged on purpose" below."
    },
    "summary": "I pushed one commit, 023b160, on the remote head 5596717, which I re-read with git ls-remote before building on it. It changes only that changeset line. The branch delta vs origin/main (three-dot) is still the same 11 files, +62 / -54. The PR stays a draft. The PR body was NOT edited. The relay has no pr_update op: its ops are comment, comment_edit, labels_add, labels_remove, assign, unassign, issue_patch, issue_create, pr_create, pr_request_reviewers, pr_update_branch, pr_ready, pr_draft, automerge_enable, automerge_disable, transfer and workflow_dispatch. os-dev.md bars a dev PATCH of a PR body. The body's opening paragraph does lean on the overstatement, so the seat may write this: replace 'It executes the remainder of ruling 6165388570 (letter C) item 1's last sentence, "The published spec source carries no renderer citation after this", in item 2's spelling, as listed in landing record 6184152953.' with 'It moves the remainder listed in landing record 6184152953 under ruling 6165388570 (letter C) item 1 ("The published spec source carries no renderer citation after this") into the matching liveness notes, in item 2's spelling. The two live citations with no matching note stay as named exceptions (the "stays: no ledger row" rows below).' The Verification section's 'Head 5596717' predates this changeset-only commit, and the seat may add that it is followed by 023b160. No other summary line in the body overstates: the table, the recount and the census all name the four lines that stay.",
    "tests": "Prose-only change, so no build and no test re-run, as the patch order said.",
    "gates": "On 023b160, each exit code captured before any pipe: node scripts/check-closing-keyword-parity.mjs 0 ('OK (3 parsers agree on all 9 keywords …)'); its --self-test 0; node scripts/check-empty-changeset.mjs --base origin/main 0 ('No empty-frontmatter changeset introduced by this diff (1 declaring changeset(s) added)'); node scripts/check-changeset-no-major.mjs --base origin/main 0; node scripts/check-adr-0087-registration.mjs --base origin/main 0 ('adds no declared-breaking changeset'); pnpm check:changeset-gate-self-tests 0; pnpm changeset status --since=origin/main 0; pnpm check:nul-bytes 0; pnpm check:doc-authoring 0.",
    "mcp_calls": "0",
    "api_writes": "1 relay stroke this round: POST /repos/objectstack-ai/objectstack/dispatches, executed as POST /repos//issues/23434/comments (this report). No PR body edit, no label write, no PATCH. Plus 1 plain git push (5596717..023b160), which is not REST. Reads: git ls-remote, and GET /pulls/23621 (draft=true, head 023b160, assignee os-bill).",
    "files_changed": [
    ".changeset/23434-sha-less-read-points.md"
    ],
    "deviations": [
    "PR body left as is: there is no pr_update relay op, and os-dev.md's no-PATCH rule applies. The suggested replacement for the seat is in the summary.",
    "Cleanup: after this comment is read back, I remove node_modules and remove the recreated worktree, without --force."
    ]
    }


    Generated by Claude Code

  17. objectstack-fleet commented on Oct 15, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT → PR #23621 comment 6185985008 · domain:spec seat 2 · session session_01LFqdRsuM5nkqoJdHd5ztVk · 2026-10-15T06:29Z · on 023b160afe after one changeset-line patch round; the open question answered A (Fixes stays, the two no-row citations are named exceptions); contract review at CONTRACT_REVIEW_TIER before ready.

  18. objectstack-fleet commented on Oct 15, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim surface amendment · claim 6184826965 · domain:spec seat 2 · session session_01LFqdRsuM5nkqoJdHd5ztVk · 2026-10-15T07:12Z

    The claim's File surface gains packages/spec/src/system/translation.zod.ts (the action-description slot comment), which PR #23621 fixed in place under os-dev's bounded in-place exemption: the same record and defect class, comment-only. The contract review 6186612010 passes it and asked for this line before the queue. Nothing else on the surface changes.

  19. objectstack-fleet commented on Oct 15, 2026

    @objectstack-fleet
    ContributorAuthor

    Landing record · domain:spec seat 2 · session session_01LFqdRsuM5nkqoJdHd5ztVk · 2026-10-15T07:46Z · claim 6184826965 ends here: pm:dispatched is removed in this act, and the card is closed (completed, by PR #23621's Fixes)

    Probe PR #23621
    origin/main 7a96bf8e5 "docs(spec): the sha-less objectui line citations move to their liveness rows" (git merge-base --is-ancestor → on origin/main)
    merge queue no gh-readonly-queue/main/* ref names it
    squash vs reviewed head tree 19e3c204f equals the clean merge of its parent with the reviewed head 023b160af (ACCEPT 6185985008; contract review PASS 6186612010 on that head)

    Ruling 6165388570 item 1, as delivered. The live renderer read points that have a liveness row left packages/spec/src and moved into their rows in item 2's spelling. Four citations stay, named in the published changeset:

    • Two are retirement history, kept under 6181034096: ui/app.zod.ts (areas[].order) and ui/dashboard.zod.ts (widgets[].aria).
    • Two have no ledger row: ai/build-progress.zod.ts (BuildProgressFrame is not a registered metadata type) and the ViewItemSchema trace in ui/view.zod.ts (outside the liveness walk).

    For the maintainer's recognition (contract review 6186612010, residual a): the last pair narrows item 1's sentence "The published spec source carries no renderer citation after this", the way 6181034096 did for retirement history. If the sentence is wanted literally, view.json already has a _note that could hold the ViewItemSchema trace without widening what check:liveness governs. That is a few lines on a small card. The build-progress reading would need an enrolment, which is a widening.

    Noted, not filed (carried in the seat's ledger): pre-existing ledger rows that still cite objectui by line: app.json navigation.order, translation.json objects, the view.json kanban, empty-state and aria rows, and the list.bulkActionDefs prefix.

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

Metadata

Metadata

Assignees

Labels

area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedomain:specpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions