@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,409 @@
1
+ # Continuity Context
2
+
3
+ - Envelope Schema: [tiinex.root.v1](../../../tiinex.root.v1.schema.md)
4
+ - Parent
5
+ - Parent Schema: [tiinex.root.v1](../../../tiinex.root.v1.schema.md)
6
+ - Created At: 2026-09-01 14:19:00
7
+ - Trace: [tiinex.root.v1.schema.md](../../../tiinex.root.v1.schema.md)
8
+ - Origin:
9
+ - [relative](../../../tiinex.root.v1.schema.md)
10
+ - Current
11
+ - Current Schema: [tiinex.handoff.package.v1](tiinex.handoff.package.v1.schema.md)
12
+ - Created At: 2026-09-01 14:19:00
13
+ - Authors: Axiom
14
+ - Summary: Narrow receiver-facing Handoff carrier schema for package identity, Start/bootstrap exposure, package-local complete Workspace snapshot bindings, route discovery, and carrier continuity without owning Handoff transfer semantics or generic Workspace representation semantics.
15
+
16
+ ---
17
+
18
+ # Handoff Package
19
+
20
+ - Status: maintained schema note
21
+
22
+ ## Summary
23
+
24
+ Defines one receiver-facing Handoff carrier identity and discovery contract.
25
+
26
+ `tiinex.handoff.package.v1` owns only the semantic facts that belong to the carrier itself: how a recipient enters the carrier, how complete package-local Workspace snapshots are bound to explicit Workspace artifacts, how the selected Handoff route is discovered, and how carrier convenience lineage is represented.
27
+
28
+ Despite its namespace, this schema is not a specialization of `tiinex.handoff.v1`. It does not transfer work or responsibility. It is also not a specialization of `tiinex.semantic.package.v1`, whose maintained job is portable schema and Transition discovery.
29
+
30
+ ## Core Semantics
31
+
32
+ - Handoff Package = one recipient-facing carrier identity/discovery boundary.
33
+ - The authoritative Handoff remains a `tiinex.handoff.v1` artifact in its owning Workspace; carrying or pointing to it does not duplicate or replace Handoff semantics.
34
+ - The authoritative Workspace remains a `tiinex.workspace.v1` artifact. A package-local snapshot is a representation of that Workspace's source bytes, not the Workspace artifact itself.
35
+ - A Handoff Package may directly bind a carried Workspace artifact to one exact package-local complete Workspace snapshot when the relation exists only for this carrier and the package schema owns all qualification rules needed to re-establish that binding from the package bytes.
36
+ - That package-specific binding is not a `tiinex.workspace.representation.v1` artifact and does not activate generic Workspace Representation authority outside this carrier.
37
+ - A standalone `tiinex.external.payload.v1` artifact is not required for the same package-local Workspace snapshot when no independent payload identity, location, access, retention, or recovery semantics need to survive apart from the package binding.
38
+ - A standalone `tiinex.workspace.representation.v1` artifact is not required for the same package-local complete snapshot when no independently selectable representation relation, bounded scope, multiple-representation choice, external provider contract, or separate representation lifecycle needs to survive apart from the package binding.
39
+ - Generic External Payload and Workspace Representation schemas remain authoritative wherever those independent semantic jobs exist.
40
+ - Package-local `Parent` lineage among carrier artifacts may be intentionally manufactured as recipient continuity/navigation. Its semantic subject is the carrier artifact sequence only; it does not rewrite source-artifact Parent, Origin, ownership, authority, Role hierarchy, Handoff endpoints, or participation.
41
+ - Package-local Role Pointers are discovery/grounding aids only. Handoff endpoint and participation meaning remains owned by the authoritative Handoff and any separately authoritative typed Relation.
42
+ - Workspace placement of a Handoff Pointer is route-resolution navigation: it identifies the Workspace from which the authoritative Handoff is to be resolved, not ownership or authority beyond that resolution fact.
43
+ - Package membership, path, filename, adjacency, archive entry order, digest equality, or successful transport do not by themselves create semantic authority.
44
+
45
+ ## Schema Validation Contract
46
+
47
+ ### Handoff Package Scope
48
+
49
+ Applies To
50
+
51
+ - artifacts whose `Current -> Current Schema` is `tiinex.handoff.package.v1`
52
+
53
+ Rules
54
+
55
+ - `tiinex.handoff.package.v1` identifies artifacts whose main job is to declare one recipient-facing Handoff carrier and its bounded discovery/binding contract.
56
+ - The package artifact must remain human-readable without a hidden compatibility manifest, application-local state, repository search, or manual archive archaeology.
57
+ - The package artifact must not become an exhaustive file inventory, verification receipt, Handoff duplicate, Workspace duplicate, generic workflow engine, or general transport ontology.
58
+ - Prose outside `Schema Validation Contract` may explain the package but does not add machine requirements.
59
+
60
+ ### Handoff Package Body
61
+
62
+ Required Shape
63
+
64
+ - first body heading after the continuity envelope
65
+ - `## Package Identity` section
66
+ - `## Bootstrap Exposure` section
67
+ - `## Workspace Snapshot Bindings` section
68
+ - `## Route Discovery` section
69
+ - `## Carrier Continuity` section
70
+ - `## Qualification Boundary` section
71
+ - `## Interpretation Limits` section
72
+
73
+ Optional Sections
74
+
75
+ - Evidence Basis
76
+ - Related Artifacts
77
+ - References
78
+
79
+ Rules
80
+
81
+ - Required sections must be readable and machine-extractable.
82
+ - `Workspace Snapshot Bindings` uses repeated named declarations.
83
+ - The body must not reproduce the authoritative Handoff body, Workspace body, Role body, or an exhaustive archive/file map.
84
+
85
+ ### Package Identity
86
+
87
+ Required Fields
88
+
89
+ - Package Role
90
+ - Carrier Kind
91
+
92
+ Field Value Constraints
93
+
94
+ - Package Role
95
+ - Allowed Value: recipient-facing-handoff-carrier
96
+ - Domain Policy: closed
97
+ - Carrier Kind
98
+ - Allowed Value: self-contained
99
+ - Domain Policy: closed
100
+
101
+ Rules
102
+
103
+ - `Package Role` states that the artifact describes the recipient-facing Handoff carrier.
104
+ - `Carrier Kind: self-contained` means every material source byte required by the selected qualified route is carried by the package according to the package's explicit bindings and closure rules.
105
+ - Package identity does not create identity for contained Workspace, Handoff, Role, Pointer, or other source artifacts.
106
+
107
+ ### Bootstrap Exposure
108
+
109
+ Required Fields
110
+
111
+ - Start Artifact
112
+ - Tooling Bootstrap Descriptor
113
+ - Bootstrap Rule
114
+
115
+ Field Value Constraints
116
+
117
+ - Start Artifact
118
+ - Allowed Shape: Markdown Link
119
+ - Domain Policy: closed
120
+ - Tooling Bootstrap Descriptor
121
+ - Allowed Shape: Markdown Link
122
+ - Domain Policy: closed
123
+ - Bootstrap Rule
124
+ - Allowed Value: start-then-qualified-bootstrap
125
+ - Domain Policy: closed
126
+
127
+ Rules
128
+
129
+ - `Start Artifact` must resolve to the package-local recipient ingress artifact, ordinarily a `tiinex.pointer.v1`.
130
+ - `Tooling Bootstrap Descriptor` must resolve to the package-local artifact that owns the Tooling bootstrap payload reference and exact bootstrap-payload integrity, ordinarily `tiinex.external.payload.v1`.
131
+ - The package schema does not absorb bootstrap payload semantics merely because the bootstrap bytes are carried inside the package.
132
+ - `Bootstrap Rule: start-then-qualified-bootstrap` means a cold recipient reads Start first, qualifies the declared bootstrap descriptor/payload, then transfers semantic package interpretation to the qualified Tooling path before following the selected route.
133
+
134
+ ### Workspace Snapshot Bindings
135
+
136
+ Declaration Shape
137
+
138
+ - First-Level Hyphen List Item
139
+
140
+ Required Fields
141
+
142
+ - Workspace Id
143
+ - Workspace Artifact
144
+ - Snapshot Path
145
+ - Workspace Artifact Inner Path
146
+ - Snapshot Kind
147
+ - Coverage
148
+ - Binding State
149
+ - Integrity Method
150
+ - Integrity Value
151
+
152
+ Optional Fields
153
+
154
+ - Byte Size
155
+ - Notes
156
+
157
+ Field Value Constraints
158
+
159
+ - Workspace Artifact
160
+ - Allowed Shape: Markdown Link
161
+ - Domain Policy: closed
162
+ - Snapshot Path
163
+ - Allowed Shape: Markdown Link
164
+ - Domain Policy: closed
165
+ - Snapshot Kind
166
+ - Allowed Value: exact-workspace-byte-tree-archive
167
+ - Domain Policy: closed
168
+ - Coverage
169
+ - Allowed Value: complete
170
+ - Domain Policy: closed
171
+ - Binding State
172
+ - Allowed Value: verified
173
+ - Allowed Value: declared
174
+ - Allowed Value: unresolved
175
+ - Domain Policy: closed
176
+ - Integrity Method
177
+ - Allowed Value: sha256
178
+ - Domain Policy: closed
179
+
180
+ Rules
181
+
182
+ - `Workspace Id` is a package-local readability/routing handle. It does not replace the Workspace artifact as semantic Workspace identity.
183
+ - `Workspace Artifact` must resolve to exactly one carried artifact whose Current Schema is `tiinex.workspace.v1`.
184
+ - `Snapshot Path` must resolve to one package-local payload entry containing the exact complete Workspace byte-tree snapshot for this binding. External URLs and inferred filenames are not allowed.
185
+ - `Workspace Artifact Inner Path` is the exact normalized Workspace-relative path at which the bound Workspace artifact must occur inside the snapshot.
186
+ - `Snapshot Kind: exact-workspace-byte-tree-archive` fixes this v1 relation to a path-addressable complete Workspace source-byte archive. It does not create or imply a generic Archive or ZIP schema.
187
+ - `Coverage: complete` is required. `bounded`, `partial`, and `unknown` are not allowed in this package-local shortcut. If bounded or independently selectable representation semantics are needed, use the generic Workspace Representation contract instead of weakening this binding.
188
+ - `Integrity Method: sha256` and `Integrity Value` identify the exact package-member bytes at `Snapshot Path`. `Integrity Value` must be a lowercase 64-character hexadecimal SHA-256 digest.
189
+ - `Binding State: verified` is valid only when exact snapshot bytes, safe decoding, normalized path mapping, complete coverage, and exact Workspace-artifact inner-byte correlation have qualified. A receiver must requalify these facts from the carried bytes; the state is not a transport receipt or acceptance proof.
190
+ - `declared` and `unresolved` preserve prequalification states but do not satisfy a qualified Handoff carrier.
191
+ - `Byte Size`, when present, is a mechanical consistency aid only and does not replace exact byte integrity.
192
+ - The archive root is fixed at `.`, Workspace-relative paths map by normalized identity-relative paths, and unsafe, absolute, traversal, duplicate-normalized, or ambiguous entries must fail qualification.
193
+ - Exact equality between the carried `Workspace Artifact` bytes and the entry at `Workspace Artifact Inner Path` is required for a verified binding.
194
+ - A verified package-local complete binding may activate only the package recipient's complete Workspace source provider for this exact carrier snapshot.
195
+ - The binding must not be exported, cached, or re-described as a generic `tiinex.workspace.representation.v1` relation unless that generic relation is separately materialized and qualified.
196
+ - If the snapshot needs independent payload identity/location/access/recovery semantics outside the package, materialize `tiinex.external.payload.v1`.
197
+ - If the Workspace-to-representation relation needs independent lifecycle, selection, bounded scope, multiple-representation choice, or generic provider authority outside the package, materialize `tiinex.workspace.representation.v1` and its required payload authority.
198
+
199
+ ### Route Discovery
200
+
201
+ Required Fields
202
+
203
+ - Route Placement Rule
204
+ - Continue-From Rule
205
+ - Pre-Handoff Closure Rule
206
+
207
+ Field Value Constraints
208
+
209
+ - Route Placement Rule
210
+ - Allowed Value: authoritative-workspace-descended
211
+ - Domain Policy: closed
212
+ - Continue-From Rule
213
+ - Allowed Value: exact-package-local-handoff-pointer
214
+ - Domain Policy: closed
215
+ - Pre-Handoff Closure Rule
216
+ - Allowed Value: selected-pointer-carrier-ancestors
217
+ - Domain Policy: closed
218
+
219
+ Rules
220
+
221
+ - `Route Placement Rule: authoritative-workspace-descended` means a package-local Handoff Pointer route is placed below the packaged Workspace whose source snapshot contains the authoritative Handoff target.
222
+ - `Continue-From Rule: exact-package-local-handoff-pointer` means the recipient is given one exact package-local Handoff Pointer path or an explicit qualified selection among such pointers.
223
+ - `Pre-Handoff Closure Rule: selected-pointer-carrier-ancestors` means route-specific material required before following the authoritative Handoff must be discoverable on the selected pointer's carrier-local ancestor closure.
224
+ - Carrier-local ancestor closure is a recipient discovery plan. It does not make ancestor placement semantic participation, delegation, authority precedence, source Parent truth, Required Context meaning, or Handoff endpoint identity.
225
+ - Package-local Role Pointers included on that closure remain `tiinex.pointer.v1` artifacts. Their placement permits pre-Handoff grounding only and must not be used to infer participation.
226
+ - The authoritative Handoff target remains the sole owner of Handoff transfer semantics.
227
+
228
+ ### Carrier Continuity
229
+
230
+ Required Fields
231
+
232
+ - Carrier Dimension
233
+ - Carrier Checkpoint
234
+
235
+ Optional Fields
236
+
237
+ - Parent Carrier Dimension
238
+ - Major Reason
239
+
240
+ Field Value Constraints
241
+
242
+ - Carrier Checkpoint
243
+ - Allowed Value: progression
244
+ - Allowed Value: major
245
+ - Domain Policy: closed
246
+
247
+ Rules
248
+
249
+ - `Carrier Dimension` and `Parent Carrier Dimension`, when present, are human progress/retention projections for carriers only.
250
+ - Carrier dimensions must be numeric hyphen-separated paths such as `001`, `001-1`, or `001-1-1`; alphabetic lineage components are invalid.
251
+ - A child progression extends the parent carrier dimension without advancing or rewriting any contained artifact lineage.
252
+ - `Carrier Checkpoint: major` requires a meaningful `Major Reason` and a separately qualified complete source closure required by the governing carrier profile.
253
+ - Carrier continuity must not be used to infer or synchronize Root Parent, Trace, Origin, Handoff lifecycle, Workspace identity, or Role authority.
254
+
255
+ ### Qualification Boundary
256
+
257
+ Required Fields
258
+
259
+ - Receiver Qualification
260
+ - Failure Policy
261
+ - Derived Inventory Authority
262
+
263
+ Field Value Constraints
264
+
265
+ - Receiver Qualification
266
+ - Allowed Value: reverify-carried-authority-and-bytes
267
+ - Domain Policy: closed
268
+ - Failure Policy
269
+ - Allowed Value: fail-closed
270
+ - Domain Policy: closed
271
+ - Derived Inventory Authority
272
+ - Allowed Value: none
273
+ - Domain Policy: closed
274
+
275
+ Rules
276
+
277
+ - `Receiver Qualification: reverify-carried-authority-and-bytes` requires the recipient to validate the visible package artifacts, selected route, exact bound payload bytes, and required source correlation rather than trusting placement or a sender-side receipt.
278
+ - `Failure Policy: fail-closed` means missing, ambiguous, stale, unsafe, mismatched, or unqualified required material blocks a qualified carrier instead of being repaired by filename guessing, repository-global search, hidden network access, or compatibility metadata.
279
+ - `Derived Inventory Authority: none` means generated manifests, indexes, checksums, compatibility JSON, file maps, and archive listings may support mechanical verification but do not override the visible semantic artifacts and exact bytes unless another explicit schema grants them authority.
280
+ - A checksum match does not prove semantic correctness, provenance, authorship, acceptance, participation, or source identity beyond the exact qualified binding facts.
281
+
282
+ ### Interpretation Limits
283
+
284
+ Required Fields
285
+
286
+ - Does Not Mean
287
+ - Must Not Be Used To Claim
288
+ - Generic Payload Boundary
289
+ - Generic Representation Boundary
290
+
291
+ Rules
292
+
293
+ - `Does Not Mean` must name important interpretations the package does not support.
294
+ - `Must Not Be Used To Claim` must name claims requiring separate authority.
295
+ - `Generic Payload Boundary` must preserve `tiinex.external.payload.v1` for payload identity/location/integrity/access/recovery semantics that have independent value outside this package-local binding.
296
+ - `Generic Representation Boundary` must preserve `tiinex.workspace.representation.v1` for independently meaningful Workspace representation relations, including bounded scope, multiple selectable representations, generic provider activation, or separate relation lifecycle.
297
+ - A Handoff Package must not be used as a Handoff, Workspace, Role, Relation, External Payload, Workspace Representation, preservation record, delivery receipt, acceptance record, provenance record, or generic semantic package.
298
+ - Package membership and discovery do not prove authority over contained source artifacts.
299
+
300
+ ### File Naming
301
+
302
+ Recommended Shape
303
+
304
+ - `<numeric-dimension>-tiinex-handoff-package.trace.md`
305
+
306
+ Rules
307
+
308
+ - Package artifact filenames should make the carrier role readable without becoming semantic identity.
309
+ - Filename, dimension, and root placement do not replace the Current Schema declaration.
310
+
311
+ ## Artifact Creation Contract
312
+
313
+ ### Creation Scope
314
+
315
+ Create `tiinex.handoff.package.v1` only when one self-contained recipient-facing Handoff carrier needs a durable carrier identity/discovery contract that cannot be reconstructed more appropriately from the authoritative Handoff and Workspace artifacts alone.
316
+
317
+ Do not create this schema merely because a ZIP exists.
318
+
319
+ ### Required Inputs
320
+
321
+ - Package Role
322
+ - Carrier Kind
323
+ - Start Artifact
324
+ - Tooling Bootstrap Descriptor
325
+ - Bootstrap Rule
326
+ - one or more qualified Workspace Snapshot Bindings
327
+ - Route Placement Rule
328
+ - Continue-From Rule
329
+ - Pre-Handoff Closure Rule
330
+ - Carrier Dimension
331
+ - Carrier Checkpoint
332
+ - Receiver Qualification
333
+ - Failure Policy
334
+ - Derived Inventory Authority
335
+ - Interpretation Limits
336
+
337
+ ### Generation Rules
338
+
339
+ - Keep the package artifact narrow and human-readable.
340
+ - Bind only package-local complete Workspace snapshots through this v1 shortcut.
341
+ - Preserve the Workspace artifact as semantic Workspace identity.
342
+ - Reuse External Payload and Workspace Representation schemas when their independent semantics are needed.
343
+ - Keep bootstrap/cache payload descriptors under their own owning schemas.
344
+ - Do not duplicate Handoff parties, transfers, Required Context, Role participation, or Workspace body content.
345
+ - Do not materialize receipt/checksum/index artifacts merely because Tooling can compute them.
346
+ - Fail closed when a required binding or selected route cannot be qualified.
347
+
348
+ ## Minimal Example
349
+
350
+ ```md
351
+ # Handoff Package
352
+
353
+ ## Package Identity
354
+
355
+ - Package Role: recipient-facing-handoff-carrier
356
+ - Carrier Kind: self-contained
357
+
358
+ ## Bootstrap Exposure
359
+
360
+ - Start Artifact: [Start](001-1-READ-BEFORE-PROCEEDING.trace.md)
361
+ - Tooling Bootstrap Descriptor: [Bootstrap](001-2-bootstrap.trace.md)
362
+ - Bootstrap Rule: start-then-qualified-bootstrap
363
+
364
+ ## Workspace Snapshot Bindings
365
+
366
+ - docs
367
+ - Workspace Id: docs
368
+ - Workspace Artifact: [Docs Workspace](001-2-3-docs.workspace.md)
369
+ - Snapshot Path: [Docs Snapshot](001-2-3-docs-workspace.zip)
370
+ - Workspace Artifact Inner Path: .topics/.workspaces/tiinex-docs.workspace.md
371
+ - Snapshot Kind: exact-workspace-byte-tree-archive
372
+ - Coverage: complete
373
+ - Binding State: verified
374
+ - Integrity Method: sha256
375
+ - Integrity Value: <64 lowercase hexadecimal characters>
376
+
377
+ ## Route Discovery
378
+
379
+ - Route Placement Rule: authoritative-workspace-descended
380
+ - Continue-From Rule: exact-package-local-handoff-pointer
381
+ - Pre-Handoff Closure Rule: selected-pointer-carrier-ancestors
382
+
383
+ ## Carrier Continuity
384
+
385
+ - Carrier Dimension: 001-1
386
+ - Parent Carrier Dimension: 001
387
+ - Carrier Checkpoint: progression
388
+
389
+ ## Qualification Boundary
390
+
391
+ - Receiver Qualification: reverify-carried-authority-and-bytes
392
+ - Failure Policy: fail-closed
393
+ - Derived Inventory Authority: none
394
+
395
+ ## Interpretation Limits
396
+
397
+ - Does Not Mean: package membership is semantic ownership or Handoff participation
398
+ - Must Not Be Used To Claim: recipient acceptance, Handoff completion, source provenance, or Role authority
399
+ - Generic Payload Boundary: use External Payload when package-local snapshot bytes need independent payload semantics
400
+ - Generic Representation Boundary: use Workspace Representation when the Workspace representation relation needs independent, bounded, selectable, or generic provider semantics
401
+ ```
402
+
403
+ ---
404
+
405
+ # Continuity Integrity
406
+
407
+ - [sha256-base64url-c14n-v2](https://github.com/Tiinex/docs/blob/3988951208eb9a8926e84ab42625d4b42fa00c2d/.topics/.validators/sha256-base64url-c14n-v2.validator.md)
408
+ - Towards: self
409
+ - Value: EhpcG3P3id741U92Hx_Ti97Od552gAMo3ikSQPBictc
@@ -0,0 +1,35 @@
1
+ import { parseArtifactMarkdown } from '../../../artifacts/artifact.parse.js';
2
+ import { allocateContinuationPath, allocateRootArtifactPath } from '../../../transitions/record.transitions.js';
3
+ import { auditPortableRecord } from '../audit/audit.capability.js';
4
+
5
+ export const PORTABLE_HANDOFF_AUTHORING_PLAN_SCHEMA_ID = 'tiinex.portable.handoff-authoring-plan.v1';
6
+
7
+ export function projectPortableHandoffAuthoringPlan(input = {}) {
8
+ const records = normalizeRecords(input);
9
+ const title = String(input.title || '').trim();
10
+ const parentPath = norm(input.parentPath || input.parent || '');
11
+ if (!title) return blocked('portable.handoff-authoring.title-required', 'Handoff authoring path projection requires one title.');
12
+ if (!parentPath) {
13
+ const allocation = allocateRootArtifactPath({ targetId: 'tiinex.handoff.v1', targetLabel: 'Handoff', title }, { workspaceRecords: records });
14
+ return ready({ mode: 'root', parentPath: '', path: allocation.path, pathPolicy: allocation.policy });
15
+ }
16
+ const parent = records.find((item) => norm(item.path || item.id || '') === parentPath);
17
+ if (!parent) return blocked('portable.handoff-authoring.parent-unresolved', 'Selected authoring Parent is not present in the qualified local source material.', { parentPath });
18
+ let parsed;
19
+ try { parsed = parseArtifactMarkdown(parent.markdown); } catch { return blocked('portable.handoff-authoring.parent-parse-failed', 'Selected authoring Parent is not a readable Tiinex artifact.', { parentPath }); }
20
+ const audit = auditPortableRecord({ ...parent, title: parsed.title || '', schemaId: parsed.envelope?.current?.schema?.id, currentSchemaId: parsed.envelope?.current?.schema?.id, parent: parsed.envelope?.parent || null });
21
+ if (audit.status !== 'readable' || audit.qualification?.exact !== true || (audit.findings || []).some((item) => item.severity === 'error')) return blocked('portable.handoff-authoring.parent-unqualified', 'Selected authoring Parent must pass exact shared audit before child path allocation.', { parentPath });
22
+ const parentRecord = { ...parent, title: parsed.title || '', path: parentPath, id: parentPath };
23
+ const allocation = allocateContinuationPath({ parentRecord, targetId: 'tiinex.handoff.v1', targetLabel: 'Handoff', title }, { workspaceRecords: records });
24
+ return ready({ mode: 'continuation', parentPath, path: allocation.path, pathPolicy: allocation.policy });
25
+ }
26
+
27
+ function ready(value) { return freeze({ schema: PORTABLE_HANDOFF_AUTHORING_PLAN_SCHEMA_ID, status: 'ready', ...value, findings: [], operationBoundary: boundary(), boundary: 'Shared path allocation only. It does not create the Handoff, select From/To, transfer responsibility, or grant Parent authority beyond the exact audited local Parent supplied by the caller.' }); }
28
+ function blocked(code, message, context = {}) { return freeze({ schema: PORTABLE_HANDOFF_AUTHORING_PLAN_SCHEMA_ID, status: 'blocked', mode: '', parentPath: '', path: '', pathPolicy: null, findings: [{ severity: 'error', code, message, context }], operationBoundary: boundary() }); }
29
+ function boundary() { return { sourceMutation: false, remoteWrite: false, authoring: false }; }
30
+ function normalizeRecords(input = {}) {
31
+ if (Array.isArray(input.records)) return input.records;
32
+ return (Array.isArray(input.files) ? input.files : []).filter((item) => typeof item?.content === 'string').map((item) => ({ id: String(item.path || ''), path: String(item.path || ''), markdown: String(item.content || ''), sourceMode: item.sourceMode || '' }));
33
+ }
34
+ function norm(value = '') { return String(value || '').replace(/\\/g, '/').replace(/^\.\//, '').replace(/^\/+|\/+$/g, ''); }
35
+ function freeze(value) { if (Array.isArray(value)) return Object.freeze(value.map(freeze)); if (!value || typeof value !== 'object' || Object.isFrozen(value)) return value; return Object.freeze(Object.fromEntries(Object.entries(value).map(([key, item]) => [key, freeze(item)]))); }
@@ -0,0 +1,61 @@
1
+ import { parseArtifactMarkdown } from '../../../artifacts/artifact.parse.js';
2
+ import { auditPortableRecord } from '../audit/audit.capability.js';
3
+ import { portableRuntimeValidationAuthorityForRecord } from '../schema/qualifiedLocalRoot.runtime.js';
4
+
5
+ export const PORTABLE_HANDOFF_ENDPOINT_PROJECTION_SCHEMA_ID = 'tiinex.portable.handoff-endpoint-projection.v1';
6
+
7
+ export function projectQualifiedHandoffEndpoints(input = {}) {
8
+ const workspaceId = token(input.workspaceId || input.workspace || 'workspace') || 'workspace';
9
+ const records = normalizeRecords(input);
10
+ const candidates = [];
11
+ const findings = [];
12
+ for (const record of records) {
13
+ const path = norm(record.path || record.id || '');
14
+ if (!path || !/\.md$/i.test(path)) continue;
15
+ let parsed;
16
+ try { parsed = parseArtifactMarkdown(record.markdown || ''); } catch { continue; }
17
+ const schemaId = String(parsed.envelope?.current?.schema?.id || record.schemaId || '').trim();
18
+ if (!schemaId) continue;
19
+ const audit = auditPortableRecord({ ...record, schemaId, currentSchemaId: schemaId, title: parsed.title || record.title || '' }, { requireExactSchemaAuthority: true });
20
+ if (audit.status !== 'readable' || audit.qualification?.exact !== true || (audit.findings || []).some((item) => item.severity === 'error')) continue;
21
+ const authority = portableRuntimeValidationAuthorityForRecord({ ...record, schemaId, currentSchemaId: schemaId });
22
+ if (authority.state !== 'qualified') continue;
23
+ const lineage = Array.isArray(authority.compiledContract?.lineage) ? authority.compiledContract.lineage.map(String) : [];
24
+ const kind = lineage.includes('tiinex.party.role.v1') || schemaId === 'tiinex.party.role.v1'
25
+ ? 'role'
26
+ : lineage.includes('tiinex.party.v1') || schemaId === 'tiinex.party.v1' || schemaId.startsWith('tiinex.party.')
27
+ ? 'party'
28
+ : '';
29
+ if (!kind) continue;
30
+ const target = `${workspaceId}::${path}`;
31
+ candidates.push(freeze({
32
+ id: target,
33
+ target,
34
+ reference: target,
35
+ kind,
36
+ label: String(parsed.title || record.title || path),
37
+ workspaceId,
38
+ artifactPath: path,
39
+ schemaId,
40
+ qualification: 'qualified-exact'
41
+ }));
42
+ }
43
+ candidates.sort((a, b) => a.kind.localeCompare(b.kind) || a.label.localeCompare(b.label) || a.target.localeCompare(b.target));
44
+ return freeze({
45
+ schema: PORTABLE_HANDOFF_ENDPOINT_PROJECTION_SCHEMA_ID,
46
+ status: 'ready',
47
+ workspaceId,
48
+ candidates,
49
+ findings,
50
+ operationBoundary: { sourceMutation: false, remoteWrite: false, identityInference: false },
51
+ boundary: 'Projects only exactly qualified Role/Party artifact choices. target/reference preserves explicit Workspace artifact identity as workspaceId::artifact-path; holder labels, transport identity, chronology, filenames, and repository basenames never infer endpoint identity.'
52
+ });
53
+ }
54
+
55
+ function normalizeRecords(input = {}) {
56
+ if (Array.isArray(input.records)) return input.records;
57
+ return (Array.isArray(input.files) ? input.files : []).filter((item) => typeof item?.content === 'string').map((item) => ({ id: String(item.path || ''), path: String(item.path || ''), markdown: String(item.content || ''), sourceMode: item.sourceMode || '' }));
58
+ }
59
+ function norm(value = '') { return String(value || '').replace(/\\/g, '/').replace(/^\.\//, '').replace(/^\/+|\/+$/g, ''); }
60
+ function token(value = '') { return String(value || '').trim().toLowerCase().replace(/[^a-z0-9._-]+/g, '-').replace(/^-+|-+$/g, ''); }
61
+ function freeze(value) { if (Array.isArray(value)) return Object.freeze(value.map(freeze)); if (!value || typeof value !== 'object' || Object.isFrozen(value)) return value; return Object.freeze(Object.fromEntries(Object.entries(value).map(([key, item]) => [key, freeze(item)]))); }
@@ -0,0 +1,91 @@
1
+ import path from 'node:path';
2
+ import { auditPortableRecord } from '../audit/audit.capability.js';
3
+ import { parseArtifactMarkdown } from '../../../artifacts/artifact.parse.js';
4
+
5
+ export const PORTABLE_HANDOFF_LEAF_PROJECTION_SCHEMA_ID = 'tiinex.portable.handoff-leaf-projection.v1';
6
+
7
+ export function projectQualifiedHandoffLeaves(input = {}) {
8
+ const records = normalizeRecords(input);
9
+ const qualified = records.map((record) => ({ record, audit: auditPortableRecord(record) }))
10
+ .filter(({ audit }) => audit.schemaId === 'tiinex.handoff.v1' && audit.status === 'readable' && audit.qualification?.exact === true && !(audit.findings || []).some((item) => item.severity === 'error'));
11
+ const byPath = new Map(records.map((record) => [norm(record.path || record.id || ''), record]).filter(([key]) => key));
12
+ const handoffPaths = new Set(qualified.map(({ record }) => norm(record.path || record.id || '')).filter(Boolean));
13
+ const ancestorHandoffs = new Set();
14
+ for (const { record } of qualified) {
15
+ let current = record;
16
+ const visited = new Set();
17
+ for (let depth = 0; depth < 256; depth += 1) {
18
+ const currentPath = norm(current?.path || current?.id || '');
19
+ if (!currentPath || visited.has(currentPath)) break;
20
+ visited.add(currentPath);
21
+ const parentPath = resolveParentPath(currentPath, current?.parent?.trace || current?.parentTrace || '');
22
+ if (!parentPath) break;
23
+ if (handoffPaths.has(parentPath)) ancestorHandoffs.add(parentPath);
24
+ current = byPath.get(parentPath);
25
+ if (!current) break;
26
+ }
27
+ }
28
+ const candidates = qualified.map(({ record, audit }) => projectCandidate(record, audit, !ancestorHandoffs.has(norm(record.path || record.id || ''))));
29
+ const leaves = candidates.filter((item) => item.leaf === true);
30
+ return freeze({
31
+ schema: PORTABLE_HANDOFF_LEAF_PROJECTION_SCHEMA_ID,
32
+ status: 'ready',
33
+ candidates,
34
+ leaves,
35
+ pointerless: {
36
+ selectionLabel: 'No Handoff pointer',
37
+ packageRole: 'recipient-facing-workspace-carrier',
38
+ semanticState: 'qualified-canonical-docs',
39
+ manufactureState: 'ready',
40
+ blockerCode: '',
41
+ consequence: 'Workspace transport only — no Handoff semantics.'
42
+ },
43
+ operationBoundary: { sourceMutation: false, remoteWrite: false, manufacture: false },
44
+ boundary: 'Qualified Handoff leaf projection is derived from exact shared Handoff validation plus declared Parent continuity only. Package selection does not create From/To, transfer, acceptance, completion, or Role authority.'
45
+ });
46
+ }
47
+
48
+ function projectCandidate(record = {}, audit = {}, leaf = false) {
49
+ const markdown = String(record.markdown || '');
50
+ return freeze({
51
+ path: norm(record.path || record.id || ''),
52
+ title: String(record.title || audit.title || ''),
53
+ schemaId: 'tiinex.handoff.v1',
54
+ leaf,
55
+ qualification: 'qualified-exact',
56
+ from: fieldInSection(markdown, 'Handoff Parties', 'From'),
57
+ to: fieldInSection(markdown, 'Handoff Parties', 'To'),
58
+ purpose: fieldInSection(markdown, 'Handoff Parties', 'Purpose')
59
+ });
60
+ }
61
+
62
+ function fieldInSection(markdown = '', heading = '', field = '') {
63
+ const lines = String(markdown || '').replace(/\r\n?/g, '\n').split('\n');
64
+ const start = lines.findIndex((line) => new RegExp(`^##\\s+${escapeRegExp(heading)}\\s*$`, 'i').test(line));
65
+ if (start < 0) return '';
66
+ for (let i = start + 1; i < lines.length; i += 1) {
67
+ if (/^##\s+/.test(lines[i])) break;
68
+ const match = lines[i].match(new RegExp(`^\\s*-\\s+${escapeRegExp(field)}\\s*:\\s*(.*)$`, 'i'));
69
+ if (match) return match[1].trim();
70
+ }
71
+ return '';
72
+ }
73
+ function resolveParentPath(childPath = '', trace = '') {
74
+ const target = String(trace || '').trim();
75
+ if (!target || /^(?:https?:|github:|raw:)/i.test(target)) return '';
76
+ return norm(path.posix.join(path.posix.dirname(norm(childPath)), target.replace(/\\/g, '/')));
77
+ }
78
+ function norm(value = '') { return String(value || '').replace(/\\/g, '/').replace(/^\.\//, '').replace(/^\/+|\/+$/g, ''); }
79
+ function escapeRegExp(value = '') { return String(value).replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); }
80
+ function freeze(value) { if (Array.isArray(value)) return Object.freeze(value.map(freeze)); if (!value || typeof value !== 'object' || Object.isFrozen(value)) return value; return Object.freeze(Object.fromEntries(Object.entries(value).map(([key, item]) => [key, freeze(item)]))); }
81
+
82
+ function normalizeRecords(input = {}) {
83
+ if (Array.isArray(input.records)) return input.records;
84
+ return (Array.isArray(input.files) ? input.files : []).filter((item) => typeof item?.content === 'string').map((item) => {
85
+ const record = { id: String(item.path || ''), path: String(item.path || ''), markdown: String(item.content || ''), sourceMode: item.sourceMode || '' };
86
+ try {
87
+ const parsed = parseArtifactMarkdown(record.markdown);
88
+ return Object.freeze({ ...record, title: parsed.title || '', parent: parsed.envelope?.parent || null });
89
+ } catch { return Object.freeze(record); }
90
+ });
91
+ }
@@ -0,0 +1,21 @@
1
+ export const HANDOFF_HUMAN_OUTPUT_PRESENTATION = Object.freeze({
2
+ copyableSurfaceRequired: true,
3
+ exactContentRequired: true,
4
+ fencedCodeBlockWhenSupported: 'required',
5
+ markdownCapableHostRendering: 'fenced-code-block',
6
+ equivalentCopyableSurfaceAllowed: true,
7
+ wrapperAuthority: 'none',
8
+ hostCapabilityRule: 'Use a fenced code block when the chat host supports fenced copyable blocks; otherwise use an equivalent copyable host surface without changing routing content.'
9
+ });
10
+
11
+ export const HANDOFF_NORMAL_EMISSION_BOUNDARY = Object.freeze({
12
+ allowed: Object.freeze(['primary', 'normalInlineRouting']),
13
+ canonicalFilePayloadCount: 1,
14
+ workspaceArtifactsAsLooseTransportFiles: false,
15
+ semanticWorkSummaryProse: false,
16
+ internalHumanOutputJson: false,
17
+ helperArtifacts: false,
18
+ manuallyReconstructedRouting: false,
19
+ duplicateNormalFileChoices: false,
20
+ exception: 'Only when the user explicitly asks for explanation or review evidence.'
21
+ });