@tiinex/app 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 (580) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +31 -0
  3. package/README.md +26 -0
  4. package/docs/CONSUMER-CONTRACT.md +65 -0
  5. package/package.json +94 -0
  6. package/src/acceptance/knownScenarios.case.mjs +48 -0
  7. package/src/acceptance/knownScenarios.js +89 -0
  8. package/src/acceptance/postV423CanonicalTransitionProductVerticalSlice.case.mjs +774 -0
  9. package/src/acceptance/postV437M0ETimePortalProductParityClosure.case.mjs +51 -0
  10. package/src/acceptance/postV447M0FGithubSocialPublicationProductIntegration.case.mjs +33 -0
  11. package/src/acceptance/postV450M0ProductAcceptanceHardening.case.mjs +82 -0
  12. package/src/acceptance/postV470SchemaReadingContractMaterializationIdentitySourceCoalescingAuthorityCorrection.case.mjs +236 -0
  13. package/src/acceptance/recoveryAcceptance.case.mjs +196 -0
  14. package/src/adapters/adapter.definition.schema.json +33 -0
  15. package/src/adapters/archive/archive.adapter.case.mjs +212 -0
  16. package/src/adapters/export/export.adapter.js +79 -0
  17. package/src/adapters/git-native/git-native.adapter.js +43 -0
  18. package/src/adapters/github/github.adapter.case.mjs +843 -0
  19. package/src/adapters/github/github.adapter.js +395 -0
  20. package/src/adapters/github/github.issueEmbedded.js +262 -0
  21. package/src/adapters/github/github.issueMirror.js +309 -0
  22. package/src/adapters/github/github.issueSnapshot.js +475 -0
  23. package/src/adapters/github/github.issueSurface.js +188 -0
  24. package/src/adapters/github/github.issueTransport.js +237 -0
  25. package/src/adapters/github/github.publicationRead.js +24 -0
  26. package/src/adapters/github/github.readTransport.js +18 -0
  27. package/src/adapters/github/github.repoDiscovery.js +222 -0
  28. package/src/adapters/github/github.repoMirror.js +255 -0
  29. package/src/adapters/github/github.repoProxy.js +276 -0
  30. package/src/adapters/github/github.repoSurface.js +60 -0
  31. package/src/adapters/github/github.transportDiagnostics.js +68 -0
  32. package/src/adapters/local/local.adapter.case.mjs +72 -0
  33. package/src/adapters/local/local.adapter.js +188 -0
  34. package/src/adapters/registry.js +35 -0
  35. package/src/adapters/static/static.adapter.js +84 -0
  36. package/src/app/App.js +1 -0
  37. package/src/app/TiinexApp.jsx +822 -0
  38. package/src/app/appShell.views.jsx +58 -0
  39. package/src/app/artifactAuthoringCapability.js +49 -0
  40. package/src/app/boot/bootApp.js +19 -0
  41. package/src/app/boot/environment.js +1 -0
  42. package/src/app/canonicalAuthoringValues.js +4 -0
  43. package/src/app/canonicalCreationProductController.js +57 -0
  44. package/src/app/canonicalCreationProductSettlement.case.mjs +10 -0
  45. package/src/app/canonicalCreationProductSettlement.js +11 -0
  46. package/src/app/canonicalReferenceLocalCreateCommand.js +210 -0
  47. package/src/app/canonicalReferenceTargets.js +73 -0
  48. package/src/app/canonicalTransitionLocalCreateCommand.js +217 -0
  49. package/src/app/defaultWorkspaceStart.case.mjs +39 -0
  50. package/src/app/defaultWorkspaceStart.js +65 -0
  51. package/src/app/defaultWorkspaceStartCommand.js +55 -0
  52. package/src/app/durableLocalMutationPolicy.js +21 -0
  53. package/src/app/githubMaterializationSummary.js +69 -0
  54. package/src/app/githubProgress.js +25 -0
  55. package/src/app/githubSourceInput.js +47 -0
  56. package/src/app/githubSourceMaterializationCommand.js +97 -0
  57. package/src/app/githubSourceOperation.js +226 -0
  58. package/src/app/governanceDialogData.js +27 -0
  59. package/src/app/handoffPackageImportCommand.js +182 -0
  60. package/src/app/historyAuthority.js +53 -0
  61. package/src/app/initialWorkspaceBootstrapOperation.js +105 -0
  62. package/src/app/lineageCommand.js +118 -0
  63. package/src/app/lineageSourceRecovery.js +339 -0
  64. package/src/app/localDraftMutationCommand.js +174 -0
  65. package/src/app/localMaterialCommand.js +124 -0
  66. package/src/app/nodeGraphVerse.case.mjs +111 -0
  67. package/src/app/persistenceOwnership.js +92 -0
  68. package/src/app/productStateBoundary.js +7 -0
  69. package/src/app/providers/AppProviders.js +1 -0
  70. package/src/app/providers/LocaleProvider.js +1 -0
  71. package/src/app/providers/SchemaRegistryProvider.js +1 -0
  72. package/src/app/providers/WorkspaceProvider.js +1 -0
  73. package/src/app/publicTarget.js +251 -0
  74. package/src/app/publicTargetRestoreCommand.js +149 -0
  75. package/src/app/recordUi.cache.js +35 -0
  76. package/src/app/recordUi.js +11 -0
  77. package/src/app/routes/RouteSurface.js +1 -0
  78. package/src/app/routes/routes.js +1 -0
  79. package/src/app/runtimeState.js +54 -0
  80. package/src/app/schemaCurrentDeclaration.js +69 -0
  81. package/src/app/schemaFactoryLocalCreateCommand.js +101 -0
  82. package/src/app/schemaFactoryViewerProof.case.mjs +134 -0
  83. package/src/app/schemaFactoryViewerProof.js +20 -0
  84. package/src/app/schemaNavigationCommand.js +285 -0
  85. package/src/app/schemaNavigationMaterialization.js +171 -0
  86. package/src/app/schemaNavigationRuntimeCatalog.js +25 -0
  87. package/src/app/schemaNavigationState.js +66 -0
  88. package/src/app/schemaReadingContractQualification.js +91 -0
  89. package/src/app/schemaSourceRecovery.js +373 -0
  90. package/src/app/scrollPersistence.js +30 -0
  91. package/src/app/semanticOperationHistory.js +18 -0
  92. package/src/app/shareActionCommand.js +55 -0
  93. package/src/app/shareProjection.js +190 -0
  94. package/src/app/shell/AppShell.js +1 -0
  95. package/src/app/shell/Header.js +1 -0
  96. package/src/app/shell/Navigation.js +1 -0
  97. package/src/app/shell/SurfaceSwitcher.js +1 -0
  98. package/src/app/sourceTransportRefresh.js +176 -0
  99. package/src/app/startupOwnership.js +40 -0
  100. package/src/app/startupPresentation.case.mjs +34 -0
  101. package/src/app/startupPresentation.js +33 -0
  102. package/src/app/startupPresentation.views.jsx +21 -0
  103. package/src/app/startupRenderPhase.js +9 -0
  104. package/src/app/startupWorkspaceCommand.js +62 -0
  105. package/src/app/startupWorkspaceConfigApplication.js +49 -0
  106. package/src/app/statePersistenceScheduler.js +106 -0
  107. package/src/app/tiinexAppConfigPlan.js +108 -0
  108. package/src/app/tiinexAppConfigSource.js +349 -0
  109. package/src/app/tiinexAppStartupSource.js +79 -0
  110. package/src/app/tiinexHostedWorkspaceConventions.js +572 -0
  111. package/src/app/timePortalHistoricalRead.js +114 -0
  112. package/src/app/timePortalSnapshotResolution.js +53 -0
  113. package/src/app/urlMaterialCommand.js +24 -0
  114. package/src/app/useCanonicalPlacementSelectionOptions.js +9 -0
  115. package/src/app/useCanonicalReferenceSelectionOptions.js +8 -0
  116. package/src/app/useLocalMaterialIntake.js +68 -0
  117. package/src/app/useTimePortalProductController.jsx +111 -0
  118. package/src/app/useWorkspaceEntrypointIntake.js +77 -0
  119. package/src/app/useWorkspaceSelectionProductController.jsx +21 -0
  120. package/src/app/viewState.js +35 -0
  121. package/src/app/viewport.js +21 -0
  122. package/src/app/visualDormancy.js +286 -0
  123. package/src/app/workspaceContinuityNotices.js +32 -0
  124. package/src/app/workspaceDisplayCounts.js +9 -0
  125. package/src/app/workspaceEntrypointIntakeCommand.js +87 -0
  126. package/src/app/workspaceEntrypointProductRouting.case.mjs +20 -0
  127. package/src/app/workspaceExportCommand.js +21 -0
  128. package/src/app/workspaceExportDownload.js +23 -0
  129. package/src/app/workspaceExportExecutionCommand.js +10 -0
  130. package/src/app/workspaceGithubPublication.js +237 -0
  131. package/src/app/workspaceHandoffExport.js +56 -0
  132. package/src/app/workspaceHomeTarget.js +9 -0
  133. package/src/app/workspaceMulticolumn.js +113 -0
  134. package/src/app/workspaceNavigationParity.case.mjs +110 -0
  135. package/src/app/workspaceOpenProgress.js +26 -0
  136. package/src/app/workspacePlacementOptions.js +46 -0
  137. package/src/app/workspaceRecordActions.js +158 -0
  138. package/src/app/workspaceScopedInteraction.js +68 -0
  139. package/src/app/workspaceSelectionOriginContext.js +29 -0
  140. package/src/app/workspaceSelectionSession.js +54 -0
  141. package/src/app/workspaceSourceCloseCommand.js +25 -0
  142. package/src/app/workspaceSpineProductRouting.case.mjs +22 -0
  143. package/src/app/workspaceStartupTransition.js +32 -0
  144. package/src/app/workspaceWindow.js +85 -0
  145. package/src/artifacts/artifact.fixture.js +1 -0
  146. package/src/artifacts/artifact.identity.js +6 -0
  147. package/src/artifacts/artifact.identityAggregation.js +218 -0
  148. package/src/artifacts/artifact.model.js +2 -0
  149. package/src/artifacts/artifact.parse.case.mjs +196 -0
  150. package/src/artifacts/artifact.participantIndex.js +189 -0
  151. package/src/artifacts/fixtures/evidence.trace.md +50 -0
  152. package/src/artifacts/fixtures/topic.trace.md +33 -0
  153. package/src/artifacts/fixtures/unknown-schema.trace.md +25 -0
  154. package/src/audit/audit.findings.js +1 -0
  155. package/src/audit/audit.model.js +2 -0
  156. package/src/audit/audit.plan.js +13 -0
  157. package/src/audit/audit.report.js +12 -0
  158. package/src/audit/audit.severity.js +1 -0
  159. package/src/audit/audit.traverse.js +119 -0
  160. package/src/audit/integrity/auditIntegrity.checks.js +1 -0
  161. package/src/audit/integrity/auditIntegrity.compare.js +1 -0
  162. package/src/audit/lineage/auditLineage.load.js +1 -0
  163. package/src/audit/lineage/auditLineage.plan.js +1 -0
  164. package/src/audit/lineage/auditLineage.resolve.js +12 -0
  165. package/src/audit/sources/auditSources.boundaries.js +1 -0
  166. package/src/audit/sources/auditSources.checks.js +1 -0
  167. package/src/audit/validation/auditValidation.recheck.js +1 -0
  168. package/src/audit/validation/auditValidation.run.js +1 -0
  169. package/src/build.identity.js +15 -0
  170. package/src/commands/command.vocabulary.js +14 -0
  171. package/src/conformance/conformance.fixtures.js +151 -0
  172. package/src/conformance/conformance.run.js +238 -0
  173. package/src/data/applicationDataStore.js +23 -0
  174. package/src/data/companionAccess.js +35 -0
  175. package/src/diagnostics/events.js +1 -0
  176. package/src/diagnostics/invariant.js +1 -0
  177. package/src/diagnostics/schemaBindingChecks.js +1 -0
  178. package/src/diagnostics/schemaModuleChecks.js +1 -0
  179. package/src/diagnostics/sourceBoundaryChecks.js +5 -0
  180. package/src/diagnostics/sourceTransport.report.js +190 -0
  181. package/src/discovery/discovery.controls.js +7 -0
  182. package/src/export/export.plan.js +182 -0
  183. package/src/export/handoff.plan.js +50 -0
  184. package/src/export/package.builder.case.mjs +97 -0
  185. package/src/export/package.controlTopology.case.mjs +130 -0
  186. package/src/export/package.zip.case.mjs +33 -0
  187. package/src/graph/artifactGraph.model.js +344 -0
  188. package/src/graph/artifactGraph.project.js +139 -0
  189. package/src/graph/artifactGraph.worker.js +10 -0
  190. package/src/i18n/i18n.keys.js +1 -0
  191. package/src/i18n/i18n.provider.js +1 -0
  192. package/src/i18n/i18n.resolve.js +5 -0
  193. package/src/i18n/locales/en/common.json +4 -0
  194. package/src/i18n/locales/en/schemas/evidence.json +3 -0
  195. package/src/i18n/locales/en/schemas/presentation-surface.json +3 -0
  196. package/src/i18n/locales/en/schemas/preservation.json +3 -0
  197. package/src/i18n/locales/en/schemas/root.json +3 -0
  198. package/src/i18n/locales/en/schemas/schema-module.json +3 -0
  199. package/src/i18n/locales/en/schemas/topic.json +3 -0
  200. package/src/i18n/locales/en/surfaces/audit.json +3 -0
  201. package/src/i18n/locales/en/surfaces/create.json +3 -0
  202. package/src/i18n/locales/en/surfaces/detail.json +3 -0
  203. package/src/i18n/locales/en/surfaces/display-options.json +3 -0
  204. package/src/i18n/locales/en/surfaces/edit.json +3 -0
  205. package/src/i18n/locales/en/surfaces/feed.json +3 -0
  206. package/src/i18n/locales/en/surfaces/lineage.json +3 -0
  207. package/src/i18n/locales/en/surfaces/preview.json +3 -0
  208. package/src/i18n/locales/en/surfaces/share.json +3 -0
  209. package/src/i18n/locales/en/surfaces/source-settings.json +3 -0
  210. package/src/i18n/locales/en/surfaces/tree.json +3 -0
  211. package/src/i18n/locales/sv/common.json +4 -0
  212. package/src/i18n/locales/sv/schemas/evidence.json +3 -0
  213. package/src/i18n/locales/sv/schemas/presentation-surface.json +3 -0
  214. package/src/i18n/locales/sv/schemas/preservation.json +3 -0
  215. package/src/i18n/locales/sv/schemas/root.json +3 -0
  216. package/src/i18n/locales/sv/schemas/schema-module.json +3 -0
  217. package/src/i18n/locales/sv/schemas/topic.json +3 -0
  218. package/src/i18n/locales/sv/surfaces/audit.json +3 -0
  219. package/src/i18n/locales/sv/surfaces/create.json +3 -0
  220. package/src/i18n/locales/sv/surfaces/detail.json +3 -0
  221. package/src/i18n/locales/sv/surfaces/display-options.json +3 -0
  222. package/src/i18n/locales/sv/surfaces/edit.json +3 -0
  223. package/src/i18n/locales/sv/surfaces/feed.json +3 -0
  224. package/src/i18n/locales/sv/surfaces/lineage.json +3 -0
  225. package/src/i18n/locales/sv/surfaces/preview.json +3 -0
  226. package/src/i18n/locales/sv/surfaces/share.json +3 -0
  227. package/src/i18n/locales/sv/surfaces/source-settings.json +3 -0
  228. package/src/i18n/locales/sv/surfaces/tree.json +3 -0
  229. package/src/index.js +10 -0
  230. package/src/integrity/integrity.testFixture.js +9 -0
  231. package/src/interaction/interaction.spine.js +12 -0
  232. package/src/lineage/lineage.audit.js +1 -0
  233. package/src/lineage/lineage.edges.js +1 -0
  234. package/src/main.js +319 -0
  235. package/src/main.jsx +34 -0
  236. package/src/multiverse/multiverse.model.js +10 -0
  237. package/src/parity/poc.m1ParityScenarios.js +42 -0
  238. package/src/parity/poc.parityLedger.js +261 -0
  239. package/src/publication/publication.githubSocialContract.case.mjs +247 -0
  240. package/src/publication/publication.preflight.case.mjs +64 -0
  241. package/src/react/TiinexApplication.jsx +39 -0
  242. package/src/react/VerseHost.jsx +29 -0
  243. package/src/react/applicationDataContext.jsx +30 -0
  244. package/src/react.js +2 -0
  245. package/src/readers/modes/audit.reader.js +1 -0
  246. package/src/readers/modes/detail.reader.js +1 -0
  247. package/src/readers/modes/handover.reader.js +1 -0
  248. package/src/readers/modes/mobile.reader.js +1 -0
  249. package/src/readers/modes/print.reader.js +1 -0
  250. package/src/readers/modes/scan.reader.js +1 -0
  251. package/src/readers/reader.model.js +1 -0
  252. package/src/readers/reader.resolve.js +2 -0
  253. package/src/reingest/reingest.plan.case.mjs +65 -0
  254. package/src/runtime.js +54 -0
  255. package/src/schemas/README.md +99 -0
  256. package/src/schemas/coordination/handoff/tiinex.handoff.v1.schema.md +614 -0
  257. package/src/schemas/coordination/project/tiinex.project.v1.schema.md +311 -0
  258. package/src/schemas/core/decision/tiinex.decision.v1.schema.md +227 -0
  259. package/src/schemas/core/evidence/tiinex.evidence.v1.schema.md +318 -0
  260. package/src/schemas/core/feedback/tiinex.feedback.v1.schema.md +243 -0
  261. package/src/schemas/core/interpretation/.transitions/evidence-to-interpretation-transition-definition.trace.md +102 -0
  262. package/src/schemas/core/interpretation/tiinex.interpretation.v1.schema.md +308 -0
  263. package/src/schemas/core/preservation/tiinex.preservation.v1.schema.md +312 -0
  264. package/src/schemas/core/relation/.generation/reference-relation-generation-authority.trace.md +185 -0
  265. package/src/schemas/core/relation/.transitions/topic-references-task-transition-definition.trace.md +119 -0
  266. package/src/schemas/core/relation/tiinex.relation.v1.schema.md +240 -0
  267. package/src/schemas/core/relation/workspace/representation/tiinex.workspace.representation.v1.schema.md +550 -0
  268. package/src/schemas/core/signal/tiinex.signal.v1.schema.md +239 -0
  269. package/src/schemas/core/task/.transitions/create-task-transition-definition.trace.md +93 -0
  270. package/src/schemas/core/task/.transitions/topic-to-task-transition-definition.trace.md +102 -0
  271. package/src/schemas/core/task/task-semantic-package.trace.md +53 -0
  272. package/src/schemas/core/task/tiinex.task.v1-transitions.trace.md +33 -0
  273. package/src/schemas/core/task/tiinex.task.v1.authoring.js +65 -0
  274. package/src/schemas/core/task/tiinex.task.v1.schema.md +229 -0
  275. package/src/schemas/core/topic/.transitions/create-topic-transition-definition.trace.md +93 -0
  276. package/src/schemas/core/topic/tiinex.topic.v1-transitions.trace.md +33 -0
  277. package/src/schemas/core/topic/tiinex.topic.v1.schema.md +197 -0
  278. package/src/schemas/core/topic/topic-semantic-package.trace.md +53 -0
  279. package/src/schemas/discovery/finding/tiinex.discovery.finding.v1.schema.md +240 -0
  280. package/src/schemas/discovery/tiinex.discovery.v1.schema.md +294 -0
  281. package/src/schemas/manifest.json +367 -0
  282. package/src/schemas/origins.js +46 -0
  283. package/src/schemas/party/organization/tiinex.party.organization.v1.schema.md +290 -0
  284. package/src/schemas/party/role/tiinex.party.role.v1.schema.md +298 -0
  285. package/src/schemas/party/tiinex.party.v1.schema.js +14 -0
  286. package/src/schemas/party/tiinex.party.v1.schema.json +23 -0
  287. package/src/schemas/party/tiinex.party.v1.schema.md +311 -0
  288. package/src/schemas/party/tiinex.party.v1.schema.runtime.json +2033 -0
  289. package/src/schemas/party/tiinex.party.v1.schema.source.js +9 -0
  290. package/src/schemas/presentation/surface/tiinex.presentation.surface.v1.schema.md +476 -0
  291. package/src/schemas/reduction/tiinex.reduction.v1.schema.md +248 -0
  292. package/src/schemas/schema/module/tiinex.schema.module.v1.schema.md +465 -0
  293. package/src/schemas/schema.companionContract.case.mjs +259 -0
  294. package/src/schemas/schema.factory.case.mjs +256 -0
  295. package/src/schemas/schema.factory.viewerProjection.js +183 -0
  296. package/src/schemas/schemaMarkdownCatalog.js +19 -0
  297. package/src/schemas/tiinex.root.v1.schema.md +865 -0
  298. package/src/schemas/validation/finding/tiinex.validation.finding.v1.schema.md +309 -0
  299. package/src/schemas/validation/method/tiinex.validation.method.v1.schema.md +280 -0
  300. package/src/schemas/validation/report/tiinex.validation.report.v1.schema.md +300 -0
  301. package/src/schemas/workspace/tiinex.workspace.v1.schema.md +486 -0
  302. package/src/schemas/workspace/workspace.add.views.jsx +327 -0
  303. package/src/schemas/workspace/workspace.audit.views.jsx +160 -0
  304. package/src/schemas/workspace/workspace.auditBadge.views.jsx +98 -0
  305. package/src/schemas/workspace/workspace.canonicalReferenceDialog.views.jsx +63 -0
  306. package/src/schemas/workspace/workspace.canonicalTaskDialog.views.jsx +169 -0
  307. package/src/schemas/workspace/workspace.cardActions.js +9 -0
  308. package/src/schemas/workspace/workspace.cards.views.jsx +146 -0
  309. package/src/schemas/workspace/workspace.chrome.views.jsx +299 -0
  310. package/src/schemas/workspace/workspace.continuationDialog.views.jsx +80 -0
  311. package/src/schemas/workspace/workspace.discovery.views.jsx +63 -0
  312. package/src/schemas/workspace/workspace.discoveryRenderWindow.js +56 -0
  313. package/src/schemas/workspace/workspace.displayOptions.views.jsx +114 -0
  314. package/src/schemas/workspace/workspace.entrypointChoice.views.jsx +30 -0
  315. package/src/schemas/workspace/workspace.exportDialog.controller.jsx +40 -0
  316. package/src/schemas/workspace/workspace.exportDialog.views.jsx +142 -0
  317. package/src/schemas/workspace/workspace.governance.views.jsx +45 -0
  318. package/src/schemas/workspace/workspace.graph.views.jsx +134 -0
  319. package/src/schemas/workspace/workspace.lineage.views.jsx +307 -0
  320. package/src/schemas/workspace/workspace.read.views.jsx +105 -0
  321. package/src/schemas/workspace/workspace.recordActionButton.views.jsx +35 -0
  322. package/src/schemas/workspace/workspace.recordDialogs.views.jsx +257 -0
  323. package/src/schemas/workspace/workspace.selection.views.jsx +14 -0
  324. package/src/schemas/workspace/workspace.sourceReceipt.views.jsx +40 -0
  325. package/src/schemas/workspace/workspace.timePortal.views.jsx +56 -0
  326. package/src/schemas/workspace/workspace.tree.views.jsx +107 -0
  327. package/src/schemas/workspace/workspace.viewFormatting.js +172 -0
  328. package/src/schemas/workspace/workspace.views.jsx +210 -0
  329. package/src/source-settings/sourceSettings.model.js +7 -0
  330. package/src/sources/draft/draft.source.js +1 -0
  331. package/src/sources/github/github.loader.js +204 -0
  332. package/src/sources/github/github.permalink.js +1 -0
  333. package/src/sources/github/github.source.js +1 -0
  334. package/src/sources/github/github.transport.case.mjs +237 -0
  335. package/src/sources/github/github.transport.js +472 -0
  336. package/src/sources/local/local.source.js +1 -0
  337. package/src/sources/source.assetReferences.js +109 -0
  338. package/src/sources/source.boundaries.js +24 -0
  339. package/src/sources/source.identity.js +56 -0
  340. package/src/sources/source.model.case.mjs +26 -0
  341. package/src/sources/source.model.js +56 -0
  342. package/src/sources/source.presenter.js +66 -0
  343. package/src/sources/source.resolve.js +11 -0
  344. package/src/sources/static/static.source.js +1 -0
  345. package/src/sources/transport.policy.case.mjs +39 -0
  346. package/src/sources/transport.policy.js +81 -0
  347. package/src/storage/storage.policy.js +79 -0
  348. package/src/styles/app.css +8699 -0
  349. package/src/styles/responsive.css +10 -0
  350. package/src/styles/theme.css +4 -0
  351. package/src/styles/tokens.css +30 -0
  352. package/src/surfaces/audit/AuditSurface.js +1 -0
  353. package/src/surfaces/audit/audit.model.js +1 -0
  354. package/src/surfaces/audit/audit.render.js +1 -0
  355. package/src/surfaces/contracts.js +45 -0
  356. package/src/surfaces/create/CreateSurface.js +1 -0
  357. package/src/surfaces/create/create.model.js +1 -0
  358. package/src/surfaces/create/create.render.js +1 -0
  359. package/src/surfaces/detail/DetailSurface.js +1 -0
  360. package/src/surfaces/detail/detail.model.js +1 -0
  361. package/src/surfaces/detail/detail.render.js +1 -0
  362. package/src/surfaces/display-options/DisplayOptionsSurface.js +1 -0
  363. package/src/surfaces/display-options/displayOptions.model.js +1 -0
  364. package/src/surfaces/display-options/displayOptions.render.js +1 -0
  365. package/src/surfaces/edit/EditSurface.js +1 -0
  366. package/src/surfaces/edit/edit.model.js +1 -0
  367. package/src/surfaces/edit/edit.render.js +1 -0
  368. package/src/surfaces/feed/FeedSurface.js +1 -0
  369. package/src/surfaces/feed/feed.model.js +1 -0
  370. package/src/surfaces/feed/feed.render.js +1 -0
  371. package/src/surfaces/lineage/LineageSurface.js +1 -0
  372. package/src/surfaces/lineage/lineage.model.js +1 -0
  373. package/src/surfaces/lineage/lineage.render.js +1 -0
  374. package/src/surfaces/preview/PreviewSurface.js +1 -0
  375. package/src/surfaces/preview/preview.model.js +1 -0
  376. package/src/surfaces/preview/preview.render.js +1 -0
  377. package/src/surfaces/registry.js +58 -0
  378. package/src/surfaces/share/ShareSurface.js +1 -0
  379. package/src/surfaces/share/share.model.js +1 -0
  380. package/src/surfaces/share/share.render.js +1 -0
  381. package/src/surfaces/source-settings/SourceSettingsSurface.js +1 -0
  382. package/src/surfaces/source-settings/sourceSettings.model.js +1 -0
  383. package/src/surfaces/source-settings/sourceSettings.render.js +1 -0
  384. package/src/surfaces/surfaceContext.js +1 -0
  385. package/src/surfaces/tree/TreeSurface.js +1 -0
  386. package/src/surfaces/tree/tree.model.js +1 -0
  387. package/src/surfaces/tree/tree.render.js +1 -0
  388. package/src/tooling/portable/adapters/cli/cli.common-output.case.mjs +153 -0
  389. package/src/tooling/portable/adapters/cli/cli.handoff-sibling-allocation.case.mjs +52 -0
  390. package/src/tooling/portable/adapters/cli/cli.run.case.mjs +372 -0
  391. package/src/tooling/portable/adapters/cli/cli.summaryProjection.case.mjs +46 -0
  392. package/src/tooling/portable/audit/audit.capability.case.mjs +45 -0
  393. package/src/tooling/portable/fixtures/legacy-artifacts/collaboration/dogfood/001-tiinex-development-dogfood-collaboration-model.trace.fixture.txt +37 -0
  394. package/src/tooling/portable/fixtures/legacy-artifacts/handoff/tooling/001-v480-tooling-workflow-schema-enablement-handoff.trace.fixture.txt +108 -0
  395. package/src/tooling/portable/fixtures/legacy-artifacts/handoff/tooling/002-v481-tooling-recipient-relative-handoff-material-closure-planner-foundation-handoff.trace.fixture.txt +130 -0
  396. package/src/tooling/portable/fixtures/legacy-artifacts/loom/role/001-loom-role.trace.fixture.txt +61 -0
  397. package/src/tooling/portable/fixtures/legacy-artifacts/sigma/role/001-1-sigma-role.trace.fixture.txt +61 -0
  398. package/src/tooling/portable/fixtures/legacy-artifacts/tooling/dogfood/001-1-1-1-1-1-1-1-site-tooling-v474-loaded-parent-identity-evidence-closure-result.trace.fixture.txt +48 -0
  399. package/src/tooling/portable/fixtures/legacy-artifacts/tooling/dogfood/001-1-1-1-1-1-1-site-tooling-v474-loaded-parent-identity-evidence-closure.trace.fixture.txt +48 -0
  400. package/src/tooling/portable/fixtures/legacy-artifacts/tooling/dogfood/001-1-1-1-1-1-site-tooling-v473-portable-parent-authority-coherence-metadata-fidelity-closure-result.trace.fixture.txt +48 -0
  401. package/src/tooling/portable/fixtures/legacy-artifacts/tooling/dogfood/001-1-1-1-1-site-tooling-v473-portable-parent-authority-coherence-metadata-fidelity-closure.trace.fixture.txt +48 -0
  402. package/src/tooling/portable/fixtures/legacy-artifacts/tooling/dogfood/001-1-1-1-site-tooling-v472-portable-exact-authoring-fidelity-closure-result.trace.fixture.txt +48 -0
  403. package/src/tooling/portable/fixtures/legacy-artifacts/tooling/dogfood/001-1-1-site-tooling-v472-portable-exact-authoring-fidelity-closure.trace.fixture.txt +48 -0
  404. package/src/tooling/portable/fixtures/legacy-artifacts/tooling/dogfood/001-1-site-tooling-v471-portable-lineage-authoring-closure-result.trace.fixture.txt +48 -0
  405. package/src/tooling/portable/fixtures/legacy-artifacts/tooling/dogfood/001-site-tooling-v471-portable-lineage-authoring-closure.trace.fixture.txt +39 -0
  406. package/src/tooling/portable/fixtures/legacy-artifacts/tooling/dogfood/002-1-v475-canonical-artifact-envelope-reference-integrity-validation.trace.fixture.txt +43 -0
  407. package/src/tooling/portable/fixtures/legacy-artifacts/tooling/dogfood/003-1-v476-canonical-authority-binding-integrity-method-lineage-alloca.trace.fixture.txt +42 -0
  408. package/src/tooling/portable/fixtures/legacy-artifacts/tooling/dogfood/027-handoff-package-workspace-archive-and-control-plane-minimality-audit.trace.fixture.txt +56 -0
  409. package/src/tooling/portable/fixtures/legacyArtifactFixtures.mjs +34 -0
  410. package/src/tooling/portable/grounding/grounding.capsule.case.mjs +65 -0
  411. package/src/tooling/portable/grounding/grounding.readiness.case.mjs +543 -0
  412. package/src/tooling/portable/grounding/grounding.semanticIntegration.case.mjs +131 -0
  413. package/src/tooling/portable/handoff/boundedWorkspaceRepresentation.case.mjs +103 -0
  414. package/src/tooling/portable/handoff/carrierLineage.fixedWidth.case.mjs +97 -0
  415. package/src/tooling/portable/handoff/coldStartQualification.case.mjs +293 -0
  416. package/src/tooling/portable/handoff/fixtures/027-invalid-audit-result.fixture.txt +192 -0
  417. package/src/tooling/portable/handoff/fixtures/027-invalid-return-handoff.fixture.txt +92 -0
  418. package/src/tooling/portable/handoff/fixtures/cold-start-qualification.v1.examples.json +60 -0
  419. package/src/tooling/portable/handoff/handoff.manufacture.case.mjs +293 -0
  420. package/src/tooling/portable/handoff/materialClosure.case.mjs +727 -0
  421. package/src/tooling/portable/handoff/multiRootManufacture.case.mjs +615 -0
  422. package/src/tooling/portable/handoff/operatorBridgeCore.case.mjs +205 -0
  423. package/src/tooling/portable/handoff/workspaceLandingPlan.case.mjs +143 -0
  424. package/src/tooling/portable/input/node.input.case.mjs +293 -0
  425. package/src/tooling/portable/lifecycle/lifecycle.readiness.case.mjs +179 -0
  426. package/src/tooling/portable/lineage/fixtures/lineage.integrity.repair-projection.v1.examples.json +605 -0
  427. package/src/tooling/portable/lineage/lineage.integrity.shared-capability.case.mjs +37 -0
  428. package/src/tooling/portable/lineage/publicationProviderReceipt.fixture.mjs +50 -0
  429. package/src/tooling/portable/package/fixtures/reference-relation-generation-authority.trace.md +84 -0
  430. package/src/tooling/portable/package/fixtures/tiinex.root.v1.package-authority.contract-fixture.md +64 -0
  431. package/src/tooling/portable/package/fixtures/tiinex.schema.generation.v1.generation-binding.contract-fixture.md +140 -0
  432. package/src/tooling/portable/package/fixtures/tiinex.schema.transition.companion.v1.contract-fixture.md +73 -0
  433. package/src/tooling/portable/package/fixtures/tiinex.semantic.package.v1.contract-fixture.md +147 -0
  434. package/src/tooling/portable/package/fixtures/tiinex.transition.definition.v1.package-contract-fixture.md +77 -0
  435. package/src/tooling/portable/providers/schema.providers.genericity.case.mjs +31 -0
  436. package/src/tooling/portable/reduction/reduction.preflight.case.mjs +298 -0
  437. package/src/tooling/portable/schema/fixtures/evidence-preservation-body.inheritance-record-fixture.md +65 -0
  438. package/src/tooling/portable/schema/fixtures/tiinex.portal.time.v1.contract-fixture.md +294 -0
  439. package/src/tooling/portable/schema/fixtures/tiinex.root.v1.contract-fixture.md +584 -0
  440. package/src/tooling/portable/schema/fixtures/tiinex.root.v1.machine-shape.contract-fixture.md +44 -0
  441. package/src/tooling/portable/schema/fixtures/tiinex.root.v1.ordinary-target.contract-fixture.md +630 -0
  442. package/src/tooling/portable/schema/fixtures/tiinex.schema.contract.v1.repeated-record.contract-fixture.md +69 -0
  443. package/src/tooling/portable/schema/fixtures/tiinex.schema.generation.v1.repeated-record.contract-fixture.md +98 -0
  444. package/src/tooling/portable/schema/fixtures/tiinex.schema.inheritance.v1.repeated-record.contract-fixture.md +58 -0
  445. package/src/tooling/portable/schema/fixtures/tiinex.task.v1.contract-fixture.md +165 -0
  446. package/src/tooling/portable/schema/fixtures/tiinex.transition.definition.v1.contract-fixture.md +744 -0
  447. package/src/tooling/portable/schema/fixtures/tiinex.transition.definition.v1.field-domain.contract-fixture.md +319 -0
  448. package/src/transitions/canonical-schema-cache/053d46ce082d4ec261b82abc44ecca403d61e240/tiinex.relation.v1.schema.md +240 -0
  449. package/src/transitions/canonical-schema-cache/053d46ce082d4ec261b82abc44ecca403d61e240/tiinex.schema.contract.v1.schema.md +391 -0
  450. package/src/transitions/canonical-schema-cache/053d46ce082d4ec261b82abc44ecca403d61e240/tiinex.schema.generation.v1.schema.md +379 -0
  451. package/src/transitions/canonical-schema-cache/053d46ce082d4ec261b82abc44ecca403d61e240/tiinex.schema.transition.companion.v1.schema.md +265 -0
  452. package/src/transitions/canonical-schema-cache/053d46ce082d4ec261b82abc44ecca403d61e240/tiinex.semantic.package.v1.schema.md +402 -0
  453. package/src/transitions/canonical-schema-cache/52ecdea0a75893882ce282214d155f70e1309c2a/tiinex.topic.v1.schema.md +197 -0
  454. package/src/transitions/canonical-schema-cache/d69b8ff55a56b8cb9282b8684db6a938a4435b94/tiinex.root.v1.schema.md +797 -0
  455. package/src/transitions/canonical-schema-cache/d69b8ff55a56b8cb9282b8684db6a938a4435b94/tiinex.transition.definition.v1.schema.md +1062 -0
  456. package/src/transitions/canonicalTransition.packageContracts.js +22 -0
  457. package/src/transitions/canonicalTransition.productDefaults.js +105 -0
  458. package/src/transitions/canonicalTransition.schemaCache.case.mjs +45 -0
  459. package/src/transitions/canonicalTransition.schemaCache.js +81 -0
  460. package/src/transitions/canonicalTransition.semanticPackage.js +146 -0
  461. package/src/transitions/record.transitions.case.mjs +88 -0
  462. package/src/transitions/transition.authorityRepresentation.js +55 -0
  463. package/src/transitions/transition.availabilityPlanner.js +376 -0
  464. package/src/transitions/transition.availabilitySemantics.js +150 -0
  465. package/src/transitions/transition.definitionReadProjection.js +107 -0
  466. package/src/transitions/transition.definitionRegistry.js +355 -0
  467. package/src/transitions/transition.definitionRegistryAggregation.js +21 -0
  468. package/src/transitions/transition.definitions.js +46 -0
  469. package/src/transitions/transition.explicitGenerationPlanner.js +58 -0
  470. package/src/transitions/transition.generationInputPlanner.js +19 -0
  471. package/src/transitions/transition.interpretationMaterializer.js +2 -0
  472. package/src/transitions/transition.invocationBindingPacket.js +52 -0
  473. package/src/transitions/transition.invocationBindingPlanner.js +467 -0
  474. package/src/transitions/transition.legacyShorthand.js +133 -0
  475. package/src/transitions/transition.localArtifactMaterializers.js +16 -0
  476. package/src/transitions/transition.localCreateCapability.js +111 -0
  477. package/src/transitions/transition.outputMaterializationPlanner.js +336 -0
  478. package/src/transitions/transition.parentReference.js +90 -0
  479. package/src/transitions/transition.presentation.js +43 -0
  480. package/src/transitions/transition.productPreparation.js +377 -0
  481. package/src/transitions/transition.productPresentation.browser.js +28 -0
  482. package/src/transitions/transition.productPresentation.js +55 -0
  483. package/src/transitions/transition.referenceCreateCapability.js +119 -0
  484. package/src/transitions/transition.referenceTarget.js +50 -0
  485. package/src/transitions/transition.relationMaterializer.js +2 -0
  486. package/src/transitions/transition.resultSemantics.js +453 -0
  487. package/src/transitions/transition.taskMaterializer.js +2 -0
  488. package/src/transitions/transition.topicMaterializer.js +2 -0
  489. package/src/transitions/transition.validate.case.mjs +58 -0
  490. package/src/ui/cards/ArtifactCard.js +1 -0
  491. package/src/ui/cards/SchemaCard.js +1 -0
  492. package/src/ui/cards/SourceCard.js +1 -0
  493. package/src/ui/dialog.presenter.js +24 -0
  494. package/src/ui/feedback/DegradedNotice.js +1 -0
  495. package/src/ui/feedback/EmptyState.js +1 -0
  496. package/src/ui/feedback/ValidationNotice.js +1 -0
  497. package/src/ui/forms/FormRenderer.js +1 -0
  498. package/src/ui/forms/fields/MarkdownField.js +1 -0
  499. package/src/ui/forms/fields/SelectField.js +1 -0
  500. package/src/ui/forms/fields/SourcePickerField.js +1 -0
  501. package/src/ui/forms/fields/TextField.js +1 -0
  502. package/src/ui/icon.paths.js +37 -0
  503. package/src/ui/layout/Panel.js +1 -0
  504. package/src/ui/layout/ResponsiveFrame.js +1 -0
  505. package/src/ui/layout/SplitView.js +1 -0
  506. package/src/ui/layout/Stack.js +1 -0
  507. package/src/ui/panels/DetailPanel.js +1 -0
  508. package/src/ui/panels/LineagePanel.js +1 -0
  509. package/src/ui/panels/SourcePanel.js +1 -0
  510. package/src/ui/primitives/Badge.js +1 -0
  511. package/src/ui/primitives/Badge.jsx +5 -0
  512. package/src/ui/primitives/Button.js +1 -0
  513. package/src/ui/primitives/Button.jsx +12 -0
  514. package/src/ui/primitives/Card.js +1 -0
  515. package/src/ui/primitives/Field.js +1 -0
  516. package/src/ui/primitives/Field.jsx +21 -0
  517. package/src/ui/primitives/Icon.jsx +90 -0
  518. package/src/ui/primitives/Modal.jsx +27 -0
  519. package/src/validation/i18n.js +37 -0
  520. package/src/validation/validateArtifact.case.mjs +41 -0
  521. package/src/verses/column/ColumnVerse.js +1 -0
  522. package/src/verses/column/column.model.js +6 -0
  523. package/src/verses/column/column.project.js +7 -0
  524. package/src/verses/context.js +26 -0
  525. package/src/verses/contracts.js +1 -0
  526. package/src/verses/hostRegistry.js +47 -0
  527. package/src/verses/registry.js +22 -0
  528. package/src/verses/universe.model.js +8 -0
  529. package/src/verses/universe.presenter.js +8 -0
  530. package/src/verses/universe.project.js +12 -0
  531. package/src/viewer.js +34 -0
  532. package/src/workspace.model.js +5 -0
  533. package/src/workspaces/workspace.actions.js +1 -0
  534. package/src/workspaces/workspace.artifactActions.js +56 -0
  535. package/src/workspaces/workspace.auditView.js +153 -0
  536. package/src/workspaces/workspace.candidates.js +149 -0
  537. package/src/workspaces/workspace.config.js +153 -0
  538. package/src/workspaces/workspace.configuredSource.js +68 -0
  539. package/src/workspaces/workspace.discoveryProgress.js +34 -0
  540. package/src/workspaces/workspace.discoveryView.js +386 -0
  541. package/src/workspaces/workspace.displayFilters.js +63 -0
  542. package/src/workspaces/workspace.displayOptions.js +58 -0
  543. package/src/workspaces/workspace.emptyStateCopy.js +24 -0
  544. package/src/workspaces/workspace.entrypointLifecycle.js +131 -0
  545. package/src/workspaces/workspace.entrypointViewIntent.js +83 -0
  546. package/src/workspaces/workspace.entrypoints.js +157 -0
  547. package/src/workspaces/workspace.feedSort.js +152 -0
  548. package/src/workspaces/workspace.import.js +212 -0
  549. package/src/workspaces/workspace.importConflicts.js +200 -0
  550. package/src/workspaces/workspace.importLifecycle.case.mjs +103 -0
  551. package/src/workspaces/workspace.lifecycle.case.mjs +353 -0
  552. package/src/workspaces/workspace.lifecycle.js +357 -0
  553. package/src/workspaces/workspace.lineageView.js +244 -0
  554. package/src/workspaces/workspace.localSourceLifecycle.js +91 -0
  555. package/src/workspaces/workspace.materialLedger.js +110 -0
  556. package/src/workspaces/workspace.materialReconciliation.case.mjs +164 -0
  557. package/src/workspaces/workspace.materialReconciliation.js +390 -0
  558. package/src/workspaces/workspace.memberIdentity.js +140 -0
  559. package/src/workspaces/workspace.model.js +2 -0
  560. package/src/workspaces/workspace.navigation.js +20 -0
  561. package/src/workspaces/workspace.openSemantics.js +33 -0
  562. package/src/workspaces/workspace.pathTree.js +132 -0
  563. package/src/workspaces/workspace.persistence.case.mjs +271 -0
  564. package/src/workspaces/workspace.persistence.js +469 -0
  565. package/src/workspaces/workspace.persistenceCache.js +41 -0
  566. package/src/workspaces/workspace.persistenceClear.js +45 -0
  567. package/src/workspaces/workspace.persistencePresentation.js +93 -0
  568. package/src/workspaces/workspace.persistenceRecovery.js +147 -0
  569. package/src/workspaces/workspace.persistenceRouteCache.js +82 -0
  570. package/src/workspaces/workspace.publicationReceipts.case.mjs +36 -0
  571. package/src/workspaces/workspace.publicationReceipts.js +56 -0
  572. package/src/workspaces/workspace.recoverabilityView.js +264 -0
  573. package/src/workspaces/workspace.route.js +432 -0
  574. package/src/workspaces/workspace.runtimeCanonical.js +18 -0
  575. package/src/workspaces/workspace.sourceMaterial.js +71 -0
  576. package/src/workspaces/workspace.sourceRecordPath.js +5 -0
  577. package/src/workspaces/workspace.sourceRecords.js +75 -0
  578. package/src/workspaces/workspace.store.js +3 -0
  579. package/src/workspaces/workspace.summary.js +116 -0
  580. package/src/workspaces/workspace.timePortal.js +137 -0
@@ -0,0 +1,372 @@
1
+ import assert from 'node:assert/strict';
2
+ import { access, copyFile, mkdir, mkdtemp, readFile, rm, writeFile } from 'node:fs/promises';
3
+ import os from 'node:os';
4
+ import path from 'node:path';
5
+ import { runPortableCli } from '@tiinex/core/tooling/portable/adapters/cli/cli.run.js';
6
+ import { acceptGroundHostResult, hostToolProfile } from '@tiinex/core/tooling/portable/adapters/cli/cli.ground-recovery.js';
7
+ import { runPortableOperation } from '@tiinex/core/tooling/portable/operation.catalog.js';
8
+ import { materializeHandoffManufactureCliOutput, prepareHandoffManufactureCliCommand } from '@tiinex/core/tooling/portable/adapters/cli/cli.handoff-manufacture.js';
9
+ import { portableCanonicalBootstrapRuntime } from '@tiinex/core/tooling/portable/schema/bootstrap/canonical.pack.js';
10
+
11
+ {
12
+ const lines = [];
13
+ const io = { log: (value) => lines.push(value), error: (value) => lines.push(value) };
14
+ assert.equal(await runPortableCli(['--help'], io), 0);
15
+ const help = lines.at(-1);
16
+ assert.match(help, /Common path \(same command for humans and LLMs\):/);
17
+ assert.match(help, / ground <handoff-package\.zip> --route <Continue-from>/);
18
+ assert.match(help, / author <workspace-dir>/);
19
+ assert.match(help, / handoff <workspace-dir>/);
20
+ assert.match(help, /Advanced\/internal catalog: .* operations/);
21
+ assert.doesNotMatch(help, /prepare-task|accept-host-receipt|manufacture-handoff-package|build-runtime-package/, 'default help must not eagerly disclose the advanced/internal operation catalog');
22
+ }
23
+ console.log('✓ CLI default help keeps the common lifecycle visible while advanced operations remain deliberate discovery passed');
24
+
25
+ {
26
+ for (const surfaceCommand of ['author', 'handoff']) {
27
+ const lines = [];
28
+ const io = { log: (value) => lines.push(value), error: (value) => lines.push(value) };
29
+ assert.equal(await runPortableCli([surfaceCommand, '--help'], io), 0);
30
+ const help = lines.at(-1);
31
+ assert.match(help, new RegExp(`Tiinex portable tooling — ${surfaceCommand}`));
32
+ assert.match(help, new RegExp(` ${surfaceCommand} <workspace-dir>`));
33
+ assert.match(help, /Advanced\/internal catalog: .* operations/);
34
+ if (surfaceCommand === 'handoff') {
35
+ assert.match(help, /exactly one Handoff package plus the adjacent exact routing text/);
36
+ assert.match(help, /fenced code block/);
37
+ assert.match(help, /do not emit canonical Workspace Evidence\/Handoff markdown as additional loose transport files/);
38
+ }
39
+ assert.doesNotMatch(help, /prepare-task|accept-host-receipt|manufacture-handoff-package|build-runtime-package/, `${surfaceCommand} --help must remain command-focused instead of dumping the advanced catalog`);
40
+ }
41
+ }
42
+ console.log('✓ common subcommand help is focused and preserves deliberate advanced discovery passed');
43
+
44
+ const root = await mkdtemp(path.join(os.tmpdir(), 'tiinex-cli-turn-binding-'));
45
+ try {
46
+ const transaction = path.join(root, 'turn.json');
47
+ const output = path.join(root, 'state.json');
48
+ await writeFile(transaction, `${JSON.stringify({
49
+ sessionId: 'session-cli-binding',
50
+ turn: {
51
+ id: 'dialogue:turn-0001',
52
+ sequence: 1,
53
+ userMessage: 'Exact current user message.',
54
+ messageSha256: 'a'.repeat(64),
55
+ summary: 'Caller supplied a mismatched digest.'
56
+ },
57
+ changes: []
58
+ }, null, 2)}\n`, 'utf8');
59
+ const lines = [];
60
+ const io = { log: (value) => lines.push(value), error: (value) => lines.push(value) };
61
+ const code = await runPortableCli(['process-live-turn', '--turn', transaction, '--output', output], io);
62
+ assert.equal(code, 2);
63
+ const result = JSON.parse(lines.at(-1));
64
+ assert.equal(result.status, 'blocked');
65
+ assert.equal('cliPhaseTiming' in result, false, 'default CLI output must remain unchanged when --phase-timing is absent');
66
+ assert.deepEqual(result.findings.map((entry) => entry.code), ['live-lineage.turn.message-digest-mismatch']);
67
+ await assert.rejects(access(output), /ENOENT/, 'blocked turn binding must not rewrite the persisted state file');
68
+ } finally {
69
+ await rm(root, { recursive: true, force: true });
70
+ }
71
+ console.log('✓ CLI blocks mismatched turn binding without persisting state passed');
72
+
73
+ {
74
+ const lines = [];
75
+ const io = { log: (value) => lines.push(value), error: (value) => lines.push(value) };
76
+ const code = await runPortableCli(['describe-cold-start-ingress', 'routed-handoff-package', '--phase-timing'], io);
77
+ assert.equal(code, 0);
78
+ const result = JSON.parse(lines.at(-1));
79
+ assert.equal(result.cliPhaseTiming.schema, 'tiinex.portable.cli.phase-timing.v1');
80
+ assert.equal(result.cliPhaseTiming.command, 'describe-cold-start-ingress');
81
+ assert.equal('totalElapsedMs' in result.cliPhaseTiming, false, 'pre-serialization elapsed time must not be presented as total CLI elapsed time');
82
+ assert.equal(result.cliPhaseTiming.measuredElapsedBeforeFinalSerializationMs >= 0, true);
83
+ assert.equal(result.cliPhaseTiming.phases.inputPreparationMs >= 0, true);
84
+ assert.equal(result.cliPhaseTiming.phases.operationExecutionMs >= 0, true);
85
+ assert.equal(result.cliPhaseTiming.phases.outputMaterializationMs >= 0, true);
86
+ assert.equal(result.cliPhaseTiming.measurementBoundary, 'immediately-before-final-json-serialization');
87
+ assert.deepEqual(result.cliPhaseTiming.unmeasured, { finalJsonSerialization: true, finalEmission: true });
88
+ assert.match(result.cliPhaseTiming.boundary, /final JSON serialization and emission are explicitly unmeasured/);
89
+ assert.match(result.cliPhaseTiming.boundary, /excludes host review\/queue latency/);
90
+ }
91
+ console.log('✓ CLI opt-in in-process phase timing passed');
92
+
93
+
94
+ {
95
+ const lines = [];
96
+ const io = { log: (value) => lines.push(value), error: (value) => lines.push(value) };
97
+ const code = await runPortableCli(['describe-cold-start-ingress', 'routed-handoff-package'], io);
98
+ assert.equal(code, 0);
99
+ const expected = await runPortableOperation('describe-cold-start-ingress', { ingressKind: 'routed-handoff-package' }, {});
100
+ assert.equal(lines.at(-1), JSON.stringify(expected, null, 2), 'default CLI output must remain byte-equivalent to ordinary pretty JSON operation output');
101
+ }
102
+ console.log('✓ CLI default output byte-equivalence without phase timing passed');
103
+
104
+ {
105
+ const lines = [];
106
+ const io = { log: (value) => lines.push(value), error: (value) => lines.push(value) };
107
+ const code = await runPortableCli(['discover-tooling', '--phase-timing'], io);
108
+ assert.equal(code, 0);
109
+ const serialized = lines.at(-1);
110
+ assert.equal(Buffer.byteLength(serialized, 'utf8') > 4096, true, 'focused timing regression must exercise a non-trivial JSON serialization/output path');
111
+ const result = JSON.parse(serialized);
112
+ assert.equal('totalElapsedMs' in result.cliPhaseTiming, false);
113
+ assert.equal(result.cliPhaseTiming.measurementBoundary, 'immediately-before-final-json-serialization');
114
+ assert.equal(result.cliPhaseTiming.unmeasured.finalJsonSerialization, true);
115
+ assert.equal(result.cliPhaseTiming.unmeasured.finalEmission, true);
116
+ }
117
+ console.log('✓ CLI phase timing truthfully bounds non-trivial final serialization/output passed');
118
+
119
+
120
+ {
121
+ const root = await mkdtemp(path.join(os.tmpdir(), 'tiinex-cli-ground-host-result-'));
122
+ try {
123
+ const firstPath = path.join(root, 'first.md');
124
+ const secondPath = path.join(root, 'second.md');
125
+ await writeFile(firstPath, '# First recovered Parent\n', 'utf8');
126
+ await writeFile(secondPath, '# Second recovered Parent\n', 'utf8');
127
+ const host = hostToolProfile({}, 'GitHub.fetch_file');
128
+ const recoveryResult = (repoPath) => Object.freeze({
129
+ continuity: Object.freeze({
130
+ recovery: Object.freeze({
131
+ state: 'host-action-available',
132
+ hostAction: Object.freeze({
133
+ action: 'repository-read',
134
+ request: Object.freeze({
135
+ repository: 'Tiinex/site',
136
+ ref: '56ba75025b7a8fd44b5318d2560d2ec63eb0106f',
137
+ path: repoPath,
138
+ purpose: 'recover exact declared Parent for cold-start continuity proof',
139
+ nextOperation: 'ground'
140
+ }),
141
+ selectedTool: Object.freeze({ id: 'GitHub.fetch_file', name: 'GitHub.fetch_file' })
142
+ })
143
+ })
144
+ })
145
+ });
146
+ const first = await acceptGroundHostResult(recoveryResult('.topics/tooling/first.trace.md'), { host, recoveryAcceptance: {} }, { 'host-result': firstPath });
147
+ assert.equal(first.acceptance.status, 'accepted');
148
+ assert.equal(first.acceptance.cumulativeRecovery.repositoryFiles, 1);
149
+ const second = await acceptGroundHostResult(recoveryResult('.topics/tooling/second.trace.md'), { host, recoveryAcceptance: first.acceptance }, { 'host-result': secondPath });
150
+ assert.equal(second.acceptance.status, 'accepted');
151
+ assert.equal(second.acceptance.cumulativeRecovery.priorAccepted, true);
152
+ assert.equal(second.acceptance.cumulativeRecovery.repositoryFiles, 2);
153
+ assert.deepEqual(second.acceptance.providerResponses[0].files.map((file) => file.source.path), [
154
+ '.topics/tooling/first.trace.md',
155
+ '.topics/tooling/second.trace.md'
156
+ ]);
157
+ } finally {
158
+ await rm(root, { recursive: true, force: true });
159
+ }
160
+ }
161
+ console.log('✓ common ground host-result façade owns receipt normalization and cumulative prior recovery without protocol files passed');
162
+
163
+
164
+ {
165
+ const root = await mkdtemp(path.join(os.tmpdir(), 'tiinex-cli-common-author-'));
166
+ try {
167
+ const parentRelativePath = '.topics/tooling/006-1-1-1-1-1-1-1-1-1-1-1-anchor-to-loom-authoring-return-common-path-ergonomics-handoff.trace.md';
168
+ const evidenceSource = path.resolve('.topics/tooling/006-1-1-1-1-1-1-loom-post-ground-common-path-ergonomics-correction-evidence.trace.md');
169
+ const parentSource = path.resolve(parentRelativePath);
170
+ const parentTarget = path.join(root, parentRelativePath);
171
+ await mkdir(path.dirname(parentTarget), { recursive: true });
172
+ await copyFile(parentSource, parentTarget);
173
+ const evidenceMarkdown = await readFile(evidenceSource, 'utf8');
174
+ const evidenceBody = evidenceMarkdown.split('\n---\n')[1].trim();
175
+ const bodyPath = path.join(root, 'body.md');
176
+ await writeFile(bodyPath, `${evidenceBody}\n`, 'utf8');
177
+ await mkdir(path.join(root, '.tiinex'), { recursive: true });
178
+ await writeFile(path.join(root, '.tiinex/continuation.json'), `${JSON.stringify({
179
+ schema: 'tiinex.portable.ground-continuation-state.v1',
180
+ version: 1,
181
+ selectedHandoffPath: parentRelativePath,
182
+ roleLabel: 'Loom'
183
+ }, null, 2)}\n`, 'utf8');
184
+ const artifactRelativePath = '.topics/tooling/common-author-regression-evidence.trace.md';
185
+ const lines = [];
186
+ const io = { log: (value) => lines.push(value), error: (value) => lines.push(value) };
187
+ const code = await runPortableCli([
188
+ 'author', root,
189
+ '--schema', 'tiinex.evidence.v1',
190
+ '--path', artifactRelativePath,
191
+ '--body', bodyPath,
192
+ '--title', 'Common Author Regression Evidence',
193
+ '--summary', 'Regression coverage for the ordinary post-ground author surface.',
194
+ '--why', 'Prove continuity inference, c14n-v2 sealing, runtime audit, staging, and continuation-state carry-forward.',
195
+ '--compact'
196
+ ], io, portableCanonicalBootstrapRuntime);
197
+ assert.equal(code, 0);
198
+ const result = JSON.parse(lines.at(-1));
199
+ assert.equal(result.status, 'qualified');
200
+ assert.equal(result.artifact.parentPath, parentRelativePath);
201
+ assert.equal(result.artifact.selfIntegrity, 'verified');
202
+ assert.equal(result.qualification.stage, 'staged');
203
+ assert.equal(result.findingSummary.counts.error, 0);
204
+ const state = JSON.parse(await readFile(path.join(root, '.tiinex/continuation.json'), 'utf8'));
205
+ assert.equal(state.lastAuthoredPath, artifactRelativePath);
206
+ assert.equal(state.lastAuthoredSchemaId, 'tiinex.evidence.v1');
207
+ } finally {
208
+ await rm(root, { recursive: true, force: true });
209
+ }
210
+ }
211
+ console.log('✓ common author façade infers Parent and owns sealing, audit, staging, and continuation carry-forward passed');
212
+
213
+
214
+ {
215
+ const root = await mkdtemp(path.join(os.tmpdir(), 'tiinex-cli-common-author-chain-'));
216
+ try {
217
+ const bundledDecisionSchemaPath = 'src/schemas/core/decision/tiinex.decision.v1.schema.md';
218
+ const decisionSchemaTarget = path.join(root, bundledDecisionSchemaPath);
219
+ await mkdir(path.dirname(decisionSchemaTarget), { recursive: true });
220
+ await copyFile(path.resolve(bundledDecisionSchemaPath), decisionSchemaTarget);
221
+ await mkdir(path.join(root, '.tiinex'), { recursive: true });
222
+ await writeFile(path.join(root, '.tiinex/continuation.json'), `${JSON.stringify({
223
+ schema: 'tiinex.portable.ground-continuation-state.v1',
224
+ version: 1,
225
+ roleLabel: 'Loom'
226
+ }, null, 2)}\n`, 'utf8');
227
+
228
+ const bodyFromArtifact = async (sourcePath, targetName) => {
229
+ const markdown = await readFile(path.resolve(sourcePath), 'utf8');
230
+ const body = markdown.split('\n---\n')[1].trim();
231
+ const target = path.join(root, targetName);
232
+ await writeFile(target, `${body}\n`, 'utf8');
233
+ return target;
234
+ };
235
+ const runAuthor = async (args) => {
236
+ const lines = [];
237
+ const io = { log: (value) => lines.push(value), error: (value) => lines.push(value) };
238
+ const code = await runPortableCli(['author', root, ...args, '--compact'], io, portableCanonicalBootstrapRuntime);
239
+ return { code, result: JSON.parse(lines.at(-1)) };
240
+ };
241
+
242
+ const decisionBody = await bodyFromArtifact('.topics/tooling/017-1-sigma-foundation-major-plan-approval-decision.trace.md', 'decision-body.md');
243
+ const handoffBody = await bodyFromArtifact('.topics/tooling/016-3-anchor-to-loom-common-author-continuation-repair-handoff.trace.md', 'handoff-body.md');
244
+ const taskBody = await bodyFromArtifact('.topics/tooling/016-common-author-continuation-schema-authority-repair.task.trace.md', 'task-body.md');
245
+ const evidenceBody = await bodyFromArtifact('.topics/tooling/016-1-anchor-fresh-common-author-continuation-failure-evidence.trace.md', 'evidence-body.md');
246
+
247
+ const decisionPath = '.topics/tooling/common-author-chain-decision.trace.md';
248
+ const decision = await runAuthor([
249
+ '--schema', 'tiinex.decision.v1', '--path', decisionPath, '--body', decisionBody,
250
+ '--title', 'Common Author Chain Decision', '--summary', 'Common Author Chain Decision', '--why', 'Exercise bare-ID Decision continuation.', '--no-parent'
251
+ ]);
252
+ assert.equal(decision.code, 0);
253
+ assert.equal(decision.result.status, 'qualified');
254
+ const decisionMarkdown = await readFile(path.join(root, decisionPath), 'utf8');
255
+ assert.match(decisionMarkdown, /Current Schema: tiinex\.decision\.v1\n/, 'accepted-local unpublished Decision remains a bare semantic schema id');
256
+
257
+ const handoffPath = '.topics/tooling/common-author-chain-handoff.trace.md';
258
+ const handoff = await runAuthor([
259
+ '--schema', 'tiinex.handoff.v1', '--path', handoffPath, '--body', handoffBody,
260
+ '--title', 'Common Author Chain Handoff', '--summary', 'Common Author Chain Handoff', '--why', 'Prove Decision to Handoff continuation.', '--parent', decisionPath
261
+ ]);
262
+ assert.equal(handoff.code, 0);
263
+ assert.equal(handoff.result.status, 'qualified');
264
+ assert.equal(handoff.result.artifact.parentPath, decisionPath);
265
+ assert.equal(handoff.result.artifact.selfIntegrity, 'verified');
266
+ const handoffMarkdown = await readFile(path.join(root, handoffPath), 'utf8');
267
+ assert.match(handoffMarkdown, /Parent Schema: \[tiinex\.decision\.v1\]\(\.\.\/\.\.\/src\/schemas\/core\/decision\/tiinex\.decision\.v1\.schema\.md\)/, 'bare parent schema id must recover an exact child-relative bundled schema locator');
268
+
269
+ const taskPath = '.topics/tooling/common-author-chain-task.trace.md';
270
+ const task = await runAuthor([
271
+ '--schema', 'tiinex.task.v1', '--path', taskPath, '--body', taskBody,
272
+ '--title', 'Common Author Chain Task', '--summary', 'Common Author Chain Task', '--why', 'Exercise an additional ordinary schema pair.', '--no-parent'
273
+ ]);
274
+ assert.equal(task.code, 0);
275
+ assert.equal(task.result.status, 'qualified');
276
+
277
+ const evidencePath = '.topics/tooling/common-author-chain-evidence.trace.md';
278
+ const evidence = await runAuthor([
279
+ '--schema', 'tiinex.evidence.v1', '--path', evidencePath, '--body', evidenceBody,
280
+ '--title', 'Common Author Chain Evidence', '--summary', 'Common Author Chain Evidence', '--why', 'Prove Task to Evidence continuation is schema-generic.', '--parent', taskPath
281
+ ]);
282
+ assert.equal(evidence.code, 0);
283
+ assert.equal(evidence.result.status, 'qualified');
284
+ assert.equal(evidence.result.artifact.parentPath, taskPath);
285
+ assert.equal(evidence.result.artifact.selfIntegrity, 'verified');
286
+ } finally {
287
+ await rm(root, { recursive: true, force: true });
288
+ }
289
+ }
290
+ console.log('✓ common author chains Decision→Handoff and Task→Evidence without manual schema-authority repair passed');
291
+
292
+
293
+ {
294
+ const root = await mkdtemp(path.join(os.tmpdir(), 'tiinex-cli-common-author-schema-authority-fail-closed-'));
295
+ try {
296
+ const bundledDecisionSchemaPath = 'src/schemas/core/decision/tiinex.decision.v1.schema.md';
297
+ const decisionSchemaTarget = path.join(root, bundledDecisionSchemaPath);
298
+ await mkdir(path.dirname(decisionSchemaTarget), { recursive: true });
299
+ await writeFile(decisionSchemaTarget, '# tampered local schema material\n', 'utf8');
300
+ await mkdir(path.join(root, '.tiinex'), { recursive: true });
301
+ await writeFile(path.join(root, '.tiinex/continuation.json'), `${JSON.stringify({ schema: 'tiinex.portable.ground-continuation-state.v1', version: 1, roleLabel: 'Loom' }, null, 2)}\n`, 'utf8');
302
+ const bodyFromArtifact = async (sourcePath, targetName) => {
303
+ const markdown = await readFile(path.resolve(sourcePath), 'utf8');
304
+ const target = path.join(root, targetName);
305
+ await writeFile(target, `${markdown.split('\n---\n')[1].trim()}\n`, 'utf8');
306
+ return target;
307
+ };
308
+ const decisionBody = await bodyFromArtifact('.topics/tooling/017-1-sigma-foundation-major-plan-approval-decision.trace.md', 'decision-body.md');
309
+ const handoffBody = await bodyFromArtifact('.topics/tooling/016-3-anchor-to-loom-common-author-continuation-repair-handoff.trace.md', 'handoff-body.md');
310
+ const decisionPath = '.topics/tooling/common-author-unresolved-decision.trace.md';
311
+ const firstLines = [];
312
+ assert.equal(await runPortableCli([
313
+ 'author', root, '--schema', 'tiinex.decision.v1', '--path', decisionPath, '--body', decisionBody,
314
+ '--title', 'Unresolved Decision', '--summary', 'Unresolved Decision', '--why', 'Set up fail-closed Parent authority regression.', '--no-parent', '--compact'
315
+ ], { log: (value) => firstLines.push(value), error: (value) => firstLines.push(value) }, portableCanonicalBootstrapRuntime), 0);
316
+
317
+ const childPath = '.topics/tooling/common-author-unresolved-handoff.trace.md';
318
+ const lines = [];
319
+ const code = await runPortableCli([
320
+ 'author', root, '--schema', 'tiinex.handoff.v1', '--path', childPath, '--body', handoffBody,
321
+ '--title', 'Unresolved Handoff', '--summary', 'Unresolved Handoff', '--why', 'Must fail closed without exact local schema bytes.', '--parent', decisionPath, '--compact'
322
+ ], { log: (value) => lines.push(value), error: (value) => lines.push(value) }, portableCanonicalBootstrapRuntime);
323
+ assert.equal(code, 1);
324
+ assert.equal(JSON.parse(lines.at(-1)).error, 'portable.cli.author.parent.schema-authority.required');
325
+ await assert.rejects(access(path.join(root, childPath)), /ENOENT/, 'failed Parent schema-authority recovery must not retain a child artifact');
326
+ } finally {
327
+ await rm(root, { recursive: true, force: true });
328
+ }
329
+ }
330
+ console.log('✓ common author Parent schema-authority recovery fails closed on mismatched bundled schema bytes passed');
331
+
332
+
333
+ {
334
+ const root = await mkdtemp(path.join(os.tmpdir(), 'tiinex-cli-low-level-handoff-'));
335
+ try {
336
+ await mkdir(path.join(root, '.tiinex'), { recursive: true });
337
+ await writeFile(path.join(root, '.tiinex/continuation.json'), `${JSON.stringify({
338
+ schema: 'tiinex.portable.ground-continuation-state.v1',
339
+ packageParentPath: path.join(root, 'missing-parent.handoff-package.zip')
340
+ }, null, 2)}\n`, 'utf8');
341
+ await assert.rejects(
342
+ () => prepareHandoffManufactureCliCommand({
343
+ surfaceCommand: 'manufacture-handoff-package',
344
+ positionals: [root],
345
+ flags: { 'package-major': true }
346
+ }),
347
+ /portable\.cli\.handoff-carrier\.package-major\.parent-required/,
348
+ 'advanced manufacture must not silently consume common-path continuation state'
349
+ );
350
+ } finally {
351
+ await rm(root, { recursive: true, force: true });
352
+ }
353
+ }
354
+ console.log('✓ advanced manufacture remains explicit even when common-path continuation state is present passed');
355
+
356
+
357
+ {
358
+ const output = await materializeHandoffManufactureCliOutput({
359
+ schema: 'tiinex.portable.operation.result.v1',
360
+ operation: 'manufacture-handoff-package',
361
+ status: 'blocked',
362
+ transportExecutable: false,
363
+ carrierProjection: { status: 'ready', mode: 'single', routes: [], workspace: {}, workspaces: [], selection: {} },
364
+ findings: [{ severity: 'error', code: 'portable.handoff-material.required.unresolved', message: 'Exact required material is not currently resolvable or materialized.' }],
365
+ findingSummary: { status: 'invalid', counts: { error: 1, warning: 0, info: 0, total: 1 } }
366
+ }, { 'output-dir': '/tmp' });
367
+ assert.equal(output.status, 'blocked');
368
+ assert.equal(output.primaryOutput, null);
369
+ assert.equal(output.findingSummary.counts.error, 1);
370
+ assert.equal(output.findings[0].code, 'portable.handoff-material.required.unresolved');
371
+ }
372
+ console.log('✓ blocked manufacture façade preserves actionable findings instead of attempting an invalid carrier write passed');
@@ -0,0 +1,46 @@
1
+ import assert from 'node:assert/strict';
2
+ import { mkdtemp, mkdir, readFile, rm, writeFile } from 'node:fs/promises';
3
+ import os from 'node:os';
4
+ import path from 'node:path';
5
+ import { runPortableCli } from '@tiinex/core/tooling/portable/adapters/cli/cli.run.js';
6
+
7
+ const root = await mkdtemp(path.join(os.tmpdir(), 'tiinex-cli-summary-'));
8
+ try {
9
+ const source = await readFile('src/artifacts/fixtures/topic.trace.md', 'utf8');
10
+ const materialDir = path.join(root, 'material');
11
+ await mkdir(materialDir, { recursive: true });
12
+ for (let index = 0; index < 20; index += 1) {
13
+ await writeFile(path.join(materialDir, `topic-${String(index + 1).padStart(2, '0')}.trace.md`), source, 'utf8');
14
+ }
15
+
16
+ const fullInspect = await runJson(['inspect', materialDir, '--compact']);
17
+ assert.equal(Array.isArray(fullInspect.records), true);
18
+ assert.equal(fullInspect.records.length, 20);
19
+ assert.equal('projection' in fullInspect, false, 'default inspect projection must remain unchanged');
20
+
21
+ const summaryInspect = await runJson(['inspect', materialDir, '--summary', '--phase-timing', '--compact']);
22
+ assert.equal(summaryInspect.projection, 'bounded-summary');
23
+ assert.deepEqual(summaryInspect.counts, { files: 20, records: 20, assets: 0, workspaceEntries: 0, findings: 0 });
24
+ assert.equal('records' in summaryInspect, false);
25
+ assert.equal(summaryInspect.actionableFindings.length, 0);
26
+ assert.equal(summaryInspect.cliPhaseTiming.command, 'inspect');
27
+ assert.equal(JSON.stringify(summaryInspect).length < JSON.stringify(fullInspect).length / 5, true);
28
+
29
+ const summaryAudit = await runJson(['audit', materialDir, '--summary', '--compact'], 0);
30
+ assert.equal(summaryAudit.projection, 'bounded-summary');
31
+ assert.equal(summaryAudit.counts.audits, 20);
32
+ assert.equal('audits' in summaryAudit, false);
33
+ assert.equal(summaryAudit.actionableFindings.every((finding) => finding.severity === 'error' || finding.severity === 'warning'), true);
34
+ } finally {
35
+ await rm(root, { recursive: true, force: true });
36
+ }
37
+
38
+ console.log('✓ CLI bounded inspect/audit summary projection preserves full default output and omits body-scale payloads');
39
+
40
+ async function runJson(argv, expectedCode = 0) {
41
+ const lines = [];
42
+ const errors = [];
43
+ const code = await runPortableCli(argv, { log: (value) => lines.push(value), error: (value) => errors.push(value) });
44
+ assert.equal(code, expectedCode, errors.join('\n'));
45
+ return JSON.parse(lines.at(-1));
46
+ }
@@ -0,0 +1,45 @@
1
+ import assert from 'node:assert/strict';
2
+ import { loadNodePortableInput } from '@tiinex/core/tooling/portable/input/node.input.js';
3
+ import { normalizePortableInput } from '@tiinex/core/tooling/portable/input/portable.input.js';
4
+ import { auditPortableMaterial } from '@tiinex/core/tooling/portable/engine.facade.js';
5
+ import { buildWorkspaceAuditView } from '../../../workspaces/workspace.auditView.js';
6
+ import { auditPortableRecord, auditPortableRecords } from '@tiinex/core/tooling/portable/audit/audit.capability.js';
7
+
8
+ const source = await loadNodePortableInput(['.topics/tooling/010-safe-reduction-and-shared-capability-parity-coordination-task.trace.md']);
9
+ const material = normalizePortableInput(source);
10
+ assert.equal(material.records.length, 1);
11
+ const record = material.records[0];
12
+
13
+ const recordAudit = auditPortableRecord(record);
14
+ assert.equal(recordAudit.schema, 'tiinex.portable.shared-audit-record.v1');
15
+ assert.equal(recordAudit.path, record.path);
16
+ assert.equal(recordAudit.capabilityBoundary.adapterNeutral, true);
17
+ assert(recordAudit.findings.length > 0);
18
+ for (const finding of recordAudit.findings) {
19
+ assert.match(finding.findingIdentity, /::/);
20
+ assert.equal(finding.artifactBoundary.path, record.path);
21
+ assert.equal(finding.ownership.kind, 'implementation-source');
22
+ assert(finding.ownership.owner);
23
+ }
24
+
25
+ const batchAudit = auditPortableRecords([record]);
26
+ assert.equal(batchAudit.audits.length, 1);
27
+ assert.equal(batchAudit.boundary.sharedConsumers.includes('Viewer'), true);
28
+ assert.equal(batchAudit.boundary.sharedConsumers.includes('CLI'), true);
29
+ assert.equal(batchAudit.boundary.sourceMutation, false);
30
+ assert.equal(batchAudit.boundary.remoteWrite, false);
31
+
32
+ const cliAudit = auditPortableMaterial(source);
33
+ const viewerAudit = buildWorkspaceAuditView({ id: 'audit-parity', title: 'Audit parity' }, { records: [record] });
34
+ assert.equal(cliAudit.audits.length, 1);
35
+ assert.equal(viewerAudit.items.length, 1);
36
+ const sharedProjection = (audit) => (audit.findings || []).map((finding) => ({
37
+ code: finding.code,
38
+ severity: finding.severity,
39
+ findingIdentity: finding.findingIdentity,
40
+ owner: finding.ownership?.owner || '',
41
+ artifactPath: finding.artifactBoundary?.path || ''
42
+ }));
43
+ assert.deepEqual(sharedProjection(cliAudit.audits[0]), sharedProjection(viewerAudit.items[0]));
44
+
45
+ console.log('✓ Shared portable audit capability keeps CLI/LLM and Viewer finding identity, severity, ownership, and artifact boundaries in parity');
@@ -0,0 +1,37 @@
1
+ # Continuity Context
2
+
3
+ - Envelope Schema: [tiinex.root.v1](https://github.com/Tiinex/docs/blob/053d46ce082d4ec261b82abc44ecca403d61e240/.topics/.schemas/tiinex.root.v1.schema.md)
4
+ - Repairs:
5
+ - Historical canonical representation repair
6
+ - Target: [pre-repair published representation](https://github.com/Tiinex/site/blob/32c7c291101b2a6a72c12241f3107d4a56af81fc/.topics/development/collaboration/dogfood/001-tiinex-development-dogfood-collaboration-model.trace.md)
7
+ - Note: Canonically repaired after v475-v478 qualified the authoring/validation/reference/integrity oracles; pre-repair Git blob 8db25b99346cec48439a641f490c9954f3d89aa7.
8
+ - Reason: Preserve original body/work-result meaning and historical Current Created At while replacing false-PASS envelope, schema-reference, continuity, and integrity representation.
9
+ - Current
10
+ - Current Schema: [tiinex.topic.v1](https://github.com/Tiinex/docs/blob/053d46ce082d4ec261b82abc44ecca403d61e240/.topics/.schemas/core/topic/tiinex.topic.v1.schema.md)
11
+ - Created At: 2026-08-21 16:33:00
12
+ - Authors: Tiinusen; Architect
13
+ - Summary: Tiinex development dogfood collaboration model
14
+
15
+ ---
16
+
17
+ # Tiinex development dogfood collaboration model
18
+
19
+ This topic captures the current direction for Tiinex development dogfood collaboration model.
20
+
21
+ ## Current Read
22
+
23
+ The Tiinex project has begun using its own artifact/tooling model for Architect, Tooling, Dev, and human handoffs. A repository/worktree ZIP is transported between workers; the ZIP mirrors the real Site tree and excludes .git rather than wrapping project truth in a separate transport envelope. The included Site tooling is expected to be sufficient when full source is present. bootstrap.zip remains the portable/minified tooling distribution for cases where full Site source is intentionally absent. Git remains source history/publication and is not replaced by the ZIP.
24
+
25
+ ## Design Direction
26
+
27
+ Treat chat sessions as replaceable workers and Tiinex artifacts as durable collaboration context. Human handoff text should carry only the routing delta needed for the session: role when a fresh session needs it, the exact controlling artifact, and expected return shape. WHAT, WHY, acceptance, lineage, and durable decisions belong in Tiinex artifacts. Discovery placement follows workspace configuration; .topics is a configurable convention/default rather than semantic authority. Only qualified Tiinex artifacts are cross-read semantically; remote Schema, Companion, and Transition material is declarative data, never remotely executable code. Record real authorship separately from transport/provenance: Tiinusen is the human collaborator nickname to use when he is an author or co-author.
28
+
29
+ ## Next Artifacts
30
+
31
+ Continue dogfooding with Tooling and then a fresh Dev session using the same repo-mirror ZIP pattern. Observe whether LLM workers can discover bounded current work without hidden conversational context and whether Tiinusen can follow the lineage in the viewer as a human. Record friction rather than silently routing around it, especially authorship authoring/presentation, current-work discovery, lineage readability, export size, and viewer/local discovery behavior.
32
+
33
+ # Continuity Integrity
34
+
35
+ - [sha256-base64url-c14n-v2](https://github.com/Tiinex/docs/blob/053d46ce082d4ec261b82abc44ecca403d61e240/.topics/.validators/sha256-base64url-c14n-v2.validator.md)
36
+ - Towards: self
37
+ - Value: 2zmo_kpYfcR_3-9LZAd4DNjCDVDU-XDOCucl1yWHw54
@@ -0,0 +1,108 @@
1
+ # Continuity Context
2
+
3
+ - Envelope Schema: [tiinex.root.v1](https://github.com/Tiinex/docs/blob/053d46ce082d4ec261b82abc44ecca403d61e240/.topics/.schemas/tiinex.root.v1.schema.md)
4
+ - Current
5
+ - Current Schema: [tiinex.handoff.v1](https://github.com/Tiinex/docs/blob/e713557f8be630967571d11a73f9ecd05ae329ce/.topics/.schemas/coordination/handoff/tiinex.handoff.v1.schema.md)
6
+ - Created At: 2026-08-22 03:05:12
7
+ - Authors: Architect
8
+ - Why: Transfer the bounded v480 Tooling tranche through a durable Tiinex Handoff rather than a chat-level implementation briefing.
9
+ - Summary: Handoff of v480 workflow schema enablement and creation-contract projection closure to Tooling
10
+ - Status: draft/local
11
+
12
+ ---
13
+
14
+ # v480 Tooling workflow schema enablement handoff
15
+
16
+ ## Handoff Parties
17
+
18
+ - Purpose: transfer bounded execution of the v480 workflow-schema enablement and generic creation-contract projection closure while retaining architecture review and subsequent Dev routing with Architect
19
+ - From: Architect
20
+ - From Kind: role
21
+ - To: Tooling
22
+ - To Kind: role
23
+
24
+ ## Transfers
25
+
26
+ - v480-work-and-responsibility
27
+ - Transfer Kind: work-and-responsibility
28
+ - Description: implement, validate, and durably report the bounded v480 tranche defined by the controlling Task
29
+ - Controlling Artifact: [v480 workflow schema enablement and creation-contract projection closure](../../tooling/dogfood/007-site-tooling-v480-workflow-schema-enablement-creation-projection-closure.trace.md)
30
+ - Boundary: Tooling owns execution and truthful result/evidence for this tranche; it does not acquire architecture/product authority outside the controlling Task
31
+
32
+ ## Required Context
33
+
34
+ - current-site-workspace
35
+ - Material: the complete Tiinex/site repository/worktree supplied with this Handoff
36
+ - Purpose: current source/material authority for implementation and validation
37
+ - Availability: available
38
+
39
+ - controlling-task
40
+ - Material: v480 workflow schema enablement and creation-contract projection closure Task
41
+ - Material Reference: [controlling Task](../../tooling/dogfood/007-site-tooling-v480-workflow-schema-enablement-creation-projection-closure.trace.md)
42
+ - Purpose: owns scope, Done Criteria, immutable schema authorities, non-goals, and terminal result expectations
43
+ - Availability: available
44
+
45
+ - published-handoff-schema
46
+ - Material: canonical maintained Tiinex Handoff schema published in Tiinex/docs
47
+ - Material Reference: [tiinex.handoff.v1](https://github.com/Tiinex/docs/blob/e713557f8be630967571d11a73f9ecd05ae329ce/.topics/.schemas/coordination/handoff/tiinex.handoff.v1.schema.md)
48
+ - Purpose: defines this artifact's transfer/context/retention semantics independently of packaging mechanics
49
+ - Availability: available
50
+
51
+ ## Reference Context
52
+
53
+ - workspace-config-direction
54
+ - Material: Site workspace-config bootstrap/discovery design direction
55
+ - Material Reference: [workspace config direction](../../collaboration/dogfood/002-site-workspace-config-bootstrap-discovery-direction.trace.md)
56
+ - Purpose: nearby collaboration direction that motivates richer durable workflow artifacts but is not required to implement v480
57
+ - Availability: available
58
+
59
+ - historical-repair-result
60
+ - Material: v479 historical dogfood canonical repair result
61
+ - Material Reference: [v479 result](../../tooling/dogfood/006-1-v479-historical-dogfood-canonical-repair-closure-result.trace.md)
62
+ - Purpose: prior synchronization evidence and regression context
63
+ - Availability: available
64
+
65
+ ## Retained Responsibilities
66
+
67
+ - architecture-review
68
+ - Retained By: Architect
69
+ - Responsibility: independently audit the returned worktree, reconcile architectural consequences, and decide whether the tranche is accepted
70
+ - Boundary: Tooling must report evidence truthfully but does not self-authorize the next architectural milestone
71
+
72
+ - next-role-routing
73
+ - Retained By: Architect
74
+ - Responsibility: decide and author any subsequent Handoff to Dev, Schemer, or another role
75
+ - Boundary: fresh Dev remains outside this transfer
76
+
77
+ ## Exclusions And Dependencies
78
+
79
+ - fresh-dev-execution
80
+ - Kind: excluded-scope
81
+ - Description: do not start or simulate the fresh Dev tranche as part of v480
82
+ - Responsible Party Or Role: Architect
83
+
84
+ - handoff-package-redesign
85
+ - Kind: excluded-scope
86
+ - Description: do not redesign ZIP/package/export semantics or infer transferred responsibility from package membership
87
+
88
+ - pre-master-cleanup
89
+ - Kind: excluded-scope
90
+ - Description: legacy docs/workspace reduction before master merge remains a later explicit cleanup gate
91
+ - Responsible Party Or Role: Architect
92
+
93
+ ## Completion Expectation
94
+
95
+ - Signal Kind: result
96
+ - Signal Meaning: return one durable Tooling result/evidence artifact for v480 plus the complete updated Tiinex/site repository/worktree ZIP, with blockers disclosed rather than hidden by degraded claims
97
+ - Return To: Architect
98
+
99
+ ## Interpretation Limits
100
+
101
+ - Does Not Mean: Tooling owns unrelated Site work, architecture decisions, future Dev execution, or everything physically present in the workspace ZIP
102
+ - Must Not Be Used To Claim: recipient acceptance before execution, successful completion before a result exists, package completeness as responsibility transfer, or authority beyond the controlling v480 Task
103
+
104
+ # Continuity Integrity
105
+
106
+ - [sha256-base64url-c14n-v2](https://github.com/Tiinex/docs/blob/053d46ce082d4ec261b82abc44ecca403d61e240/.topics/.validators/sha256-base64url-c14n-v2.validator.md)
107
+ - Towards: self
108
+ - Value:3ofXrWmZxu10BSCeydM6SXXQp0MpSH-Jow2SJs3n-pk