Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,16 @@ coverage/
# ai-jail -> github.com/akitaonrails/ai-jail (GPL-3.0)
# harnes-opencode -> harness de referencia, usado no diagnostico
# promptfoo-demo-evals -> exemplos do promptfoo
# orca -> github.com/stablyai/orca (MIT), referencia de
# feature para a superficie visual (C12). Lido, nunca
# vendorizado: nada dele entra no produto.
# A versao minima exigida do ai-jail esta no README.
# ==========================================
/ai-jail
/harnes-opencode
/promptfoo-demo-evals
/orca
/orca-linux.AppImage

# ==========================================
# Artefato de execucao do harness
Expand Down
468 changes: 468 additions & 0 deletions CHANGELOG.md

Large diffs are not rendered by default.

75 changes: 65 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
[![TypeScript](https://img.shields.io/badge/typescript-5.9-3178C6?logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
[![SQLite](https://img.shields.io/badge/SQLite-WAL-003B57?logo=sqlite&logoColor=white)](https://sqlite.org/)
[![License: AGPL v3](https://img.shields.io/badge/License-AGPL%20v3-blue.svg)](LICENSE)
[![Version](https://img.shields.io/badge/version-0.2.0-orange.svg)](CHANGELOG.md)
[![Version](https://img.shields.io/badge/version-0.3.0-orange.svg)](CHANGELOG.md)

</div>

Expand All @@ -31,7 +31,7 @@
║ Cobertura, teste, lint e segurança viram registro assinado por hash da ║
║ árvore que foi verificada. ║
║ ║
║ v0.2.0 · fronteira aplicada pelo kernel · 325 testes · binário único
║ v0.3.0 · memória entre sessões · adapter Claude Code · 524 testes
╚══════════════════════════════════════════════════════════════════════════════╝
```

Expand Down Expand Up @@ -99,6 +99,11 @@ saberia se a garantia existe.
│ [■] Adapter CI - headless, JSON, código de saída estável │
│ [■] psh doctor - diagnóstico fora do runtime, colável em issue │
│ [■] Binário único - bun build --compile, sem runtime instalado │
│ [■] Boundary Engine - allowlist por agente, aplicada pelo kernel │
│ [■] Memory Engine - página em disco, índice FTS5, frescor por hash │
│ [■] psh handoff - retomada montada do estado, não de resumo │
│ [■] Consolidação - a sessão vira página, cada linha com a origem │
│ [■] Adapter Claude Code - cinco hooks, contrato lido do binário instalado │
└─────────────────────────────────────────────────────────────────────────────┘
```

Expand Down Expand Up @@ -200,7 +205,15 @@ psh verify # o NÚCLEO roda os verificadores do portão atual
psh status # fase, tentativa, portão, sandbox, trilha
psh advance # avalia o portão e decide a transição
psh audit verify # integridade da trilha encadeada
psh audit reanchor # decisão humana registrada quando trilha e âncora divergem
psh doctor # diagnóstico completo

psh remember "<fato>" # fixa o que não pode ser perdido entre sessões
psh memory search <termo> # busca na memória do projeto
psh handoff # bloco de retomada, pronto para a próxima sessão

psh adapter claude-code install # registra os cinco hooks em .claude/
psh adapter claude-code contract # confere o contrato contra o binário instalado
```

`psh init` é não destrutivo.
Expand All @@ -216,8 +229,8 @@ perfil lean
fase phase.5.build - Build + Quality
tentativa 2 (retries 1/2)
status in-progress
sandbox ai-jail 0.10.0 operante
fronteira ausente (C3 entra na v0.2)
sandbox ai-jail 1.19.2 operante
fronteira mount (2 agentes)
trilha íntegra (47 entradas, 0 problemas)

portão all-of: REPROVADO
Expand Down Expand Up @@ -254,6 +267,7 @@ O que isso impede, na prática:
| Suíte morta por timeout ou sinal | falha, nunca zero |
| Apagar uma linha da trilha | `psh audit verify` acusa, saída 4 |
| Reescrever a trilha inteira relinkada | a âncora fora do arquivo acusa |
| Escrever depois de adulterar a trilha | recusado antes da escrita, para o estrago não sumir |

---

Expand Down Expand Up @@ -346,7 +360,7 @@ Override é ato humano com confirmação, e CI não tem humano para confirmar.
"_type": "psh-ci-report",
"phase": "phase.5.build",
"sandbox_mode": "ai-jail",
"boundary_engine": "absent",
"boundary": { "mode": "mount", "agents": 2, "detail": "escrita restrita pelo kernel via ai-jail" },
"verify": { "ran": [{ "verifier": "coverage", "status": "ok", "value": 87.4 }] },
"gate": { "passed": true },
"advance": { "decision": "advanced", "to": "phase.6.ux-gate" },
Expand Down Expand Up @@ -390,9 +404,49 @@ não ter harness nenhum.
Casamento por texto erra nos dois sentidos, e tratar isso como controle criaria
confiança que o mecanismo não sustenta.

- **Não gerencia modelo, custo ou memória entre sessões.**
- **A memória não é fonte canônica.**

A faixa em `.harness/memory/` é transitória e fica fora do repositório. O que
precisa sobreviver com garantia sai dela por `psh memory promote` e vira
arquivo versionado, que entra em revisão como qualquer outro.

- **A página de sessão não é narrativa escrita por modelo.**

Ela é montada da trilha, com o número da entrada em cada linha. A reescrita
como narrativa que o R5.2 pede é chamada de modelo e depende do Maestro, que é
a v0.4.

- **O adapter não expõe as tools do núcleo por MCP.**

O agente fala com o harness por linha de comando. O servidor MCP é marco
posterior.

- **A atribuição de quem fez o quê é melhor esforço dentro da jaula.**

`psh exec` marca a sessão com o id do agente, mas o agente roda com ambiente
próprio e pode apagar a marca antes de chamar o `psh`. O que ele não apaga é a
entrada `command.exec` da mesma execução na trilha, e é por ela que a
correlação fecha.

- **Não gerencia modelo nem custo.**

Maestro e contabilidade de token são marcos posteriores.

- **O verificador não declara toolchain nem credencial.**

As flags da jaula são fixas e o `env` do verificador é mapa literal, sem
interpolação. Toolchain instalado sob `$HOME` some lá dentro, e passar uma
credencial exigiria escrever a chave em texto puro num arquivo versionado.

No primeiro teste de campo isso custou vendorizar o binário do node dentro da
árvore, e só funcionou porque o promptfoo lê o `.env` do diretório de trabalho
por conta própria.

- **Cinco achados do primeiro teste de campo seguem abertos.**

Marcos posteriores.
Estão em `DEVDOCS/CAMPO-01-multilingo.md`, com repro e gravidade. Nenhum deles
produz valor de portão errado, que foi o critério para publicar a v0.3.0 com
eles em aberto em vez de segurar a versão.

---

Expand All @@ -401,7 +455,7 @@ não ter harness nenhum.
```sh
cd psh
bun run check # typecheck + verificação estática + testes com cobertura
bun test # 236 testes
bun test # 524 testes
bun run build # binário único
```

Expand All @@ -411,7 +465,8 @@ bun run build # binário único
│ psh/src/evidence execução de verificador, extratores, frescor │
│ psh/src/gate avaliação de portão sobre evidência │
│ psh/src/audit trilha encadeada por hash │
│ psh/src/adapters ci (headless) │
│ psh/src/memory página, índice FTS5, handoff, consolidação │
│ psh/src/adapters ci (headless) e claude-code (cinco hooks) │
│ psh/schemas contratos de dados versionados │
└──────────────────────────────────────────────────────────────────────────┘
```
Expand All @@ -433,7 +488,7 @@ Regras da suíte de testes:
|--------|-------------------------------------------------------------------------------|--------------|
| 0.1 | Núcleo verificável: workflow, evidência, auditoria, CLI, adapter CI | **entregue** |
| 0.2 | Motor de fronteira, integração com ai-jail, modo degradado, suíte adversarial | **entregue** |
| 0.3 | Adapter Claude Code e memória entre sessões | planejado |
| 0.3 | Adapter Claude Code e memória entre sessões | **entregue** |
| 0.4 | Roteamento de modelo, contabilidade de token e custo | planejado |
| 0.5 | Adapter OpenCode, perfis por stack | planejado |
| 1.0 | Endurecimento, binários assinados, matriz de CI completa | planejado |
Expand Down
Loading
Loading