Captures the 2026-05-29 decision to derive admin plan dropdown + validation from the plan_limits table rather than hand-duplicating the allow-list across 6+ sites. Triggered by the prod "AI sessions down" report that traced to the admin dropdown still offering the dead 'team' slug. Adds the matching backlog entry to TODO.md with duplication sites enumerated. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
.ai/ — dual-agent handoff system
ResolutionFlow uses two coding agents: Claude Code (primary) and OpenAI Codex (resume when Claude hits session or weekly limits). This directory holds the shared state that lets either agent start a session with full context.
Files
| File | Holds | Written when | Read when |
|---|---|---|---|
| PROJECT_CONTEXT.md | Stable repo truth: stack, structure, SaaS shape, ConnectWise, coding standards, frontend patterns, critical lessons | Only when the repo's shape changes | Every session start |
| CURRENT_TASK.md | The single active task: goal, DoD, assumptions, out-of-scope | On task start; status updates during work | Every session start |
| HANDOFF.md | Exact resume point: branch, where you left off, next steps, blockers | On session end / context-window limit | Every session start (most important) |
| TODO.md | Backlog of work NOT currently active | When deferring or queueing work | Only when CURRENT_TASK.md is complete |
| DECISIONS.md | Append-only architectural decision log | When an architectural choice is made | Skim top entries each session |
| SESSION_LOG.md | Append-only chronological history | On session end | Only when broader context is needed |
Agent-specific tooling lives at the repo root:
- ../CLAUDE.md — Claude Code's tooling (GitNexus, gstack slash commands, Claude trailer)
- ../AGENTS.md — OpenAI Codex's tooling (grep/rg fallbacks, Codex trailer)
Both root files contain an identical shared-protocol block. If you edit one, edit the other.
The handoff ritual
At session end (limit hit, task complete, or user stop): update HANDOFF.md to reflect the new resume point, update CURRENT_TASK.md status if it changed, append to DECISIONS.md if you made an architectural call, append a session entry to SESSION_LOG.md, and WIP-commit any dirty working tree with wip(handoff): <one-line> unless told otherwise. Don't push.
How to invoke a resume
Tell the agent:
Read CLAUDE.md (or AGENTS.md) and follow its instructions.
The agent will read its root file, which directs it to .ai/PROJECT_CONTEXT.md, .ai/CURRENT_TASK.md, and .ai/HANDOFF.md before doing anything else.
Recovery
The previous monolithic CLAUDE.md is recoverable via:
git show pre-ai-handoff:CLAUDE.md
(Tag pre-ai-handoff on commit e110fed — the snapshot taken before this migration.)