wip: phase 05 paused after deployment handoff

This commit is contained in:
Mikhail Putilovskij 2026-04-28 21:41:13 +03:00
parent 5b537880ae
commit 5679b95450
2 changed files with 103 additions and 56 deletions

View file

@ -1,100 +1,86 @@
{
"version": "1.0",
"timestamp": "2026-04-27T18:44:51.832Z",
"timestamp": "2026-04-28T18:39:43.064Z",
"phase": "05",
"phase_name": "deployment",
"phase_dir": null,
"plan": 0,
"phase_name": "MVP Deployment",
"phase_dir": ".planning/phases/05-mvp-deployment",
"plan": 4,
"task": 0,
"total_tasks": 0,
"status": "pre-planning",
"status": "paused",
"completed_tasks": [
{
"id": 1,
"name": "Research platform repos (agent, agent_api, master)",
"name": "Finalize multi-agent surface image handoff",
"status": "done",
"commit": null
"commit": "5b53788"
},
{
"id": 2,
"name": "Clarify deployment topology with platform team",
"name": "Publish Docker image for the Matrix surface",
"status": "done",
"commit": null
"artifact": "mput1/surfaces-bot:latest",
"digest": "sha256:26ba3a49290ab7c1cf0fa97f3de3fefdc70b59df7e6f1e0c2255728f8e2369be"
},
{
"id": 3,
"name": "Create docs/deploy-architecture.md",
"name": "Verify multi-agent file-volume routing contract",
"status": "done",
"commit": null
"evidence": "tests cover /agents/17/incoming and /agents/17/output routing"
}
],
"remaining_tasks": [
{"id": 4, "name": "Merge feat/matrix-direct-agent-prototype → main", "status": "not_started"},
{"id": 5, "name": "Plan Phase 05 (deployment)", "status": "not_started"},
{"id": 6, "name": "Execute Phase 05", "status": "not_started"}
{
"id": 1,
"name": "Platform team integrates the published surface image into their 25-30 agent deployment",
"status": "external"
},
{
"id": 2,
"name": "Run a real platform smoke test with production Matrix credentials, matrix-agents.yaml, and shared /agents volume",
"status": "not_started"
}
],
"blockers": [
{
"description": "agent_api #9-clientside-tool-call убирает attachments и MsgEventSendFile — если смержат до деплоя, сломает file transfer",
"description": "Full production verification depends on the platform team's real 25-30 agent orchestration and volume mounts.",
"type": "external",
"workaround": "Используем master пока #9 не merged. Уточнить у Азамата сроки."
},
{
"description": "AGENT_ID и COMPOSIO_API_KEY значения для каждого агента — нужны от платформы",
"type": "human_action",
"workaround": "Запросить у Азамата перед деплоем"
"workaround": "Use docker-compose.fullstack.yml only as local E2E harness; production uses mput1/surfaces-bot:latest plus platform-managed agents."
}
],
"human_actions_pending": [
{
"action": "Получить значения AGENT_ID и COMPOSIO_API_KEY для каждого агента от платформы",
"context": "Composio смержен в main platform-agent, теперь обязателен",
"action": "Send platform the image tag, digest, deploy docs, and matrix-agents.yaml contract",
"context": "The bot is published as a single surface container; platform supplies agents, base_url values, and /agents/N volume mounts.",
"blocking": true
},
{
"action": "Уточнить у Азамата сроки мержа agent_api #9 (убирает attachments/MsgEventSendFile)",
"context": "Мы строим file transfer на этих фичах из master",
"blocking": false
},
{
"action": "Уточнить: chat_id=0 для всех или используем разные chat_id для C1/C2/C3",
"context": "Платформа показала пример с одним AgentApi на агента без явного chat_id",
"blocking": false
"action": "Platform prepares production config/matrix-agents.yaml",
"context": "Each external agent needs agent_id, base_url, and workspace_path such as /agents/17.",
"blocking": true
}
],
"decisions": [
{
"decision": "Один инстанс Matrix-бота на всех пользователей, один агент-контейнер на пользователя",
"rationale": "Подтверждено платформой. Reverse proxy на lambda.coredump.ru:7000 роутит по пути /agent_N/",
"phase": "pre-05"
"decision": "Ship one generic Matrix surface image, not a compose stack with 25-30 agents.",
"rationale": "The platform owns agent lifecycle/orchestration; the surface only needs base_url and workspace_path per agent.",
"phase": "05"
},
{
"decision": "Файлы через shared volume /agents/, не через API",
"rationale": "Surface и агент видят один volume. Surface пишет файл → передаёт путь в attachments. Агент эмитит MsgEventSendFile → Surface читает файл и шлёт в Matrix",
"phase": "pre-05"
"decision": "Make SURFACES_BOT_IMAGE explicit and document the published mput1/surfaces-bot image.",
"rationale": "Docker Hub push access is namespace-specific; hardcoding mrkan0 caused insufficient_scope.",
"phase": "05"
},
{
"decision": "Используем agent_api master (с attachments и MsgEventSendFile), не ветку #9",
"rationale": "master стабильный, #9 в разработке и убирает нужные нам фичи",
"phase": "pre-05"
},
{
"decision": "Конфиг: два словаря — user_id→agent_id и agent_id→{base_url, workspace_path}",
"rationale": "Платформа подтвердила статический маппинг для MVP без Master",
"phase": "pre-05"
},
{
"decision": "Master (platform-master feat/storage) не используем для MVP",
"rationale": "Ещё в разработке. Используем статический конфиг. При готовности Master — мигрируем.",
"phase": "pre-05"
"decision": "Keep docker-compose.fullstack.yml as internal E2E only.",
"rationale": "It validates the bot plus one local agent, but is not a model of production multi-agent orchestration.",
"phase": "05"
}
],
"uncommitted_files": [
"docs/deploy-architecture.md",
"docs/superpowers/plans/2026-04-24-matrix-multi-agent-routing-and-restart-state.md",
"config/matrix-agents.yaml",
".planning/STATE.md"
".planning/HANDOFF.json",
".planning/phases/05-mvp-deployment/.continue-here.md"
],
"next_action": "Запустить /gsd-plan-phase 05 для планирования фазы деплоя. Прочитать docs/deploy-architecture.md перед планированием.",
"context_notes": "Phase 04 полностью завершена, ветка feat/matrix-direct-agent-prototype готова к merge. Этот сеанс был посвящён архитектуре деплоя — исследовали платформу, обсуждали с командой. Всё что знаем про деплой — в docs/deploy-architecture.md. Phase 05 = деплой: обновить конфиг, sdk/real.py, добавить file transfer в Matrix адаптер, написать docker-compose."
"next_action": "Resume by coordinating platform integration: confirm they use mput1/surfaces-bot:latest, mount /agents, provide config/matrix-agents.yaml, then run a real Matrix smoke test.",
"context_notes": "Phase 05 implementation and handoff commit 5b53788 are pushed. The Docker image was successfully built and pushed by the user as mput1/surfaces-bot:latest with digest sha256:26ba3a49290ab7c1cf0fa97f3de3fefdc70b59df7e6f1e0c2255728f8e2369be. Existing unrelated .planning dirt and a local jpg remain in the worktree and were intentionally not included in the handoff commit."
}

View file

@ -0,0 +1,61 @@
---
phase: 05-mvp-deployment
task: 0
total_tasks: 0
status: paused_after_handoff
last_updated: 2026-04-28T18:39:43.064Z
---
<current_state>
Phase 05 implementation and deployment handoff are complete. The latest handoff commit is `5b53788` on `feat/deploy`, pushed to origin. The Matrix surface image was built and published as `mput1/surfaces-bot:latest` with digest `sha256:26ba3a49290ab7c1cf0fa97f3de3fefdc70b59df7e6f1e0c2255728f8e2369be`.
The production model is one generic Matrix surface container connected to 25-30 externally managed platform agents. The surface does not start or manage agent containers.
</current_state>
<completed_work>
- Finalized `docker-compose.prod.yml` as a bot-only handoff using required `SURFACES_BOT_IMAGE`.
- Kept `docker-compose.fullstack.yml` as internal E2E harness with one local `platform-agent` and local `agent_api` build context.
- Updated `Dockerfile` so production installs `platform/agent_api` from Git and no longer depends on local `external/`.
- Updated `.dockerignore` to keep `external/`, `.planning/`, tests, local runtime state, and real `config/matrix-agents.yaml` out of the image context.
- Updated `README.md`, `.env.example`, `docs/deploy-architecture.md`, and `config/matrix-agents.example.yaml` with the multi-agent contract.
- Added deploy contract tests and file-volume routing tests covering `/agents/17/incoming` and `/agents/17/output`.
- Verified handoff slice: `74 passed`, ruff clean, compose render clean, `git diff --check` clean.
- User built and pushed `mput1/surfaces-bot:latest` successfully.
</completed_work>
<remaining_work>
- Send platform the published image tag/digest and the deploy contract:
- `mput1/surfaces-bot:latest`
- `sha256:26ba3a49290ab7c1cf0fa97f3de3fefdc70b59df7e6f1e0c2255728f8e2369be`
- one surface container, external 25-30 agents, routing through `config/matrix-agents.yaml`
- Platform must provide real `config/matrix-agents.yaml` with `agent_id`, `base_url`, and `workspace_path` for each agent.
- Platform must mount shared storage so bot-side `/agents/N` is the same storage each `agent_N` sees as `/workspace`.
- Run a real Matrix smoke test against platform-managed agents after the platform deploys the image.
</remaining_work>
<decisions_made>
- Ship one generic Matrix surface image instead of attempting to model 25-30 agent services in our production compose.
- Keep agent lifecycle, scaling, and orchestration owned by the platform.
- Use `SURFACES_BOT_IMAGE=mput1/surfaces-bot:latest` as the documented image for handoff.
- Preserve `docker-compose.fullstack.yml` only as a local/internal E2E harness, not as production topology.
- Treat file exchange as a shared-volume contract: user files go to `{workspace_path}/incoming/...`; agent output is read from `{workspace_path}/output/...`.
</decisions_made>
<blockers>
- Full production verification is external: it requires the platform team's real 25-30 agent orchestration, reverse proxy routes, Matrix credentials, and volume mounts.
- Existing unrelated `.planning` changes and a local jpg remain in the worktree; they predate this pause and were not part of the deploy handoff commit.
</blockers>
<context>
If resuming, do not re-open the old single-chat / DM-first deployment direction. The accepted model is Space+rooms, per-room `platform_chat_id`, one Matrix surface image, and external per-agent routing via `matrix-agents.yaml`.
The likely next conversation with platform should be operational, not implementation-heavy: confirm they pull `mput1/surfaces-bot:latest`, mount `/agents`, provide `matrix-agents.yaml`, and run one user-to-agent file round trip.
</context>
<next_action>
Start by sending platform the image tag/digest and the concise deployment checklist. Then coordinate the first real smoke test: one Matrix user mapped to one agent, text message, incoming file to `/agents/N/incoming`, outgoing file from `/agents/N/output`.
</next_action>