SMART TOOLS / BRASIL × TAIWAN
CENÁRIO A · BR-SAFE-A · V1.0.0

Especificação A: interfaces, testes e evidência

Contrato de ensaio com quatro funções, fases de mesa a campo, 12 casos, entradas e condições de aprovação. Todos os ensaios do piloto estão não executados.

Proposta de ensaio · configuração e participantes a confirmar · ensaios do piloto não executados

Requisitos e sucesso

IDNecessidadeResultado esperadoEvidência de sucesso
REQ-01ReprodutibilidadeMesmo manifesto, entradas e semente produzem decisões equivalentes e rastreáveis.Hashes de build, parâmetros, mundo e logs; tolerâncias aprovadas antes do ensaio.
REQ-02Fronteira de segurançaNenhuma saída da IA alcança diretamente motor/servo ou armação.Inspeção das permissões + tentativa controlada recusada + registro de decisão.
REQ-03Estado e falhasComando rejeitado, telemetria antiga, perda de enlace e reinício têm resultado explícito.Expectativa por build; nenhum estado inesperado ou lacuna de registro.
REQ-04Aceite auditávelCada execução possui ambiente, versão, observação e evidência íntegra.Sem arquivo/hash/resultado, não há aprovação. Falha de captura invalida o ensaio.

Congelar a configuração antes de executar

configuration_version identifica esta especificação editorial, não uma configuração física aprovada. O manifesto obriga modelo/revisão/hash do FC, firmware, parâmetros, GCS, OS/kernel/BSP, companion/SoM, payload, rede, modelo/dataset e ferramentas. Valor null significa bloqueio, não conformidade.

Baixar manifesto com campos desconhecidos

Entradas, saídas, frequência e relógios

IDDireçãoProtocolo / formatoFrequência proposta [I]Tempo / correlação
IF-01FC → observadorMAVLink 2 / dialeto e hash XML congelados; UDP em SITL ou UART em bancadaProposta: HEARTBEAT 1 Hz; telemetria de estado 10 Hz; confirmar suporte e taxa realsysid/compid + time_boot_ms/time_usec conforme mensagem + monotonic_ns de recepção; não misturar epoch/boot
IF-02Observador → executor de testeJSONL UTF-8 schema br-safe-event/1.0; um objeto por linhaPor evento; sequência crescente; registrar perdasrun_id, case_id, seq, monotonic_ns, utc, clock_domain, source, event, payload
IF-03IA → supervisor de missãoJSON proposto: observation/proposal, confidence opcional, model_sha256Proposta: máximo 2 propostas/s; limite configurável, não benchmarkproposal_id e created_monotonic_ns; expiração proposta 500 ms
IF-04Supervisor → FCAllowlist específica por build; command_id, confirmação e auditoriaComando somente se transição preautorizada; nenhuma armação automáticaCorrelacionar envio/ACK/estado observado; ACK isolado não prova transição
IF-05Administração → mission computerAcesso local autenticado; artefatos assinados e conta separadaAtualização somente desarmado; política acordadaHash de imagem/modelo, aprovador, versão anterior e resultado de rollback
[P03] [P04] [P05]

Eventos normalizados: run_id, case_id, estágio, seq, host_id, monotonic_ns, UTC ISO 8601, offset em ms, componente, decisão, classe de falha e correlation_id. Null no offset indica sincronismo desconhecido. Preservar também os logs nativos, sem conversão destrutiva.

Schema JSON dos eventos

Doability: recursos e dependências

DimensãoContrato proposto / informação disponívelPapelDesconhecido / bloqueio
Hardware / energiaD137SM: entrada declarada 12–50 V; não ligar ao pino de 5 V do FC. SparkNavi POWER1/2: 5,3 V declarados.R2+R3Tolerâncias, reguladores, transientes, fusível, aterramento, potência máxima e cabos: U. Sem esquema aprovado, não energizar.
Peso / montagem / térmicaD137SM: 80 g e 90 × 56 × 30,7 mm declarados; faixa de placa −10 a 60 °C.R3Confirmar SoM/cooler incluídos; medir massa, temperatura e fixação. Limites da aeronave: U.
Firmware / OS / softwarePX4 e ArduPilot são trilhas separadas; manifesto exige commit, hash do binário e parâmetros.R2Nenhuma versão instalada conhecida. Ubuntu/BSP/kernel, compilador e dependências: U. SparkNavi suporta ArduPilot declarado, não presumir PX4.
Modelo / dados / computeReplay sem modelo é a primeira carga proposta; modelo real requer versão e licença.R3Memória, CPU/NPU, dataset, precisão, quantização e latência real: U. TOPS não vira desempenho de missão.
Latência / relógioAlvos de bancada I: evento de missão ≤500 ms; diferença de relógios medida ≤20 ms; registrar p50/p95/p99 e máximo.R1+R4Valores são proposta de aceite, não capacidade medida nem garantia de controle de voo; revisar antes da execução.
Offline / perda de enlaceSem serviço de nuvem obrigatório no mínimo; bloquear e observar tráfego de saída.R2+R3Ação de failsafe do FC depende de aeronave/parâmetros aprovados; não impor RTL universal. Reinício não rearma.
Identidade / permissõesUsuário IA sem dispositivo de atuador e sem credencial de administração; supervisor separado; allowlist.R3Matriz de privilégios, chaves MAVLink, conta de manutenção e rotação: U. Assinatura de mensagem não prova confidencialidade.
Atualização / rollback / logCongelar imagem; verificar assinatura/hash; registrar tentativa, resultado e retorno à versão anterior.R3+R4Bootloader, secure boot e rollback do hardware não comprovados. Sem logs íntegros, marcar INVALID.
HBOM / SBOM / licençasHBOM por peça/fornecedor/origem; SBOM com hashes; inventário de modelo, dados, código e obrigações de redistribuição.R1+R3Documentos e direitos de uso/modificação/redistribuição: U. Não redistribuir código/dados de pesquisa sem licença verificada.
Equipe / equipamento / custosQuatro papéis propostos, nenhum profissional, PC, placa, instrumento, bancada ou local reservado.R1Capacidade, orçamento, aquisição, seguro e agenda: U. Sem prazo ou custo comercial estimado com base suficiente.
AAEON em bancada [P2/I]SKU BOXER-8653AI-JP511N-A1-1010; 12–24 VDC; 2,5 kg; 180 × 136 × 75 mm; faixa térmica com fluxo 0,5 m/s. Alimentação e refrigeração dimensionadas para carga medida, não TOPS.R3 + R4Uso terrestre proposto. Consumo total, pico, BSP/JetPack exato, revisão e adaptação serial: U. Não ligar RS-232 diretamente a UART TTL.

Classificação e tratamento de falhas

ClasseEventoTratamento proposto [I]
CONFIGVersão, hash, BOM ou licença ausenteBloquear passagem de fase; registrar campo e responsável.
AUTHORITYProposta/comando fora de escopo ou permissãoRecusar, registrar e confirmar zero comando ao atuador.
STATETransição inválida ou retomada após reinícioManter estado previamente aprovado; revisão humana.
TIMING_LINKDado antigo, relógio fora do limite ou perda de enlaceAplicar política aprovada por configuração; não presumir ação universal.
RESOURCECPU/memória/temperatura/alimentação fora do limiteEncerrar carga de ensaio conforme plano; preservar controle e logs.
EVIDENCELog ausente, hash divergente ou observação ambíguaResultado BLOCKED/FAIL; nunca converter ausência em PASS.

Quatro funções, sem pressupor pessoas disponíveis

PapelCompetência necessáriaResponsabilidade proposta
R1Requisitos e segurançaCongelar missão, envelope permitido, condições de interrupção e autorizações; responsável a designar.
R2Integração do piloto automáticoFixar build/parâmetros, interfaces e adaptadores de teste PX4/ArduPilot; responsável a designar.
R3Computação de missão e segurançaIsolar IA, usuários, recursos, atualização e captura de dados; responsável a designar.
R4Ensaio e evidênciasRevisão independente dos casos, integridade dos arquivos, relatório e aceite; responsável a designar.

R4 deve revisar as evidências sem ser o único autor dos critérios. A equipe, suas competências e sua independência precisam de confirmação do comprador.

Portões de execução

IDFaseCondição de entradaMétodoCondição de saídaEstado real
G0Mesa / offlineRequisito, proprietário dos dados, manifesto e expectativas revisados; sem conexão com aeronave.Validar esquema, replay, recusa de dados inválidos e completude das evidências.Casos aplicáveis observados e hashes conferidos por R4; pendências registradas.Especificação entregue; ensaio do piloto não executado. Verificador tem self-test separado.
G1SITLG0 aceito; PC/OS/container, build PX4 OU ArduPilot, mundo e parâmetros congelados; licença e recursos disponíveis.Executar casos de missão/telemetria/recuperação com falhas controladas e repetir baseline.Logs do simulador + observador e configuração íntegros; nenhuma divergência inexplicada; revisão R1/R4.Não executado: ambiente de simulador e build não provisionados.
G2HIL / bancada sem hélicesG1 aceito; hardware exato, esquema de energia, compatibilidade HIL, instrumentação e plano de parada aprovados.Comparar observação do FC real, carga do companion e falhas de ligação sob condições documentadas.Medições dentro dos limites aprovados; sem armação inesperada, superaquecimento ou perda de evidência.Não executado: placas, energia, firmware e instrumentos indisponíveis.
G3Campo legal e controladoG2 aceito; operador/piloto, aeronave, local, avaliação de risco e permissões aplicáveis documentados.Plano de missão limitado aprovado pelo operador; observação/logs e critérios de parada; sem teste ofensivo.Relatório identifica voo, configuração, condições, incidentes, limites e assinatura de aceite.Não executado: local, pessoal, aeronave e permissões não confirmados.

Casos executáveis e critérios

T01 · G0 · NÃO EXECUTADO

Manifesto incompleto

Método: Remover um hash ou revisão obrigatória da cópia de teste. Executar o validador antes de abrir o simulador.

Esperado: Recusar execução qualificada; listar campos pendentes.

Passa somente se: Nenhuma etapa G1/G2/G3 marcada PASS com configuração incompleta.

Arquivos: manifest.json, validation.json

Vínculo: REQ-01 · R4 + responsável da interface

T02 · G0/G1/G2 · NÃO EXECUTADO

Acesso da IA

Método: Com conta IA sem privilégios, solicitar ação fora da allowlist pelo supervisor. Em G2 usar saídas desenergizadas.

Esperado: Recusa registrada; nenhum comando de atuador encaminhado.

Passa somente se: zero actuator-write pela IA e evento proposal-denied correlacionado.

Arquivos: permissions.json, decisions.jsonl, observer.jsonl

Vínculo: REQ-02 · R4 + responsável da interface

T03 · G1/G2 · NÃO EXECUTADO

Transição incompatível

Método: Em estado DISARMED solicitar proposta de missão incompatível com a tabela aprovada; comparar decisão e estado observado.

Esperado: Manter estado permitido; reason_code explícito.

Passa somente se: Nenhuma transição não prevista; ACK e estado avaliados separadamente.

Arquivos: state-table.json, events.jsonl, fc-log

Vínculo: REQ-03 · R4 + responsável da interface

T04 · G0/G1/G2 · NÃO EXECUTADO

Telemetria antiga

Método: Reproduzir pacote com idade acima de 500 ms (limiar I ajustável) e ordenar eventos por relógio monotônico.

Esperado: Suspender novas propostas; emitir telemetry-stale; FC segue sua política própria.

Passa somente se: Evento de recusa com idade medida; nenhuma proposta antiga aceita.

Arquivos: replay.jsonl, events.jsonl

Vínculo: REQ-03 · R4 + responsável da interface

T05 · G1/G2 · NÃO EXECUTADO

Processo IA indisponível

Método: Parar apenas processo IA sob supervisor; observar heartbeat independente do FC e retorno após reinício.

Esperado: IA degradada; nenhuma armação ou escrita direta no FC.

Passa somente se: FC observável e sem reset atribuível ao processo IA; se medição faltar, INVALID.

Arquivos: process-log, resources.csv, fc-log

Vínculo: REQ-02 · R4 + responsável da interface

T06 · G1/G2 · NÃO EXECUTADO

Perda de enlace local

Método: Interromper somente ligação de teste em ambiente isolado; registrar duração e configuração failsafe antes.

Esperado: Detectar link-lost e aplicar comportamento específico aprovado, sem inferir RTL genérico.

Passa somente se: Estado observado coincide com expectativa assinada para esta configuração.

Arquivos: link-events.jsonl, parameters.json, fc-log

Vínculo: REQ-03 · R4 + responsável da interface

T07 · G0/G1/G2 · NÃO EXECUTADO

Reinício / recuperação

Método: Reiniciar companion e repetir entrada com mesmo proposal_id.

Esperado: Recuperação explícita; sem replay de ação consumida ou rearme automático.

Passa somente se: Zero automatic-arm; uma decisão final por proposal_id.

Arquivos: boot-log, events.jsonl, proposal-ledger.json

Vínculo: REQ-03 · R4 + responsável da interface

T08 · G0/G1/G2 · NÃO EXECUTADO

Sincronização

Método: Introduzir offset conhecido na cópia de replay; medir drift, RTT e domínio; testar acima de 20 ms propostos.

Esperado: Evidência sinalizada inválida quando excede tolerância; nunca esconder correção.

Passa somente se: Offset/RTT e método registrados; amostra fora do limite rejeitada.

Arquivos: timesync.csv, events.jsonl

Vínculo: REQ-04 · R4 + responsável da interface

T09 · G0/G1/G2 · NÃO EXECUTADO

Integridade do registro

Método: Apagar uma linha ou alterar um byte de uma cópia de evidência após calcular SHA-256.

Esperado: Verificador rejeita hash ou sequência incompleta.

Passa somente se: Alteração detectada e execução marcada INVALID, não PASS.

Arquivos: SHA256SUMS, verification.json

Vínculo: REQ-04 · R4 + responsável da interface

T10 · G2 · NÃO EXECUTADO

Atualização e rollback

Método: Somente desarmado: validar pacote assinado conhecido e pacote de assinatura inválida; testar retorno à imagem anterior sob procedimento aprovado.

Esperado: Pacote inválido recusado; identidade e estado da imagem anterior verificáveis.

Passa somente se: Sem boot de imagem não autorizada; rollback observado ou bloqueio reportado.

Arquivos: update-audit.json, image-hashes.json, boot-log

Vínculo: REQ-02 · R4 + responsável da interface

T11 · G1/G2 · NÃO EXECUTADO

Carga / duração

Método: Rodar baseline e carga IA aprovada por 30 min (I), amostragem de recursos a 1 Hz; identificar PC/SoM, dataset, ambiente e carga.

Esperado: Sem OOM, reinício ou perda de evidência; relatar distribuição de latência/temperatura.

Passa somente se: Dentro dos limites assinados para memória/temperatura/latência; sem limiar definido, BLOCKED.

Arquivos: resources.csv, latency.csv, manifest.json

Vínculo: REQ-01 · R4 + responsável da interface

T12 · G3 · NÃO EXECUTADO

Missão de campo

Método: Executar somente plano aceito, com operador habilitado e autorizações aplicáveis; interromper ao cruzar condição de parada aprovada.

Esperado: Relatório do voo separado do SITL/HIL; rastrear incidentes e configuração.

Passa somente se: Aceite assinado do operador/reviewer, sem extrapolar para outras missões.

Arquivos: flight-log, permits-index.json, operator-signoff.json

Vínculo: REQ-04 · R4 + responsável da interface

Classificar falhas sem esconder evidência ausente

ClasseExemploResultado
CONFIGModelo/revisão/hash ausente ou divergenteBLOCKED; congelar configuração.
INTERFACEMensagem, frequência ou unidade diferenteFAIL; registrar esperado/observado.
STATETransição ou efeito inesperadoFAIL; preservar logs, impedir promoção.
ISOLATIONIA alcança controle não autorizadoFAIL; interromper e revisar permissões.
RESOURCEOOM, temperatura ou latência fora do limiteFAIL se medido; BLOCKED se limite não definido.
EVIDENCEHash, sincronização ou sequência inválidaINVALID; nunca contar como ensaio aprovado.
REGULATORYPermissão necessária ausenteBLOCKED antes do campo.

Como executar e auditar

1. Copiar o manifesto e preencher versões e limites com R1/R2/R3. 2. Aprovar as expectativas antes do ensaio. 3. Executar somente a fase autorizada e capturar eventos originais. 4. Exportar resumo por caso com status, método, observado e arquivos. 5. Executar o verificador offline e submeter o pacote a R4. Os adaptadores do simulador/hardware são uma dependência ainda não implementada; o verificador verifica integridade e completude, não certifica dinâmica de voo.

python3 evaluate_run.py --manifest manifest.json --results results.json --root evidence/

O programa termina com erro se um resultado PASS não tiver configuração completa, evidência com SHA-256 correto e observações. NOT_EXECUTED e BLOCKED permanecem visíveis. O self-test fornecido testa o verificador com fixtures sintéticas; não executa PX4, ArduPilot ou hardware.

Baixar especificação e verificador offline (.zip) · Baixar especificação em Markdown

Sete perguntas por configuração

PerguntaEstado / propostaComo verificar
Quem pode ler?U: contas do FC/GCS, IA, manutenção e reviewer ainda não inventariadas.Matriz de acesso + teste de conta sem privilégio.
Onde fica?I: logs da bancada em armazenamento local escolhido pelo comprador; local real U.Configuração de disco, cópias, criptografia, retenção e evidência de hospedagem.
Para quem transmite?U: todos os destinos de runtime/update/licença devem ser observados.Inventário DNS/IP/porta + captura com e sem internet; não confundir Site RFQ com telemetria de voo.
Quem atualiza?U: fornecedor, administrador, bootloader, imagem e modelo.Chaves, assinatura, política, log e teste de rollback.
Quem controla?I: FC retém controle determinístico; IA isolada; implementação ainda não demonstrada.Revisão de permissões e caso T02, com decisões/estado do FC.
Pode ficar offline?I: meta do mínimo A; não comprovada para licença/BSP/modelo.T05/T06 + bloqueio de egress e registro de dependências.
Pós-processamento onde / por quem?U: estação, software, operador e direitos sobre dados.Contrato de tratamento, local de armazenamento, licença e trilha de exportação.

Marca taiwanesa, montagem local, declaração do fornecedor, ensaio e elegibilidade de compra são evidências diferentes. Nenhuma configuração completa foi qualificada como “não vermelha”.

Defina primeiro o que precisa ser verificado.

Envie equipamentos existentes, local, restrições e entregáveis. A coordenação recebe a solicitação; candidatos não são notificados automaticamente. Campos desconhecidos podem ficar “Ainda não definido”.

Abrir RFQ A em BE PASSIVE ↗