Uh oh!
There was an error while loading. Please reload this page.
docs: spell the console form routes with the real /_console mount - #9079
Merged
os-project-manager merged 1 commit intoAug 16, 2026
Merged
Conversation
The internal form-action mount was documented as `/console/forms/:name` (14 occurrences) and the public form page as `/console/f/:slug` (6 occurrences). Neither path resolves: the Console SPA is mounted by a single hardcoded constant, CONSOLE_PATH = '/_console' (packages/cli/src/utils/console.ts:43), which registers only `/`, `/_console` and `/_console/*` — nothing serves a bare `/console`. The SPA's own routes (`/forms/:name`, `/f/:slug`) hang off that mount's injected base href, so the live URLs are `/_console/forms/:name` and `/_console/f/:slug`. Documentation only — no route, code or config is changed. The same wrong spelling in packages/spec's describe/comment strings is filed separately rather than fixed here. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011RB4waLuNbdruCo6X9oobm
os-project-manager
marked this pull request as ready for review
August 16, 2026 08:43
Uh oh!
There was an error while loading. Please reload this page.
os-project-manager
deleted the
claude/issue-9050-console-mount-spelling
branch
August 16, 2026 11:09
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes#9050
Documentation only. No route, code or config is changed.
The fork: this was a CORRECTION, not a convention choice
The card framed the canonical spelling as an open decision, and the dispatch split on it: if
/console/forms/:namedoes not resolve, the 14 sites are simply wrong; if both spellings resolve, it is a real convention choice and I must stop rather than pick. It does not resolve, so this is a correction.What I read to decide — the route mounting, not the URL string:
packages/cli/src/utils/console.ts:43—export const CONSOLE_PATH = '/_console'. A hardcoded constant; nothing configurable feeds it.:534-541— the only three registrations:/redirects to/_console/; bare/_consoleredirects to/_console/;/_console/*serves the SPA. Nothing registers a bare/console, and there is no catch-all that would reach one.:516— the mount injects a base-href tag pinned to/_console/, from which React Router derives its basename.apps/console/src/App.tsx:225—path="/forms/:name"is a route inside that SPA, so it hangs off the basename above ⇒ live URL/_console/forms/:name. This matches the browser measurement recorded during Atype: 'form'action leaves the console shell for a bare/forms/:namepage and ends on a generic "Thanks!" panel instead of the created record (observation) #7245's triage.The one configurable knob is
uiBasePath(default/_console,packages/spec/src/system/auth-config.zod.ts:302). It is not an outer-prefix switch: its only consumers are inplugin-auth, which uses it to build links into the Console's auth pages (auth-manager.ts:3622-3632). It cannot make a bare/consolerequest resolve, so the "both spellings resolve" branch of the fork is closed on evidence rather than assumption.Checked and explicitly not a spelling ruling: the
ruled 2026-08-10 on #7245line quoted inview.zod.ts:2446pins the mode-awaresubmitBehaviordefault. The paths in that comment are incidental prose, so nothing here contradicts a landed ruling.Re-derived enumeration
The card's count was measured at filing time, so I re-ran its own command on this branch's base (
2cb69c31c) rather than trusting it:14 — exactly the card's number. No drift across today's merges (#9033 / #9051 / #9052 / #9056). All 14 are swept here; none legitimately needs the other spelling.
One extension beyond the card's 14, named deliberately
The card measured
/console/forms/only. The sibling public form path is documented as/console/f/:slug— 6 further occurrences in the same two files — and it is the identical defect: same missing underscore, same SPA, pinned by the same route table (apps/console/src/App.tsx:180,path="/f/:slug").I swept those 6 as well, because leaving them is precisely the failure the card exists to prevent. They are not in some distant file — they are interleaved with the lines being fixed:
forms.mdx:12(public) sits directly above:13(internal), two rows of one table;forms.mdx:314carries both spellings in a single sentence;actions.mdx:170carries both in one table row.Fixing only the internal path would have left one sentence reading "
/console/f/:slug(public) and/_console/forms/:name(internal)", which is strictly more confusing than the state before this PR.Total: 20 occurrences (14 internal + 6 public) across 3 files.
Verified as a false positive, deliberately untouched
forms.mdx:454matches a naive/console/grep, but only as the prose fragmentStudio/console/native shells— a list of shell names, not a path. It is unchanged.Scope boundaries respected
packages/spec/src/ui/view.zod.ts(:2446,:2449) andaction.zod.ts(:500) carry the same wrong spelling in JSDoc comments. Those are code and out of scope for this documentation-only card, so they are filed as #9078, not edited here. (They are comments, not.describe()strings, and no generated reference page carries the text today, so nothing published depends on them.)Verification
Gate families derived from the final diff, not recalled —
node scripts/pm/dispatch-gates.mjs content/docs/ui/forms.mdx content/docs/protocol/objectui/actions.mdx skills/objectstack-ui/SKILL.mdreturned three:check:docs-audit-scope,check:docs-redirects,check:role-word. I added three the derivation did not name but the diff visibly implicates:check:nul-bytes(any edit),check:doc-authoring, andcheck:doc-anchors— the last because this diff renames a heading,## 6. Internal forms (...), which changes its anchor slug.All six run at the final commit
c7b75b292, all green:The renamed heading is safe on two independent readings:
check:doc-anchorsresolves all 239 fragment links, and a direct search for inbound links to that heading (internal-forms) finds none anywhere incontent/docs,skillsorpackages.Check Documentation Linkscovers page-path links rather than#fragmentanchors, so it does not overlap with the gate above — but it is unaffected here regardless:grep -noE '\]\([^)]*console[^)]*\)'over all three changed files returns nothing, i.e. this diff touches no markdown link target. Every one of the 20 edits sits inside backticks or a fenced code block.Also scanned beyond the gate for control bytes, since paths and escapes are being edited:
grep -naP '[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]'over the three files is clean.No changeset: this PR changes only
content/docs/**andskills/**and publishes no package, so it releases nothing —skip-changesetapplied.Merge posture
⛔ This PR touches
skills/objectstack-ui/SKILL.md, an AI-no-merge path (#7623 / #7548). It is deliberately a draft, is not queued, and has no auto-merge. It waits for a human reviewer.Generated by Claude Code