Lands the Phase C "make cognition legible" slice plus Phase A residue, all backend-reader-first over real engine data (no theater, read-only doctrine intact, zero serving-path imports). C1-a — Cognitive pipeline record (persistence-first, per #729 worthiness edit): - workbench/pipeline_record.py: curated CognitivePipelineRecord over the real CognitiveTurnResult (input → intent → proposition_graph → articulation_target → realizer → walk_telemetry → trace_hash). Raw field multivectors are DELIBERATELY excluded; _assert_no_raw_field_payload recursively rejects raw field keys, and validate_pipeline_record fails closed on missing/duplicate stages, non-recorded status, or dangling edges — the UI can never receive a partial record that claims to be complete. - test_workbench_pipeline_record.py: non-vacuous guards — missing stage, monkeypatched new required stage, and injected raw {"F": [...]} each raise. C2-a — Contemplation as a process: /contemplation route over real persisted contemplation/runs/*.json (glob reader; honest-empty when absent). C4-a — Identity continuity (L10/L11): RunDetail.identity_continuity + Runs Identity tab, sourced from the real core.engine_identity (engine_identity / parent_engine_identity lineage relation, re-derived to verify). Demo Theater: renders backend-owned proof-promotion + entailment DAGs. Phase A residue: density preference wired end-to-end (settings → shell → tokens); cross-route consistency touch-ups. Infra: local API CORS now echoes only validated 127.0.0.1/localhost origins (hostname-checked, not arbitrary reflection) so Vite fallback ports work. Route chunk-split keeps the build warning-free. Cleanup: corrected the stale ADR-0175 practice-lane assertions (build_report is 6 correct / 0 wrong / 44 refused after the current serving lane; wrong=0 held) and the two registry-derived count tests (LeftNav + CommandPalette 12 → 13 for the new Contemplation route). Docs: runtime_contracts.md (pipeline-record contract), UI-UX-GUIDE, api-contract-v1, data-shapes-v1, wave-M-worthiness, phase-a-residue-ledger. Validation: 106 workbench/practice Python tests green (incl. wrong=0 lane + pipeline-record fail-closed guards); 459/459 frontend; pnpm build clean; git diff --check clean. No generate.derivation / reliability_gate / stream / field.propagate / vault.store imports.
48 lines
2.1 KiB
TypeScript
48 lines
2.1 KiB
TypeScript
import { NavLink } from "react-router-dom";
|
|
import { leftNavSections } from "./routes";
|
|
|
|
// Routes derive from the single registry (routes.ts), grouped by wayfinding
|
|
// section. Adding a route in one place only is no longer possible — LeftNav,
|
|
// the command palette, ⌘-digits, and the landing dropdown all read the same
|
|
// list.
|
|
const NAV_SECTIONS = leftNavSections();
|
|
|
|
export function LeftNav() {
|
|
return (
|
|
<nav
|
|
data-region="leftnav"
|
|
className="flex h-full flex-col gap-[var(--density-nav-gap)] overflow-y-auto border-r border-[var(--color-border-subtle)] bg-[var(--color-surface-base)] p-[var(--density-nav-padding)]"
|
|
aria-label="Main navigation"
|
|
>
|
|
{NAV_SECTIONS.map(({ section, routes }) => (
|
|
<div
|
|
key={section}
|
|
role="group"
|
|
aria-label={section}
|
|
className="flex flex-col gap-[var(--density-nav-gap)]"
|
|
>
|
|
<div className="px-[var(--density-nav-item-padding-x)] pb-0.5 pt-[var(--density-nav-section-padding-top)] text-[10px] font-semibold uppercase tracking-wider text-[var(--color-text-muted)]">
|
|
{section}
|
|
</div>
|
|
{routes.map((route) => (
|
|
<NavLink
|
|
key={route.path}
|
|
to={route.path}
|
|
title={route.description}
|
|
className={({ isActive }) =>
|
|
[
|
|
"block rounded px-[var(--density-nav-item-padding-x)] py-[var(--density-nav-item-padding-y)] text-sm transition-colors focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)]",
|
|
isActive
|
|
? "border-l-2 border-[var(--color-focus-ring)] pl-[calc(var(--density-nav-item-padding-x)-2px)] text-[var(--color-text-primary)] bg-[var(--color-surface-raised)]"
|
|
: "border-l-2 border-transparent pl-[calc(var(--density-nav-item-padding-x)-2px)] text-[var(--color-text-secondary)] hover:text-[var(--color-text-primary)] hover:bg-[var(--color-surface-raised)]",
|
|
].join(" ")
|
|
}
|
|
>
|
|
{route.label}
|
|
</NavLink>
|
|
))}
|
|
</div>
|
|
))}
|
|
</nav>
|
|
);
|
|
}
|