Skip to content

docs: rewrite the four authored-prose lines that still said "Console" - #106

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-101-authored-prose-in-fences
Aug 18, 2026
Merged

os-zhuang merged 1 commit into
mainfrom
claude/issue-101-authored-prose-in-fences

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

Fixes #101

Verified at commit 5c14215.

What changed

Four lines, all of them content an author wrote that a code fence happens to render in a monospace box.

File:line What it was What it is
build/marketplace.mdx:46 You ─→ Console ─→ Marketplace tab … You ─→ ObjectOS ─→ Marketplace tab …
build/marketplace.mdx:50 Console re-renders with new The page re-renders with new
reference/field-types.mdx:225 ├─► Console: form widget + list column ├─► UI: form widget + list column
reference/cli.mdx:38 # API only (no Console/Account) # API only (no UI/Account portals)

Untouched, as ruled: every /_console/ URL in the corpus (the diff contains no line matching _console), and the command os start --no-ui itself, which is copy-run and is byte-identical — only the comment after the hash changes. The five in-fence occurrences in quickstart.mdx are #94's and are not touched here.

The check that is the deliverable: what a reader now sees

The defect was visible on one screen in reference/cli.mdx — a fenced comment and a flag table three screens apart, naming the same flag two different ways. I read the prerendered HTML from the production build (apps/docs/.next/server/app/en/docs/…), not the source, for all three pages.

Rendered reference/cli.mdx, the fenced block:

os start --home /var/lib/objectos      # persistent home dir
os start --no-ui                       # API only (no UI/Account portals)

and the flag table row on the same rendered page: --no-ui → "Disable the UI and Account portals". One vocabulary, both places.

Sweeping the rendered text of all three English pages for the surface nouns:

Rendered page Surface vocabulary present
build/marketplace ObjectOS, Setup, UI
reference/field-types ObjectOS, UI, the UI
reference/cli ObjectOS, the UI, the UI enabled

Console appears zero times in the rendered English text of all three. No fourth or fifth spelling was introduced — those are the three names #79 landed (ObjectOS for a destination, the UI / UI for the capability and the stack layer, Setup for administration).

Why these words and not others

Checked against what #79 actually landed rather than pattern-matched:

Diagram alignment, measured in display columns

Counted as display columns, not bytes — the box-drawing characters are multi-byte (the field-types branch lines are 41 code points but 47 bytes), so a byte count would have misled. Measured on the rendered output:

marketplace flow diagram — the three ↓ stay in column 50 and the four text-block lines stay at indent 39. The node line grows one column (56 → 57), which moves Install from column 49 to 50, so the arrow spine now descends from its first character instead of its second. The one invariant that could have broken is the spine, and it did not move.

field-types diagram — every branch stays at indent 3; the block is ragged right with nothing aligned to the right edge, so shortening Console: to UI: changes no relationship.

cli.mdx — the comment hash stays in column 39; only the text after it changed.

Verification

All at 5c14215, after the final commit.

  • turbo run type-check build --filter=@objectos/docs --force — both cache bypass, force executing (6cdd55539dc94ec8, cc2e9329a2da2066), Tasks: 2 successful, 2 total, 0 cached.
  • check-translations.mjs — ✓ translations gate passed.
  • check-translation-ownership.mjs — 0 translation artifacts, 3 other files (TRANSLATION_BOT_LOGIN unset, so reporting).
  • check-translation-output.mjs --self-test — 20 case(s) … every rule demonstrated able to fail, then --files as CI runs it on a PR: blocking on 0 changed translation(s), exit 0.

Locale staleness this introduces, measured against origin/main in a second worktree rather than assumed: 6 new fence findings (marketplace.zh-Hans, field-types.{de,es,fr,ja,ko}) and one shifted (marketplace.zh-Hans #4 → #2). All are non-blocking — the gate's PR scope is changed locale files, and this PR changes none. This is the designed outcome of AGENTS.md's translation split; the next translation pass clears them.


Generated by Claude Code

#79 retired "Console" as the name of the end-user surface but held every
in-fence occurrence byte-identical, on the rationale that fences hold
terminal output a reader compares against their own. Nine occurrences
survived under that rule. Five of them are genuine output (the os start
banners in quickstart.mdx). The other four are authored content that a
fence happens to render in a monospace box, so the rationale never
reached them:

- build/marketplace.mdx:46,50 - two lines of an ASCII flow diagram
- reference/field-types.mdx:225 - a branch label in the "how fields
  flow" diagram
- reference/cli.mdx:38 - a comment inside a bash example

cli.mdx is where the cost showed on one screen: the fenced comment read
"API only (no Console/Account)" while the flag table below it read
"Disable the UI and Account portals" - two vocabularies for one flag,
with no way for a reader to tell which is current.

The replacements use the vocabulary #79 actually landed, not a new one:
ObjectOS where a destination needs a name (the sentence directly above
the marketplace diagram already reads "When you open ObjectOS"), UI as a
stack-layer label beside REST and Audit, and a noun-drop rewrite for the
re-render step, matching step 5 of the same page's install flow
("Reload the page"). "ObjectOS re-renders" was rejected there because
the diagram ends with "Done - no restart" and would invite the reader to
read a re-render as a restart.

Untouched, as ruled: every /_console URL, and the command os start
--no-ui itself, which is copy-run and stays byte-identical - only the
comment after the hash changes.

Diagram geometry verified in display columns, not bytes. In the
marketplace diagram the three arrows stay in column 50 and the four
text-block lines stay at indent 39; the one-column growth of the node
line moves "Install" from column 49 to 50, so the arrow spine now
descends from its first character instead of its second.

English only. Locale siblings are left alone and report stale, per
AGENTS.md; the blocking scope of the output gate is changed locale
files, of which this PR has none.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CJPxtTxoxTUnjNdTbiEaRa
@os-zhuang
os-zhuang marked this pull request as ready for review August 18, 2026 14:47
@os-zhuang
os-zhuang merged commit 4204d5e into main Aug 18, 2026
2 checks passed
os-project-manager added a commit that referenced this pull request Sep 4, 2026
…64 MiB limit

`Deploy Docs` has been rejected by the Cloudflare API on every run since
#106 (2026-08-25T21:05Z) with `code: 10027` — the Worker exceeds the 64 MiB
uncompressed limit. Version creation fails, so no new Worker version exists
and the previously accepted one keeps being served: nothing 500s, the site
just stops changing.

The bytes were not the corpus. All 397 `.mdx` files are 2.50 MiB of source;
`handler.mjs` measured 100.93 MiB locally on 94a4126. The multiplier was the
bundling. `fumadocs-mdx:collections/server` imports every page eagerly, so
each server entrypoint that touches `source` — the docs page, and also
`/llms.txt`, `/llms-full.txt`, `/llms.mdx/*`, `/og/*`, `/api/search` and
`/sitemap.xml` — pulled the whole corpus into its own chunk, and the bundler
inlined the set five times over.

Measured on one probe sentence that occurs once, in one English page:
15 copies in `handler.mjs` before, 6 after. `async: true` on the docs
collection makes each page's compiled body a dynamic import, so Turbopack
emits per-page chunks (27 chunk files before, 971 after) instead of one
corpus-sized chunk per entrypoint.

  handler.mjs  100.93 MiB -> 48.47 MiB   (-52.0%)

The only consumer this changes is the docs page, which now awaits
`page.data.load()` for `body` and `toc`. Frontmatter stays eager, so
`title`, `description`, `seoTitle` and `full` are untouched, and
`getText('processed')` — what the llms.txt routes call — remains a method on
the entry, so the generated `llms` bodies are byte-identical.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GkauAsZBEemRbco2rEX9Lx
os-bill pushed a commit that referenced this pull request Sep 8, 2026
Nothing in this repository weighed the Worker. The only thing that checked
it was the Cloudflare API, at upload time, on `main`, after merge — and the
rejection lands on version creation, so nothing 500s, no page changes, and
the site silently stops moving. That is how this repo ran 35 consecutive red
deploys (runs #106-#140) with the `build` job green for every one of them.

The `build` job already packaged the Worker with `--skipNextBuild`, but only
on a push to `main`, so a pull request never packaged one and could never be
told its Worker was too big. That condition is dropped; the artifact upload
stays `main`-only underneath the new gate.

The gate reads wrangler's own `Total Upload:` line via `wrangler deploy
--dry-run` — the same accounting a real deploy prints, no API call and no
credentials — rather than stat-ing files, which would re-derive which files
count. Budget 61440 KiB (60 MiB), declared once with the 65536 KiB limit
beside it; every percentage is computed, never typed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ChPQM8jamxLUfUAxwFpJ8S
os-bill added a commit that referenced this pull request Sep 8, 2026
)

Nothing in this repository weighed the Worker. The only thing that checked
it was the Cloudflare API, at upload time, on `main`, after merge — and the
rejection lands on version creation, so nothing 500s, no page changes, and
the site silently stops moving. That is how this repo ran 35 consecutive red
deploys (runs #106-#140) with the `build` job green for every one of them.

The `build` job already packaged the Worker with `--skipNextBuild`, but only
on a push to `main`, so a pull request never packaged one and could never be
told its Worker was too big. That condition is dropped; the artifact upload
stays `main`-only underneath the new gate.

The gate reads wrangler's own `Total Upload:` line via `wrangler deploy
--dry-run` — the same accounting a real deploy prints, no API call and no
credentials — rather than stat-ing files, which would re-derive which files
count. Budget 61440 KiB (60 MiB), declared once with the 65536 KiB limit
beside it; every percentage is computed, never typed.


Claude-Session: https://claude.ai/code/session_01ChPQM8jamxLUfUAxwFpJ8S

Co-authored-by: Claude <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.

Four code-fence lines still say "Console" but are authored prose, not product output

2 participants