| Transition | Status | Trigger |
|---|---|---|
| 🔴 to 🟢 | Allowed | External barrier lifted |
| 🟡 to 🟢 | Allowed | Founder provided data / decision / document / input |
| 🟢 to 🔵 | Allowed | Task completed; commit landed |
| 🔵 to anything | Forbidden | 🔵 is irreversible |
| 🟢 to 🟡 | Exception only | Requires written explanation in commit |
| 🟢 to 🔴 | Forbidden | Cannot quietly punt to "external" |
| New 🔴 | Forbidden | Frozen as of 2026-05-07 |
| Recurring task exception: monthly + quarterly maintenance items cycle 🟢 → 🔵 → new 🟢 row spawned for next cycle. The 🔵 row is historical, never reverted. | ||
| ID | Task | Cycle | Color | Date | Commit |
|---|---|---|---|---|---|
| AM.1 | Monthly Alter health check: review uptime % over past 30 days from systemd journal, error rate from Sentry orbis-alter project, memory growth (table sizes in Alter Supabase project peceprzqoivfdqezaofj) | monthly | 2026-05-07 | audit-2026-05-08 | |
| AM.2 | Quarterly Alter dependency audit: npm audit in Alter/alter/, review package.json vs current security advisories, upgrade major-version-aged packages where safe (currently @sentry/node 7.x is on the older but supported branch) | quarterly | 2026-05-07 | audit-2026-05-08 | |
| AM.3 | Monthly Alter Gmail OAuth token refresh check: confirm oauth-grace-expiry.js cron is firing correctly, no near-expiry tokens, no auth errors in logs | monthly | 2026-05-07 | audit-2026-05-08 | |
| AM.4 | Monthly Alter knowledge base size check: count rows in agent_memory, archived vs active, growth pace. Archive cycle running per memory-summarizer | monthly | 2026-05-07 | audit-2026-05-08 | |
| AM.5 | Quarterly Alter feature roster review: walk through Alter/alter/src/services/ and confirm each active service is still used by founder. Decommission unused services to reduce surface area | quarterly | 2026-05-07 | audit-2026-05-08 |
| ID | Task | Cycle | Color | Date | Commit |
|---|---|---|---|---|---|
| AL.1 | Pending port: Decision Support (Alter services/decision-support.js, 256 LOC) to Personal Universal as lib/decision-support.js. Module already copied to Personal but NOT WIRED. See Personal master plan PD.2. This row is the Alter-side mirror | one-shot | 2026-05-07 | 66b4a74 | |
| AL.2 | Annual review of 3 ALTER-ONLY exceptions confirmed 2026-05-02: Voice Profile (identity-bound calibration), YouTube Posting Suite (founder MindsetMaverick channel, OAuth scope risk without F&B-audience case), Dating Coach (out of Personal positioning, sensitive data). Verify each exception still warranted | annual | 2026-05-07 | audit-2026-05-08 | |
| AL.3 | Document any Alter feature added since previous LOCK-001 audit. Founder names new service, Claude assesses portability and recommends ALTER-ONLY mark or port plan | triggered | 2026-05-09 | 99e00a6 | |
| AL.4 | WhatsApp Outbound foundation deployed across all 3 products: 6 DB tables, 4 lib modules (wa-contacts, wa-stop-detector, wa-audit, wa-outbound-relay), addon catalog entry, template-fallback mappings. orbis-universal + Alter commit chain. LOCK-001 satisfied | one-shot | 2026-05-11 | ed21ee2 | |
| AL.5 | 18 Meta WhatsApp templates (6 base x 3 langs en/ru/ka) submitted via Graph API + all APPROVED. Idempotent submission script alter/src/scripts/wa-submit-templates.js. All UTILITY category | one-shot | 2026-05-11 | 920d002 | |
| AL.6 | First real WhatsApp outbound deliveries via Alter-number to third-party contacts: Pavel Lobanov (+13476342560) + Shorena (+13236830801). Both via ai_message_relay_ru template with AI Act disclosure header. Meta webhook confirmed delivery | one-shot | 2026-05-11 | manual-relay | |
| AL.7 | 615 unique contacts bulk-imported into wa_contacts from founder's Google Contacts + iPhone vCard. Dedup at E.164 (libphonenumber + Georgian-prefix fallback). Two import scripts (Google + vCard) | one-shot | 2026-05-10 | 4ee6640 | |
| AL.8 | Contact-share intercept live: when founder forwards vCards via WhatsApp "+ → Contacts → Send" to Alter number, message-handler.js saves them to wa_contacts and replies with summary. Raw payload DLQ at /opt/alter/var/wa-contact-share-dlq.jsonl | one-shot | 2026-05-10 | 99e00a6 |
| ID | Task | Cycle | Color | Date | Commit |
|---|---|---|---|---|---|
| AC.1 | Pre-feature checklist: any new Alter cron or service requires LOCK-001 evaluation BEFORE implementation. Document expected disposition (port to Personal or ALTER-ONLY rationale) before writing code | triggered | 2026-05-09 | 99e00a6 | |
| AC.2 | Validation period: any new Alter feature runs in production on founder's data for at least 14 days before considering Personal port. This is the canary's whole point - prove value on real data first | triggered | 2026-05-09 | ||
| AC.3 | Port quality gate: when porting an Alter service to Personal, the Personal version must reach the same calibration depth (synthetic E2E plus real founder-data E2E) as the Alter version had at port time | triggered | 2026-05-07 | ||
| AC.4 | Maintain personal_port_gap_<date>.md memory file as the live ledger of pending/completed/ALTER-ONLY ports. Update on any Alter feature change. Successor ledger project_wa_outbound_foundation_2026-05-08.md for active build | triggered | 2026-05-09 | 99e00a6 | |
| AC.5 | Georgian transliteration in lib/wa-contacts.expandQueryVariants: extend Cyrillic-Latin map with Georgian script. Query like "შორინა" should match "Shorena". 33-letter Mkhedruli mapping + Georgian nickname dictionary | one-shot | 2026-05-11 | ||
| AC.6 | Personal + Business outbound endpoint wiring: /api/{personal,business}/addons/whatsapp-outbound/{activate,deactivate} with compliance checkbox + DPA signature; contacts CRUD + CSV import. LLM tools already registered (06fb2aa), endpoints pending | one-shot | 2026-05-11 | ||
| AC.7 | Google Contacts sync cron: daily delta sync via People API. Per-tenant for Personal/Business (per-manager OAuth); single-tenant for Alter. Auto-upsert into wa_contacts | one-shot | 2026-05-11 | ||
| AC.8 | Quality monitor cron: hourly check of WABA quality_rating + messaging_tier. Auto-pause outbound when rating drops to YELLOW/RED, Sentry alert, manual resume gate | one-shot | 2026-05-11 | ||
| AC.9 | Double opt-in flow worker: cron that ages wa_opt_in_state pending rows. YES -> add to wa_contacts. STOP or 7-day TTL -> auto-suppress. Required for CSV-import path | one-shot | 2026-05-11 | ||
| AC.10 | DPA generator: produces Data Processing Agreement PDF with EU SCCs + sub-processor disclosure (Meta, Supabase, DigitalOcean) when manager activates manage_whatsapp_outbound. Manager signs electronically; signature_metadata captured in client_addons | one-shot | 2026-05-11 | ||
| AC.11 | Single source of truth for template definitions: wa-submit-templates.js currently hardcodes 18 templates' bodies which also live in audits/2026-05-08-whatsapp-template-pack-v1.md. Merge into one data file consumed by both | one-shot | 2026-05-11 |
| ID | Task | Cycle | Color | Date | Commit |
|---|---|---|---|---|---|
| AP.1 | Quarterly Alter database backup verification: pull Supabase backup snapshot for project peceprzqoivfdqezaofj, restore to staging, verify integrity. (Companion to Business Universal GAP-E) | quarterly | 2026-05-07 | audit-2026-05-08 | |
| AP.2 | KMS encryption decision for Alter at-rest data (linked to Business Universal item H.1 in tech-debt). Founder picked GCP KMS 2026-05-09 (already-paid GCP account, single login, cheapest). Implementation pending: provision keyring, integrate via google-cloud/kms node SDK, migrate sensitive fields from env-key to KMS-wrapped DEK | one-shot | 2026-05-09 | ||
| AP.3 | Annual Alter access scope review: list all Google OAuth scopes Alter currently holds (Gmail full, Calendar, Drive, YouTube force-ssl), confirm each still required, drop unused | annual | 2026-05-07 | audit-2026-05-08 | |
| AP.4 | Founder Alter data export ability: documented procedure for the founder to export his own Alter data (memory rows, contacts, briefs). Right-to-data-portability principle even for sole user. Estimated: 2 to 3 hours to write export script + runbook | one-shot | 2026-05-07 | 62f9fc4 |
| ID | Task | Cycle | Color | Date | Commit |
|---|---|---|---|---|---|
| AH.1 | Sentry orbis-alter project: alert rule calibration after 30 days of production data (matches Business GAP-D pattern but for Alter). Tune thresholds based on actual error volume | one-shot | 2026-05-07 | audit-2026-05-08 | |
| AH.2 | Monthly Alter Sentry digest: founder reads error summary from orbis-alter Sentry project, decides whether each open issue is "fix now" / "fix later" / "wontfix" | monthly | 2026-05-07 | audit-2026-05-08 | |
| AH.3 | Service uptime SLO definition for alter.service: target 99% over 30 days (about 7.2 hours acceptable downtime). Define measurement method via systemd journal and Sentry session-tracking | one-shot | 2026-05-07 | c030ee0 | |
| AH.4 | Cron observability for Alter service-side crons: any Alter cron failure should fire Sentry alert via the existing orbis-alter DSN routing. Verify wiring (companion to Business GAP-J but Alter-specific) | one-shot | 2026-05-07 | 08bf324 | |
| AH.5 | Close 8 behavioral failure modes caught in May 6-7 prod log: time-hallucination, ask-vs-act, no-repeat-of-visible, hard-rule-consistency, vision-prereq, URL-invention, fact-confabulation, parallel-question+action. Implemented as BEHAVIORAL GUARDRAILS section in system-prompt.md + VISION-PREREQ guard + RED override-line in dating-coach.js. LOCK-001: ported to Personal Universal personal-prompt.md commit e56d8b3 | one-shot | 2026-05-07 | 868949f | |
| AH.6 | Fix YouTube monitor: passes video ID where YouTube API expects channel ID for allThreadsRelatedToChannelId parameter; 144 errors per 30 days. Patch youtube-monitor.js to use correct ID type | one-shot | 2026-05-08 | already-fixed-2026-04-28 | |
| AH.7 | sendTemplate header_params bug closed on BOTH sides of LOCK-001: Alter services/whatsapp.js + orbis-universal lib/whatsapp-client.js. Component ordering preserved (header before body before buttons). Verified by real Shorena delivery post-fix | one-shot | 2026-05-11 | ed21ee2 | |
| AH.8 | Banned the phantom "разработчик" attribution: system-prompt WHO DOES WHAT HARD RULE + TOP-OF-PROMPT NON-NEGOTIABLE block. Triggered after Alter confabulated "жду шаблон от разработчика" atop real Meta 132000 error | one-shot | 2026-05-11 | d798b60 | |
| AH.9 | Code review round-1 fixes: wa-audit return shape upgraded to {id, ok, skipped, error}; relay propagates audit_failed + audit_error; contact-share intercept writes raw vCard to DLQ before parse; expandQueryVariants extracted into shared lib/wa-contacts so 3 product agents reuse it | one-shot | 2026-05-10 | 99e00a6 |