@tiinex/core 0.1.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 (517) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +31 -0
  3. package/README.md +45 -0
  4. package/package.json +176 -0
  5. package/src/actions/record.actions.js +312 -0
  6. package/src/adapters/adapter.contracts.js +143 -0
  7. package/src/adapters/archive/archive.adapter.js +502 -0
  8. package/src/adapters/archive/archive.portableChangeset.js +141 -0
  9. package/src/adapters/archive/archive.transport.js +124 -0
  10. package/src/artifacts/artifact.localDraft.js +27 -0
  11. package/src/artifacts/artifact.normalize.js +28 -0
  12. package/src/artifacts/artifact.parse.js +207 -0
  13. package/src/artifacts/artifact.record.js +83 -0
  14. package/src/audit/audit.run.js +103 -0
  15. package/src/audit/audit.summary.js +7 -0
  16. package/src/diagnostics/sourceBoundary.report.js +112 -0
  17. package/src/export/package.apply.js +349 -0
  18. package/src/export/package.builder.js +366 -0
  19. package/src/export/package.bytes.js +164 -0
  20. package/src/export/package.controlIntegrity.js +42 -0
  21. package/src/export/package.controlTopology.js +97 -0
  22. package/src/export/package.fileMap.js +174 -0
  23. package/src/export/package.manifest.js +401 -0
  24. package/src/export/package.preflight.js +204 -0
  25. package/src/export/package.sourceReference.js +81 -0
  26. package/src/export/package.workspaceContext.js +144 -0
  27. package/src/export/package.zip.js +128 -0
  28. package/src/export/tree.bundle.js +278 -0
  29. package/src/governance/governance.boundary.js +196 -0
  30. package/src/integrity/integrity.c14nV2.js +190 -0
  31. package/src/integrity/integrity.methodReference.js +73 -0
  32. package/src/integrity/integrity.validate.js +56 -0
  33. package/src/lineage/lineage.candidateResolution.js +46 -0
  34. package/src/lineage/lineage.githubIssueComment.js +106 -0
  35. package/src/lineage/lineage.githubIssueLocal.js +196 -0
  36. package/src/lineage/lineage.githubIssueTarget.js +89 -0
  37. package/src/lineage/lineage.integrity.js +133 -0
  38. package/src/lineage/lineage.materialPreference.js +26 -0
  39. package/src/lineage/lineage.model.js +63 -0
  40. package/src/lineage/lineage.parentAuthority.js +5 -0
  41. package/src/lineage/lineage.parentBinding.js +104 -0
  42. package/src/lineage/lineage.pathBasis.js +47 -0
  43. package/src/lineage/lineage.resolve.js +388 -0
  44. package/src/lineage/lineage.sourceScope.js +74 -0
  45. package/src/lineage/lineage.targetKeys.js +80 -0
  46. package/src/lineage/lineage.traverse.js +132 -0
  47. package/src/public/applicationProjection.js +236 -0
  48. package/src/public/companionResources.js +246 -0
  49. package/src/public/index.js +16 -0
  50. package/src/public/node.js +2 -0
  51. package/src/public/schemaAncestry.js +26 -0
  52. package/src/publication/publication.contract.js +196 -0
  53. package/src/publication/publication.preflight.js +159 -0
  54. package/src/publication/publication.targetContract.js +241 -0
  55. package/src/reingest/reingest.plan.js +162 -0
  56. package/src/release/plan.mjs +28 -0
  57. package/src/release/policy.mjs +100 -0
  58. package/src/release/run.mjs +74 -0
  59. package/src/schemas/capability.registry.js +226 -0
  60. package/src/schemas/companion.js +245 -0
  61. package/src/schemas/contracts.js +6 -0
  62. package/src/schemas/coordination/handoff/tiinex.handoff.v1.schema.js +14 -0
  63. package/src/schemas/coordination/handoff/tiinex.handoff.v1.schema.json +23 -0
  64. package/src/schemas/coordination/handoff/tiinex.handoff.v1.schema.runtime.json +4283 -0
  65. package/src/schemas/coordination/handoff/tiinex.handoff.v1.schema.source.js +9 -0
  66. package/src/schemas/coordination/project/tiinex.project.v1.schema.js +26 -0
  67. package/src/schemas/coordination/project/tiinex.project.v1.schema.json +23 -0
  68. package/src/schemas/coordination/project/tiinex.project.v1.schema.runtime.json +1985 -0
  69. package/src/schemas/coordination/project/tiinex.project.v1.schema.source.js +9 -0
  70. package/src/schemas/core/decision/tiinex.decision.v1.schema.js +14 -0
  71. package/src/schemas/core/decision/tiinex.decision.v1.schema.json +24 -0
  72. package/src/schemas/core/decision/tiinex.decision.v1.schema.runtime.json +1700 -0
  73. package/src/schemas/core/decision/tiinex.decision.v1.schema.source.js +9 -0
  74. package/src/schemas/core/evidence/tiinex.evidence.v1.capabilities.js +14 -0
  75. package/src/schemas/core/evidence/tiinex.evidence.v1.en.i18n.json +6 -0
  76. package/src/schemas/core/evidence/tiinex.evidence.v1.findings.js +9 -0
  77. package/src/schemas/core/evidence/tiinex.evidence.v1.presenter.js +1 -0
  78. package/src/schemas/core/evidence/tiinex.evidence.v1.schema.js +32 -0
  79. package/src/schemas/core/evidence/tiinex.evidence.v1.schema.json +24 -0
  80. package/src/schemas/core/evidence/tiinex.evidence.v1.schema.runtime.json +2184 -0
  81. package/src/schemas/core/evidence/tiinex.evidence.v1.schema.source.js +9 -0
  82. package/src/schemas/core/evidence/tiinex.evidence.v1.sv.i18n.json +6 -0
  83. package/src/schemas/core/evidence/tiinex.evidence.v1.transitions.js +1 -0
  84. package/src/schemas/core/evidence/tiinex.evidence.v1.validate.js +10 -0
  85. package/src/schemas/core/feedback/tiinex.feedback.v1.schema.js +14 -0
  86. package/src/schemas/core/feedback/tiinex.feedback.v1.schema.json +23 -0
  87. package/src/schemas/core/feedback/tiinex.feedback.v1.schema.runtime.json +1773 -0
  88. package/src/schemas/core/feedback/tiinex.feedback.v1.schema.source.js +9 -0
  89. package/src/schemas/core/interpretation/tiinex.interpretation.v1.capabilities.js +11 -0
  90. package/src/schemas/core/interpretation/tiinex.interpretation.v1.contract.js +40 -0
  91. package/src/schemas/core/interpretation/tiinex.interpretation.v1.en.i18n.json +9 -0
  92. package/src/schemas/core/interpretation/tiinex.interpretation.v1.findings.js +12 -0
  93. package/src/schemas/core/interpretation/tiinex.interpretation.v1.localMaterialization.js +89 -0
  94. package/src/schemas/core/interpretation/tiinex.interpretation.v1.presenter.js +8 -0
  95. package/src/schemas/core/interpretation/tiinex.interpretation.v1.schema.js +34 -0
  96. package/src/schemas/core/interpretation/tiinex.interpretation.v1.schema.json +23 -0
  97. package/src/schemas/core/interpretation/tiinex.interpretation.v1.schema.runtime.json +2029 -0
  98. package/src/schemas/core/interpretation/tiinex.interpretation.v1.schema.source.js +9 -0
  99. package/src/schemas/core/interpretation/tiinex.interpretation.v1.sv.i18n.json +9 -0
  100. package/src/schemas/core/interpretation/tiinex.interpretation.v1.transitions.js +1 -0
  101. package/src/schemas/core/interpretation/tiinex.interpretation.v1.validate.js +25 -0
  102. package/src/schemas/core/preservation/tiinex.preservation.v1.capabilities.js +14 -0
  103. package/src/schemas/core/preservation/tiinex.preservation.v1.en.i18n.json +6 -0
  104. package/src/schemas/core/preservation/tiinex.preservation.v1.findings.js +9 -0
  105. package/src/schemas/core/preservation/tiinex.preservation.v1.presenter.js +1 -0
  106. package/src/schemas/core/preservation/tiinex.preservation.v1.schema.js +31 -0
  107. package/src/schemas/core/preservation/tiinex.preservation.v1.schema.json +23 -0
  108. package/src/schemas/core/preservation/tiinex.preservation.v1.schema.runtime.json +2033 -0
  109. package/src/schemas/core/preservation/tiinex.preservation.v1.schema.source.js +9 -0
  110. package/src/schemas/core/preservation/tiinex.preservation.v1.sv.i18n.json +6 -0
  111. package/src/schemas/core/preservation/tiinex.preservation.v1.transitions.js +1 -0
  112. package/src/schemas/core/preservation/tiinex.preservation.v1.validate.js +10 -0
  113. package/src/schemas/core/relation/tiinex.relation.v1.capabilities.js +7 -0
  114. package/src/schemas/core/relation/tiinex.relation.v1.contract.js +3 -0
  115. package/src/schemas/core/relation/tiinex.relation.v1.en.i18n.json +4 -0
  116. package/src/schemas/core/relation/tiinex.relation.v1.findings.js +9 -0
  117. package/src/schemas/core/relation/tiinex.relation.v1.localMaterialization.js +153 -0
  118. package/src/schemas/core/relation/tiinex.relation.v1.presenter.js +3 -0
  119. package/src/schemas/core/relation/tiinex.relation.v1.schema.js +20 -0
  120. package/src/schemas/core/relation/tiinex.relation.v1.schema.json +23 -0
  121. package/src/schemas/core/relation/tiinex.relation.v1.schema.runtime.json +1668 -0
  122. package/src/schemas/core/relation/tiinex.relation.v1.schema.source.js +9 -0
  123. package/src/schemas/core/relation/tiinex.relation.v1.sv.i18n.json +4 -0
  124. package/src/schemas/core/relation/tiinex.relation.v1.transitions.js +1 -0
  125. package/src/schemas/core/relation/tiinex.relation.v1.validate.js +36 -0
  126. package/src/schemas/core/relation/workspace/representation/tiinex.workspace.representation.v1.capabilities.js +14 -0
  127. package/src/schemas/core/relation/workspace/representation/tiinex.workspace.representation.v1.contract.js +57 -0
  128. package/src/schemas/core/relation/workspace/representation/tiinex.workspace.representation.v1.en.i18n.json +4 -0
  129. package/src/schemas/core/relation/workspace/representation/tiinex.workspace.representation.v1.findings.js +13 -0
  130. package/src/schemas/core/relation/workspace/representation/tiinex.workspace.representation.v1.presenter.js +3 -0
  131. package/src/schemas/core/relation/workspace/representation/tiinex.workspace.representation.v1.schema.js +20 -0
  132. package/src/schemas/core/relation/workspace/representation/tiinex.workspace.representation.v1.schema.json +24 -0
  133. package/src/schemas/core/relation/workspace/representation/tiinex.workspace.representation.v1.schema.runtime.json +3315 -0
  134. package/src/schemas/core/relation/workspace/representation/tiinex.workspace.representation.v1.schema.source.js +9 -0
  135. package/src/schemas/core/relation/workspace/representation/tiinex.workspace.representation.v1.sv.i18n.json +4 -0
  136. package/src/schemas/core/relation/workspace/representation/tiinex.workspace.representation.v1.transitions.js +1 -0
  137. package/src/schemas/core/relation/workspace/representation/tiinex.workspace.representation.v1.validate.js +78 -0
  138. package/src/schemas/core/signal/tiinex.signal.v1.schema.js +14 -0
  139. package/src/schemas/core/signal/tiinex.signal.v1.schema.json +23 -0
  140. package/src/schemas/core/signal/tiinex.signal.v1.schema.runtime.json +1733 -0
  141. package/src/schemas/core/signal/tiinex.signal.v1.schema.source.js +9 -0
  142. package/src/schemas/core/task/tiinex.task.v1.capabilities.js +11 -0
  143. package/src/schemas/core/task/tiinex.task.v1.contract.js +3 -0
  144. package/src/schemas/core/task/tiinex.task.v1.en.i18n.json +15 -0
  145. package/src/schemas/core/task/tiinex.task.v1.findings.js +18 -0
  146. package/src/schemas/core/task/tiinex.task.v1.localMaterialization.js +148 -0
  147. package/src/schemas/core/task/tiinex.task.v1.presenter.js +8 -0
  148. package/src/schemas/core/task/tiinex.task.v1.schema.js +35 -0
  149. package/src/schemas/core/task/tiinex.task.v1.schema.json +23 -0
  150. package/src/schemas/core/task/tiinex.task.v1.schema.runtime.json +1708 -0
  151. package/src/schemas/core/task/tiinex.task.v1.schema.source.js +9 -0
  152. package/src/schemas/core/task/tiinex.task.v1.sv.i18n.json +15 -0
  153. package/src/schemas/core/task/tiinex.task.v1.transitions.js +3 -0
  154. package/src/schemas/core/task/tiinex.task.v1.validate.js +41 -0
  155. package/src/schemas/core/topic/tiinex.topic.v1.capabilities.js +14 -0
  156. package/src/schemas/core/topic/tiinex.topic.v1.creation.js +46 -0
  157. package/src/schemas/core/topic/tiinex.topic.v1.en.i18n.json +8 -0
  158. package/src/schemas/core/topic/tiinex.topic.v1.findings.js +11 -0
  159. package/src/schemas/core/topic/tiinex.topic.v1.localMaterialization.js +135 -0
  160. package/src/schemas/core/topic/tiinex.topic.v1.presenter.js +1 -0
  161. package/src/schemas/core/topic/tiinex.topic.v1.schema.js +34 -0
  162. package/src/schemas/core/topic/tiinex.topic.v1.schema.json +23 -0
  163. package/src/schemas/core/topic/tiinex.topic.v1.schema.runtime.json +1699 -0
  164. package/src/schemas/core/topic/tiinex.topic.v1.schema.source.js +9 -0
  165. package/src/schemas/core/topic/tiinex.topic.v1.sv.i18n.json +8 -0
  166. package/src/schemas/core/topic/tiinex.topic.v1.transitions.js +31 -0
  167. package/src/schemas/core/topic/tiinex.topic.v1.validate.js +11 -0
  168. package/src/schemas/creation.capability.js +289 -0
  169. package/src/schemas/creation.contracts.js +334 -0
  170. package/src/schemas/creation.executionSnapshot.js +79 -0
  171. package/src/schemas/creation.factoryQualification.js +73 -0
  172. package/src/schemas/creation.renderer.js +244 -0
  173. package/src/schemas/creation.representation.js +279 -0
  174. package/src/schemas/creation.rootMetadata.js +6 -0
  175. package/src/schemas/creation.schemaReferences.js +65 -0
  176. package/src/schemas/discovery/finding/tiinex.discovery.finding.v1.schema.js +14 -0
  177. package/src/schemas/discovery/finding/tiinex.discovery.finding.v1.schema.json +23 -0
  178. package/src/schemas/discovery/finding/tiinex.discovery.finding.v1.schema.runtime.json +1873 -0
  179. package/src/schemas/discovery/finding/tiinex.discovery.finding.v1.schema.source.js +9 -0
  180. package/src/schemas/discovery/tiinex.discovery.v1.schema.js +14 -0
  181. package/src/schemas/discovery/tiinex.discovery.v1.schema.json +23 -0
  182. package/src/schemas/discovery/tiinex.discovery.v1.schema.runtime.json +1839 -0
  183. package/src/schemas/discovery/tiinex.discovery.v1.schema.source.js +9 -0
  184. package/src/schemas/generic.artifact.module.js +25 -0
  185. package/src/schemas/party/organization/tiinex.party.organization.v1.schema.js +26 -0
  186. package/src/schemas/party/organization/tiinex.party.organization.v1.schema.json +23 -0
  187. package/src/schemas/party/organization/tiinex.party.organization.v1.schema.runtime.json +2249 -0
  188. package/src/schemas/party/organization/tiinex.party.organization.v1.schema.source.js +9 -0
  189. package/src/schemas/party/role/tiinex.party.role.v1.schema.js +26 -0
  190. package/src/schemas/party/role/tiinex.party.role.v1.schema.json +24 -0
  191. package/src/schemas/party/role/tiinex.party.role.v1.schema.runtime.json +2091 -0
  192. package/src/schemas/party/role/tiinex.party.role.v1.schema.source.js +9 -0
  193. package/src/schemas/presentation/surface/tiinex.presentation.surface.v1.capabilities.js +14 -0
  194. package/src/schemas/presentation/surface/tiinex.presentation.surface.v1.en.i18n.json +4 -0
  195. package/src/schemas/presentation/surface/tiinex.presentation.surface.v1.findings.js +1 -0
  196. package/src/schemas/presentation/surface/tiinex.presentation.surface.v1.presenter.js +1 -0
  197. package/src/schemas/presentation/surface/tiinex.presentation.surface.v1.schema.js +29 -0
  198. package/src/schemas/presentation/surface/tiinex.presentation.surface.v1.schema.json +21 -0
  199. package/src/schemas/presentation/surface/tiinex.presentation.surface.v1.schema.runtime.json +2180 -0
  200. package/src/schemas/presentation/surface/tiinex.presentation.surface.v1.schema.source.js +9 -0
  201. package/src/schemas/presentation/surface/tiinex.presentation.surface.v1.sv.i18n.json +4 -0
  202. package/src/schemas/presentation/surface/tiinex.presentation.surface.v1.transitions.js +1 -0
  203. package/src/schemas/presentation/surface/tiinex.presentation.surface.v1.validate.js +1 -0
  204. package/src/schemas/reduction/tiinex.reduction.v1.schema.js +26 -0
  205. package/src/schemas/reduction/tiinex.reduction.v1.schema.json +23 -0
  206. package/src/schemas/reduction/tiinex.reduction.v1.schema.runtime.json +1733 -0
  207. package/src/schemas/reduction/tiinex.reduction.v1.schema.source.js +9 -0
  208. package/src/schemas/reference.shapes.js +33 -0
  209. package/src/schemas/registry.js +36 -0
  210. package/src/schemas/resolver.js +13 -0
  211. package/src/schemas/schema/module/tiinex.schema.module.v1.capabilities.js +14 -0
  212. package/src/schemas/schema/module/tiinex.schema.module.v1.en.i18n.json +4 -0
  213. package/src/schemas/schema/module/tiinex.schema.module.v1.findings.js +1 -0
  214. package/src/schemas/schema/module/tiinex.schema.module.v1.presenter.js +1 -0
  215. package/src/schemas/schema/module/tiinex.schema.module.v1.schema.js +29 -0
  216. package/src/schemas/schema/module/tiinex.schema.module.v1.schema.json +21 -0
  217. package/src/schemas/schema/module/tiinex.schema.module.v1.schema.runtime.json +2093 -0
  218. package/src/schemas/schema/module/tiinex.schema.module.v1.schema.source.js +9 -0
  219. package/src/schemas/schema/module/tiinex.schema.module.v1.sv.i18n.json +4 -0
  220. package/src/schemas/schema/module/tiinex.schema.module.v1.transitions.js +1 -0
  221. package/src/schemas/schema/module/tiinex.schema.module.v1.validate.js +1 -0
  222. package/src/schemas/schema.factory.descriptor.js +104 -0
  223. package/src/schemas/schema.githubSourceTarget.js +131 -0
  224. package/src/schemas/schema.identity.js +10 -0
  225. package/src/schemas/schema.reference.js +133 -0
  226. package/src/schemas/schema.source.js +239 -0
  227. package/src/schemas/tiinex.root.v1.capabilities.js +14 -0
  228. package/src/schemas/tiinex.root.v1.classify.js +55 -0
  229. package/src/schemas/tiinex.root.v1.en.i18n.json +24 -0
  230. package/src/schemas/tiinex.root.v1.fallback.js +84 -0
  231. package/src/schemas/tiinex.root.v1.findings.js +19 -0
  232. package/src/schemas/tiinex.root.v1.presenter.js +5 -0
  233. package/src/schemas/tiinex.root.v1.schema.js +29 -0
  234. package/src/schemas/tiinex.root.v1.schema.json +24 -0
  235. package/src/schemas/tiinex.root.v1.schema.runtime.json +1574 -0
  236. package/src/schemas/tiinex.root.v1.schema.source.js +9 -0
  237. package/src/schemas/tiinex.root.v1.sv.i18n.json +24 -0
  238. package/src/schemas/tiinex.root.v1.transitions.js +1 -0
  239. package/src/schemas/tiinex.root.v1.validate.js +36 -0
  240. package/src/schemas/validation/finding/tiinex.validation.finding.v1.schema.js +14 -0
  241. package/src/schemas/validation/finding/tiinex.validation.finding.v1.schema.json +23 -0
  242. package/src/schemas/validation/finding/tiinex.validation.finding.v1.schema.runtime.json +2027 -0
  243. package/src/schemas/validation/finding/tiinex.validation.finding.v1.schema.source.js +9 -0
  244. package/src/schemas/validation/method/tiinex.validation.method.v1.schema.js +14 -0
  245. package/src/schemas/validation/method/tiinex.validation.method.v1.schema.json +23 -0
  246. package/src/schemas/validation/method/tiinex.validation.method.v1.schema.runtime.json +1848 -0
  247. package/src/schemas/validation/method/tiinex.validation.method.v1.schema.source.js +9 -0
  248. package/src/schemas/validation/report/tiinex.validation.report.v1.schema.js +14 -0
  249. package/src/schemas/validation/report/tiinex.validation.report.v1.schema.json +23 -0
  250. package/src/schemas/validation/report/tiinex.validation.report.v1.schema.runtime.json +2015 -0
  251. package/src/schemas/validation/report/tiinex.validation.report.v1.schema.source.js +9 -0
  252. package/src/schemas/workspace/tiinex.workspace.v1.capabilities.js +12 -0
  253. package/src/schemas/workspace/tiinex.workspace.v1.en.i18n.json +7 -0
  254. package/src/schemas/workspace/tiinex.workspace.v1.findings.js +5 -0
  255. package/src/schemas/workspace/tiinex.workspace.v1.presenter.js +27 -0
  256. package/src/schemas/workspace/tiinex.workspace.v1.schema.js +30 -0
  257. package/src/schemas/workspace/tiinex.workspace.v1.schema.json +23 -0
  258. package/src/schemas/workspace/tiinex.workspace.v1.schema.runtime.json +1596 -0
  259. package/src/schemas/workspace/tiinex.workspace.v1.schema.source.js +9 -0
  260. package/src/schemas/workspace/tiinex.workspace.v1.sv.i18n.json +7 -0
  261. package/src/schemas/workspace/tiinex.workspace.v1.transitions.js +10 -0
  262. package/src/schemas/workspace/tiinex.workspace.v1.validate.js +10 -0
  263. package/src/sources/github/github.issueTarget.js +127 -0
  264. package/src/sources/origin.references.js +249 -0
  265. package/src/sources/source.explicitTargets.js +49 -0
  266. package/src/sources/transport.levels.js +107 -0
  267. package/src/tooling/portable/adapters/cli/cli.cold-start-input.js +34 -0
  268. package/src/tooling/portable/adapters/cli/cli.command-input.js +455 -0
  269. package/src/tooling/portable/adapters/cli/cli.common-author.js +249 -0
  270. package/src/tooling/portable/adapters/cli/cli.common-output.js +330 -0
  271. package/src/tooling/portable/adapters/cli/cli.editor-assistance.js +13 -0
  272. package/src/tooling/portable/adapters/cli/cli.ground-materialize.js +96 -0
  273. package/src/tooling/portable/adapters/cli/cli.ground-recovery.js +99 -0
  274. package/src/tooling/portable/adapters/cli/cli.handoff-manufacture.js +345 -0
  275. package/src/tooling/portable/adapters/cli/cli.handoff-sibling-allocation.js +31 -0
  276. package/src/tooling/portable/adapters/cli/cli.help.js +80 -0
  277. package/src/tooling/portable/adapters/cli/cli.land.js +13 -0
  278. package/src/tooling/portable/adapters/cli/cli.local-output.js +72 -0
  279. package/src/tooling/portable/adapters/cli/cli.material-policy.js +6 -0
  280. package/src/tooling/portable/adapters/cli/cli.operator-bridge.js +18 -0
  281. package/src/tooling/portable/adapters/cli/cli.reduction-input.js +14 -0
  282. package/src/tooling/portable/adapters/cli/cli.run.js +434 -0
  283. package/src/tooling/portable/adapters/llm/llm.entrypoint.js +34 -0
  284. package/src/tooling/portable/adapters/node/checkpoint.verify.js +267 -0
  285. package/src/tooling/portable/adapters/node/handoff.manufacture.bootstrap.js +109 -0
  286. package/src/tooling/portable/adapters/node/handoff.manufacture.enumeration.js +94 -0
  287. package/src/tooling/portable/adapters/node/handoff.manufacture.js +193 -0
  288. package/src/tooling/portable/adapters/node/handoff.manufacture.multiRoot.js +49 -0
  289. package/src/tooling/portable/adapters/node/handoff.manufacture.packageParent.js +130 -0
  290. package/src/tooling/portable/adapters/node/handoff.manufacture.requirements.js +353 -0
  291. package/src/tooling/portable/adapters/node/handoff.manufacture.scope.js +147 -0
  292. package/src/tooling/portable/adapters/node/workspaceCarrier.manufacture.js +62 -0
  293. package/src/tooling/portable/assets/asset.operations.js +170 -0
  294. package/src/tooling/portable/audit/audit.capability.js +119 -0
  295. package/src/tooling/portable/bootstrap/artifact.result.selfverify.mjs +109 -0
  296. package/src/tooling/portable/bootstrap/bootstrap.case.mjs +43 -0
  297. package/src/tooling/portable/bootstrap/tiinex.llm.bootstrap.md +814 -0
  298. package/src/tooling/portable/bootstrap/tiinex.llm.bootstrap.pointer.json +25 -0
  299. package/src/tooling/portable/checkpoint/portable.checkpoint.js +89 -0
  300. package/src/tooling/portable/conformance/checkpoint.qualification.js +271 -0
  301. package/src/tooling/portable/draft/draft.create.js +389 -0
  302. package/src/tooling/portable/draft/draft.crud.js +175 -0
  303. package/src/tooling/portable/draft/draft.exact.js +173 -0
  304. package/src/tooling/portable/draft/draft.operations.js +265 -0
  305. package/src/tooling/portable/draft/draft.qualification.js +45 -0
  306. package/src/tooling/portable/draft/draft.set.js +193 -0
  307. package/src/tooling/portable/draft/draft.validation-context.js +7 -0
  308. package/src/tooling/portable/editor/authoring.parent.js +37 -0
  309. package/src/tooling/portable/editor/editor.assistance.js +221 -0
  310. package/src/tooling/portable/editor/staged.validation.js +96 -0
  311. package/src/tooling/portable/engine.facade.js +468 -0
  312. package/src/tooling/portable/findings.js +92 -0
  313. package/src/tooling/portable/grounding/grounding.capsule.js +128 -0
  314. package/src/tooling/portable/grounding/grounding.continuity.js +283 -0
  315. package/src/tooling/portable/grounding/grounding.participantAuthority.js +20 -0
  316. package/src/tooling/portable/grounding/grounding.planningContext.js +34 -0
  317. package/src/tooling/portable/grounding/grounding.readiness.authority.js +17 -0
  318. package/src/tooling/portable/grounding/grounding.readiness.js +316 -0
  319. package/src/tooling/portable/grounding/grounding.readiness.support.js +245 -0
  320. package/src/tooling/portable/grounding/grounding.sourceEvidence.js +71 -0
  321. package/src/tooling/portable/grounding/grounding.workContext.js +72 -0
  322. package/src/tooling/portable/grounding/grounding.workProvenance.js +153 -0
  323. package/src/tooling/portable/handoff/carrierLineage.js +214 -0
  324. package/src/tooling/portable/handoff/carrierProfile.js +54 -0
  325. package/src/tooling/portable/handoff/carrierProjection.js +193 -0
  326. package/src/tooling/portable/handoff/carrierProjection.routeQualification.js +228 -0
  327. package/src/tooling/portable/handoff/carrierProjection.shared.js +7 -0
  328. package/src/tooling/portable/handoff/carrierProjection.workspaces.js +54 -0
  329. package/src/tooling/portable/handoff/coldConsumerEntrypoint.js +185 -0
  330. package/src/tooling/portable/handoff/coldStartQualification.contract.js +184 -0
  331. package/src/tooling/portable/handoff/coldStartQualification.grounding.js +392 -0
  332. package/src/tooling/portable/handoff/coldStartQualification.js +22 -0
  333. package/src/tooling/portable/handoff/coldStartQualification.materials.js +364 -0
  334. package/src/tooling/portable/handoff/coldStartQualification.observation.js +220 -0
  335. package/src/tooling/portable/handoff/coldStartQualification.run.js +81 -0
  336. package/src/tooling/portable/handoff/coldStartQualification.shared.js +57 -0
  337. package/src/tooling/portable/handoff/coldStartRolePointers.js +39 -0
  338. package/src/tooling/portable/handoff/contextAudit.js +247 -0
  339. package/src/tooling/portable/handoff/contracts/tiinex.handoff.package.v1.schema.md +409 -0
  340. package/src/tooling/portable/handoff/handoffAuthoringPlan.js +35 -0
  341. package/src/tooling/portable/handoff/handoffEndpointProjection.js +61 -0
  342. package/src/tooling/portable/handoff/handoffLeafProjection.js +91 -0
  343. package/src/tooling/portable/handoff/humanOutputPresentation.js +21 -0
  344. package/src/tooling/portable/handoff/manufacture.js +84 -0
  345. package/src/tooling/portable/handoff/materialClosure.archiveV2.binding.js +72 -0
  346. package/src/tooling/portable/handoff/materialClosure.archiveV2.direct.js +160 -0
  347. package/src/tooling/portable/handoff/materialClosure.archiveV2.indexes.js +36 -0
  348. package/src/tooling/portable/handoff/materialClosure.archiveV2.js +247 -0
  349. package/src/tooling/portable/handoff/materialClosure.archiveV2.projectionProvider.js +44 -0
  350. package/src/tooling/portable/handoff/materialClosure.archiveV2.workspace.js +226 -0
  351. package/src/tooling/portable/handoff/materialClosure.descriptor.js +169 -0
  352. package/src/tooling/portable/handoff/materialClosure.inputBinding.js +372 -0
  353. package/src/tooling/portable/handoff/materialClosure.inputBinding.support.js +62 -0
  354. package/src/tooling/portable/handoff/materialClosure.materialized.js +143 -0
  355. package/src/tooling/portable/handoff/materialClosure.materials.js +116 -0
  356. package/src/tooling/portable/handoff/materialClosure.package.js +181 -0
  357. package/src/tooling/portable/handoff/materialClosure.plan.js +204 -0
  358. package/src/tooling/portable/handoff/materialClosure.readiness.js +36 -0
  359. package/src/tooling/portable/handoff/materialClosure.requirements.js +137 -0
  360. package/src/tooling/portable/handoff/operatorContextProjection.js +105 -0
  361. package/src/tooling/portable/handoff/pointerEntrypoint.js +138 -0
  362. package/src/tooling/portable/handoff/qualifiedHandoffFixture.js +34 -0
  363. package/src/tooling/portable/handoff/recipientV2.artifactFirst.build.js +321 -0
  364. package/src/tooling/portable/handoff/recipientV2.artifactFirst.closure.js +126 -0
  365. package/src/tooling/portable/handoff/recipientV2.artifactFirst.inspect.js +194 -0
  366. package/src/tooling/portable/handoff/recipientV2.artifactFirst.materials.js +207 -0
  367. package/src/tooling/portable/handoff/recipientV2.artifactFirst.projection.js +69 -0
  368. package/src/tooling/portable/handoff/recipientV2.artifactFirst.roles.js +166 -0
  369. package/src/tooling/portable/handoff/recipientV2.artifactFirst.routes.js +113 -0
  370. package/src/tooling/portable/handoff/recipientV2.artifactFirst.shared.js +87 -0
  371. package/src/tooling/portable/handoff/recipientV2.artifactFirst.workspaces.js +160 -0
  372. package/src/tooling/portable/handoff/recipientV2.artifactFirstPhase1.js +44 -0
  373. package/src/tooling/portable/handoff/recipientV2.artifactInspection.js +55 -0
  374. package/src/tooling/portable/handoff/recipientV2.artifacts.js +174 -0
  375. package/src/tooling/portable/handoff/recipientV2.coldProjection.js +24 -0
  376. package/src/tooling/portable/handoff/recipientV2.delivery.js +48 -0
  377. package/src/tooling/portable/handoff/recipientV2.endpointRolePointers.js +179 -0
  378. package/src/tooling/portable/handoff/recipientV2.entryContract.js +28 -0
  379. package/src/tooling/portable/handoff/recipientV2.humanOutput.js +78 -0
  380. package/src/tooling/portable/handoff/recipientV2.inspect.helpers.js +218 -0
  381. package/src/tooling/portable/handoff/recipientV2.inspect.js +194 -0
  382. package/src/tooling/portable/handoff/recipientV2.inspect.pathToken.js +9 -0
  383. package/src/tooling/portable/handoff/recipientV2.inspect.projection.js +58 -0
  384. package/src/tooling/portable/handoff/recipientV2.inspect.workspaces.js +177 -0
  385. package/src/tooling/portable/handoff/recipientV2.lineage.js +142 -0
  386. package/src/tooling/portable/handoff/recipientV2.packageV1.build.js +147 -0
  387. package/src/tooling/portable/handoff/recipientV2.packageV1.constants.js +4 -0
  388. package/src/tooling/portable/handoff/recipientV2.packageV1.contract.js +101 -0
  389. package/src/tooling/portable/handoff/recipientV2.packageV1.inspect.helpers.js +126 -0
  390. package/src/tooling/portable/handoff/recipientV2.packageV1.inspect.js +185 -0
  391. package/src/tooling/portable/handoff/recipientV2.packageV1.js +12 -0
  392. package/src/tooling/portable/handoff/recipientV2.packageV1.shared.js +24 -0
  393. package/src/tooling/portable/handoff/recipientV2.packageV1.workspaceProjection.js +22 -0
  394. package/src/tooling/portable/handoff/recipientV2.pointer.js +40 -0
  395. package/src/tooling/portable/handoff/recipientV2.routeSelection.js +16 -0
  396. package/src/tooling/portable/handoff/recipientV2.topology.helpers.js +20 -0
  397. package/src/tooling/portable/handoff/recipientV2.topology.js +320 -0
  398. package/src/tooling/portable/handoff/recipientV2.topology.materials.js +70 -0
  399. package/src/tooling/portable/handoff/recipientV2.topology.workspaces.js +193 -0
  400. package/src/tooling/portable/handoff/recipientV2.transportManifest.js +123 -0
  401. package/src/tooling/portable/handoff/recipientV2.workspaceRepresentation.js +163 -0
  402. package/src/tooling/portable/handoff/routeArtifactConformance.js +130 -0
  403. package/src/tooling/portable/handoff/toolingBootstrap.js +67 -0
  404. package/src/tooling/portable/handoff/transportCompanion.js +175 -0
  405. package/src/tooling/portable/handoff/workspaceByteProvider.archive.js +95 -0
  406. package/src/tooling/portable/handoff/workspaceByteProvider.js +271 -0
  407. package/src/tooling/portable/handoff/workspaceCarrier.manufacture.js +93 -0
  408. package/src/tooling/portable/handoff/workspaceLandingPlan.js +142 -0
  409. package/src/tooling/portable/handoff/workspacePackageSources.js +105 -0
  410. package/src/tooling/portable/handoff/workspaceQualifiedReference.js +10 -0
  411. package/src/tooling/portable/handoff/workspaceSourceIdentity.js +52 -0
  412. package/src/tooling/portable/handoff/workspaceTargetConformance.js +134 -0
  413. package/src/tooling/portable/host/host.capabilities.js +181 -0
  414. package/src/tooling/portable/host/tool.bindings.js +357 -0
  415. package/src/tooling/portable/host/tool.receiptNormalization.js +141 -0
  416. package/src/tooling/portable/index.js +52 -0
  417. package/src/tooling/portable/input/node.input.js +184 -0
  418. package/src/tooling/portable/input/portable.input.js +249 -0
  419. package/src/tooling/portable/lifecycle/lifecycle.action.js +11 -0
  420. package/src/tooling/portable/lifecycle/lifecycle.material.js +173 -0
  421. package/src/tooling/portable/lifecycle/lifecycle.operations.js +34 -0
  422. package/src/tooling/portable/lifecycle/lifecycle.readiness.js +247 -0
  423. package/src/tooling/portable/lineage/lineage.integrity.apply.audit.js +22 -0
  424. package/src/tooling/portable/lineage/lineage.integrity.apply.evidence.js +36 -0
  425. package/src/tooling/portable/lineage/lineage.integrity.apply.js +306 -0
  426. package/src/tooling/portable/lineage/lineage.integrity.apply.structure.js +178 -0
  427. package/src/tooling/portable/lineage/lineage.integrity.plan.js +377 -0
  428. package/src/tooling/portable/lineage/lineage.integrity.projection.human.js +82 -0
  429. package/src/tooling/portable/lineage/lineage.integrity.projection.js +349 -0
  430. package/src/tooling/portable/lineage/lineage.operations.js +32 -0
  431. package/src/tooling/portable/lineage/lineage.print.js +398 -0
  432. package/src/tooling/portable/lineage/lineage.print.render.js +88 -0
  433. package/src/tooling/portable/lineage/lineage.print.utils.js +58 -0
  434. package/src/tooling/portable/lineage/lineage.publicationProviderReceipts.js +141 -0
  435. package/src/tooling/portable/lineage/lineage.publicationQualification.js +183 -0
  436. package/src/tooling/portable/lineage/lineage.search.js +301 -0
  437. package/src/tooling/portable/live/live.artifact.js +192 -0
  438. package/src/tooling/portable/live/live.export.js +107 -0
  439. package/src/tooling/portable/live/live.lineage.closure.js +71 -0
  440. package/src/tooling/portable/live/live.lineage.js +338 -0
  441. package/src/tooling/portable/live/live.protocol.js +181 -0
  442. package/src/tooling/portable/materialization/durable.materialize.js +162 -0
  443. package/src/tooling/portable/materialization/epistemic.plan.js +239 -0
  444. package/src/tooling/portable/materialization/loaded.parent.js +54 -0
  445. package/src/tooling/portable/materialization/materialization.facade.js +30 -0
  446. package/src/tooling/portable/operation.catalog.js +393 -0
  447. package/src/tooling/portable/operation.catalog.package.js +183 -0
  448. package/src/tooling/portable/operation.result.js +25 -0
  449. package/src/tooling/portable/orchestration/task.prepare.js +191 -0
  450. package/src/tooling/portable/output/artifact.result.package.js +308 -0
  451. package/src/tooling/portable/output/deterministic.zip.js +88 -0
  452. package/src/tooling/portable/output/node.artifact-set.js +223 -0
  453. package/src/tooling/portable/output/node.draft.js +41 -0
  454. package/src/tooling/portable/output/node.zip.js +39 -0
  455. package/src/tooling/portable/output/recipientV2.zip.js +59 -0
  456. package/src/tooling/portable/overview/blockingCue.js +16 -0
  457. package/src/tooling/portable/overview/operatingOverview.js +413 -0
  458. package/src/tooling/portable/package/generation.binding.js +314 -0
  459. package/src/tooling/portable/package/generation.binding.projection.js +128 -0
  460. package/src/tooling/portable/package/material.graph.js +236 -0
  461. package/src/tooling/portable/package/runtime.package.js +321 -0
  462. package/src/tooling/portable/package/schema.transition.companion.js +196 -0
  463. package/src/tooling/portable/package/semantic.package.graph.js +272 -0
  464. package/src/tooling/portable/package/semantic.package.js +203 -0
  465. package/src/tooling/portable/package/semantic.package.schema-resolution.js +158 -0
  466. package/src/tooling/portable/package/semantic.package.transition-registry.js +189 -0
  467. package/src/tooling/portable/package/semantic.package.types.js +18 -0
  468. package/src/tooling/portable/providers/schema.bootstrap.provenance.js +10 -0
  469. package/src/tooling/portable/providers/schema.provider.qualification.js +52 -0
  470. package/src/tooling/portable/providers/schema.providers.js +458 -0
  471. package/src/tooling/portable/publication/runtime.publication.js +53 -0
  472. package/src/tooling/portable/qualification.js +150 -0
  473. package/src/tooling/portable/reduction/reduction.composition.js +229 -0
  474. package/src/tooling/portable/reduction/reduction.eligibility.helpers.js +258 -0
  475. package/src/tooling/portable/reduction/reduction.eligibility.js +191 -0
  476. package/src/tooling/portable/reduction/reduction.operations.js +30 -0
  477. package/src/tooling/portable/reduction/reduction.preflight.js +85 -0
  478. package/src/tooling/portable/reduction/reduction.shared.js +173 -0
  479. package/src/tooling/portable/schema/bootstrap/canonical.pack.js +24 -0
  480. package/src/tooling/portable/schema/bootstrap/docs-3988951208eb9a8926e84ab42625d4b42fa00c2d/party/role/tiinex.party.role.v1.schema.md +289 -0
  481. package/src/tooling/portable/schema/bootstrap/docs-3988951208eb9a8926e84ab42625d4b42fa00c2d/validation/report/tiinex.validation.report.v1.schema.md +300 -0
  482. package/src/tooling/portable/schema/bootstrap/qualified-local-root/tiinex.root.v1.runtime-projection.json +48 -0
  483. package/src/tooling/portable/schema/bootstrap/qualified-local-root/tiinex.root.v1.schema.md +865 -0
  484. package/src/tooling/portable/schema/contract.compile.js +406 -0
  485. package/src/tooling/portable/schema/contract.compile.utils.js +9 -0
  486. package/src/tooling/portable/schema/contract.constraints.js +117 -0
  487. package/src/tooling/portable/schema/contract.envelope.validate.js +177 -0
  488. package/src/tooling/portable/schema/contract.field-domain.compile.js +399 -0
  489. package/src/tooling/portable/schema/contract.field-domain.js +247 -0
  490. package/src/tooling/portable/schema/contract.field-shape.compile.js +34 -0
  491. package/src/tooling/portable/schema/contract.inheritance.inline.js +103 -0
  492. package/src/tooling/portable/schema/contract.inheritance.js +210 -0
  493. package/src/tooling/portable/schema/contract.inheritance.record.js +76 -0
  494. package/src/tooling/portable/schema/contract.machine-shape.js +309 -0
  495. package/src/tooling/portable/schema/contract.project.js +81 -0
  496. package/src/tooling/portable/schema/contract.semantic-resolution.js +82 -0
  497. package/src/tooling/portable/schema/contract.validate.js +0 -0
  498. package/src/tooling/portable/schema/lexical.shape.v1.js +338 -0
  499. package/src/tooling/portable/schema/llm.companion.js +108 -0
  500. package/src/tooling/portable/schema/named.declarations.js +162 -0
  501. package/src/tooling/portable/schema/ordinary.contract.js +193 -0
  502. package/src/tooling/portable/schema/ordinary.fields.js +205 -0
  503. package/src/tooling/portable/schema/qualifiedLocalRoot.projection.js +70 -0
  504. package/src/tooling/portable/schema/qualifiedLocalRoot.runtime.js +170 -0
  505. package/src/tooling/portable/schema/schema.contract.js +465 -0
  506. package/src/tooling/portable/schema/schema.guide.js +326 -0
  507. package/src/tooling/portable/schema/schema.snapshot.js +119 -0
  508. package/src/tooling/portable/session/portable.session.js +145 -0
  509. package/src/tooling/portable/transfer/transfer.plan.js +102 -0
  510. package/src/transitions/record.transitions.js +484 -0
  511. package/src/transitions/transition.validate.js +129 -0
  512. package/src/validation/findings.js +76 -0
  513. package/src/validation/validateArtifact.js +216 -0
  514. package/src/workspaces/workspace.entrypointCapability.js +44 -0
  515. package/src/workspaces/workspace.materialRole.js +242 -0
  516. package/src/workspaces/workspace.recordPaths.js +426 -0
  517. package/tools/tiinex-portable.mjs +6 -0
@@ -0,0 +1,185 @@
1
+ import { packageFileBytes, sha256Hex } from '../../../export/package.bytes.js';
2
+ import { inspectHandoffCarrierProjection } from './carrierProjection.js';
3
+ import { inspectHandoffPointerEntrypoints } from './pointerEntrypoint.js';
4
+ import { inspectRecipientFacingV2Topology } from './recipientV2.inspect.js';
5
+ import { RECIPIENT_V2_READ_PATH } from './recipientV2.topology.js';
6
+
7
+ export const HANDOFF_COLD_CONSUMER_ENTRYPOINT_PATH = 'tiinex.package/START.md';
8
+ export const HANDOFF_COLD_CONSUMER_PROJECTION_SCHEMA_ID = 'tiinex.portable.handoff-cold-consumer-projection.v1';
9
+ export const HANDOFF_COLD_CONSUMER_ENTRYPOINT_INSPECTION_SCHEMA_ID = 'tiinex.portable.handoff-cold-consumer-entrypoint.inspection.v1';
10
+
11
+ const BEGIN = '<!-- tiinex.handoff-start.projection.begin -->';
12
+ const END = '<!-- tiinex.handoff-start.projection.end -->';
13
+ const BOUNDARY = 'Package-local cold-consumer orientation only. This projection is generated from qualified package control/workspace bytes and has no Handoff, Parent, assignment, acceptance, completion, filename, or package-identity authority.';
14
+
15
+ export function buildHandoffColdConsumerProjection(input = {}) {
16
+ const carrier = input.carrierProjection || input.projection || {};
17
+ const workspaces = Object.freeze((carrier.workspaces || []).map((workspace) => Object.freeze({
18
+ id: String(workspace.id || ''),
19
+ title: String(workspace.title || workspace.id || ''),
20
+ slug: String(workspace.slug || ''),
21
+ qualification: String(workspace.qualification || 'unresolved')
22
+ })));
23
+ const routes = Object.freeze((carrier.routes || []).map((route) => Object.freeze({
24
+ id: String(route.id || ''),
25
+ state: String(route.state || ''),
26
+ workspaceId: String(route.workspaceId || ''),
27
+ workspaceRelativeHandoffPath: String(route.workspaceRelativePath || ''),
28
+ packagePath: String(route.packagePath || ''),
29
+ sha256: String(route.sha256 || ''),
30
+ from: String(route.parties?.from || ''),
31
+ to: String(route.parties?.to || '')
32
+ })));
33
+ const qualifiedRoutes = routes.filter((route) => route.state === 'qualified');
34
+ const single = carrier.status === 'ready' && qualifiedRoutes.length === 1 ? qualifiedRoutes[0] : null;
35
+ return deepFreeze({
36
+ schema: HANDOFF_COLD_CONSUMER_PROJECTION_SCHEMA_ID,
37
+ version: 1,
38
+ status: carrier.status === 'ready' ? 'ready' : 'blocked',
39
+ boundary: BOUNDARY,
40
+ controls: Object.freeze({
41
+ start: HANDOFF_COLD_CONSUMER_ENTRYPOINT_PATH,
42
+ carrier: 'tiinex.package/handoff-carrier.json',
43
+ closure: 'tiinex.package/handoff-closure.json',
44
+ fileMap: 'tiinex.package/file-map.json',
45
+ manifest: 'tiinex.package/manifest.json'
46
+ }),
47
+ preferredPath: Object.freeze({
48
+ ingressKind: 'routed-handoff-package',
49
+ firstSemanticOperation: 'orient-handoff-package',
50
+ groundingOperation: 'ground-cold-consumer',
51
+ qualificationOperation: 'qualify-cold-start',
52
+ minimalHostBootstrapActions: 1,
53
+ nativeFallback: 'explicit-and-justified-only',
54
+ providerSpecificSemanticAuthority: false
55
+ }),
56
+ workspaces,
57
+ routes,
58
+ selection: Object.freeze({
59
+ policy: String(carrier.selection?.policy || ''),
60
+ qualifiedRouteCount: Number(carrier.selection?.qualifiedRouteCount || 0),
61
+ implicitRouteId: single?.id || ''
62
+ }),
63
+ authority: Object.freeze({
64
+ semanticAuthority: 'none',
65
+ packageTruthRequired: true,
66
+ routeBindingAuthority: 'correlated-carrier-and-closure-package-truth-only'
67
+ })
68
+ });
69
+ }
70
+
71
+ export function renderHandoffColdConsumerEntrypoint(input = {}) {
72
+ const projection = input.projection || buildHandoffColdConsumerProjection(input);
73
+ const workspaceLines = projection.workspaces.length
74
+ ? projection.workspaces.map((workspace) => `- \`${workspace.id}\` — ${workspace.title} (${workspace.qualification})`).join('\n')
75
+ : '- none qualified';
76
+ const routeLines = projection.routes.length
77
+ ? projection.routes.map((route) => `- \`${route.id}\` → workspace \`${route.workspaceId}\` / \`${route.workspaceRelativeHandoffPath}\` (${route.state})`).join('\n')
78
+ : '- none qualified';
79
+ const next = projection.selection.implicitRouteId
80
+ ? `Continue from the single qualified route \`${projection.selection.implicitRouteId}\`.`
81
+ : projection.selection.qualifiedRouteCount > 1
82
+ ? 'Select exactly one qualified route by route id before projecting recipient-facing output.'
83
+ : 'No qualified route is available; inspect the package control findings and fail closed.';
84
+ return `# Tiinex Handoff Package Start\n\nThis file is a generated orientation aid for a cold consumer. Read it without executing package code. The structured projection below is non-authoritative and must correlate with the package-local carrier, closure, file map, manifest, and carried workspace bytes.\n\n## Preferred Tiinex Ingress\n\nAfter the host has surfaced this package to qualified portable Tooling, invoke \`orient-handoff-package\` as the first semantic operation. Before that takeover, at most one minimal host/bootstrap ingress action is allowed. Do not perform arbitrary ZIP/filesystem archaeology first when qualified Tiinex orientation is available. Ground the recipient/participants/interaction with \`ground-cold-consumer\` before substantive work; native tools remain valid after takeover and as explicit justified fallback.\n\n## Workspaces\n\n${workspaceLines}\n\n## Routes\n\n${routeLines}\n\n## Next\n\n${next}\n\n${BEGIN}\n\`\`\`json\n${stablePrettyJson(projection)}\n\`\`\`\n${END}\n`;
85
+ }
86
+
87
+ export function inspectHandoffColdConsumerEntrypoint(bundle = {}, options = {}) {
88
+ const findings = [];
89
+ const file = findFile(bundle, HANDOFF_COLD_CONSUMER_ENTRYPOINT_PATH);
90
+ const parsed = file ? parseProjectionFromMarkdown(decodeUtf8(packageFileBytes(file))) : null;
91
+ if (!file) findings.push(finding('error', 'portable.handoff-start.missing', 'Handoff package is missing the package-local cold-consumer START entrypoint.'));
92
+ else if (!parsed) findings.push(finding('error', 'portable.handoff-start.projection.unparseable', 'Handoff START entrypoint does not contain one bounded parseable structured projection.'));
93
+ if (parsed && parsed.schema !== HANDOFF_COLD_CONSUMER_PROJECTION_SCHEMA_ID) findings.push(finding('error', 'portable.handoff-start.schema.invalid', 'Handoff START projection schema/version is unsupported.'));
94
+ if (parsed && parsed.boundary !== BOUNDARY) findings.push(finding('error', 'portable.handoff-start.boundary.invalid', 'Handoff START projection lost its non-authoritative package-orientation boundary.'));
95
+
96
+ const carrierInspection = options.carrierInspection || inspectHandoffCarrierProjection(bundle);
97
+ if (carrierInspection.status !== 'valid') findings.push(finding('error', 'portable.handoff-start.carrier.invalid', 'Handoff START cannot qualify because the package carrier projection does not independently correlate with current package truth.'));
98
+ if (parsed && carrierInspection.projection) {
99
+ const expected = buildHandoffColdConsumerProjection({ carrierProjection: carrierInspection.projection });
100
+ for (const field of ['status', 'controls', 'workspaces', 'routes', 'selection', 'authority']) {
101
+ if (stableJson(parsed[field]) !== stableJson(expected[field])) findings.push(finding('error', `portable.handoff-start.${field}.mismatch`, `Handoff START ${field} diverges from independently recomputed package truth.`));
102
+ }
103
+ if (Object.prototype.hasOwnProperty.call(parsed, 'preferredPath') && stableJson(parsed.preferredPath) !== stableJson(expected.preferredPath)) findings.push(finding('error', 'portable.handoff-start.preferredPath.mismatch', 'Handoff START preferredPath diverges from independently recomputed portable cold-start guidance.'));
104
+ if (parsed.authority?.semanticAuthority !== 'none' || parsed.authority?.packageTruthRequired !== true) findings.push(finding('error', 'portable.handoff-start.authority.promotion', 'Handoff START projection promotes orientation text into semantic authority.'));
105
+ }
106
+
107
+ return deepFreeze({
108
+ schema: HANDOFF_COLD_CONSUMER_ENTRYPOINT_INSPECTION_SCHEMA_ID,
109
+ status: findings.some((item) => item.severity === 'error') ? 'invalid' : 'valid',
110
+ path: HANDOFF_COLD_CONSUMER_ENTRYPOINT_PATH,
111
+ projection: parsed,
112
+ carrierInspection,
113
+ findings: Object.freeze(findings),
114
+ findingSummary: Object.freeze({ findings: findings.length, errors: findings.filter((item) => item.severity === 'error').length })
115
+ });
116
+ }
117
+
118
+ export function orientColdConsumerFromHandoffPackage(input = {}) {
119
+ const bundle = input.bundle || input;
120
+ if ((bundle.files || []).some((file) => String(file.path || '') === RECIPIENT_V2_READ_PATH)) {
121
+ const v2 = inspectRecipientFacingV2Topology(bundle);
122
+ const projection = v2.coldConsumerProjection || null;
123
+ const routeMetadata = new Map((v2.routes || []).map((route) => [`${String(route.workspaceId || '')}\u0000${String(route.workspaceRelativeHandoffPath || '')}`, route]));
124
+ const carrierRouteById = new Map((v2.carrierProjection?.routes || []).map((route) => [String(route.id || ''), route]));
125
+ const workspaceArchiveById = new Map((v2.workspaces || []).map((workspace) => {
126
+ const archivePath = String(workspace.workspaceArchivePath || '');
127
+ const archiveFile = (bundle.files || []).find((file) => String(file.path || '') === archivePath);
128
+ return [String(workspace.workspaceId || ''), Object.freeze({ path: archivePath, sha256: archiveFile ? sha256Hex(packageFileBytes(archiveFile)) : '' })];
129
+ }));
130
+ const routes = Object.freeze((projection?.routes || []).map((route) => {
131
+ const metadata = routeMetadata.get(`${String(route.workspaceId || '')}\u0000${String(route.workspaceRelativeHandoffPath || '')}`) || {};
132
+ const archive = workspaceArchiveById.get(String(route.workspaceId || '')) || {};
133
+ const carrierRoute = carrierRouteById.get(String(route.id || '')) || {};
134
+ const handoffSha256 = String(route.sha256 || '');
135
+ const handoffPath = String(route.workspaceRelativeHandoffPath || '');
136
+ return Object.freeze({ ...route, sha256: handoffSha256, sha256Target: handoffPath, handoffSha256, archiveSha256: String(archive.sha256 || ''), archivePackagePath: String(archive.path || route.packagePath || ''), requiredClosure: carrierRoute.requiredClosure || null, pointerPath: String(metadata.pointerPath || ''), endpointRolePointers: Object.freeze([...(metadata.endpointRolePointers || [])]), participantRolePointers: Object.freeze([...(metadata.participantRolePointers || [])]) });
137
+ }));
138
+ return deepFreeze({ schema: 'tiinex.portable.handoff-cold-consumer-orientation.v1', status: v2.status === 'valid' && projection?.status === 'ready' ? 'ready' : 'blocked', entrypoint: Object.freeze({ schema: 'tiinex.portable.handoff-v2.recipient-orientation.inspection.v1', status: v2.status, path: RECIPIENT_V2_READ_PATH, projection, findings: v2.findings }), pointerEntrypoints: Object.freeze({ schema: 'tiinex.portable.handoff-v2.recipient-pointer.inspection.v1', status: v2.status, entries: v2.routes, findings: v2.findings }), workspaces: projection?.workspaces || Object.freeze([]), carrierLineage: v2.carrierProjection?.lineage || null, routes, endpointRoles: v2.endpointRoles || Object.freeze([]), participantRoles: v2.participantRoles || Object.freeze([]), selection: projection?.selection || null, operationBoundary: orientationOperationBoundary(v2.bootstrapInspection), boundary: 'Read-only recipient-facing v2 orientation from qualified visible Tiinex artifacts and exact payload bytes; no legacy control JSON, filename, or adjacency authority.' });
139
+ }
140
+ const inspection = inspectHandoffColdConsumerEntrypoint(bundle);
141
+ const pointerEntrypoints = inspectHandoffPointerEntrypoints(bundle);
142
+ const projection = inspection.projection || null;
143
+ return deepFreeze({
144
+ schema: 'tiinex.portable.handoff-cold-consumer-orientation.v1',
145
+ status: inspection.status === 'valid' && pointerEntrypoints.status === 'valid' && projection?.status === 'ready' ? 'ready' : 'blocked',
146
+ entrypoint: inspection,
147
+ pointerEntrypoints,
148
+ workspaces: projection?.workspaces || Object.freeze([]),
149
+ routes: projection?.routes || Object.freeze([]),
150
+ selection: projection?.selection || null,
151
+ operationBoundary: orientationOperationBoundary(null),
152
+ boundary: 'Read-only package orientation. Received package code is not executed; START and package-root Pointer projections must independently correlate with package truth and never override it.'
153
+ });
154
+ }
155
+
156
+ function orientationOperationBoundary(bootstrapInspection = null) {
157
+ return Object.freeze({
158
+ operationClass: 'local-package-orientation',
159
+ inputScope: 'caller-provided-package-bytes',
160
+ readOnly: true,
161
+ packageContentExecution: false,
162
+ sourceMutation: false,
163
+ remoteMutation: false,
164
+ bootstrapInspection: String(bootstrapInspection?.status || 'unavailable'),
165
+ hostBehaviorAuthority: 'none'
166
+ });
167
+ }
168
+
169
+ function parseProjectionFromMarkdown(markdown = '') {
170
+ const text = String(markdown || '');
171
+ const begin = text.indexOf(BEGIN);
172
+ const end = text.indexOf(END);
173
+ if (begin < 0 || end < 0 || end <= begin || text.indexOf(BEGIN, begin + BEGIN.length) >= 0 || text.indexOf(END, end + END.length) >= 0) return null;
174
+ const bounded = text.slice(begin + BEGIN.length, end).trim();
175
+ const match = bounded.match(/^```json\s*\n([\s\S]*?)\n```$/);
176
+ if (!match) return null;
177
+ try { return JSON.parse(match[1]); } catch { return null; }
178
+ }
179
+ function findFile(bundle = {}, path = '') { return (bundle.files || []).find((file) => String(file.path || '') === String(path || '')) || null; }
180
+ function decodeUtf8(data) { try { return new TextDecoder('utf-8', { fatal: true }).decode(data); } catch { return ''; } }
181
+ function stablePrettyJson(value) { return JSON.stringify(sortJson(value), null, 2); }
182
+ function stableJson(value) { return JSON.stringify(sortJson(value)); }
183
+ function sortJson(value) { if (Array.isArray(value)) return value.map(sortJson); if (!value || typeof value !== 'object') return value; return Object.fromEntries(Object.keys(value).sort().map((key) => [key, sortJson(value[key])])); }
184
+ function finding(severity, code, message, extra = {}) { return Object.freeze({ severity, code, message, ...extra }); }
185
+ function deepFreeze(value) { if (!value || typeof value !== 'object' || Object.isFrozen(value)) return value; if (ArrayBuffer.isView(value) || value instanceof ArrayBuffer) return value; for (const child of Object.values(value)) deepFreeze(child); return Object.freeze(value); }
@@ -0,0 +1,184 @@
1
+ import { discoverPortableHostCapabilities } from '../host/host.capabilities.js';
2
+ import { deepFreeze, normalizeToken } from './coldStartQualification.shared.js';
3
+
4
+ export const PORTABLE_COLD_START_INGRESS_CONTRACT_SCHEMA_ID = 'tiinex.portable.cold-start-ingress-contract.v1';
5
+
6
+ export const PORTABLE_COLD_CONSUMER_GROUNDING_SCHEMA_ID = 'tiinex.portable.cold-consumer-grounding.v1';
7
+
8
+ export const PORTABLE_COLD_START_QUALIFICATION_SCHEMA_ID = 'tiinex.portable.cold-start-qualification.v1';
9
+
10
+ export const PORTABLE_COLD_START_HOST_PROJECTION_SCHEMA_ID = 'tiinex.portable.cold-start-host-projection.v1';
11
+
12
+ export const COLD_START_INGRESS_KINDS = Object.freeze({
13
+ HANDOFF: 'routed-handoff-package',
14
+ WORKSPACE: 'workspace-bootstrap',
15
+ DEGRADED_CAPTURE: 'degraded-capture'
16
+ });
17
+
18
+ const INGRESS_PROFILES = deepFreeze({
19
+ [COLD_START_INGRESS_KINDS.HANDOFF]: {
20
+ firstSemanticOperation: 'orient-handoff-package',
21
+ requiredBeforeSubstantive: ['orient-handoff-package', 'ground-cold-consumer'],
22
+ orientationOperation: 'orient-handoff-package',
23
+ frontierOperation: 'orient-handoff-package',
24
+ minimalNativeBootstrapActions: 1,
25
+ description: 'A received routed Handoff package enters through qualified package orientation before arbitrary artifact archaeology.'
26
+ },
27
+ [COLD_START_INGRESS_KINDS.WORKSPACE]: {
28
+ firstSemanticOperation: 'discover-tooling',
29
+ requiredBeforeSubstantive: ['discover-tooling', 'search-lineage', 'ground-cold-consumer'],
30
+ orientationOperation: 'search-lineage',
31
+ frontierOperation: 'search-lineage',
32
+ minimalNativeBootstrapActions: 1,
33
+ description: 'A workspace with a qualified Tiinex bootstrap discovers host/session capabilities, then searches loaded lineage before arbitrary artifact reads.'
34
+ },
35
+ [COLD_START_INGRESS_KINDS.DEGRADED_CAPTURE]: {
36
+ firstSemanticOperation: '',
37
+ requiredBeforeSubstantive: [],
38
+ orientationOperation: '',
39
+ frontierOperation: '',
40
+ minimalNativeBootstrapActions: 0,
41
+ description: 'A Tooling-unavailable environment may preserve attributed contributions only; durable semantic qualification waits for a later Tooling-capable turn.'
42
+ }
43
+ });
44
+
45
+ export function describePortableColdStartIngress(input = {}) {
46
+ const kind = normalizeIngressKind(input.ingressKind || input.kind || COLD_START_INGRESS_KINDS.HANDOFF);
47
+ const profile = INGRESS_PROFILES[kind];
48
+ return deepFreeze({
49
+ schema: PORTABLE_COLD_START_INGRESS_CONTRACT_SCHEMA_ID,
50
+ version: 1,
51
+ ingressKind: kind,
52
+ profile,
53
+ metrics: Object.freeze([
54
+ 'nativeActionsBeforeTiinexTakeover',
55
+ 'unexpectedNativeActionsBeforeTiinexTakeover',
56
+ 'arbitraryFilesReadBeforeOrientation',
57
+ 'tiinexCallsToOrientation',
58
+ 'totalActionsToOrientation',
59
+ 'bytesToOrientation',
60
+ 'timeToOrientationMs',
61
+ 'candidateArtifactsInspectedBeforeOrientation',
62
+ 'fallbackUsed',
63
+ 'fallbackJustified'
64
+ ]),
65
+ qualification: Object.freeze({
66
+ recoveryIsNotPreferredPath: true,
67
+ qualifiedToolingAvailabilityMustBeObserved: true,
68
+ cli: 'qualify-cold-start <handoff-package.zip> --route <Continue-from> --pre-takeover minimal-bootstrap-only|none|native-archaeology',
69
+ evidenceBoundary: 'Tooling generates orientation/grounding receipts itself in one-shot mode. Pre-takeover native-host behavior remains caller/host evidence unless the host supplies independent instrumentation.',
70
+ firstSemanticOperationMustMatchProfile: true,
71
+ nativePreTakeoverUse: `At most ${profile.minimalNativeBootstrapActions} explicit minimal host/bootstrap ingress action(s); arbitrary semantic archaeology before Tiinex takeover does not qualify.`,
72
+ groundingBeforeSubstantiveWork: kind !== COLD_START_INGRESS_KINDS.DEGRADED_CAPTURE,
73
+ fallback: 'Explicit and justified only. Valid fallback may preserve recovery while remaining non-preferred when qualified Tiinex orientation was available.'
74
+ }),
75
+ authority: Object.freeze({
76
+ providerSpecificSemanticAuthority: false,
77
+ hostProjectionAuthority: false,
78
+ packagePlacementAuthority: false,
79
+ canonicalHandoffRoleSchemaProcessTruthPreserved: true,
80
+ providerNameGrantsCapability: false,
81
+ capabilityAdvertisementIsExerciseEvidence: false
82
+ }),
83
+ semanticSeparations: Object.freeze({
84
+ lineageLeafIsWorkflowFrontier: false,
85
+ lineageLeafIsTaskState: false,
86
+ workflowFrontierIsTaskState: false,
87
+ boundary: 'Lineage topology, current workflow frontier, and Task lifecycle state remain separate qualified observations; cold-start discovery must not collapse them into one currentness boolean.'
88
+ }),
89
+ traceability: Object.freeze({
90
+ operations: Object.freeze(['orient-handoff-package', 'search-lineage', 'discover-tooling', 'ground-cold-consumer', 'plan-host-action', 'accept-host-receipt']),
91
+ schemas: Object.freeze(['tiinex.handoff.v1', 'tiinex.party.role.v1']),
92
+ capabilityBinding: 'tiinex.portable.tooling-discovery.v1'
93
+ })
94
+ });
95
+ }
96
+
97
+ export function projectPortableColdStartHostGuidance(input = {}, options = {}) {
98
+ const ingressKind = normalizeIngressKind(input.ingressKind || input.kind || COLD_START_INGRESS_KINDS.HANDOFF);
99
+ const contract = describePortableColdStartIngress({ ingressKind });
100
+ const discovery = discoverPortableHostCapabilities(capabilityDiscoveryInput(input), options);
101
+ const capabilities = discovery.profile?.capabilities || {};
102
+ const packageReadable = Boolean(capabilities.materialAccess?.attachments || capabilities.materialAccess?.projectSources || capabilities.materialAccess?.filesystemRead || capabilities.materialAccess?.archiveRead);
103
+ const processReady = Boolean(capabilities.execution?.javascript || capabilities.execution?.shell || capabilities.execution?.process);
104
+ const requirements = ingressKind === COLD_START_INGRESS_KINDS.DEGRADED_CAPTURE
105
+ ? [requirement('contribution-capture', true, 'Preserve contribution and speaker attribution without Tooling-dependent mutation claims.')]
106
+ : [
107
+ requirement('package-or-workspace-readable', packageReadable, 'The host can surface explicitly supplied package/workspace bytes to portable Tooling.'),
108
+ requirement('portable-tooling-invocation', processReady || input.toolingInvocationAvailable === true, 'The host can invoke already-qualified portable Tooling or an equivalent registered Tooling entrypoint.'),
109
+ requirement('human-confirmation', Boolean(capabilities.interaction?.humanConfirmation), 'Explicit human confirmation is available when an operation requires it.', true),
110
+ requirement('artifact-return', Boolean(capabilities.interaction?.artifactReturn), 'The host can return generated local artifacts/results to the human.', true),
111
+ requirement('copyable-text-presentation', Boolean(capabilities.interaction?.copyableTextPresentation), 'The host can present exact copyable routing/result text when required.', true)
112
+ ];
113
+ const requiredMissing = requirements.filter((entry) => !entry.optional && !entry.satisfied);
114
+ return deepFreeze({
115
+ schema: PORTABLE_COLD_START_HOST_PROJECTION_SCHEMA_ID,
116
+ version: 1,
117
+ status: requiredMissing.length ? 'degraded' : 'ready',
118
+ ingressKind,
119
+ contract,
120
+ capabilityInstance: discovery.profile?.capabilityInstance || null,
121
+ capabilityDiscovery: discovery,
122
+ requirements: Object.freeze(requirements),
123
+ steps: Object.freeze(contract.profile.requiredBeforeSubstantive.map((operation, index) => Object.freeze({
124
+ order: index + 1,
125
+ operation,
126
+ authority: 'canonical-portable-operation-contract',
127
+ hostSpecificToolNameRequired: false
128
+ }))),
129
+ traceability: Object.freeze({
130
+ operationContract: 'tiinex.portable.operation.catalog.v1',
131
+ capabilityContract: 'tiinex.portable.tooling-discovery.v1',
132
+ handoffSchema: 'tiinex.handoff.v1',
133
+ roleSchema: 'tiinex.party.role.v1'
134
+ }),
135
+ authority: Object.freeze({
136
+ semanticAuthority: 'none',
137
+ providerSpecificSemanticAuthority: false,
138
+ providerNameGrantsCapability: false,
139
+ capabilityAdvertisementIsExerciseEvidence: false,
140
+ trustSensitiveExerciseStillRequiresAcceptedReceipt: true
141
+ }),
142
+ degraded: Object.freeze({
143
+ requiredMissing: Object.freeze(requiredMissing.map((entry) => entry.capability)),
144
+ fallbackMustBeExplicit: true,
145
+ hiddenNetworkAccess: false,
146
+ remoteWrite: false,
147
+ authenticationMayBeRequestedOnlyThroughDeclaredCapability: true
148
+ }),
149
+ boundary: 'Non-authoritative host/bootstrap projection derived from portable ingress and capability contracts. Hosts may render this into CLI, LLM, Viewer, IDE, or future provider-specific instruction formats without adding semantic rules.'
150
+ });
151
+ }
152
+
153
+ export function capabilityDiscoveryInput(input = {}) {
154
+ const host = input.host && typeof input.host === 'object' ? input.host : {};
155
+ return {
156
+ ...host,
157
+ tools: input.tools || input.availableTools || host.tools || host.availableTools || [],
158
+ capabilities: input.capabilities || input.hostCapabilities || host.capabilities,
159
+ provider: input.provider || host.provider,
160
+ hostIdentity: input.hostIdentity || input.hostContext || host.hostIdentity || host.host || nestedHostIdentity(host),
161
+ session: input.session || input.sessionContext || host.session,
162
+ capabilityInstanceId: input.capabilityInstanceId || host.capabilityInstanceId || ''
163
+ };
164
+ }
165
+
166
+ function nestedHostIdentity(host = {}) {
167
+ if (!host || typeof host !== 'object') return undefined;
168
+ const id = String(host.id || host.identifier || host.slug || '').trim();
169
+ const name = String(host.name || host.label || id || '').trim();
170
+ return id || name ? Object.freeze({ id, name }) : undefined;
171
+ }
172
+
173
+ function requirement(capability, satisfied, meaning, optional = false) {
174
+ return deepFreeze({ capability, satisfied: Boolean(satisfied), optional: Boolean(optional), meaning });
175
+ }
176
+
177
+ export function normalizeIngressKind(value) {
178
+ const normalized = normalizeToken(value).replace(/_/g, '-');
179
+ if (Object.prototype.hasOwnProperty.call(INGRESS_PROFILES, normalized)) return normalized;
180
+ if (['handoff', 'handoff-package', 'routed-handoff'].includes(normalized)) return COLD_START_INGRESS_KINDS.HANDOFF;
181
+ if (['workspace', 'workspace-with-bootstrap'].includes(normalized)) return COLD_START_INGRESS_KINDS.WORKSPACE;
182
+ if (['voice', 'stt', 'capture'].includes(normalized)) return COLD_START_INGRESS_KINDS.DEGRADED_CAPTURE;
183
+ return COLD_START_INGRESS_KINDS.HANDOFF;
184
+ }