Repository navigation
Commit 9a0401f
chore(spec): re-measure the action:group, action:menu and element:repeater records at the objectui pin and quote their props-read sites, ASSERTED_ANCHOR_FLOOR 10 to 13 (#22043)
Fixes #20471
Clause-②: no (docblock text and a gate constant: the accept set and the
public type surface are unchanged)
Stage 2 of #20471, as the landing record of stage 1 (PR #22038) scopes
it. All six `ComponentPropsMap` rows the card names now quote their
props-read site, so this PR closes the card.
The `action:group`, `action:menu` and `element:repeater` records cited
objectui lines that did not hold at the pin they assert (`.objectui-sha`
= `a58626c88`). This PR re-measures them at the pin, re-points every
cited line that moved, corrects the prose that was false at the pin, and
then quotes one load-bearing anchor per row. `ASSERTED_ANCHOR_FLOOR`
goes from 10 to 13.
## What changed
- `packages/spec/src/ui/component.zod.ts` (docblocks and one code
comment, no code):
- **Section 4b hop note.** It said only the two `objectName` forwards
moved at the `0abd4f9f8` → `a58626c88` hop. In fact every container
anchor below the deleted `useConfigBagEvaluator()` call moved, and
`static-params.ts` moved too. The note now says so. A new "correction"
sentence records where earlier hop notes certified anchors that had
already drifted (details below). The older dated notes are left as
written.
- **`action:group` and `action:menu` row records:** every moved anchor
is re-pointed (table below). The "static values" parenthetical on each
member forward now describes what is there at the pin: since
objectui#11638, a member's own `properties.params` is no longer read.
- **`element:repeater` row record:** every `data-list.tsx` anchor is
re-pointed (+28), and so are the two `data-objectstack/src/index.ts`
anchors. The `fields` sentence said the renderer's TS type and its
registration description both advertise `label`. Since objectui#11168
slice 2 neither does, and the sentence now says so.
- **`element:definition-list` registration prose:** it said the
registration publishes the strings `'1'` / `'2'` and marks `items`
required. Since objectui#11168 slice 2 it does neither. Both sentences
now give the history and the current lines. The inline comment on the
`columns` literal makes the same correction.
`previews/block-config.ts:307` is re-pointed to `:320`.
- **`action:button`:** `static-params.ts:91-101` is re-pointed to
`:98-108`.
- **The `[#21855]` member paragraph** above `actionContainerMemberShape`
(patch round `00c6b980`, at the seat's direction, claim revision
`6027563825`): it called `0abd4f9f8` the current pin. Its three anchors
now point at `a58626c88` (group `:325-327`, menu `:261-263`,
`static-params.ts:164-174`), in the asserting spelling, so the gate
re-checks it at the next pin bump. It is an in-place fix: the same
defect class, a mechanical edit, no other claim, and the same gate
family.
- **Three quotes,** one per row, each spelling its path (see "The
quotes" below).
- `packages/spec/scripts/check-objectui-pin-citations.ts`:
`ASSERTED_ANCHOR_FLOOR` goes from 10 to 13, exactly the three quotes.
Its docblock names the three. It also updates the worklist count from
418 to 419, as `--verify-anchors` reads it at `a58626c88` (see
Acceptance notes for why it went up by one).
- `.changeset/20471-component-row-anchor-requote.md`: a `patch`
changeset for `@objectstack/spec`, because `files[]` ships
`src/**/*.zod.ts` and these docblocks are published text, as stage 1
measured.
## Re-pointed anchors
Each row was checked in two ways, read-only, in the local objectui
object store:
- The new line's text was compared with the old line's text at the pin
where the old number last held. They are identical for every row except
the two `paramsPayload` tails that objectui#11638 rewrote.
- The record's claim was re-read against the new line.
| Row | Cited | Old | New (verified line at `a58626c88`) |
|---|---|---|---|
| `action:group` | `actions` read | `:303` | `:300` `const
declaredActions: UIActionSchema[] = schema.actions \|\| [];` |
| | `actionRendersAt` filter | `:304` | `:301` |
| | member forward | `:329-382` | `action-group.tsx:325-374`, QUOTED
(`params` `:325-327`, `objectName` `:381` → `:373`) |
| | `display` | `:404` | `:396` |
| | `label` / `icon` | `:424` / `:408` | `:416` / `:400` |
| | `variant` | `:414`, `:456` | `:406`, `:448` |
| | `size` | `:415`, `:457`, registration `:487-528` | `:407`, `:449`,
`:479-520` (`:124` held) |
| | `visible` | `:290` + `:401` | `:287` + `:393` |
| | host `disabled` (dropdown trigger) | `:418` | `:410` (`:274`, `:159`
held) |
| | held | `:114-171`, `:205-243`, `:81-86`, `action-group.tsx:40-42` |
unchanged |
| `action:menu` | `actions` read | `:342` | `:335` `const actions:
UIActionSchema[] = schema.actions \|\| [];` |
| | members | `:80`, `:108-147`, `:408` | `:80`, `:108-147`, `:401` |
| | `ActionAutoTrigger` | `:363-370` | `:356-363` |
| | member forward | `:264-328` | `action-menu.tsx:261-321`, QUOTED
(`params` `:261-263`, `objectName` `:327` → `:320`) |
| | `label` | `:389`, `:398-399` | `:382`, `:391-392` |
| | `icon` / `variant` / `size` | `:240` / `:241` / `:242` | `:237` /
`:238` / `:239` |
| | `visible` | `:235` + `:336` | `:232` + `:329` |
| | registration `inputs` | `:435-463` | `:428-456` |
| | host `disabled` | `:219`, `:388` | `:219`, `:381` |
| `element:repeater` | `readProps` | `:97-107` |
`data-list.tsx:125-135`, QUOTED |
| | `object` | `:143`, `:155`; `:143-146`, `:181` | `:171`, `:183`;
`:171-174`, `:209` |
| | `filter` / `sort` / `limit` | `:120`, `:152` / `:153` / `:154` |
`:148`, `:180` / `:181` / `:182` |
| | `emptyText` / `divided` | `:181` / `:186` | `:209` / `:214` |
| | `titleField` / `fields` | `:191-192` / `:128`, `:194-196`, `:196` |
`:219-220` / `:156`, `:222-224`, `:224` |
| | `useResolvedFilter` | `data-list.tsx:119-120` |
`data-list.tsx:147-148` |
| | filter arm / `serializeOrderBy` |
`data-objectstack/src/index.ts:4782-4793`, `:760-786` | `:5000-5011`
(`options.filters = translateFilterArray(params.$filter);`), `:868-894`
|
| `element:definition-list` | Studio `columns` control |
`previews/block-config.ts:307` | `:320` |
| | registration `columns` / `items` | `:82` (prose false at the pin) |
`data-list.tsx:99-105` / `:91-97`, prose rewritten |
| `action:button` | `readStaticParamValues` | `static-params.ts:91-101`
| `static-params.ts:98-108` |
## When each anchor moved
These readings use blob ids of each cited file at every pin from
`dd3f7e1be` to `a58626c88`, read in the local objectui object store.
`89cad75d5` and `ab1879721` were fetched read-only at depth 1 for this.
- **`action-group.tsx` / `action-menu.tsx`:** objectui#11638 at the
`0abd4f9f8` → `a58626c88` hop (+10/-18 and +11/-18). Anchors move -3
below the deleted `useConfigBagEvaluator()` call and -8 (group) / -7
(menu) from the member forward on.
- **`static-params.ts`:** byte-identical from `dd3f7e1be` through
`0abd4f9f8`. It gained 7 lines above `readStaticParamValues` at the same
hop.
- **`basic/data-list.tsx`:** changed once, at `e420df310` → `31971ff1e`
(objectui#11168 slice 2 rewrote both list registrations). The repeater
moved by +28. That hop's note does not list the file. Every later note
recorded its anchors as held or re-read in place.
- **`previews/block-config.ts`:** `:307` moved to `:320` at the same
hop.
- **`data-objectstack/src/index.ts`:**
- The `translateFilterArray` arm moved at `db11afd49` (+42), at
`e420df310` and at `ab1879721`.
- `serializeOrderBy` moved at `e420df310` (+108).
- Neither moved at the last hop: the file gained 7 lines at its end.
The new correction sentence in section 4b records the three files whose
drift went unrecorded. It does not rewrite the older dated notes.
## The quotes (H3 definition from stage 1: one load-bearing anchor per
row, its props-read site)
- `action:group`: `action-group.tsx:325-374` first line `const
paramsPayload: ActionDef = Array.isArray(action.params)`. This is the
member forward, where every key a member forwards to the runner is
enumerated (`type`, `name`, `label`, `description`, `target`, `openIn`,
`endpoint`, `method`, params, `bodyExtra`, `bodyShape`, `operation`,
`patch`, `confirmText`, `successMessage`, `outcomeMessages`,
`errorMessage`, `refreshAfter`, `locations`, `toast`, `resultDialog`,
`onSuccess`, `objectName`). The range keeps the record's own extent:
from the params payload to the end of the `execute` call. The line is
unique in the file, so a drift is relocated.
- `action:menu`: `action-menu.tsx:261-321`, same first line, same role,
unique in that file.
- `element:repeater`: `data-list.tsx:125-135`, quoting the opening line
of the `readProps` call, the same text stage 1 quoted for the definition
list at `:42` (in the source, `const props = readProps` followed by the
generic's opening bracket and brace). The type literal is the row's key
set. As H3 expected, the line is not unique (`:42`, `:125`), so a drift
goes red without a relocation hint.
- **One quote per row, as the claim says.** Stage 1 described the
containers' props-read site as "the actions read plus the member
forward". The claim and the dispatch both say one quote per row. I chose
the member forward because it is where the member key set is read as a
set, as the `forwarded: ActionDef` literal is for `action:button`. It
also sits below the `actions` read (`:300` / `:335`), so a shift above
either line reds the quote. A quote on the `actions` line would add a
content check of one key read only. That is noted, not done.
- Each quote spells its path. A path-less continuation inherits the
nearest preceding FULL anchor (`inheritedAt` in the gate), which for
these rows would be another file.
## Verification (at `afe6f9df`; the patch round `00c6b980` re-ran the
card gate, the spec build and tests, and the derived gates green, report
`6027887111`)
- **The card's gate, three ways.** All exit codes were captured to a
file before any pipe.
- `OBJECTUI_ROOT=/home/user/objectui … check-objectui-pin-citations.ts
--verify-anchors` = exit 0: `13 asserted, 419 objectui anchor(s) still
carry no content assertion`.
- `pnpm --filter @objectstack/spec check:objectui-pin-citations` beside
the objectui checkout = exit 0: `13 anchor content assertion(s) verified
against objectui at a58626c88; 500 file:line anchor(s) seen`. The
self-test, including its live round-trip, is green.
- The same with no objectui checkout (the CI shape) = exit 0: `13 … NOT
VERIFIED — no git checkout`.
- **Before the floor edit:** the gate was red, exit 1: `You ADDED
coverage — set ASSERTED_ANCHOR_FLOOR to 13`. All 13 assertions verified,
with no mismatch.
- **Ablation, one leg per new quote.** Each leg ran through `node
scripts/ablation-replace.mjs` in WRAP mode, with `--verify-anchors` as
the wrapped command. Each anchor hit x1. The mutation was proven by a
blob change, and the restore by blob == HEAD blob `83976000` with `git
diff HEAD` empty. The final porcelain was clean.
- Leg A, the group range `:325-374` changed to `:326-374`: exit 1, `That
line IS in the file — at :325, not :326. Either the anchor drifted by -1
lines`.
- Leg B, the menu quote `action.params` changed to `action.paramz`: exit
1, `That line is NOWHERE in
packages/components/src/renderers/action/action-menu.tsx at this pin`.
- Leg C, the repeater range `:125-135` changed to `:126-135`: exit 1,
`That line appears 2 times in the file (:42, :125)`.
- **Build, typecheck and tests**, all under the shared lock:
- `pnpm --filter @objectstack/spec build`: VERDICT command-exit 0, and
`git status` was clean afterwards.
- `pnpm --filter @objectstack/spec typecheck`: VERDICT command-exit 0.
`check:scripts-typecheck` compiles the edited script (`--listFilesOnly`:
1 hit).
- `pnpm --filter @objectstack/spec exec vitest run --project local
--maxWorkers=2`: VERDICT command-exit 0, `Test Files 619 passed (619)`,
`Tests 18485 passed | 1 todo`. No test names the edited gate script
(`git grep`: 0 hits). Its own `--self-test`, including the live
round-trip, runs inside the gate.
- **Derived gate families.** `node scripts/pm/dispatch-gates.mjs
--commands --repo objectstack-ai/objectstack` was run with no paths at
`afe6f9df` and derived 82 commands, the same list as at `10006d5d`.
- All 82 were run, with exit codes captured before any pipe. 81 exited
0. `pnpm check:dual-build-cjs-loads` exited 3 (PREREQUISITE NOT MET:
about 77 workspace packages unbuilt), so it is NOT MEASURED.
- That narrowing is declared. This diff moves no emitted JS: the new
docblock text has 0 hits in `packages/spec/dist` JS and 2 in `.d.ts`,
against a positive control of 14 JS hits for a `.describe()` string. CI
runs the gate.
- `--ran` reconciliation: `82 derived, 81 run, 1 NOT-MEASURED, 0 UNRUN`,
exit 0.
- `check:doc-formula-expressions`, `check:lean-entry-closure`,
`check:dts-closure` and `check:exported-any` first refused their
prerequisites while a build was in flight. They exited 0 on the final
pass, after `pnpm turbo run build` of formula, lint and objectql (14
tasks, VERDICT command-exit 0) and the spec rebuild.
- The `check:pm-dispatch-gates` battery (exit 0, `1976 cases pass`) ran
at `10006d5d`. The later commit changes six comment lines in the two
spec files and nothing the battery reads.
- **Lint, as a proven narrowing.** `pnpm lint` (`eslint .
--no-inline-config`) is CI's run. Here:
- Population: the two touched TypeScript files.
- Count: `npx eslint --no-inline-config --format json` on them reads 2
files, 0 errors, 0 warnings, neither ignored.
- Invariance: `eslint.config.mjs` never enables type-aware linting (no
`parserOptions.project`, stated at its lines 326-328), so this diff
cannot move the verdict on an untouched file.
## Acceptance notes (noted, not filed)
- **The historical `[#21464]` member docblock** (pin `2e818d0b51ec`)
stays dated and unquoted. Its `[#21855]` paragraph, which called
`0abd4f9f8` the current pin, was corrected in place in `00c6b980` (see
What changed).
- **`data-list.tsx:99-105` is spelled as a full anchor.** It used to be
the bare `:82`. A bare continuation there would read as
`previews/block-config.ts`. The new full anchor carries no quote, so the
worklist count rises from 418 to 419.
- **The repeater quote is not unique in its file** (H3, as stage 1's
review judged acceptable).
- **Stage 1's changeset**
(`.changeset/20471-component-row-anchor-quotes.md`, not yet released)
says the other three rows "carry no quote yet". This PR adds its own
changeset rather than editing that one.
---
_Generated by [Claude
Code](https://claude.ai/code/session_01GV6oYwgc1kWiUCb1YaprQ7)_
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent b220e09 commit 9a0401f
3 files changed
Lines changed: 101 additions & 55 deletions
File tree
- .changeset
- packages/spec
- scripts
- src/ui
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
815 | 815 | | |
816 | 816 | | |
817 | 817 | | |
818 | | - | |
819 | | - | |
820 | | - | |
821 | | - | |
822 | | - | |
| 818 | + | |
| 819 | + | |
| 820 | + | |
| 821 | + | |
| 822 | + | |
| 823 | + | |
| 824 | + | |
| 825 | + | |
823 | 826 | | |
824 | | - | |
| 827 | + | |
825 | 828 | | |
826 | 829 | | |
827 | 830 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3212 | 3212 | | |
3213 | 3213 | | |
3214 | 3214 | | |
3215 | | - | |
3216 | | - | |
3217 | | - | |
| 3215 | + | |
| 3216 | + | |
| 3217 | + | |
| 3218 | + | |
| 3219 | + | |
| 3220 | + | |
| 3221 | + | |
| 3222 | + | |
| 3223 | + | |
| 3224 | + | |
| 3225 | + | |
| 3226 | + | |
| 3227 | + | |
| 3228 | + | |
| 3229 | + | |
| 3230 | + | |
| 3231 | + | |
3218 | 3232 | | |
3219 | 3233 | | |
3220 | 3234 | | |
| |||
3413 | 3427 | | |
3414 | 3428 | | |
3415 | 3429 | | |
3416 | | - | |
| 3430 | + | |
3417 | 3431 | | |
3418 | 3432 | | |
3419 | 3433 | | |
| |||
3682 | 3696 | | |
3683 | 3697 | | |
3684 | 3698 | | |
3685 | | - | |
3686 | | - | |
3687 | | - | |
| 3699 | + | |
| 3700 | + | |
| 3701 | + | |
3688 | 3702 | | |
3689 | | - | |
| 3703 | + | |
3690 | 3704 | | |
3691 | 3705 | | |
3692 | 3706 | | |
| |||
3865 | 3879 | | |
3866 | 3880 | | |
3867 | 3881 | | |
3868 | | - | |
3869 | | - | |
| 3882 | + | |
| 3883 | + | |
3870 | 3884 | | |
3871 | | - | |
3872 | | - | |
3873 | | - | |
3874 | | - | |
| 3885 | + | |
| 3886 | + | |
| 3887 | + | |
| 3888 | + | |
| 3889 | + | |
| 3890 | + | |
| 3891 | + | |
3875 | 3892 | | |
3876 | | - | |
| 3893 | + | |
3877 | 3894 | | |
3878 | | - | |
| 3895 | + | |
3879 | 3896 | | |
3880 | 3897 | | |
3881 | 3898 | | |
3882 | 3899 | | |
3883 | | - | |
| 3900 | + | |
3884 | 3901 | | |
3885 | 3902 | | |
3886 | | - | |
3887 | | - | |
| 3903 | + | |
| 3904 | + | |
3888 | 3905 | | |
3889 | 3906 | | |
3890 | 3907 | | |
3891 | 3908 | | |
3892 | 3909 | | |
3893 | 3910 | | |
3894 | 3911 | | |
3895 | | - | |
| 3912 | + | |
3896 | 3913 | | |
3897 | 3914 | | |
3898 | 3915 | | |
| |||
3947 | 3964 | | |
3948 | 3965 | | |
3949 | 3966 | | |
3950 | | - | |
3951 | | - | |
3952 | | - | |
| 3967 | + | |
| 3968 | + | |
| 3969 | + | |
| 3970 | + | |
| 3971 | + | |
| 3972 | + | |
3953 | 3973 | | |
3954 | | - | |
3955 | | - | |
3956 | | - | |
3957 | | - | |
| 3974 | + | |
| 3975 | + | |
| 3976 | + | |
| 3977 | + | |
3958 | 3978 | | |
3959 | | - | |
| 3979 | + | |
3960 | 3980 | | |
3961 | 3981 | | |
3962 | | - | |
| 3982 | + | |
3963 | 3983 | | |
3964 | 3984 | | |
3965 | 3985 | | |
3966 | 3986 | | |
3967 | | - | |
| 3987 | + | |
3968 | 3988 | | |
3969 | 3989 | | |
3970 | 3990 | | |
| |||
4007 | 4027 | | |
4008 | 4028 | | |
4009 | 4029 | | |
4010 | | - | |
4011 | | - | |
4012 | | - | |
| 4030 | + | |
| 4031 | + | |
| 4032 | + | |
| 4033 | + | |
4013 | 4034 | | |
4014 | | - | |
4015 | | - | |
| 4035 | + | |
| 4036 | + | |
4016 | 4037 | | |
4017 | 4038 | | |
4018 | 4039 | | |
| |||
4038 | 4059 | | |
4039 | 4060 | | |
4040 | 4061 | | |
4041 | | - | |
4042 | | - | |
4043 | | - | |
| 4062 | + | |
| 4063 | + | |
| 4064 | + | |
4044 | 4065 | | |
4045 | 4066 | | |
4046 | 4067 | | |
| |||
4061 | 4082 | | |
4062 | 4083 | | |
4063 | 4084 | | |
4064 | | - | |
4065 | | - | |
4066 | | - | |
4067 | | - | |
| 4085 | + | |
| 4086 | + | |
| 4087 | + | |
| 4088 | + | |
| 4089 | + | |
4068 | 4090 | | |
4069 | 4091 | | |
4070 | | - | |
| 4092 | + | |
4071 | 4093 | | |
4072 | 4094 | | |
4073 | 4095 | | |
4074 | 4096 | | |
4075 | 4097 | | |
4076 | 4098 | | |
4077 | | - | |
4078 | | - | |
| 4099 | + | |
| 4100 | + | |
4079 | 4101 | | |
4080 | | - | |
| 4102 | + | |
4081 | 4103 | | |
4082 | 4104 | | |
4083 | 4105 | | |
4084 | 4106 | | |
4085 | 4107 | | |
4086 | 4108 | | |
4087 | | - | |
4088 | | - | |
4089 | | - | |
| 4109 | + | |
| 4110 | + | |
| 4111 | + | |
| 4112 | + | |
| 4113 | + | |
4090 | 4114 | | |
4091 | 4115 | | |
4092 | 4116 | | |
| |||
0 commit comments