Public
Private searchable mirror of ChatGPT exports
Val Town is a collaborative website to build and scale JavaScript apps.
Deploy APIs, crons, & store data – all from the browser, and deployed in milliseconds.

PayAna Ledger 1.0 — durable economic/opportunity state

A PayAna agora possui uma camada estruturada e separada do transcript de conversa. O objetivo é garantir que CONVERSATION_STATE != PROJECT_STATE e que receita, oportunidades, ações e evidências possam ser retomadas sem reconstrução manual.

Tabelas Turso: payana_state, payana_opportunities, payana_economic_events, payana_actions, payana_receipts.

Bridge 0.6.0 adiciona: payana_state_upsert, payana_opportunity_upsert, payana_economic_upsert, payana_action_upsert, payana_receipt_upsert, payana_snapshot.

Estado inicial validado: REV-000001 = USD 0.01, classificado como USER_CONFIRMED_RECEIPT_UNVERIFIED; uma receipt explícita receipt-gap-REV-000001 registra a proveniência ainda ausente em vez de inventar plataforma, transaction ID ou timestamp.

Provas desta branch: schema migration PASS em Turso; seed/readback PASS; snapshot via bridge PASS; invalid decimal, HTTP URL e SHA-256 são rejeitados; regressões V0.4/V0.5/V0.6/V0.7 e release audit permanecem PASS.


V0.7 — real-export preflight / dry-run gate

Antes de qualquer ingestão de export real, o Vault agora exige preflight em duas etapas:

  • Somente analisar inicia ligado e não grava no Turso;
  • o preflight mede conversas, mensagens textuais, mapping, IDs, content types, vazios e limites;
  • a liberação para escrita é vinculada a sourceFingerprint + limite selecionado;
  • trocar arquivo ou 25/50/100/.../completo invalida a liberação;
  • após conclusão ou replay já COMPLETE, o modo seguro é reativado;
  • ZIP64 seletivo é suportado, com multidisk e inteiros acima do limite seguro bloqueados;
  • anexos são inventariados, não ingeridos nesta etapa.

Provas pré-merge: v07_preflight_selftest.ts = PASS com sameDbBeforeAfter=true; gate same-scope=true/different-limit=false/different-fingerprint=false; v07_zip64_selftest.ts = PASS; V0.6 e V0.5 regression PASS; release audit PASS; /api/stats anônimo = 401.


V0.6 — Selective ZIP Import + Resumable Cursor

Status de promoção: ZIP_SYNTHETIC_VERIFIED; export oficial real ainda UNVERIFIED.

Novidades:

  • aceita ZIP do export ou conversations*.json diretamente;
  • leitor ZIP seletivo lê diretório central + somente entradas de conversa, sem file.arrayBuffer() do ZIP inteiro;
  • suporta ZIP clássico com STORE/DEFLATE, valida tamanho e CRC32 e bloqueia ZIP criptografado, multidisk e ZIP64 por enquanto;
  • inventaria arquivos não ingeridos sem interpretá-los como conversa;
  • fingerprint baseado no conteúdo dos JSONs de conversa, estável mesmo após renomear/baixar novamente o mesmo export;
  • cursor persistente vault_import_runs no Turso com estados IN_PROGRESS/PAUSED/COMPLETE/FAILED;
  • conversa + mensagens + FTS + avanço do cursor são confirmados no mesmo batch transacional; replay do mesmo cursor não duplica indexed_messages;
  • timeout/erro transitório após write força reconciliação do run; se a reconciliação também falhar, o cliente entra em UNKNOWN_EXTERNAL_STATE e não repete cegamente;
  • run id escopado pelo tamanho selecionado (25/50/100/.../completo), evitando cursor incoerente ao ampliar a ingestão;
  • deduplicação por conversation id antes do cursor, mantendo a versão com maior update_time; itens sem ID não são deduplicados automaticamente para evitar perda por falso positivo;
  • UI mostra inventário, duplicatas removidas e cursor persistido.

Evidência automática:

  • v06_selftest.ts: ZIP DEFLATE sintético particionado, leitura seletiva, CRC corruption, ZIP sem conversations, fingerprint, deduplicação e PAUSED→COMPLETE;
  • v05_selftest.ts: regressão V0.5;
  • v06_release_audit.ts: Turso/queue/resíduos antes da promoção;
  • /api/import-runs/... sem sessão: HTTP 401.

Limites deliberados:

  • ZIP64 ainda bloqueado; não chamar de compatível com exports >4 GiB até implementar/testar ZIP64;
  • assets/PDFs/imagens são apenas inventariados nesta versão;
  • ZIP_SYNTHETIC_VERIFIED != REAL_CHATGPT_EXPORT_VERIFIED.

V0.5 — Structured Knowledge + Hybrid Retrieval

Status antes do merge: backend/bridge verificado em Turso.

Novidades:

  • vault_knowledge_items + FTS5 para regras, decisões, lições, arquitetura, riscos e achados estruturados;
  • vault_relations para relações graph-lite entre knowledge/checkpoint/conversation/entity/project/artifact/concept;
  • bridge actions knowledge_upsert, get_knowledge, related;
  • search_hybrid: ChatGPT gera variantes conceituais; backend executa FTS5/BM25 e Reciprocal Rank Fusion, sem chamar API de IA;
  • filtros de projeto/kind estritos;
  • knowledge writes idempotentes por ID e seguros contra stale retry;
  • relação inválida falha antes de persistência;
  • UI mostra conhecimento estruturado e relações.

Evidência V0.5: v05_selftest.ts deve retornar pass:true. Corpus histórico real do ChatGPT continua pendente de export oficial.


V0.4 — ChatGPT Bridge

A V0.4 transforma o GUH Vault em memória consultável pelo próprio ChatGPT através do conector Val Town autenticado, sem API da OpenAI e sem scraping de chatgpt.com.

Fluxo: ChatGPT -> Val Town control plane -> vault_bridge.ts -> Turso -> FTS5/BM25 -> ChatGPT.

Ações fechadas: search, get_conversation, stats, checkpoint_upsert.

Controles: claim atômico, lease de 2 minutos, máximo 2 tentativas, recuperação de stale RUNNING, checkpoint idempotente, allowlist de ações, Turso fail-closed e resultados externos tratados como dados não confiáveis.

Evidência antes do merge: search PASS; get_conversation PASS; stats PASS; checkpoint_upsert PASS; ação proibida BLOCKED; stale recuperável PASS na segunda tentativa; stale com orçamento esgotado FAIL sem terceira execução; queue final sem PENDING/RUNNING.

Skill pessoal: skills/guh-vault/SKILL.md.


V0.3.1 — FAIL-CLOSED STORAGE HOTFIX

Após promover Turso a fonte principal, fallback automático para o SQLite local foi desabilitado. Motivo: após novas escritas no Turso, a cópia local pode ficar stale. Se a configuração externa desaparecer, o app deve bloquear (TURSO_REQUIRED_NOT_CONFIGURED) em vez de servir estado antigo silenciosamente.

Política pura testada:

  • sem URL + sem token -> BLOCKED_EXTERNAL_REQUIRED
  • somente URL -> BLOCKED_EXTERNAL_REQUIRED
  • somente token -> BLOCKED_EXTERNAL_REQUIRED
  • URL + token -> TURSO_ACTIVE
  • localFallbackEnabled = false

O SQLite local continua preservado para recuperação/migração manual, não como fallback invisível de produção.


V0.3.0 — TURSO / EXTERNAL TEXT STORAGE

Checkpoint: 2026-09-06

Estado

  • TURSO_DATABASE_URL: configurada (valor não documentado)
  • TURSO_AUTH_TOKEN: configurado (valor não documentado)
  • Turso: CONFIGURED + AUTHENTICATED + REACHABLE
  • provider ativo da branch V0.3: turso
  • fallback: Val Town project-scoped SQLite quando Turso não estiver configurado
  • cliente: @libsql/client/web (o cliente padrão falhou no runtime Val Town por dependência binária nativa)

Migração comprovada

Origem Val Town e destino Turso reconciliados após o checkpoint V0.3:

  • conversas: 3 = 3
  • mensagens: 10 = 10
  • checkpoints: 3 = 3
  • FTS mensagens no Turso: 10
  • FTS checkpoints no Turso: 3
  • SHA-256 canônico de conversas: igual
  • SHA-256 canônico de mensagens: igual
  • SHA-256 canônico de checkpoints: igual
  • Kernel timeout: PASS
  • NR-12: PASS
  • reconciliação: PASS
  • export oficial: checkpoints encontrados
  • termo inexistente: 0 hits

Reliability / security controls

  • active provider execute: PASS
  • active provider batch transacional: PASS
  • fixture de batch removida: PASS (probeResidue=0)
  • credencial Turso propositalmente inválida: rejeitada (LibsqlError)
  • /api/stats sem sessão: HTTP 401 / sem dados
  • valores de credentials não são impressos por self-tests/status

Estado epistemológico

TURSO_AVAILABLE -> CONFIGURED -> AUTHENTICATED -> EXECUTED -> VERIFIED

A V0.3 ainda não deve ser chamada IPHONE_OPERATIONAL até a interface principal ser aberta no iPhone depois do merge e uma reimportação confirmar escrita/search no Turso.

Próxima prova

Após promoção para main:

  1. abrir guh-knowledge-vault.val.run no iPhone;
  2. confirmar V0.3 • Turso • FTS5/BM25;
  3. confirmar 3 conversas / 10 mensagens / 10 indexadas / 3 checkpoints;
  4. reimportar o JSON sintético;
  5. confirmar que permanece 3/10/10, sem duplicação;
  6. pesquisar Kernel timeout, NR-12, export oficial;
  7. somente então promover interface V0.3 para OPERATIONAL_SYNTHETIC_E2E_TURSO.

GUH Knowledge Vault — V0.2.0

Cofre pessoal pesquisável para histórico exportado do ChatGPT + checkpoints do trabalho corrente, sem usar a API da OpenAI.

Runtime

iPhone/browser -> OAuth Val Town -> Hono -> SQLite/FTS5 -> resultados

O código é público por restrição do workspace Free, mas as rotas de dados exigem login Val Town e aceitam apenas username === cleitoncosta.

O que a V0.2 adiciona

  • mensagens persistidas individualmente em vault_messages;
  • índice vault_messages_fts com SQLite FTS5;
  • ranking BM25;
  • tokenização Unicode com remoção de diacríticos;
  • busca multi-termo com AND + prefix matching;
  • fallback para a busca V0.1 quando não houver mensagens indexadas;
  • checkpoints persistentes em vault_checkpoints;
  • índice FTS dos checkpoints;
  • busca universal capaz de retornar conversas + checkpoints;
  • detalhe da conversa renderizado mensagem por mensagem quando o índice existe;
  • reimportação/reindexação idempotente para uma mesma conversa;
  • vault_meta.schema_version = 0.2.0;
  • self-test stateful com limpeza de fixture.

Duas rotas de memória

Histórico antigo

export oficial -> conversations.json -> importador no navegador -> conversa + mensagens -> FTS5

Conhecimento novo

ChatGPT/conector Val Town -> checkpoint estruturado -> vault_checkpoints -> FTS5

Isso evita depender exclusivamente de novos exports para preservar decisões e estado de projetos daqui para frente.

Estado persistido no fechamento da V0.2

  • 3 conversas sintéticas compatíveis com export;
  • 10 mensagens de origem;
  • 10 mensagens individualmente indexadas;
  • 10 linhas no índice FTS das mensagens;
  • 970 B de conteúdo legado de conversa;
  • 1 checkpoint real sobre a prova da V0.1 no iPhone;
  • 0 fixtures de self-test restantes.

Evidência

PASS

  • V0.1 real no iPhone: login, importação, persistência, busca e abertura de conversa;
  • FTS5 disponível no SQLite do Val Town;
  • Kernel timeout -> conversa correta;
  • NR-12 -> conversa correta;
  • reconciliação -> duas conversas relacionadas;
  • checkpoint encontrado por export + oficial;
  • controle negativo inexistente -> 0 hits;
  • reindex replay -> 2 mensagens continuam 2, sem duplicação;
  • replay FTS -> 2 linhas continuam 2;
  • self-test final -> pass=true;
  • self-test remove as próprias fixtures;
  • index.ts compila no runtime;
  • frontend/components/App.tsx compila no runtime;
  • visitante sem sessão continua redirecionado para autenticação.

Falha útil encontrada

O primeiro self-test assumia incorretamente que uma busca por kernel retornaria somente a fixture. Como já havia uma conversa real de teste com esse termo, o self-test marcou FAIL apesar do sistema estar correto.

Correção: o validador passou a testar a presença da fixture dentro do escopo correto, sem assumir exclusividade global.

Lesson learned: um teste pode falhar por hipótese inválida do próprio validador; negative controls e escopo explícito são obrigatórios.

Ainda UNVERIFIED

  • parser contra export oficial real desta conta;
  • importação real de 25/50/100 conversas;
  • comportamento com um export muito grande no Safari/iPhone;
  • assets, imagens, PDFs, ZIPs e outros anexos do export;
  • busca semântica por embeddings/conceitos;
  • camada de armazenamento maior para histórico completo;
  • sincronização automática do histórico interno do ChatGPT.

Limites deliberados

A V0.2 ainda preserva conversations.content_text por compatibilidade com a V0.1 e também mantém mensagens individualizadas + índice. Isso duplica parte do conteúdo e não é a arquitetura final para milhares de conversas.

Antes da importação massiva, deve ser criada uma camada de armazenamento maior e o orçamento deve considerar tamanho físico real, não apenas content_bytes da tabela legada.

Próximos marcos

  1. Testar um export oficial real.
  2. Medir tamanho/quantidade real de chats e assets.
  3. Escolher storage gratuito maior para o histórico completo.
  4. Migrar o corpo das mensagens para arquitetura sem duplicação desnecessária.
  5. Adicionar projetos, entidades, relações e artefatos.
  6. Evoluir de full-text para busca híbrida/semântica sem depender da API da OpenAI.
  7. Criar interface/tool para outros agentes consultarem o Vault.
  8. Automatizar checkpoints quando o usuário solicitar salve checkpoint.
frontend
9/6/2026
lib
9/6/2026
payana
9/7/2026
skills
9/6/2026
CHANGELOG.md
9/7/2026
README.md
9/7/2026
H
index.ts
9/7/2026
payana_binance_backup_receipt_v1.ts
9/7/2026
payana_binance_checkpoint_v1.ts
9/7/2026
payana_binance_checkpoint_v2.ts
9/7/2026
payana_binance_external_gates_v1.ts
9/7/2026
payana_binance_final_freeze_checkpoint.ts
9/7/2026
payana_binance_rule_checkpoint.ts
9/7/2026
payana_binance_submission_ready_checkpoint.ts
9/7/2026
payana_bountybook_watch.ts
9/7/2026
C
payana_bountybook_watch_cron.ts
9/7/2026
payana_bridge_selftest.ts
9/7/2026
payana_currentness_v6.ts
payana_currentness_v6_selftest.ts
payana_eligibility_integrity_v4.ts
9/8/2026
payana_eligibility_integrity_v4_selftest.ts
9/8/2026
payana_final_freeze_20260908_checkpoint.ts
9/8/2026
payana_negative_controls.ts
9/7/2026
payana_opportunity_census_v2.ts
9/8/2026
payana_opportunity_census_v3.ts
9/8/2026
payana_opportunity_watch_v4.ts
C
payana_opportunity_watch_v4_cron.ts
9/8/2026
payana_resolution_checkpoint_20260907.ts
9/8/2026
payana_schema_migrate.ts
9/7/2026
payana_security_mtpelerin_v1.ts
9/8/2026
payana_seed_v1.ts
9/7/2026
v02_selftest.ts
9/6/2026
v031_storage_policy_selftest.ts
9/6/2026
v03_active_storage_selftest.ts
9/6/2026
v03_migrate_to_turso.ts
9/6/2026
v03_storage_selftest.ts
9/6/2026
v03_turso_auth_negative_selftest.ts
9/6/2026
v04_bridge_selftest.ts
9/6/2026
v05_schema_migrate.ts
9/6/2026
v05_selftest.ts
9/7/2026
v06_release_audit.ts
9/7/2026
v06_selftest.ts
9/6/2026
v07_preflight_selftest.ts
9/7/2026
v07_zip64_selftest.ts
9/7/2026
vault_bridge.ts
9/7/2026