Implementation Plan Critical Review
Date: 2026-02-18 Reviewer perspectives: CTO, CISO, Product Owner, Architect Status: Round 2 complete Scope: Review of Doc 15 + latest W1 UX/logic/scope + Visual QA plan
1. Executive Verdict
Doc 15 is now directionally correct on the founder's core model:
- Authority Path is the durable object.
- Finding is the user/API/UI term.
- Exposure is a derived posture concept (not a navigational entity).
The plan is implementable, but four high-priority alignment items remain before coding should start at scale.
2. What Is Now Correct
| Area | Verdict | Notes |
|---|---|---|
| Terminology model | Correct | findings is primary persistence; no separate exposures collection in Doc 15. |
| Pipeline shape | Correct target | 6-stage target remains architecturally valid for long-term platform design. |
| UX object model | Correct | Cluster -> Authority Paths -> Path Detail flow is represented. |
| Temporal lifecycle | Correct direction | Path-level finding timing (effective_from, resolved_at, intervals) supports first seen/last seen views. |
| Operations requirement | Correct | Observability and alerting are explicitly required via architecture/02-processing-pipeline.md (sections 9-11). |
3. Remaining Inconsistencies and Risks
High 1 - W1 baseline docs vs W1.1 architecture scope are still mixed
ux.md, logic.md, and scope.md still frame baseline W1 as bounded and mostly non-persistent, while Doc 15 is a W1.1 architecture move (persistent authority paths + path-bound temporal findings).
Impact:
- Teams can mis-scope delivery (implement baseline W1 while expecting W1.1 outcomes).
- Review feedback appears contradictory across docs.
Recommendation:
- Add an explicit scope header in wedge docs: "Baseline W1" vs "W1.1 persistent authority-path model".
- Mark Doc 15 as the implementation source of truth for W1.1.
- Add cross-links from wedge docs to Doc 15 for persistence/lifecycle behavior.
High 2 - Status semantics need one canonical mapping
Current model uses platform finding status values (active, acknowledged, remediated, false_positive) while UX text uses "Active/Resolved" language.
Impact:
- API and UI may diverge in filtering and badge logic.
- Incorrect status analytics in clusters and posture cards.
Recommendation:
- Keep storage/API canonical:
remediated. - Keep UI label:
Resolved. - Add one status mapping table in Doc 15 and API docs.
High 3 - Risk cluster drill-down contract must be frozen before UI build
Founder flow requires:
- Overview (top clusters)
- Cluster detail page (authority path rows + inline expansion)
- Separate authority paths inventory page
- Path detail page
Doc 15 contains this flow, but contract details are still underspecified for implementation handoff (row fields, expand payload shape, paging/filter guarantees).
Impact:
- UI rework risk after backend delivery.
- Divergent implementations across pages using similar data.
Recommendation:
- Define one shared
AuthorityPathListItemresponse contract used by both cluster-detail and authority-paths pages. - Freeze required row fields from UX spec (ID, name, last execution, executions 30d, ownership status, data domains, egress, finding pills).
- Require cursor pagination + stable sort key by default.
High 4 - Visual QA plan sequencing still over-invests in soon-to-change surfaces
Some QA items target pages that are being replaced in the path-first rollout.
Impact:
- Avoidable engineering churn.
- Delay on critical architecture work.
Recommendation:
Use two QA batches:
- Pre-migration must-fix: B1, D1, D2, D4, U2, U6.
- Post-path rollout or skip: D3, U1, U3, U4, U5, U7.
4. Critical Naming and Taxonomy Rules
To avoid another naming collision:
- Keep canonical finding type codes unchanged (
orphaned_ownership,dormant_authority,reachable_sensitive_domain,unknown_identity_binding,unproven_execution,scope_drift,llm_egress,external_egress,ownership_ambiguous,ownership_unknown). - Do not introduce duplicate
_pathfinding-type variants. - Represent path scope using
path_id(and optionalscope=path|entity|allquery filter). - Keep "Exposure" only as computed posture language, not as entity/page/route naming.
5. Updated Implementation Order (Recommended)
Phase 0 - Decision lock and doc alignment (1 day)
- Lock W1.1 as the active implementation scope.
- Add baseline vs W1.1 boundary notes to
scope.mdandlogic.md. - Confirm status mapping (
remediated-> UI "Resolved").
Phase 1 - Foundation fixes and QA essentials (0.5-1 day)
- Fix B1 posture summary contradiction.
- Apply D1, D2, D4, U2, U6.
Phase 2 - Authority path persistence (3-4 days)
authority_pathscollection + storage adapter + indexes.- Project-stage materialization and soft-removal lifecycle.
- Authority-path list/detail APIs.
Phase 3 - Path-level finding extension (3-4 days)
- Extend
FindingDocwith path lifecycle fields. - Path-bound evaluation write pattern.
- Path-level finding queries and cluster aggregation.
Phase 4 - Founder UX flow (4-6 days)
- Overview page (2 posture cards + delta + top clusters).
- Risk cluster detail page with inline expansion.
- Authority paths inventory page.
- Authority path detail page.
Phase 5 - Platform-side classification (parallelizable, 2-3 days)
- Move
security_relevance,execution_mode,egress_categoryto platform resolve stage.
Phase 6 - Operational hardening and cleanup gates
- Enforce telemetry/alerts/SLOs.
- Run failure drills.
- Only then execute cleanup/deprecations.
6. CTO Observability Checklist (Go/No-Go)
Before production rollout:
- Stage-level durations and retry counters emitted.
- Alerting active for hard failure, stall, ingestion silence, backlog growth.
- Correctness validator active post-sync.
- Two weeks stable SLO compliance before deleting legacy surfaces.
7. Closed Decisions (2026-02-18)
Decision 1 — Path-level rows (not lineage-level)
Question: When the same workload reaches the same destination through multiple identities, show one row per full path or one grouped row per workload→destination pair?
Decision: One row per full path (AuthorityPathDoc).
Rationale:
- Findings are bound to specific paths — a Contributor path may have
dormant_authoritywhile a Reader path does not. Grouping would merge findings misleadingly. - Storage model is path-level; showing anything else adds an abstraction layer that causes UI/API mismatch.
- Feb 18 mockups show individual identity names per row.
- Lineage grouping can be added later as a UI-only visual grouping (collapsible rows) without schema or API changes.
Decision 2 — Keep resolved_at, document the mapping
Question: The status enum value is remediated, the UI label is "Resolved", and the timestamp field is resolved_at. Should the field be renamed to remediated_at?
Decision: Keep resolved_at. Add one-line documentation note.
Rationale:
resolved_atis semantically correct — it records when a finding left active state regardless of reason (remediated, false_positive, path_removed).- A finding marked
false_positivehas aresolved_atbut was never "remediated" — calling itremediated_atwould be wrong for non-remediation closures. - Zero code churn. The field already exists in the codebase.
- Clean separation: WHEN closed (
resolved_at) vs WHY closed (resolution_reason) vs HOW DISPLAYED (UI: "Resolved").
Documentation note for API docs: resolved_at is the timestamp when a finding left active state, regardless of resolution reason. The resolution_reason field captures why (remediated, false_positive, path_removed, sensitivity_downgraded). The UI renders status remediated as "Resolved".
Decision 3 — Cluster page: locked context with handoff link
Question: When a CISO clicks into a Risk Cluster detail page, can they modify filters or is the view locked?
Decision: Locked to cluster context. A "View in Authority Paths" link carries the cluster's conditions as pre-filled filters to the Authority Paths page for ad-hoc exploration.
Rationale:
- CISO triage flow needs focus — "here are the 12 paths in this cluster" is clearer than editable filter chips.
- Feb 18 mockups show clusters as distinct cards with their own detail view, not as filter presets.
- Filter editing infrastructure only needs to exist on the Authority Paths page — no duplication.
- If users edit all filters away, the cluster page becomes an unlabeled copy of Authority Paths — confusing.
- Configurable/custom clusters may be added later, but pre-configured clusters that "just work" are the right starting point. Too much flexibility can be harder to comprehend than focused views.
8. Final Recommendation
Proceed with Doc 15 as the architecture baseline for W1.1, with the four high-priority alignments above completed first.
This keeps founder UX intent intact, avoids exposure/finding model drift, and gives CTO-grade operability for pipeline execution and failures.