{ "version": "1.0", "timestamp": "2026-04-30T15:03:14Z", "phase": "05", "phase_name": "MVP deployment", "phase_dir": ".planning/phases/05-mvp-deployment", "plan": 0, "task": 0, "total_tasks": 0, "status": "paused", "completed_tasks": [ { "id": 1, "name": "Fix path-based base_url normalization and add WS debug visibility", "status": "done", "commit": "7e5f9c2" }, { "id": 2, "name": "Add Matrix room recovery, reinvite flow, and default-agent warning behavior", "status": "done", "commit": "7e5f9c2" }, { "id": 3, "name": "Switch user file handling to workspace-root filenames with copy-style collision suffixes", "status": "done", "commit": "7e5f9c2" }, { "id": 4, "name": "Verify recent routing incident cause", "status": "done", "progress": "Confirmed that config lookup is exact-MXID based; mismatch in homeserver suffix caused fallback to the first agent." } ], "remaining_tasks": [ { "id": 5, "name": "Build and publish a fresh production image with the current workspace-root attachment contract", "status": "not_started" }, { "id": 6, "name": "Send the new digest to platform and request Matrix bot redeploy", "status": "not_started" } ], "blockers": [ { "description": "Platform redeploy is still required after the next image publish.", "type": "external", "workaround": "None until a fresh digest is published." }, { "description": "Old Phase 04 planning files still contain placeholder content.", "type": "technical", "workaround": "Ignore for the current deploy task; clean later as planning debt." } ], "human_actions_pending": [ { "action": "Use exact Matrix MXIDs in user_agents, including the real homeserver suffix.", "context": "Routing fallback to the first agent occurs whenever the config key does not exactly match the sender.", "blocking": true }, { "action": "Redeploy matrix-bot after the new image is published.", "context": "Config edits alone need a container restart; the file-contract code change needs a new image first.", "blocking": true } ], "decisions": [ { "decision": "Keep fallback to the first agent for users missing from user_agents.", "rationale": "Platform wanted that behavior to remain available, but with explicit user warning.", "phase": "05" }, { "decision": "Require exact Matrix MXID matching in user_agents.", "rationale": "Current routing is deterministic and simple; no fuzzy matching or homeserver aliasing was introduced.", "phase": "05" }, { "decision": "Use workspace-root filenames for incoming user files and Windows-style copy suffixes on collision.", "rationale": "Platform requested removal of incoming/outgoing directory split and timestamp-prefixed names.", "phase": "05" } ], "uncommitted_files": [ ".planning/HANDOFF.json", ".planning/STATE.md", ".planning/phases/05-mvp-deployment/.continue-here.md", "README.md", "adapter/matrix/agent_registry.py", "adapter/matrix/bot.py", "adapter/matrix/files.py", "adapter/matrix/handlers/auth.py", "adapter/matrix/handlers/chat.py", "adapter/matrix/reconciliation.py", "adapter/matrix/routed_platform.py", "config/matrix-agents.example.yaml", "docs/deploy-architecture.md", "sdk/real.py", "tests/adapter/matrix/test_dispatcher.py", "tests/adapter/matrix/test_files.py", "tests/adapter/matrix/test_invite_space.py", "tests/adapter/matrix/test_reconciliation.py", "tests/platform/test_real.py", "tests/test_deploy_handoff.py" ], "next_action": "Build and publish a fresh production image from the current worktree, then send the digest to the platform for redeploy.", "context_notes": "Current runtime logic appears correct. The last reported routing bug was traced to config mismatch between the real Matrix sender and the user_agents key. Do not reuse the previously published recovery image for deployment because it does not include the final workspace-root file contract." }