Feature Status Matrix
Authoritative source of truth for release readiness. The working tree and
deployed application are deliberately reported separately: local checks do
not establish deployment, production verification, or pilot readiness.
Status vocabulary (spec §3.3, §9.3):
not_designed— no spec exists.designed— a specification exists.implemented— code exists and passes local checks.integrated— connected to its production dependencies in the preview
deployment.
production_verified— a representative production interaction has
succeeded with recorded evidence (e.g., the 2026-07-25 audit).
pilot_ready— security, accessibility, reliability, support, and
product acceptance gates pass.
generally_available— operational history and broader release criteria
pass.
blocked— explicitly disabled via capability manifest.degraded— available but with reduced function or known issues.
A health endpoint returning 200 is not evidence that a user workflow
works.
Snapshot date: 2026-07-26
Last update: release candidate baseline = 959 unit tests passing after the
2026-07-26 capability, session-state, authorization, and dependency remediation
work. Production deployment and verification remain pending. Production evidence remains the
2026-07-25/26 adversarial audit until a new deployment is verified.
Audited preview: https://a40ae28a.court-lusion.pages.dev (classified
development preview)
Production alias: https://court-lusion.pages.dev
Capability manifest overrides (effective immediately)
The CapabilityId set in src/lib/editor/capabilities.ts is extended for
this matrix. New IDs are introduced by their target phase and start as
blocked until that phase ships.
| CapabilityId | Effective state | Reason |
|---|---|---|
vault | blocked | Spec §13 remediation not complete |
redaction | blocked | Spec §7.5 irreversible export not verified |
sandbox | blocked | Spec §11 infrastructure not complete |
mcp | blocked | Spec §10.2 governance not complete |
skills | blocked | Spec §10.1 lifecycle not complete |
tabular-review | degraded | Only Refresh is wired; copy must be corrected |
workflows | degraded | Stub paths in callProvider; UI hides "queue run" |
codex-act | blocked | Approval path not surfaced (already in code) |
The override takes effect through the existing
editor-capability-overrides JSON block in
src/pages/editor.astro lines 52–62. The
build-time env-flag seeding stays; it is no longer the authority.
Product area status
| Area | Status | Evidence | Owner | Phase |
|---|---|---|---|---|
| Public marketing — claims | implemented | Inherited awards and the Bristol address are removed locally; verified claims remain governed by docs/product/release-claims-register.md | product | 10 |
| Public marketing — H1s | degraded | F-009, F-022 | product | 10 |
| Public marketing — zoom | blocked | F-004 viewport meta | design | 2 |
| Public marketing — Playground | degraded | F-008 empty WebGL shell, indexed | product | 10 |
| Public marketing — wide-render | degraded | F-033 near-empty 1920 | design | 10 |
| Public marketing — a11y | degraded | F-005, F-006, F-007, F-020, F-021 | design | 10 |
| Editor shell — desktop | implemented | Local containment exists in src/pages/editor.astro; production remains failed at desktop width | frontend | 1 |
| Editor shell — mobile | implemented | Off-canvas at 390/768; not yet polished | frontend | 1 |
| Editor shell — nav state | implemented | Local route-derived active-panel logic; production verification remains open | frontend | 1 |
| Editor shell — a11y | degraded | F-019 (16 mains, 11 H1s, focusable in aria-hidden) | design | 2 |
| Editor shell — focus ring | degraded | F-029 | design | 2 |
| Editor shell — reduced motion | degraded | F-028 | design | 2 |
| Editor shell — contrast | degraded | F-030 (35 nodes below AA or tiny) | design | 2 |
| Editor shell — typography | degraded | Legacy 8/9/10.5px text in editorKanban.css, editorProfileVault.css, editorAssistantPolish.css | design | 2 |
| Auth — session | implemented | WorkOS callback + cookie session in convex/auth.config.ts | security | 4 |
| Auth — shell/content truth | implemented | Local partial mitigation only; normalized AppSession and production verification remain open | frontend | 1 |
| Auth — session policy | implemented | Cookie TTL 30d, rotation in functions/auth/callback.ts | security | 4 |
| Auth — SCIM | not_designed | Spec §18.1 design only | security | 11 |
| Workspaces — model | implemented | convex/workspaces.ts | backend | 4 |
| Workspaces — membership | implemented | convex/memberships.ts | backend | 4 |
| Workspaces — organizations | not_implemented | Spec §12.1 — required for ethical walls | backend | 4 |
| Matters — model | implemented | convex/matters.ts | backend | 4 |
| Matters — ACL | degraded | matterAccess, matterPolicy, and requireMatterAccess exist; assistant/document/chronology record access and matter-linked list rows fail closed locally, while adoption across other product tables and runtime authorization tests remain open | backend | 4 |
| Matters — restricted | degraded | Restricted assistant/document/chronology records and list contracts use the canonical gate locally; broader matter scoping, role-policy verification, deployment, and production authorization evidence remain open | backend | 4 |
| Matters — UI | degraded | panel-matters; missing members, ethics walls, retention | product | 3 |
| Kanban / Tasks — boards | implemented | convex/boards.ts, convex/columns.ts, convex/cards.ts | frontend | 5 |
| Kanban / Tasks — legal ops | not_implemented | Spec §7.7 | product | 3 |
| Activity — feed | implemented | convex/activity.ts | frontend | 3 |
| Activity — audit | not_implemented | Spec §12.5 — append-only AuditEvent | backend | 4 |
| Files — upload | implemented | convex/files.ts, IndexedDB fallback | frontend | 5 |
| Files — resumable | not_implemented | Spec §7.4 | backend | 5 |
| Files — malware scan | not_implemented | Spec §18.3 | security | 5 |
| Documents — versions | implemented | convex/documents.ts | backend | 5 |
| Documents — annotations | not_implemented | Spec §7.4 | backend | 5 |
| Documents — search | not_implemented | Spec §7.4 — permission-aware index | backend | 5 |
| Documents — OCR | degraded | F-013 shows controls but no verified OCR pipeline | backend | 5 |
| Redaction | blocked | Spec §13 — no irreversible export yet | security | 5+ |
| Chronology — CRUD | implemented | convex/chronology.ts | backend | 3 |
| Chronology — provenance | not_implemented | Spec §7.6 | backend | 3 |
| Chronology — copy | degraded | F-015 "Harvey-style" wording | product | 3 |
| Notes — model | implemented | convex/notes.ts | backend | 6 |
| Notes — versions | not_implemented | Spec §8.2 | backend | 6 |
| Notes — wikilinks | implemented | Basic | frontend | 6 |
| Notes — backlinks | not_implemented | Spec §8.3 — durable backlink index | backend | 6 |
| Notes — Obsidian import | not_implemented | Spec §8.9 | backend | 6 |
| Knowledge graph | prototype | SVG force graph derived from note titles; O(n²) client; 200-node ceiling | frontend | 6 |
| Knowledge graph — durable | not_implemented | Spec §8.6 | backend | 6 |
| Assistant — model | integrated | Convex Agent + MiniMax env vars; F-011 final-pass metric ambiguous | backend | 7 |
| Assistant — citations | not_implemented | Spec §9.7 — gateway returns empty stub | backend | 7 |
| Assistant — retrieval | not_implemented | Spec §9.7 | backend | 7 |
| Assistant — persisted msgs | implemented | assistantMessages records user, running, complete, and failed turns; the editor hydrates the authorized thread projection after reload. Runtime Convex coverage, deployment, and authenticated production verification remain required. | backend | 7 |
| Assistant — true streaming | not_implemented | editor-remaining-work-2026-07-25.md §2 | backend | 7 |
| Codex — threads | implemented | convex/codex.ts | frontend | 7 |
| Codex — provider switching | implemented | UI switcher; MiniMax default | frontend | 7 |
| Codex — Act mode | blocked | Spec §9.2 — approval path required | backend | 8 |
| Workflows — model | implemented | convex/workflows.ts, convex/workflowEngine.ts | backend | 9 |
| Workflows — UI | not_implemented | panel-workflows panel missing (editor-remaining-work-2026-07-25.md §4) | frontend | 9 |
| Workflows — approvals | not_implemented | Spec §9.8 | backend | 9 |
| Workflows — idempotency | not_implemented | Spec §14.2 | backend | 9 |
| Tabular review | prototype | F-014 copy vs function gap; panel-tabular-reviews missing | frontend | 9 |
| Provider vault | blocked | F-013 implied; spec §13 — placeholder rows + AES-for-HMAC + missing KMS | security | 4 |
| Skills | blocked | Spec §10.1 — prompt templates ≠ installed skills | backend | 8 |
| MCP connectors | blocked | Spec §10.2 — no governed registry | backend | 8 |
| Sandbox | blocked | Spec §11 — no production isolation | security | 8 |
| Notifications — local | implemented | src/scripts/editor/notifications.ts | frontend | 3 |
| Notifications — durable | not_implemented | Spec §7.9 | backend | 7 |
| Settings — local | implemented | src/scripts/editor/settingsPanel.ts | frontend | 3 |
| Settings — server | not_implemented | Spec §7.10 | backend | 4 |
| Search — global | not_implemented | Spec §7.4/§12.7 — permission-aware cross-entity search | backend | 5 |
| Audit — append-only | not_implemented | Spec §12.5 | backend | 4 |
| Audit — exports | not_implemented | Spec §12.5 | backend | 4 |
| Retention — policies | not_implemented | Spec §12.6 | backend | 4 |
| Legal hold | not_implemented | Spec §12.6 | backend | 4 |
| Enterprise — SSO | not_implemented | Spec §18.1 | security | 11 |
| Enterprise — SCIM | not_designed | Spec §18.1 | security | 11 |
| Observability — health | implemented | convex/auth.config.ts redirect + health endpoints | backend | 11 |
| Observability — SLOs | not_implemented | Spec §19.1 | ops | 11 |
| Observability — admin status | not_implemented | Spec §19.4 | frontend | 11 |
| Assets — map integrity | integrated | npm run imagegen:validate-map passes | assets | 10 |
| Assets — provenance | degraded | 285 prompted + 12 accepted-but-empty-runtime + stale markdown summary | assets | 10 |
| Assets — runtime placeholders | degraded | Several prompted records are runtime-bound; treat as placeholders | assets | 10 |
| Tests — unit | integrated | 959 unit tests passing; TypeScript and lint clean | quality | 11 |
| Tests — browser shell | not_implemented | Spec §20.2 | quality | 11 |
| Tests — a11y automation | not_implemented | Spec §20.3 | quality | 11 |
| Tests — authorization | not_implemented | Spec §20.4 | quality | 11 |
| Tests — sandbox adversarial | not_implemented | Spec §11.6 | quality | 8 |
| Dependencies — known CVEs | implemented | Local npm audit --omit=dev --json reports 0 vulnerabilities after Astro 7.1.3 / Sharp 0.35.3 and patched transitive resolutions; deployment verification remains required | security | 11 |
Finding assignment
| ID | Sev | Title | Owner | Phase | Status |
|---|---|---|---|---|---|
| F-001 | P0 | Desktop editor layout collapsed into unusable grid | frontend | 1 | contained |
| F-002 | P0 | Authenticated shell shows signed-out gates | frontend | 1 | partial close: sessionState() helper + boot-window "Loading…" copy; full close requires normalized AppSession (Phase 4) |
| F-003 | P0 | Multiple primary panels simultaneously active | frontend | 1 | partial close: applyRouteActiveClass() derives from URL only; legacy direct handlers + duplicated click handlers still present in 3,817-line editor.astro |
| F-031 | P0 | Desktop editor layout collapsed at 1440/1920 | frontend | 1 | contained |
| F-004 | P1 | Viewport meta disables zoom | design | 2 | closed (BaseLayout viewport meta updated) |
| F-005 | P1 | About page retains Lusion client award links | product | 10 | closed: src/data/awards.ts zeroed with placeholder renderer; Porsche/Wallpaper/Awwwards/FWA/CSSDA/Webby/Lovie/Drum/CommArts removed |
| F-006 | P1 | Team section is empty | product | 10 | closed: src/data/team.ts exports an empty array; about-hero degrades to no members; verified identities will land via release-claims-register |
| F-007 | P1 | Footer still shows Bristol UK Lusion office address | product | 10 | closed: src/data/site.ts address block cleared; contact remains via email |
| F-008 | P1 | Playground is an exposed empty home-mode WebGL shell | product | 10 | closed: /playground replaced with a noindex development-state page; no public nav ref |
| F-009 | P1 | Missing semantic H1 on key marketing routes | product | 10 | implemented locally + browser-verified: /about, /projects, and project-detail routes now expose semantic visually-hidden H1s; deployment required |
| F-010 | P1 | Astronaut drop incomplete at max scroll | frontend | 10 | closed locally: fresh 1440×900 Aside run at scrollToPixel(contentSize, true) reached astronautDropRatio=1, whiteTunnelWaitRatio=1, and dominant phase astronautWait; retain a deployed-browser rerun as release evidence |
| F-011 | P1 | renderer.info stays calls=1 triangles=1 across all 17 stages | frontend | 10 | open |
| F-012 | P1 | Dashboard and Files claim cloud auth issues | frontend | 1 | open |
| F-013 | P1 | Document pipeline controls visible without verified pipeline | security | 5 | closed: redaction_export now gated by its own redaction capability id (forced blocked by Phase 0 override); OCR / preview / convert remain gated on documents / pdf-annotations until Phase 5 worker ships |
| F-014 | P1 | Tabular reviews advertise CSV upload + real-time streaming but only Refresh is enabled | frontend | 9 | closed: panel intro copy now states "not available in the development preview"; capability forced to unconfigured; full implementation is Phase 9 workstream |
| F-024 | P2 | Workflows empty with Queue run; Mike MIT corpus claim | frontend | 9 | partial close: Mike MIT claim removed from panel intro; "Queue run" affordance remains in the disabled-capability path until provider path lands |
| F-015 | P1 | Chronology marketed as "Harvey-style timeline" | product | 3 | closed (renamed to Matter chronology across convex, schema, panel, spotlight, editor labels) |
| F-016 | P1 | Production notes contain internal probe/test titles | backend | 0 | open |
| F-017 | P1 | Workspace identity is test scaffolding | backend | 0 | open |
| F-019 | P1 | Editor accessibility tree polluted | design | 2 | open |
| F-028 | P1 | prefers-reduced-motion is detected but animations keep running | design | 2 | closed (global reduced-motion rule added to accessibility-floor.css) |
| F-029 | P1 | Keyboard focus has no visible focus ring | design | 2 | closed (global :focus-visible 2px outline via accessibility-floor.css) |
| F-030 | P1 | Editor UI has 35 sampled text nodes failing WCAG AA contrast or tiny type | design | 2 | partial close: accessibility-floor.css raises status/permission/citation text to ≥ 13px and captions to ≥ 12px; full fix requires component-by-component redesign |
| F-033 | P1 | Several public routes render near-empty at 1920×1080 | design | 10 | open |
| F-020 | P2 | Three separate Let's talk controls | product | 10 | open |
| F-021 | P2 | Menu labels duplicated | product | 10 | open |
| F-022 | P2 | Project detail routes lack H1 in probe | product | 10 | implemented locally + browser-verified: detail H1 derives from project.title; deployment required |
| F-023 | P2 | Asset tree and Live page panels are empty shells | frontend | 3 | partial close: assets/live/style quick-launch tiles marked data-labs-only="true" hidden; sidebar taxonomy migration deferred to Phase 1 AppShell decomposition |
| F-025 | P2 | Stop control visible idle; empty thread list; shared gateway claims | frontend | 7 | open |
| F-026 | P2 | Preview deploy sends x-robots-tag: noindex | ops | 0 | open |
| F-032 | P2 | Projects archive screenshot ~1.4MB at 390×844 | frontend | 10 | open |
| F-034 | P2 | html is-mobile / is-tablet classes not applied under mobile device metrics | frontend | 1 | open |
| F-036 | P2 | Mobile WebGL phase mapping differs from desktop | frontend | 10 | open |
| F-018 | P3 | Aux editor HTML is auth-gated when signed out (prior concern downgraded) | security | 4 | closed |
| F-027 | P3 | Preloader present but display:none after ready | frontend | — | closed |
| F-035 | P3 | Sampled public/home/about asset URLs returned 0 HTTP failures (47/47 ok) | assets | 10 | open (visual + licensing still required) |
Updating this matrix
- Add a row per finding, capability, and product area.
- Status transitions require evidence pointers (test, screenshot, audit).
- The matrix is the source of truth for
release-claims-register.md. - Conflicts with README, engineering ledger, or marketing copy are an
automatic status regression.