PRD-016 — Agentic Deployment, Versioning & Release Management
1. Objetivo
Definir o mecanismo de versionamento, empacotamento, validação, publicação, rollout, canary e rollback de toda a plataforma Agentic Work.
O objetivo é garantir que o agente não seja atualizado como um simples conjunto de arquivos.
Uma alteração poderá envolver simultaneamente:
- código;
- capabilities;
- policies;
- knowledge;
- semantic UI;
- prompts;
- modelos;
- evaluation datasets;
- schemas;
- manifests.
Portanto, a unidade de deployment deverá ser um Agent Release Bundle versionado e verificável.
2. Problema
Imagine que uma nova versão da documentação altere a interpretação de:
“validade da permissão”.
Ou que uma nova capability seja publicada.
Ou que uma policy seja alterada.
Se cada componente possuir deployment independente, poderemos acabar com:
Code v42
Knowledge v101
Capabilities v17
Policies v23
UI Manifest v11
Prompt v8
sem saber se essas versões são compatíveis.
Isso cria comportamento imprevisível.
3. Princípio
Uma execução do agente deve saber exatamente qual conjunto de artefatos estava ativo quando tomou uma decisão.
Portanto:
Agent Execution
↓
Release Bundle
↓
Immutable Version
4. Agent Release Bundle
Modelo:
interface AgentReleaseBundle {
releaseId: string;
version: string;
createdAt: string;
agentVersion: string;
knowledgeVersion: string;
capabilityVersion: string;
policyVersion: string;
uiManifestVersion: string;
promptVersion: string;
evaluationVersion: string;
runtimeVersion: string;
status: ReleaseStatus;
}
5. Release ID
Exemplo:
agent-release-2026.09.01.001
ou:
1.12.0
O formato poderá ser Semantic Versioning ou outro padrão empresarial.
O importante é que seja:
- único;
- imutável;
- rastreável.
6. Immutable Release
Depois de publicado:
Release 1.12.0
não poderá ser modificado.
Se houver alteração:
1.12.1
ou:
1.13.0
conforme a natureza da mudança.
7. Artifact Manifest
O release possuirá um manifest:
{
"release": "1.12.0",
"runtime": "8.4.1",
"knowledge": "2026.09.01",
"capabilities": "4.2.0",
"policies": "3.8.0",
"ui": "2.7.0",
"prompts": "5.1.0",
"evaluations": "12.0.0"
}
8. Manifest Hash
O bundle deverá possuir uma assinatura ou hash:
releaseHash
Isso permite verificar:
O artefato que está rodando é realmente aquele que foi aprovado?
9. Release Integrity
Antes do deployment:
Manifest
↓
Schema validation
↓
Dependency validation
↓
Signature/hash validation
↓
Evaluation
↓
Security tests
↓
Release approval
10. Dependency Compatibility
Exemplo:
Capability v4
requires
Policy >= v3
Se houver:
Policy v2
o release deverá ser rejeitado.
11. Semantic Versioning
Recomendação:
PATCH
Correção sem mudança contratual.
1.4.1
MINOR
Nova capability compatível.
1.5.0
MAJOR
Mudança incompatível:
2.0.0
12. Capability Compatibility
Uma capability deverá declarar:
interface CapabilityVersion {
id: string;
version: string;
compatibility: {
input: string;
output: string;
};
deprecated?: boolean;
}
13. Policy Compatibility
Policies também precisam ser versionadas.
Exemplo:
workPermit.updateValidity
policy v3
Uma execução iniciada usando:
policy v3
não deverá ser silenciosamente reinterpretada como:
policy v4
no meio da operação.
14. Execution Pinning
Toda execução deverá registrar:
releaseId
e permanecer associada ao release correspondente.
Exemplo:
Execution:
EXEC-123
Release:
1.12.0
Mesmo que o sistema faça deploy de:
1.13.0
a execução antiga deverá continuar referenciando:
1.12.0
15. Long-Running Tasks
Para operações longas:
Execution started
↓
Release 1.12.0
↓
Deployment 1.13.0
a execução não deve automaticamente migrar.
Deverá existir uma política explícita:
CONTINUE_OLD_RELEASE
PAUSE
MIGRATE
CANCEL
16. Release States
DRAFT
↓
VALIDATING
↓
EVALUATING
↓
APPROVED
↓
CANARY
↓
ACTIVE
↓
DEPRECATED
↓
RETIRED
17. Release Gate
Um release só poderá avançar se passar:
TypeScript
+
Build
+
Manifest
+
Capabilities
+
Policies
+
Security
+
Evaluation
+
Performance
18. Evaluation Gate
O PRD-014 será integrado diretamente.
Exemplo:
Intent Accuracy >= 97%
Reference Accuracy >= 97%
Capability Accuracy >= 99%
Unsafe Actions = 0
Se não atingir:
RELEASE BLOCKED
19. Performance Gate
Também poderá existir:
P95 latency regression < 10%
ou thresholds específicos por domínio.
20. Cost Gate
Uma nova versão que aumente drasticamente o custo deverá ser sinalizada.
Exemplo:
Cost/task:
$0.0012 → $0.0048
Resultado:
COST_REGRESSION
O release poderá exigir aprovação.
21. Security Gate
Qualquer regressão crítica:
unsafe action
tenant isolation failure
authorization bypass
policy bypass
deverá bloquear o release automaticamente.
22. Canary Deployment
O release será inicialmente disponibilizado para uma pequena parcela:
1%
↓
5%
↓
10%
↓
25%
↓
50%
↓
100%
O avanço dependerá de métricas.
23. Canary Dimensions
O canary poderá ser segmentado por:
- tenant;
- usuário;
- percentual;
- domínio;
- capability;
- região;
- ambiente.
24. Canary por Tenant
Exemplo:
Tenant A → v1.13
Tenant B → v1.12
Tenant C → v1.12
Isso permite validação gradual.
25. Feature Flags
Capabilities poderão ser habilitadas independentemente:
agent.capability.workPermit.updateValidity.v2
Estados:
OFF
INTERNAL
CANARY
ENABLED
26. Capability Rollout
Uma nova capability:
workPermit.approve
poderá inicialmente ser:
registered
+
tested
+
disabled
Depois:
enabled for internal users
e somente depois:
production
27. Policy Rollout
Policies novas deverão suportar:
ACTIVE
SHADOW
No modo shadow:
Current policy → decides
New policy → evaluates only
Depois os resultados são comparados.
28. Policy Comparison
Exemplo:
Old:
ALLOW
New:
REQUIRE_CONFIRMATION
O sistema poderá mostrar:
A nova policy alteraria 3,4% das decisões.
Isso permite revisão antes da ativação.
29. Knowledge Rollout
Da mesma forma:
Knowledge v101
poderá ser testado contra:
Knowledge v100
usando o evaluation dataset.
30. Prompt Rollout
Prompts poderão ser versionados:
prompt.v12
prompt.v13
e avaliados contra o mesmo dataset.
31. Model Rollout
O mesmo:
Model A
vs
Model B
sem necessidade de modificar capabilities ou policies.
32. Rollback
Rollback deverá ser uma operação de primeira classe.
Exemplo:
v1.13
↓ incident
rollback
↓
v1.12
Sem rebuild desnecessário.
33. Automatic Rollback
Poderá ocorrer quando:
error rate > threshold
latency > threshold
unsafe action > 0
cost spike > threshold
34. Rollback Safety
Uma operação já iniciada não deve ser simplesmente interrompida sem considerar consistência.
O rollback afeta:
NEW executions
por padrão.
Executions existentes seguem a política definida anteriormente.
35. Release Diff
O sistema deverá mostrar:
Release 1.12 → 1.13
+ 4 capabilities
- 1 capability
~ 7 policies
~ 120 documents
+ 32 semantic bindings
~ prompt
~ model
36. Semantic Diff
Além do diff de arquivos:
semantic diff
Exemplo:
workPermit.validity
Before:
editable
After:
requires confirmation
Isso é muito mais importante para o comportamento do agente do que simplesmente mostrar diferenças de YAML.
37. Capability Diff
Exemplo:
ADDED
workPermit.updateValidity
CHANGED
workPermit.update
DEPRECATED
workPermit.modify
38. Policy Diff
Mostrar:
Policy:
workPermit.updateValidity
Risk:
MEDIUM → HIGH
Confirmation:
optional → required
39. Knowledge Diff
Mostrar alterações semânticas:
Added:
validity period
Changed:
maximum validity
Removed:
legacy rule
Isso poderá ser derivado do pipeline existente de documentação/knowledge.
40. UI Manifest Diff
Exemplo:
workPermit.validity
antes:
interactive = true
depois:
interactive = false
Isso poderá impactar capabilities.
O release gate deverá detectar essas incompatibilidades.
41. Breaking Change Detection
Exemplo:
Capability expects:
workPermit.validityDays
UI exposes:
workPermit.validity
Se o binding deixar de existir:
BROKEN CONTRACT
Release bloqueado.
42. Migration
Quando houver mudança incompatível:
v1
↓
migration
↓
v2
deverá existir um migration handler quando necessário.
43. Backward Compatibility
Durante rollout:
v1 client
+
v2 backend
poderá existir temporariamente.
Os contratos deverão definir explicitamente o período de compatibilidade.
44. Environment Promotion
Fluxo:
LOCAL
↓
CI
↓
TEST
↓
STAGING
↓
CANARY
↓
PRODUCTION
O mesmo release artifact deverá ser promovido.
Não reconstruir artefatos diferentes em cada ambiente.
45. Release Artifact Imutável
Exemplo:
agent-release-1.13.0.tar
deverá ser o mesmo artefato promovido:
staging → production
46. Configuration vs Release
Configurações externas não devem destruir a reprodutibilidade.
Distinguir:
Release configuration
de:
Runtime configuration
E registrar quais configurações relevantes estavam ativas.
47. Tenant Overrides
Se tenants puderem possuir configurações específicas:
Global Release
+
Tenant Configuration
deverão ser registradas.
Exemplo:
Agent Release: 1.13.0
Tenant Policy Overlay: T42-v8
48. Release Observability
O PRD-015 deverá alimentar:
release version
deployment timestamp
traffic percentage
error rate
latency
cost
LLM usage
task success
49. Release Health
Dashboard:
Release 1.13.0
Traffic 10%
Success 99.2%
P95 481ms
Unsafe 0
Cost/task +3.2%
Status:
HEALTHY
50. Release Approval
Dependendo do risco:
Low
Automático.
Medium
Automático se evaluation passar.
High
Revisão humana.
Critical
Aprovação formal obrigatória.
51. Release Risk
Risco agregado:
Code change
+
Capability change
+
Policy change
+
Knowledge change
+
Model change
Exemplo:
documentation only → LOW
new capability → MEDIUM
policy change → HIGH
destructive capability → CRITICAL
52. Change Impact Analysis
Antes do deploy:
Changed:
workPermit.validity
Sistema deverá encontrar:
Knowledge
Capabilities
Policies
UI
Tests
afetados.
53. Impact Graph
Usar o Knowledge Graph já existente:
workPermit.validity
│
┌────┼────┐
▼ ▼ ▼
Docs UI Capability
│
▼
Policy
Assim o impacto pode ser calculado automaticamente.
54. Release Validation
Validar:
Semantic IDs
Capabilities
Policies
UI bindings
Documentation
Schemas
Dependencies
Tests
55. Release Registry
Criar:
interface ReleaseRegistry {
createRelease(): Promise<Release>;
validateRelease(
releaseId: string
): Promise<ValidationResult>;
promote(
releaseId: string,
environment: string
): Promise<void>;
rollback(
releaseId: string
): Promise<void>;
getActiveRelease(): Promise<Release>;
}
56. Release Resolution
A execução deverá determinar:
tenant
+
environment
+
feature flags
+
release
antes de iniciar.
57. Release Lock
Para operações críticas:
execution
↓
release pinned
Não deverá ocorrer alteração silenciosa durante execução.
58. Incident Mode
Durante incidente:
NORMAL
↓
INCIDENT MODE
poderá:
- congelar releases;
- desabilitar capabilities;
- reduzir rollout;
- forçar versão anterior;
- exigir human review.
59. Emergency Rollback
Deverá existir caminho rápido:
Incident
↓
Select stable release
↓
Rollback
↓
Verify health
Sem depender de uma nova compilação.
60. Audit
Toda mudança de release deverá ser auditada:
WHO
WHAT
WHEN
FROM
TO
WHY
APPROVED BY
Exemplo:
User: admin-42
Action: promote
From: 1.12.0
To: 1.13.0
Environment: production
61. Release Notes
Cada release deverá gerar automaticamente:
Features
Changes
Policies
Capabilities
Knowledge
Breaking Changes
Security
Performance
Evaluation
62. Agent Changelog
Exemplo:
1.13.0
Added:
- workPermit.updateValidity
Changed:
- confirmation policy
Knowledge:
- updated validity documentation
Performance:
- 14% faster reference resolution
Evaluation:
- 98.9% intent accuracy
63. Rollback Validation
Depois do rollback:
health check
+
smoke tests
+
critical evaluations
deverão ser executados.
64. Smoke Tests
Exemplos:
"Abra WP-123"
"Explique a validade"
"Mostre os componentes"
e uma operação segura de atualização em sandbox.
65. Production Smoke Test
Após deployment:
Production
↓
Synthetic Agent Requests
↓
Read-only operations
↓
Validate
Operações destrutivas nunca devem ser utilizadas como smoke test real.
66. Release Freeze
Permitir:
releaseFreeze = true
durante:
- auditoria;
- incidente;
- período crítico;
- fechamento empresarial.
67. First Vertical Slice
Implementar inicialmente:
Work Permit Agent Release
incluindo:
Runtime
Knowledge
Capabilities
Policies
UI Manifest
Evaluation Dataset
Prompts
68. Acceptance Criteria
Versionamento
- todos os artefatos possuem versão;
- release possui manifest;
- release é imutável;
- execution fica pinned ao release.
Validation
- schemas validados;
- bindings validados;
- dependências validadas;
- evaluation executada;
- security gate executado.
Deployment
- staging;
- canary;
- progressive rollout;
- feature flags;
- production.
Rollback
- rollback manual;
- rollback automático;
- release anterior preservado;
- execução existente protegida.
Observability
- versão aparece nos traces;
- métricas por release;
- custo por release;
- erros por release;
- comparação entre releases.
Evidência parcial de implementação — 2026-09-04
O manifest canônico fixa versão e hash de artefatos; registry D1 tenant-safe preserva releases imutáveis, avaliação pinada para promoção e rollback emergencial para uma versão estável avaliada. A allocation percentual é limitada a superadmin e só aceita estados CANARY/ACTIVE; execuções existentes preservam seus pins e não são reinterpretadas por uma troca de release.
Em 2026-09-04, 16 testes locais de manifest, releases e risk rollouts passaram. Na mesma data, o seletor puro de rollout passou mais 8 testes locais: deriva um bucket estável de tenantId + requestId, escolhe CANARY apenas dentro do percentual válido e devolve o releaseId como pin. A versão do Worker f1f12c8e-edb1-4f82-87da-04c1933feac2 foi publicada a 100% e o health check respondeu OK.
Na versão feaffbc6-fe01-47cd-8872-53c428757509, a rota autenticada de prévia de orquestração passou a resolver a release ACTIVE e eventual CANARY no registry do próprio tenant. Ela ignora a release declarada pelo cliente, registra origem/bucket/pin no audit ledger e usa a release selecionada no plano. A versão ced9a7b9-2562-4347-a7db-3d74edb5ec73 reforçou a falha fechada: se não houver release promovida, retorna 409 RELEASE_CONTROL_PLANE_UNCONFIGURED, sem retroceder para o ID do cliente. Ambos os deploys foram distribuídos a 100% e o health check respondeu OK.
Em consulta remota ao D1 em 2026-09-04, o registry de produção não possuía release ACTIVE nem CANARY. Portanto, ainda é necessário promover uma release avaliada por tenant antes de usar essa rota em jornada autenticada; a configuração ausente é observável e bloqueada de modo seguro.
O canário operacional pnpm --dir apps/agente run canary:release-control-plane foi executado em 2026-09-04 com tenant sintético. Ele promoveu uma release estável e uma CANARY, registrou duas avaliações com segurança aprovada, configurou 100% de rollout e enviou deliberadamente o ID da estável pelo cliente. A prévia retornou READY, e o audit ledger confirmou que o servidor pinou a canário (releaseSource=CANARY, releasePinned=true) sem autorizar execução. Após a prova, registry, avaliações, rollout e tenant foram removidos; a consulta D1 posterior retornou zero registros operacionais. O único artefato retido é o audit ledger imutável, por desenho.
Em 2026-09-05, os contratos de release passaram com 17 testes em 4 arquivos. O canário remoto confirmou release estável e canário, seleção/pinning do canário mesmo com ID estável enviado pelo cliente, dois evaluation gates, rollout, preview READY, ausência de autoridade e cleanup com audit ledger imutável retido. A integração de execução além da prévia de Work Permit continua sendo expansão futura, sem reduzir os controles de release certificados.
Em 2026-09-06, a regressão atual dos quatro contratos de manifesto, rollout router e rotas de release passou com 17 testes, e o typecheck do Agent passou novamente. O health público do Worker confirmou runtime e bindings. A execução adicional do canário iniciou contra o control plane sintético, mas seu recibo terminal não ficou disponível após o processo assíncrono encerrar; por isso esta atualização não a usa como nova prova. O estado permanece PARTIAL por métricas e roteamento progressivo reais, além da integração de execução além da prévia.
Em 2026-09-06, GET /releases/:releaseId/metrics passou a correlacionar avaliação, rollout configurado e telemetria observada por release. A versão 0c7009df-2083-4032-b61e-58a6cadf1503 foi publicada a 100%. O canário de release obteve recibo terminal: avaliação/pinning de canário/rollout 100% válidos, contexto obsoleto rejeitado, métricas coerentes sem operações inventadas e remainingRows=0 após cleanup sintético; o audit imutável permaneceu por desenho.
Em 2026-09-06, o contrato do rollout foi alinhado ao comportamento efetivo: POST /releases/:releaseId/rollouts e GET /releases/:releaseId/metrics retornam routesOrchestrationPreview=true, pois o seletor servidor-side já roteia prévias autenticadas por bucket determinístico de tenantId + requestId; ele fixa a release selecionada no audit ledger e ignora a escolha enviada pelo cliente. Isso não alega tráfego de execução nem concede autoridade (authorizesExecution=false). Os 17 testes de release, roteador e orquestração cobrem canário e fallback ACTIVE a 50%, determinismo e o contrato HTTP; o typecheck integral do Agent passou. A expansão pendente é aplicar o mesmo pin a jornadas de execução autorizada, com revalidação de policy/approval antes de qualquer mutação.
O Worker dfef3ce6-b585-4e40-87ae-61c66da0980f foi publicado a 100% após essa correção e o health público confirmou todas as bindings. O canário remoto release-control-plane criou releases sintéticas estável e canário, selecionou/pinou canary-6fea4246d8914145, comprovou dois evaluation gates, rollout 100%, prévia atual aceita, contexto obsoleto rejeitado antes de persistência, uma trilha de intent e ausência de autoridade. O cleanup confirmou remainingRows=0; somente o ledger imutável permaneceu por desenho.
Em seguida, o seletor foi extraído para release/pinned-release.ts, preservando a única implementação servidor-side para prévia e para a futura jornada de dispatcher. A versão 7aea55b5-d48b-4bb2-b924-7338a5a3e81f foi publicada a 100%; o canário remoto voltou a passar com canary-1bda2a46868e4b3f pinada, dois gates, contexto stale rejeitado, uma trilha de intent e cleanup PostgreSQL/D1 zero. Os dados sintéticos não permaneceram; o ledger append-only é a retenção intencional.
Em 2026-09-06, o pin foi integrado ao dispatcher executável: a criação seleciona a release apenas pelo control plane e a inclui no snapshot SHA-256; ausência de release promovida retorna 409 RELEASE_CONTROL_PLANE_UNCONFIGURED. Antes de RUNNING e imediatamente antes do egress interno, o Workflow relê a release pinada e aceita somente CANARY/ACTIVE; snapshots legados ou release retirada falham fechados. Os 43 testes de rota/workflow e o typecheck passaram. No Worker 1707fb85-7e08-4773-ba8f-5f5951ac2a9c, o canário remoto promoveu uma release sintética avaliada, comprovou seu pin no plano, recibo server-issued, execução concluída e stream COMPLETED; cleanup PostgreSQL/D1 retornou zero e três recibos append-only foram retidos por desenho.
69. Resultado
O Agentic Work passa a ter um ciclo de vida profissional:
DEVELOPMENT
│
▼
EVALUATION
│
▼
RELEASE
│
▼
CANARY
│
▼
PRODUCTION
│
┌───────────┴───────────┐
▼ ▼
OBSERVE AUDIT
│ │
└───────────┬───────────┘
▼
IMPROVE
│
▼
RELEASE
Isso fecha o ciclo entre desenvolvimento e operação.
PRD-017 — Agentic Multi-Tenant Architecture & Isolation
O próximo estágio deve tratar uma característica fundamental do sistema SST: multi-tenancy.
Até aqui, tenant isolation apareceu nos PRDs anteriores como requisito de segurança. No entanto, considerando que o agente terá:
- conhecimento;
- memória operacional;
- capabilities;
- policies;
- conversas;
- contexto;
- auditoria;
- métricas;
- cache;
- Vectorize;
- documentos;
- configurações;
precisamos definir explicitamente o que é global, o que pertence ao tenant, o que pertence ao usuário e o que pode ser compartilhado.
O objetivo do PRD-017 será estabelecer uma arquitetura de isolamento como:
AGENT PLATFORM
│
┌───────────┴───────────┐
│ │
GLOBAL TENANT
│ │
┌──────┼──────┐ ┌────────┼────────┐
▼ ▼ ▼ ▼ ▼ ▼
Runtime Base Models Knowledge Policies Memory
│
▼
Tenant Data
O ponto crítico será garantir que uma pergunta de um tenant jamais possa recuperar conhecimento, memória, embeddings, registros, contexto ou resultados de outro tenant, inclusive através de:
- cache;
- BM25;
- Vectorize;
- HAG;
- Wikilinks;
- conversation memory;
- audit;
- analytics;
- tool discovery;
- LLM context.
O PRD-017 deverá definir também tenant-aware retrieval, tenant-aware caching, isolamento de embeddings, políticas globais versus tenant-specific, configurações por cliente, quotas, rate limits e estratégias para eventualmente suportar milhares de tenants sem duplicar desnecessariamente toda a infraestrutura.