MC Grandfather Clause — Legacy Task Completion

MC Grandfather Clause — Legacy Task Completion

Installed: 2026-05-03 17:30 UTC
Implementation: /Users/makinja/system/tools/mc.js
Audit Log: /tmp/mc-grandfathered-completions.log
MC Genesis: #99057
Verified by: Proveo (angie-jones) — 6/6 PASS


What Is This?

The grandfather clause allows legacy tasks (created and marked ready_for_review before 2026-05-03 17:30 UTC) to complete without triggering the new gate stack:

Old gates still apply: ZAKON #22 ready_for_review requirement, evidence bundle, postflight marker, ADR-021 compliance. This is not a full bypass — only the new stack is skipped.


Why?

CEO decision 2026-05-03 after the 3-layer gate chain ('sistem koje je krc') blocked routine closure of 6 drift-prevention MCs that had already been validated under the old regime. The grandfather clause creates a clean boundary: tasks already validated = let them close without new gates; new tasks = all gates active.


How It Works

Timestamp Boundary

GATE_INSTALL_DATE = '2026-05-03T17:30:00Z' (line ~50 in mc.js)

The isGrandfathered(task, taskId) helper checks three timestamp heuristics (in priority order):

  1. completed_at (if task already done — should never happen in preCompletion gate)
  2. updated_at when status = ready_for_review
  3. Earliest task_history entry with action = READY_FOR_REVIEW

If any timestamp is before GATE_INSTALL_DATE → grandfathered = true.

UTC fix: SQLite timestamps are space-separated (YYYY-MM-DD HH:MM:SS) — JavaScript new Date() parses these as local time unless 'Z' is appended. The sqliteUtcMs() helper (lines 656-661) imposes UTC parsing to prevent timezone drift.

Gate Wrap Points

Five checks in preCompletionGate() (lines 750-817) are wrapped with if (grandfathered) { /* skip */ }:


Grandfathered vs Forced

Aspect GRANDFATHERED FORCED_COMPLETION
Trigger ready_for_review_at < gate install date override flag
Gates bypassed New stack only (qa-19, GOTCHA, hop-build, validator, trust labels) All gates (including old: ZAKON #22, evidence, postflight, ADR-021)
Audit log /tmp/mc-grandfathered-completions.log /tmp/mc-forced-completions.log
DB action task_history.action='GRANDFATHERED' task_history.action='FORCED_COMPLETION'
Console output "GRANDFATHERED: task predates new gate stack" "⚠️ FORCED COMPLETION"
Intended use Clean legacy backlog closure (automatic) CEO override for exceptional cases (explicit)

Audit Logs

Grandfathered Log

/tmp/mc-grandfathered-completions.log (separate from FORCED log)

Format:

{
  "timestamp": "2026-05-03T18:27:04.123Z",
  "taskId": 99022,
  "completionType": "GRANDFATHERED",
  "gate_install_date": "2026-05-03T17:30:00Z",
  "reason": "updated_at=2026-05-03 09:52:57 (status=ready_for_review)"
}

Database

Query:

sqlite3 ~/system/databases/mission-control.db \
  "SELECT task_id, action, timestamp FROM task_history WHERE action='GRANDFATHERED'"

Verified entries (as of 2026-05-03): 5 tasks (99022, 10590, 10608, 10611, 10613)


Code References

Element Location (mc.js)
GATE_INSTALL_DATE constant Line ~50
sqliteUtcMs() helper Lines 656-661
isGrandfathered() helper Lines 662-712
preCompletionGate() wrapper checks Lines 750-817
completionType assignment Lines 2030-2033
Audit log write Line ~2063

Verification

Test 1 (legacy task): MC #99022 (ready_for_review_at = 2026-05-03 08:43 UTC)
node ~/system/tools/mc.js done 99022
→ Status = done, action = GRANDFATHERED (no override needed)

Test 2 (new task): MC #99058 (created 2026-05-03 18:27 UTC)
isGrandfathered() returns { grandfathered: false }
→ All gates remain active

Proveo report: /tmp/postflight-99057/proveo-report.md — 6/6 AC PASS


Created: 2026-05-03
Owner: John (AI Director)
Company: ALAI Holding AS


Revision #2
Created 2026-05-03 18:42:56 UTC by John
Updated 2026-06-07 20:01:06 UTC by John