feat(platform): Slice D nav polish + 4 follow-up UX goal intakes - #217
feat(platform): Slice D nav polish + 4 follow-up UX goal intakes#217vladprrs wants to merge 2 commits into
Conversation
… audit row link dispatch, project-version back-link, API explorer cross-links
Implements T026/T027 of platform-full-ux-scenarios recovery audit:
- PlatformSidebar/PlatformTopbar read /route/path + /route/params from state
store; cross-link templates live in layout/screen specs. Sidebar items take
hrefTemplate + matchPattern (drops hard-coded active flags). Topbar
crumbsFromRoute derives breadcrumbs from path with in-component label table.
- PlatformDataTable columns accept hrefTemplateMap {typeField, byType} so audit
rows dispatch to the right detail route by targetType; unmatched types stay
text rather than rendering broken hrefs.
- Project-version screen gets templated Back-to-project + Deployments header
actions.
- PlatformAPIExplorer takes graphHrefTemplate/pdmHrefTemplate so Overview pane
renders Source artifact / Handler / Request|Response schema as links to
Graph and Data-model screens; api.spec.json opts in.
Updates platform-full-ux-scenarios state.yaml to reflect the reopened
goal (status: active, active_task: T027) and recovery audit findings.
- platform-navigation-crosslinks-ux: scoped repair of platform navigation and cross-links to align apps/platform with .tmp/rntme-ux-design.agent.final.md - platform-data-model-explorer: bring data-model explorer to .tmp/rntme platform/data-model-explorer UX (UI + handlers + PDM/QSM data flow) - platform-project-dashboard-overview: end-to-end project dashboard slice per .tmp/rntme platform/project-dashboard-overview, including handlers and deploy/release flow - cv-extract-platform-client-auth0-bootstrap-e2e: recovery goal to finish cv-extract platform-client publish/deploy/smoke/dashboard proof using the approved persistent Auth0 test automation grant
📝 WalkthroughWalkthroughThis PR extends the platform UI to support dynamic, route-aware navigation through template-based link resolution. Sidebar and topbar components now derive active states and breadcrumbs from runtime routes, header actions use hrefTemplate for cross-navigation, data table columns dispatch row-specific links via type-based templates, and the API explorer renders schema/handler fields as cross-links. Comprehensive updates to specs, components, tests, and documentation establish the new invariants. ChangesRoute-Aware Platform Navigation and Cross-Linking
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
✨ Simplify code
Warning There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure. 🔧 ESLint
ESLint skipped: no ESLint configuration detected in root package.json. To enable, add Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 4
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
docs/goals/platform-project-dashboard-overview/state.yaml (1)
714-720:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winFinal verification metadata is left unknown despite completed goal.
Since this state file is the canonical board truth, keeping
checks.last_verificationas unknown makes audit replay harder. Please populate it with the latest concrete verification task/commands (or explicitly reference the authoritative receipt task ID).🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/goals/platform-project-dashboard-overview/state.yaml` around lines 714 - 720, The checks.last_verification block currently has placeholder/unknown values; update checks.last_verification.result to the concrete outcome (e.g., "passed"/"failed"), set checks.last_verification.task to the authoritative verification task ID or receipt task reference, and fill checks.last_verification.commands with the exact verification commands (or a pointer to their location) so the canonical state contains the latest concrete verification metadata; ensure dirty_fingerprint is updated if the verification changed the artifact fingerprint.
🧹 Nitpick comments (1)
docs/goals/platform-data-model-explorer/goal.md (1)
33-33: 💤 Low valueOptional: Consider hyphenating "end to end".
The phrase "end to end" in "genuinely working end to end" could be hyphenated as "end-to-end" when used as a compound adjective.
✏️ Suggested edit
-Continuous execution: discover the current platform, PDM, QSM, and UX evidence; choose the largest safe vertical implementation slice; implement and verify successive slices until the data-model explorer is genuinely working end to end; review at risk, ambiguity, rejected-verification, and final-completion boundaries. +Continuous execution: discover the current platform, PDM, QSM, and UX evidence; choose the largest safe vertical implementation slice; implement and verify successive slices until the data-model explorer is genuinely working end-to-end; review at risk, ambiguity, rejected-verification, and final-completion boundaries.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/goals/platform-data-model-explorer/goal.md` at line 33, Update the phrase "genuinely working end to end" in the sentence starting with "Continuous execution:" so that "end to end" is hyphenated as "end-to-end" to use the compound adjective form; ensure the rest of the sentence remains unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@apps/platform/blueprint/services/app/ui/layouts/main.spec.json`:
- Around line 25-27: The Projects navigation entry uses a mismatched
hrefTemplate ("/{orgId}") which routes to the dashboard instead of Projects;
update the "hrefTemplate" value for the Projects nav object to match its
"matchPattern" by changing it to "/{orgId}/projects" so the Projects link
navigates to the correct route (look for the object with "label": "Projects",
"hrefTemplate", and "matchPattern" in the JSON).
In `@apps/platform/blueprint/services/app/ui/screens/deployment.spec.json`:
- Around line 16-18: The "Back to deployments" button's hrefTemplate currently
points to the org root (hrefTemplate = "/{orgId}"); update the hrefTemplate in
deployment.spec.json for that button to the deployments list route (for example
"/{orgId}/deployments") so the Back to deployments action navigates to the
deployments list rather than the org landing page.
In `@apps/platform/ui-module/src/components.tsx`:
- Around line 2211-2222: The code currently maps actions and uses actionHref(a,
routeParams) ?? '#' which yields anchors with href="#" for unresolved links;
change the rendering inside the actions.map (the block using actionHref,
routeParams, key i and className `rntme-btn ...`) to detect when actionHref(...)
returns null/undefined and render a <button> (same className, key, and label,
and preserve any click handler variant behavior) instead of an <a href="#">,
otherwise render the <a> for resolved hrefs; ensure the button is
keyboard-accessible and has type="button" so it does not submit forms
inadvertently.
In
`@docs/goals/platform-navigation-crosslinks-ux/notes/T001-platform-nav-scout.md`:
- Line 17: Update the stated route count in the document: the list containing
`/`, `/login`, `/auth/callback`, `/no-org`, `/:orgId`,
`/:orgId/projects/:projectId`, `/:orgId/projects/:projectId/data-model`, `/api`,
`/ui`, `/graph`, `/:orgId/deploy-targets`,
`/:orgId/projects/:projectId/deployments`, `/:orgId/deployments/:deploymentId`,
`/:orgId/tokens`, `/:orgId/audit`,
`/:orgId/projects/:projectId/versions/:versionId` currently enumerates 16
entries, so change “15 routes” to “16 routes” or remove the explicit count text
entirely to keep the list accurate and avoid future mismatch.
---
Outside diff comments:
In `@docs/goals/platform-project-dashboard-overview/state.yaml`:
- Around line 714-720: The checks.last_verification block currently has
placeholder/unknown values; update checks.last_verification.result to the
concrete outcome (e.g., "passed"/"failed"), set checks.last_verification.task to
the authoritative verification task ID or receipt task reference, and fill
checks.last_verification.commands with the exact verification commands (or a
pointer to their location) so the canonical state contains the latest concrete
verification metadata; ensure dirty_fingerprint is updated if the verification
changed the artifact fingerprint.
---
Nitpick comments:
In `@docs/goals/platform-data-model-explorer/goal.md`:
- Line 33: Update the phrase "genuinely working end to end" in the sentence
starting with "Continuous execution:" so that "end to end" is hyphenated as
"end-to-end" to use the compound adjective form; ensure the rest of the sentence
remains unchanged.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 3d9aaac4-8824-4284-a980-7f202c8685d9
📒 Files selected for processing (28)
apps/platform/blueprint/services/app/ui/layouts/main.spec.jsonapps/platform/blueprint/services/app/ui/screens/api.spec.jsonapps/platform/blueprint/services/app/ui/screens/audit.spec.jsonapps/platform/blueprint/services/app/ui/screens/data-model.spec.jsonapps/platform/blueprint/services/app/ui/screens/deployment.spec.jsonapps/platform/blueprint/services/app/ui/screens/deployments.spec.jsonapps/platform/blueprint/services/app/ui/screens/graph.spec.jsonapps/platform/blueprint/services/app/ui/screens/project-version.spec.jsonapps/platform/blueprint/services/app/ui/screens/ui.spec.jsonapps/platform/blueprint/test/platform-ui.test.tsapps/platform/ui-module/src/components.tsxapps/platform/ui-module/test/components.test.tsxdocs/current/owners/apps/platform.mddocs/goals/cv-extract-platform-client-auth0-bootstrap-e2e/goal.mddocs/goals/cv-extract-platform-client-auth0-bootstrap-e2e/notes/T015-org-page-empty.mddocs/goals/cv-extract-platform-client-auth0-bootstrap-e2e/state.yamldocs/goals/platform-data-model-explorer/goal.mddocs/goals/platform-data-model-explorer/notes/T001-scout-map.mddocs/goals/platform-data-model-explorer/notes/T002-judge-plan.mddocs/goals/platform-data-model-explorer/state.yamldocs/goals/platform-full-ux-scenarios/state.yamldocs/goals/platform-navigation-crosslinks-ux/goal.mddocs/goals/platform-navigation-crosslinks-ux/notes/T001-platform-nav-scout.mddocs/goals/platform-navigation-crosslinks-ux/notes/T002-judge-slice-AB.mddocs/goals/platform-navigation-crosslinks-ux/state.yamldocs/goals/platform-project-dashboard-overview/goal.mddocs/goals/platform-project-dashboard-overview/notes/T001-dashboard-map.mddocs/goals/platform-project-dashboard-overview/state.yaml
| "label": "Projects", | ||
| "hrefTemplate": "/{orgId}", | ||
| "matchPattern": "/{orgId}/projects", |
There was a problem hiding this comment.
Projects nav target points to the wrong route.
At Line 26, "hrefTemplate": "/{orgId}" conflicts with Line 27’s projects match pattern and will send users to dashboard instead of Projects. Use the projects route template here.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@apps/platform/blueprint/services/app/ui/layouts/main.spec.json` around lines
25 - 27, The Projects navigation entry uses a mismatched hrefTemplate
("/{orgId}") which routes to the dashboard instead of Projects; update the
"hrefTemplate" value for the Projects nav object to match its "matchPattern" by
changing it to "/{orgId}/projects" so the Projects link navigates to the correct
route (look for the object with "label": "Projects", "hrefTemplate", and
"matchPattern" in the JSON).
| "label": "Back to deployments", | ||
| "variant": "ghost", | ||
| "hrefTemplate": "/{orgId}" |
There was a problem hiding this comment.
Back-to-deployments action routes to org root.
At Line 18, "/{orgId}" does not match the "Back to deployments" intent and will navigate to the org landing page instead of a deployments list route.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@apps/platform/blueprint/services/app/ui/screens/deployment.spec.json` around
lines 16 - 18, The "Back to deployments" button's hrefTemplate currently points
to the org root (hrefTemplate = "/{orgId}"); update the hrefTemplate in
deployment.spec.json for that button to the deployments list route (for example
"/{orgId}/deployments") so the Back to deployments action navigates to the
deployments list rather than the org landing page.
| ...actions.map((a, i) => { | ||
| const href = actionHref(a, routeParams) ?? '#'; | ||
| return React.createElement( | ||
| 'a', | ||
| { | ||
| key: i, | ||
| href: a.href ?? '#', | ||
| href, | ||
| className: `rntme-btn is-small ${a.variant ? `is-${a.variant}` : 'is-ghost'}`, | ||
| }, | ||
| a.label, | ||
| ), | ||
| ), | ||
| ); | ||
| }), |
There was a problem hiding this comment.
Avoid href="#" fallback for unresolved topbar actions.
Using '#' for missing/unresolved action links can trigger unwanted scroll-to-top and hide template resolution mistakes. Render a button when no href resolves.
Proposed fix
- ...actions.map((a, i) => {
- const href = actionHref(a, routeParams) ?? '#';
- return React.createElement(
- 'a',
- {
- key: i,
- href,
- className: `rntme-btn is-small ${a.variant ? `is-${a.variant}` : 'is-ghost'}`,
- },
- a.label,
- );
- }),
+ ...actions.map((a, i) => {
+ const href = actionHref(a, routeParams);
+ const className = `rntme-btn is-small ${a.variant ? `is-${a.variant}` : 'is-ghost'}`;
+ return href
+ ? React.createElement('a', { key: i, href, className }, a.label)
+ : React.createElement('button', { key: i, type: 'button', className }, a.label);
+ }),📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| ...actions.map((a, i) => { | |
| const href = actionHref(a, routeParams) ?? '#'; | |
| return React.createElement( | |
| 'a', | |
| { | |
| key: i, | |
| href: a.href ?? '#', | |
| href, | |
| className: `rntme-btn is-small ${a.variant ? `is-${a.variant}` : 'is-ghost'}`, | |
| }, | |
| a.label, | |
| ), | |
| ), | |
| ); | |
| }), | |
| ...actions.map((a, i) => { | |
| const href = actionHref(a, routeParams); | |
| const className = `rntme-btn is-small ${a.variant ? `is-${a.variant}` : 'is-ghost'}`; | |
| return href | |
| ? React.createElement('a', { key: i, href, className }, a.label) | |
| : React.createElement('button', { key: i, type: 'button', className }, a.label); | |
| }), |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@apps/platform/ui-module/src/components.tsx` around lines 2211 - 2222, The
code currently maps actions and uses actionHref(a, routeParams) ?? '#' which
yields anchors with href="#" for unresolved links; change the rendering inside
the actions.map (the block using actionHref, routeParams, key i and className
`rntme-btn ...`) to detect when actionHref(...) returns null/undefined and
render a <button> (same className, key, and label, and preserve any click
handler variant behavior) instead of an <a href="#">, otherwise render the <a>
for resolved hrefs; ensure the button is keyboard-accessible and has
type="button" so it does not submit forms inadvertently.
|
|
||
| ## Current Route Inventory (`apps/platform/blueprint/services/app/ui/manifest.json`) | ||
|
|
||
| 15 routes: `/`, `/login`, `/auth/callback`, `/no-org`, `/:orgId`, `/:orgId/projects/:projectId`, `/:orgId/projects/:projectId/data-model`, `/api`, `/ui`, `/graph`, `/:orgId/deploy-targets`, `/:orgId/projects/:projectId/deployments`, `/:orgId/deployments/:deploymentId`, `/:orgId/tokens`, `/:orgId/audit`, `/:orgId/projects/:projectId/versions/:versionId`. |
There was a problem hiding this comment.
Route count is off by one.
Line 17 says “15 routes” but lists 16 route entries. Please correct the count (or remove the explicit number) to avoid confusion in later planning receipts.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In
`@docs/goals/platform-navigation-crosslinks-ux/notes/T001-platform-nav-scout.md`
at line 17, Update the stated route count in the document: the list containing
`/`, `/login`, `/auth/callback`, `/no-org`, `/:orgId`,
`/:orgId/projects/:projectId`, `/:orgId/projects/:projectId/data-model`, `/api`,
`/ui`, `/graph`, `/:orgId/deploy-targets`,
`/:orgId/projects/:projectId/deployments`, `/:orgId/deployments/:deploymentId`,
`/:orgId/tokens`, `/:orgId/audit`,
`/:orgId/projects/:projectId/versions/:versionId` currently enumerates 16
entries, so change “15 routes” to “16 routes” or remove the explicit count text
entirely to keep the list accurate and avoid future mismatch.
Summary
apps/platform/ui-module,apps/platform/blueprint) — closes T026/T027 of theplatform-full-ux-scenariosrecovery audit: route-awarePlatformSidebar/PlatformTopbardriven from/route/path+/route/params,PlatformDataTablecolumns gainhrefTemplateMapfor per-row link dispatch (audit screen routes bytargetType), project-version screen gets templatedBack to project+Deploymentsactions,PlatformAPIExplorergainsgraphHrefTemplate/pdmHrefTemplateso Overview links to Graph/Data-model screens. Updatesdocs/current/owners/apps/platform.mdwith the new nav-shell + cross-link contracts and reflects the reopened goal state inplatform-full-ux-scenarios/state.yaml.docs/goals/:platform-navigation-crosslinks-ux,platform-data-model-explorer,platform-project-dashboard-overview,cv-extract-platform-client-auth0-bootstrap-e2e— planning artifacts only (goal.md + state.yaml + notes), no code in this slice.Test plan
bun run --filter @rntme/platform-ui typecheck→ 0 errorsbun run --filter @rntme/platform-ui test→ 50 pass / 0 fail / 208 expectsbun run --filter @rntme/platform-blueprint typecheck→ 0 errorsbun run --filter @rntme/platform-blueprint test→ 103 pass / 0 fail / 452 expectsplatform.rntme.comafter release Dokploy redeploy (out of scope for this PR — tracked by theplatform-full-ux-scenariosgoal's outstanding work)🤖 Generated with Claude Code
Summary by CodeRabbit
Release Notes
New Features
Refactor
Documentation