@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.
- package/LICENSE +201 -0
- package/NOTICE +31 -0
- package/README.md +26 -0
- package/docs/CONSUMER-CONTRACT.md +65 -0
- package/package.json +94 -0
- package/src/acceptance/knownScenarios.case.mjs +48 -0
- package/src/acceptance/knownScenarios.js +89 -0
- package/src/acceptance/postV423CanonicalTransitionProductVerticalSlice.case.mjs +774 -0
- package/src/acceptance/postV437M0ETimePortalProductParityClosure.case.mjs +51 -0
- package/src/acceptance/postV447M0FGithubSocialPublicationProductIntegration.case.mjs +33 -0
- package/src/acceptance/postV450M0ProductAcceptanceHardening.case.mjs +82 -0
- package/src/acceptance/postV470SchemaReadingContractMaterializationIdentitySourceCoalescingAuthorityCorrection.case.mjs +236 -0
- package/src/acceptance/recoveryAcceptance.case.mjs +196 -0
- package/src/adapters/adapter.definition.schema.json +33 -0
- package/src/adapters/archive/archive.adapter.case.mjs +212 -0
- package/src/adapters/export/export.adapter.js +79 -0
- package/src/adapters/git-native/git-native.adapter.js +43 -0
- package/src/adapters/github/github.adapter.case.mjs +843 -0
- package/src/adapters/github/github.adapter.js +395 -0
- package/src/adapters/github/github.issueEmbedded.js +262 -0
- package/src/adapters/github/github.issueMirror.js +309 -0
- package/src/adapters/github/github.issueSnapshot.js +475 -0
- package/src/adapters/github/github.issueSurface.js +188 -0
- package/src/adapters/github/github.issueTransport.js +237 -0
- package/src/adapters/github/github.publicationRead.js +24 -0
- package/src/adapters/github/github.readTransport.js +18 -0
- package/src/adapters/github/github.repoDiscovery.js +222 -0
- package/src/adapters/github/github.repoMirror.js +255 -0
- package/src/adapters/github/github.repoProxy.js +276 -0
- package/src/adapters/github/github.repoSurface.js +60 -0
- package/src/adapters/github/github.transportDiagnostics.js +68 -0
- package/src/adapters/local/local.adapter.case.mjs +72 -0
- package/src/adapters/local/local.adapter.js +188 -0
- package/src/adapters/registry.js +35 -0
- package/src/adapters/static/static.adapter.js +84 -0
- package/src/app/App.js +1 -0
- package/src/app/TiinexApp.jsx +822 -0
- package/src/app/appShell.views.jsx +58 -0
- package/src/app/artifactAuthoringCapability.js +49 -0
- package/src/app/boot/bootApp.js +19 -0
- package/src/app/boot/environment.js +1 -0
- package/src/app/canonicalAuthoringValues.js +4 -0
- package/src/app/canonicalCreationProductController.js +57 -0
- package/src/app/canonicalCreationProductSettlement.case.mjs +10 -0
- package/src/app/canonicalCreationProductSettlement.js +11 -0
- package/src/app/canonicalReferenceLocalCreateCommand.js +210 -0
- package/src/app/canonicalReferenceTargets.js +73 -0
- package/src/app/canonicalTransitionLocalCreateCommand.js +217 -0
- package/src/app/defaultWorkspaceStart.case.mjs +39 -0
- package/src/app/defaultWorkspaceStart.js +65 -0
- package/src/app/defaultWorkspaceStartCommand.js +55 -0
- package/src/app/durableLocalMutationPolicy.js +21 -0
- package/src/app/githubMaterializationSummary.js +69 -0
- package/src/app/githubProgress.js +25 -0
- package/src/app/githubSourceInput.js +47 -0
- package/src/app/githubSourceMaterializationCommand.js +97 -0
- package/src/app/githubSourceOperation.js +226 -0
- package/src/app/governanceDialogData.js +27 -0
- package/src/app/handoffPackageImportCommand.js +182 -0
- package/src/app/historyAuthority.js +53 -0
- package/src/app/initialWorkspaceBootstrapOperation.js +105 -0
- package/src/app/lineageCommand.js +118 -0
- package/src/app/lineageSourceRecovery.js +339 -0
- package/src/app/localDraftMutationCommand.js +174 -0
- package/src/app/localMaterialCommand.js +124 -0
- package/src/app/nodeGraphVerse.case.mjs +111 -0
- package/src/app/persistenceOwnership.js +92 -0
- package/src/app/productStateBoundary.js +7 -0
- package/src/app/providers/AppProviders.js +1 -0
- package/src/app/providers/LocaleProvider.js +1 -0
- package/src/app/providers/SchemaRegistryProvider.js +1 -0
- package/src/app/providers/WorkspaceProvider.js +1 -0
- package/src/app/publicTarget.js +251 -0
- package/src/app/publicTargetRestoreCommand.js +149 -0
- package/src/app/recordUi.cache.js +35 -0
- package/src/app/recordUi.js +11 -0
- package/src/app/routes/RouteSurface.js +1 -0
- package/src/app/routes/routes.js +1 -0
- package/src/app/runtimeState.js +54 -0
- package/src/app/schemaCurrentDeclaration.js +69 -0
- package/src/app/schemaFactoryLocalCreateCommand.js +101 -0
- package/src/app/schemaFactoryViewerProof.case.mjs +134 -0
- package/src/app/schemaFactoryViewerProof.js +20 -0
- package/src/app/schemaNavigationCommand.js +285 -0
- package/src/app/schemaNavigationMaterialization.js +171 -0
- package/src/app/schemaNavigationRuntimeCatalog.js +25 -0
- package/src/app/schemaNavigationState.js +66 -0
- package/src/app/schemaReadingContractQualification.js +91 -0
- package/src/app/schemaSourceRecovery.js +373 -0
- package/src/app/scrollPersistence.js +30 -0
- package/src/app/semanticOperationHistory.js +18 -0
- package/src/app/shareActionCommand.js +55 -0
- package/src/app/shareProjection.js +190 -0
- package/src/app/shell/AppShell.js +1 -0
- package/src/app/shell/Header.js +1 -0
- package/src/app/shell/Navigation.js +1 -0
- package/src/app/shell/SurfaceSwitcher.js +1 -0
- package/src/app/sourceTransportRefresh.js +176 -0
- package/src/app/startupOwnership.js +40 -0
- package/src/app/startupPresentation.case.mjs +34 -0
- package/src/app/startupPresentation.js +33 -0
- package/src/app/startupPresentation.views.jsx +21 -0
- package/src/app/startupRenderPhase.js +9 -0
- package/src/app/startupWorkspaceCommand.js +62 -0
- package/src/app/startupWorkspaceConfigApplication.js +49 -0
- package/src/app/statePersistenceScheduler.js +106 -0
- package/src/app/tiinexAppConfigPlan.js +108 -0
- package/src/app/tiinexAppConfigSource.js +349 -0
- package/src/app/tiinexAppStartupSource.js +79 -0
- package/src/app/tiinexHostedWorkspaceConventions.js +572 -0
- package/src/app/timePortalHistoricalRead.js +114 -0
- package/src/app/timePortalSnapshotResolution.js +53 -0
- package/src/app/urlMaterialCommand.js +24 -0
- package/src/app/useCanonicalPlacementSelectionOptions.js +9 -0
- package/src/app/useCanonicalReferenceSelectionOptions.js +8 -0
- package/src/app/useLocalMaterialIntake.js +68 -0
- package/src/app/useTimePortalProductController.jsx +111 -0
- package/src/app/useWorkspaceEntrypointIntake.js +77 -0
- package/src/app/useWorkspaceSelectionProductController.jsx +21 -0
- package/src/app/viewState.js +35 -0
- package/src/app/viewport.js +21 -0
- package/src/app/visualDormancy.js +286 -0
- package/src/app/workspaceContinuityNotices.js +32 -0
- package/src/app/workspaceDisplayCounts.js +9 -0
- package/src/app/workspaceEntrypointIntakeCommand.js +87 -0
- package/src/app/workspaceEntrypointProductRouting.case.mjs +20 -0
- package/src/app/workspaceExportCommand.js +21 -0
- package/src/app/workspaceExportDownload.js +23 -0
- package/src/app/workspaceExportExecutionCommand.js +10 -0
- package/src/app/workspaceGithubPublication.js +237 -0
- package/src/app/workspaceHandoffExport.js +56 -0
- package/src/app/workspaceHomeTarget.js +9 -0
- package/src/app/workspaceMulticolumn.js +113 -0
- package/src/app/workspaceNavigationParity.case.mjs +110 -0
- package/src/app/workspaceOpenProgress.js +26 -0
- package/src/app/workspacePlacementOptions.js +46 -0
- package/src/app/workspaceRecordActions.js +158 -0
- package/src/app/workspaceScopedInteraction.js +68 -0
- package/src/app/workspaceSelectionOriginContext.js +29 -0
- package/src/app/workspaceSelectionSession.js +54 -0
- package/src/app/workspaceSourceCloseCommand.js +25 -0
- package/src/app/workspaceSpineProductRouting.case.mjs +22 -0
- package/src/app/workspaceStartupTransition.js +32 -0
- package/src/app/workspaceWindow.js +85 -0
- package/src/artifacts/artifact.fixture.js +1 -0
- package/src/artifacts/artifact.identity.js +6 -0
- package/src/artifacts/artifact.identityAggregation.js +218 -0
- package/src/artifacts/artifact.model.js +2 -0
- package/src/artifacts/artifact.parse.case.mjs +196 -0
- package/src/artifacts/artifact.participantIndex.js +189 -0
- package/src/artifacts/fixtures/evidence.trace.md +50 -0
- package/src/artifacts/fixtures/topic.trace.md +33 -0
- package/src/artifacts/fixtures/unknown-schema.trace.md +25 -0
- package/src/audit/audit.findings.js +1 -0
- package/src/audit/audit.model.js +2 -0
- package/src/audit/audit.plan.js +13 -0
- package/src/audit/audit.report.js +12 -0
- package/src/audit/audit.severity.js +1 -0
- package/src/audit/audit.traverse.js +119 -0
- package/src/audit/integrity/auditIntegrity.checks.js +1 -0
- package/src/audit/integrity/auditIntegrity.compare.js +1 -0
- package/src/audit/lineage/auditLineage.load.js +1 -0
- package/src/audit/lineage/auditLineage.plan.js +1 -0
- package/src/audit/lineage/auditLineage.resolve.js +12 -0
- package/src/audit/sources/auditSources.boundaries.js +1 -0
- package/src/audit/sources/auditSources.checks.js +1 -0
- package/src/audit/validation/auditValidation.recheck.js +1 -0
- package/src/audit/validation/auditValidation.run.js +1 -0
- package/src/build.identity.js +15 -0
- package/src/commands/command.vocabulary.js +14 -0
- package/src/conformance/conformance.fixtures.js +151 -0
- package/src/conformance/conformance.run.js +238 -0
- package/src/data/applicationDataStore.js +23 -0
- package/src/data/companionAccess.js +35 -0
- package/src/diagnostics/events.js +1 -0
- package/src/diagnostics/invariant.js +1 -0
- package/src/diagnostics/schemaBindingChecks.js +1 -0
- package/src/diagnostics/schemaModuleChecks.js +1 -0
- package/src/diagnostics/sourceBoundaryChecks.js +5 -0
- package/src/diagnostics/sourceTransport.report.js +190 -0
- package/src/discovery/discovery.controls.js +7 -0
- package/src/export/export.plan.js +182 -0
- package/src/export/handoff.plan.js +50 -0
- package/src/export/package.builder.case.mjs +97 -0
- package/src/export/package.controlTopology.case.mjs +130 -0
- package/src/export/package.zip.case.mjs +33 -0
- package/src/graph/artifactGraph.model.js +344 -0
- package/src/graph/artifactGraph.project.js +139 -0
- package/src/graph/artifactGraph.worker.js +10 -0
- package/src/i18n/i18n.keys.js +1 -0
- package/src/i18n/i18n.provider.js +1 -0
- package/src/i18n/i18n.resolve.js +5 -0
- package/src/i18n/locales/en/common.json +4 -0
- package/src/i18n/locales/en/schemas/evidence.json +3 -0
- package/src/i18n/locales/en/schemas/presentation-surface.json +3 -0
- package/src/i18n/locales/en/schemas/preservation.json +3 -0
- package/src/i18n/locales/en/schemas/root.json +3 -0
- package/src/i18n/locales/en/schemas/schema-module.json +3 -0
- package/src/i18n/locales/en/schemas/topic.json +3 -0
- package/src/i18n/locales/en/surfaces/audit.json +3 -0
- package/src/i18n/locales/en/surfaces/create.json +3 -0
- package/src/i18n/locales/en/surfaces/detail.json +3 -0
- package/src/i18n/locales/en/surfaces/display-options.json +3 -0
- package/src/i18n/locales/en/surfaces/edit.json +3 -0
- package/src/i18n/locales/en/surfaces/feed.json +3 -0
- package/src/i18n/locales/en/surfaces/lineage.json +3 -0
- package/src/i18n/locales/en/surfaces/preview.json +3 -0
- package/src/i18n/locales/en/surfaces/share.json +3 -0
- package/src/i18n/locales/en/surfaces/source-settings.json +3 -0
- package/src/i18n/locales/en/surfaces/tree.json +3 -0
- package/src/i18n/locales/sv/common.json +4 -0
- package/src/i18n/locales/sv/schemas/evidence.json +3 -0
- package/src/i18n/locales/sv/schemas/presentation-surface.json +3 -0
- package/src/i18n/locales/sv/schemas/preservation.json +3 -0
- package/src/i18n/locales/sv/schemas/root.json +3 -0
- package/src/i18n/locales/sv/schemas/schema-module.json +3 -0
- package/src/i18n/locales/sv/schemas/topic.json +3 -0
- package/src/i18n/locales/sv/surfaces/audit.json +3 -0
- package/src/i18n/locales/sv/surfaces/create.json +3 -0
- package/src/i18n/locales/sv/surfaces/detail.json +3 -0
- package/src/i18n/locales/sv/surfaces/display-options.json +3 -0
- package/src/i18n/locales/sv/surfaces/edit.json +3 -0
- package/src/i18n/locales/sv/surfaces/feed.json +3 -0
- package/src/i18n/locales/sv/surfaces/lineage.json +3 -0
- package/src/i18n/locales/sv/surfaces/preview.json +3 -0
- package/src/i18n/locales/sv/surfaces/share.json +3 -0
- package/src/i18n/locales/sv/surfaces/source-settings.json +3 -0
- package/src/i18n/locales/sv/surfaces/tree.json +3 -0
- package/src/index.js +10 -0
- package/src/integrity/integrity.testFixture.js +9 -0
- package/src/interaction/interaction.spine.js +12 -0
- package/src/lineage/lineage.audit.js +1 -0
- package/src/lineage/lineage.edges.js +1 -0
- package/src/main.js +319 -0
- package/src/main.jsx +34 -0
- package/src/multiverse/multiverse.model.js +10 -0
- package/src/parity/poc.m1ParityScenarios.js +42 -0
- package/src/parity/poc.parityLedger.js +261 -0
- package/src/publication/publication.githubSocialContract.case.mjs +247 -0
- package/src/publication/publication.preflight.case.mjs +64 -0
- package/src/react/TiinexApplication.jsx +39 -0
- package/src/react/VerseHost.jsx +29 -0
- package/src/react/applicationDataContext.jsx +30 -0
- package/src/react.js +2 -0
- package/src/readers/modes/audit.reader.js +1 -0
- package/src/readers/modes/detail.reader.js +1 -0
- package/src/readers/modes/handover.reader.js +1 -0
- package/src/readers/modes/mobile.reader.js +1 -0
- package/src/readers/modes/print.reader.js +1 -0
- package/src/readers/modes/scan.reader.js +1 -0
- package/src/readers/reader.model.js +1 -0
- package/src/readers/reader.resolve.js +2 -0
- package/src/reingest/reingest.plan.case.mjs +65 -0
- package/src/runtime.js +54 -0
- package/src/schemas/README.md +99 -0
- package/src/schemas/coordination/handoff/tiinex.handoff.v1.schema.md +614 -0
- package/src/schemas/coordination/project/tiinex.project.v1.schema.md +311 -0
- package/src/schemas/core/decision/tiinex.decision.v1.schema.md +227 -0
- package/src/schemas/core/evidence/tiinex.evidence.v1.schema.md +318 -0
- package/src/schemas/core/feedback/tiinex.feedback.v1.schema.md +243 -0
- package/src/schemas/core/interpretation/.transitions/evidence-to-interpretation-transition-definition.trace.md +102 -0
- package/src/schemas/core/interpretation/tiinex.interpretation.v1.schema.md +308 -0
- package/src/schemas/core/preservation/tiinex.preservation.v1.schema.md +312 -0
- package/src/schemas/core/relation/.generation/reference-relation-generation-authority.trace.md +185 -0
- package/src/schemas/core/relation/.transitions/topic-references-task-transition-definition.trace.md +119 -0
- package/src/schemas/core/relation/tiinex.relation.v1.schema.md +240 -0
- package/src/schemas/core/relation/workspace/representation/tiinex.workspace.representation.v1.schema.md +550 -0
- package/src/schemas/core/signal/tiinex.signal.v1.schema.md +239 -0
- package/src/schemas/core/task/.transitions/create-task-transition-definition.trace.md +93 -0
- package/src/schemas/core/task/.transitions/topic-to-task-transition-definition.trace.md +102 -0
- package/src/schemas/core/task/task-semantic-package.trace.md +53 -0
- package/src/schemas/core/task/tiinex.task.v1-transitions.trace.md +33 -0
- package/src/schemas/core/task/tiinex.task.v1.authoring.js +65 -0
- package/src/schemas/core/task/tiinex.task.v1.schema.md +229 -0
- package/src/schemas/core/topic/.transitions/create-topic-transition-definition.trace.md +93 -0
- package/src/schemas/core/topic/tiinex.topic.v1-transitions.trace.md +33 -0
- package/src/schemas/core/topic/tiinex.topic.v1.schema.md +197 -0
- package/src/schemas/core/topic/topic-semantic-package.trace.md +53 -0
- package/src/schemas/discovery/finding/tiinex.discovery.finding.v1.schema.md +240 -0
- package/src/schemas/discovery/tiinex.discovery.v1.schema.md +294 -0
- package/src/schemas/manifest.json +367 -0
- package/src/schemas/origins.js +46 -0
- package/src/schemas/party/organization/tiinex.party.organization.v1.schema.md +290 -0
- package/src/schemas/party/role/tiinex.party.role.v1.schema.md +298 -0
- package/src/schemas/party/tiinex.party.v1.schema.js +14 -0
- package/src/schemas/party/tiinex.party.v1.schema.json +23 -0
- package/src/schemas/party/tiinex.party.v1.schema.md +311 -0
- package/src/schemas/party/tiinex.party.v1.schema.runtime.json +2033 -0
- package/src/schemas/party/tiinex.party.v1.schema.source.js +9 -0
- package/src/schemas/presentation/surface/tiinex.presentation.surface.v1.schema.md +476 -0
- package/src/schemas/reduction/tiinex.reduction.v1.schema.md +248 -0
- package/src/schemas/schema/module/tiinex.schema.module.v1.schema.md +465 -0
- package/src/schemas/schema.companionContract.case.mjs +259 -0
- package/src/schemas/schema.factory.case.mjs +256 -0
- package/src/schemas/schema.factory.viewerProjection.js +183 -0
- package/src/schemas/schemaMarkdownCatalog.js +19 -0
- package/src/schemas/tiinex.root.v1.schema.md +865 -0
- package/src/schemas/validation/finding/tiinex.validation.finding.v1.schema.md +309 -0
- package/src/schemas/validation/method/tiinex.validation.method.v1.schema.md +280 -0
- package/src/schemas/validation/report/tiinex.validation.report.v1.schema.md +300 -0
- package/src/schemas/workspace/tiinex.workspace.v1.schema.md +486 -0
- package/src/schemas/workspace/workspace.add.views.jsx +327 -0
- package/src/schemas/workspace/workspace.audit.views.jsx +160 -0
- package/src/schemas/workspace/workspace.auditBadge.views.jsx +98 -0
- package/src/schemas/workspace/workspace.canonicalReferenceDialog.views.jsx +63 -0
- package/src/schemas/workspace/workspace.canonicalTaskDialog.views.jsx +169 -0
- package/src/schemas/workspace/workspace.cardActions.js +9 -0
- package/src/schemas/workspace/workspace.cards.views.jsx +146 -0
- package/src/schemas/workspace/workspace.chrome.views.jsx +299 -0
- package/src/schemas/workspace/workspace.continuationDialog.views.jsx +80 -0
- package/src/schemas/workspace/workspace.discovery.views.jsx +63 -0
- package/src/schemas/workspace/workspace.discoveryRenderWindow.js +56 -0
- package/src/schemas/workspace/workspace.displayOptions.views.jsx +114 -0
- package/src/schemas/workspace/workspace.entrypointChoice.views.jsx +30 -0
- package/src/schemas/workspace/workspace.exportDialog.controller.jsx +40 -0
- package/src/schemas/workspace/workspace.exportDialog.views.jsx +142 -0
- package/src/schemas/workspace/workspace.governance.views.jsx +45 -0
- package/src/schemas/workspace/workspace.graph.views.jsx +134 -0
- package/src/schemas/workspace/workspace.lineage.views.jsx +307 -0
- package/src/schemas/workspace/workspace.read.views.jsx +105 -0
- package/src/schemas/workspace/workspace.recordActionButton.views.jsx +35 -0
- package/src/schemas/workspace/workspace.recordDialogs.views.jsx +257 -0
- package/src/schemas/workspace/workspace.selection.views.jsx +14 -0
- package/src/schemas/workspace/workspace.sourceReceipt.views.jsx +40 -0
- package/src/schemas/workspace/workspace.timePortal.views.jsx +56 -0
- package/src/schemas/workspace/workspace.tree.views.jsx +107 -0
- package/src/schemas/workspace/workspace.viewFormatting.js +172 -0
- package/src/schemas/workspace/workspace.views.jsx +210 -0
- package/src/source-settings/sourceSettings.model.js +7 -0
- package/src/sources/draft/draft.source.js +1 -0
- package/src/sources/github/github.loader.js +204 -0
- package/src/sources/github/github.permalink.js +1 -0
- package/src/sources/github/github.source.js +1 -0
- package/src/sources/github/github.transport.case.mjs +237 -0
- package/src/sources/github/github.transport.js +472 -0
- package/src/sources/local/local.source.js +1 -0
- package/src/sources/source.assetReferences.js +109 -0
- package/src/sources/source.boundaries.js +24 -0
- package/src/sources/source.identity.js +56 -0
- package/src/sources/source.model.case.mjs +26 -0
- package/src/sources/source.model.js +56 -0
- package/src/sources/source.presenter.js +66 -0
- package/src/sources/source.resolve.js +11 -0
- package/src/sources/static/static.source.js +1 -0
- package/src/sources/transport.policy.case.mjs +39 -0
- package/src/sources/transport.policy.js +81 -0
- package/src/storage/storage.policy.js +79 -0
- package/src/styles/app.css +8699 -0
- package/src/styles/responsive.css +10 -0
- package/src/styles/theme.css +4 -0
- package/src/styles/tokens.css +30 -0
- package/src/surfaces/audit/AuditSurface.js +1 -0
- package/src/surfaces/audit/audit.model.js +1 -0
- package/src/surfaces/audit/audit.render.js +1 -0
- package/src/surfaces/contracts.js +45 -0
- package/src/surfaces/create/CreateSurface.js +1 -0
- package/src/surfaces/create/create.model.js +1 -0
- package/src/surfaces/create/create.render.js +1 -0
- package/src/surfaces/detail/DetailSurface.js +1 -0
- package/src/surfaces/detail/detail.model.js +1 -0
- package/src/surfaces/detail/detail.render.js +1 -0
- package/src/surfaces/display-options/DisplayOptionsSurface.js +1 -0
- package/src/surfaces/display-options/displayOptions.model.js +1 -0
- package/src/surfaces/display-options/displayOptions.render.js +1 -0
- package/src/surfaces/edit/EditSurface.js +1 -0
- package/src/surfaces/edit/edit.model.js +1 -0
- package/src/surfaces/edit/edit.render.js +1 -0
- package/src/surfaces/feed/FeedSurface.js +1 -0
- package/src/surfaces/feed/feed.model.js +1 -0
- package/src/surfaces/feed/feed.render.js +1 -0
- package/src/surfaces/lineage/LineageSurface.js +1 -0
- package/src/surfaces/lineage/lineage.model.js +1 -0
- package/src/surfaces/lineage/lineage.render.js +1 -0
- package/src/surfaces/preview/PreviewSurface.js +1 -0
- package/src/surfaces/preview/preview.model.js +1 -0
- package/src/surfaces/preview/preview.render.js +1 -0
- package/src/surfaces/registry.js +58 -0
- package/src/surfaces/share/ShareSurface.js +1 -0
- package/src/surfaces/share/share.model.js +1 -0
- package/src/surfaces/share/share.render.js +1 -0
- package/src/surfaces/source-settings/SourceSettingsSurface.js +1 -0
- package/src/surfaces/source-settings/sourceSettings.model.js +1 -0
- package/src/surfaces/source-settings/sourceSettings.render.js +1 -0
- package/src/surfaces/surfaceContext.js +1 -0
- package/src/surfaces/tree/TreeSurface.js +1 -0
- package/src/surfaces/tree/tree.model.js +1 -0
- package/src/surfaces/tree/tree.render.js +1 -0
- package/src/tooling/portable/adapters/cli/cli.common-output.case.mjs +153 -0
- package/src/tooling/portable/adapters/cli/cli.handoff-sibling-allocation.case.mjs +52 -0
- package/src/tooling/portable/adapters/cli/cli.run.case.mjs +372 -0
- package/src/tooling/portable/adapters/cli/cli.summaryProjection.case.mjs +46 -0
- package/src/tooling/portable/audit/audit.capability.case.mjs +45 -0
- package/src/tooling/portable/fixtures/legacy-artifacts/collaboration/dogfood/001-tiinex-development-dogfood-collaboration-model.trace.fixture.txt +37 -0
- package/src/tooling/portable/fixtures/legacy-artifacts/handoff/tooling/001-v480-tooling-workflow-schema-enablement-handoff.trace.fixture.txt +108 -0
- 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
- package/src/tooling/portable/fixtures/legacy-artifacts/loom/role/001-loom-role.trace.fixture.txt +61 -0
- package/src/tooling/portable/fixtures/legacy-artifacts/sigma/role/001-1-sigma-role.trace.fixture.txt +61 -0
- 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
- 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
- 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
- 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
- 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
- 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
- package/src/tooling/portable/fixtures/legacy-artifacts/tooling/dogfood/001-1-site-tooling-v471-portable-lineage-authoring-closure-result.trace.fixture.txt +48 -0
- package/src/tooling/portable/fixtures/legacy-artifacts/tooling/dogfood/001-site-tooling-v471-portable-lineage-authoring-closure.trace.fixture.txt +39 -0
- package/src/tooling/portable/fixtures/legacy-artifacts/tooling/dogfood/002-1-v475-canonical-artifact-envelope-reference-integrity-validation.trace.fixture.txt +43 -0
- package/src/tooling/portable/fixtures/legacy-artifacts/tooling/dogfood/003-1-v476-canonical-authority-binding-integrity-method-lineage-alloca.trace.fixture.txt +42 -0
- package/src/tooling/portable/fixtures/legacy-artifacts/tooling/dogfood/027-handoff-package-workspace-archive-and-control-plane-minimality-audit.trace.fixture.txt +56 -0
- package/src/tooling/portable/fixtures/legacyArtifactFixtures.mjs +34 -0
- package/src/tooling/portable/grounding/grounding.capsule.case.mjs +65 -0
- package/src/tooling/portable/grounding/grounding.readiness.case.mjs +543 -0
- package/src/tooling/portable/grounding/grounding.semanticIntegration.case.mjs +131 -0
- package/src/tooling/portable/handoff/boundedWorkspaceRepresentation.case.mjs +103 -0
- package/src/tooling/portable/handoff/carrierLineage.fixedWidth.case.mjs +97 -0
- package/src/tooling/portable/handoff/coldStartQualification.case.mjs +293 -0
- package/src/tooling/portable/handoff/fixtures/027-invalid-audit-result.fixture.txt +192 -0
- package/src/tooling/portable/handoff/fixtures/027-invalid-return-handoff.fixture.txt +92 -0
- package/src/tooling/portable/handoff/fixtures/cold-start-qualification.v1.examples.json +60 -0
- package/src/tooling/portable/handoff/handoff.manufacture.case.mjs +293 -0
- package/src/tooling/portable/handoff/materialClosure.case.mjs +727 -0
- package/src/tooling/portable/handoff/multiRootManufacture.case.mjs +615 -0
- package/src/tooling/portable/handoff/operatorBridgeCore.case.mjs +205 -0
- package/src/tooling/portable/handoff/workspaceLandingPlan.case.mjs +143 -0
- package/src/tooling/portable/input/node.input.case.mjs +293 -0
- package/src/tooling/portable/lifecycle/lifecycle.readiness.case.mjs +179 -0
- package/src/tooling/portable/lineage/fixtures/lineage.integrity.repair-projection.v1.examples.json +605 -0
- package/src/tooling/portable/lineage/lineage.integrity.shared-capability.case.mjs +37 -0
- package/src/tooling/portable/lineage/publicationProviderReceipt.fixture.mjs +50 -0
- package/src/tooling/portable/package/fixtures/reference-relation-generation-authority.trace.md +84 -0
- package/src/tooling/portable/package/fixtures/tiinex.root.v1.package-authority.contract-fixture.md +64 -0
- package/src/tooling/portable/package/fixtures/tiinex.schema.generation.v1.generation-binding.contract-fixture.md +140 -0
- package/src/tooling/portable/package/fixtures/tiinex.schema.transition.companion.v1.contract-fixture.md +73 -0
- package/src/tooling/portable/package/fixtures/tiinex.semantic.package.v1.contract-fixture.md +147 -0
- package/src/tooling/portable/package/fixtures/tiinex.transition.definition.v1.package-contract-fixture.md +77 -0
- package/src/tooling/portable/providers/schema.providers.genericity.case.mjs +31 -0
- package/src/tooling/portable/reduction/reduction.preflight.case.mjs +298 -0
- package/src/tooling/portable/schema/fixtures/evidence-preservation-body.inheritance-record-fixture.md +65 -0
- package/src/tooling/portable/schema/fixtures/tiinex.portal.time.v1.contract-fixture.md +294 -0
- package/src/tooling/portable/schema/fixtures/tiinex.root.v1.contract-fixture.md +584 -0
- package/src/tooling/portable/schema/fixtures/tiinex.root.v1.machine-shape.contract-fixture.md +44 -0
- package/src/tooling/portable/schema/fixtures/tiinex.root.v1.ordinary-target.contract-fixture.md +630 -0
- package/src/tooling/portable/schema/fixtures/tiinex.schema.contract.v1.repeated-record.contract-fixture.md +69 -0
- package/src/tooling/portable/schema/fixtures/tiinex.schema.generation.v1.repeated-record.contract-fixture.md +98 -0
- package/src/tooling/portable/schema/fixtures/tiinex.schema.inheritance.v1.repeated-record.contract-fixture.md +58 -0
- package/src/tooling/portable/schema/fixtures/tiinex.task.v1.contract-fixture.md +165 -0
- package/src/tooling/portable/schema/fixtures/tiinex.transition.definition.v1.contract-fixture.md +744 -0
- package/src/tooling/portable/schema/fixtures/tiinex.transition.definition.v1.field-domain.contract-fixture.md +319 -0
- package/src/transitions/canonical-schema-cache/053d46ce082d4ec261b82abc44ecca403d61e240/tiinex.relation.v1.schema.md +240 -0
- package/src/transitions/canonical-schema-cache/053d46ce082d4ec261b82abc44ecca403d61e240/tiinex.schema.contract.v1.schema.md +391 -0
- package/src/transitions/canonical-schema-cache/053d46ce082d4ec261b82abc44ecca403d61e240/tiinex.schema.generation.v1.schema.md +379 -0
- package/src/transitions/canonical-schema-cache/053d46ce082d4ec261b82abc44ecca403d61e240/tiinex.schema.transition.companion.v1.schema.md +265 -0
- package/src/transitions/canonical-schema-cache/053d46ce082d4ec261b82abc44ecca403d61e240/tiinex.semantic.package.v1.schema.md +402 -0
- package/src/transitions/canonical-schema-cache/52ecdea0a75893882ce282214d155f70e1309c2a/tiinex.topic.v1.schema.md +197 -0
- package/src/transitions/canonical-schema-cache/d69b8ff55a56b8cb9282b8684db6a938a4435b94/tiinex.root.v1.schema.md +797 -0
- package/src/transitions/canonical-schema-cache/d69b8ff55a56b8cb9282b8684db6a938a4435b94/tiinex.transition.definition.v1.schema.md +1062 -0
- package/src/transitions/canonicalTransition.packageContracts.js +22 -0
- package/src/transitions/canonicalTransition.productDefaults.js +105 -0
- package/src/transitions/canonicalTransition.schemaCache.case.mjs +45 -0
- package/src/transitions/canonicalTransition.schemaCache.js +81 -0
- package/src/transitions/canonicalTransition.semanticPackage.js +146 -0
- package/src/transitions/record.transitions.case.mjs +88 -0
- package/src/transitions/transition.authorityRepresentation.js +55 -0
- package/src/transitions/transition.availabilityPlanner.js +376 -0
- package/src/transitions/transition.availabilitySemantics.js +150 -0
- package/src/transitions/transition.definitionReadProjection.js +107 -0
- package/src/transitions/transition.definitionRegistry.js +355 -0
- package/src/transitions/transition.definitionRegistryAggregation.js +21 -0
- package/src/transitions/transition.definitions.js +46 -0
- package/src/transitions/transition.explicitGenerationPlanner.js +58 -0
- package/src/transitions/transition.generationInputPlanner.js +19 -0
- package/src/transitions/transition.interpretationMaterializer.js +2 -0
- package/src/transitions/transition.invocationBindingPacket.js +52 -0
- package/src/transitions/transition.invocationBindingPlanner.js +467 -0
- package/src/transitions/transition.legacyShorthand.js +133 -0
- package/src/transitions/transition.localArtifactMaterializers.js +16 -0
- package/src/transitions/transition.localCreateCapability.js +111 -0
- package/src/transitions/transition.outputMaterializationPlanner.js +336 -0
- package/src/transitions/transition.parentReference.js +90 -0
- package/src/transitions/transition.presentation.js +43 -0
- package/src/transitions/transition.productPreparation.js +377 -0
- package/src/transitions/transition.productPresentation.browser.js +28 -0
- package/src/transitions/transition.productPresentation.js +55 -0
- package/src/transitions/transition.referenceCreateCapability.js +119 -0
- package/src/transitions/transition.referenceTarget.js +50 -0
- package/src/transitions/transition.relationMaterializer.js +2 -0
- package/src/transitions/transition.resultSemantics.js +453 -0
- package/src/transitions/transition.taskMaterializer.js +2 -0
- package/src/transitions/transition.topicMaterializer.js +2 -0
- package/src/transitions/transition.validate.case.mjs +58 -0
- package/src/ui/cards/ArtifactCard.js +1 -0
- package/src/ui/cards/SchemaCard.js +1 -0
- package/src/ui/cards/SourceCard.js +1 -0
- package/src/ui/dialog.presenter.js +24 -0
- package/src/ui/feedback/DegradedNotice.js +1 -0
- package/src/ui/feedback/EmptyState.js +1 -0
- package/src/ui/feedback/ValidationNotice.js +1 -0
- package/src/ui/forms/FormRenderer.js +1 -0
- package/src/ui/forms/fields/MarkdownField.js +1 -0
- package/src/ui/forms/fields/SelectField.js +1 -0
- package/src/ui/forms/fields/SourcePickerField.js +1 -0
- package/src/ui/forms/fields/TextField.js +1 -0
- package/src/ui/icon.paths.js +37 -0
- package/src/ui/layout/Panel.js +1 -0
- package/src/ui/layout/ResponsiveFrame.js +1 -0
- package/src/ui/layout/SplitView.js +1 -0
- package/src/ui/layout/Stack.js +1 -0
- package/src/ui/panels/DetailPanel.js +1 -0
- package/src/ui/panels/LineagePanel.js +1 -0
- package/src/ui/panels/SourcePanel.js +1 -0
- package/src/ui/primitives/Badge.js +1 -0
- package/src/ui/primitives/Badge.jsx +5 -0
- package/src/ui/primitives/Button.js +1 -0
- package/src/ui/primitives/Button.jsx +12 -0
- package/src/ui/primitives/Card.js +1 -0
- package/src/ui/primitives/Field.js +1 -0
- package/src/ui/primitives/Field.jsx +21 -0
- package/src/ui/primitives/Icon.jsx +90 -0
- package/src/ui/primitives/Modal.jsx +27 -0
- package/src/validation/i18n.js +37 -0
- package/src/validation/validateArtifact.case.mjs +41 -0
- package/src/verses/column/ColumnVerse.js +1 -0
- package/src/verses/column/column.model.js +6 -0
- package/src/verses/column/column.project.js +7 -0
- package/src/verses/context.js +26 -0
- package/src/verses/contracts.js +1 -0
- package/src/verses/hostRegistry.js +47 -0
- package/src/verses/registry.js +22 -0
- package/src/verses/universe.model.js +8 -0
- package/src/verses/universe.presenter.js +8 -0
- package/src/verses/universe.project.js +12 -0
- package/src/viewer.js +34 -0
- package/src/workspace.model.js +5 -0
- package/src/workspaces/workspace.actions.js +1 -0
- package/src/workspaces/workspace.artifactActions.js +56 -0
- package/src/workspaces/workspace.auditView.js +153 -0
- package/src/workspaces/workspace.candidates.js +149 -0
- package/src/workspaces/workspace.config.js +153 -0
- package/src/workspaces/workspace.configuredSource.js +68 -0
- package/src/workspaces/workspace.discoveryProgress.js +34 -0
- package/src/workspaces/workspace.discoveryView.js +386 -0
- package/src/workspaces/workspace.displayFilters.js +63 -0
- package/src/workspaces/workspace.displayOptions.js +58 -0
- package/src/workspaces/workspace.emptyStateCopy.js +24 -0
- package/src/workspaces/workspace.entrypointLifecycle.js +131 -0
- package/src/workspaces/workspace.entrypointViewIntent.js +83 -0
- package/src/workspaces/workspace.entrypoints.js +157 -0
- package/src/workspaces/workspace.feedSort.js +152 -0
- package/src/workspaces/workspace.import.js +212 -0
- package/src/workspaces/workspace.importConflicts.js +200 -0
- package/src/workspaces/workspace.importLifecycle.case.mjs +103 -0
- package/src/workspaces/workspace.lifecycle.case.mjs +353 -0
- package/src/workspaces/workspace.lifecycle.js +357 -0
- package/src/workspaces/workspace.lineageView.js +244 -0
- package/src/workspaces/workspace.localSourceLifecycle.js +91 -0
- package/src/workspaces/workspace.materialLedger.js +110 -0
- package/src/workspaces/workspace.materialReconciliation.case.mjs +164 -0
- package/src/workspaces/workspace.materialReconciliation.js +390 -0
- package/src/workspaces/workspace.memberIdentity.js +140 -0
- package/src/workspaces/workspace.model.js +2 -0
- package/src/workspaces/workspace.navigation.js +20 -0
- package/src/workspaces/workspace.openSemantics.js +33 -0
- package/src/workspaces/workspace.pathTree.js +132 -0
- package/src/workspaces/workspace.persistence.case.mjs +271 -0
- package/src/workspaces/workspace.persistence.js +469 -0
- package/src/workspaces/workspace.persistenceCache.js +41 -0
- package/src/workspaces/workspace.persistenceClear.js +45 -0
- package/src/workspaces/workspace.persistencePresentation.js +93 -0
- package/src/workspaces/workspace.persistenceRecovery.js +147 -0
- package/src/workspaces/workspace.persistenceRouteCache.js +82 -0
- package/src/workspaces/workspace.publicationReceipts.case.mjs +36 -0
- package/src/workspaces/workspace.publicationReceipts.js +56 -0
- package/src/workspaces/workspace.recoverabilityView.js +264 -0
- package/src/workspaces/workspace.route.js +432 -0
- package/src/workspaces/workspace.runtimeCanonical.js +18 -0
- package/src/workspaces/workspace.sourceMaterial.js +71 -0
- package/src/workspaces/workspace.sourceRecordPath.js +5 -0
- package/src/workspaces/workspace.sourceRecords.js +75 -0
- package/src/workspaces/workspace.store.js +3 -0
- package/src/workspaces/workspace.summary.js +116 -0
- 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
|