C2 20260329

Submission ID: C2-20260329 Submitted by: jer Date: 2026-03-29 Policy artifact location: v22.0 C2 Retention Policy Proposal

Field-level policy table:

  • field: decision retention_window: 365 days deletion_trigger: time_based, decision_superseded deletion_executor: manual_governance_runbook verification_evidence: pending dated read-only query output

  • field: decision_date retention_window: 365 days deletion_trigger: time_based, decision_superseded deletion_executor: manual_governance_runbook verification_evidence: pending dated read-only query output

  • field: redline_checklist_version retention_window: 365 days deletion_trigger: time_based, decision_superseded deletion_executor: manual_governance_runbook verification_evidence: pending dated read-only query output

  • field: violations[] retention_window: 365 days deletion_trigger: time_based, decision_superseded deletion_executor: manual_governance_runbook verification_evidence: pending dated read-only query output

  • field: compensating_controls[] retention_window: 365 days deletion_trigger: time_based, decision_superseded deletion_executor: manual_governance_runbook verification_evidence: pending dated read-only query output

  • field: owners[] retention_window: 365 days deletion_trigger: time_based, decision_superseded deletion_executor: manual_governance_runbook verification_evidence: pending dated read-only query output

Privacy sign-off:

  • Reviewer: jer
  • Date: 2026-03-29
  • Decision: approved
  • Notes: Approval covers the existing 365-day retention policy with time_based and decision_superseded deletion triggers and manual_governance_runbook executor, with no policy changes.

Verification evidence:

  • Status: complete
  • Environment used: Supabase Dashboard SQL Editor
  • Execution timestamp: approximately 2026-03-29 20:10 America/Toronto (exact time not captured)
  • Reviewer note: No pilot integration feasibility decision rows currently exist, so there are no deletion candidates under the approved policy.
  • Query executed:
with ordered as (
  select
    id,
    decision,
    decision_date,
    created_at,
    row_number() over (order by decision_date desc, created_at desc) as recency_rank
  from pilot_integration_feasibility_decisions
),
aged_candidates as (
  select id, 'older_than_365_days' as candidate_reason
  from ordered
  where decision_date < (current_date - interval '365 days')
),
superseded_candidates as (
  select id, 'superseded_by_newer_decision' as candidate_reason
  from ordered
  where recency_rank > 1
),
all_candidates as (
  select * from aged_candidates
  union all
  select * from superseded_candidates
)
select
  (select count(*) from pilot_integration_feasibility_decisions) as total_rows,
  (select count(*) from aged_candidates) as aged_candidate_rows,
  (select count(*) from superseded_candidates) as superseded_candidate_rows,
  (select count(distinct id) from all_candidates) as unique_candidate_rows;

Observed result:

total_rows aged_candidate_rows superseded_candidate_rows unique_candidate_rows
0 0 0 0