Pular para o conteúdo principal

appcore-update

Pacote publicado

Release candidate 1.0.3-rc.2 · MSRV Rust 1.89 · crates.io · docs.rs · código-fonte

Guia e exemplos mantidos pelo crate​

O repositório do Runtime mantém o guia detalhado, exemplo básico e exemplo intermediário. O wiki resume a fronteira pública; detalhes de API e execução ficam junto ao código do crate.

Responsabilidade: seleção, autenticidade, stage, ativação, health gate e rollback de artefato opaco.

Dependências internas: contracts e provider.

API principal: artifact descriptor/signing payload; verifier, unsigned-local protegido por feature/Ed25519, trust policy/key status; update request/provider e file factory; staged artifact, activation receipt/store; coordinator, preparation/outcome, health check e fault injection.

Use para binários ou artefatos opacos. O Runtime valida identidade, versão, protocolo, checksum e trust, sem entender código ou schema.

Leituras de arquivo verificam tamanho antes de alocar, usam scratch fixo de 16 KiB mais um byte sentinela não retido e rejeitam componente final não regular. A ativação revalida tamanho e SHA-256 do staged e cria hard link para um path de build imutável. Um path existente só é reutilizado quando os bytes correspondem exatamente ao descriptor; nunca é substituído. O no-follow atômico do componente final existe em Unix. Outras plataformas mantêm checks de metadata, mas dependem da fronteira do filesystem do deployment contra races de reparse.

Ponteiros active/previous e receipts de ativação pendentes emprestam seus descriptors, passam por sizing sem retenção sob 1 MiB e serializam diretamente no temporário atômico com buffer fixo de 16 KiB. As leituras também desserializam diretamente por um reader limitado fixo de 16 KiB, sem manter um vetor completo dos bytes codificados junto ao pointer ou receipt decodificado. Arquivo ausente, falha de I/O e falha de decode continuam distintos, preservando o upgrade wall da ativação pendente. O JSON V1 não mudou.

O file provider percorre o índice limitado em streaming uma vez e retém somente a melhor versão semântica e seu descriptor. Cada descriptor é validado e então descartado ou selecionado durante a decodificação do array JSON, sem vetor de descriptors nem lista ordenada de candidatos. Versões iguais preservam a primeira entrada. Um reader fixo de 16 KiB, preflight de 1 MiB e um byte sentinela não retido rejeitam tamanho declarado excessivo e crescimento concorrente.

O release candidate também expõe ReleaseCatalog limitado e busca de artefatos em streaming, primitives de cache endereçado por conteúdo e metadados Recovery V2. QuarantineStore registra candidatos que falharam para que a seleção os exclua sem alterar o catálogo. A CLI appcore-update-diagnose lê apenas estado local limitado e emite diagnósticos redigidos para operadores.

Maturidade: lifecycle de release candidate; supply chain remoto exige assinatura, provenance e trust roots.

Prerelease independente — 2026-10-14​

2.0.0-alpha.2: alterações próprias.

crates.io · docs.rs

O enum público exaustivo UpdateError adiciona Transfer e Recovery em relação à versão estável 1.0.0. Esta mudança de API Rust exige uma prerelease major explícita; manifests V1 e protocolos de descriptors de update permanecem iguais. Migração: selecionar appcore-update = "=2.0.0-alpha.2", tratar as duas variantes novas, repetir testes de ativação/recuperação/rollback e preservar o binário anterior e backup verificado dos dados. Rollback: parar ativação e restaurar o binário anterior com o backup verificado do estado persistido compatível; não inferir nem converter estado não suportado. Uma dependência 1.x não seleciona a versão major automaticamente.