Skip to content

Commit 1418de4

Browse files
chore(spec): retire check:objectui-pin-citations; objectui read points become dated readings and move into the liveness ledger (#23434, part 1) (#23502)
Part of #23434. This PR is the first half of ruling C (comment 6165388570). PR-2 carries the closing keyword. Clause-②: no ## What changes 1. **`check:objectui-pin-citations` retires whole.** This deletes `packages/spec/scripts/check-objectui-pin-citations.ts` (including its `--verify-anchors` mode), its `packages/spec/package.json` script, the `lint.yml` step, the gate's `NO_GENERATOR` row in `packages/spec/scripts/check-generated.ts`, its `CENSUS_REFUSE_WIDE` row and prose in `scripts/pm/bare-root-worklist.mjs` (the self-test was re-counted to 13 members and is green), and the prose that named the gate in `scripts/pm/dispatch-gates.mjs`, `packages/spec/scripts/check-llms-txt.ts`, `packages/spec/src/ui/component.zod.ts` and `packages/spec/src/ui/view.zod.ts`. Nothing routes the family any more: `dispatch-gates` learned the family only from the script's own watch hints. 2. **All 49 asserting citations are respelled as dated readings.** These were the citations spelled with the pin file, an equals sign and a sha. Each now says it was read at objectui `b9814b334` and no longer claims to be "the pin this repo builds against". Only that spelling changed. No record is deleted by this step. The 49 sit in `component.zod.ts`, `component.test.ts`, `functional-completeness.ts`, `view.zod.ts`, `action.zod.ts`, `action-outcome-messages.test.ts`, `dataset.zod.ts`, `api-methods-batch-conformance.test.ts`, and the `reason` text of six v18 semantic migration entries (`kernel-runtime-config-timeout-unit-in-key`, `kernel-health-check-and-hot-reload-durations-unit-in-key`, `logging-durations-unit-in-key`, `system-metrics-jsdoc-durations-unit-in-key`, `system-tracing-otel-exporter-durations-unit-in-key`, `tenant-schema-cache-ttl-unit-in-key`). After this PR, nothing in `packages/spec/src` carries that spelling: the retired gate's own `--list`, re-run from the base tree against this head, reports 0. 3. **38 group-M citations move into the `note` of their ledger row**, written as `objectui @sha FILE#SYMBOL`. Every symbol was resolved against `/home/user/objectui` at the cited sha. No line numbers. The source keeps the claim in shortened prose and drops the per-hop re-read chains. The receiving rows: - `view.json`: `list.calendar`, `list.gantt`, `list.timeline`, `list.map` (the completeness table in `kernel/functional-completeness.ts`; the `ListMapConfigSchema` strictness record with its seven quoted anchors; `view.test.ts`; `view-overlay-options-bag.test.ts`), `list.chart` (`resolveListChartBinding`), `form.sections` (form-row `span` / `scale`) - `action.json`: `outcomeMessages`, `onSuccess.navigate` (`action-on-success-executor.ts`), `aria` (the tombstone comment) - `dashboard.json`: `widgets`, `widgets.values`, `widgets.chartConfig.aria` - `report.json`: `chart`, `blocks` - `field.json`: `options`, `scale` (also `shared/scale-ceiling.ts`), `inlineColumns` (`stack.zod.ts`, `inline-grid-columns.ts` and its test, `inline-grid-sort-fields.ts`, the column-type case of `inline-grid-column-carriers.test.ts`) - `translation.json`: `flows.screens`, `flows.label` 4. **One `.describe()` changed:** the form-field `span` text drops the commit it named. `content/docs/references/ui/view.mdx` is regenerated (`check:generated --fix` proved it stale and nothing else). 5. Patch changeset `.changeset/23434-objectui-read-points-to-ledger.md`. No schema, type, export, default or refusal changed. ## Census (re-measured on this branch's base, `d54e2393b`) The ruling's "37 + 98 lines" counted grep lines. The real population is 179 citations in 63 tracked files: 49 asserting and 130 historical. Another 24 sit in the gitignored, generated `migrations/registry.ts`. Group M had 43 citations in my first count. Three of those turned out to be `ComponentPropsMap` read points (`ui/page.zod.ts` `visibleWhen` roots, and the `object-master-detail-form` detail entry and `record:line_items` keys in `inline-grid-column-carriers.test.ts`), so they move to group C. Two more are held back for size (see Acceptance notes). That leaves 38 moved here. After this PR, the retired gate's `--list` (run from the base tree) finds 0 asserting and 100 historical: 66 in group C and 34 in group R. ## Acceptance notes - **Moved in PR-2:** the `api-methods-batch-conformance.test.ts` record (row `object.json` `enable.apiMethods`) and the `dataset.zod.ts` measure `format` record (row `dataset.json` `measures.format`). Both were moved on this branch and then reverted to keep the PR under 3,000 changed lines. Their asserting respell stays here. The moved form is kept as a patch in the session scratchpad for PR-2. - **Group C (99 `ComponentPropsMap` citations, the three re-classified above included; its 33 asserting ones are already respelled here)** goes to `page.json` `page.regions` in PR-2, per the seat reading. **Group R (40 retirement-history citations; its 6 asserting ones are already respelled here)** waits on the maintainer's answer to Q2. - Outside the retired gate's population: renderer citations that never used the pin-file spelling are still in source, for example `ui/view.zod.ts` "inside the console pin from objectui `b9814b334` … `ListView.tsx:5716`", and mentions such as "at the `.objectui-sha` pin" that name no sha (`dashboard.zod.ts`, `view.zod.ts`, `i18n-resolver.ts`). Neither is in ruling item 1's 37/98 count. Recorded, not changed. - `check:platform-checklist` is red on this branch with 8 ABSENT SYMBOL findings, in `docs/qa/platform-checklist/areas/{access-security,attachments-storage,search}.json`. They point at `packages/metadata-protocol/src/protocol.ts` and `packages/services/service-storage/src/attachment-access-hooks.ts`. This diff touches none of those files. NOT judged as this PR's red. ## Verification (head `7fe6ffdde`) - `pnpm --filter @objectstack/spec build`: exit 0. `check:generated`: 1 of 14 stale (`check:docs`, the `span` describe), fixed with `--fix`. `check:liveness`, `check:spec-changes` and `check:upgrade-guide` re-run at head: exit 0. - `@objectstack/spec` `test` (local project): 676 files, 20,580 tests passed. `test:repo`: 60 files, 1,029 passed. Both ran before the final hold-back commit. After it, the two reverted files' suites ran again at head: 3 files, 89 passed. - `@objectstack/lint` tests (the ledger's consumer): 139 files, 6,726 passed. - `node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --ran` (with exit codes): 174 derived, 174 accounted, 166 run, 8 with exit 3 (prerequisite not built). Two of those 8, `check:doc-formula-expressions` and `check:doc-security-posture`, re-ran green after building lint and formula. NOT MEASURED, because they need the CLI or a whole-repo `dist`: `check:skill-examples`, `check:docs-transcript-drift`, `check:dual-build-cjs-loads`, `check:i18n`, `check:i18n-walk-parity`, `check:lean-entry-closure`. One non-zero is `check:platform-checklist` (see above). Every other derived gate exited 0, including `check:nul-bytes`, `check:issue-citations`, `check-spec-docblock-symbol-anchors` and `bare-root-worklist --self-test`. ## 维护者速读(草稿) **改了什么**:删掉门禁 `check:objectui-pin-citations`(脚本、package 脚本、`lint.yml` 一步、相关登记)。spec 源码里 49 处"等于当前 objectui pin"的断言式引用,改写成"在 objectui `b9814b334` 读到"的日期读数。38 处有台账行可对应的渲染端读点,从 spec 注释搬进 `packages/spec/liveness/*.json` 的 note,写法是"文件#符号",不写行号。协议本身(schema、类型、导出、默认值、拒收)一处没动。 **为什么改**:裁决 C(「同意」)。以前每次 objectui 升级 pin,这道门禁都逼 spec 改写几十行注释,还要再做一次契约复核。这个 PR 落地后,升级 pin 不再碰 `packages/spec/src`,除非某个键的行为真的变了。 **风险与代价(含回滚)**:只改注释、台账 note 和一段 describe 文字,运行时行为不变。代价是以后没有门禁把这些读点钉在 pin 上。读点改用符号锚定,符号被改名或删除时才需要重测,这正是裁决要的。回滚就是整个 revert 这个 PR,门禁和原注释一起恢复。剩下两组(组件成员读点 99 处、退役历史 40 处)和两条暂缓的搬迁,放在 PR-2。 **席位意见**: **你要做的**:审一遍,点 approve,让席位合并(`lint.yml` 改动属于 Tier H)。 --- _Generated by [Claude Code](https://claude.ai/code/session_01D6F9axfoPzR7t8G1J7Ytzz)_ --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent f9b4217 commit 1418de4

46 files changed

Lines changed: 252 additions & 2647 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
---
2+
'@objectstack/spec': patch
3+
---
4+
5+
The spec source no longer ties its objectui read-point records to the console pin. A console pin bump now changes no `packages/spec/src` text unless a key's behaviour changes.
6+
7+
Clause-②: no
8+
9+
- **Pin-tied citations are gone.** Every citation that said it named the objectui commit this repository builds against (the 49 written `` `.objectui-sha` = <sha> ``) now states the commit it was read at, `b9814b334`, and no longer claims to follow the pin. Six of them are inside the `reason` text of v18 semantic migration entries (`kernel-runtime-config-timeout-unit-in-key`, `kernel-health-check-and-hot-reload-durations-unit-in-key`, `logging-durations-unit-in-key`, `system-metrics-jsdoc-durations-unit-in-key`, `system-tracing-otel-exporter-durations-unit-in-key`, `tenant-schema-cache-ttl-unit-in-key`). Only that wording changes there. The measurement each entry reports is unchanged.
10+
- **Read points that have a liveness-ledger row moved into it.** 38 citations moved out of doc comments and test headers into the `note` of their row in `packages/spec/liveness/*.json`. That covers the view-binding completeness table, the list-view map, chart and form-span records, action `outcomeMessages` / `onSuccess` / `aria`, dashboard widgets and chart `aria`, joined reports, field `options` / `scale` / `inlineColumns`, and translation `flows`. Each moved note names the renderer by symbol, as `objectui @<sha> <file>#<symbol>`, never by line number. The long per-hop re-read chains are dropped. What each record claims is kept, either in the ledger note or in the shortened doc comment.
11+
- **No schema, type, export, default or refusal changes.** The one `.describe()` that changed is the form-field `span` text. It now gives the renderer's behaviour without naming a commit, and `content/docs/references/ui/view.mdx` was regenerated to match.
12+
- Component-member read points (`ComponentPropsMap`), the dataset measure `format` and `enable.apiMethods` records, and retirement-history citations still carry their dated objectui commits in the source. A later change handles them.

‎.github/workflows/lint.yml‎

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5649,13 +5649,6 @@ jobs:
56495649
continue-on-error: true
56505650
run: pnpm --filter @objectstack/spec check:template-manifests
56515651

5652-
# Rationale: `packages/spec/scripts/check-objectui-pin-citations.ts` header
5653-
# (#10274, #9881, #9972, #9397, #10137, #5010).
5654-
- name: Check spec pin citations still name the pin this repo builds against
5655-
id: check-spec-pin-citations-still-name-the-pin
5656-
continue-on-error: true
5657-
run: pnpm --filter @objectstack/spec check:objectui-pin-citations
5658-
56595652
# #11344. `packages/spec/llms.txt` is hand-kept, has no generator, and
56605653
# SHIPS in the published tarball as context for AI consumers — the
56615654
# audience least able to notice staleness and most likely to turn a claim

‎content/docs/references/ui/view.mdx‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ Column footer summary configuration
221221
| **required** | `boolean` | optional | Required override |
222222
| **hidden** | `boolean` | optional | Hidden override |
223223
| **colSpan** | `integer` | optional | Absolute column span (1-4). The renderer clamps it to the form grid's current column count, so the cell starts at a real column boundary at every surface width and never overflows (`colSpan: 4` in a 3-column grid renders as 3); a `colSpan` within the column count renders as authored, and `colSpan: 1` emits no span class at all. |
224-
| **span** | `Enum<'auto' \| 'full'>` | optional (default: `"auto"`) | Relative field width. 'auto' (default — omit it): the renderer sizes the field from its widget type × the current column count — at the pin this repo builds against (`.objectui-sha` = `b9814b334d8a`), only textarea, markdown, html, richtext and repeater resolve to the full column count (repeater reaches it through the wide `field:grid` widget it maps to). 'full': resolves to the form grid's full column count. How far down the container-query tiers that span is emitted is the renderer's, not this key's: at that same pin the renderer emits one clamped col-span class per multi-column tier (`@md:col-span-2 @2xl:col-span-3` for a 3-column grid), so the field takes the whole row at every multi-column tier, not just the widest. |
224+
| **span** | `Enum<'auto' \| 'full'>` | optional (default: `"auto"`) | Relative field width. 'auto' (default — omit it): the renderer sizes the field from its widget type × the current column count — only textarea, markdown, html, richtext and repeater resolve to the full column count (repeater reaches it through the wide `field:grid` widget it maps to). 'full': resolves to the form grid's full column count. How far down the container-query tiers that span is emitted is the renderer's, not this key's: the renderer emits one clamped col-span class per multi-column tier (`@md:col-span-2 @2xl:col-span-3` for a 3-column grid), so the field takes the whole row at every multi-column tier, not just the widest. |
225225
| **widget** | `string` | optional | Custom widget/component name (overrides type-based inference) |
226226
| **language** | `string` | optional | Code editor language (for type=code) |
227227
| **keyField** | `{ field?: string; label?: string \| Record<string, string>; placeholder?: string \| Record<string, string>; helpText?: string \| Record<string, string>; … }` | optional | Key column config for record-typed fields |
@@ -351,7 +351,7 @@ Form-view select option — the object-field option shape minus the per-option `
351351
| **required** | `boolean` | optional | Required override |
352352
| **hidden** | `boolean` | optional | Hidden override |
353353
| **colSpan** | `integer` | optional | Absolute column span (1-4). The renderer clamps it to the form grid's current column count, so the cell starts at a real column boundary at every surface width and never overflows (`colSpan: 4` in a 3-column grid renders as 3); a `colSpan` within the column count renders as authored, and `colSpan: 1` emits no span class at all. |
354-
| **span** | `Enum<'auto' \| 'full'>` | optional (default: `"auto"`) | Relative field width. 'auto' (default — omit it): the renderer sizes the field from its widget type × the current column count — at the pin this repo builds against (`.objectui-sha` = `b9814b334d8a`), only textarea, markdown, html, richtext and repeater resolve to the full column count (repeater reaches it through the wide `field:grid` widget it maps to). 'full': resolves to the form grid's full column count. How far down the container-query tiers that span is emitted is the renderer's, not this key's: at that same pin the renderer emits one clamped col-span class per multi-column tier (`@md:col-span-2 @2xl:col-span-3` for a 3-column grid), so the field takes the whole row at every multi-column tier, not just the widest. |
354+
| **span** | `Enum<'auto' \| 'full'>` | optional (default: `"auto"`) | Relative field width. 'auto' (default — omit it): the renderer sizes the field from its widget type × the current column count — only textarea, markdown, html, richtext and repeater resolve to the full column count (repeater reaches it through the wide `field:grid` widget it maps to). 'full': resolves to the form grid's full column count. How far down the container-query tiers that span is emitted is the renderer's, not this key's: the renderer emits one clamped col-span class per multi-column tier (`@md:col-span-2 @2xl:col-span-3` for a 3-column grid), so the field takes the whole row at every multi-column tier, not just the widest. |
355355
| **widget** | `string` | optional | Custom widget/component name (overrides type-based inference) |
356356
| **language** | `string` | optional | Code editor language (for type=code) |
357357
| **keyField** | `{ field?: string; label?: string \| Record<string, string>; placeholder?: string \| Record<string, string>; helpText?: string \| Record<string, string>; … }` | optional | Key column config for record-typed fields |

0 commit comments

Comments
 (0)