Skip to content

docs(spec): re-cite objectui's data-table accessor as accessorKey only - #15111

Merged
zhuangjianguo merged 1 commit into
mainfrom
claude/issue-14166-accessor-key-citations
Sep 4, 2026
Merged

docs(spec): re-cite objectui's data-table accessor as accessorKey only#15111
zhuangjianguo merged 1 commit into
mainfrom
claude/issue-14166-accessor-key-citations

Conversation

@zhuangjianguo

Copy link
Copy Markdown
Collaborator

Fixes #14166

Clause ②: no — path limb fires (packages/spec/src/**), content limb no: citation text only.

Two packages/spec notes described objectui's data-table column accessor as resolving two spellings, accessorKey || name. objectui retired the name alias, so both described a resolution that no longer exists. This rewords them to the single surviving spelling. Citation accuracy only — no verdict moves, no ledger re-grade, no code.

The objectui citation, re-read at the pin in force

The card names objectui 41725898c as the retirement and d8ec8d6d4f01 as the sha the pin bump moved to. Neither is the pin this repo builds against now: .objectui-sha reads 67dadd602a3a891666ea1513c5de677140784b6a (objectui, 2026-09-01), and git merge-base --is-ancestor puts both of those commits behind it. So the reworded notes cite the pin's own commit, not the card's.

Read at 67dadd602a3a, read-only, in a separate checkout:

  • packages/components/src/renderers/complex/data-table.tsx:872-876 — the adapter's initialColumns maps accessorKey: col.accessorKey, with no || col.name. The block immediately above it records both retired aliases (label and name) and states that a { name, label } column still renders only when a producer resolved its identity into accessorKey first.
  • packages/core/src/utils/column-identity.ts:69columnIdentity is unchanged: canonical field first, the legacy spellings after.

Two vocabularies, therefore, still — columnIdentity canonical-field against an accessor that now reads accessorKey alone — which is why both conclusion sentences survive verbatim and the stop condition on this card (a conclusion that depends on the retired fallback) does not fire.

Before / after

packages/spec/liveness/field.json — the relatedListColumns entry's note

Before (the changed sentence; the note's first two sentences are untouched):

Measured 2026-08-17 against objectui main: object entries span two vocabularies (RelatedList resolves identity via columnIdentity, canonical field; the data-table accessor resolves accessorKey || name only), so a spec-canonical {field} object renders BLANK cells — refused at parse instead.

After:

RE-CITED 2026-09-03 (#14166): the 2026-08-17 reading against objectui main had the data-table accessor resolving accessorKey || name; objectui#6963 retired the name alias, and at the .objectui-sha pin 67dadd602a3a object entries span two vocabularies (RelatedList resolves identity via columnIdentity, canonical field; the data-table accessor resolves accessorKey only), so a spec-canonical {field} object renders BLANK cells — refused at parse instead. Verdict unchanged: LIVE.

The measurement attribution moves with the spelling deliberately. Changing only accessorKey || name would have left "Measured 2026-08-17 against objectui main" standing in front of a reading that was false on that date — a fresh miscitation manufactured by the repair. The RE-CITED … / Verdict unchanged: LIVE. framing is this ledger's existing house style for a citation repair whose verdict holds (four sibling entries in the same file use it).

Everything else in the entry is byte-identical: status: "live", verifiedAt: "2026-08-17", evidenceScope, evidence, and every count. No other entry in field.json is touched.

packages/spec/src/conversions/registry.ts — the field-column-lists-canonicalized docblock

Before:

 *     drops the decoration keys: measured on objectui main, an object entry's
 *     display keys span two vocabularies (`columnIdentity` is
 *     canonical-`field`, the data-table accessor reads `accessorKey || name`),
 *     so no object spelling renders reliably — the derived-from-schema string

After:

 *     drops the decoration keys: re-measured at the `.objectui-sha` pin
 *     `67dadd602a3a`, an object entry's display keys span two vocabularies
 *     (`columnIdentity` is canonical-`field`, the data-table accessor reads
 *     `accessorKey` only — objectui#6963 retired the `name` alias),
 *     so no object spelling renders reliably — the derived-from-schema string

.objectui-sha pin sha is the HISTORICAL spelling check:objectui-pin-citations recognises — a dated record of where a measurement was taken, which a later pin bump does not falsify. The asserting spelling (.objectui-sha = sha) was deliberately not used: it would have added a new gate edge that reds on the next bump, and this card explicitly does not decide whether a pin bump should carry a routine citation re-check. The gate confirms the classification below.

No code in registry.ts changed — the diff is four comment lines replacing three.

Changeset — measured, not assumed

Both edited byte-ranges publish from the released @objectstack/spec, so this carries a patch changeset rather than skip-changeset (AGENTS.md Post-Task Checklist §3; the #14093 precedent in PR #15098).

Measured on the built tree with npm pack --dry-run --json in packages/spec after pnpm --filter @objectstack/spec build — 2082 files in the tarball:

changed file in the tarball as why
liveness/field.json liveness/field.json liveness is in the package's files
src/conversions/registry.ts dist/index.js.map, dist/index.mjs.map, dist/shared/index.{js,mjs}.map, dist/browser/index.{js,mjs}.map dist is in files, and the docblock ships inside the sourcemaps' sourcesContent

registry.ts is not a .zod.ts file, so the src/**/*.zod.ts entry of files does not carry it; the sourcemaps do. grep -rl "data-table accessor reads" dist/ returns those six maps and nothing else.

Verification record — head e3e66d15

Every exit code captured by redirecting first (cmd > log 2>&1; EXIT=$?), never read through a pipe. Verdicts quoted are the gates' own lines.

command exit the gate's own verdict
pnpm --filter '@objectstack/spec^...' build 0 No projects matched the filters — real, not a typo: @objectstack/spec declares zero workspace dependencies (pg-connection-string, zod only)
pnpm --filter @objectstack/spec build 0 check-dts-emitted: @objectstack/spec - 34/34 declared declaration file(s) present.
pnpm --filter @objectstack/spec exec vitest run --maxWorkers=2 0 Test Files 466 passed (466) · Tests 12435 passed (12435)
pnpm --filter @objectstack/spec typecheck 0 check:test-typecheck: OK — @objectstack/spec's test layer compiles under packages/spec/tsconfig.test.json
pnpm --filter @objectstack/spec check:liveness 0 ✓ every governed-type property at the walk's one-level granularity is classified … every 'path:NNN' citation names a line that file actually has
pnpm --filter @objectstack/spec check:generated 0 ✓ All 15 generated artifacts are up to date.
pnpm --filter @objectstack/spec check:docs 0 run inside the derived union (below)
pnpm --filter @objectstack/spec check:api-surface 0 run inside the derived union (below)
pnpm --filter @objectstack/spec check:objectui-pin-citations 0 ✅ 8 asserting objectui pin citation(s) match .objectui-sha (67dadd602), 16 historical citation(s) recorded and not checked, across 1140 spec source(s).
pnpm exec eslint --no-inline-config --format json packages/spec/src/conversions/registry.ts 0 1 file, 0 errors, 0 warnings
node scripts/check-system-context-census.mjs 0 check-system-context-census: OK — 106 elevation read sites in 20 packages across 45 files, all anchored; 140 anchors resolve, 27 declared non-read.
pnpm check:nul-bytes 0 check-nul-bytes: OK (scanned 8217 text file(s) … no raw ASCII control bytes).

check:generated reports all fifteen artifacts current, so the reworded note projects into no generated page and --fix was neither needed nor run. The census is unrotted for a second, independent reason as well: packages/spec/src/conversions/registry.ts carries no isSystem read site and no anchor points into it, so the file's net +1 line cannot move a page anchor.

Typecheck coverage, not assumed: pnpm exec tsc --noEmit --listFiles in packages/spec names src/conversions/registry.ts (1 hit), so the green above really did read the edited file.

The derived gate union

node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack, run in this worktree with no paths passed, re-derived at head e3e66d15 and byte-identical to the pre-commit derivation: 60 commands over the change set it read from git (.changeset/spec-accessor-key-citations.md, packages/spec/liveness/field.json, packages/spec/src/conversions/registry.ts).

58 green. Two gates report their own NOT MEASURED code (exit 3, which each distinguishes from a finding's exit 1 in its own output) — neither is a red, and neither is caused by this diff:

  • node scripts/check-test-completeness.mjs"That list names this script with NO argument … There is no local log to hand it, so the local reading for this gate is NOT MEASURED. ⛔ It is not a red, and there is nothing here to fix." It wants a saved turbo run test log.
  • pnpm check:dual-build-cjs-loads"PREREQUISITE NOT MET — this gate reads built output, and some package has no dist/", listing 85 unbuilt packages. It wants a whole-repo pnpm build, which is CI's run, not a targeted local one. Its self-test passed (93 cases).

Two more reported exit 3 / exit 1 on the first pass for environmental reasons and were then measured properly, so they are not in the NOT MEASURED set:

  • node scripts/check-plugin-teardown-shape.mjs --self-test first failed with "cannot read the positive control at 621a487… Deepen the clone" — this container's checkout is shallow. After git fetch --depth=1 origin 621a4876… it passes: "47 cases pass".
  • pnpm --filter @objectstack/lint run check:doc-formula-expressions first reported PREREQUISITE NOT MET for two unbuilt workspace packages. After building @objectstack/formula and @objectstack/lint it passes: "22 record-scoped formula example(s) across 426 files / 1368 TS blocks judged clean".

The derivation also flags seven artifact-roster families whose roster directory contains one of my paths, where its silent verdict is evidence in neither direction. Six were run directly and are green (check-changeset-fixed, check:meta-url-spelling, check:authz-resolver, check:error-code-casing, check:filter-alias-parity, check:swallow-census-controls); the seventh, check:spec-changes, is covered inside check:generated above.

The eslint narrowing, declared

The repo-wide pnpm lint was not run; a proven narrowing was. All three pieces:

  1. Population from eslint's own config, not from my guess. Of the three changed paths, eslint itself reports packages/spec/liveness/field.json and .changeset/spec-accessor-key-citations.md as "File ignored because no matching configuration was supplied." — so registry.ts is the only changed file its config admits.
  2. Count from --format json: 1 file linted, errorCount 0, warningCount 0.
  3. Invariance for untouched files: eslint.config.mjs:327-328 states that this repo "runs one eslint.config.mjs, which never enables type-aware linting (no parserOptions.project, no typed @typescript-eslint rules) for ANY file, test or not". With no type-aware rules, a comment-only edit in one file cannot move any untouched file's verdict.

Scope

Untouched, as the card requires: every other entry, verdict and ledger state in field.json; all code in registry.ts; objectui; content/docs/releases/; skills/. No needs:contract-review label. Left as a draft — not flipped ready.

Base was origin/main 4428dd57; origin/main has since moved to b812a549, and the gate derivation reports that nothing this tree can see touched what its answer derives from.

Out-of-scope findings: none. The card's own side question — whether a console pin bump should carry a routine citation re-check — is recorded on the card and deliberately not answered here.


Generated by Claude Code

Two notes in `packages/spec` described objectui's `data-table` column accessor
as resolving two spellings, `accessorKey || name`:

  - `liveness/field.json` — the `relatedListColumns` entry's `note`
  - `src/conversions/registry.ts` — the `field-column-lists-canonicalized`
    docblock

objectui#6963 retired the `name` alias, and the console pin this repo builds
against (`.objectui-sha` = `67dadd602a3a891666ea1513c5de677140784b6a`) already
contains it, so both notes described a resolution that no longer exists — and
both carried a measurement attribution that predated the retirement, which is
the half a spelling-only fix would have turned into a fresh miscitation.

Re-read at the pin, read-only:

  - `packages/components/src/renderers/complex/data-table.tsx:872-876` maps
    `accessorKey: col.accessorKey` with no fallback
  - `packages/core/src/utils/column-identity.ts:69` still resolves canonical
    `field` first, legacy spellings after

Citation accuracy only. Each note keeps its conclusion sentence verbatim, the
`relatedListColumns` entry keeps its `live` status, `verifiedAt`, `evidence`
and every count, and no code changes.

Both edited byte-ranges publish from `@objectstack/spec` — `liveness/**` is in
the package's `files`, and the docblock ships inside `dist/*.map`
`sourcesContent` — so this carries a patch changeset rather than
`skip-changeset`.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0174WZTU6XcFcS7g2kykC53i
@github-actions github-actions Bot added the size/s label Sep 3, 2026
@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

⚠️ 2 changed file(s) yielded no anchor (packages/spec/liveness/field.json, packages/spec/src/conversions/registry.ts), so the pages documenting them are NOT COVERED by this run — this is not a clean bill of health for those files. Nothing else in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 1 changed package(s)).

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

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

@claude

claude Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Landing provenancedomain:spec PM seat, session session_0174WZTU6XcFcS7g2kykC53i (seat post #6017). ACCEPT: comment 5533585464 (2026-09-03T23:45Z; Clause ② no).

Landing window readings, all on head e3e66d15 at 2026-09-04T00:10Z:

  • CI: 34 checks — 31 success, 3 skipped, 0 red, 0 running; the required floor (Lint & Repo Gates, Type Check · workspace / · consumer gates / · debt ledger, Build Core, Temporal Conformance (live PG + MySQL)) all success on this head; legacy status Vercel success.
  • Trial merge onto origin/main 35e94c96: clean.
  • check-clause2-carriers.mjs --pair 15111: exit 0. Governed surface: 0 of 3 changed files. No content/docs/releases/ edits.
  • Closing keyword, two reads: first line Fixes #14166; no other closing keyword beside a card number in the body.

Sequence: ready → squash auto-merge → added_to_merge_queue. On MERGED: strip pm:dispatched from #14166, probe the liveness/field.json note and registry.ts on origin/main, landing note on the card.


Generated by Claude Code

@zhuangjianguo
zhuangjianguo marked this pull request as ready for review September 4, 2026 00:10
@zhuangjianguo
zhuangjianguo added this pull request to the merge queue Sep 4, 2026
Merged via the queue into main with commit fa8715a Sep 4, 2026
36 checks passed
@zhuangjianguo
zhuangjianguo deleted the claude/issue-14166-accessor-key-citations branch September 4, 2026 00:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/s tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[finding] Two packages/spec notes still cite objectui's retired accessorKey || name data-table accessor

2 participants