@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.
- package/LICENSE +201 -0
- package/NOTICE +31 -0
- package/README.md +45 -0
- package/package.json +176 -0
- package/src/actions/record.actions.js +312 -0
- package/src/adapters/adapter.contracts.js +143 -0
- package/src/adapters/archive/archive.adapter.js +502 -0
- package/src/adapters/archive/archive.portableChangeset.js +141 -0
- package/src/adapters/archive/archive.transport.js +124 -0
- package/src/artifacts/artifact.localDraft.js +27 -0
- package/src/artifacts/artifact.normalize.js +28 -0
- package/src/artifacts/artifact.parse.js +207 -0
- package/src/artifacts/artifact.record.js +83 -0
- package/src/audit/audit.run.js +103 -0
- package/src/audit/audit.summary.js +7 -0
- package/src/diagnostics/sourceBoundary.report.js +112 -0
- package/src/export/package.apply.js +349 -0
- package/src/export/package.builder.js +366 -0
- package/src/export/package.bytes.js +164 -0
- package/src/export/package.controlIntegrity.js +42 -0
- package/src/export/package.controlTopology.js +97 -0
- package/src/export/package.fileMap.js +174 -0
- package/src/export/package.manifest.js +401 -0
- package/src/export/package.preflight.js +204 -0
- package/src/export/package.sourceReference.js +81 -0
- package/src/export/package.workspaceContext.js +144 -0
- package/src/export/package.zip.js +128 -0
- package/src/export/tree.bundle.js +278 -0
- package/src/governance/governance.boundary.js +196 -0
- package/src/integrity/integrity.c14nV2.js +190 -0
- package/src/integrity/integrity.methodReference.js +73 -0
- package/src/integrity/integrity.validate.js +56 -0
- package/src/lineage/lineage.candidateResolution.js +46 -0
- package/src/lineage/lineage.githubIssueComment.js +106 -0
- package/src/lineage/lineage.githubIssueLocal.js +196 -0
- package/src/lineage/lineage.githubIssueTarget.js +89 -0
- package/src/lineage/lineage.integrity.js +133 -0
- package/src/lineage/lineage.materialPreference.js +26 -0
- package/src/lineage/lineage.model.js +63 -0
- package/src/lineage/lineage.parentAuthority.js +5 -0
- package/src/lineage/lineage.parentBinding.js +104 -0
- package/src/lineage/lineage.pathBasis.js +47 -0
- package/src/lineage/lineage.resolve.js +388 -0
- package/src/lineage/lineage.sourceScope.js +74 -0
- package/src/lineage/lineage.targetKeys.js +80 -0
- package/src/lineage/lineage.traverse.js +132 -0
- package/src/public/applicationProjection.js +236 -0
- package/src/public/companionResources.js +246 -0
- package/src/public/index.js +16 -0
- package/src/public/node.js +2 -0
- package/src/public/schemaAncestry.js +26 -0
- package/src/publication/publication.contract.js +196 -0
- package/src/publication/publication.preflight.js +159 -0
- package/src/publication/publication.targetContract.js +241 -0
- package/src/reingest/reingest.plan.js +162 -0
- package/src/release/plan.mjs +28 -0
- package/src/release/policy.mjs +100 -0
- package/src/release/run.mjs +74 -0
- package/src/schemas/capability.registry.js +226 -0
- package/src/schemas/companion.js +245 -0
- package/src/schemas/contracts.js +6 -0
- package/src/schemas/coordination/handoff/tiinex.handoff.v1.schema.js +14 -0
- package/src/schemas/coordination/handoff/tiinex.handoff.v1.schema.json +23 -0
- package/src/schemas/coordination/handoff/tiinex.handoff.v1.schema.runtime.json +4283 -0
- package/src/schemas/coordination/handoff/tiinex.handoff.v1.schema.source.js +9 -0
- package/src/schemas/coordination/project/tiinex.project.v1.schema.js +26 -0
- package/src/schemas/coordination/project/tiinex.project.v1.schema.json +23 -0
- package/src/schemas/coordination/project/tiinex.project.v1.schema.runtime.json +1985 -0
- package/src/schemas/coordination/project/tiinex.project.v1.schema.source.js +9 -0
- package/src/schemas/core/decision/tiinex.decision.v1.schema.js +14 -0
- package/src/schemas/core/decision/tiinex.decision.v1.schema.json +24 -0
- package/src/schemas/core/decision/tiinex.decision.v1.schema.runtime.json +1700 -0
- package/src/schemas/core/decision/tiinex.decision.v1.schema.source.js +9 -0
- package/src/schemas/core/evidence/tiinex.evidence.v1.capabilities.js +14 -0
- package/src/schemas/core/evidence/tiinex.evidence.v1.en.i18n.json +6 -0
- package/src/schemas/core/evidence/tiinex.evidence.v1.findings.js +9 -0
- package/src/schemas/core/evidence/tiinex.evidence.v1.presenter.js +1 -0
- package/src/schemas/core/evidence/tiinex.evidence.v1.schema.js +32 -0
- package/src/schemas/core/evidence/tiinex.evidence.v1.schema.json +24 -0
- package/src/schemas/core/evidence/tiinex.evidence.v1.schema.runtime.json +2184 -0
- package/src/schemas/core/evidence/tiinex.evidence.v1.schema.source.js +9 -0
- package/src/schemas/core/evidence/tiinex.evidence.v1.sv.i18n.json +6 -0
- package/src/schemas/core/evidence/tiinex.evidence.v1.transitions.js +1 -0
- package/src/schemas/core/evidence/tiinex.evidence.v1.validate.js +10 -0
- package/src/schemas/core/feedback/tiinex.feedback.v1.schema.js +14 -0
- package/src/schemas/core/feedback/tiinex.feedback.v1.schema.json +23 -0
- package/src/schemas/core/feedback/tiinex.feedback.v1.schema.runtime.json +1773 -0
- package/src/schemas/core/feedback/tiinex.feedback.v1.schema.source.js +9 -0
- package/src/schemas/core/interpretation/tiinex.interpretation.v1.capabilities.js +11 -0
- package/src/schemas/core/interpretation/tiinex.interpretation.v1.contract.js +40 -0
- package/src/schemas/core/interpretation/tiinex.interpretation.v1.en.i18n.json +9 -0
- package/src/schemas/core/interpretation/tiinex.interpretation.v1.findings.js +12 -0
- package/src/schemas/core/interpretation/tiinex.interpretation.v1.localMaterialization.js +89 -0
- package/src/schemas/core/interpretation/tiinex.interpretation.v1.presenter.js +8 -0
- package/src/schemas/core/interpretation/tiinex.interpretation.v1.schema.js +34 -0
- package/src/schemas/core/interpretation/tiinex.interpretation.v1.schema.json +23 -0
- package/src/schemas/core/interpretation/tiinex.interpretation.v1.schema.runtime.json +2029 -0
- package/src/schemas/core/interpretation/tiinex.interpretation.v1.schema.source.js +9 -0
- package/src/schemas/core/interpretation/tiinex.interpretation.v1.sv.i18n.json +9 -0
- package/src/schemas/core/interpretation/tiinex.interpretation.v1.transitions.js +1 -0
- package/src/schemas/core/interpretation/tiinex.interpretation.v1.validate.js +25 -0
- package/src/schemas/core/preservation/tiinex.preservation.v1.capabilities.js +14 -0
- package/src/schemas/core/preservation/tiinex.preservation.v1.en.i18n.json +6 -0
- package/src/schemas/core/preservation/tiinex.preservation.v1.findings.js +9 -0
- package/src/schemas/core/preservation/tiinex.preservation.v1.presenter.js +1 -0
- package/src/schemas/core/preservation/tiinex.preservation.v1.schema.js +31 -0
- package/src/schemas/core/preservation/tiinex.preservation.v1.schema.json +23 -0
- package/src/schemas/core/preservation/tiinex.preservation.v1.schema.runtime.json +2033 -0
- package/src/schemas/core/preservation/tiinex.preservation.v1.schema.source.js +9 -0
- package/src/schemas/core/preservation/tiinex.preservation.v1.sv.i18n.json +6 -0
- package/src/schemas/core/preservation/tiinex.preservation.v1.transitions.js +1 -0
- package/src/schemas/core/preservation/tiinex.preservation.v1.validate.js +10 -0
- package/src/schemas/core/relation/tiinex.relation.v1.capabilities.js +7 -0
- package/src/schemas/core/relation/tiinex.relation.v1.contract.js +3 -0
- package/src/schemas/core/relation/tiinex.relation.v1.en.i18n.json +4 -0
- package/src/schemas/core/relation/tiinex.relation.v1.findings.js +9 -0
- package/src/schemas/core/relation/tiinex.relation.v1.localMaterialization.js +153 -0
- package/src/schemas/core/relation/tiinex.relation.v1.presenter.js +3 -0
- package/src/schemas/core/relation/tiinex.relation.v1.schema.js +20 -0
- package/src/schemas/core/relation/tiinex.relation.v1.schema.json +23 -0
- package/src/schemas/core/relation/tiinex.relation.v1.schema.runtime.json +1668 -0
- package/src/schemas/core/relation/tiinex.relation.v1.schema.source.js +9 -0
- package/src/schemas/core/relation/tiinex.relation.v1.sv.i18n.json +4 -0
- package/src/schemas/core/relation/tiinex.relation.v1.transitions.js +1 -0
- package/src/schemas/core/relation/tiinex.relation.v1.validate.js +36 -0
- package/src/schemas/core/relation/workspace/representation/tiinex.workspace.representation.v1.capabilities.js +14 -0
- package/src/schemas/core/relation/workspace/representation/tiinex.workspace.representation.v1.contract.js +57 -0
- package/src/schemas/core/relation/workspace/representation/tiinex.workspace.representation.v1.en.i18n.json +4 -0
- package/src/schemas/core/relation/workspace/representation/tiinex.workspace.representation.v1.findings.js +13 -0
- package/src/schemas/core/relation/workspace/representation/tiinex.workspace.representation.v1.presenter.js +3 -0
- package/src/schemas/core/relation/workspace/representation/tiinex.workspace.representation.v1.schema.js +20 -0
- package/src/schemas/core/relation/workspace/representation/tiinex.workspace.representation.v1.schema.json +24 -0
- package/src/schemas/core/relation/workspace/representation/tiinex.workspace.representation.v1.schema.runtime.json +3315 -0
- package/src/schemas/core/relation/workspace/representation/tiinex.workspace.representation.v1.schema.source.js +9 -0
- package/src/schemas/core/relation/workspace/representation/tiinex.workspace.representation.v1.sv.i18n.json +4 -0
- package/src/schemas/core/relation/workspace/representation/tiinex.workspace.representation.v1.transitions.js +1 -0
- package/src/schemas/core/relation/workspace/representation/tiinex.workspace.representation.v1.validate.js +78 -0
- package/src/schemas/core/signal/tiinex.signal.v1.schema.js +14 -0
- package/src/schemas/core/signal/tiinex.signal.v1.schema.json +23 -0
- package/src/schemas/core/signal/tiinex.signal.v1.schema.runtime.json +1733 -0
- package/src/schemas/core/signal/tiinex.signal.v1.schema.source.js +9 -0
- package/src/schemas/core/task/tiinex.task.v1.capabilities.js +11 -0
- package/src/schemas/core/task/tiinex.task.v1.contract.js +3 -0
- package/src/schemas/core/task/tiinex.task.v1.en.i18n.json +15 -0
- package/src/schemas/core/task/tiinex.task.v1.findings.js +18 -0
- package/src/schemas/core/task/tiinex.task.v1.localMaterialization.js +148 -0
- package/src/schemas/core/task/tiinex.task.v1.presenter.js +8 -0
- package/src/schemas/core/task/tiinex.task.v1.schema.js +35 -0
- package/src/schemas/core/task/tiinex.task.v1.schema.json +23 -0
- package/src/schemas/core/task/tiinex.task.v1.schema.runtime.json +1708 -0
- package/src/schemas/core/task/tiinex.task.v1.schema.source.js +9 -0
- package/src/schemas/core/task/tiinex.task.v1.sv.i18n.json +15 -0
- package/src/schemas/core/task/tiinex.task.v1.transitions.js +3 -0
- package/src/schemas/core/task/tiinex.task.v1.validate.js +41 -0
- package/src/schemas/core/topic/tiinex.topic.v1.capabilities.js +14 -0
- package/src/schemas/core/topic/tiinex.topic.v1.creation.js +46 -0
- package/src/schemas/core/topic/tiinex.topic.v1.en.i18n.json +8 -0
- package/src/schemas/core/topic/tiinex.topic.v1.findings.js +11 -0
- package/src/schemas/core/topic/tiinex.topic.v1.localMaterialization.js +135 -0
- package/src/schemas/core/topic/tiinex.topic.v1.presenter.js +1 -0
- package/src/schemas/core/topic/tiinex.topic.v1.schema.js +34 -0
- package/src/schemas/core/topic/tiinex.topic.v1.schema.json +23 -0
- package/src/schemas/core/topic/tiinex.topic.v1.schema.runtime.json +1699 -0
- package/src/schemas/core/topic/tiinex.topic.v1.schema.source.js +9 -0
- package/src/schemas/core/topic/tiinex.topic.v1.sv.i18n.json +8 -0
- package/src/schemas/core/topic/tiinex.topic.v1.transitions.js +31 -0
- package/src/schemas/core/topic/tiinex.topic.v1.validate.js +11 -0
- package/src/schemas/creation.capability.js +289 -0
- package/src/schemas/creation.contracts.js +334 -0
- package/src/schemas/creation.executionSnapshot.js +79 -0
- package/src/schemas/creation.factoryQualification.js +73 -0
- package/src/schemas/creation.renderer.js +244 -0
- package/src/schemas/creation.representation.js +279 -0
- package/src/schemas/creation.rootMetadata.js +6 -0
- package/src/schemas/creation.schemaReferences.js +65 -0
- package/src/schemas/discovery/finding/tiinex.discovery.finding.v1.schema.js +14 -0
- package/src/schemas/discovery/finding/tiinex.discovery.finding.v1.schema.json +23 -0
- package/src/schemas/discovery/finding/tiinex.discovery.finding.v1.schema.runtime.json +1873 -0
- package/src/schemas/discovery/finding/tiinex.discovery.finding.v1.schema.source.js +9 -0
- package/src/schemas/discovery/tiinex.discovery.v1.schema.js +14 -0
- package/src/schemas/discovery/tiinex.discovery.v1.schema.json +23 -0
- package/src/schemas/discovery/tiinex.discovery.v1.schema.runtime.json +1839 -0
- package/src/schemas/discovery/tiinex.discovery.v1.schema.source.js +9 -0
- package/src/schemas/generic.artifact.module.js +25 -0
- package/src/schemas/party/organization/tiinex.party.organization.v1.schema.js +26 -0
- package/src/schemas/party/organization/tiinex.party.organization.v1.schema.json +23 -0
- package/src/schemas/party/organization/tiinex.party.organization.v1.schema.runtime.json +2249 -0
- package/src/schemas/party/organization/tiinex.party.organization.v1.schema.source.js +9 -0
- package/src/schemas/party/role/tiinex.party.role.v1.schema.js +26 -0
- package/src/schemas/party/role/tiinex.party.role.v1.schema.json +24 -0
- package/src/schemas/party/role/tiinex.party.role.v1.schema.runtime.json +2091 -0
- package/src/schemas/party/role/tiinex.party.role.v1.schema.source.js +9 -0
- package/src/schemas/presentation/surface/tiinex.presentation.surface.v1.capabilities.js +14 -0
- package/src/schemas/presentation/surface/tiinex.presentation.surface.v1.en.i18n.json +4 -0
- package/src/schemas/presentation/surface/tiinex.presentation.surface.v1.findings.js +1 -0
- package/src/schemas/presentation/surface/tiinex.presentation.surface.v1.presenter.js +1 -0
- package/src/schemas/presentation/surface/tiinex.presentation.surface.v1.schema.js +29 -0
- package/src/schemas/presentation/surface/tiinex.presentation.surface.v1.schema.json +21 -0
- package/src/schemas/presentation/surface/tiinex.presentation.surface.v1.schema.runtime.json +2180 -0
- package/src/schemas/presentation/surface/tiinex.presentation.surface.v1.schema.source.js +9 -0
- package/src/schemas/presentation/surface/tiinex.presentation.surface.v1.sv.i18n.json +4 -0
- package/src/schemas/presentation/surface/tiinex.presentation.surface.v1.transitions.js +1 -0
- package/src/schemas/presentation/surface/tiinex.presentation.surface.v1.validate.js +1 -0
- package/src/schemas/reduction/tiinex.reduction.v1.schema.js +26 -0
- package/src/schemas/reduction/tiinex.reduction.v1.schema.json +23 -0
- package/src/schemas/reduction/tiinex.reduction.v1.schema.runtime.json +1733 -0
- package/src/schemas/reduction/tiinex.reduction.v1.schema.source.js +9 -0
- package/src/schemas/reference.shapes.js +33 -0
- package/src/schemas/registry.js +36 -0
- package/src/schemas/resolver.js +13 -0
- package/src/schemas/schema/module/tiinex.schema.module.v1.capabilities.js +14 -0
- package/src/schemas/schema/module/tiinex.schema.module.v1.en.i18n.json +4 -0
- package/src/schemas/schema/module/tiinex.schema.module.v1.findings.js +1 -0
- package/src/schemas/schema/module/tiinex.schema.module.v1.presenter.js +1 -0
- package/src/schemas/schema/module/tiinex.schema.module.v1.schema.js +29 -0
- package/src/schemas/schema/module/tiinex.schema.module.v1.schema.json +21 -0
- package/src/schemas/schema/module/tiinex.schema.module.v1.schema.runtime.json +2093 -0
- package/src/schemas/schema/module/tiinex.schema.module.v1.schema.source.js +9 -0
- package/src/schemas/schema/module/tiinex.schema.module.v1.sv.i18n.json +4 -0
- package/src/schemas/schema/module/tiinex.schema.module.v1.transitions.js +1 -0
- package/src/schemas/schema/module/tiinex.schema.module.v1.validate.js +1 -0
- package/src/schemas/schema.factory.descriptor.js +104 -0
- package/src/schemas/schema.githubSourceTarget.js +131 -0
- package/src/schemas/schema.identity.js +10 -0
- package/src/schemas/schema.reference.js +133 -0
- package/src/schemas/schema.source.js +239 -0
- package/src/schemas/tiinex.root.v1.capabilities.js +14 -0
- package/src/schemas/tiinex.root.v1.classify.js +55 -0
- package/src/schemas/tiinex.root.v1.en.i18n.json +24 -0
- package/src/schemas/tiinex.root.v1.fallback.js +84 -0
- package/src/schemas/tiinex.root.v1.findings.js +19 -0
- package/src/schemas/tiinex.root.v1.presenter.js +5 -0
- package/src/schemas/tiinex.root.v1.schema.js +29 -0
- package/src/schemas/tiinex.root.v1.schema.json +24 -0
- package/src/schemas/tiinex.root.v1.schema.runtime.json +1574 -0
- package/src/schemas/tiinex.root.v1.schema.source.js +9 -0
- package/src/schemas/tiinex.root.v1.sv.i18n.json +24 -0
- package/src/schemas/tiinex.root.v1.transitions.js +1 -0
- package/src/schemas/tiinex.root.v1.validate.js +36 -0
- package/src/schemas/validation/finding/tiinex.validation.finding.v1.schema.js +14 -0
- package/src/schemas/validation/finding/tiinex.validation.finding.v1.schema.json +23 -0
- package/src/schemas/validation/finding/tiinex.validation.finding.v1.schema.runtime.json +2027 -0
- package/src/schemas/validation/finding/tiinex.validation.finding.v1.schema.source.js +9 -0
- package/src/schemas/validation/method/tiinex.validation.method.v1.schema.js +14 -0
- package/src/schemas/validation/method/tiinex.validation.method.v1.schema.json +23 -0
- package/src/schemas/validation/method/tiinex.validation.method.v1.schema.runtime.json +1848 -0
- package/src/schemas/validation/method/tiinex.validation.method.v1.schema.source.js +9 -0
- package/src/schemas/validation/report/tiinex.validation.report.v1.schema.js +14 -0
- package/src/schemas/validation/report/tiinex.validation.report.v1.schema.json +23 -0
- package/src/schemas/validation/report/tiinex.validation.report.v1.schema.runtime.json +2015 -0
- package/src/schemas/validation/report/tiinex.validation.report.v1.schema.source.js +9 -0
- package/src/schemas/workspace/tiinex.workspace.v1.capabilities.js +12 -0
- package/src/schemas/workspace/tiinex.workspace.v1.en.i18n.json +7 -0
- package/src/schemas/workspace/tiinex.workspace.v1.findings.js +5 -0
- package/src/schemas/workspace/tiinex.workspace.v1.presenter.js +27 -0
- package/src/schemas/workspace/tiinex.workspace.v1.schema.js +30 -0
- package/src/schemas/workspace/tiinex.workspace.v1.schema.json +23 -0
- package/src/schemas/workspace/tiinex.workspace.v1.schema.runtime.json +1596 -0
- package/src/schemas/workspace/tiinex.workspace.v1.schema.source.js +9 -0
- package/src/schemas/workspace/tiinex.workspace.v1.sv.i18n.json +7 -0
- package/src/schemas/workspace/tiinex.workspace.v1.transitions.js +10 -0
- package/src/schemas/workspace/tiinex.workspace.v1.validate.js +10 -0
- package/src/sources/github/github.issueTarget.js +127 -0
- package/src/sources/origin.references.js +249 -0
- package/src/sources/source.explicitTargets.js +49 -0
- package/src/sources/transport.levels.js +107 -0
- package/src/tooling/portable/adapters/cli/cli.cold-start-input.js +34 -0
- package/src/tooling/portable/adapters/cli/cli.command-input.js +455 -0
- package/src/tooling/portable/adapters/cli/cli.common-author.js +249 -0
- package/src/tooling/portable/adapters/cli/cli.common-output.js +330 -0
- package/src/tooling/portable/adapters/cli/cli.editor-assistance.js +13 -0
- package/src/tooling/portable/adapters/cli/cli.ground-materialize.js +96 -0
- package/src/tooling/portable/adapters/cli/cli.ground-recovery.js +99 -0
- package/src/tooling/portable/adapters/cli/cli.handoff-manufacture.js +345 -0
- package/src/tooling/portable/adapters/cli/cli.handoff-sibling-allocation.js +31 -0
- package/src/tooling/portable/adapters/cli/cli.help.js +80 -0
- package/src/tooling/portable/adapters/cli/cli.land.js +13 -0
- package/src/tooling/portable/adapters/cli/cli.local-output.js +72 -0
- package/src/tooling/portable/adapters/cli/cli.material-policy.js +6 -0
- package/src/tooling/portable/adapters/cli/cli.operator-bridge.js +18 -0
- package/src/tooling/portable/adapters/cli/cli.reduction-input.js +14 -0
- package/src/tooling/portable/adapters/cli/cli.run.js +434 -0
- package/src/tooling/portable/adapters/llm/llm.entrypoint.js +34 -0
- package/src/tooling/portable/adapters/node/checkpoint.verify.js +267 -0
- package/src/tooling/portable/adapters/node/handoff.manufacture.bootstrap.js +109 -0
- package/src/tooling/portable/adapters/node/handoff.manufacture.enumeration.js +94 -0
- package/src/tooling/portable/adapters/node/handoff.manufacture.js +193 -0
- package/src/tooling/portable/adapters/node/handoff.manufacture.multiRoot.js +49 -0
- package/src/tooling/portable/adapters/node/handoff.manufacture.packageParent.js +130 -0
- package/src/tooling/portable/adapters/node/handoff.manufacture.requirements.js +353 -0
- package/src/tooling/portable/adapters/node/handoff.manufacture.scope.js +147 -0
- package/src/tooling/portable/adapters/node/workspaceCarrier.manufacture.js +62 -0
- package/src/tooling/portable/assets/asset.operations.js +170 -0
- package/src/tooling/portable/audit/audit.capability.js +119 -0
- package/src/tooling/portable/bootstrap/artifact.result.selfverify.mjs +109 -0
- package/src/tooling/portable/bootstrap/bootstrap.case.mjs +43 -0
- package/src/tooling/portable/bootstrap/tiinex.llm.bootstrap.md +814 -0
- package/src/tooling/portable/bootstrap/tiinex.llm.bootstrap.pointer.json +25 -0
- package/src/tooling/portable/checkpoint/portable.checkpoint.js +89 -0
- package/src/tooling/portable/conformance/checkpoint.qualification.js +271 -0
- package/src/tooling/portable/draft/draft.create.js +389 -0
- package/src/tooling/portable/draft/draft.crud.js +175 -0
- package/src/tooling/portable/draft/draft.exact.js +173 -0
- package/src/tooling/portable/draft/draft.operations.js +265 -0
- package/src/tooling/portable/draft/draft.qualification.js +45 -0
- package/src/tooling/portable/draft/draft.set.js +193 -0
- package/src/tooling/portable/draft/draft.validation-context.js +7 -0
- package/src/tooling/portable/editor/authoring.parent.js +37 -0
- package/src/tooling/portable/editor/editor.assistance.js +221 -0
- package/src/tooling/portable/editor/staged.validation.js +96 -0
- package/src/tooling/portable/engine.facade.js +468 -0
- package/src/tooling/portable/findings.js +92 -0
- package/src/tooling/portable/grounding/grounding.capsule.js +128 -0
- package/src/tooling/portable/grounding/grounding.continuity.js +283 -0
- package/src/tooling/portable/grounding/grounding.participantAuthority.js +20 -0
- package/src/tooling/portable/grounding/grounding.planningContext.js +34 -0
- package/src/tooling/portable/grounding/grounding.readiness.authority.js +17 -0
- package/src/tooling/portable/grounding/grounding.readiness.js +316 -0
- package/src/tooling/portable/grounding/grounding.readiness.support.js +245 -0
- package/src/tooling/portable/grounding/grounding.sourceEvidence.js +71 -0
- package/src/tooling/portable/grounding/grounding.workContext.js +72 -0
- package/src/tooling/portable/grounding/grounding.workProvenance.js +153 -0
- package/src/tooling/portable/handoff/carrierLineage.js +214 -0
- package/src/tooling/portable/handoff/carrierProfile.js +54 -0
- package/src/tooling/portable/handoff/carrierProjection.js +193 -0
- package/src/tooling/portable/handoff/carrierProjection.routeQualification.js +228 -0
- package/src/tooling/portable/handoff/carrierProjection.shared.js +7 -0
- package/src/tooling/portable/handoff/carrierProjection.workspaces.js +54 -0
- package/src/tooling/portable/handoff/coldConsumerEntrypoint.js +185 -0
- package/src/tooling/portable/handoff/coldStartQualification.contract.js +184 -0
- package/src/tooling/portable/handoff/coldStartQualification.grounding.js +392 -0
- package/src/tooling/portable/handoff/coldStartQualification.js +22 -0
- package/src/tooling/portable/handoff/coldStartQualification.materials.js +364 -0
- package/src/tooling/portable/handoff/coldStartQualification.observation.js +220 -0
- package/src/tooling/portable/handoff/coldStartQualification.run.js +81 -0
- package/src/tooling/portable/handoff/coldStartQualification.shared.js +57 -0
- package/src/tooling/portable/handoff/coldStartRolePointers.js +39 -0
- package/src/tooling/portable/handoff/contextAudit.js +247 -0
- package/src/tooling/portable/handoff/contracts/tiinex.handoff.package.v1.schema.md +409 -0
- package/src/tooling/portable/handoff/handoffAuthoringPlan.js +35 -0
- package/src/tooling/portable/handoff/handoffEndpointProjection.js +61 -0
- package/src/tooling/portable/handoff/handoffLeafProjection.js +91 -0
- package/src/tooling/portable/handoff/humanOutputPresentation.js +21 -0
- package/src/tooling/portable/handoff/manufacture.js +84 -0
- package/src/tooling/portable/handoff/materialClosure.archiveV2.binding.js +72 -0
- package/src/tooling/portable/handoff/materialClosure.archiveV2.direct.js +160 -0
- package/src/tooling/portable/handoff/materialClosure.archiveV2.indexes.js +36 -0
- package/src/tooling/portable/handoff/materialClosure.archiveV2.js +247 -0
- package/src/tooling/portable/handoff/materialClosure.archiveV2.projectionProvider.js +44 -0
- package/src/tooling/portable/handoff/materialClosure.archiveV2.workspace.js +226 -0
- package/src/tooling/portable/handoff/materialClosure.descriptor.js +169 -0
- package/src/tooling/portable/handoff/materialClosure.inputBinding.js +372 -0
- package/src/tooling/portable/handoff/materialClosure.inputBinding.support.js +62 -0
- package/src/tooling/portable/handoff/materialClosure.materialized.js +143 -0
- package/src/tooling/portable/handoff/materialClosure.materials.js +116 -0
- package/src/tooling/portable/handoff/materialClosure.package.js +181 -0
- package/src/tooling/portable/handoff/materialClosure.plan.js +204 -0
- package/src/tooling/portable/handoff/materialClosure.readiness.js +36 -0
- package/src/tooling/portable/handoff/materialClosure.requirements.js +137 -0
- package/src/tooling/portable/handoff/operatorContextProjection.js +105 -0
- package/src/tooling/portable/handoff/pointerEntrypoint.js +138 -0
- package/src/tooling/portable/handoff/qualifiedHandoffFixture.js +34 -0
- package/src/tooling/portable/handoff/recipientV2.artifactFirst.build.js +321 -0
- package/src/tooling/portable/handoff/recipientV2.artifactFirst.closure.js +126 -0
- package/src/tooling/portable/handoff/recipientV2.artifactFirst.inspect.js +194 -0
- package/src/tooling/portable/handoff/recipientV2.artifactFirst.materials.js +207 -0
- package/src/tooling/portable/handoff/recipientV2.artifactFirst.projection.js +69 -0
- package/src/tooling/portable/handoff/recipientV2.artifactFirst.roles.js +166 -0
- package/src/tooling/portable/handoff/recipientV2.artifactFirst.routes.js +113 -0
- package/src/tooling/portable/handoff/recipientV2.artifactFirst.shared.js +87 -0
- package/src/tooling/portable/handoff/recipientV2.artifactFirst.workspaces.js +160 -0
- package/src/tooling/portable/handoff/recipientV2.artifactFirstPhase1.js +44 -0
- package/src/tooling/portable/handoff/recipientV2.artifactInspection.js +55 -0
- package/src/tooling/portable/handoff/recipientV2.artifacts.js +174 -0
- package/src/tooling/portable/handoff/recipientV2.coldProjection.js +24 -0
- package/src/tooling/portable/handoff/recipientV2.delivery.js +48 -0
- package/src/tooling/portable/handoff/recipientV2.endpointRolePointers.js +179 -0
- package/src/tooling/portable/handoff/recipientV2.entryContract.js +28 -0
- package/src/tooling/portable/handoff/recipientV2.humanOutput.js +78 -0
- package/src/tooling/portable/handoff/recipientV2.inspect.helpers.js +218 -0
- package/src/tooling/portable/handoff/recipientV2.inspect.js +194 -0
- package/src/tooling/portable/handoff/recipientV2.inspect.pathToken.js +9 -0
- package/src/tooling/portable/handoff/recipientV2.inspect.projection.js +58 -0
- package/src/tooling/portable/handoff/recipientV2.inspect.workspaces.js +177 -0
- package/src/tooling/portable/handoff/recipientV2.lineage.js +142 -0
- package/src/tooling/portable/handoff/recipientV2.packageV1.build.js +147 -0
- package/src/tooling/portable/handoff/recipientV2.packageV1.constants.js +4 -0
- package/src/tooling/portable/handoff/recipientV2.packageV1.contract.js +101 -0
- package/src/tooling/portable/handoff/recipientV2.packageV1.inspect.helpers.js +126 -0
- package/src/tooling/portable/handoff/recipientV2.packageV1.inspect.js +185 -0
- package/src/tooling/portable/handoff/recipientV2.packageV1.js +12 -0
- package/src/tooling/portable/handoff/recipientV2.packageV1.shared.js +24 -0
- package/src/tooling/portable/handoff/recipientV2.packageV1.workspaceProjection.js +22 -0
- package/src/tooling/portable/handoff/recipientV2.pointer.js +40 -0
- package/src/tooling/portable/handoff/recipientV2.routeSelection.js +16 -0
- package/src/tooling/portable/handoff/recipientV2.topology.helpers.js +20 -0
- package/src/tooling/portable/handoff/recipientV2.topology.js +320 -0
- package/src/tooling/portable/handoff/recipientV2.topology.materials.js +70 -0
- package/src/tooling/portable/handoff/recipientV2.topology.workspaces.js +193 -0
- package/src/tooling/portable/handoff/recipientV2.transportManifest.js +123 -0
- package/src/tooling/portable/handoff/recipientV2.workspaceRepresentation.js +163 -0
- package/src/tooling/portable/handoff/routeArtifactConformance.js +130 -0
- package/src/tooling/portable/handoff/toolingBootstrap.js +67 -0
- package/src/tooling/portable/handoff/transportCompanion.js +175 -0
- package/src/tooling/portable/handoff/workspaceByteProvider.archive.js +95 -0
- package/src/tooling/portable/handoff/workspaceByteProvider.js +271 -0
- package/src/tooling/portable/handoff/workspaceCarrier.manufacture.js +93 -0
- package/src/tooling/portable/handoff/workspaceLandingPlan.js +142 -0
- package/src/tooling/portable/handoff/workspacePackageSources.js +105 -0
- package/src/tooling/portable/handoff/workspaceQualifiedReference.js +10 -0
- package/src/tooling/portable/handoff/workspaceSourceIdentity.js +52 -0
- package/src/tooling/portable/handoff/workspaceTargetConformance.js +134 -0
- package/src/tooling/portable/host/host.capabilities.js +181 -0
- package/src/tooling/portable/host/tool.bindings.js +357 -0
- package/src/tooling/portable/host/tool.receiptNormalization.js +141 -0
- package/src/tooling/portable/index.js +52 -0
- package/src/tooling/portable/input/node.input.js +184 -0
- package/src/tooling/portable/input/portable.input.js +249 -0
- package/src/tooling/portable/lifecycle/lifecycle.action.js +11 -0
- package/src/tooling/portable/lifecycle/lifecycle.material.js +173 -0
- package/src/tooling/portable/lifecycle/lifecycle.operations.js +34 -0
- package/src/tooling/portable/lifecycle/lifecycle.readiness.js +247 -0
- package/src/tooling/portable/lineage/lineage.integrity.apply.audit.js +22 -0
- package/src/tooling/portable/lineage/lineage.integrity.apply.evidence.js +36 -0
- package/src/tooling/portable/lineage/lineage.integrity.apply.js +306 -0
- package/src/tooling/portable/lineage/lineage.integrity.apply.structure.js +178 -0
- package/src/tooling/portable/lineage/lineage.integrity.plan.js +377 -0
- package/src/tooling/portable/lineage/lineage.integrity.projection.human.js +82 -0
- package/src/tooling/portable/lineage/lineage.integrity.projection.js +349 -0
- package/src/tooling/portable/lineage/lineage.operations.js +32 -0
- package/src/tooling/portable/lineage/lineage.print.js +398 -0
- package/src/tooling/portable/lineage/lineage.print.render.js +88 -0
- package/src/tooling/portable/lineage/lineage.print.utils.js +58 -0
- package/src/tooling/portable/lineage/lineage.publicationProviderReceipts.js +141 -0
- package/src/tooling/portable/lineage/lineage.publicationQualification.js +183 -0
- package/src/tooling/portable/lineage/lineage.search.js +301 -0
- package/src/tooling/portable/live/live.artifact.js +192 -0
- package/src/tooling/portable/live/live.export.js +107 -0
- package/src/tooling/portable/live/live.lineage.closure.js +71 -0
- package/src/tooling/portable/live/live.lineage.js +338 -0
- package/src/tooling/portable/live/live.protocol.js +181 -0
- package/src/tooling/portable/materialization/durable.materialize.js +162 -0
- package/src/tooling/portable/materialization/epistemic.plan.js +239 -0
- package/src/tooling/portable/materialization/loaded.parent.js +54 -0
- package/src/tooling/portable/materialization/materialization.facade.js +30 -0
- package/src/tooling/portable/operation.catalog.js +393 -0
- package/src/tooling/portable/operation.catalog.package.js +183 -0
- package/src/tooling/portable/operation.result.js +25 -0
- package/src/tooling/portable/orchestration/task.prepare.js +191 -0
- package/src/tooling/portable/output/artifact.result.package.js +308 -0
- package/src/tooling/portable/output/deterministic.zip.js +88 -0
- package/src/tooling/portable/output/node.artifact-set.js +223 -0
- package/src/tooling/portable/output/node.draft.js +41 -0
- package/src/tooling/portable/output/node.zip.js +39 -0
- package/src/tooling/portable/output/recipientV2.zip.js +59 -0
- package/src/tooling/portable/overview/blockingCue.js +16 -0
- package/src/tooling/portable/overview/operatingOverview.js +413 -0
- package/src/tooling/portable/package/generation.binding.js +314 -0
- package/src/tooling/portable/package/generation.binding.projection.js +128 -0
- package/src/tooling/portable/package/material.graph.js +236 -0
- package/src/tooling/portable/package/runtime.package.js +321 -0
- package/src/tooling/portable/package/schema.transition.companion.js +196 -0
- package/src/tooling/portable/package/semantic.package.graph.js +272 -0
- package/src/tooling/portable/package/semantic.package.js +203 -0
- package/src/tooling/portable/package/semantic.package.schema-resolution.js +158 -0
- package/src/tooling/portable/package/semantic.package.transition-registry.js +189 -0
- package/src/tooling/portable/package/semantic.package.types.js +18 -0
- package/src/tooling/portable/providers/schema.bootstrap.provenance.js +10 -0
- package/src/tooling/portable/providers/schema.provider.qualification.js +52 -0
- package/src/tooling/portable/providers/schema.providers.js +458 -0
- package/src/tooling/portable/publication/runtime.publication.js +53 -0
- package/src/tooling/portable/qualification.js +150 -0
- package/src/tooling/portable/reduction/reduction.composition.js +229 -0
- package/src/tooling/portable/reduction/reduction.eligibility.helpers.js +258 -0
- package/src/tooling/portable/reduction/reduction.eligibility.js +191 -0
- package/src/tooling/portable/reduction/reduction.operations.js +30 -0
- package/src/tooling/portable/reduction/reduction.preflight.js +85 -0
- package/src/tooling/portable/reduction/reduction.shared.js +173 -0
- package/src/tooling/portable/schema/bootstrap/canonical.pack.js +24 -0
- package/src/tooling/portable/schema/bootstrap/docs-3988951208eb9a8926e84ab42625d4b42fa00c2d/party/role/tiinex.party.role.v1.schema.md +289 -0
- package/src/tooling/portable/schema/bootstrap/docs-3988951208eb9a8926e84ab42625d4b42fa00c2d/validation/report/tiinex.validation.report.v1.schema.md +300 -0
- package/src/tooling/portable/schema/bootstrap/qualified-local-root/tiinex.root.v1.runtime-projection.json +48 -0
- package/src/tooling/portable/schema/bootstrap/qualified-local-root/tiinex.root.v1.schema.md +865 -0
- package/src/tooling/portable/schema/contract.compile.js +406 -0
- package/src/tooling/portable/schema/contract.compile.utils.js +9 -0
- package/src/tooling/portable/schema/contract.constraints.js +117 -0
- package/src/tooling/portable/schema/contract.envelope.validate.js +177 -0
- package/src/tooling/portable/schema/contract.field-domain.compile.js +399 -0
- package/src/tooling/portable/schema/contract.field-domain.js +247 -0
- package/src/tooling/portable/schema/contract.field-shape.compile.js +34 -0
- package/src/tooling/portable/schema/contract.inheritance.inline.js +103 -0
- package/src/tooling/portable/schema/contract.inheritance.js +210 -0
- package/src/tooling/portable/schema/contract.inheritance.record.js +76 -0
- package/src/tooling/portable/schema/contract.machine-shape.js +309 -0
- package/src/tooling/portable/schema/contract.project.js +81 -0
- package/src/tooling/portable/schema/contract.semantic-resolution.js +82 -0
- package/src/tooling/portable/schema/contract.validate.js +0 -0
- package/src/tooling/portable/schema/lexical.shape.v1.js +338 -0
- package/src/tooling/portable/schema/llm.companion.js +108 -0
- package/src/tooling/portable/schema/named.declarations.js +162 -0
- package/src/tooling/portable/schema/ordinary.contract.js +193 -0
- package/src/tooling/portable/schema/ordinary.fields.js +205 -0
- package/src/tooling/portable/schema/qualifiedLocalRoot.projection.js +70 -0
- package/src/tooling/portable/schema/qualifiedLocalRoot.runtime.js +170 -0
- package/src/tooling/portable/schema/schema.contract.js +465 -0
- package/src/tooling/portable/schema/schema.guide.js +326 -0
- package/src/tooling/portable/schema/schema.snapshot.js +119 -0
- package/src/tooling/portable/session/portable.session.js +145 -0
- package/src/tooling/portable/transfer/transfer.plan.js +102 -0
- package/src/transitions/record.transitions.js +484 -0
- package/src/transitions/transition.validate.js +129 -0
- package/src/validation/findings.js +76 -0
- package/src/validation/validateArtifact.js +216 -0
- package/src/workspaces/workspace.entrypointCapability.js +44 -0
- package/src/workspaces/workspace.materialRole.js +242 -0
- package/src/workspaces/workspace.recordPaths.js +426 -0
- 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
|
+
});
|