A jornada câmera → agente → foto → 3D → humano animado
Varredura da costura, não dos projetos. Outros tópicos avaliam cada repositório; aqui a obra avaliada é a linha de montagem inteira, e as notas são da JORNADA como peça única. Medida pela régua em REGUA.md. Escrita em 01/10/2026, sobre o trabalho de 30/09. Leitura só: nada foi alterado em nenhum repositório avaliado.
O desenho: jornada.svg — abra primeiro. Ele é o instrumento; este texto é a legenda.
1. A metáfora em uma frase
A jornada é uma linha de montagem de oficina onde um corpo humano é lido de um vídeo, peças são moldadas a partir de fotos, e as duas coisas se encontram numa bancada onde o humano é vestido osso por osso.
A metáfora é real, operante e física — e não é de ninguém. Cada estação a tem por conta própria, e nenhum documento da casa enuncia a linha inteira. O arquivo que mais perto chega é asset-pipeline-dashboard/docs/processos/montar-humano.md, que descreve o processo de montar um humano mas não a jornada que o alimenta: ele começa em "o founder manda fotos" e não menciona o vídeo, o mocap nem o pacote de humano como entradas da mesma obra.
Dentro de cada estação a metáfora é das mais fortes da casa:
video-mocapé uma esteira de leitura do corpo, e cada estágio é uma pasta de verdade:captura/,juizo/,maos/,rosto/,limpeza/,pacote/,porta/,teto/. O desfecho de cada quadro é vocabulário do projeto — BOM / REPARADO / LACUNA (README.md:30-34).asset-pipeline-dashboardé o acervo:esteira.js,oficina.js,lixeira.js,ceu.js,corpo-canonico.js,peca-de-humano.js,galeria-publica.js,routes/porta.js. Cada módulo declara o objeto físico na primeira linha útil.tool-snippetsé a bancada com moradores:t.jsé "o cola", as ferramentas são "moradores" (README.md:21), ef/é ferramentas.almost-humanoidé o contrato do corpo e o tocador, com vocabulário físico na camada que atravessa fronteira (canonical-bones.js,envelope/pecas.js,ragdoll.js,stride.js).ez3dé a exceção: tem vocabulário de domínio em português (acervo.js,descricao.js,pedidoLeves.js,maquina.js) e nenhuma metáfora central. Não há molde, não há câmara, não há bancada. O gesto físico que define o projeto — fotografar um objeto e ganhar a forma dele — não tem nome em lugar nenhum do código.
A consequência da metáfora não ter dono: as emendas desta jornada não são defeitos de nenhum dos projetos. Cada um fez a sua parte bem, em sua própria oficina, e a linha que as liga não é propriedade de ninguém — nenhum repositório tem um documento, um teste ou um módulo cuja matéria seja a jornada. Isso explica quase todos os achados abaixo: os contratos são bons, as fronteiras são limpas, e o que falha é sempre a costura, que não tem autor.
2. Notas
Notas da jornada como obra, não de cada projeto.
| # | Critério | Nota | Evidência |
|---|---|---|---|
| 1 | Metáfora central | 2 | A linha de montagem é operante e física em cada estação, mas nenhum documento da casa a enuncia inteira; docs/processos/montar-humano.md cobre só a metade das peças. ez3d não tem metáfora. |
| 2 | Fisicalidade da metáfora | 3 | esteira, porta, oficina, lixeira, bancada, peça, osso, encaixe, boneco, céu, corredor, molde, ficha — e chega ao nome de arquivo: video-mocap/porta/armazem.mjs, acervo/src/oficina.js:1, maos/territorio.mjs, entrega/boneco.mjs. |
| 3 | Alcance na estrutura | 2 | Chega ao degrau 5 dentro das estações (/api/esteiras, migrations/026_peca_de_humano.sql:127, coluna assets.osso com CHECK de 55 valores, MIME application/vnd.did.acervo.arvore+json) e evapora nas emendas: a fronteira ez3d→acervo é 2 rotas HTTP genéricas; a fronteira video-mocap→player é uma tradução campo-a-campo escrita à mão. |
| 4 | Linguagem ubíqua | 2 | Os conceitos centrais têm nome único e gate que recusa o errado: almost-humanoid/tests/qa-ccp-14-pecas.mjs (88 asserções, rodei: verde) reprova osso em PT-BR na chave, osso inventado e campo desconhecido; acervo/migrations/026:178-196 põe CHECK de 55 valores no banco e test/banco-em-dia.js:99 reprova se o CHECK sumir. A periferia tem sinônimo: encaixe e altura com 2 sentidos cada, e 4 pares EN/PT em acervo/src/peca-de-humano.js (height/above/bone/part). |
| 5 | Modularidade | 3 | Troca real já aconteceu e ficou contida: o motor de captura foi trocado (MediaPipe → SAM 3D Body) dentro de captura/ (video-mocap/README.md:62-66). O estado é o disco (esteira/contrato.mjs:19-33). O ez3d troca de provider de reconstrução por configuração. |
| 6 | Isolamento | 3 | video-mocap/test/modulos.mjs reprova import de qualquer coisa que não seja o produto ou o Node; acervo/src/chave-de-edicao.js:20-26 recusa virar principal de autenticação por raciocínio escrito; ez3d/migrations/011_sem_osso.sql reverteu uma capacidade por posse da afirmação. O contrato mora em terceiro, de propósito. |
| 7 | Coesão | 3 | maos/ são as mãos, juizo/ é o veredito, lixeira/ é a lixeira — e video-mocap/test/ espelha 18 pastas 1:1, incluindo miolo.mjs e mundo.mjs. As gavetas reais são duas e ambas nomeadas: video-mocap/x/ (o nome admite, tem PROVAS.md) e trabalho/ (um filho só). almost-humanoid/spikes/ é tipo de trabalho, com README. |
| 8 | Objetos a serviço da metáfora | 2 | As coisas centrais são coisas: HumanoidPlayer, Ragdoll, SkeletonRig, PoseTimeline, CommandQueue, e no video-mocap e no acervo os objetos são arquivos com nome de peça. Agentes sobrevivem concentrados em dois nichos do almost-humanoid: adaptadores de biblioteca de terceiro (legítimo) e o editor (EffectorManager, AnimationController, PosingEngine). |
| 9 | Desenhabilidade | 2 | O desenho fechou sem inventar peça e sem nenhuma caixa cinza — tudo na jornada tem corpo. Mas exigiu três fios vermelhos (ligações que o desenho precisa e o código não tem) e deixou duas peças invisíveis, a principal sendo o agendador que esteira/esteira.mjs:443 invoca e que não existe. Nota 3 exigiria que as peças sem corpo fossem "poucas e nomeadas"; o agendador não está nomeado em lugar nenhum. |
| 10 | Ausência de contradições internas | 2 | Ver seção 5. Oito contradições têm razão medida e precedência escrita; três são silenciosas, e nenhuma é estrutural. Há inclusive gate cruzado de contrato — acervo/test/contrato-em-dia.js lê o schema canônico de outro repositório e reprova campo a campo. |
Soma: 24 / 30.
O medidor de cinco segundos, código próprio (vendor e node_modules fora):
| estação | arquivos com nome de abstração | identificadores |
|---|---|---|
video-mocap | 0 | 0 |
asset-pipeline-dashboard | 0 | 5, todos falso positivo (alturaUtil, fonteUtilizavel — substring de palavra portuguesa) |
tool-snippets | 0 | 0 (os 52 achados estão em site/vendor/: Tweakpane, GLTFLoader) |
ez3d | 4 em 166 (2,4%) | 11, dos quais 7 são React Context e 3 são providers/ no sentido do negócio |
almost-humanoid | 7 em 158 (4,4%) | 23 |
Jornada inteira: 11 arquivos com nome de abstração em 821 de código próprio. É o número mais baixo que a casa produziu, e sustenta a nota 3 em fisicalidade.
A camada que puxou o resultado para baixo é a B — o alcance. Os critérios 3 e 4 somam 4 de 6 possíveis, e a razão é a mesma nos dois: a metáfora e o vocabulário são fortes dentro de cada estação e governam pouco entre elas. A camada D confirma: o desenho fechou, mas só com fios vermelhos exatamente nas emendas.
Uma nota sobre como estas notas foram fechadas. Rodei um avaliador adversarial contra a primeira versão desta tabela, com instrução de contestar. Ele derrubou três notas minhas, com evidência que eu conferi e aceitei: linguagem ubíqua (eu dei 1 e não vi três gates de vocabulário que existem e rodam), coesão (eu dei 2 contando como gaveta cinco diretórios que o .gitignore exclui — artefato de bancada não é arquitetura) e contradições (eu dei 1 sem contar quantas têm precedência escrita). Três afirmações minhas eram factualmente falsas e estão corrigidas na seção
- A soma subiu de 21 para 24, e a correção é do avaliador, não do terreno.
3. O desenho
jornada.svg — a linha de montagem em quatro faixas (a entrada, as duas esteiras, o acervo, a saída), com as sete emendas marcadas em vermelho.
Regras seguidas: cada caixa é um objeto do mundo; cada fio é uma ligação que existe no código, rotulada com o que passa (o vídeo, a foto, o pacote, a malha, as peças, o humano, o item); fio vermelho tracejado é ligação que o desenho precisou e o código não tem; fio cinza pontilhado é dependência documental (lida, não importada).
4. Onde o desenho não fechou
Esta é a seção mais valiosa, e aqui a arquitetura confessa três coisas.
Peça sem corpo — uma, e é a mais importante da jornada.
A própria linha de montagem não tem corpo. Não existe repositório, módulo, documento ou teste cuja matéria seja a jornada inteira. Ela existe como fato operacional — foi exercida o dia 30/09 inteiro — e não existe como peça. Não desenhei caixa cinza para ela porque ela não é uma caixa: é o chão em que as outras estão, e esse chão não está em lugar nenhum. Todas as sete emendas são consequência disso.
Ligações que o código não tem — três, e estão no desenho em vermelho.
- Do anexo à esteira. O vídeo que o founder manda chega ao agente como URL, e a foto como caminho local —
agnts/supercli/src/format-history.js:88, com a razão escrita (vídeo pesa até 200 MB e o agente raramente precisa dos bytes). A ferramenta que remenda isso existe e é boa:video-mocap/fila/do-topico.mjsbaixa o vídeo do tópico e o deposita na entrada. Mas nada a chama: os únicos chamadores no repositório são um teste e o README. O gatilho é o julgamento do agente. (Ressalva honesta:fila/está formalmente aposentada — ver seção 5 —, então esta ferramenta é de mão por decisão, não por esquecimento. O fio continua vermelho porque a capacidade que ela cobre, "vídeo largado na conversa entra na linha", não migrou para a esteira.) - Da peça ao acervo, com escala. O desenho precisa de um fio levando a escala real do objeto fotografado, e ele não existe: o motor de reconstrução normaliza toda peça para caixa de lado 1 antes do ez3d ver o arquivo, e não há campo de escala original em nenhum dos dois repositórios.
- Do humano de volta ao editor. O editor de montagem está construído e o contrato está provado dos dois lados, e eles não se tocam:
tool-snippets/site/base/acervo.js:78exportasessaoDeEdicaoe nenhum arquivo a chama.
Peça invisível — uma, e é do orquestrador vivo.
O agendador da esteira. O produto promete o gesto "grava uns segundos no celular, larga, e de manhã está pronto", e a janela 01:00–07:00 está codificada. Mas quem acorda à 01:00 não está em lugar nenhum da jornada. A própria esteira o invoca sem o ter — video-mocap/esteira/esteira.mjs:443: "UMA RODADA sobre todos os trabalhos da raiz. É o que um agendador chama." Grepei cron, systemd, timer, agendador em esteira/, entrada/, did.json e server.js: não existe.
O agravante é que havia um e ele foi removido com boa razão: entrada/da-porta.mjs:13-22 conta que a porta tinha um timer de cinco minutos dentro do próprio processo do servidor, e que esse timer era um segundo orquestrador com lista de etapas própria. Tirá-lo foi acertado; o substituto ficou fora do repositório. O desenho da jornada tem uma seta que entra na esteira vindo de fora da folha.
Uma segunda, menor: o runner de provas pesadas (heavy run --gate) que video-mocap/x/PROVAS.md usa é peça de infraestrutura da casa que o desenho das provas precisa e que não vive em repositório nenhum da jornada.
5. Contradições
Internas (dentro de uma estação)
Nenhuma relevante. É notável e merece ser dito: as contradições desta jornada são todas de fronteira. Cada estação é internamente coerente.
Com os vizinhos
As silenciosas — três. São as que custam.
(a) Dois implementadores do contrato do humano, e o dono não é quem monta. Tipo 1.
almost-humanoid/docs/CCP-MANIFEST-1.4.md:146-148: "O validador mora aqui […] É o que 'o dono do contrato de humano é o almost-humanoid' quer dizer na prática: o acervo importa a regra daqui em vez de reimplementá-la."asset-pipeline-dashboard/scripts/monta-boneco-de-massinha.js:91-94: importafs,os,path,../src/oficina. Zero import do almost-humanoid. A leitura do manifesto é reimplementada emsrc/humano.jse a validação de forma emsrc/peca-de-humano.js.
Quem deveria ganhar: o almost-humanoid, porque ele já declarou a posse e já escreveu o validador. Mas a promessa não é cumprível hoje por um motivo estrutural que ninguém nomeou: o almost-humanoid é "private": true e não declara exports; só o subpacote packages/player é importável, e o contrato (src/envelope/) está fora dele — confirmado: packages/player/src/proporcao-runtime.js não importa src/envelope/ uma única vez. O contrato não tem porta de saída. É isso que precisa nascer primeiro.
Já custou uma vez: pecas.ossos, escrito pelo acervo, era recusado pelo próprio contrato da casa com PECAS_FIELD_UNKNOWN — "o manifest publicado do boneco de massinha era recusado pelo próprio contrato da casa" (CCP-MANIFEST-1.5.md:278-284).
(b) Um campo de contrato que ninguém escreve e ninguém lê — e ele é o meta, não a procedência. Tipo 2.
almost-humanoid/src/envelope/manifest.js:420-425e:447—anim.library[].metacriado e validado.video-mocap/pacote/montar.mjs:309-318— a entrada da biblioteca escrevename, clip, fps, duration, pack, category, rootMotion. Semmeta. A procedência por clipe segue na extensão privadaextensions.LUDID_video_mocap(montar.mjs:369-372), que o almost-humanoid não conhece (zero ocorrências emsrc/,packages/,tools/).
O relato que pediu isso foi fechado quando a spec criou o campo (CONTRATO.md:385), e a costura não mexeu em nenhuma das pontas. Quem deveria ganhar: o campo oficial, e a dívida já está declarada em CONTRATO.md:360-363.
Correção de uma afirmação que eu fiz e estava errada. Eu havia escrito que oprocedencia.jsoné "lido por ninguém". Não é, e em duas camadas. Existem dois arquivos diferentes com esse nome na jornada: o do ez3d, que o acervo ingere como peçadadodo item (acervo/src/ferramentas.js:85-89— "é o que permite auditar de onde um modelo veio sem ter que voltar ao banco do EZ3D"; a rota emsrc/routes/ferramentas.js:131-144, provado emtest/integracao-ez3d-sync.js:177); e o do video-mocap, que é lido dentro do próprio projeto porteto/medir.py:80, para saber se um refino já foi aplicado antes de medir. Esse leitor nasceu de um incidente que vale citar, porque é o oposto de dívida: medir um pacote já refinado e chamar o resultado de cru produziu um número publicado falso (1,93 cm contra os 2,85 reais), emedir.py:66-77registra isso — "Medida que engana é pior que medida ausente." O que de fato não atravessa a fronteira é a procedência por clipe rumo aoanim.library[].meta, que é a contradição acima.
(c) Um sinônimo inventado na emenda, que não vem de ninguém. Tipo 5.
asset-pipeline-dashboard/src/humano.js:314—(entrada.encaixe || entrada.fit), e adiantee.pos ?? e.position,e.quat ?? e.rotation,e.escala ?? e.scale.- Nenhum produtor da casa escreve
fit,position,rotationouscalenesse lugar — procurei emalmost-humanoid,video-mocap,ez3d,tool-snippetse no próprio acervo. Nenhuma versão do CCP os define.
Quem deveria ganhar: o português, que é o contrato. O alias em inglês é tolerância defensiva contra um emissor que não existe, e tem custo medido: o tool-snippets lê só a forma portuguesa (site/bancada/bancada.js:97), então um humano escrito na forma fit seria lido pelo acervo e invisível para o editor.
As declaradas — com razão escrita e precedência. São oito, e é por elas que o critério 10 fica em 2 e não em 1.
| contradição | tipo | os dois lados | quem ganha, e está escrito |
|---|---|---|---|
| O contrato em 3 versões vivas | 2 | video-mocap/pacote/montar.mjs:80 escreve 1.3 · acervo/src/humano.js:248 lê 1.4 · almost-humanoid/src/envelope/manifest.js:112 é 1.5 | Ninguém precisa ganhar: a régua de aceitação compara só o MAJOR, de propósito (manifest.js:479). Um 1.3 passa no validador 1.5. |
| A cópia datada defasada | 3 | video-mocap/pacote/CONTRATO.md:3 lida contra 1.4 · spec em 1.5 | A cópia datada existe para tornar isso visível, e funcionou (CONTRATO.md:3-11). Um dia de atraso num contrato nascido ontem. |
pecas.ossos × proporcao.ossos | 2 | acervo/docs/tipos-da-casa.md:473-498 escreve no endereço antigo · almost-humanoid/src/envelope/proporcao.js:578-595 migra na leitura | proporcao.ossos vence, escrito em proporcao.js:584-588, com migração automática do endereço legado. |
altura/acima × encaixe | 4 | acervo/src/peca-de-humano.js:444 · acervo/src/humano.js:262 | encaixe vence, em código (public/vendor/visor-humano.js:626-629, com o motivo: "são duas descrições da mesma coisa, e aplicar as duas somaria dois deslocamentos") e em doc (tipos-da-casa.md:451-454). |
encaixe com dois sentidos | 5 | acervo/docs/processos/montar-humano.md:48-50 (a entrada do osso) · acervo/docs/tipos-da-casa.md:415 (a pose dentro dela) | Não decidido — mas a colisão está registrada entre parênteses pelo próprio projeto. Um dos dois precisa de outro nome. |
height/above/bone/part aceitos ao lado dos nomes em português | 5 | acervo/src/peca-de-humano.js:444-445, :286-287 | O português vence, e a tolerância tem razão escrita em :281-284: "Aceita bone tambem porque o contrato do almost-humanoid e escrito em ingles, e um exportador de la vai escrever bone antes de escrever osso." Tolerância de fronteira declarada é diferente do fit órfão acima, que não tem emissor nenhum. |
VRM_MINIMO copiado da especificação | 2 | video-mocap/animacao/canonico.mjs:136 · a lista canônica no almost-humanoid | A cópia vence localmente, por decisão escrita: "é cópia de propósito: o desacoplamento manda que este produto não importe código de lá. Se a especificação mudar, muda aqui, e o relato diz quem mudou" (canonico.mjs:132-134). |
| Dois orquestradores do mesmo pipeline | 1 | video-mocap/fila/rodar.mjs (varria pasta, janela da madrugada) · video-mocap/porta/rodada.mjs (timer de 5 min no servidor) | A esteira vence, e a resolução é modelar: fila/APOSENTADO.md põe os dois lado a lado numa tabela, nomeia o dano ("o mesmo vídeo entrando por caminhos diferentes saía com um conjunto diferente de etapas") e existe "para que ninguém precise ler os dois fluxos para entender qual é o de verdade". É a contradição mais cara possível — tipo 1, dois donos do mesmo processo — resolvida e documentada. |
E duas que não são contradição, e merecem registro invertido.
O gate do osso que cede. A regra "um clipe não pode animar a translação de um osso que a proporção move" é executável em três lugares com severidade decrescente, e a graduação é argumentada: acervo/scripts/monta-boneco-de-massinha.js:637-641 lança e aborta a montagem; almost-humanoid/src/envelope/proporcao.js:545-552 lança PROPORCAO_OSSO_ANIMADO com escopo maior; packages/player/src/proporcao-runtime.js:609-634 apenas avisa, porque "o player recebeu um glb que já está no ar, e derrubar o humano inteiro por um conflito entre dois campos dele deixaria o host sem nada na tela" (:598-602). Severidade que decresce conforme o dado se afasta de quem pode consertá-lo é o melhor padrão de fronteira da casa, e é o modelo das ações abaixo.
O gate cruzado de contrato, que existe e eu afirmei que não existia. acervo/test/contrato-em-dia.js lê o schema canônico de outro repositório do disco — e, quando o disco não o tem, da URL publicada no $id da própria cópia, explicitamente porque "na VM e em qualquer CI o teste PULAVA — passava verde sem ter conferido nada, que e o pior estado possivel pra uma sentinela". Compara caminho e valor campo a campo, nomeia o caminho exato do que divergiu e sai com código 1. Roda no corredor (test/corredor.js:81). Nasceu de um incidente datado de 27/08/2026, em que três campos divergiram em silêncio. Esse gate é o molde pronto para a ação 5.
6. Ações propostas
Ordenadas por nota que movem por hora gasta. As três primeiras constroem gate; é deliberado.
| # | Ação | Horas | Critério | De → para |
|---|---|---|---|---|
| 1 | Apagar o alias fit e os três irmãos (position, rotation, scale) de acervo/src/humano.js:314-318: nenhum produtor os escreve, e o validador do dono do contrato já lança neles (almost-humanoid/src/envelope/pecas.js:165, ENCAIXE_FIELD_UNKNOWN). O acervo está tolerando o que o contrato recusa. Distinguir dos pares height/above/bone/part de peca-de-humano.js, que têm emissor real e razão escrita — esses ficam. | 1 h | 4, 10 | sustenta 2 em 4 |
| 2 | Escrever a frase da jornada num docs/a-linha.md do acervo (ou do almost-humanoid), nomeando as estações, o que passa entre elas e quem é dono de cada contrato. É a peça sem corpo da seção 4. | 2 h | 1, 9 | 2 → 3 |
| 3 | Dar porta de saída ao contrato: exports no almost-humanoid expondo src/envelope/ (ou mover pecas.js/proporcao.js/canonical-bones.js para dentro de packages/player, que já é publicável). Sem isso, a promessa escrita em CCP-MANIFEST-1.4.md:146-148 não é cumprível. | 3 h | 6, 10 | mantém 3 em 6; destrava a ação 4 |
| 4 | O acervo importa a regra em vez de reimplementá-la: trocar a leitura de manifesto de src/humano.js e a validação de src/peca-de-humano.js por validatePecasShape/validateProporcaoShape do contrato. Fecha a contradição (a) e leva o acervo de CCP 1.4 para 1.5 de graça — que é o que a proporção pedida ontem precisa. | 5 h | 10, 4 | 2 → 3 em 10 |
| 5 | Um gate cruzado de nome de osso, no molde que a casa já tem: acervo/test/contrato-em-dia.js lê o schema canônico de OUTRO repositório do disco (ou da URL publicada, quando o disco não tem) e reprova campo a campo. Copiar esse molde para comparar as quatro cópias do mapa Mixamo↔VRM, e a lista OSSOS de acervo/src/peca-de-humano.js contra CANONICAL_SET do contrato. Hoje são idênticas por disciplina; o teste converte disciplina em estrutura. | 3 h | 4, 10 | 2 → 3 em 4 |
| 6 | Declarar a unidade na fronteira do ez3d: escrever extras.unit (ou unitScale) no depósito ao acervo, mesmo que seja para dizer "normalizado, sem escala real". O acervo já tem o mecanismo de leitura (src/medidas.js:47-75) e hoje cai sempre no palpite por ordem de grandeza. Para de registrar cabeça de massinha com um metro. | 2 h | 3, 10 | 2 → 3 em 3 |
| 7 | Desempatar encaixe: escolher outro nome para um dos dois sentidos. O da entrada do osso é o que tem alternativa fácil na casa ("o posto do osso", "a vaga"); o do manifesto é contrato publicado e deve ficar. A colisão já está registrada em montar-humano.md:48-50; falta decidir. | 2 h | 4 | sustenta 2 em 4 |
O que deliberadamente não propus: ligar o editor de montagem (emenda 7). Não é dívida arquitetural — é trabalho de produto em curso, e o próprio editor declara que está esperando escolha de layout, com uma frase que merece ser política da casa: "Uma ferramenta que parece pronta e não salva é pior que uma que avisa" (tool-snippets/site/f/editor-de-humano/index.html:19-20). Também não propus agendar do-topico.mjs: é decisão de operação, não de arquitetura.
7. O que eu não consegui avaliar
- A porta do agnts por dentro. O repositório
agntsestá numa pasta compartilhada com outra sessão em voo nesta máquina. Liformat-history.jsecomposer.js(leitura é liberada e segura), mas não rodei nada contra ele nem conferi o estado da árvore — o que está emformat-history.js:88eu dou como certo por ser leitura direta, e não afirmo nada sobre o resto. - A jornada em execução. Avaliei o código e os registros, não rodei a linha de ponta a ponta. As afirmações sobre o que acontece em produção vêm do que o código e os docs dizem, inclusive os números medidos por quem os escreveu.
almost-mocapealmost3d. Aparecem no mapa de dialetos de osso (são dois dos cinco) mas não estão na jornada:almost-mocapestá 4 meses sem commit ealmost3dnão tem costura com nenhuma estação. Entraram no relatório só como contagem; não os avaliei como peças da linha.- O lado do clag. A jornada toca o
clagcomo consumidor final do pacote (vendor/clag/no almost-humanoid, o protocolo de componente), e isso é assunto de outra varredura. Não o abri.