Skip to content

Phase 3 Wave 1.6 Verification Record: Governance Hygiene

Date: 2026-01-05 Status: COMPLETE Policy Chosen: Policy A (Deprecate castVoteAction)

1. Call Site Inventory

  • Active UI: apps/platform/src/components/governance/DigitalBallotInterface.tsx uses submitVote (Line 5, 79). This path sends the explicit assetId derived from the user's selection state.
  • Legacy Action: castVoteAction remains in apps/platform/src/app/_actions/governance.ts but is tagged @deprecated. It is not currently used by the active Golden UI path (DigitalBallotInterface).

2. Policy Implementation

  • Preferred Path: submitVote is the canonical action. It requires an explicit assetId in the payload, which is validated against the server snapshot via the verifyContext Guard.
  • Legacy Path: castVoteAction is marked deprecated. It attempts to read asset ID from context but fails safely ("Ambiguous Vote") if missing. We do NOT fallback to "first asset" (Inference removed in Wave 1.5).

3. Snapshot Authority Documentation

File: apps/platform/src/lib/auth/graph-resolver.ts Function: resolveAuthzSnapshot() Finite Assets:

  • For Role owner: Returns ['unit-304'] (Penthouse).
  • For Role admin: Returns ['unit-304', 'unit-102'].
  • Confirmation: There is NO wildcard return. The list is explicit and hardcoded to specific unit IDs. It is safe (conservative mock).

4. Verification

  • Visual Check: Confirmed DigitalBallotInterface.tsx imports and uses submitVote.
  • Code Check: Confirmed castVoteAction has the deprecation notice and strict check.
  • Snapshot Check: Confirmed graph-resolver.ts uses finite arrays.

Signed Off: Antigravity Agent