O sítio kshana.dev
web/ é a árvore que o GitHub Pages serve como https://kshana.dev: as páginas (index.html, missions.html, capabilities.html, evidence.html, developers.html, editions.html), a documentação em docs/ e o Kshana Studio em studio/ (servido em https://kshana.dev/studio/), a aplicação que executa o motor no navegador como WebAssembly (WASM), sem computação do lado do servidor e sem nada enviado. O Studio tem duas vistas de um só motor: a vista Simples (studio/index.html, a resposta primeiro, em linguagem simples) e a vista Avançada (studio/advanced/index.html, o painel completo), que partilha o motor, o worker, os módulos e os dados da vista Simples através de <base href="../">.
Desde a 0.35.0, o Studio tem mais quatro vistas, cada uma na sua própria página com <base href="../">, sem indexação por motores de pesquisa e com uma pasta de amostras sintéticas que o seu teste lê:
studio/trust/: a vista de confiança marítima, uma pontuação de confiança do recetor para um fluxo de posições de uma embarcação, com uma trajetória de demonstração emtrust/demo/.studio/training/: o debriefing de formação de tripulações, a repetir NMEA sintético com um evento de jamming, drag-off, time-spoof ou replay (training/demo/).studio/interference/: o mapa de interferência e a exposição do percurso (interference/demo/).studio/tools/: uma página de cartões de ferramentas com exemplos (tools/examples/,tools/samples/), incluindo pacotes de evidências assinados (#evidence), a exportação de test bench (#bench), o mapeamento de compliance (#compliance), a verificação Galileo OSNMA (#osnma) e os canais do assistente de IA (#ai).
De onde vêm os ficheiros#
Aqui existem três tipos de ficheiro, e são alterados de três formas diferentes.
Ficheiros portados. As páginas,
docs/,css/,js/,assets/, os dados do sítio emdata/(land.json,search.json,series.json) e tudo o que está emstudio/são escritos porweb/tools/port_site.pya partir de uma compilação do sítio e do código-fonte do Studio.PORT-MANIFEST.jsonlista cada um deles com a respetiva soma de controlo SHA-256 (Secure Hash Algorithm, 256 bits). Não os edite aqui:site.test.mjsfalha perante uma edição manual. Altere a fonte e execute de novo a portagem:python3 web/tools/port_site.py --site <built site folder> --studio <Studio folder> python3 web/tools/port_site.py --site <built site folder> --studio <Studio folder> --checkA portagem é determinista: uma segunda execução não escreve nada, e
--checktermina com 1 seweb/não for o que a portagem escreveria. Transporta sem alterações os ficheiros de rastreio da compilação do sítio (as etiquetas canónicas, de cartão social e schema.org de cada página,robots.txt,sitemap.xml,llms.txt,llms-full.txt), verifica-os, escrevelegacy-redirects.js,404.htmle a página de reencaminhamento no endereço antigo do Studio (playground/index.html, para/studio/), e aponta todas as páginas para os tipos de letra e as bibliotecas de scripts locais (abaixo).Ficheiros que
web/possui. São fontes por direito próprio e a portagem nunca lhes toca:capabilities.jsoné a fonte estruturada dos cartões de capacidades e da grelha de normas. Edite esse ficheiro, e não o HTML.data/verification-matrix.jsoné gerado (cargo run --bin gen_validation_artifacts) e fixado portests/verification_artifacts_doc_sync.rs; não o edite à mão.data/card-matrix-map.json,data/oracle-references.jsonedata/standards-matrix-map.jsonsão mapeamentos mantidos à mão que o mesmo teste verifica face à matriz gerada. As cópias do Studio emstudio/data/são estes ficheiros, byte a byte.og-card.svg,og-card.pngeog-card.rendered-from.jsonsão o cartão social (python3 tools/gen_og_card.py).CNAME,.well-known/security.txt,favicon.svg.fonts/evendor/: os ficheiros de tipos de letra e a biblioteca de scripts que as páginas usam, descarregados uma vez portools/fetch_third_party.pye registados (ver "Sem pedidos a terceiros").build.sh,smoke.mjs,site.test.mjs,legacy-urls.test.mjsetools/.
Resultados da compilação, ignorados pelo git e produzidos por
build.sh:pkg/(o pacotewasm-pack, que é também a partir do qual o pacote npm é construído),studio/pkg/(o mesmo pacote no local onde o Studio o importa) escenarios/(todos os cenários de referência, no endereço de onde o sítio anterior de página única os servia).
Compilar e servir localmente#
./web/build.sh # compiles the WASM module and stages it for the Studio
python3 -m http.server -d web 8000 # serve over HTTP (required for WASM)
# open http://localhost:8000/
Sem a cadeia de ferramentas WASM, KSHANA_WASM_PKG=<a built pkg folder> ./web/build.sh prepara um pacote existente em vez de compilar um. O fluxo de trabalho das Pages nunca o usa.
Testes#
node web/smoke.mjs # the WASM bindings (needs web/pkg)
node web/site.test.mjs # the ported tree: manifest, version, counts, links, inline JSON
node web/tools/inline-json.test.mjs # the guard for corrupt inline page data (an unescaped version bump)
node web/legacy-urls.test.mjs # every old kshana.dev address still resolves
for f in web/studio/lib/*.test.mjs; do node "$f"; done # the Studio's modules
Cada módulo em studio/lib/ é lógica pura com um *.test.mjs correspondente; os controladores do DOM (Document Object Model, a árvore de elementos da página) do Studio são studio/app.js (a vista Simples) e studio/advanced.js (a vista Avançada). A integração contínua executa cada um deles como um passo próprio e falha se um ficheiro de teste em web/ não tiver passo.
Sem pedidos a terceiros#
O kshana.dev serve os seus próprios tipos de letra, estilos e scripts. Nenhuma página faz um pedido a um servidor de tipos de letra ou de scripts, pelo que o endereço de um visitante não lhe é entregue.
O sítio e o Studio são escritos para o Google Fonts e para um servidor de scripts. A portagem substitui a ligação ao Google Fonts de cada página pela folha de estilos correspondente em fonts/ (as mesmas regras @font-face e os mesmos ficheiros de tipos de letra, todos os subconjuntos, de modo que o texto seja desenhado como antes) e cada endereço de servidor de scripts pelo ficheiro em vendor/. fonts/FONTS.json e vendor/VENDOR.json registam de onde veio cada ficheiro e a sua soma de controlo; os tipos de letra estão sob a SIL Open Font License (fonts/OFL-*.txt) e o three.js sob a licença MIT (vendor/three@…/LICENSE).
tools/fetch_third_party.py --from <site folder> --from <Studio folder> é o único passo que usa a rede. Execute-o de novo apenas quando uma página pedir um conjunto de tipos de letra ou uma versão de biblioteca que não esteja aqui: a portagem recusa e di-lo. site.test.mjs falha se alguma página, folha de estilos ou script portado nomear um servidor de tipos de letra ou carregar algo de outro servidor.
A página 404#
O GitHub Pages responde a um endereço em falta com /404.html e o estado 404. A portagem constrói essa página a partir do invólucro da própria página inicial (navegação, rodapé, pesquisa) à volta de uma mensagem curta com ligações para o Início, a Documentação e o Studio. Todos os endereços nela são escritos a partir da raiz do sítio, porque é servida a qualquer profundidade.
Endereços antigos#
Até à v0.28.0, o sítio era uma página única, e tudo ficava atrás de um fragmento em / (/#playground, /#ledger, ligações de partilha como /#s=…, incorporações como /?embed=1&…; o nome antigo de um separador numa ligação de incorporação, como tab=fom, abre o separador do Studio que o substituiu). tools/legacy-urls.json lista cada um desses endereços que material publicado usa e onde passa agora a ficar; a página inicial carrega legacy-redirects.js, gerado a partir dessa lista, para os encaminhar para lá. Acrescente um caso à lista antes de retirar qualquer endereço.
Implementação#
O fluxo de trabalho do GitHub Actions pages implementa uma etiqueta de versão, e não main: release.yml aciona-o depois de uma versão ser publicada, e um acionamento manual reimplementa uma etiqueta indicada. Executa build.sh, prepara web/ sem os testes, o script de compilação, tools/, o manifesto e este ficheiro, e publica o resultado no GitHub Pages.