Skip to content

Re-quote studio serve, and split §6 so the flip does not promise a pip install - #115

Merged
djankov merged 2 commits into
mainfrom
docs-requote-studio-serve
Aug 17, 2026
Merged

Re-quote studio serve, and split §6 so the flip does not promise a pip install#115
djankov merged 2 commits into
mainfrom
docs-requote-studio-serve

Conversation

@djankov

@djankov djankov commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

Summary

The other half of astro-mine-cli#38 (merged as astro-mine-cli#39). Two guide pages quote astro-mine studio serve's output and carried notes flagging it as stale; merging the CLI fix inverted them, so they were stale in the other direction until this lands.

  • guide/reference/cli.md — quotes the new output verbatim, including $ echo $?1, and the surrounding prose now makes the point the example exists to make.
  • guide/tutorials/07 — no longer says the tutorial is blocked, because it isn't; drops the RM-DIST-03 reference and the status-ok marker.

What the reference page now says

The old text explained the message by listing what was wrong with its predecessors. The new text explains the rule instead — cli.md §9: a degraded verb owes you what is missing and how to get it, and naming the distribution is not enough on its own.

That framing earns its keep because this message has failed the rule twice, in different ways, and both are why the current wording looks as it does:

  1. it once ended with pip install astro-mine-studio[serve], a distribution the consolidation retired — an install hint that resolves to nothing is worse than none, because pip's "no matching distribution" reads as a broken environment rather than a stale message;
  2. it then said the surface did not exist yet, which stopped being true when astro-mine-api shipped — while "there is nothing to install" stayed true for a different reason, so the false half rode along under a true conclusion.

The tutorial was not "blocked", and that mattered

It said "This tutorial is blocked today" and that the unblock "comes back with RM-DIST-03". RM-DIST-03 closed on 2026-08-08. Telling a reader their unblock is arriving in a finished roadmap item is precisely the defect astro-mine-cli#38 fixed, restated one page over — so it goes rather than getting a fresher number.

The gate did not catch this, and could not

Worth stating plainly, since docs#114 landed the gate three commits ago: both quotes sit in fenced blocks, which scripts/check_docs.py exempts on purpose. That exemption is correct — documentation must be able to quote a program faithfully rather than being forced to misquote it to satisfy a linter — but it means verbatim output stays correct only as long as someone re-quotes it when the program changes. That is a job for whoever changes the program, not for the linter.

So I checked it the only way that actually works, mechanically rather than by eye:

cli.md   : MATCH
tutorial : MATCH

Both blocks compared line-by-line against the command's real stderr, captured from astro-mine-cli at merged main (4b6a6ca).

Test plan

  • python3 scripts/check_docs.pyclean, 69 files, 4 checks
  • python3 -m unittest discover -s scripts -t scripts37 passed
  • Both quoted blocks byte-compared against real stderr (above)
  • Swept guide/ and architecture/ for residual not stood up / RM-DIST-03 / status-ok — the only remaining RM-DIST-03 is api.md:128, which correctly says the item "is now met in full"

One thing I found and did not touch

guide/tutorials/07 opens by telling the reader to run cd ui && pnpm install && pnpm run build:harness. That ui/ tree no longer exists — the per-component ui/ trees were deleted with their repositories in RM-DIST-05, and the front end was rebuilt as astro-mine-ui. So the tutorial's build step points at nothing, independent of anything in this PR.

That is a larger correction than re-quoting an error message and it needs a decision about what the tutorial should now say, so I have left it alone rather than fold it in. Happy to file it.


Added: split VERSIONING.md §6 (second commit)

Folded in because it is pre-flip and the flip is imminent. §6 bundled "repositories become public" with "publish the wheels to a public index" and "publish @astro-mine/* to npm" under one heading, and opened with "per current intent, no earlier than the end of Phase 2".

That is a normative document forbidding what we are about to do — and the flip is precisely the act that publishes the sentence.

  • 6.1 Repository visibility — what the flip does, and the three things it unlocks: secret scanning and push protection (which the API refuses outright while private — not deferred by choice), free Actions minutes, and the external half of M1.2.
  • 6.2 Distribution publication — what the flip does not do. Wheels, npm and full GitHub Releases are separate decisions with their own preconditions, and this document no longer schedules them.
  • 6.3 — the artifact-name migration was listed as "deliberately gated here". Its own reasoning (a re-publish is cheaper while no outside consumer holds the old names) is why it ran before the flip. Recorded as done.

Timing clause retired. The flip is not gated on a phase boundary, on Actions, or on publishing anything. The one hard precondition was the full-history secret scan — now complete and clean (.github#9: gitleaks over 205 commits across every ref in all seven repos, one finding, a false positive).

Five downstream claims contradicted the rewrite

Corrected in the same commit, because leaving them is the defect this wave exists to close:

File Was
architecture/ui.md npm publication "gated on the public flip"
roadmap/README.md PyPI/npm "(the public flip)" and the migration still listed as deferred
guide/getting-started.md "Until the public flip you install from source"
guide/tutorials/01 same promise, in the first tutorial a reader meets
guide/reference/personas.md "packages are private until the public flip"

The last three matter most: they promise a reader that the flip delivers a pip install, which it will not.

The gate would not have caught any of this, and that is worth stating on the PR that follows the one which added it. These are semantic contradictions between documents — the class docs#112 explicitly named as the harder one and did not build a check for. python3 scripts/check_docs.py is clean and its 37 tests pass, which is necessary and not sufficient.

astro-mine-cli#38 corrected what `astro-mine studio serve` prints, and two
guide pages quote that output. Both carried notes saying the quote was stale
and pointing at the issue; merging the fix inverted them, so they are stale in
the other direction until this lands.

`guide/reference/cli.md` quotes the new output verbatim, including the exit
status, and the surrounding prose now makes the point the example exists to
make: a degraded verb owes you what is missing **and how to get it**, and
naming the distribution is not enough on its own. The message failed that test
twice in different ways -- an install hint that resolved to nothing
(astro-mine-cli#19), then a true conclusion sitting on a false premise -- and
both are worth keeping as the reason the current wording looks the way it does.

`guide/tutorials/07` no longer says the tutorial is blocked. It is not: the
surface exists and the last line of the message is a route in rather than a
dead end. The `RM-DIST-03` reference goes with it -- the item closed on
2026-08-08, and telling a reader their unblock is coming in a finished roadmap
item is the defect astro-mine-cli#38 fixed, restated. The `status-ok` marker
comes out too; nothing on the page needs excusing now.

Note for the record that the docs gate did **not** catch this, and could not:
both quotes live in fenced blocks, which `scripts/check_docs.py` exempts on
purpose so documentation can quote a program faithfully instead of being
forced to misquote it. Verbatim output is only correct while it is verbatim,
and keeping it so is a job for whoever changes the program. Both blocks were
compared byte-for-byte against the command's real stderr before committing.
`VERSIONING.md` §6 bundled "repositories become public" with "publish the
wheels to a public index" and "publish @astro-mine/* to npm" under one
heading, and opened with "per current intent, no earlier than the end of Phase
2". Three problems, and the flip is the act that would have published all
three.

**The conflation.** Making the source public does not oblige us to publish
distributions, and nothing prepares Trusted Publishing or npm releases. A
reader landing on §6 the day after the flip would reasonably conclude both had
happened. §6 now separates 6.1 visibility -- what the flip does, and what it
unlocks: secret scanning and push protection (which the API refuses outright
while private, not deferred by choice), free Actions minutes, and the external
half of M1.2 -- from 6.2 publication, which the flip does not trigger and this
document does not schedule.

**The timing clause.** Retired. The flip is not gated on a phase boundary, on
Actions capacity, or on publishing anything. The one hard precondition is the
full-history secret scan, because the flip publishes every commit at once and
a secret found afterwards is a disclosure rather than a rotation.

**The stale bullet.** §6 listed the artifact-name migration as "deliberately
gated here". Its reasoning -- a re-publish is cheaper while no outside
consumer holds the old names -- is exactly why the migration ran *before* the
flip rather than at it. That is now §6.3, recorded as done rather than
pending, since the rule is enforced at `HubClient.publish` and there is
nothing left to gate.

Five downstream claims contradicted the rewritten section and are corrected
with it, because leaving them is the defect this wave exists to close:
`ui.md` and `roadmap/README.md` both had npm/PyPI publication "gated on the
public flip"; `roadmap/README.md` also still listed the migration as deferred;
`getting-started.md` and tutorial 01 told a reader to install from source
"until the public flip", which promises something the flip will not deliver;
and `personas.md` said the console's packages are private until the flip.

The gate is clean and its 37 tests pass. It would not have caught any of
this -- these are semantic contradictions between documents, not broken links
or status-vocabulary violations, which is the class docs#112 flagged as the
harder one and did not build a check for.
@djankov djankov changed the title Re-quote studio serve now that its message tells you how to run it Re-quote studio serve, and split §6 so the flip does not promise a pip install Aug 17, 2026
@djankov
djankov merged commit 950dfdd into main Aug 17, 2026
1 check failed
@djankov
djankov deleted the docs-requote-studio-serve branch August 17, 2026 23:53
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