@semacode/cli 2.2.0 → 2.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (252) hide show
  1. package/LICENSE +39 -39
  2. package/README.md +251 -141
  3. package/dist/agentContext.d.ts +1 -1
  4. package/dist/agentContextPack.js +6 -1
  5. package/dist/agentContextTipos.d.ts +4 -2
  6. package/dist/agentContextTipos.js +7 -0
  7. package/dist/agentEntryPoints.js +551 -499
  8. package/dist/angular-consumer-standalone.d.ts +3 -1
  9. package/dist/angular-consumer-standalone.js +12 -8
  10. package/dist/comandos.js +4 -0
  11. package/dist/discovery/catalog.d.ts +11 -0
  12. package/dist/discovery/catalog.js +521 -0
  13. package/dist/discovery/command.d.ts +11 -0
  14. package/dist/discovery/command.js +226 -0
  15. package/dist/discovery/index.d.ts +5 -0
  16. package/dist/discovery/index.js +8 -0
  17. package/dist/discovery/ranker.d.ts +3 -0
  18. package/dist/discovery/ranker.js +310 -0
  19. package/dist/discovery/redaction.d.ts +2 -0
  20. package/dist/discovery/redaction.js +21 -0
  21. package/dist/discovery/render.d.ts +2 -0
  22. package/dist/discovery/render.js +100 -0
  23. package/dist/discovery/types.d.ts +119 -0
  24. package/dist/discovery/types.js +13 -0
  25. package/dist/drift.part01.d.ts +32 -2
  26. package/dist/drift.part01.js +2 -0
  27. package/dist/drift.part04.d.ts +3 -2
  28. package/dist/drift.part04.js +6 -3
  29. package/dist/drift.part05.d.ts +2 -1
  30. package/dist/drift.part05.js +4 -3
  31. package/dist/drift.part06.d.ts +2 -1
  32. package/dist/drift.part06.js +9 -5
  33. package/dist/drift.part07.d.ts +11 -10
  34. package/dist/drift.part07.js +40 -30
  35. package/dist/drift.part08.d.ts +2 -1
  36. package/dist/drift.part08.js +4 -3
  37. package/dist/drift.part11.js +71 -6
  38. package/dist/drift.part12.js +14 -1
  39. package/dist/drift.part13.d.ts +42 -7
  40. package/dist/drift.part13.js +660 -36
  41. package/dist/driftCache.d.ts +49 -0
  42. package/dist/driftCache.js +311 -0
  43. package/dist/driftCacheIncremental.d.ts +98 -0
  44. package/dist/driftCacheIncremental.js +596 -0
  45. package/dist/driftCatalogo.d.ts +91 -0
  46. package/dist/driftCatalogo.js +657 -0
  47. package/dist/driftCatalogoPersistente.d.ts +8 -0
  48. package/dist/driftCatalogoPersistente.js +77 -0
  49. package/dist/driftEscopo.d.ts +23 -0
  50. package/dist/driftEscopo.js +563 -0
  51. package/dist/driftEscopoReferencias.d.ts +4 -0
  52. package/dist/driftEscopoReferencias.js +265 -0
  53. package/dist/driftOrcamento.d.ts +12 -0
  54. package/dist/driftOrcamento.js +19 -3
  55. package/dist/execucoesExternas.js +5 -19
  56. package/dist/exemplosOficiais.js +29 -8
  57. package/dist/iaPrompts.d.ts +1 -1
  58. package/dist/iaPrompts.js +310 -307
  59. package/dist/index.d.ts +2 -0
  60. package/dist/index.js +23 -5
  61. package/dist/index.part01.d.ts +17 -2
  62. package/dist/index.part01.js +119 -8
  63. package/dist/index.part02.js +21 -21
  64. package/dist/index.part03.d.ts +2 -2
  65. package/dist/index.part03.js +14 -3
  66. package/dist/index.part04.d.ts +2 -2
  67. package/dist/index.part04.js +113 -101
  68. package/dist/index.part05.d.ts +1 -1
  69. package/dist/index.part05.js +99 -22
  70. package/dist/index.part06.js +6 -2
  71. package/dist/index.part07.js +24 -24
  72. package/dist/index.part08.js +1 -1
  73. package/dist/init/templates.part01.js +393 -393
  74. package/dist/init/templates.part02.js +189 -189
  75. package/dist/initTemplatesBackend.js +73 -73
  76. package/dist/initTemplatesBase.js +81 -80
  77. package/dist/initTemplatesFlutter.js +137 -137
  78. package/dist/initTemplatesRuntime.js +350 -350
  79. package/dist/initTemplatesWeb.js +309 -309
  80. package/dist/pipelineConteudo/command.js +1 -36
  81. package/dist/profileArtefatoValidadores.d.ts +3 -2
  82. package/dist/profileArtefatoValidadores.js +81 -0
  83. package/dist/profileAuthorTipos.d.ts +4 -3
  84. package/dist/profileCatalogo.d.ts +5 -5
  85. package/dist/profileCatalogo.js +30 -0
  86. package/dist/profileCommand.d.ts +8 -2
  87. package/dist/profileCommand.js +15 -5
  88. package/dist/profileRegras.d.ts +5 -5
  89. package/dist/profileRegras.js +13 -1
  90. package/dist/profileRulePacks.js +68 -0
  91. package/dist/projeto.d.ts +1 -1
  92. package/dist/projetoCarregar.d.ts +2 -2
  93. package/dist/projetoCarregar.js +47 -24
  94. package/dist/projetoCatalogo.d.ts +7 -0
  95. package/dist/projetoCatalogo.js +125 -0
  96. package/dist/projetoTipos.d.ts +14 -5
  97. package/dist/sistemasInterativos/adapterProtocol.d.ts +3 -0
  98. package/dist/sistemasInterativos/adapterProtocol.js +240 -0
  99. package/dist/sistemasInterativos/advancedCatalog.d.ts +5 -0
  100. package/dist/sistemasInterativos/advancedCatalog.js +442 -0
  101. package/dist/sistemasInterativos/autonomy.d.ts +230 -0
  102. package/dist/sistemasInterativos/autonomy.js +753 -0
  103. package/dist/sistemasInterativos/canonical.d.ts +3 -0
  104. package/dist/sistemasInterativos/canonical.js +43 -0
  105. package/dist/sistemasInterativos/catalog.d.ts +116 -0
  106. package/dist/sistemasInterativos/catalog.js +543 -0
  107. package/dist/sistemasInterativos/command.d.ts +7 -0
  108. package/dist/sistemasInterativos/command.js +311 -0
  109. package/dist/sistemasInterativos/controlRun.d.ts +56 -0
  110. package/dist/sistemasInterativos/controlRun.js +391 -0
  111. package/dist/sistemasInterativos/evidence.d.ts +5 -0
  112. package/dist/sistemasInterativos/evidence.js +306 -0
  113. package/dist/sistemasInterativos/experienceIr.d.ts +12 -0
  114. package/dist/sistemasInterativos/experienceIr.js +895 -0
  115. package/dist/sistemasInterativos/experienceIrSemantics.d.ts +30 -0
  116. package/dist/sistemasInterativos/experienceIrSemantics.js +368 -0
  117. package/dist/sistemasInterativos/experienceIrTypes.d.ts +370 -0
  118. package/dist/sistemasInterativos/experienceIrTypes.js +5 -0
  119. package/dist/sistemasInterativos/extensionCommand.d.ts +391 -0
  120. package/dist/sistemasInterativos/extensionCommand.js +383 -0
  121. package/dist/sistemasInterativos/index.d.ts +19 -0
  122. package/dist/sistemasInterativos/index.js +22 -0
  123. package/dist/sistemasInterativos/operations.d.ts +40 -0
  124. package/dist/sistemasInterativos/operations.js +1167 -0
  125. package/dist/sistemasInterativos/operationsTypes.d.ts +297 -0
  126. package/dist/sistemasInterativos/operationsTypes.js +11 -0
  127. package/dist/sistemasInterativos/planner.d.ts +2 -0
  128. package/dist/sistemasInterativos/planner.js +159 -0
  129. package/dist/sistemasInterativos/portability.d.ts +164 -0
  130. package/dist/sistemasInterativos/portability.js +539 -0
  131. package/dist/sistemasInterativos/render.d.ts +3 -0
  132. package/dist/sistemasInterativos/render.js +179 -0
  133. package/dist/sistemasInterativos/temporal.d.ts +183 -0
  134. package/dist/sistemasInterativos/temporal.js +543 -0
  135. package/dist/sistemasInterativos/types.d.ts +215 -0
  136. package/dist/sistemasInterativos/types.js +4 -0
  137. package/dist/sistemasInterativos/validator.d.ts +2 -0
  138. package/dist/sistemasInterativos/validator.js +305 -0
  139. package/dist/sync/index.js +35 -35
  140. package/docs/README.md +34 -28
  141. package/docs/ai-onboarding.md +62 -62
  142. package/docs/ai-workflow.md +9 -4
  143. package/docs/auth.md +26 -26
  144. package/docs/cli.md +79 -79
  145. package/docs/commands.md +47 -2
  146. package/docs/database.md +15 -15
  147. package/docs/deploy.md +41 -41
  148. package/docs/descoberta-capacidades.md +106 -0
  149. package/docs/documentation.md +39 -39
  150. package/docs/env.md +16 -16
  151. package/docs/frontend.md +41 -41
  152. package/docs/getting-started.md +57 -57
  153. package/docs/i18n.md +15 -15
  154. package/docs/pipeline-conteudo.md +246 -246
  155. package/docs/profiles.md +54 -45
  156. package/docs/repositories.md +43 -43
  157. package/docs/rollback.md +31 -31
  158. package/docs/security.md +32 -32
  159. package/docs/sistemas-interativos.md +376 -0
  160. package/docs/support.md +8 -8
  161. package/docs/testing.md +51 -35
  162. package/docs/vocabulary.md +29 -29
  163. package/exemplos/agendamento.sema +1 -1
  164. package/exemplos/assinatura.sema +1 -1
  165. package/exemplos/auditoria.sema +1 -1
  166. package/exemplos/autenticacao.sema +1 -1
  167. package/exemplos/author_obra_comum.sema +1 -1
  168. package/exemplos/author_tema_sensivel.sema +1 -1
  169. package/exemplos/automacao.sema +1 -1
  170. package/exemplos/cadastro_usuario.sema +1 -1
  171. package/exemplos/calculadora.sema +1 -1
  172. package/exemplos/crud_simples.sema +1 -1
  173. package/exemplos/estoque.sema +1 -1
  174. package/exemplos/exportacao.sema +1 -1
  175. package/exemplos/fila.sema +1 -1
  176. package/exemplos/integracao_externa.sema +1 -1
  177. package/exemplos/multi_tenant.sema +1 -1
  178. package/exemplos/notificacao.sema +1 -1
  179. package/exemplos/operacao_estrategia.sema +132 -132
  180. package/exemplos/operacao_estrategia_discovery.sema +220 -220
  181. package/exemplos/operacao_estrategia_fluxo.sema +114 -114
  182. package/exemplos/operacao_estrategia_gates.sema +106 -106
  183. package/exemplos/operacao_estrategia_quarentena.sema +133 -133
  184. package/exemplos/operacao_estrategia_rollout.sema +124 -124
  185. package/exemplos/pagamento.sema +1 -1
  186. package/exemplos/pagamento_dominio.sema +1 -1
  187. package/exemplos/pedido.sema +1 -1
  188. package/exemplos/permissao.sema +1 -1
  189. package/exemplos/persistencia_vendor_first.sema +1 -1
  190. package/exemplos/pipeline-conteudo/README.md +44 -44
  191. package/exemplos/pipeline-conteudo/alvos.json +23 -23
  192. package/exemplos/pipeline-conteudo/definicao.json +136 -136
  193. package/exemplos/profile_conversas.sema +165 -165
  194. package/exemplos/profile_game.sema +1 -1
  195. package/exemplos/profile_legal.sema +1 -1
  196. package/exemplos/profile_ops.sema +1 -1
  197. package/exemplos/profile_research.sema +1 -1
  198. package/exemplos/profile_simulation.sema +211 -0
  199. package/exemplos/profile_software.sema +1 -1
  200. package/exemplos/profile_workflow_n8n.sema +1 -1
  201. package/exemplos/relatorio.sema +1 -1
  202. package/exemplos/replica_analitica_erp.sema +1 -1
  203. package/exemplos/sistemas-interativos/README.md +100 -0
  204. package/exemplos/sistemas-interativos/advanced/acceptance-context-evaluate-valid.json +5 -0
  205. package/exemplos/sistemas-interativos/advanced/acceptance-lock-valid.json +16 -0
  206. package/exemplos/sistemas-interativos/advanced/asset-provenance-valid.json +32 -0
  207. package/exemplos/sistemas-interativos/advanced/autonomy-repair-valid.json +93 -0
  208. package/exemplos/sistemas-interativos/advanced/control-run-definition-valid.json +78 -0
  209. package/exemplos/sistemas-interativos/advanced/control-run-valid.json +27 -0
  210. package/exemplos/sistemas-interativos/advanced/distributed-workers-valid.json +79 -0
  211. package/exemplos/sistemas-interativos/advanced/editor-state-valid.json +42 -0
  212. package/exemplos/sistemas-interativos/advanced/engine-snapshot-after-valid.json +32 -0
  213. package/exemplos/sistemas-interativos/advanced/engine-snapshot-before-valid.json +23 -0
  214. package/exemplos/sistemas-interativos/advanced/job-orchestration-valid.json +39 -0
  215. package/exemplos/sistemas-interativos/advanced/multimodal-evidence-valid.json +46 -0
  216. package/exemplos/sistemas-interativos/advanced/multiplayer-authority-valid.json +39 -0
  217. package/exemplos/sistemas-interativos/advanced/playtest-fuzz-valid.json +37 -0
  218. package/exemplos/sistemas-interativos/advanced/portability-valid.json +104 -0
  219. package/exemplos/sistemas-interativos/advanced/temporal-evidence-valid.json +27 -0
  220. package/exemplos/sistemas-interativos/advanced/temporal-valid.json +118 -0
  221. package/exemplos/sistemas-interativos/experience-ir-valid.json +459 -0
  222. package/exemplos/sistemas-interativos/game-2d.json +83 -0
  223. package/exemplos/sistemas-interativos/game-3d-human.json +81 -0
  224. package/exemplos/sistemas-interativos/game-pixel-16-bit.json +97 -0
  225. package/exemplos/sistemas-interativos/game-pixel-8-bit.json +94 -0
  226. package/exemplos/sistemas-interativos/game-xr-human.json +80 -0
  227. package/exemplos/sistemas-interativos/hybrid-2-5d.json +108 -0
  228. package/exemplos/sistemas-interativos/protocol-mutating-rollback-valid.json +75 -0
  229. package/exemplos/sistemas-interativos/protocol-read-only-valid.json +58 -0
  230. package/exemplos/sistemas-interativos/simulation-2d-controlled.json +97 -0
  231. package/exemplos/sistemas-interativos/simulation-3d-calibrated-autonomous.json +141 -0
  232. package/exemplos/sistemas-interativos/simulation-headless-autonomous-batch.json +112 -0
  233. package/exemplos/sistemas-interativos/simulation-pixel-16-bit.json +103 -0
  234. package/exemplos/sistemas-interativos/simulation-text-controlled.json +95 -0
  235. package/exemplos/testes_embutidos.sema +1 -1
  236. package/exemplos/tratamento_erro.sema +1 -1
  237. package/exemplos/upload_arquivo.sema +1 -1
  238. package/exemplos/webhook.sema +1 -1
  239. package/node_modules/@sema/gerador-cpp/dist/index.js +176 -176
  240. package/node_modules/@sema/gerador-cpp/package.json +1 -1
  241. package/node_modules/@sema/gerador-css/dist/index.part01.js +10 -10
  242. package/node_modules/@sema/gerador-css/dist/index.part02.js +460 -460
  243. package/node_modules/@sema/gerador-dotnet/dist/index.js +169 -169
  244. package/node_modules/@sema/gerador-dotnet/package.json +1 -1
  245. package/node_modules/@sema/gerador-html/dist/index.js +17 -17
  246. package/node_modules/@sema/gerador-lua/dist/index.js +76 -47
  247. package/node_modules/@sema/gerador-lua/dist/index.js.map +1 -1
  248. package/node_modules/@sema/gerador-php/dist/index.js +113 -113
  249. package/node_modules/@sema/gerador-python/dist/index.part02.js +3 -3
  250. package/node_modules/@sema/gerador-typescript/dist/index.part02.js +11 -11
  251. package/node_modules/@sema/nucleo/dist/diagnosticos/melhorador.js +42 -42
  252. package/package.json +3 -3
@@ -0,0 +1,543 @@
1
+ // SEMA-GOVERNED: sema.produto.sistemas_interativos.temporal
2
+ // Descricao: contratos 4D e verificacao estrutural local de timeline, camera, fisica, QA, build e hardware.
3
+ import { digestJsonSistemaInterativo, digestSha256Valido, } from "./canonical.js";
4
+ export const SCHEMA_CONTRATO_TEMPORAL = "sema.interactive.temporal/v1";
5
+ export const SCHEMA_EVIDENCIA_TEMPORAL = "sema.interactive.temporal-evidence/v1";
6
+ const IDS_SEGUROS = /^[a-z0-9][a-z0-9._:/-]{0,127}$/;
7
+ const TIPOS_TRACK = new Set(["TRANSFORM", "ANIMATION", "VFX", "AUDIO", "SPEECH", "SUBTITLE", "EVENT"]);
8
+ const TIPOS_INVARIANT = new Set(["ORDER", "SYNC", "VISIBILITY", "BOUNDS", "NO_OVERLAP", "CONTINUITY"]);
9
+ const TIPOS_FISICA = new Set(["COLLISION", "ATTACHMENT", "SEPARATION", "CONSTRAINT"]);
10
+ const TIPOS_QA = new Set(["FLICKER", "GHOSTING", "POPPING", "EXPOSURE", "JITTER"]);
11
+ const TIPOS_EVIDENCIA = new Set([
12
+ "SCREENSHOT", "VIDEO", "DEPTH", "NORMALS", "OBJECT_ID", "MOTION_VECTORS", "TRANSFORMS",
13
+ "EVENT_TRACE", "COLLISION_TRACE", "AUDIO_TRACE", "TELEMETRY", "INSTALL_LOG", "LAUNCH_LOG", "PLAYTEST_TRACE",
14
+ ]);
15
+ const UNIDADES_TEMPO = new Set(["FRAME", "MILLISECOND", "SECOND", "TICK"]);
16
+ const DECISOES = new Set(["PASS", "FAIL", "INCONCLUSIVE"]);
17
+ const CHAVE_SENSIVEL = /(?:password|passwd|senha|secret|token|api.?key|private.?key|credential|authorization|cookie)/i;
18
+ const VALOR_SENSIVEL = /(?:\bBearer\s+[A-Za-z0-9._~+/-]{8,}|\b(?:sk|pk|ghp|github_pat|xox[baprs])[-_][A-Za-z0-9_-]{8,}|-----BEGIN [A-Z ]*PRIVATE KEY-----|[?&](?:access_token|token|api_?key|signature|x-amz-signature)=)/i;
19
+ const CHAVES_CONTRATO = new Set([
20
+ "schemaVersion", "contractId", "systemId", "experienceIrDigest", "coordinateSystem", "phases", "tracks",
21
+ "invariants", "shots", "physics", "temporalQa", "buildAcceptance", "hardwareTargets",
22
+ ]);
23
+ const CHAVES_BUNDLE = new Set([
24
+ "schemaVersion", "runId", "contractDigest", "producerId", "producerVersion", "producerConfigurationDigest",
25
+ "verifierId", "verifierVersion", "verifierConfigurationDigest", "independentOfProducer", "observations",
26
+ ]);
27
+ const LIMITE_METRICA = 1_000_000_000_000;
28
+ function objeto(valor) {
29
+ return typeof valor === "object" && valor !== null && !Array.isArray(valor);
30
+ }
31
+ function digestJsonSeguro(valor) {
32
+ try {
33
+ const serializado = JSON.stringify(valor);
34
+ if (typeof serializado !== "string")
35
+ throw new TypeError("json_nao_serializavel");
36
+ return digestJsonSistemaInterativo(JSON.parse(serializado));
37
+ }
38
+ catch {
39
+ return digestJsonSistemaInterativo({ invalidCanonicalInput: true });
40
+ }
41
+ }
42
+ function texto(valor) {
43
+ return typeof valor === "string" && valor.trim().length > 0;
44
+ }
45
+ function idSeguro(valor) {
46
+ return typeof valor === "string" && IDS_SEGUROS.test(valor);
47
+ }
48
+ function numeroFinito(valor) {
49
+ return typeof valor === "number" && Number.isFinite(valor);
50
+ }
51
+ function positivo(valor) {
52
+ return numeroFinito(valor) && valor > 0;
53
+ }
54
+ function naoNegativo(valor) {
55
+ return numeroFinito(valor) && valor >= 0;
56
+ }
57
+ function numeroMetricoSeguro(valor) {
58
+ return naoNegativo(valor) && valor <= LIMITE_METRICA;
59
+ }
60
+ function idsUnicosValidos(valores) {
61
+ return valores.every(idSeguro) && new Set(valores).size === valores.length;
62
+ }
63
+ function stringsUnicasValidas(valores) {
64
+ return Array.isArray(valores) && valores.length > 0 && valores.every(texto) && new Set(valores).size === valores.length;
65
+ }
66
+ function contemMaterialSensivel(valor, visitados = new Set()) {
67
+ if (typeof valor === "string")
68
+ return VALOR_SENSIVEL.test(valor);
69
+ if (!objeto(valor) && !Array.isArray(valor))
70
+ return false;
71
+ if (visitados.has(valor))
72
+ return true;
73
+ visitados.add(valor);
74
+ try {
75
+ if (Array.isArray(valor))
76
+ return valor.some((item) => contemMaterialSensivel(item, visitados));
77
+ return Object.entries(valor).some(([chave, item]) => CHAVE_SENSIVEL.test(chave) || contemMaterialSensivel(item, visitados));
78
+ }
79
+ finally {
80
+ visitados.delete(valor);
81
+ }
82
+ }
83
+ function somenteChaves(valor, permitidas) {
84
+ return Object.keys(valor).every((chave) => permitidas.has(chave));
85
+ }
86
+ function adicionar(bloqueios, condicao, codigo) {
87
+ if (!condicao)
88
+ bloqueios.push(codigo);
89
+ }
90
+ function faseValida(valor) {
91
+ return objeto(valor)
92
+ && idSeguro(valor.phaseId)
93
+ && naoNegativo(valor.start)
94
+ && positivo(valor.end)
95
+ && valor.start < valor.end
96
+ && UNIDADES_TEMPO.has(valor.timeUnit);
97
+ }
98
+ function intervaloNaFase(valor, fases) {
99
+ const fase = fases.get(valor.phaseId);
100
+ return Boolean(fase && fase.timeUnit === valor.timeUnit && valor.start >= fase.start && valor.end <= fase.end && valor.start < valor.end);
101
+ }
102
+ function checkIdsContrato(contrato) {
103
+ const ids = [
104
+ ...contrato.invariants.map((item) => item.invariantId),
105
+ ...contrato.shots.map((item) => item.shotId),
106
+ ...contrato.physics.map((item) => item.relationId),
107
+ ...contrato.temporalQa.checks.map((item) => item.checkId),
108
+ ...contrato.hardwareTargets.map((item) => `hardware:${item.profileId}`),
109
+ ];
110
+ if (contrato.buildAcceptance.required) {
111
+ ids.push("build.materialize", "build.clean_install", "build.launch", "build.smoke_playtest");
112
+ }
113
+ return ids.sort((a, b) => a.localeCompare(b));
114
+ }
115
+ function validarContratoInterno(entrada) {
116
+ const bloqueios = [];
117
+ let digest = "sha256:invalid";
118
+ if (!objeto(entrada))
119
+ return { digest, checks: [], bloqueios: ["contrato_invalido"] };
120
+ const contemSensivel = contemMaterialSensivel(entrada);
121
+ if (contemSensivel)
122
+ bloqueios.push("contrato_contem_dado_sensivel");
123
+ adicionar(bloqueios, somenteChaves(entrada, CHAVES_CONTRATO), "contrato_campo_top_level_desconhecido");
124
+ adicionar(bloqueios, entrada.schemaVersion === SCHEMA_CONTRATO_TEMPORAL, "schema_version_nao_suportada");
125
+ adicionar(bloqueios, idSeguro(entrada.contractId), "contract_id_invalido");
126
+ adicionar(bloqueios, idSeguro(entrada.systemId), "system_id_invalido");
127
+ adicionar(bloqueios, digestSha256Valido(entrada.experienceIrDigest), "experience_ir_digest_invalido");
128
+ const coordenadas = entrada.coordinateSystem;
129
+ adicionar(bloqueios, objeto(coordenadas)
130
+ && texto(coordenadas.unit)
131
+ && (coordenadas.handedness === "LEFT" || coordenadas.handedness === "RIGHT")
132
+ && ["X", "Y", "Z"].includes(String(coordenadas.upAxis))
133
+ && ["X", "Y", "Z"].includes(String(coordenadas.forwardAxis))
134
+ && coordenadas.upAxis !== coordenadas.forwardAxis, "coordinate_system_invalido");
135
+ const fasesBrutas = Array.isArray(entrada.phases) ? entrada.phases : [];
136
+ adicionar(bloqueios, fasesBrutas.length > 0 && fasesBrutas.every(faseValida), "phases_invalidas");
137
+ const fases = new Map();
138
+ if (fasesBrutas.every(faseValida)) {
139
+ adicionar(bloqueios, idsUnicosValidos(fasesBrutas.map((item) => item.phaseId)), "phase_ids_invalidos_ou_duplicados");
140
+ for (const fase of fasesBrutas)
141
+ fases.set(fase.phaseId, fase);
142
+ for (let indice = 1; indice < fasesBrutas.length; indice += 1) {
143
+ if (fasesBrutas[indice].start < fasesBrutas[indice - 1].start)
144
+ bloqueios.push("phases_fora_de_ordem");
145
+ }
146
+ }
147
+ const tracksBrutos = Array.isArray(entrada.tracks) ? entrada.tracks : [];
148
+ adicionar(bloqueios, tracksBrutos.length > 0, "tracks_ausentes");
149
+ adicionar(bloqueios, idsUnicosValidos(tracksBrutos.map((item) => objeto(item) ? item.trackId : undefined)), "track_ids_invalidos_ou_duplicados");
150
+ const trackTypes = new Map();
151
+ for (const track of tracksBrutos) {
152
+ if (!objeto(track) || !idSeguro(track.trackId) || !TIPOS_TRACK.has(track.type) || !Array.isArray(track.clips) || track.clips.length === 0) {
153
+ bloqueios.push("track_invalido");
154
+ continue;
155
+ }
156
+ trackTypes.set(track.trackId, track.type);
157
+ adicionar(bloqueios, idsUnicosValidos(track.clips.map((clip) => objeto(clip) ? clip.clipId : undefined)), "clip_ids_invalidos_ou_duplicados");
158
+ for (const clip of track.clips) {
159
+ const valido = objeto(clip)
160
+ && idSeguro(clip.clipId)
161
+ && idSeguro(clip.phaseId)
162
+ && idSeguro(clip.semanticTargetId)
163
+ && naoNegativo(clip.start)
164
+ && positivo(clip.end)
165
+ && UNIDADES_TEMPO.has(clip.timeUnit)
166
+ && intervaloNaFase(clip, fases);
167
+ adicionar(bloqueios, valido, "clip_invalido_ou_fora_da_phase");
168
+ }
169
+ }
170
+ const invariantsBrutos = Array.isArray(entrada.invariants) ? entrada.invariants : [];
171
+ adicionar(bloqueios, idsUnicosValidos(invariantsBrutos.map((item) => objeto(item) ? item.invariantId : undefined)), "invariant_ids_invalidos_ou_duplicados");
172
+ for (const item of invariantsBrutos) {
173
+ const valido = objeto(item)
174
+ && idSeguro(item.invariantId)
175
+ && TIPOS_INVARIANT.has(item.type)
176
+ && idSeguro(item.phaseId)
177
+ && fases.has(item.phaseId)
178
+ && stringsUnicasValidas(item.trackIds)
179
+ && item.trackIds.every((id) => trackTypes.has(id))
180
+ && stringsUnicasValidas(item.subjectIds)
181
+ && naoNegativo(item.threshold)
182
+ && texto(item.unit);
183
+ adicionar(bloqueios, valido, "invariant_invalido");
184
+ }
185
+ const shotsBrutos = Array.isArray(entrada.shots) ? entrada.shots : [];
186
+ adicionar(bloqueios, idsUnicosValidos(shotsBrutos.map((item) => objeto(item) ? item.shotId : undefined)), "shot_ids_invalidos_ou_duplicados");
187
+ for (const shot of shotsBrutos) {
188
+ const valido = objeto(shot)
189
+ && idSeguro(shot.shotId)
190
+ && idSeguro(shot.phaseId)
191
+ && idSeguro(shot.cameraId)
192
+ && stringsUnicasValidas(shot.subjectIds)
193
+ && !shot.subjectIds.includes(shot.cameraId)
194
+ && naoNegativo(shot.start)
195
+ && positivo(shot.end)
196
+ && UNIDADES_TEMPO.has(shot.timeUnit)
197
+ && intervaloNaFase(shot, fases)
198
+ && texto(shot.composition)
199
+ && numeroFinito(shot.minimumVisibilityRatio)
200
+ && shot.minimumVisibilityRatio >= 0
201
+ && shot.minimumVisibilityRatio <= 1
202
+ && naoNegativo(shot.maximumJitter);
203
+ adicionar(bloqueios, valido, "shot_invalido");
204
+ }
205
+ const physicsBrutos = Array.isArray(entrada.physics) ? entrada.physics : [];
206
+ adicionar(bloqueios, idsUnicosValidos(physicsBrutos.map((item) => objeto(item) ? item.relationId : undefined)), "physics_ids_invalidos_ou_duplicados");
207
+ for (const item of physicsBrutos) {
208
+ const valido = objeto(item)
209
+ && idSeguro(item.relationId)
210
+ && TIPOS_FISICA.has(item.type)
211
+ && idSeguro(item.phaseId)
212
+ && idSeguro(item.sourceId)
213
+ && idSeguro(item.targetId)
214
+ && item.sourceId !== item.targetId
215
+ && naoNegativo(item.start)
216
+ && positivo(item.end)
217
+ && UNIDADES_TEMPO.has(item.timeUnit)
218
+ && intervaloNaFase(item, fases)
219
+ && naoNegativo(item.tolerance)
220
+ && texto(item.unit);
221
+ adicionar(bloqueios, valido, "physics_relation_invalida");
222
+ }
223
+ const qaChecks = objeto(entrada.temporalQa) && Array.isArray(entrada.temporalQa.checks) ? entrada.temporalQa.checks : [];
224
+ adicionar(bloqueios, idsUnicosValidos(qaChecks.map((item) => objeto(item) ? item.checkId : undefined)), "qa_check_ids_invalidos_ou_duplicados");
225
+ const tiposQa = new Set();
226
+ for (const check of qaChecks) {
227
+ const valido = objeto(check)
228
+ && idSeguro(check.checkId)
229
+ && TIPOS_QA.has(check.type)
230
+ && idSeguro(check.phaseId)
231
+ && fases.has(check.phaseId)
232
+ && positivo(check.threshold)
233
+ && texto(check.unit);
234
+ if (valido)
235
+ tiposQa.add(check.type);
236
+ adicionar(bloqueios, valido, "qa_check_invalido");
237
+ }
238
+ for (const tipo of TIPOS_QA)
239
+ adicionar(bloqueios, tiposQa.has(tipo), `qa_check_${tipo.toLowerCase()}_ausente`);
240
+ const build = entrada.buildAcceptance;
241
+ const buildValido = objeto(build)
242
+ && typeof build.required === "boolean"
243
+ && typeof build.cleanInstallRequired === "boolean"
244
+ && typeof build.launchRequired === "boolean"
245
+ && typeof build.smokePlaytestRequired === "boolean"
246
+ && (!build.required || (digestSha256Valido(build.artifactDigest)
247
+ && build.cleanInstallRequired === true
248
+ && build.launchRequired === true
249
+ && build.smokePlaytestRequired === true));
250
+ adicionar(bloqueios, buildValido, "build_acceptance_invalida");
251
+ const hardware = Array.isArray(entrada.hardwareTargets) ? entrada.hardwareTargets : [];
252
+ adicionar(bloqueios, idsUnicosValidos(hardware.map((item) => objeto(item) ? item.profileId : undefined)), "hardware_profile_ids_invalidos_ou_duplicados");
253
+ for (const alvo of hardware) {
254
+ const resolucao = objeto(alvo) && objeto(alvo.resolution) ? alvo.resolution : undefined;
255
+ const valido = objeto(alvo)
256
+ && idSeguro(alvo.profileId)
257
+ && texto(alvo.gpu)
258
+ && texto(alvo.cpu)
259
+ && Boolean(resolucao && positivo(resolucao.width) && positivo(resolucao.height))
260
+ && positivo(alvo.targetFps)
261
+ && positivo(alvo.frameTimeP95Ms)
262
+ && positivo(alvo.maxRamMb)
263
+ && positivo(alvo.maxVramMb)
264
+ && positivo(alvo.maxDiskMb);
265
+ adicionar(bloqueios, valido, "hardware_target_invalido");
266
+ }
267
+ const contrato = entrada;
268
+ let checks = [];
269
+ try {
270
+ digest = digestJsonSistemaInterativo(entrada);
271
+ checks = contemSensivel ? [] : checkIdsContrato(contrato);
272
+ adicionar(bloqueios, idsUnicosValidos(checks), "required_check_ids_invalidos_ou_duplicados");
273
+ }
274
+ catch {
275
+ bloqueios.push("contrato_nao_canonicalizavel");
276
+ }
277
+ return { contrato, digest, checks, bloqueios: [...new Set(bloqueios)].sort() };
278
+ }
279
+ export function validarContratoTemporalInterativo(entrada) {
280
+ const resultado = validarContratoInterno(entrada);
281
+ return {
282
+ valido: resultado.bloqueios.length === 0,
283
+ contractDigest: resultado.digest,
284
+ requiredCheckIds: resultado.checks,
285
+ bloqueios: resultado.bloqueios,
286
+ executed: false,
287
+ authoritative: false,
288
+ };
289
+ }
290
+ function categoriaCheck(contrato, checkId) {
291
+ if (contrato.invariants.some((item) => item.invariantId === checkId))
292
+ return "INVARIANT";
293
+ if (contrato.shots.some((item) => item.shotId === checkId))
294
+ return "SHOT";
295
+ if (contrato.physics.some((item) => item.relationId === checkId))
296
+ return "PHYSICS";
297
+ if (contrato.temporalQa.checks.some((item) => item.checkId === checkId))
298
+ return "QA";
299
+ if (checkId.startsWith("build."))
300
+ return "BUILD";
301
+ return "HARDWARE";
302
+ }
303
+ function faseDoCheck(contrato, checkId) {
304
+ return contrato.invariants.find((item) => item.invariantId === checkId)?.phaseId
305
+ ?? contrato.shots.find((item) => item.shotId === checkId)?.phaseId
306
+ ?? contrato.physics.find((item) => item.relationId === checkId)?.phaseId
307
+ ?? contrato.temporalQa.checks.find((item) => item.checkId === checkId)?.phaseId;
308
+ }
309
+ function causasProvaveis(contrato, checkId) {
310
+ const invariant = contrato.invariants.find((item) => item.invariantId === checkId);
311
+ if (invariant) {
312
+ return {
313
+ ORDER: ["event_order_diverged"],
314
+ SYNC: ["timeline_tracks_out_of_sync"],
315
+ VISIBILITY: ["subject_visibility_below_contract"],
316
+ BOUNDS: ["target_left_declared_bounds"],
317
+ NO_OVERLAP: ["tracks_or_objects_overlap"],
318
+ CONTINUITY: ["temporal_discontinuity_detected"],
319
+ }[invariant.type].slice();
320
+ }
321
+ const categoria = categoriaCheck(contrato, checkId);
322
+ if (categoria === "SHOT")
323
+ return ["camera_or_subject_contract_diverged"];
324
+ if (categoria === "PHYSICS")
325
+ return ["physics_relation_diverged"];
326
+ if (categoria === "QA")
327
+ return ["temporal_quality_threshold_exceeded"];
328
+ if (categoria === "BUILD")
329
+ return ["packaged_artifact_chain_incomplete"];
330
+ return ["hardware_budget_exceeded"];
331
+ }
332
+ function observacaoEstruturalmenteValida(valor, checks) {
333
+ if (!objeto(valor)
334
+ || !idSeguro(valor.observationId)
335
+ || !idSeguro(valor.checkId)
336
+ || !checks.has(valor.checkId)
337
+ || !DECISOES.has(valor.decision)
338
+ || !Array.isArray(valor.evidenceTypes)
339
+ || valor.evidenceTypes.length === 0
340
+ || !valor.evidenceTypes.every((tipo) => TIPOS_EVIDENCIA.has(tipo))
341
+ || new Set(valor.evidenceTypes).size !== valor.evidenceTypes.length
342
+ || !Array.isArray(valor.artifactDigests)
343
+ || valor.artifactDigests.length === 0
344
+ || !valor.artifactDigests.every(digestSha256Valido)
345
+ || !Number.isInteger(valor.sampleCount)
346
+ || valor.sampleCount < 1)
347
+ return false;
348
+ if (valor.traceDigest !== undefined && !digestSha256Valido(valor.traceDigest))
349
+ return false;
350
+ if (valor.phaseId !== undefined && !idSeguro(valor.phaseId))
351
+ return false;
352
+ if (valor.frame !== undefined && !naoNegativo(valor.frame))
353
+ return false;
354
+ if (valor.time !== undefined && !naoNegativo(valor.time))
355
+ return false;
356
+ if (valor.timeUnit !== undefined && !UNIDADES_TEMPO.has(valor.timeUnit))
357
+ return false;
358
+ if (valor.metrics !== undefined && (!Array.isArray(valor.metrics)
359
+ || valor.metrics.length === 0
360
+ || !valor.metrics.every((metrica) => objeto(metrica)
361
+ && idSeguro(metrica.name)
362
+ && numeroMetricoSeguro(metrica.value)
363
+ && texto(metrica.unit)
364
+ && numeroMetricoSeguro(metrica.threshold))
365
+ || new Set(valor.metrics.map((metrica) => objeto(metrica) ? metrica.name : undefined)).size !== valor.metrics.length))
366
+ return false;
367
+ return true;
368
+ }
369
+ function expectativasMetricas(contrato, checkId) {
370
+ const qa = contrato.temporalQa.checks.find((item) => item.checkId === checkId);
371
+ if (qa)
372
+ return [{ name: qa.type.toLowerCase(), unit: qa.unit, threshold: qa.threshold, direction: "MAX" }];
373
+ const hardware = contrato.hardwareTargets.find((item) => `hardware:${item.profileId}` === checkId);
374
+ if (!hardware)
375
+ return [];
376
+ return [
377
+ { name: "target_fps", unit: "fps", threshold: hardware.targetFps, direction: "MIN" },
378
+ { name: "frame_time_p95_ms", unit: "ms", threshold: hardware.frameTimeP95Ms, direction: "MAX" },
379
+ { name: "ram_mb", unit: "mb", threshold: hardware.maxRamMb, direction: "MAX" },
380
+ { name: "vram_mb", unit: "mb", threshold: hardware.maxVramMb, direction: "MAX" },
381
+ { name: "disk_mb", unit: "mb", threshold: hardware.maxDiskMb, direction: "MAX" },
382
+ ];
383
+ }
384
+ function validarMetricasContraContrato(contrato, observacao, bloqueios) {
385
+ const esperadas = expectativasMetricas(contrato, observacao.checkId);
386
+ if (esperadas.length === 0)
387
+ return;
388
+ const metricas = new Map((observacao.metrics ?? []).map((item) => [item.name, item]));
389
+ const contratoCoerente = metricas.size === esperadas.length && esperadas.every((esperada) => {
390
+ const recebida = metricas.get(esperada.name);
391
+ return recebida?.unit === esperada.unit && recebida.threshold === esperada.threshold;
392
+ });
393
+ if (!contratoCoerente) {
394
+ bloqueios.push("metricas_divergem_do_contrato");
395
+ return;
396
+ }
397
+ const excedeu = esperadas.some((esperada) => {
398
+ const value = metricas.get(esperada.name)?.value;
399
+ return esperada.direction === "MAX" ? value > esperada.threshold : value < esperada.threshold;
400
+ });
401
+ if (observacao.decision === "PASS" && excedeu)
402
+ bloqueios.push("decision_pass_incoerente_com_metricas");
403
+ if (observacao.decision === "FAIL" && !excedeu)
404
+ bloqueios.push("decision_fail_incoerente_com_metricas");
405
+ }
406
+ function validarEvidenciaPorCategoria(contrato, observacao, bloqueios) {
407
+ const tipos = new Set(observacao.evidenceTypes);
408
+ const categoria = categoriaCheck(contrato, observacao.checkId);
409
+ const temporal = categoria === "INVARIANT" || categoria === "SHOT" || categoria === "PHYSICS" || categoria === "QA";
410
+ const faseEsperada = faseDoCheck(contrato, observacao.checkId);
411
+ if (faseEsperada !== undefined && observacao.phaseId !== faseEsperada)
412
+ bloqueios.push("check_phase_divergente");
413
+ if (temporal && observacao.sampleCount < 2 && !observacao.traceDigest)
414
+ bloqueios.push("check_temporal_exige_amostras_ou_trace");
415
+ if ((categoria === "SHOT" || categoria === "PHYSICS") && ![
416
+ "DEPTH", "NORMALS", "OBJECT_ID", "TRANSFORMS", "COLLISION_TRACE",
417
+ ].some((tipo) => tipos.has(tipo)))
418
+ bloqueios.push("check_geometrico_exige_evidencia_geometrica");
419
+ const invariant = contrato.invariants.find((item) => item.invariantId === observacao.checkId);
420
+ const tracks = invariant?.trackIds.map((id) => contrato.tracks.find((track) => track.trackId === id)?.type).filter(Boolean) ?? [];
421
+ if (tracks.some((tipo) => tipo === "AUDIO" || tipo === "SPEECH")
422
+ && (!tipos.has("AUDIO_TRACE") || !tipos.has("EVENT_TRACE")))
423
+ bloqueios.push("check_audio_exige_audio_trace_e_event_trace");
424
+ if ((categoria === "QA" || categoria === "HARDWARE") && (!observacao.metrics || observacao.metrics.length === 0)) {
425
+ bloqueios.push("check_metrico_exige_metricas");
426
+ }
427
+ validarMetricasContraContrato(contrato, observacao, bloqueios);
428
+ if (categoria === "BUILD") {
429
+ const tipoEsperado = {
430
+ "build.materialize": "TELEMETRY",
431
+ "build.clean_install": "INSTALL_LOG",
432
+ "build.launch": "LAUNCH_LOG",
433
+ "build.smoke_playtest": "PLAYTEST_TRACE",
434
+ };
435
+ const esperado = tipoEsperado[observacao.checkId];
436
+ if (esperado && !tipos.has(esperado))
437
+ bloqueios.push("build_check_exige_evidencia_especifica");
438
+ }
439
+ }
440
+ export function validarBundleVerificacaoTemporal(contratoEntrada, bundleEntrada) {
441
+ const bundleDigest = digestJsonSeguro(bundleEntrada);
442
+ const contratoValidado = validarContratoInterno(contratoEntrada);
443
+ const bloqueios = contratoValidado.bloqueios.map((item) => `contrato_invalido:${item}`);
444
+ const contrato = contratoValidado.contrato;
445
+ const checksAceitos = [];
446
+ const checksFalhos = [];
447
+ const diagnostics = [];
448
+ const observados = new Set();
449
+ let bundleSensivel = false;
450
+ if (!contrato || !objeto(bundleEntrada)) {
451
+ bloqueios.push("bundle_invalido");
452
+ }
453
+ else {
454
+ bundleSensivel = contemMaterialSensivel(bundleEntrada);
455
+ if (bundleSensivel)
456
+ bloqueios.push("bundle_contem_dado_sensivel");
457
+ adicionar(bloqueios, somenteChaves(bundleEntrada, CHAVES_BUNDLE), "bundle_campo_top_level_desconhecido");
458
+ adicionar(bloqueios, bundleEntrada.schemaVersion === SCHEMA_EVIDENCIA_TEMPORAL, "bundle_schema_version_nao_suportada");
459
+ adicionar(bloqueios, idSeguro(bundleEntrada.runId), "bundle_run_id_invalido");
460
+ adicionar(bloqueios, bundleEntrada.contractDigest === contratoValidado.digest, "bundle_contract_digest_divergente");
461
+ adicionar(bloqueios, idSeguro(bundleEntrada.producerId), "bundle_producer_id_invalido");
462
+ adicionar(bloqueios, texto(bundleEntrada.producerVersion), "bundle_producer_version_invalida");
463
+ adicionar(bloqueios, digestSha256Valido(bundleEntrada.producerConfigurationDigest), "bundle_producer_configuration_digest_invalido");
464
+ adicionar(bloqueios, idSeguro(bundleEntrada.verifierId), "bundle_verifier_id_invalido");
465
+ adicionar(bloqueios, texto(bundleEntrada.verifierVersion), "bundle_verifier_version_invalida");
466
+ adicionar(bloqueios, digestSha256Valido(bundleEntrada.verifierConfigurationDigest), "bundle_verifier_configuration_digest_invalido");
467
+ adicionar(bloqueios, bundleEntrada.independentOfProducer === true, "verifier_deve_ser_independente_do_produtor");
468
+ adicionar(bloqueios, bundleEntrada.producerId !== bundleEntrada.verifierId, "verifier_id_deve_diferir_do_produtor");
469
+ const brutas = Array.isArray(bundleEntrada.observations) ? bundleEntrada.observations : [];
470
+ adicionar(bloqueios, Array.isArray(bundleEntrada.observations), "bundle_observations_invalidas");
471
+ adicionar(bloqueios, idsUnicosValidos(brutas.map((item) => objeto(item) ? item.observationId : undefined)), "observation_ids_invalidos_ou_duplicados");
472
+ const required = new Set(contratoValidado.checks);
473
+ const checkIdsBrutos = brutas.map((item) => objeto(item) ? item.checkId : undefined);
474
+ adicionar(bloqueios, idsUnicosValidos(checkIdsBrutos), "observation_check_ids_invalidos_ou_duplicados");
475
+ for (const bruta of brutas) {
476
+ if (!observacaoEstruturalmenteValida(bruta, required)) {
477
+ bloqueios.push("observacao_invalida");
478
+ continue;
479
+ }
480
+ const observacao = bruta;
481
+ observados.add(observacao.checkId);
482
+ const bloqueiosAntes = bloqueios.length;
483
+ validarEvidenciaPorCategoria(contrato, observacao, bloqueios);
484
+ if (observacao.decision === "PASS") {
485
+ if (bloqueios.length === bloqueiosAntes)
486
+ checksAceitos.push(observacao.checkId);
487
+ }
488
+ else {
489
+ checksFalhos.push(observacao.checkId);
490
+ diagnostics.push({
491
+ failedInvariant: observacao.checkId,
492
+ phase: faseDoCheck(contrato, observacao.checkId),
493
+ frame: observacao.frame,
494
+ time: observacao.time,
495
+ timeUnit: observacao.timeUnit,
496
+ evidenceIds: [observacao.observationId],
497
+ decision: observacao.decision,
498
+ likelyCauses: causasProvaveis(contrato, observacao.checkId),
499
+ });
500
+ }
501
+ }
502
+ }
503
+ const bloqueiosUnicos = [...new Set(bloqueios)].sort();
504
+ const bloqueioEstrutural = bloqueiosUnicos.length > 0;
505
+ const checksAceitosFinais = bloqueioEstrutural ? [] : [...new Set(checksAceitos)].sort();
506
+ const checksFalhosFinais = bundleSensivel ? [] : [...new Set(checksFalhos)].sort();
507
+ const diagnosticsFinais = bundleSensivel ? [] : diagnostics;
508
+ const checksAusentes = bloqueioEstrutural
509
+ ? [...contratoValidado.checks]
510
+ : contratoValidado.checks.filter((id) => !observados.has(id));
511
+ const valido = !bloqueioEstrutural && checksAusentes.length === 0 && checksFalhosFinais.length === 0;
512
+ const nextActions = bloqueioEstrutural
513
+ ? ["corrigir_bundle_temporal"]
514
+ : [
515
+ ...checksAusentes.map((id) => `capturar_evidencia_temporal:${id}`),
516
+ ...checksFalhosFinais.map((id) => `diagnosticar_e_corrigir_sem_apply:${id}`),
517
+ ...checksFalhosFinais.map((id) => `reexecutar_check_temporal:${id}`),
518
+ ];
519
+ if (valido)
520
+ nextActions.push("solicitar_atestacao_externa");
521
+ const resultadoSemDigest = {
522
+ valido,
523
+ contractDigest: contratoValidado.digest,
524
+ bundleDigest,
525
+ checksAceitos: checksAceitosFinais,
526
+ checksAusentes,
527
+ checksFalhos: checksFalhosFinais,
528
+ diagnostics: diagnosticsFinais,
529
+ nextActions,
530
+ bloqueios: bloqueiosUnicos,
531
+ completed: false,
532
+ localCoverageComplete: valido,
533
+ awaitingExternalAttestation: true,
534
+ completionScope: "STRUCTURAL_LOCAL",
535
+ authoritative: false,
536
+ executed: false,
537
+ };
538
+ return {
539
+ ...resultadoSemDigest,
540
+ resultDigest: digestJsonSeguro(resultadoSemDigest),
541
+ };
542
+ }
543
+ //# sourceMappingURL=temporal.js.map