Skip to content

docs: the release status said the opposite of the registry, in ten files - #159

Merged
sebyx07 merged 1 commit into
mainfrom
docs/release-status-truth
Aug 19, 2026
Merged

sebyx07 merged 1 commit into
mainfrom
docs/release-status-truth

Conversation

@sebyx07

@sebyx07 sebyx07 commented Aug 19, 2026 •

Copy link
Copy Markdown
Contributor

Every load-bearing claim about publication was stale, across ten files — and one was stale in a way that hid a live gap. bun run verify green.

What the docs said vs what the registry answers

Measured with npm view, git ls-remote --tags origin, and bun run scripts/release-workflow.ts --json:

Documented Actual, 2026-08-19
"the tag and the publish are not done" v2.0.0 is tagged and pushed
"nothing at 2.0.0 is on npm, latest is still 1.2.0" npm's latest is 2.0.0
"bunx create-ultimate myapp installs 1.2.0" it installs 2.0.0
"@ultimat3/flags has never reached npm at any version" (#84) flags is on npm — and 2.0.0 is its only version, so the one-time bootstrap happened exactly at 2.0.0
"29 workspaces publish; 28 are on the registry" 30 publishable, 29 on the registry

The gap this was hiding

@ultimat3/scraping is 404. It landed in #140, after the 2.0.0 publish, so it is now exactly the hole flags used to be — tier 5, same publishConfig, in the derived publish list, never bootstrapped.

It is 27th of 30 in the derived publish order, so the next release run reaches it and aborts with 26 packages already published irreversibly. Every document was still warning about flags while the registry had moved on. Two releases running, invisible.

Two more claims that were false

PUBLISHING.md said all four human steps were done at 2.0.0. Steps 3 and 4 are not — bun run scripts/trust-publishers.ts --check answers 0/30 packages trust developerz-ai/ultimate/release.yml, every one reporting X_TRUST_PUBLISHER_MISSING.

And that is why 2.0.0 has no provenance. With no trusted publisher attached, the OIDC exchange has nothing to verify against, so the workflow cannot publish — and 2.0.0 went out by hand instead:

Version dist.attestations _npmUser
1.1.0 ✅ GitHub Actions
1.2.0 ✅ GitHub Actions
2.0.0 ❌ sebyx07

CLAUDE.md, README.md and llms.txt all said or implied that releases go over OIDC with provenance, without recording that the most recent one did not. Each now names the exception and points at the command that answers it, so the next reader checks the state rather than the sentence.

Files

CLAUDE.md, PUBLISHING.md, README.md, llms.txt, docs/idea/README.md, and wiki/{Home,FAQ,Getting-Started,Upgrading,Known-Gaps,Migrations-And-Backfills,Deployment,_Footer}.md.

llms.txt matters disproportionately: it is the machine-readable repo map and the first thing an agent reads, and it carried all four stale claims in one sentence.

docs/plans/** is deliberately untouched — those are historical audit records, a true statement of what was known then. The one surviving flags-was-never-published sentence is in CHANGELOG.md, describing the release where that was true.

One doc bug found on the way

Unrelated to the release: wiki/Deployment.md:190 said "no role declares a metrics container port and the chart ships no scrape target." Both false — values.yaml:17 declares metricsPort: 9090, _helpers.tpl:75-76 emits the containerPort, service.yaml:35-37 publishes it by name, and servicemonitor.yaml exists. It directly contradicted wiki/Known-Gaps.md:15, which was right. Corrected, including the "do not hand-add a duplicate port" warning.

Also reconciled: a _Footer.md count that said 40 where the line above it said 46, and a PUBLISHING.md LICENSE count of 29 (re-derived: 30).

Filed rather than fixed

Not verified, left alone

PUBLISHING.md:276 cites "393 files" swept into tarballs. That does not re-derive today (find packages/*/src -name '*.test.ts' is 855), and the tarball sizes beside it cannot be re-measured without publishing. It is out of this PR's scope and guessing a replacement would be the same failure this PR is fixing.

🤖 Generated with Claude Code


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.

Every load-bearing claim about publication was stale, and one was stale in a way
that hid a live gap.

What the docs said, and what `npm view` / `git ls-remote` / the release script
actually answer:

- "the tag and the publish are not done" -> v2.0.0 is tagged AND pushed
- "nothing at 2.0.0 is on npm, latest is still 1.2.0" -> npm's latest IS 2.0.0
- "bunx create-ultimate installs 1.2.0" -> it installs 2.0.0
- "@ultimat3/flags has never reached npm at any version (#84)" -> flags IS on npm,
  and 2.0.0 is its ONLY version, so the bootstrap happened exactly at 2.0.0
- "29 workspaces publish; 28 are on the registry" -> 30 publishable, 29 on it

The hidden gap: @ultimat3/scraping is 404. It landed after the 2.0.0 run, so it is
now exactly the hole flags used to be — same publishConfig, in the derived publish
list, never bootstrapped. It is 27th of 30, so the next release run reaches it and
aborts with 26 packages already published irreversibly. Every document was still
warning about flags while the registry had moved on. Two releases, invisible.

Two more claims were false and are corrected here rather than repeated:

PUBLISHING.md said all four human steps were done at 2.0.0. Steps 3 and 4 are not:
`trust-publishers.ts --check` answers 0 of 30 packages trust the workflow. And that
is WHY 2.0.0 has no provenance — with no trusted publisher attached the OIDC
exchange has nothing to verify against, so the workflow cannot publish and 2.0.0
went out by hand: `_npmUser: sebyx07`, no dist.attestations, where 1.1.0 and 1.2.0
carry both. CLAUDE.md, README.md and llms.txt all implied otherwise.

llms.txt is the machine-readable repo map and the first thing an agent reads; it
carried all four stale claims in one sentence.

One doc bug found on the way, unrelated to the release: wiki/Deployment.md said no
role declares a metrics container port and the chart ships no scrape target. Both
are false — values.yaml declares metricsPort, _helpers.tpl emits the containerPort,
service.yaml publishes it and servicemonitor.yaml exists. It contradicted
wiki/Known-Gaps.md, which was right.

Filed rather than fixed: nothing compares the documented publish state to the
registry (#155), which is exactly why this drifted; and @ultimat3/scraping ships 40
source files and 24 error codes with no wiki page (#156).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Aug 19, 2026

Copy link
Copy Markdown

Warning

Review limit reached

You’ve reached a temporary PR review limit under our Fair Usage Limits Policy.

Your current included review allowance is based on your included PR review attempts over the past 7 days.

Next review available in: 21 minutes

Limit details: You’ve used the included review currently available. Your 71 included PR review attempts over the past 7 days set your current allowance at 1 review per hour.

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits within each organization.

For paid Pro and Pro+ reviews, CodeRabbit uses a developer's included PR review attempts over the past 7 days to set the current hourly allowance. At typical activity levels, the full plan allowance applies. Higher sustained activity can lower the allowance until earlier attempts leave the 7-day window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yml

Review profile: ASSERTIVE

Plan: Pro

Run ID: b02a3681-b471-46b8-9e56-2e60610dc1d1

📥 Commits

Reviewing files that changed from the base of the PR and between be9125d and d9d2004.

📒 Files selected for processing (13)
  • CLAUDE.md
  • PUBLISHING.md
  • README.md
  • docs/idea/README.md
  • llms.txt
  • wiki/Deployment.md
  • wiki/FAQ.md
  • wiki/Getting-Started.md
  • wiki/Home.md
  • wiki/Known-Gaps.md
  • wiki/Migrations-And-Backfills.md
  • wiki/Upgrading.md
  • wiki/_Footer.md

Comment @coderabbitai help to get the list of available commands.

@developerz-ai

developerz-ai Bot commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

This doc-only PR corrects the release status across ten files — 2.0.0 is published, the never-published package is now @ultimat3/scraping, and the trusted-publisher state is documented. CI is green, no risk signals, and the contributor has history. Ready for maintainer merge.

🤖 Posted by developerz.ai — the maintainer agent, not a human.

@sebyx07
sebyx07 merged commit 700509d into main Aug 19, 2026
5 checks passed
@sebyx07
sebyx07 deleted the docs/release-status-truth branch August 19, 2026 03:46
sebyx07 added a commit that referenced this pull request Aug 19, 2026
…n it (#160)

* release: 3.0.0 — and the first release with a trusted publisher to run it

All 30 workspaces move to 3.0.0 in lockstep: one version, one commit, one tag.

A major because a five-agent bug sweep landed breaking changes to documented
APIs — ten entries marked BREAKING, each naming the manual edit it costs.
mfa.required is refused at boot and narrowed to the literal false; enrolTotp
takes the auth it reads its issuer from; appErrorStatus is gone; sweepIdle
became idle(); lastSeenAt became lastSeenMonotonicMs because it now holds a
monotonic reading; two SQL_OUTBOX_* constants each gained the claimant they must
be fenced on; DESCRIPTION_MIN_LENGTH is deleted rather than left unenforced.

Two release-infrastructure holes closed in the same commit, both of which the
docs asserted were already closed:

@ultimat3/scraping had never been published at any version. It landed after the
2.0.0 run, so no run had ever seen it, and it sat 27th of 30 in the derived
publish order — the next release would have died there with 26 packages already
on the registry irreversibly. Bootstrapped by hand at 2.0.0.

And NO package had an OIDC trusted publisher attached. That is why 2.0.0 has no
provenance: with nothing for the exchange to verify against, the workflow could
not publish and 2.0.0 went out by hand (_npmUser: sebyx07, no attestations,
where 1.1.0 and 1.2.0 carry both). All 30 are attached now, so 3.0.0 is the
first release since 1.2.0 that can run through the workflow.

The docs said the opposite of the registry in ten files and are corrected here
and in #159 — including PUBLISHING.md, which contradicted itself in one file
after a partial update, and told the reader to pass a --otp flag the script does
not parse. Two traps are now written down where an operator will hit them: npm
trust list itself needs an OTP, so a --check without one reports every package
missing and a 0/30 means nothing; and one OTP cannot cover 30 packages, because
npm rate-limits verification.

Closes #84.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* docs: say the release can publish, not that it did

Review round on #160. Four applied, one declined.

The important one: CHANGELOG and PUBLISHING both wrote 3.0.0 as though the
workflow had already run it. It has not — the tag and the publish follow this
commit, and the npm-publish environment holds the job for a reviewer. Both now
say the release CAN go through the workflow, and point at
`npm view @ultimat3/core@3.0.0 dist.attestations` for whether it did. Writing a
completed event before it completes is how this doc set drifted in the first place.

The .npmrc guidance was also wrong in a way worth correcting rather than
softening. It said NODE_AUTH_TOKEN cannot reach npm publish and implied writing a
literal token into a file. What is true: npm reads the credential from an .npmrc,
and the safe form points that file at the environment —
`//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}`, interpolated at read time —
so the secret never lands on disk. Documenting a literal token was a credential
leak waiting for a `git add`.

And two "read it yourself" commands proved one package where the claim was about
thirty: the registry row now says to walk the derived list, and the trusted-publisher
row names the all-package check with its OTP requirement.

Declined: making X_NOT_IMPLEMENTED's fix an "exact runnable shell command". It is a
config-file edit — the row already names the exact key, file and value, and notes
it is already the default. A fabricated shell command would be less true, and
axiom 4 asks for an instruction that works, not one shaped like a command.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant