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.tsxusessubmitVote(Line 5, 79). This path sends the explicitassetIdderived from the user's selection state. - Legacy Action:
castVoteActionremains inapps/platform/src/app/_actions/governance.tsbut is tagged@deprecated. It is not currently used by the active Golden UI path (DigitalBallotInterface).
2. Policy Implementation
- Preferred Path:
submitVoteis the canonical action. It requires an explicitassetIdin the payload, which is validated against the server snapshot via theverifyContextGuard. - Legacy Path:
castVoteActionis 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.tsximports and usessubmitVote. - Code Check: Confirmed
castVoteActionhas the deprecation notice and strict check. - Snapshot Check: Confirmed
graph-resolver.tsuses finite arrays.
Signed Off: Antigravity Agent