Skip to content

docs(releases): 18.3.0 names the fail-closed type-mismatch refusal it shipped without a CHANGELOG entry, and the cut runbook regenerates the version PR first - #30041

Merged
objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/project-thread-uc2v3c
Nov 4, 2026
Merged

objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/project-thread-uc2v3c

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Requested by Yibo Wang · project thread

Fixes #29957

维护者速读

Clause-②: no
Metadata-protocol: none

What changes

  • content/docs/releases/v18/18-3.mdx. Under 需手动处理 › Metadata the build, lint and save doors now refuse, the count line now says "8 entries, and one more that 18.3.0 ships with no entry in its CHANGELOGs", followed by a bullet for fix(lint)!: publish refuses a text-vs-number comparison in a validation rule (or another fail-closed predicate) instead of warning, then refusing every write #29923: the sites (validation rule condition / when, requiredWhen, readonlyWhen, option visibleWhen, hook condition), the before and after (18.2.0 published with an expression-invalid warning and then refused every write it could not evaluate; 18.3.0 refuses at os validate, os build, the object save door and publish at severity: error), the refusal it carries (type-mismatch with params.outcome: 'fail-closed', the same on MCP validate_expression for site: 'validation'), the remedy, the upgrade-guide entry validation-type-mismatch-refused, and that main serves it as type-mismatch-fail-closed since fix(lint)!: a type mismatch in a record-triggered flow condition or an advisory validation rule is served a verdict that says what really happens #29953. The Release facts note that already named the four leaked changesets now points to that bullet. The counts the page takes from the CHANGELOGs (8, 264, 1,379) are unchanged, because the entry is not in them.
  • docs/releases-maintenance.md. Cutting a GA release gains "The cut, in order": (1) list the changesets main gained since the Version Packages PR's branch point, with the command, and refresh until the list is empty; (2) the existing wait for a nearer CI run; (3) confirm the version commit left zero changesets pending (the Release run's Changesets: summary, or unconsumed on a full clone), and name any leak in the curated page, a breaking one under 需手动处理. It says why this is a step and not a check, with the 18.3.0 measurement. The stale "chore: version packages (rc) #4935" in the First, check paragraph becomes "the Version Packages PR".

Why

The CHANGELOG question

docs/releases-maintenance.md says the per-package CHANGELOG.md files are generated and never hand-edited, and that the curated page is where the platform narrative lives. The CHANGELOG half of the erratum is already automatic: the root version script runs release-pending-publish.mjs annotate-shipped before changeset version, so the next cut renders each of these four entries with a lead line **Shipped in 18.3.0**, whose CHANGELOG missed this entry; listed here one release late. (as 18.3.0 did for four of 18.2.0's). So this PR edits no CHANGELOG and no pending changeset.

Every changeset 18.3.0 skipped

Measured with git log --diff-filter=A --format=%H -1 origin/main -- <f> and git merge-base --is-ancestor <sha> 83d7e4ae over all 43 pending .changeset/*.md on main at c618e890. Four are ancestors of the cut. node scripts/release-pending-publish.mjs unconsumed --version-commit 83d7e4ae --version 18.3.0 (full clone) names the same four:

Changeset Added by Operator-visible On the 18.3 page
29904-type-mismatch-fail-closed.md 4c2cd29a (#29923) yes, breaking: publish refuses what 18.2.0 accepted Release facts note, sweep table, upgrade checklist step 2; now also under 需手动处理 with the served refusal (this PR)
29903-base-export-without-pair-extension.md 5f474102 (#29930) yes: a base's own export no longer carries its .custom pair's extension Release facts note and sweep table (since #29938)
password-reset-revocation-trail.md 7b2bb668 (#29921) yes: a self-service reset keeps and stamps sys_session rows (revoke_reason: password_reset) instead of deleting them Release facts note (since #29938)
org-admin-removal-caller-read.md 72d7db03 (#29932) yes: an org admin's refused removal answers the same 403 for an unreadable row as for a missing one Release facts note (since #29938)

The three non-breaking ones need no further line: each is a fix that declares no breaking change and no protocol kind, which the page's 其他修复 section counts but does not list, and the Release facts note already names each with its commit. None of them is in the 其他修复 counts, which come from the CHANGELOGs.

Why #26517 merged stale

83d7e4ae is the squash of #26517 onto 72d7db03. The PR's head b1c4119e (committed 13:39Z) has parent 40a35ded (#29922, 13:07Z). git log --first-parent 40a35ded..72d7db03 is five landings: 7b2bb668 (#29921), 4c2cd29a (#29923), 242665f1 (#29931, a checklist edit), 5f474102 (#29930), 72d7db03 (#29932). git diff --name-only --diff-filter=A 40a35ded 72d7db03 -- .changeset/ lists exactly the four changesets above. The PR was merged at 14:44Z without another refresh. The runbook already said to check the PR is current, but gave no command; the Release run's unconsumed report did warn "Name them in the 18.3.0 release notes", and #29938 named them, but only in the facts note.

Guard or runbook step

Runbook step. scripts/release-pending-publish.mjs (under annotate-shipped, #23818) records why refusing a stale Version Packages PR is not the remedy: main took a changeset-bearing landing about every twenty minutes (77 of 111 landings in 24 h), so such a check would refuse nearly every cut. The repo answers the leak with unconsumed (report) and annotate-shipped (next CHANGELOG). The order allows a guard only if it would not block the release flow on false positives; this one would block on true positives almost every time, so this PR adds no check and no .github/workflows/** edit.

Verification

Gates from node scripts/pm/dispatch-gates.mjs --commands for this change set, run at d7feeed3 after a turbo run build of @objectstack/formula, @objectstack/lint and @objectstack/spec: 51 derived, 51 run, all exit 0; dispatch-gates --ran: "51 derived, 51 run, 0 NOT-MEASURED, 0 UNRUN", exit 0. One family, check:skill-examples, exited 3 on the first pass (packages/client-react/dist not built, nothing measured); after turbo run build --filter=@objectstack/client-react... it exited 0 (283 examples). Among them: check:doc-anchors, check:doc-authoring, check:release-section-coverage (plain, --strict, --self-test), check:closed-ceremony-text, check:issue-citations, check-adr-links.

The step-1 command, replayed on 18.3.0 (origin/main → 72d7db03, origin/changeset-release/main → b1c4119e): merge base 40a35ded, four files listed. Anti-no-op: the same diff from 72d7db03 to itself lists zero.

content/docs/releases/ is release-owned (AGENTS.md); this is the dedicated docs-only PR AGENTS.md prescribes for a factual gap on a releases page, with no code riding along. Changeset: none (skip-changeset), docs only.

Human Minimum

  • 1. Schemas start as Zod; packages/spec holds no runtime logic. (not touched)
  • 2. Every name I added uses the casing for its kind. (none added)
  • 3. No formatter ran. No code changed, so pnpm lint has nothing new to judge.
  • 4. One issue, one branch off an up-to-date main, one pull request.
  • 5. A change that publishes carries a changeset, and both declaration lines are filled in here and in the changeset. (publishes nothing)
  • 6. packages/spec touched: its generated artifacts are regenerated and committed. (not touched)
  • 7. No hand edits to content/docs/references/, packages/*/CHANGELOG.md or content/docs/releases/. Edits content/docs/releases/v18/18-3.mdx as a docs-only erratum PR, per AGENTS.md's "factual error on a releases page → dedicated docs-only PR".
  • 8. Title, body and comments are in English. (the 维护者速读 block is the dispatch convention)
  • The Before Submitting list in CONTRIBUTING.md is done.

🤖 Generated with Claude Code

https://claude.ai/code/session_01WGufziWtqgnT2f4C6ThaSM

… shipped without a CHANGELOG entry, and the cut runbook regenerates the version PR first

The 18.3 page lists #29923's narrowing under 需手动处理 with the refusal it
serves (type-mismatch + params.outcome 'fail-closed', 18.2.0 warned then
refused every write -> 18.3.0 refuses at publish) and the rename on main
(#29953). docs/releases-maintenance.md gains a numbered cut order: list the
changesets main gained since the version PR's branch point and refresh
before merging; confirm zero pending changesets after the cut and name any
leak in the curated page.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WGufziWtqgnT2f4C6ThaSM
@objectstack-fleet objectstack-fleet Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Nov 4, 2026
@github-actions github-actions Bot added size/s documentation Improvements or additions to documentation labels Nov 4, 2026
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:devx#1 · os-support-ai · session_01WGufzgBDcBNVmSmo7VFHpj

Stamp: 2026-11-04T10:12Z
Head-sha: d7feeed

维护者速读

席位核对

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review November 4, 2026 10:14
@objectstack-fleet
objectstack-fleet Bot enabled auto-merge November 4, 2026 10:14
Merged via the queue into main with commit 318bc76 Nov 4, 2026
50 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/project-thread-uc2v3c branch November 4, 2026 10:44
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 skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

release 18.3.0: #29923's fail-closed type-mismatch refusal shipped in the 18.3.0 packages with no CHANGELOG line (its changeset was not consumed)

1 participant