Skip to content

docs(changeset): the consumed page-action-row operation changeset no longer says an api row beside the update parses (deliberate correction) - #23524

Draft
objectstack-fleet[bot] wants to merge 2 commits into
mainfrom
claude/issue-23498-consumed-changeset-example
Draft

objectstack-fleet[bot] wants to merge 2 commits into
mainfrom
claude/issue-23498-consumed-changeset-example

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Fixes #23498
Clause-②: no

What this does

Corrects two sentences of the consumed prerelease changeset .changeset/pre/23332-page-action-row-operation.md in place. PR #23494 (merged as ad5a7d7c3) made both false. No code, no new changeset, no CHANGELOG.md, no content/docs/releases/, no .changeset/pre.json. The frontmatter, the Clause-② line, the ADR-0087 registration marker and the BREAKING banner are byte-identical. The diff touches lines 24 and 30 only (+2 / -2).

First measurement: the 18.0.0 GA entry is compiled from .changeset/pre/

The card's first step (triage 6171242082) is measured two ways, on 1f3ac4f524:

  • Code. The repo pins @changesets/cli 3.0.3. @changesets/read 1.0.1 readChangesets reads .changeset/pre/* as ids pre/NAME. @changesets/assemble-release-plan 7.0.0 getRelevantChangesets drops pre/ ids only while preState.mode !== "exit". @changesets/pre 3.0.0 exitPre writes mode: "exit". So on pre-mode exit, every consumed changeset is an input to the GA release plan.
  • Run. In a throwaway detached worktree (removed afterwards, nothing committed), changeset pre exit && changeset version exited 0. Its own notice said: "Please also review the changesets in the .changeset/pre folder as they will be used as changelogs for the normal versions". The output set packages/spec to 18.0.0. Its CHANGELOG.md ## 18.0.0 entry (lines 3 to 4266) carried this file's FROM → TO first row at line 3189 and the "What an author now sees" paragraph at line 3195, false sentence included. So the scope does not shrink to the CHANGELOG line.

The two sentences, BEFORE → AFTER

# where BEFORE AFTER
1 FROM → TO, first row, "what to write instead" the same row without onSuccess: the runner performs the write … the same row without onSuccess, with no executor key or 'script' (beside operation: 'update' any other executor is refused at that key, D3 ui-page-action-row-declarative-update-rules): the runner performs the write …
2 "What an author now sees", closing sentence The same row without onSuccess parses unchanged. That row is also refused at actionType, since beside operation: 'update' an executor other than 'script' is refused (D3 ui-page-action-row-declarative-update-rules); without onSuccess, and with no actionType or actionType: 'script', it parses.

Why: the example row names actionType: 'api'. Since PR #23494, a page action row carries ActionSchema's declarative-update rules, so an executor other than 'script' beside operation: 'update' is refused at the executor key. That holds with or without onSuccess. The card's done-line offered two routes: drop the executor from the example, or qualify the sentence. This PR qualifies the two sentences. The quoted refusal text and the example row stay as they were, and the edit stays within the two places the claim names. Nothing about #23332's own semantics changes: onSuccess beside the update is still refused whatever executor the row names, or none.

Every example in the file, parsed against today's main

A test-free scratch script (not committed) parsed each shape against packages/spec/dist/ui built from 1f3ac4f524. The branch's later merge of origin/main brought in no packages/spec change (0 paths).

E1 button {actionType:api, operation:update, patch, onSuccess}: REFUSED (2)
   at ["actionType"] `operation: 'update'` is performed by the platform action route … so `actionType` names that route or noth…
   at ["onSuccess"]  An `action:button`'s `onSuccess` (`operation: 'update'`) would follow a result the contract does not declare: the console's action runner reads `operation` befo…
E2 button {actionType:api, operation:update, patch}: REFUSED (1)   (the row the old closing sentence said "parses unchanged")
   at ["actionType"] `operation: 'update'` is performed by the platform action route …
E3 button {operation:update, patch, onSuccess}: REFUSED (1)  at ["onSuccess"]
E4 button {operation:update, patch}: PARSES
E5 button {actionType:script, operation:update, patch, onSuccess}: REFUSED (1)  at ["onSuccess"]
E6 button {actionType:script, operation:update, patch}: PARSES
E7 member {type:api, operation:update, patch}: REFUSED (1)  at ["actions",0,"type"]
E8 member {type:script, operation:update, patch, onSuccess}: REFUSED (1)  at ["actions",0,"onSuccess"]
E9 member {operation:update, patch}: PARSES
E10 button {operation:delete}: REFUSED (1)  at ["operation"] `operation: 'delete'` is a bulk-def operation with no row-level form …
E11 button {operation:custom}: REFUSED (1)  at ["operation"] `operation: 'custom'` is a bulk-def operation with no row-level form …
E12 button {operation:bogus}: REFUSED (1)  at ["operation"] Invalid input: expected "update"

After this PR, every statement in the file matches these results. The FROM → TO first row's "before" is refused (E1). Its "instead" parses (E4, E6, E9). The "What an author now sees" example gets the quoted onSuccess text (E1), and the new closing sentence names its second refusal, at actionType. The row without onSuccess and with no or 'script' executor parses (E4, E6). The second and third FROM → TO rows match E10, E11, E12 and E4.

Check Changeset is red on purpose: DELIBERATE CORRECTION, and a person's confirmation is owed

scripts/check-empty-changeset.mjs refuses a diff that modifies a changeset present on the merge base. Its git pathspec .changeset/*.md matches .changeset/pre/ too. Measured locally: exit 1, ::error file=.changeset/pre/23332-page-action-row-operation.md::. It names the two classes. This PR is the DELIBERATE CORRECTION class: PR #23494 changed the behaviour this pending release note describes. Remedy, per the gate: "do NOT restore it -- say so on the PR and get it confirmed". Nothing here is restored or routed around to turn it green. A person's confirmation of this correction is owed on this PR before it lands, as on the precedent PR #23126. As on that precedent, no skip-changeset label is applied: #23126 carried none, and its gate stayed red until confirmed.

packages/spec/CHANGELOG.md's 18.0.0-next.1 entry carries the same sentence. It was true at next.1, and amending it is the release owner's call. It is not touched here.

Gates (run at 578a53d33c)

node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack derived 20 commands. All 20 were run, plus node scripts/check-changeset-fixed.mjs (its roster lives under .changeset/). --ran reconciliation: "20 derived, 20 run, 0 NOT-MEASURED, 0 UNRUN", a DERIVED zero, with every exit code recorded. Exit 0 for all except node scripts/check-empty-changeset.mjs --base origin/main, which exits 1. That is the designed DELIBERATE CORRECTION red above. check-adr-0087-registration --base origin/main: exit 0. check:nul-bytes: OK. A control-byte self-scan of the edited file found no hits.

NOT MEASURED locally: the four type-check lanes the derivation names as CI-only. This diff touches no TypeScript.

Acceptance notes

  • The ADR-0087 marker and the BREAKING banner are left verbatim. The D3 id ui-page-action-row-declarative-update-rules named in the new text is the id of packages/spec/src/migrations/entries/semantic/18.ui-page-action-row-declarative-update-rules.ts.

Generated by Claude Code

…longer says an `api` row beside the update parses (deliberate correction)

The consumed prerelease changeset said a row with `actionType: 'api'`,
`operation: 'update'` and a `patch` parses once `onSuccess` is dropped.
The rows now carry ActionSchema's declarative-update rules, which refuse
an executor other than `'script'` beside the update at that key. The
FROM -> TO first row and the "What an author now sees" closing sentence
now name the executor condition. The 18.0.0 GA entry is compiled from
`.changeset/pre/` on pre-mode exit, so this is the text that ships.

Claude-Session: https://claude.ai/code/session_01D6F9axfoPzR7t8G1J7Ytzz
Co-authored-by: Claude <noreply@anthropic.com>
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Awaiting a person's confirmation · domain:spec seat 3 · 2026-10-14T17:48Z

Check Changeset is red by design on this head (578a53d33): this PR rewrites the consumed changeset .changeset/pre/23332-page-action-row-operation.md, which check-empty-changeset's DELIBERATE CORRECTION class refuses until a person confirms it here, as #22586 / PR #23126 did. The seat does not enqueue over it.

What a confirmation covers: the two sentences in the diff (+2/−2), both false since PR #23494 (ad5a7d7c3), which would otherwise compile into @objectstack/spec's ## 18.0.0 notes (measured with changeset pre exit && changeset version in a throwaway tree). Seat review: ACCEPT on #23498. packages/spec/CHANGELOG.md's 18.0.0-next.1 entry is the release owner's call and is not touched.


Generated by Claude Code

This branch has not been deployed

No deployments
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/xs tooling

Projects

None yet

2 participants