Skip to content

docs(releases): author the 17.1.0 section on the v17 page - #10271

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-10232-release-notes-17-1-0
Aug 20, 2026
Merged

docs(releases): author the 17.1.0 section on the v17 page#10271
os-zhuang merged 1 commit into
mainfrom
claude/issue-10232-release-notes-17-1-0

Conversation

@os-zhuang

@os-zhuangos-zhuang commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

Fixes#10232

17.1.0 was published to the latest tag on 2026-08-20 with a 69-package version-locked train and the curated docs did not move with it.

⚠️Authorization — corrected by PM review.content/docs/releases/** is release-owned and has exactly two channels: a factual error goes through a dedicated docs-only PR, and a completeness gap goes through per-card maintainer approval. Authoring a missing section is a completeness gap, so this PR rides the second channel, not the first. An earlier revision of this paragraph called it "the sanctioned dedicated docs-only PR" — that was the wrong warrant and is struck. The approval it actually rests on was given verbatim on #10232: 「补写 17.1.0 章节 已经有issue,插队处理」. The rule is not relaxed and this is not a precedent — no future PR may cite this one as licence to open a docs-only PR into content/docs/releases/**. Only the two files named on the card are touched.

What changed

FileChange
content/docs/releases/v17.mdx+748 lines: a ## Highlights — 17.1.0 block, a # What's new in 17.1.0 division, a ### 17.1.0 upgrade checklist, a **17.1.0** references paragraph, and a rewritten release-status blockquote
content/docs/releases/index.mdxthe v17 entry's parenthetical: current series: 17.0.0, released 2026-08-1417.1.0, released 2026-08-20, with a 17.1 adds … clause in the v16 entry's form

Deletions are only those three superseded claims — no 17.0.0 content is removed (git diff -U0 | grep '^-' is 11 lines: the old blockquote, the frontmatter description, the old index bullet).

Following the v16 page's treatment of 16.1

Per the card's ruling 1, the shape is the convention already on the sibling page, not an invented expectation. The new spine mirrors v16.mdx heading for heading:

## Highlights — 17.0.0 ← existing
## Highlights — 17.1.0 ← new (v16: ## Highlights — 16.1.0)
# 17.0.0 in detail ← new divider (v16: # 16.0.0 in detail)
… all existing 17.0.0 content, unmodified …
# What's new in 17.1.0 ← new (v16: # What's new in 16.1.0)
## New capabilities in 17.1.0 (v16: ## New capabilities in 16.1.0)
## Security corrections in 17.1.0 (the v17 page's own rc-window convention)
## Behavior changes & fixes in 17.1.0 (v16: ## Behavior changes & fixes in 16.1.0)
## New in Console (Studio) — objectui pin `665661ab0932 → 9a3daf8d37ad`
## Upgrade checklist → ### 17.0.0 (existing) + ### 17.1.0 (new)
## References → + a **17.1.0** paragraph

The paired # 17.0.0 in detail divider is added for the same reason v16 carries one: without it the new H1 would leave every preceding H2 nesting under nothing. It inserts a heading and changes no claim.

How the contents were established

⛔ Not from the issue tracker, not from what a minor "usually" contains. Sources of truth were the 69 package CHANGELOG.md sections under ## 17.1.0.

  1. Extracted all 69 sections (25,037 lines).
  2. Stripped Updated dependencies [hash] noise → 47 packages with substantive entries.
  3. Deduplicated by entry text — a changeset that bumps N packages writes identical prose into all N changelogs. 314 distinct entries across 312 distinct commit hashes: 111 minor, 203 patch, no major.
  4. Read the full text of every entry cited below; the one-line index was used only for navigation, never as a source.

Re-derived independently rather than carried from the card: npm view @objectstack/cli dist-tags{ rc: '17.0.0-rc.6', latest: '17.1.0' }; time.17.1.02026-08-20T11:21:17.400Z; time.17.0.02026-08-14T07:59:10.446Z; 69 CHANGELOG.md files carrying ## 17.1.0; packages/cli/package.json at 17.1.0. All match.

The Console pin chain is quoted from the changelog rather than inferred from entry order — packages/console/CHANGELOG.md states 665661ab0932...82a94170c405 and 82a94170c405...9a3daf8d37ad, and 665661ab0932 is where the v17 page's rc.6 section already ends.

What was deliberately left out

Per the acceptance criterion, an omission is recoverable and a false sentence is not:

  • Every entry whose changelog text could not establish what the change does for a user. Roughly 90 patch entries are internal refactors, test seams, ADR-0087 ledger registrations, JSDoc corrections and .describe() liveness pins with no user-visible behaviour; they are not summarised and not gestured at.
  • Per-entry issue numbers I could not verify. Every #NNNN in the new prose is quoted from the changelog entry that carries it.
  • Consumer halves that had not landed at this pin.relatedListFilter is explicitly marked as ledgered planned with the objectui consumer outstanding, rather than described as if it renders.
  • The precise changeset count as a headline number. The section says "111 minor and 203 patch changelog entries" — what was measured — rather than "N changesets", because one commit can carry two changesets with different bodies (observed: 73cfddf).

⚠️ Two corrections to the card's own anchors

The card verified two items in the published tarball and gave three issue numbers. The behaviours are real and both are documented here, but two of the numbers do not appear anywhere in the 17.1.0 train:

Card saidChangelog says
#9736init scaffolds declare sharingModel; scaffold-validate runs the same rule set dev reaches10bbc19, cited as #9666 (verbatim behaviour match)
#8978 — ready banner's Config: row49dba54, cited as #8978
#9347 — the Artifact: halfno #9347 in the train; 49dba54 (#8978) covers both rows, and the related OS_ARTIFACT_PATH change is 14c9ad7 (#8985)

grep '9736\|9347' over all 69 sections returns nothing. The page cites the changelog's numbers, since those are the traceable ones.

(PM review re-derived this independently on origin/main: 69 sections / 25,037 lines reproduced exactly; #9736 and #9347 return 0 hits even as bare digits, against a positive control where #8978, #8985 and #9666 each return 1; and 49dba54's body was read in full — it does cover both rows, adding the Artifact: … (OS_ARTIFACT_URL) row alongside the Config: fix.)

Release-act fence

⛔ Nothing in this PR performs a release. No changeset publish, no pnpm run release, no tag, no GitHub Release, no workflow_dispatch, and the root version script chain is untouched. The diff is two .mdx files. No evidence was found that the publish ran without a human.

Gates

node scripts/pm/dispatch-gates.mjs with no path args named 13 families; all 13 re-run green on the final commit 217de0d4:

EXIT[check:cross-package-test-inputs]=0 EXIT[spec:check:empty-state]=0
EXIT[check:doc-anchors]=0 EXIT[spec:check:liveness]=0
EXIT[check:docs-audit-scope]=0 EXIT[spec:check:strictness-ledger]=0
EXIT[check:docs-redirects]=0 EXIT[spec:check:variant-docs]=0
EXIT[check:published-readme-links]=0 EXIT[cross-package-mjs]=0
EXIT[check:release-notes]=0
EXIT[check:release-page-status]=0
EXIT[check:role-word]=0 UNION_FAIL=0 at 217de0d4

Verdict lines from the gates themselves:

  • check-release-page-status: OK — 2 GA major(s) in scope (v16, v17); each page's release-status blockquote and index entry describe a shipped release.
  • check-release-notes: OK — every released major has a curated, navigable release page.
  • check-role-word: OK, no new occurrences of the reserved word.
  • ✅ check-doc-anchors: 252 internal #fragment link(s) across 399 source file(s) all resolve to a real heading
  • ✓ release-owned pages are in scope and read-only: 9 page(s) under content/docs/releases/ review-only

Two gates went red first and drove real edits — worth recording, because both were caught by the gate rather than by review:

  1. check:release-page-status — my first blockquote said "17.1.0 is the current release", which no reader would call stale but which the end-anchored releasedAssertionRe does not match. Rewritten to **Release status: 17.1.0 is released**, and is the current version of the v17 line. This is precisely the "stale page whose wording nobody has seen before" case the gate documents itself as existing for.
  2. check:role-word — ratchet grew 2 → 3 on v17.mdx; I had written "a ledger or supervisor role" (quoting the source changeset) in the approvals bullet. ADR-0090 D3 bans new uses; rephrased to "a ledger keeper or supervisor", preserving the meaning. Re-derived: zero added occurrences.

skip-changeset: the diff is content/docs/** only and publishes nothing.

Out of scope

⛔ Item 4 of the card — mechanising a "published version has no section" check — was not built here. Filed as #10268, unassigned, with the measurement that check:release-page-status's predicate is keyed on the major, so 17.0.0 is released satisfies it while latest is 17.1.0. That is the third occurrence of the class (#8917 was the v16 one).


🤖 Generated with Claude Code

17.1.0 was published to the `latest` tag on 2026-08-20 with a 69-package
version-locked train, and the curated docs did not move with it: the v17
page's heading spine ended at the rc.6 "Landed since" blocks, its
release-status blockquote still named 17.0.0 as what `latest` carries, and
the releases index still claimed `current series: 17.0.0`.
Follows the v16 page's treatment of 16.1 — the convention already on the
page: a `## Highlights — 17.1.0` block beside the 17.0.0 one, a
`# What's new in 17.1.0` division after the 17.0.0 detail, a `### 17.1.0`
upgrade checklist, and a `**17.1.0**` references paragraph. The paired
`# 17.0.0 in detail` divider is added for the same reason v16 carries one:
without it the new H1 would leave the preceding H2s nesting under nothing.
Contents derived from the 69 package `CHANGELOG.md` sections under
`## 17.1.0` — 314 distinct entries (111 minor, 203 patch, no major) after
deduplicating the text changesets repeat across every package they bump.
Every substantive claim traces to a named entry; changes whose changelog
text could not establish what they do are left out rather than described.
Fixes#10232
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DdCnBGcHeufjrq7drTD3wt
@github-actionsgithub-actionsBot added size/l documentation Improvements or additions to documentation labels Aug 20, 2026
@claudeclaudeBot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Aug 20, 2026
@os-zhuang
os-zhuang marked this pull request as ready for review August 20, 2026 15:11
@os-zhuang
os-zhuang enabled auto-merge August 20, 2026 15:12
@os-zhuang
os-zhuang added this pull request to the merge queueAug 20, 2026
Merged via the queue into main with commit fdde7b2Aug 20, 2026
27 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-10232-release-notes-17-1-0 branch August 20, 2026 15:47
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/lskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[finding] 17.1.0 published on 2026-08-20 with a 69-package train and no release notes — the v17 page and the releases index both still end at 17.0.0

2 participants

@os-zhuang@claude