v0.2.1 — Compliance Spine + MCP-First
v0.2.1 — Compliance Spine + MCP-First
Seção intitulada “v0.2.1 — Compliance Spine + MCP-First”Data: 2026-06-08
Commit: 147009f
Tag: v0.2.1
Branch: feature/mcp-first-pivot (pushed)
Highlights
Seção intitulada “Highlights”- Surface pivot MCP-first — ADR-002 substitui admin Next.js standalone por MCP server + MCP Apps + Open WebUI sidecar. Cancelou ~3-4 semanas de Next.js admin work; mesma cobertura operacional virou ~12 MCP Apps inline no chat.
- 146 tests green em 11 workspaces (
pnpm -r testclean). - Compliance Spine landed —
@canna/apiFastify thin +@canna/read-modelsDrizzle projections +@canna/cryptoenvelope encryption +@canna/sngpcmock XML +@canna/workerBullMQ scaffold. - MCP server + 3 Apps prontos —
apps/mcp(@modelcontextprotocol/sdk+ ext-apps) +packages/ui-appscomMemberQuotaCardApp,TraceabilityTimelineApp,DispensationFormApp. - Open WebUI smoke validated 2026-06-08 — sub-agent G rodou stack docker-compose end-to-end. Bundles renderizam, postMessage contract OK, OWUI registration via DB confirmado. Verdict: PARTIAL PASS (seed script Lane I em flight). Detalhe em ADR-002 § Smoke Validation.
New packages/apps
Seção intitulada “New packages/apps”| Workspace | Tipo | Função |
|---|---|---|
@canna/api | app | Fastify thin endpoints — proxy commands para @canna/app-services |
@canna/read-models | package | Drizzle projections (member-quota, inventory-summary, dispensation-history, member-list, inventory-lot) |
@canna/crypto | package | Per-member envelope encryption (DEK random + Site KEK). LGPD Art. 11 |
@canna/sngpc | package | XML schema + submit mock (real submission em v0.2.1 worker) |
@canna/worker | app | BullMQ jobs (SNGPC async, PDF render, email) |
@canna/ui-apps | package | 3 MCP Apps (member-quota-card, traceability-timeline, dispensation-form) — single-file HTML bundles |
apps/mcp | app | MCP server TypeScript (@modelcontextprotocol/sdk + ext-apps) — stdio transport |
ops/openwebui/ | ops | docker-compose OWUI v0.9.6 + Postgres 16 + Redis 7 + Caddyfile example + Kamal deploy notes |
Architecture changes
Seção intitulada “Architecture changes”Domain Kernel intacto desde v0.2.0b (ADR-001 spike gate passed). Surface pivot consolidado em ADR-002.
Operação rotineira de dispensação cabe muito bem em fluxo conversacional. MCP Apps spec final (jan 2026) torna o caminho viável. Open WebUI v0.9.6+ tem suporte MCP nativo + OAuth 2.1 — chat UI gratuita. Time pequeno, cada hora gasta em Next.js admin é hora não gasta em MCP tools. Para v0.2.1 até v1.0 o canna-br não terá admin Next.js standalone — toda interação humana acontece via MCP server + MCP Apps inline + REST
apps/api(Nível-4 critical commands com TOTP).
Test coverage
Seção intitulada “Test coverage”pnpm -r test em 2026-06-08, 146 specs green.
| Workspace | Tests |
|---|---|
@canna/domain (membership + inventory + dispensation) | 50 |
@canna/event-store (in-memory + postgres testcontainers) | 13 |
@canna/app-services | 6 |
@canna/crypto | 18 |
@canna/read-models | 7 |
@canna/sngpc | 10 |
@canna/shared | 16 |
@canna/ui-apps (registry + build-output) | 6 |
@canna/api | 8 |
@canna/mcp | 8 |
@canna/worker | 3 |
@canna/docs | build-only |
| Total | 146 (1 test multiplicado por describe.each) |
Smoke evidence
Seção intitulada “Smoke evidence”Sub-agent G smoke 2026-06-08 — OWUI v0.9.6 + Postgres 16 + Redis 7 docker-compose stack. Cold start 44s, 3 GB RAM steady. 9 screenshots em ops/openwebui/smoke/:
01-landing.png— OWUI sign-in02-logged-in.png— admin account02-mcp-servers.png— MCP servers list (empty initial)03-admin-integrations.png— Settings → Integrações04-tool-servers-empty.png— Tool Servers page (confirma seed pendente)05-member-quota-empty.png—MemberQuotaCardAppantes do payload06-member-quota-rendered.png—MemberQuotaCardAppcom payload aplicado07-dispensation-form.png—DispensationFormAppinputs08-traceability-timeline.png—TraceabilityTimelineAppphases ordenadas
Detalhe técnico (postMessage contract, payload shapes, GOTCHA do mcp_config.json, verdict) em ADR-002 § Smoke Validation.
Breaking changes
Seção intitulada “Breaking changes”- Admin Next.js standalone — descartado. Estava no roadmap original v0.2.1 como interface canônica. Movido para Ideas Park no roadmap. Caso surja associação que não consegue operar via chat, avaliar PWA fallback naquele momento — não pré-construir.
- Toda interação humana com o sistema agora acontece via Open WebUI chat + MCP Apps inline. REST
apps/apicontinua exposto mas só para Nível-4 critical commands (crypto deletion, role change, recall, SNGPC produção) com TOTP.
Migration notes
Seção intitulada “Migration notes”Nenhuma. Sem deploy de produção anterior, sem schema migration, sem upgrade path. Pré-piloto.
Next phase pointers
Seção intitulada “Next phase pointers”- v0.2.1.x — Kamal deploy (Lane H) —
canna-br.fonsecagabriel.com.brCoolify+Traefik. Reusa pattern Mukutu Coolify deploy. OWUI sidecar + canna-mcp stdio + Postgres + Redis. TLS via Traefik wildcard*.fonsecagabriel.com.br. - v0.2.1.x — OWUI tool-server seed script (Lane I) —
ops/openwebui/scripts/seed-tool-servers.tsidempotente. Lêmcp_config.jsontemplate, fazPOST /api/v1/configs/tool_serverscom bearer admin. Roda no kamal post-deploy hook. apps/mcpHTTP transport para SSE clients — atualmente só stdio. SSE permite hosts remotos (Claude.ai web, ChatGPT) consumirem o MCP server sem subprocess local. Deferred — stdio cobre Open WebUI sidecar (caminho v0.2.1 piloto).- MCP Tools L1/L2/L3 completos — 6 read + 3 draft + 3 write-with-approval. Cobertura mínima para core loop “dispensador pergunta → agente abre form → confirma → 3 eventos atômicos → RT aprova PendingAction”. Em progresso pós-piloto.