Repository navigation
Commit 56b2612
docs(spec): component-member read points, held-back moves and other spellings to the ledger, part 3 of 3 (#23591)
Part of #23434
Clause-②: no
Part 3 of 3 of PR-2 for issue 23434. The issue stays open after it
lands, for the remainder named below. It executes ruling 6165388570
(letter C, items 1 and 4) and ruling 6181034096 (Q2 → A, Q1 → A), under
claim 6181304005. Parts 1 and 2 are #23589 and #23590, which move the
records in `packages/spec/src/ui/component.zod.ts`. All three branch
from `origin/main`; none is stacked on another.
## What this part changes
**Item 1, group C outside `component.zod.ts`.** The component-member
read points in `component.test.ts` move into `liveness/page.json`, row
`regions`, as do those in the `component-*.pin.test.ts` family
(action-member params, form custom-fields, form / list / metric
families, object-grid declared keys and typed members, objectui-held
members, `z.unknown()` members, report-items / action members), the
record-block tests (approvals / attachments, field security, record
blocks, reference rail), the action-row and element-navigation tests,
`expression-bindable-text-keys.zod.ts`,
`object-refinement-check-exports.test.ts`, `page.zod.ts` and
`inline-grid-column-carriers.test.ts`. Where a test record carried a
reading the ledger lacked, it became an entry or a clause of an entry:
the `page:tabs` retired `type`, the icon vocabulary table, the
static-params drop, the drill-down writer pins, the grid's
`AggregationType`, the page-builder guide, the object-manager dialog
writer, the bindable-text rows, `PageComponent.visibleWhen` roots and
the PLANNED `dataSource` API binding.
`object-refinement-check-exports.test.ts`'s two mirror citations went to
their own rows (`view.json` `list.appearance`, `dashboard.json`
`widgets`), not to `page.regions`.
**Item 2, the two held-back moves**, applied as PR-1's hold-back
reversed (`git diff 7fe6ffd 7ebc084` over the four files, which
were byte-identical on `origin/main`):
- `src/ui/dataset.zod.ts` → `liveness/dataset.json`, row
`measures.format`.
- `src/data/api-methods-batch-conformance.test.ts` →
`liveness/object.json`, row `enable.apiMethods`.
**Item 3, the other spellings**, each into its matching row as `objectui
@sha FILE#SYMBOL`. Every symbol was resolved at that SHA, and a sha-less
citation was re-read at a named tree:
| source | row |
|---|---|
| `ui/action-declarative-update.ts` (`.objectui-sha` pin `b9814b334`;
landed with #23494 after PR-1) | `action.json` `operation` |
| `ui/navigation-target.ts`, `ui/action-url-target-scheme-set.test.ts`
(objectui `7578323`) | `action.json` `target` |
| `ui/app.zod.ts` `viewName` rule (sha-less pin) | `app.json`
`navigation.viewName` |
| `ui/bulk-action.zod.ts` promoted route (objectui `main` `dca25aff2`) |
`view.json` `list.bulkActionDefs` |
| `ui/dashboard.zod.ts` #20960 census (objectui `main` `5262f7dd`) |
`dashboard.json` `widgets.options` |
| `ui/dashboard.zod.ts` mirror check (sha-less pin) | `dashboard.json`
`widgets` (already recorded by PR-1) |
| `ui/view.zod.ts` `groupByField` consumer (objectui `dda8f3815`) |
`view.json` `list.kanban` |
| `ui/view.zod.ts` empty-state `link` (objectui `b9814b334`, four
`File.tsx:NNN`) | `view.json` `list.emptyState` (+ `page.json`
`interfaceConfig`) |
| `ui/view.zod.ts` form-layout twin (sha-less pin) | `page.json`
`regions` (already in the list) |
| `ui/list-view-export-options.ts`, `ui/view.test.ts`
(`origin/main@878140b`) | `view.json` `list.exportOptions` (already
recorded) |
| `data/field.form.ts` hint face (sha-less pin) | `field.json`
`relatedListFilter` |
| `data/field.zod.ts` currency width (sha-less pin) | `field.json`
`currencyConfig` |
| `data/field.zod.ts` lookup snake twins (objectui `ed971e8`) |
`field.json` `lookupColumns` |
| `shared/editability-boundary.ts` per-option `disabled` (objectui
`main` `aca27fa`) | `field.json` `options` |
| `system/i18n-resolver.ts` `resolveFlowScreenTitle` caller (sha-less
pin) | `translation.json` `flows.screens` (already recorded) |
| `system/metadata-form-zod-reconciliation.test.ts` `emptyState` omit
reason (objectui `7af0ab3`); #23568 has since removed that omit row on
main, and the merge took main's side | `page.json` `interfaceConfig`;
the 7af0ab3 reading is kept there in the past tense |
| `page.zod.ts` `emptyState` hand-off (`InterfaceListPage.tsx:509`) |
`page.json` `interfaceConfig` (already recorded) |
**Also:** `content/docs/references/ui/expression-bindable-text-keys.mdx`
is regenerated (`check-generated.ts --fix`), and
`.changeset/23434-component-read-points-part-3.md` is a
`@objectstack/spec` patch.
Changed lines: 1,754 (+336 / -1,418) across 49 files, under the
3,000-line review line. Head `be8657fa44`, which contains merge
`7ea3bb007d` of `origin/main`.
## Census, base `7ffc57846a` → all three parts merged
Group C = the `ComponentPropsMap` member read points (seat 3's 99).
Group R = retirement history, which ruling 6181034096 (Q2 → A) keeps in
place.
| reading | base | after all three parts |
|---|---|---|
| retired gate `--list`, historical `` `.objectui-sha` pin SHA ``
spelling: group C | 66 | 0 |
| same: `action-declarative-update.ts` (landed with #23494 after PR-1;
item 3) | 1 | 0 |
| same: group R | 34 | 34 (unchanged) |
| retired gate's quoted-first-line assertions (`component.zod.ts`) | 6 |
0 (the quoted line is now in the entry) |
| PR-1's dated respell "objectui `b9814b334` (re-read there 2026-10-14
…" | 27 | 0 |
| wide census, component files: `.objectui-sha` pin with SHA / sha-less
/ `objectui SHA` | 65 / 24 / 170 | 0 / 0 / 14 (14 = objectui commit
references such as "since objectui `ce991bd70`", which are not read
points) |
| wide census, group R files (H / S / O) | 36 / 8 / 30 | 36 / 8 / 30
(unchanged) |
| wide census, other files, item 3 (H / S / O) | 2 / 12 / 38 | 0 / 5 /
16 (the remainder is listed in part 3) |
`page.regions` note: 120 entries, 62,138 characters. No schema or gate
caps a note's length. Only `evidence` and `producer` are path-scanned by
`check:liveness`, and `note` is free text that the lint layer never
shows an author.
## How the three parts were measured
The three parts were built from one verified union branch,
`claude/issue-23434-pin-citations-pr2` at `1646d39e53` (all three parts'
changes in one tree). The split was then checked mechanically:
- `git merge-tree` of part 1 + part 2 + part 3 onto `origin/main` gives
a tree whose `packages/spec` and `content` match the union head exactly
(empty diff). The three parts merge in any order without conflict. They
share one changed line in `packages/spec/liveness/page.json` (the
`regions` note), and it is byte-identical in all three.
- Comment-only: every changed `.ts` file was parsed with TypeScript and
compared with `origin/main` on its code tokens, JSDoc and comments
excluded. All published files are identical. In this part's head, five
string literals changed across two test files: two test names, one `why`
reason string, and the two pieces of one assertion message. No schema,
type, export, default, accept or refuse change, and no `.describe()`
text change.
- Every `objectui @sha FILE#SYMBOL` in the new evidence list and in the
edited ledger notes was resolved against an objectui clone at that SHA:
the file exists and the symbol occurs in it. 656 references in the 120
entries and 32 in the other notes; 0 unresolved. A negative control (a
bogus path and two bogus symbols) reported 3 of 3.
Union head `1646d39e53`, through `scripts/pm/os-verify-lock.sh`:
- `pnpm --filter @objectstack/spec build`: VERDICT command-exit 0.
- `check-generated.ts --fix`: 1 of 14 artefacts stale
(`content/docs/references/ui/expression-bindable-text-keys.mdx`, from
part 3's shortened docblock), regenerated. The re-check afterwards: "All
14 generated artifacts are up to date".
- `pnpm --filter @objectstack/spec typecheck` (tsc, scripts and test
typecheck): exit 0.
- `vitest run --project local`: Test Files 678 passed (678), Tests 20728
passed, 1 todo.
- `vitest run --project repo`: Test Files 61 passed (61), Tests 1033
passed.
- `node scripts/pm/dispatch-gates.mjs --commands --repo
objectstack-ai/objectstack`, each exit code captured before any pipe,
then `--ran`: "103 derived famil(ies) accounted for — 99 run, 4
NOT-MEASURED". The 4 recorded exit 3 (prerequisite not built): lint
`check:doc-formula-expressions`, `check:dual-build-cjs-loads`,
`check:i18n`, `check:lean-entry-closure`. One RED that comes from the
base, not this diff: `check:platform-checklist` exits 1 with ABSENT
SYMBOL findings in
`docs/qa/platform-checklist/areas/{access-security,attachments-storage,search}.json`.
They point at `packages/metadata-protocol` and `service-storage`, which
no part touches; PR-1 reported the same findings. The other 98 exited 0,
including `check:liveness`, `check:nul-bytes`, `check:issue-citations`
and `check-spec-docblock-symbol-anchors`. On the anchors gate,
"citations name no tracked file" went from 1965 on the base to 228.
**This part's head `be8657fa44`**: merge `7ea3bb007d` of `origin/main`,
then the past-tense fix to the `page.json` `interfaceConfig` note. Every
run below was taken after the last commit, in a fresh worktree:
- Spec build: VERDICT command-exit 0. `typecheck`: exit 0.
- `vitest run --project local`: Test Files 678 passed (678), Tests 20728
passed, 1 todo. `--project repo`: Test Files 61 passed (61), Tests 1033
passed. Lock VERDICT command-exit 0. The targeted run first,
`src/system/metadata-form-zod-reconciliation` and `src/ui/component`:
Test Files 28 passed (28), Tests 1542 passed.
- `check:generated` ("All 14 generated artifacts are up to date"),
`check:liveness`, `check:issue-citations`,
`check-spec-docblock-symbol-anchors` and `check:nul-bytes`: all exit 0.
- `dispatch-gates.mjs --commands --repo objectstack-ai/objectstack`,
then `--ran`: "111 derived famil(ies) accounted for — 111 run, 0
NOT-MEASURED". No STALE TREE note. Seven families first exited 3 because
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`,
`check:skill-examples`, `check:docs-transcript-drift`,
`check:dual-build-cjs-loads`, `check:i18n` and
`check:lean-entry-closure`. 110 exit 0. One RED, from the base:
`check:platform-checklist`, exit 1, the same 7 ABSENT SYMBOL findings
(`areas/access-security.json` 5, `attachments-storage.json` 1,
`search.json` 1); no part touches those paths.
## Acceptance notes
**Deviations from the claim, stated rather than chosen silently:**
1. **Split by file range, not strictly by item.** The measured union
diff is 7,395 changed lines. Item 1 alone is over 3,000, because
`component.zod.ts` alone is 5,675 lines. So `component.zod.ts` splits
into two halves at an unchanged 33-line gap (parts 1 and 2, 2,770 and
2,931 lines). Item 1's remaining files ride here with items 2 and 3.
Every part carries the identical `page.regions` line so that each part's
ledger is complete; a `git merge-tree` of all three onto `origin/main`
reproduces the verified union tree.
2. **The claim's item 1 names `component.zod.ts` only.** Seat 3's group
C, the 99 that ruling 6181034096 counts, spans 15 files:
`component.zod.ts`, `component.test.ts`, the `component-*.pin` tests,
`expression-bindable-text-keys.zod.ts`,
`object-refinement-check-exports.test.ts`, `page.zod.ts` and
`inline-grid-column-carriers.test.ts`. I followed the ruling's 99. Some
tombstone docblocks inside `component.zod.ts` (`sortField`,
`resizableColumns`, `defaultSort`, `quickAdd`, form `layout`
`inline`/`grid`) were moved, per seat 3's file-based classification.
Their `migrations/entries` and retirement-test counterparts (group R)
are untouched.
3. **Branches.** Part 3 lands from the claimed branch. Its history holds
the WIP commits of the verified union, which a squash discards. Parts 1
and 2 are new branches cut from `origin/main`.
**Left in place on purpose (census remainder after all three parts):**
- **Retirement history, the class ruling 6181034096 keeps.** It is not
limited to the 40 in the ruling's three locations:
`integration/connector.test.ts` (`errorMapping` retired, objectui
`0d8fd7c`), `system/email-template.zod.ts` (`category` / `isSystem`
retired), `ui/app.zod.ts` (`homePageId` tombstone, objectui
`@785b8a5d`), `ui/dashboard.zod.ts` (`actionUrl` / `actionType` /
`actionIcon` removed, `objectui@91757a7`), `ui/view.zod.ts`
(`responsive` / `performance` removed, `objectui@fb35e48`) and
`api/export-job-family-retirement.test.ts`.
- **No matching ledger row, so reported here and given no invented
row:**
- `ai/build-progress.zod.ts` (objectui `dda8f3815`; the build-progress
phase vocabulary; no ledger file covers AI stream frames).
- `api/dataset-selection.test.ts` (objectui `@98178b2`; the five call
sites that build a runtime `DatasetSelection`, which is a request rather
than dataset metadata).
- `system/metadata-form-zod-reconciliation.test.ts:578-579` (seven
`view` keys the ledger walk cannot hold, as that comment itself says).
- `ui/view-console-round-trip-keys.test.ts:19,42` and the matching
`ui/view.zod.ts` round-trip census (`VIEW_CONSOLE_ROUND_TRIP_KEYS`,
sha-less pin); the walk stops at the union's container arm.
- **objectui commit references, which mark a change and are not read
points:** 14 in the component files, plus
`kernel/functional-completeness.ts` (`afb228418`, `5f4514f7b`,
`fec3b1a8b`, `04a67b9dc`), `ui/bulk-action.zod.ts` (`29b99490`), and
`ui/page.zod.ts` / `ui/view.zod.ts` (`b434f5f47`, `0253416`). Three of
these sentences said "at the pin"; they now read "on the console this
repo ships" or use the past tense.
- **A third spelling, outside the claim's two.** These are sha-less
`File.tsx:NNN` citations with neither a SHA nor a pin mention. They do
not claim to track the pin, so a pin hop never forces their rewrite.
There are 17 lines in 8 published source 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` and `ui/view.zod.ts` (6). There are also 40
in tests: 30 of them in the pin tests name the objectui TEST file a
fixture's shape was copied from (writer provenance, not a renderer read
point). These stay for a later round under #23434, which stays open:
ruling item 1's last sentence covers them.
**Measured drift (zone 2):**
- Counts: group C is 66 historical spellings on the retired gate's
`--list`, plus the respelled ones (27 of PR-1's "re-read there
2026-10-14" form across the component files and the two held-back
files). Group R holds at 34 historical citations, unchanged. One new
live historical citation landed after PR-1:
`ui/action-declarative-update.ts` (#23494), moved here.
- Note capacity: nothing caps a note. `regions` now holds 62,138
characters.
- Only read points moved: commit references, in-repo anchors and
retirement records stayed. Each record's per-hop chain went with its
read points.
- One stale claim was dropped rather than moved. `component.test.ts`
said the tree renderer reads `data` through the `'undeclared'` arm (true
at objectui `87af769e9`). At objectui `b9814b334` it is the
`'view-data'` arm. The ledger entry records the current reading.
**Merge note:** #23568 removed the `interfaceConfig.emptyState` omit row
from `metadata-form-zod-reconciliation.test.ts` on main. The merge
(`7ea3bb007d`) took main's side, and this part no longer touches that
file.
- No ablation: no tested behaviour changed.
- No label written: `skip-changeset` does not apply, because a published
file changes and the patch changeset is present.
---
_Generated by [Claude
Code](https://claude.ai/code/session_0121ooBYRmS8ziFXm9ai5YHm)_
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent 16abea8 commit 56b2612
49 files changed
Lines changed: 335 additions & 1417 deletions
File tree
- .changeset
- content/docs/references/ui
- packages/spec
- liveness
- src
- data
- kernel
- system
- ui
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
51 | 51 | | |
52 | 52 | | |
53 | 53 | | |
54 | | - | |
55 | | - | |
56 | | - | |
| 54 | + | |
| 55 | + | |
57 | 56 | | |
58 | 57 | | |
59 | | - | |
60 | | - | |
61 | | - | |
62 | | - | |
63 | | - | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
64 | 63 | | |
65 | 64 | | |
66 | 65 | | |
| |||
69 | 68 | | |
70 | 69 | | |
71 | 70 | | |
72 | | - | |
| 71 | + | |
73 | 72 | | |
74 | 73 | | |
75 | 74 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
48 | 48 | | |
49 | 49 | | |
50 | 50 | | |
51 | | - | |
| 51 | + | |
52 | 52 | | |
53 | 53 | | |
54 | 54 | | |
| |||
68 | 68 | | |
69 | 69 | | |
70 | 70 | | |
71 | | - | |
| 71 | + | |
72 | 72 | | |
73 | 73 | | |
74 | 74 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
160 | 160 | | |
161 | 161 | | |
162 | 162 | | |
163 | | - | |
| 163 | + | |
164 | 164 | | |
165 | 165 | | |
166 | 166 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
221 | 221 | | |
222 | 222 | | |
223 | 223 | | |
224 | | - | |
| 224 | + | |
225 | 225 | | |
226 | 226 | | |
227 | 227 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
106 | 106 | | |
107 | 107 | | |
108 | 108 | | |
109 | | - | |
| 109 | + | |
110 | 110 | | |
111 | 111 | | |
112 | 112 | | |
| |||
0 commit comments