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
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