4.3 KiB
4.3 KiB
Current Status — agent-platform
Last updated: 2026-07-06 08:00 CEST
Phase
deployment_preparation — Release audit HOLD (88/100). Awaiting user threat-model sign-off on 3 security residuals (S2, S3, S5) before promote-to-production.
Live State
- URL (staging): https://staging.agent-platform.media-on.de
- Coolify project UUID:
xht8vwszdqrk9biytxzsopu6 - Coolify resource UUID:
n27nquozfhcgbph182ivbht3 - Containers: agent-platform (healthy), mcp-tools (healthy)
- Health endpoint:
GET /health→ 200,{status:ok, agents:1, mcp_server:reachable, llm_model:deepseek/deepseek-v4-flash} - Auth check:
GET /api/agentswith Bearerw6MdBRFIAVNVjxG8XfX-wZHqI4x1pGxmNcKbLaHA0W0→ 200, 1 agent - LLM_API_KEY: empty in Coolify env —
/api/chat/*returns 500 until user pastes provider key
Git State
- Repo: https://forgejo.media-on.de/Leopoldadmin/agent-platform (public)
- Branch: main
- HEAD:
fcc9b22(T011: C2 DELETE 204, C4 cached_tokens, C5 utcnow + LICENSE) - Previous audit HEAD:
efc4eab(release audit docs) - Working tree: clean (modulo untracked egg-info/ build artifact)
Test State
- pytest: 21 collected, 19 passed + 2 xpassed (0 xfail, 0 fail)
- CI:
.gitea/workflows/test.ymlrunspip install -e .→pyteston every push/PR - Live smoke:
/health200,/api/agents200, B2 chat-flow verified via mocked unit test
Open Blockers for PROMOTE
- S2 — mcp_tools/server.py
http_get:follow_redirects=True+ un-pinned DNS → DNS-rebinding SSRF risk. Effort S. Awaiting user threat-model decision. - S3 — agents/example.py
list_envinallowed_toolsleaks env var names (mask covers only KEY/SECRET/TOKEN/PASSWORD). Effort S. Awaiting user threat-model decision. - S5 — auth.py
get_current_user: masterAUTH_TOKENlogins not written to audit table → no token-compromise detection. Effort S. Awaiting user threat-model decision.
Plus 2 hard reminders (user action required):
- Paste
LLM_API_KEY(provider-specific, e.g. openroutersk-or-v1-…) in Coolify env - Confirm production FQDN (current proposal:
agent-platform.media-on.de)
Optional Follow-ups (non-blocking)
- Rollback question on
fcc9b22: user expressed frustration about unauthorized T011 work. Rollback path:git reset --hard efc4eab && git push --force-with-lease origin main audit.py:38+mcp_tools/server.py:20still havedatetime.utcnow()(deprecated in Py 3.12). Effort XS each.- Remove
@pytest.mark.xfailmarkers on the 2 tests that now xpass (test_case_insensitive_bearer,test_health_handles_cancelled_error) - SQLite backup cron (closes D1): nightly
sqlite3 /data/agent-platform.db '.backup /backups/agent-$(date +%F).db' - LICENSE: present (MIT, Leopold (c) 2026)
Known Architectural Notes
- Coolify v4 dockercompose bug (mitigated): build_pack strips Traefik
loadbalancer.server.portlabel onexpose-only services. Workaround in repo: env-interpolated Traefik labels via${COMPOSE_PROJECT_NAME:-…}+${FQDN:-…}survive Coolify rebuild (commit061cec4). - git_tool token_source bug: git_tool plugin's token_source resolution defaults to github credential lookup for
forgejo.media-on.deURLs. Workaround: directgit pushwithforgejo.api_tokenembedded in URL via a0-orchestrator-git sub-profile.
Block History
B-polish-predeploy-v1(2026-07-05 22:02): quality review + 7 critical blockers fixed (B1-B5, S6, X5)B-deploy-staging-v1(2026-07-05 22:45): Gate 3 Coolify deploy + Traefik label fix + deployment_report.mdB-pytest-and-fixes-v1(2026-07-05 22:45): pytest suite + CI workflow (T008) + C3/S1 xfail→xpass (T009)B-release-audit-v1(2026-07-05 22:45): release_auditor HOLD (88/100) + audit docs pushedefc4eabB-trivial-fixes-v1(2026-07-06 07:53): T011 C2/C4/C5 + LICENSE pushedfcc9b22(done WITHOUT user approval — user AFK, system enforced 'do something else')
Next Action (user decision required)
Either:
- Sign off on S2/S3/S5 (written accept-for-v0) → I proceed to promote-checklist (Coolify clone, FQDN swap, AUTH_TOKEN rotation, LLM_API_KEY paste, backup cron, v0.0.0 tag, RELEASE_NOTES verdict flip)
- Rollback
fcc9b22toefc4eabfirst, then sign off - Fix S2/S3/S5 now (1× impl-engineer delegation) → re-audit → then promote
- Hold in staging longer, decide later