agents-lab

Local-first lab for reusable AI-agent primitives and the curated pi-stack.

View on GitHub

Governança de dependências e upstream

Objetivo

Separar evidência de mudanças feitas na stack local do projeto de mudanças vindas do Pi upstream ou de dependências, antes de decidir assimilate|hold|reject.

Esta trilha é report-only por padrão: não atualiza dependências, não edita node_modules e não autoriza protected scope sem decisão explícita do operador.

Quando usar

Use antes de qualquer uma destas ações:

Pacote mínimo de evidência

Um relatório de atribuição deve registrar, de forma curta:

  1. Diff de manifests/lockfile
    • package.json
    • manifests de pacote/workspace relevantes
    • lockfile real do repo (pnpm-lock.yaml, package-lock.json ou equivalente)
  2. Versão instalada localmente
    • versão resolvida no lockfile ou em node_modules/<pacote>/package.json
    • comando bounded usado para confirmar (npm ls --depth=0, npm ls --workspaces --depth=0, ou leitura direta de package.json)
  3. Fonte da mudança
    • local-stack: arquivos nossos em packages/, scripts/, docs/, .pi/, .project
    • upstream-pi: @earendil-works/pi-coding-agent/TUI, namespace legado @mariozechner/pi-coding-agent/TUI ou comportamento fora de extensão local
    • third-party-package: pacote pi/extensão/skill externa
    • lockfile-resolution: mudança sem alteração intencional de código, causada por resolução de lockfile
    • mixed ou unknown quando a evidência ainda não fecha
  4. Evidência externa quando disponível
    • changelog/release notes/commit upstream, somente se a pesquisa externa estiver autorizada ou já cacheada
    • se não houver evidência externa, a decisão segura padrão é hold, não “atualizar e ver”
  5. Arquivos nossos alterados
    • git diff --name-status limitado ao escopo da fatia
    • owner/surface tocada, quando existir (stack-sovereignty, pacote, extensão, docs)
  6. Risco de runtime
    • precisa /reload?
    • toca registro de tool/command, TUI, scheduler, provider routing, CI/publish, settings, .obsidian, rede ou execução remota?
    • rollback conhecido e não destrutivo?

Template de relatório

### Dependency/upstream attribution report
- change_ref: <task/commit/PR/package>
- requested_action: inspect|assimilate|hold|reject
- attribution: local-stack|upstream-pi|third-party-package|lockfile-resolution|mixed|unknown
- manifests_changed: [package.json, packages/pi-stack/package.json, package-lock.json]
- installed_versions: [<package>@<version> via <evidence>]
- upstream_evidence: <changelog/release/commit/cache path ou none>
- local_files_changed: [<arquivos nossos>]
- runtime_risk: low|medium|high + motivo curto
- protected_scope: yes|no + motivo
- validation_gate: <teste/inspeção focal>
- rollback_plan: <reverter commit/lockfile/config sem tocar node_modules>
- decision: assimilate|hold|reject
- decision_reason: <uma linha>

Critérios de decisão

assimilate

Use somente quando todos forem verdadeiros:

hold

Use por padrão quando faltar qualquer evidência mínima:

hold preserva throughput local-safe: registre oportunidade no board e continue fatias reversíveis que não dependem da atualização.

reject

Use quando a mudança violar invariantes:

Fluxo local-safe

  1. Snapshot — registrar dirty state e manifests/lockfile relevantes.
  2. Classificar — preencher attribution e runtime_risk sem atualizar nada.
  3. Comparar — separar arquivos nossos de manifests/lockfile/deps.
  4. Canário — definir teste/inspeção focal e rollback antes de editar.
  5. Decidirassimilate|hold|reject; assimilate exige decisão explícita quando protected.
  6. Promover — só depois da decisão, fazer fatia pequena, validar e registrar verificação.

Invariantes