Repository navigation
docs(changeset): correct six pending changesets whose surrounding claims a later merge falsified (objectui#9065) - #9139
Conversation
…merge falsified
Pending `.changeset/*.md` bodies publish VERBATIM into a CHANGELOG at the next
release, and this repository's release PR has been standing open since
2026-08-20, so each of these is one refresh away from being staged.
Site 7 (`8253-export-tree-view-config.md`) carried the strong shape: the
present-tense claim "`titleField` is declared, not deleted" was falsified when
objectui#8841 (PR objectui#9052) derived `TreeViewConfig` from the protocol and
dropped the key. The paragraph keeps the historical reason the key was declared
and gains a superseded note. The "deleting the read would have reddened its pin"
clause is KEPT and re-scoped, because it measured TRUE: at `2f6b2bf1a^`, with
objectui#6557's pin unedited, deleting the console composition's `titleField`
read reddens it (1 failed / 7 passed of 8) while deleting only plugin-tree's
`?? schema.titleField` rung leaves it green (8/8).
Five of the six `tracked as #N` citations turned out to sit inside surrounding
claims that the closed card falsified, which is the objectui#9042 class rather
than the cosmetic one:
- 5293: objectui#6011 retired `toSortItems`' `direction` read entirely
- 7165: objectui#7188 landed `pendingRow`, so the "Interim" limitation is gone
- 7655: objectui#7708 fenced `chatbot-floating`'s raw props spread
- 7727: objectui#8166 unbound the ambient `data` root, so the silent
constant-false is now a loud `Unknown variable: data`
- 8934: objectui#8983 bound the host discussion fallback to the pipeline
`olive-pears-invent.md` is deliberately left alone: its surrounding claim is
still true on `main` (`(op?.action ?? 'create')` is live) because objectui#7170
was closed "option 1, leave it" with no code change, and its empty frontmatter
means it writes no CHANGELOG entry at all.
No frontmatter is touched; this is prose only.
Part of #9065
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FhBNJcLRZLe8M87VcUgpKr
ACCEPT — PR objectui#9139, ⭐ and the round overturned TWO premises, one of them this seat'sReviewed against the diff, ⛔ not the report. Every reading below is this seat's own, taken independently on ⭐ First, the correction this seat owes — my ⛔ was FALSE, and the dev measured itMy dispatch order carried, as a
⛔ That is wrong. Re-measured here:
Byte-identical. Firing control on the same merge: ⇒ I inferred「#9052 rewrote the pin」from the pin containing phrases like 「the seam count dropped from seven to six」 on ⭐ The dev did the one thing that makes a wrong fence survivable: it measured the fence and reported the disagreement instead of working around it. The order's drop instruction was written conditional on that measurement (「 ⭐ Half 2 measured TRUE — the
|
| leg | deleted | pin |
|---|---|---|
| baseline | — | 8 / 8 |
| A | the console composition's rung | 1 failed / 7 |
| B | only plugin-tree's ?? schema.titleField |
8 / 8 |
| C | all four tree reads | 1 failed / 7 |
⇒ the sentence's own antecedent is 「the read」 after it has just enumerated four read sites. Under that antecedent, deleting it does redden the pin. The review row substituted the narrower one (leg B). ⭐ And 「32/32」 is not a reading of this pin at all — it holds 8 tests.
Verified independently by this seat
| check | result |
|---|---|
| files changed | 6, all under .changeset/ |
outside .changeset/ |
0 |
any CHANGELOG.md touched |
0 |
| frontmatter of all six | IDENTICAL before/after, per file |
olive-pears-invent.md |
blob 8c303f895 unchanged — the leave-alone ruling is byte-true |
any file outside .changeset/ naming the seven |
0 / 7 (firing control: markdown-test-inputs → 4) |
nine required contexts on 369dd3c0f |
9 / 9 success, none missing |
⇒ ⛔ no test can red on this diff, and the gate list is answered by required-context name.
⭐ The five "has since" claims, each re-derived here from code on main
| changeset | the new claim | this seat's reading |
|---|---|---|
5293 |
toSortItems now reads order, only order |
✅ view-config-utils.ts — body is order: (s.order || 'asc'); the remaining direction hits are the docblock explaining the removal |
7165 |
dependentValues={ctx.pendingRow ?? ctx.row} |
✅ present verbatim in ObjectGrid.tsx; its docblock says 「objectui#7188 added pendingRow」 |
7655 |
the floating spread is fenced, three keys dark | ✅ renderer.floating-spread-fence-7708.test.tsx exists 「the fix, not the tripwire」; the 7655 suite pins 「three undeclared keys are DARK now the spread is fenced」 |
7727 |
ambient data no longer bound on record surfaces |
✅ ExpressionProvider.tsx — 「Why there is no data root either (objectui#8166, ruled 2026-09-10)」 |
8934 |
the fallback mounts this renderer with no schema | ✅ record-chatter.tsx — 「since objectui#8983 that fallback mounts THIS renderer with no schema」 |
And site 7's new paragraph is corroborated by code objectui#9052 itself landed: packages/types/src/views.ts says in its own words 「the pinned spec is already strict」 and 「the three labelField \|\| titleField dual-reads (plugin-view, plugin-list, app-shell) stay as ⛔ UNDECLARED tolerant fallbacks」. ⇒ the survivor claim is not the PR's invention.
⭐ The finding that matters most, and it inverts the card
The card graded itself the weak class: 「only the citation's implication is stale … That is the clause objectui#9042 ranked least important, and it is the whole of this card.」
Five of the six surrounding claims were flatly false present-tense statements about shipped behaviour — the objectui#9042 class the card said it probably was not. ⇒ ⭐ the card's central instruction (「do that reading first, per changeset」) is vindicated by being obeyed: a sweep would have rewritten six citations and left five false sentences standing.
On the one left alone, and the one deliberately left alone inside an edited file
olive-pears-invent.md — LEAVE ALONE, on two independent measurements (objectui#7170 closed 「option 1, leave it. Already done.」 with no code change, so the sentence is still true; and empty frontmatter ⇒ no CHANGELOG entry ever). ⭐ Reported as a ruling with reasons, which is what the card asked for and ⛔ not an omission.
7655's displayMode tripwire sentence — also left alone, named in 「Deliberately not done」. ⭐ This seat checked it rather than taking it: objectui#7654 has landed (displayMode?: never), and the tripwire has been replaced by one pinning that authoring it is a tsc error. .passthrough(). ⇒ the ruling holds, and ⭐ it is stronger than the PR argued.
⛔ One note for the record, ⛔ not a change request
The PR body carries path:line citations. They are pinned to fac5acfa4 and Line Citation Gate is green, so nothing is owed here —
⇒ ACCEPT. Flipping to ready and arming the queue. The Armed note with the probe goes up before the merge.
Generated by Claude Code
Armed —
|
| leg | expectation | read from |
|---|---|---|
| floor × 7 | all PRESENT | all seven exist on fac5acfa4 and on 369dd3c0f |
| 1 — six false sentences | 0 each | each is a deletion in the diff, verified per hunk |
| 2 — six survivors | 1 each | each is present on 369dd3c0f, counted flattened |
3 — olive-pears blob |
8c303f895384afd40e04d3e8dc762d9e51826c97 |
identical at fac5acfa4 and 369dd3c0f — ⭐ a hash is the right fence for「nothing moved」 |
4 — nothing outside .changeset/, no CHANGELOG.md |
0, 0 | the PR's own diff is 6 files, all under .changeset/ |
⭐ Leg 2 is leg 1's firing control — same files, same instrument, same run. A leg 1 of all zeros with a leg 2 of all zeros is a broken query, ⛔ not a pass. And leg 2 is the one that carries the review's meaning: it asserts that site 7's historical reasoning survived the correction — the ruling, the objectui#6557 pin citation, and the counterfactual clause that measurement showed was TRUE.
Generated by Claude Code
… date the pending defaultSort claims this retirement falsifies Review rework for objectui#5861. - The three doc tombstones stop naming a spec version (doc-version-claims ratchet): they state that the installed protocol refuses the key by name. - Five pending changesets that will publish in the same release describe the legacy key as honoured (objectui#4869, #6235, #8973, the #4082 grid filter-lowering entry, #5293). Each falsified sentence is put in the past tense for its own change and gains a dated note naming objectui#5861, the form PRs #9139 / #9723 / #9734 used. The retirement changeset names all five. - ObjectView's objectui#5270 comment no longer quotes the retired defaultSort readers in the present tense. Claude-Session: https://claude.ai/code/session_014mXUNuFomfj24w7s1pZzhN Co-authored-by: Claude <noreply@anthropic.com>
…bject-grid defaultSort (ADR-0049) (objectstack-ai#10533) Fixes objectstack-ai#5861 Clause-②: yes — this removes the last runtime reads and the declared docs of a key the installed `@objectstack/spec` 17.4.0 already refuses by name; the published grid/view props surface narrows. ## What this does ADR-0049 enforce-or-remove, remove arm, for `object-grid`'s `defaultSort` and `object-view`'s `table.defaultSort` — the "C half" of the maintainer's 2026-08-22 ruling on objectui#4869 (「接受所有」), restart condition measured by triage comment 5808485875. Every reader is removed in one change, so no path honours the key while another ignores it: | Reader | Before | After | | --- | --- | --- | | `ObjectGrid` fetch path | third arm `else if (schema.defaultSort)` lowered it to `$orderby` | chain reads `sort` only | | `ObjectGrid` header arrows | `parseSchemaSort(schemaSort ?? [schema.defaultSort])` | `parseSchemaSort(schemaSort)` | | `ObjectView` non-grid fetch | fourth branch lowered `table.defaultSort` into the sink | chain ends at `table.sort` | | `ObjectView` grid forwarding | `defaultSort: schema.table?.defaultSort` | not forwarded | | `ObjectView` delegated `renderListView` | `mergedSort` wrapped `table.defaultSort` into an array | chain ends at `table.sort` | | `plugin-grid` registration | `sort` input described `defaultSort` as its fallback | description says it is retired | ## H1 — the TypeScript declaration goes too, as a tombstone (decided and measured) `ObjectGridSchema.defaultSort` becomes `defaultSort?: never` and the zod mirror member becomes `retirementTombstone(...)`, in lockstep. Not a deletion: `ObjectGridSchema` extends `BaseSchema`, whose `[key: string]: any` absorbs an undeclared key as `any`, and the mirror's `.passthrough()` keeps it unexamined, so deleting would let the retired spelling type-check and parse green and do nothing. This is the package's existing convention (`ObjectViewSchema.viewTabBar`, objectui#7779). Measured on the rebuilt `dist`: a downstream `ObjectGridSchema` literal carrying `defaultSort` fails `tsc` in `plugin-view` with TS2322 (reverse check below). Only the `defaultSort` regions of `objectql.ts` / `objectql.zod.ts` were touched; `ObjectGridSlotKey` keeps listing the key because the member is still declared. ## H2 — no live producer (measured, with lit controls) - Installed spec 17.4.0: `ObjectGridPropsSchema.safeParse({ objectName, defaultSort })` fails `invalid_type` at `defaultSort` with the message "`object-grid` property `defaultSort` was removed in @objectstack/spec 17 (ADR-0049) — it was the legacy second spelling of `sort` …"; control `{ objectName, sort: [...] }` parses green. - No non-test source outside the edited files reads the key (`git grep defaultSort -- packages/` — the remaining hits are `plugin-detail`'s own `RelatedList` `defaultSort` prop, a different carrier fed from `schema.sort`, plus CHANGELOGs). `normalize-list-view` never mentions it. - Authored occurrences — objectui: `examples/` 0 files, `e2e/` 0, `apps/` 1 (the registry parity test's comments, not authoring), `content/` 2 (the two pages tombstoned here). objectstack `origin/main`: `examples/` 0, `apps/` 0, `packages/qa/` 0. Lit control, identical method, `searchableFields`: objectui `examples/` 4 files, `content/` 5; objectstack `examples/` 2, `packages/qa/` 1. -⚠️ One authored occurrence the earlier reads did not flag: the `ObjectGridSchema` JSON example in `content/docs/api/schema-reference.md` authored `"defaultSort": { "field": "name", "order": "asc" }` — a copy-paste of it is refused by the spec. It now authors `"sort": [{ "field": "name", "order": "asc" }]`. ## H3 — pins, red on the base and green on the head The flipped cells were rewritten, not deleted: each now asserts the key is inert on its path, beside a canonical `sort` control on the same path in the same run. Red leg: the five source files were put back to the base `59636b3a6` under the committed tests, with a trap restore (blob hashes re-checked against HEAD afterwards, `git diff HEAD` empty): **19 failed | 97 passed (116)**, 8 of 9 files red. The only all-green file is `gridRetiredStringSort-8767.test.tsx`, whose cell was only re-commented. Green leg on the head: **116 passed (116)**, 9 files. Flipped or new, each red on base: - `plugin-view` `ObjectView.canonicalTableKeys.test.tsx` — grid path: `no longer forwards a retired table.defaultSort — and does not rescue it into sort`; `puts the canonical value in the canonical slot…` (legacy slot now undefined); `keeps the named view sort in force, and a retired table.defaultSort beside it is not forwarded`. Non-grid: `a retired table.defaultSort alone orders NOTHING`. Delegated: `hands over NO sort for a retired table.defaultSort alone`. - `plugin-view` `ObjectView.sortSink.test.tsx` — `sends no $orderby at all…`, `a descending legacy default is inert too…`, and the tail of `keeps the sink STRICT…` (the sink-strictness half is unchanged). - `plugin-view` `ObjectView.filterSources.test.tsx` — the three objectui#6235 wrap cells, flipped. - `plugin-view` `ObjectView.namedViewSortArity.test.tsx` — through the REAL `ObjectGrid`: `a retired table.defaultSort sorts NOTHING on the real grid path — no $orderby, no arrow`, plus a new canonical `table.sort` control cell. - `plugin-grid` `gridArrayArmOrderby-8973.test.tsx` — the legacy-arm section, flipped (fully-specified, and `order` omitted, now send no `$orderby`). - `plugin-grid` `gridDefaultFiltersLowering.test.tsx` — `a retired defaultSort reaches neither $orderby nor $filter`. - `plugin-grid` `serverSorting.test.tsx` — new: `a retired defaultSort lights NO arrow and sends NO $orderby`, with a sortable-chrome non-vacuity check. - `types` `object-grid-default-sort-tombstone-5861.test.ts` — new: refused by name (`invalid_type` at `defaultSort`), lit control (unknown key green), remedy text, describe equals message, canonical `sort` green, upstream re-derivation from the installed pin, and the `@ts-expect-error` on the `?: never` twin (compiled by `tsconfig.test.json`; `--listFiles` includes the file). Canonical `sort` is asserted on all three `ObjectView` paths and on bare `ObjectGrid` in the same runs. ## Review rework (head `28b1a4d32`) The contract review at `f40819d61` (comment 5828759786) returned FAIL on two items and one nit. All three are addressed in `28b1a4d32`: 1. **Required `Test` was red** on `scripts/__tests__/doc-version-claims.test.ts` ("records every version literal on the scanned surfaces"). The doc tombstones had added unregistered `@objectstack/spec` version literals in `plugin-view.mdx` and `plugin-view/README.md`, plus a third in `schema-reference.md` split across a line break, which the gate cannot see. The gate's preferred remedy is applied to all three: the literal is deleted, and each page now says the installed protocol refuses the key by name. No `KNOWN_CLAIMS` entry is added. Reproduced red locally first (`Tests 1 failed | 28 passed (29)`, naming both visible sites), then green (`29 passed (29)`). No line this PR adds under `content/` or `packages/plugin-view/README.md` carries a version-shaped token. 2. **Pending changesets that would publish "keeps working" beside "no longer read".** Following the precedent of PRs objectstack-ai#9139, objectstack-ai#9723 and objectstack-ai#9734, the falsified sentence in each is put in the past tense for its own change ("at this change …"), and each now names objectui#5861: four carry a dated note, and `5293` carries an inline citation in objectstack-ai#9139's form: - `objectview-sort-sink-4869.md`: "both spellings of the pair keep working", and the `table.defaultSort` sink chain; - `6235-mergedsort-wrap.md`: the delegated-slot wrap; - `8973-grid-orderby-normalize.md`: the legacy arm "is fixed with it"; - `grid-default-filters-lowering-4082.md`: the legacy leg "needs no change"; - `5293-view-sort-order-spelling.md`: `ObjectGridSchema.defaultSort` cited as a live `order` spelling. A re-grep of the pending set finds three more `defaultSort` mentions, all still true and left alone. `7122` says the spec made the key a D2 tombstone. `8767` quotes the spec's retirement text. `6697` concerns `RelatedList`'s own `defaultSortKey`, a different carrier. The retirement changeset's "supersedes" paragraph now names all five entries. 3. **Nit.** The objectui#5270 comment block in `ObjectView.tsx` no longer quotes the retired `defaultSort` header and fetch readers in the present tense. The branch was not merged with `main`. There was no conflict and CI did not need it; the review reads `behind`, not `dirty`. ## Gates (code commit `43ab1fd43`; rework head `28b1a4d32`; full-suite runs at `f40819d61`, and `plugin-view` re-run at `28b1a4d32`) - Build closure: `turbo run build --filter='@object-ui/plugin-view^...' --concurrency=2`: 15 successful, 15 total; rebuilt `packages/types/dist/objectql.d.ts` carries `defaultSort?: never`. - `pnpm --filter @object-ui/types type-check` exit 0 (script echoed `@object-ui/types@17.6.0 type-check`); `@object-ui/plugin-grid` exit 0; `@object-ui/plugin-view` exit 0. - Reverse type check through the rebuilt `.d.ts`: injecting `defaultSort: { field: "name", order: "asc" }` into `ObjectView`'s `gridSchema` literal makes `plugin-view` `tsc --noEmit` fail with `TS2322 … Types of property 'defaultSort' are incompatible … not assignable to type 'undefined'`; restored, blob equals HEAD. (A first attempt was a no-op: `ablation-replace` refused because the replacement contained its own anchor. It changed nothing and ran nothing.) - Root-form vitest: `packages/types/` 233 files, 5166 tests passed; `packages/plugin-grid/` 156 files, 1487 tests passed; `packages/plugin-view/` 48 files, 444 tests passed (re-run at `28b1a4d32` together with `doc-version-claims`: 49 files, 473 tests passed; `plugin-view` type-check exit 0 again, closure build 15/15 cached); `apps/console/src/__tests__/registry-inputs-spec-parity.test.ts` (it reads the `plugin-grid` registration inputs) 199 tests passed. - `node scripts/check-changeset-presence.mjs` exit 0 (14 source files of 3 released packages, 1 changeset); `check-changeset-no-major` exit 0; `check-changeset-fixed` exit 0. - `check:new-line-citations`: `VERDICT new-cross-file-line-citations: 0 new citation(s)`; `check:control-bytes` OK. - Doc gates: `check-doc-links` exit 0; `check:doc-types` exit 0; `check:doc-fences` exit 0; `check:doc-example-ids` exit 0; `check-prompt-component-keys` exit 0; `check-doc-expression-carriage` exit 0 (report-only; its one `schema-reference.md` site, `action.condition`, predates this branch); `check-changeset-claims` exit 0 (report-only); `check:pending-changeset-literals` exit 0. - eslint, narrowed to the 14 changed `.ts`/`.tsx` files: 14 files in the JSON report, 0 errors. Per-file warnings are equal to the base except three test files (+1, +1, +2 `no-explicit-any` from `as any` fixtures, matching those files' existing style). `eslint.config.js` has no type-aware linting (`parserOptions.project` / `projectService` are absent) and no custom rule under `eslint-rules/` reads the filesystem, so a verdict on an untouched file cannot move. - Governed surface: `check-governed-queue-guard --test` over all 18 paths says NOT GOVERNED. ## Registries and docs - Touched: `@object-ui/types` (`ObjectGridSchema` member and its zod mirror), the `plugin-grid` registration (`sort` description and docblock), `content/docs/plugins/plugin-view.mdx`, `content/docs/api/schema-reference.md`, `packages/plugin-view/README.md`, and a changeset (`minor` on types / plugin-grid / plugin-view, never `major`). - Not touched, on purpose: the console registry parity ledger `apps/console/src/__tests__/registry-inputs-spec-parity.test.ts`. Its `object-grid.defaultSort` carve-out entry was already harvested when spec 17.3.0 tombstoned the key; it keeps only a comment. `docs/adr/**` is not needed, because no ADR lists the key. - `schema-reference.md`: the `CRUDSchema` `defaultSort` / `defaultSortOrder` sentence is untouched. Only the adjoining `ObjectGridSchema` sentence ("that key is unaffected"), which this change makes false, was rewritten. ## Acceptance notes - File surface beyond the claim, with reasons. `packages/plugin-view/README.md` described the key as a working alias, and it ships in the package's `files[]`; this change makes it false, so it is repaired here. Further `plugin-view` / `plugin-grid` test files (`filterSources`, `namedViewSortArity`, `gridArrayArmOrderby-8973`, `gridDefaultFiltersLowering`, `gridRetiredStringSort-8767`, `serverSorting`) pinned the key as working, or referenced it. They sit next to the landing points. - `ObjectGrid.tsx`'s page-size region (draft objectui#10278) is untouched. The two edits sit in the sort `if` chain and the `declaredSort` expression; the fetch effect's dependency list is unchanged. - Five pending changesets described how the retired key used to be honoured. They ship in the same release: objectui#4869, objectstack-ai#6235, objectstack-ai#8973, the objectstack-ai#4082 grid filter-lowering entry, and objectstack-ai#5293. Four now carry a dated note naming objectui#5861, and `5293` an inline citation (see Review rework above). - Line-address citations in `plugin-view.mdx` paragraphs this change touched were rewritten to cite by content (AGENTS.md objectstack-ai#11). The `data.ts:63` citation in the rewritten `gridDefaultFiltersLowering` cell was dropped. - A document that still carries `defaultSort` renders unsorted. It is not re-routed into `sort`: that would be the tolerant alias this retirement removes. --- _Generated by [Claude Code](https://claude.ai/code/session_014mXUNuFomfj24w7s1pZzhN)_ --------- Co-authored-by: Claude <noreply@anthropic.com>
Fixes #9065
Seven pending
.changeset/*.mdbodies carried a claim that had expired or was never true. A pending changeset body publishes VERBATIM into a CHANGELOG at the next release, and this repository's Changesets release PR — objectui#5400,chore: release packages, branchchangeset-release/main— has been standing open since 2026-08-20. So the deadline here is one maintainer click, not one release cycle.Prose only. ⛔ No frontmatter moves:
scripts/check-changeset-overwrite.mjsprintsdeclared at baseanddeclares nowidentically for all six edited files, and0 changeset(s) added, 6 modified, 0 deleted..changeset/olive-pears-invent.mdis deliberately left alone as a measured ruling — see its row below.Site 7 —
.changeset/8253-export-tree-view-config.md, taken firstThe
domain:specseat routed this here as the strong class, and it is: the paragraph states the opposite of what the tree face now does.Half 1 — "
titleFieldis declared, not deleted" is FALSE onmainRe-derived on
fac5acfa4, three readings:packages/types/src/views.ts:147—TreeViewConfigis now the protocol's own block:NonNullableofSpecListView'streemember.packages/types/src/__tests__/tree-view-config-readers-8253.test.ts:123— a compile-time assertion thatTreeViewConfigis not structurally equal to that block intersected with an optionaltitleField. It is a FIRING CONTROL on the parity check next to it, so the parity check can sayfalse.:304— the console rung is asserted not to contain the cast-then-titleFieldread.⇒ the declaration is gone. The paragraph is rewritten to past tense and gains a
⚠️ Supersedednote naming objectui#8841 / PR objectui#9052 and@objectstack/spec@17.4.0'sstrictObjectrefusal, and keeps the historical reason the key was declared. ⛔ The paragraph is not deleted.Half 2 — "Deleting the read would have … reddened its pin" measured TRUE. ⭐ The card's table is wrong here.
The instruction to drop that clause was explicitly conditional on this measurement, and the condition fired. Measured at
2f6b2bf1a^=c3a427378, in a dedicated detached worktree, with objectui#6557's pin unedited and each leg proven on disk (anchor counts before/after plus a blob-hash comparison againstHEAD, restored togit diff HEADempty after every leg):2f6b2bf1a^titleFieldrung inpackages/app-shell/src/views/ObjectView.tsxexpected 'name' to be 'v_tree_title'plugin-tree's?? schema.titleFieldnode rungtitleFieldreads⇒ under the sentence's own antecedent — the reads it has just enumerated, "all four read sites" — deleting the read does redden the pin. The clause is therefore kept, re-scoped, ⛔ not dropped.
Two premises behind the "it was never true" verdict do not survive measurement:
packages/app-shell/src/views/ObjectView.titleFieldConvergence.test.tsxhas blob04fd1e306at2f6b2bf1a^, at2f6b2bf1aand atfac5acfa4— byte-identical. Control:packages/types/src/views.tsmoves544cb074eto29824e7ebacross the same merge. The two phrases attributed to objectui#9052 ("the seam count below dropped from seven to six", "the middle rung is gone") are already present at2f6b2bf1a^and belong to objectui#7029 and objectui#6557 respectively.What objectui#9052 actually removed is leg B plus the declaration — which is exactly why it could ship without touching the pin, and its own changeset says so: "objectui#6557's pin on that rung stays green".
The six — a per-changeset reading, with the closed card's outcome
⭐ Five of six turned out to be the objectui#9042 class, not the cosmetic one: the citation's surrounding claim was falsified when the card closed.
5293-view-sort-order-spelling.mddirectionfrom the second published exportdirection, and this release does not retire it" —toSortItems"foldss.order or s.direction or 'asc'"view-config-utils.ts:326now reads "Readsorder, and onlyorder", and the body is(s.order or 'asc')olive-pears-invent.mdcreate, tracked as objectui#7170"packages/data-objectstack/src/index.tsstill reads(op?.action ?? 'create') === 'create' ? 'create' : 'update', and the comment above it still explains why. Two independent reasons, below.7165-grid-dependent-values.mdpendingRowis a published member of therenderCellEditorcontext, andObjectGrid.tsx:4324passesdependentValues={ctx.pendingRow ?? ctx.row}7655-chatbot-registration-authoring-faces.mdprocessVisibility,surfaceandshowAvatarsare live there"renderer.tsx:448is nowtoDomProps(props)spread FIRST, andrenderer.authoring-faces-7655.test.tsx:231pins those three keys as dark7727-conditional-formatting-record-scope.mddataroot on record surfacesdata.status == 'x'still lints clean … while resolving against the host's ambientdatarather than the row — constant-false, silently"@objectstack/formula'sSCOPE_ROOTS), but it no longer RESOLVES: it now faults withUnknown variable: data. The silence is gone8934-chatter-feed-affordance-only.mdrecord-chatter.tsx:74— "since objectui#8983 that fallback mounts THIS renderer with no schema";RecordDetailView.discussionFallbackPipeline-8983.test.tsxpins that both surfaces render the same feed⭐ Why
olive-pears-invent.mdis a ruling and not an omissionTwo independent measurements, either of which is sufficient:
maintoday, so the sentence describing it is accurate.Measurement method — every phrase read FLATTENED, every zero paired with a control
The card names a false zero that already cost one reading: a line-based
grepreturns 0 for a phrase spanning a line break. Every count below is taken aftertr '\n' ' ' | tr -s ' '.Sweep across all 42
CHANGELOG.mdfiles, one instrument, one run, on each of the two heads:e4ce4f42fmainfac5acfa4tracked as objectui#6011tracked as #7188tracked as objectui#7708tracked as objectui#8166tracked as objectui#8983is declared, not deletedreddened its pinUNATTRIBUTED_STRIP_OBJECTPatch Changes⇒ the instrument fires, and it fires differently on the two heads.
UNATTRIBUTED_STRIP_OBJECTreading 0 in the same run where three siblings read 1 / 1 / 2 is a real zero, ⛔ not a dead query.mainafter that. The action regenerates that head frommainon the next push, so every pending changeset is one refresh away from being staged. A correction onmainpropagates into it. ⛔ objectui#5400 is not touched by this PR.Gates, by required-context name
Changeset Declarationnode scripts/check-changeset-presence.mjsLintnode scripts/check-lint-coverage.mjsand the rest, behind lint.yml'sDecide whether this change needs a full runshould_run=falsefor a.changeset/**-only PR and still reportsType Checkshould_rungateTest (shard 1/4 .. 4/4)should_rungateBuild & E2Eshould_rungateBuild Docsshould_rungateChangeset Declarationis the one required context with no path filter, so it evaluates this diff for real. Verbatim:⇒ no changeset is owed for this PR, and ⛔ no
skip-changesetlabel is applied — in this repository that label is not the mechanism.The four other gates that read
.changeset/, plus two that read every tracked text file, all run and all exit 0:node scripts/check-changeset-claims.mjs0 file(s) changed outside .changeset/— nothing to re-readnode scripts/check-changeset-overwrite.mjsnode scripts/check-changeset-no-major.mjsmajordeclarednode scripts/check-changeset-fixed.mjsnode scripts/check-control-bytes.mjsnode scripts/check-new-cross-file-line-citations.mjsNo test pins any rewritten sentence. No file outside
.changeset/names any of the seven changesets; agrep -rlfor each rewritten phrase returns nothing outside.changeset/(with a firing control onapplyFeedConfig, which returns three files).TURBO_SCM_BASEagainst the base reports0 no packagesaffected.scripts/__tests__for the five changeset gates plus control-bytes: 157 passed (157).A two-sided probe for
origin/mainafter mergeBoth legs flattened; floors are per file. ⭐ Leg 2 is leg 1's FIRING CONTROL: same pipeline, same instrument, same run, same
.changeset/files — it must return non-zero, so a leg 1 of all zeros cannot be a broken query. Verified on this branch: leg 1 = 0 six times, leg 2 = 1 six times.Expected values come from reads taken on this branch, not from intent. Leg 2 is the one that matters for review: it asserts that site 7's historical reasoning survived — the ruling, the pin citation and the counterfactual clause — and that the one changeset ruled leave-alone was in fact left alone, byte for byte (
git diff fac5acfa4 -- .changeset/olive-pears-invent.mdmust be empty).Things the card, the triage and the PM claim got wrong
2f6b2bf1a^,2f6b2bf1aandfac5acfa4. The "the pin was rewritten to expect the removal" trap is real as a class but does not apply to this file.domain:specseat's row substitutes a narrower antecedent (theplugin-treeresolver rung) for the one the sentence actually names (all four read sites).Version PackagesPRs = 0) does not fire here, as the PM claim already recorded and objectui#9134 now tracks.Deliberately not done
the other eightphrase-match neighbours are untouched — different objects, no miscount.CHANGELOG.mdis edited.7655'sdisplayModetripwire sentence is left alone on purpose. objectui#7654 has landed the?: nevertombstone, but that sentence carries its own expiry in its own words ("until that PR flips it"), which is what separates it from the five corrected above.🤖 Generated with Claude Code
https://claude.ai/code/session_01FhBNJcLRZLe8M87VcUgpKr
Generated by Claude Code