Skip to content

fix(cli): restore Serve UI labels, unify sidebar i18n, correct capabilities transport#78

Merged
ABB65 merged 1 commit into
mainfrom
fix/serve-ui-july-alignment
Jul 13, 2026
Merged

fix(cli): restore Serve UI labels, unify sidebar i18n, correct capabilities transport#78
ABB65 merged 1 commit into
mainfrom
fix/serve-ui-july-alignment

Conversation

@ABB65

@ABB65 ABB65 commented Jul 13, 2026

Copy link
Copy Markdown
Member

Summary

The Serve UI (contentrain serve dashboard) is the one layer untouched since March. Two sidebar labels (Doctor, Format) render blank in the shipped UI; this brings the layer in line with July while respecting its product philosophy (read-only dashboard, agent-delegated mutations, media = Studio-only).

The blank labels — root cause (deeper than it looks)

PrimarySidebar reads labels from a dictionary('serve-ui-texts') via the committed #contentrain client. That client was last generated in March and drifted 40 keys behind the source dictionary — the two nav labels are just the visible tip:

Namespace Missing keys Symptom
doctor.* 21 entire Doctor page copy blank
branch-detail.* 7 merge-preview strings blank
format.* 4 Format page strings blank
layout.* / common.* 6 misc
primary-nav.* 2 the visible Doctor/Format nav labels

Because the client is committed and Vite bundles it into dist/serve-ui (shipped in the contentrain npm package), the blank labels reach released users, not just local dev.

Fixes (scope: items 1–3 from the analysis; media browser deliberately excluded)

  1. Regenerate the #contentrain client. Restores all 40 keys. The same client also mirrors the repo docs/ content via content_path, so the regen re-syncs the docs/marketing data files too — now current with this session's docs edits (24-tool / media surface). 32 of the 33 changed files are this regenerated artifact.
  2. Unify the sidebar i18n. PrimarySidebar was half-migrated: 6 items hardcoded English, 2 via a primary-nav.* namespace that wasn't even in the built bundle. All 8 now use the single complete primary-sidebar.* namespace (matching MobileNav); source keys moved from primary-nav.*primary-sidebar.doctor/format.
  3. Correct /api/capabilities transport. Reported transport: "stdio" in Web-UI mode; the dashboard is reached over HTTP (MCP engine embedded in-process). Badge now reads local · http. stdio stays correct only for serve --stdio, which doesn't serve this UI. (No capability gating added — serve is always a full-capability LocalProvider, so there's nothing to gate.)

Coverage check vs July (per product philosophy)

Verified and deliberately left as-is: read-only + agent-delegated mutation model intact; media stays Studio-only (LocalProvider exposes no media facet → media tools never register → no media UI, by design — item 4 excluded per request); no stale tool-count/feature copy in the dictionary. The backend covers 9 of 24 MCP tools by REST and reimplements branch ops with direct git helpers — an intentional boundary, unchanged here.

Verification

  • serve-ui build (vue-tsc --noEmit && vite build) passes; regenerated bundle confirmed to contain primary-sidebar.doctor/format.
  • oxlint clean on the serve backend; transport is display-only in the UI (no logic branches on it).
  • Change scope confirmed contained: .contentrain/client/** + exactly 3 source files (serve-ui-texts/en.json, PrimarySidebar.vue, serve/server.ts).

🤖 Generated with Claude Code

…es transport

Serve UI is the one layer untouched since March; bring it in line with July.

- Regenerate the committed #contentrain client: it had drifted 40 keys
  behind the serve-ui-texts source dictionary (blank Doctor/Format nav
  labels + entire Doctor page copy + branch-detail preview + Format page),
  and also re-syncs the docs/marketing content the same client mirrors via
  content_path (now current with this session's docs edits — 24-tool /
  media surface).
- Unify PrimarySidebar: all 8 nav items now use one primary-sidebar.*
  namespace (was 6 hardcoded + 2 via a primary-nav.* namespace missing
  from the built bundle). Source dictionary keys moved accordingly.
- /api/capabilities: transport 'stdio' -> 'http' — the web dashboard is
  reached over HTTP; the MCP engine is embedded in-process. 'stdio' only
  applies to 'serve --stdio', which does not serve this UI.

Coverage checked against product philosophy and deliberately left as-is:
read-only dashboard with agent-delegated mutations, and media staying
Studio-only (LocalProvider has no media facet, so no media UI). No stale
tool-count/feature copy found in the dictionary. serve-ui build (vue-tsc
+ vite) passes; oxlint clean.
@netlify

netlify Bot commented Jul 13, 2026

Copy link
Copy Markdown

Deploy Preview for contentrain-ai ready!

Name Link
🔨 Latest commit c4bccd1
🔍 Latest deploy log https://app.netlify.com/projects/contentrain-ai/deploys/6a54dba7d35aa80008cdf6d2
😎 Deploy Preview https://deploy-preview-78--contentrain-ai.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@ABB65
ABB65 merged commit 92e336b into main Jul 13, 2026
6 checks passed
@github-actions github-actions Bot locked and limited conversation to collaborators Jul 13, 2026
@ABB65
ABB65 deleted the fix/serve-ui-july-alignment branch July 13, 2026 12:42
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant