Overlap, hashes, journals e mutação
Um plano só é confiável se cada byte for atribuível a um snapshot estável da fonte.
- Separar integridade de bytes, identidade do arquivo e composição do arquivo.
- Explicar precedência de journal e janelas ignoradas.
- Rejeitar snapshots mistos sem saída parcial.
Modelo central
Hashes provam quais bytes foram medidos; verificações de identidade provam que vieram do mesmo arquivo; a enumeração final prova que a composição do arquivo não mudou. Journals recebem hashes e contagens estruturais, mas nenhum plano de janelas de transcrição. São decisões distintas de integridade, não uma flag genérica de segurança.
Modelo mental: Um saco de evidência inviolável precisa de número do lacre, assinaturas de custódia e lista de itens. Um checksum sozinho não prova que alguém não trocou o saco inteiro.
A U2 compara `lstat` do caminho, identidade `fstat` do handle antes/depois do streaming e a identidade do caminho novamente após fechar, então repete o inventário. Device, inode, size, mtimeNs e ctimeNs detectam substituição ou mutação. SHA-256 cobre arquivos e cada janela completa. O basename `journal.jsonl` tem precedência de classificação e produz `status: skipped, reason: journal`.
Tabela de fronteiras
| Pergunta | Fronteira observada | Dono | Veredito |
|---|---|---|---|
| SHA-256 | Bytes exatos | Digest divergente | Cruzar identidade do conteúdo |
| Identidade do handle | Objeto de arquivo aberto | mudança dev/inode/tempo/tamanho | Rejeitar mutação da fonte |
| Inventário final | Composição do arquivo | Entrada adicionada/removida/alterada | Rejeitar arquivo alterado |
| journal.jsonl | Basename journal | Sem janelas de transcrição | Apenas hash e contagem |
Fonte local primária
packages/sessions/src/claude-manifest.tsbeforePath === openedHandle openedHandle === afterHandle afterHandle === afterPath finalInventory === initialInventory // Otherwise: fail closed, no mixed manifest.
Laboratório sintético
Escolha uma mudança durante o scan. Qual é o resultado honesto?
Recuperação e feedback
O arquivo é substituído atomicamente por outro do mesmo tamanho. Apenas tamanho basta?
Cartões de recuperação
Teste seu modelo
O que acontece com `subagents/journal.jsonl` na U2?
Ledger de evidências
Autoridade: docs/fable-session-mining/LOOP-LOG.md. Testes nunca promovem um recibo real ausente.