@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,259 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import { existsSync, readdirSync } from 'node:fs';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import { schemaRegistry } from '@tiinex/core/schemas/registry.js';
|
|
6
|
+
import { schemaReadPresentation } from '@tiinex/core/schemas/companion.js';
|
|
7
|
+
import { resolveFindingMessage } from '../validation/i18n.js';
|
|
8
|
+
import { normalizeFinding } from '@tiinex/core/validation/findings.js';
|
|
9
|
+
|
|
10
|
+
const root = fileURLToPath(new URL('../..', import.meta.url)).replace(/[\\/]$/, '');
|
|
11
|
+
const schemaRoot = join(root, 'src/schemas');
|
|
12
|
+
|
|
13
|
+
function walk(dir) {
|
|
14
|
+
const out = [];
|
|
15
|
+
for (const entry of readdirSync(dir, { withFileTypes: true })) {
|
|
16
|
+
const full = join(dir, entry.name);
|
|
17
|
+
if (entry.isDirectory()) out.push(...walk(full));
|
|
18
|
+
else out.push(full.replace(root + '/', '').replaceAll('\\', '/'));
|
|
19
|
+
}
|
|
20
|
+
return out;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const files = walk(schemaRoot);
|
|
24
|
+
for (const module of schemaRegistry.modules) {
|
|
25
|
+
assert(files.some((file) => file.endsWith(`/${module.id}.schema.md`) || file === `src/schemas/${module.id}.schema.md`), `${module.id} must use versioned schema snapshot naming`);
|
|
26
|
+
assert(files.some((file) => file.endsWith(`/${module.id}.schema.json`) || file === `src/schemas/${module.id}.schema.json`), `${module.id} must use versioned binding naming`);
|
|
27
|
+
assert(files.some((file) => file.endsWith(`/${module.id}.schema.js`) || file === `src/schemas/${module.id}.schema.js`), `${module.id} must use versioned module naming`);
|
|
28
|
+
if (module.findings?.codes) {
|
|
29
|
+
for (const [code, definition] of Object.entries(module.findings.codes)) {
|
|
30
|
+
assert.equal(definition.messageKey || code, code, `${module.id} finding ${code} should use the finding code as message key unless explicitly justified`);
|
|
31
|
+
const rendered = resolveFindingMessage(normalizeFinding({ code, source: module.id }, { schemaId: module.id }), { locale: 'en', schemaId: module.id });
|
|
32
|
+
assert.notEqual(rendered, code, `${module.id} finding ${code} must render through i18n or have an explicit fallback`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const inertSurfaceOrFormFiles = files.filter((file) => /\.(feed|tree|lineage|detail|preview|share|graph)\.presenter\.js$|\.(create|edit|quick|full)\.form\.js$/.test(file));
|
|
38
|
+
assert.deepEqual(inertSurfaceOrFormFiles, [], 'inactive surface presenter/form scaffold files should not ship before a real divergent owner exists');
|
|
39
|
+
|
|
40
|
+
const sv = resolveFindingMessage(normalizeFinding({ code: 'topic.body.thin', source: 'tiinex.topic.v1' }, { schemaId: 'tiinex.topic.v1' }), { locale: 'sv', schemaId: 'tiinex.topic.v1' });
|
|
41
|
+
assert.equal(sv, 'Topic body is thin; reader may not understand the active topic thread.', 'missing locale-specific key should fall back explicitly to English pack');
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
const foundationCriticalReadCases = Object.freeze([
|
|
45
|
+
Object.freeze({
|
|
46
|
+
schemaId: 'tiinex.party.role.v1',
|
|
47
|
+
expectedSections: Object.freeze(['ROLE IDENTITY', 'ROLE BOUNDARY', 'AUTHORITY AND RESPONSIBILITY BOUNDARY', 'HOLDER RELATIONSHIP', 'INTERPRETATION LIMITS']),
|
|
48
|
+
meaningful: 'Role Label: Loom',
|
|
49
|
+
markdown: `# Continuity Context
|
|
50
|
+
|
|
51
|
+
- Current
|
|
52
|
+
- Current Schema: [tiinex.party.role.v1](https://github.com/Tiinex/docs/blob/3988951208eb9a8926e84ab42625d4b42fa00c2d/.topics/.schemas/party/role/tiinex.party.role.v1.schema.md)
|
|
53
|
+
- Created At: 2026-08-30 00:00:00
|
|
54
|
+
- Summary: Loom role
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
# Loom Role
|
|
59
|
+
|
|
60
|
+
## Role Identity
|
|
61
|
+
|
|
62
|
+
- Role Label: Loom
|
|
63
|
+
- Role Kind: portable Tooling role
|
|
64
|
+
|
|
65
|
+
## Role Boundary
|
|
66
|
+
|
|
67
|
+
- In Scope: bounded Tooling work
|
|
68
|
+
- Out Of Scope: canonical schema meaning
|
|
69
|
+
|
|
70
|
+
## Authority And Responsibility Boundary
|
|
71
|
+
|
|
72
|
+
- May Do: implement bounded shared mechanics
|
|
73
|
+
- Does Not Authorize: unrelated authority
|
|
74
|
+
|
|
75
|
+
## Holder Relationship
|
|
76
|
+
|
|
77
|
+
- Holder State: assignable only by explicit handoff
|
|
78
|
+
|
|
79
|
+
## Interpretation Limits
|
|
80
|
+
|
|
81
|
+
- Does Not Prove: current human holder
|
|
82
|
+
- Must Not Be Treated As: personal identity
|
|
83
|
+
`
|
|
84
|
+
}),
|
|
85
|
+
Object.freeze({
|
|
86
|
+
schemaId: 'tiinex.project.v1',
|
|
87
|
+
expectedSections: Object.freeze(['PROJECT IDENTITY', 'PROJECT PURPOSE AND SCOPE', 'PARTIES AND RESOURCES', 'COORDINATION STATE', 'MILESTONES AND OUTCOMES', 'INTERPRETATION LIMITS']),
|
|
88
|
+
meaningful: 'Description: Tiinex Viewer',
|
|
89
|
+
markdown: `# Continuity Context
|
|
90
|
+
|
|
91
|
+
- Current
|
|
92
|
+
- Current Schema: [tiinex.project.v1](https://github.com/Tiinex/docs/blob/3988951208eb9a8926e84ab42625d4b42fa00c2d/.topics/.schemas/coordination/project/tiinex.project.v1.schema.md)
|
|
93
|
+
- Created At: 2026-08-26 00:00:00
|
|
94
|
+
- Summary: Tiinex Viewer
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
# Tiinex Viewer
|
|
99
|
+
|
|
100
|
+
## Project Identity
|
|
101
|
+
|
|
102
|
+
- Description: Tiinex Viewer
|
|
103
|
+
- Boundary: human-readable Site product
|
|
104
|
+
|
|
105
|
+
## Project Purpose And Scope
|
|
106
|
+
|
|
107
|
+
- Description: make Tiinex artifacts understandable
|
|
108
|
+
- Boundary: presentation without semantic rewriting
|
|
109
|
+
|
|
110
|
+
## Parties And Resources
|
|
111
|
+
|
|
112
|
+
- Relevant Parties: Anchor; Loom; Sigma
|
|
113
|
+
- Relevant Resources: Site source and canonical Docs schemas
|
|
114
|
+
|
|
115
|
+
## Coordination State
|
|
116
|
+
|
|
117
|
+
- Description: active Foundation work
|
|
118
|
+
- Boundary: current project state only
|
|
119
|
+
|
|
120
|
+
## Milestones And Outcomes
|
|
121
|
+
|
|
122
|
+
- Description: schema-owned reading coverage
|
|
123
|
+
- Boundary: deterministic product evidence
|
|
124
|
+
|
|
125
|
+
## Interpretation Limits
|
|
126
|
+
|
|
127
|
+
- Does Not Prove: release readiness
|
|
128
|
+
- Must Not Be Treated As: publication authority
|
|
129
|
+
`
|
|
130
|
+
}),
|
|
131
|
+
Object.freeze({
|
|
132
|
+
schemaId: 'tiinex.party.organization.v1',
|
|
133
|
+
expectedSections: Object.freeze(['ORGANIZATION IDENTITY', 'ORGANIZATION BOUNDARY', 'UNIT OR PARENT RELATIONSHIP', 'REPRESENTATION BOUNDARY', 'INTERPRETATION LIMITS']),
|
|
134
|
+
meaningful: 'Organization Label: Tiinex',
|
|
135
|
+
markdown: `# Continuity Context
|
|
136
|
+
|
|
137
|
+
- Current
|
|
138
|
+
- Current Schema: [tiinex.party.organization.v1](https://github.com/Tiinex/docs/blob/911d4cf990e35ce25a56e8f376d296e327c48260/.topics/.schemas/party/organization/tiinex.party.organization.v1.schema.md)
|
|
139
|
+
- Created At: 2026-08-26 00:00:00
|
|
140
|
+
- Summary: Tiinex
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
# Tiinex
|
|
145
|
+
|
|
146
|
+
## Organization Identity
|
|
147
|
+
|
|
148
|
+
- Organization Label: Tiinex
|
|
149
|
+
- Organization Kind: project organization
|
|
150
|
+
|
|
151
|
+
## Organization Boundary
|
|
152
|
+
|
|
153
|
+
- In Scope: the open-source Tiinex project
|
|
154
|
+
- Out Of Scope: unrelated personal activity
|
|
155
|
+
|
|
156
|
+
## Unit Or Parent Relationship
|
|
157
|
+
|
|
158
|
+
- Parent Organization: none declared
|
|
159
|
+
|
|
160
|
+
## Representation Boundary
|
|
161
|
+
|
|
162
|
+
- Representation State: organizational continuity only
|
|
163
|
+
|
|
164
|
+
## Interpretation Limits
|
|
165
|
+
|
|
166
|
+
- Does Not Prove: legal status
|
|
167
|
+
- Must Not Be Treated As: representation authority
|
|
168
|
+
`
|
|
169
|
+
}),
|
|
170
|
+
Object.freeze({
|
|
171
|
+
schemaId: 'tiinex.reduction.v1',
|
|
172
|
+
expectedSections: Object.freeze(['SOURCE CONTEXT', 'CARRY-FORWARD STATE', 'LOSS AND UNCERTAINTY', 'VALIDATION']),
|
|
173
|
+
meaningful: 'Source Scope: Foundation grounding inputs',
|
|
174
|
+
markdown: `# Continuity Context
|
|
175
|
+
|
|
176
|
+
- Current
|
|
177
|
+
- Current Schema: [tiinex.reduction.v1](https://github.com/Tiinex/docs/blob/8435cd46a3773a38301659da716785dc6465072c/.topics/.schemas/reduction/tiinex.reduction.v1.schema.md)
|
|
178
|
+
- Created At: 2026-09-01 00:00:00
|
|
179
|
+
- Summary: Foundation grounding checkpoint reduction
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
# Foundation Grounding Checkpoint Reduction
|
|
184
|
+
|
|
185
|
+
## Source Context
|
|
186
|
+
|
|
187
|
+
- Source Scope: Foundation grounding inputs
|
|
188
|
+
- Source Boundary: qualified carried material only
|
|
189
|
+
|
|
190
|
+
## Carry-Forward State
|
|
191
|
+
|
|
192
|
+
- Preserved State: current Foundation constraints and accepted decisions
|
|
193
|
+
|
|
194
|
+
## Loss And Uncertainty
|
|
195
|
+
|
|
196
|
+
- Known Loss: omitted historical detail remains recoverable from source
|
|
197
|
+
- Uncertainty: no release-readiness claim
|
|
198
|
+
|
|
199
|
+
## Validation
|
|
200
|
+
|
|
201
|
+
- Reduction Rule: no source item is removed before durable representation exists
|
|
202
|
+
`
|
|
203
|
+
})
|
|
204
|
+
]);
|
|
205
|
+
|
|
206
|
+
for (const item of foundationCriticalReadCases) {
|
|
207
|
+
const module = schemaRegistry.byId.get(item.schemaId);
|
|
208
|
+
assert(module, `${item.schemaId} must be an exact registered companion`);
|
|
209
|
+
assert.equal(Boolean(module.artifactCreation), false, `${item.schemaId} companion must remain presentation/read-only`);
|
|
210
|
+
const presentation = schemaReadPresentation({ path: `.topics/${item.schemaId}.trace.md`, markdown: item.markdown });
|
|
211
|
+
assert.equal(presentation.schema, item.schemaId);
|
|
212
|
+
assert.equal(presentation.companionId, item.schemaId);
|
|
213
|
+
assert.equal(presentation.readMode, 'schema-owned');
|
|
214
|
+
assert.equal(presentation.readState, 'schema-owned');
|
|
215
|
+
assert.equal(presentation.schemaCoverage, 'exact-companion');
|
|
216
|
+
assert.equal(presentation.fallbackUsed, false);
|
|
217
|
+
assert.deepEqual(presentation.sections.map((section) => section.label), item.expectedSections);
|
|
218
|
+
assert(presentation.sections.some((section) => section.value.includes(item.meaningful)), `${item.schemaId} must expose meaningful schema-owned read content`);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
assert.equal(schemaRegistry.byId.has('tiinex.party.v1'), false, 'party parent source dependency must not become a fifth read companion');
|
|
222
|
+
const partyParentFallback = schemaReadPresentation({
|
|
223
|
+
markdown: `# Continuity Context
|
|
224
|
+
|
|
225
|
+
- Current
|
|
226
|
+
- Current Schema: tiinex.party.v1
|
|
227
|
+
- Created At: 2026-09-01 00:00:00
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
# Party
|
|
232
|
+
|
|
233
|
+
## Party Identity
|
|
234
|
+
|
|
235
|
+
- Label: bounded party
|
|
236
|
+
`
|
|
237
|
+
});
|
|
238
|
+
assert.equal(partyParentFallback.readMode, 'root-fallback', 'unregistered parent source dependency must preserve Root fallback');
|
|
239
|
+
|
|
240
|
+
const secondaryFamilyFallback = schemaReadPresentation({
|
|
241
|
+
markdown: `# Continuity Context
|
|
242
|
+
|
|
243
|
+
- Current
|
|
244
|
+
- Current Schema: tiinex.resource.v1
|
|
245
|
+
- Created At: 2026-09-01 00:00:00
|
|
246
|
+
|
|
247
|
+
---
|
|
248
|
+
|
|
249
|
+
# Resource
|
|
250
|
+
|
|
251
|
+
## Resource Identity
|
|
252
|
+
|
|
253
|
+
- Description: secondary family remains intentionally unimplemented
|
|
254
|
+
`
|
|
255
|
+
});
|
|
256
|
+
assert.equal(secondaryFamilyFallback.readMode, 'root-fallback', 'secondary unimplemented families must preserve Root fallback');
|
|
257
|
+
assert.equal(secondaryFamilyFallback.schemaCoverage, 'unknown-schema');
|
|
258
|
+
|
|
259
|
+
console.log('✓ schema companion contract is flat, versioned, i18n-backed, and free of inert scaffold files, with bounded Foundation-critical read coverage');
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import { resolveSchemaCapabilities } from '@tiinex/core/schemas/capability.registry.js';
|
|
4
|
+
import { buildArtifactCreationContract, renderArtifactCreationCandidateMarkdown, validateArtifactCreationResult } from '@tiinex/core/schemas/creation.contracts.js';
|
|
5
|
+
import { GENERIC_ARTIFACT_CREATION_RENDERER_ID } from '@tiinex/core/schemas/creation.renderer.js';
|
|
6
|
+
import { schemaRegistry } from '@tiinex/core/schemas/registry.js';
|
|
7
|
+
import { compilePortableSchemaContractChain } from '@tiinex/core/tooling/portable/schema/contract.compile.js';
|
|
8
|
+
|
|
9
|
+
const decision = resolveSchemaCapabilities({ schemaId: 'tiinex.decision.v1' }).descriptor;
|
|
10
|
+
const evidence = resolveSchemaCapabilities({ schemaId: 'tiinex.evidence.v1' }).descriptor;
|
|
11
|
+
const handoff = resolveSchemaCapabilities({ schemaId: 'tiinex.handoff.v1' }).descriptor;
|
|
12
|
+
const validationFinding = resolveSchemaCapabilities({ schemaId: 'tiinex.validation.finding.v1' }).descriptor;
|
|
13
|
+
const validationMethod = resolveSchemaCapabilities({ schemaId: 'tiinex.validation.method.v1' }).descriptor;
|
|
14
|
+
const validationReport = resolveSchemaCapabilities({ schemaId: 'tiinex.validation.report.v1' }).descriptor;
|
|
15
|
+
const root = resolveSchemaCapabilities({ schemaId: 'tiinex.root.v1' }).descriptor;
|
|
16
|
+
|
|
17
|
+
assert.equal(root.actions.create.status, 'unavailable', 'Root must remain abstract/non-creatable');
|
|
18
|
+
|
|
19
|
+
assert.equal(decision.actions.create.status, 'unavailable');
|
|
20
|
+
assert.equal(decision.factory.generation.ready, true);
|
|
21
|
+
assert.equal(decision.factory.invocation.create.state, 'unavailable');
|
|
22
|
+
assert.deepEqual(decision.factory.creation.inputBindings.map((item) => item.kind), [
|
|
23
|
+
'root-current-summary-body-title', 'section-body', 'section-body', 'section-body'
|
|
24
|
+
]);
|
|
25
|
+
assert.equal(decision.factory.creation.residualRequiredShape.length, 0);
|
|
26
|
+
const decisionBodyProse = decision.factory.creation.requiredShape.find((item) => item.primitive?.kind === 'body-prose-block');
|
|
27
|
+
assert.ok(decisionBodyProse, 'Decision must compile its unheaded body prose through the generic Required Shape primitive');
|
|
28
|
+
assert.equal(decisionBodyProse.primitive.position, 'after-first-body-heading-before-first-second-level-section');
|
|
29
|
+
|
|
30
|
+
assert.equal(evidence.actions.create.status, 'unavailable');
|
|
31
|
+
assert.equal(evidence.factory.generation.ready, true);
|
|
32
|
+
assert.equal(evidence.factory.invocation.create.state, 'unavailable');
|
|
33
|
+
assert.deepEqual(evidence.factory.inheritance.lineage, ['tiinex.root.v1', 'tiinex.preservation.v1', 'tiinex.evidence.v1']);
|
|
34
|
+
assert.equal(evidence.factory.inheritance.resolution.state, 'qualified');
|
|
35
|
+
assert.equal(evidence.factory.inheritance.resolution.applications.length, 1);
|
|
36
|
+
assert.equal(evidence.factory.inheritance.resolution.declarations.length, 1);
|
|
37
|
+
assert.equal(evidence.factory.inheritance.resolution.declarations[0].sourceGroup, 'Parent Preservation Specialization');
|
|
38
|
+
assert.equal(Object.hasOwn(schemaRegistry.byId.get('tiinex.evidence.v1')?.binding || {}, 'inheritanceCompanions'), false, 'Evidence must not depend on loose inheritanceCompanions binding authority');
|
|
39
|
+
const evidenceOverride = evidence.factory.inheritance.resolution.applications[0];
|
|
40
|
+
assert.equal(evidenceOverride.operation, 'override');
|
|
41
|
+
assert.equal(evidenceOverride.parentNode, 'Schema Validation Contract / Preservation Body / Required Shape');
|
|
42
|
+
assert.equal(evidenceOverride.childNode, 'Schema Validation Contract / Evidence Body / Required Shape');
|
|
43
|
+
assert.deepEqual(new Set(evidenceOverride.deactivatedContributions.map((item) => item.group)), new Set([
|
|
44
|
+
'Preservation Body', 'Preserved Material', 'Preservation Act', 'Fidelity And Loss', 'Custody Or Storage Boundary'
|
|
45
|
+
]));
|
|
46
|
+
assert.ok(evidence.factory.sections.some((section) => section.group === 'Provenance'
|
|
47
|
+
&& section.contributors.some((item) => item.sourceSchemaId === 'tiinex.preservation.v1')
|
|
48
|
+
&& section.contributors.some((item) => item.sourceSchemaId === 'tiinex.evidence.v1')), 'Evidence inherited provenance contributors must remain visible');
|
|
49
|
+
for (const removed of ['Preserved Material', 'Preservation Act', 'Fidelity And Loss', 'Custody Or Storage Boundary']) {
|
|
50
|
+
assert.equal(evidence.factory.sections.some((section) => section.group === removed), false, `${removed} must be inactive after the declared structural override`);
|
|
51
|
+
}
|
|
52
|
+
assert.equal(evidence.factory.creation.inputBindings.length, 12);
|
|
53
|
+
assert.ok(evidence.factory.creation.inputBindings.every((item) => item.kind === 'ordinary-field'), 'Evidence creation fields must compile through generic field bindings');
|
|
54
|
+
assert.deepEqual(evidence.factory.creation.supplementalRequiredFields, [{
|
|
55
|
+
section: 'Interpretation Limits',
|
|
56
|
+
group: 'Interpretation Limits',
|
|
57
|
+
field: 'Not Yet Used As',
|
|
58
|
+
sourceSchemaIds: ['tiinex.preservation.v1'],
|
|
59
|
+
representation: 'neutral-placeholder',
|
|
60
|
+
value: 'unknown / not supplied at creation'
|
|
61
|
+
}]);
|
|
62
|
+
|
|
63
|
+
assert.equal(handoff.actions.create.status, 'unavailable');
|
|
64
|
+
assert.equal(handoff.factory.generation.ready, true);
|
|
65
|
+
assert.equal(handoff.factory.invocation.create.state, 'unavailable');
|
|
66
|
+
assert.deepEqual(handoff.factory.creation.inputBindings.map((item) => item.kind), [
|
|
67
|
+
'ordinary-field', 'ordinary-field', 'ordinary-field', 'ordinary-field', 'ordinary-field',
|
|
68
|
+
'named-declaration-section', 'named-declaration-section', 'named-declaration-section', 'named-declaration-section', 'named-declaration-section',
|
|
69
|
+
'ordinary-group', 'ordinary-group'
|
|
70
|
+
]);
|
|
71
|
+
assert.ok(handoff.factory.declarations.some((item) => item.group === 'Transfers' && item.requiredFields.includes('Transfer Kind')));
|
|
72
|
+
assert.equal(handoff.factory.transitionParticipation.authority, 'canonical-transition-definition');
|
|
73
|
+
assert.equal(handoff.factory.transitionParticipation.applicability, 'not-inferred-from-schema-module');
|
|
74
|
+
|
|
75
|
+
assert.equal(validationFinding.actions.create.status, 'unavailable');
|
|
76
|
+
assert.equal(validationFinding.factory.generation.ready, true);
|
|
77
|
+
assert.equal(validationFinding.factory.invocation.create.state, 'unavailable');
|
|
78
|
+
assert.equal(validationFinding.factory.creation.inputBindings.length, 11);
|
|
79
|
+
assert.ok(validationFinding.factory.creation.inputBindings.every((item) => item.kind === 'ordinary-field'));
|
|
80
|
+
const methodBinding = validationFinding.factory.creation.inputBindings.find((item) => item.input === 'Method');
|
|
81
|
+
assert.deepEqual({ section: methodBinding.section, group: methodBinding.group }, { section: 'Validation Method', group: 'Validation Method' });
|
|
82
|
+
|
|
83
|
+
assert.equal(validationMethod.actions.read.status, 'implemented');
|
|
84
|
+
assert.equal(validationMethod.actions.validate.status, 'implemented');
|
|
85
|
+
assert.equal(validationMethod.actions.create.status, 'unavailable');
|
|
86
|
+
assert.equal(validationMethod.factory.creation.authorityState, 'unavailable');
|
|
87
|
+
assert.equal(validationMethod.factory.generation.ready, false);
|
|
88
|
+
assert.equal(validationMethod.factory.invocation.create.state, 'unavailable');
|
|
89
|
+
|
|
90
|
+
assert.equal(validationReport.actions.read.status, 'implemented');
|
|
91
|
+
assert.equal(validationReport.actions.validate.status, 'implemented');
|
|
92
|
+
assert.equal(validationReport.actions.create.status, 'unavailable');
|
|
93
|
+
assert.equal(validationReport.factory.creation.authorityState, 'qualified');
|
|
94
|
+
assert.equal(validationReport.factory.generation.ready, true);
|
|
95
|
+
assert.equal(validationReport.factory.invocation.create.state, 'unavailable');
|
|
96
|
+
assert.equal(validationReport.factory.creation.inputBindings.length, 11);
|
|
97
|
+
assert.ok(validationReport.factory.creation.inputBindings.every((item) => item.kind === 'ordinary-field'));
|
|
98
|
+
const reportSummaryBinding = validationReport.factory.creation.inputBindings.find((item) => item.input === 'Summary');
|
|
99
|
+
assert.deepEqual({ section: reportSummaryBinding.section, group: reportSummaryBinding.group, field: reportSummaryBinding.field }, { section: 'Findings Summary', group: 'Findings Summary', field: 'Summary' });
|
|
100
|
+
assert.equal(validationReport.factory.creation.inputBindings.some((item) => item.input === 'Summary' && item.kind === 'root-current-summary-body-title'), false);
|
|
101
|
+
|
|
102
|
+
for (const schemaId of ['tiinex.decision.v1', 'tiinex.evidence.v1', 'tiinex.handoff.v1', 'tiinex.validation.finding.v1', 'tiinex.validation.method.v1', 'tiinex.validation.report.v1']) {
|
|
103
|
+
const module = schemaRegistry.byId.get(schemaId);
|
|
104
|
+
assert.equal(module?.artifactCreation?.implementation?.renderer?.id, GENERIC_ARTIFACT_CREATION_RENDERER_ID, `${schemaId} must use the shared generic renderer`);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
function renderAndValidate(schemaId, values, createdAt = '2026-09-04T08:00:00.000Z') {
|
|
108
|
+
const contract = buildArtifactCreationContract({ schemaId });
|
|
109
|
+
assert.equal(contract.status, 'ready', `${schemaId} must build a ready creation contract`);
|
|
110
|
+
const markdown = renderArtifactCreationCandidateMarkdown(contract, { values, createdAt });
|
|
111
|
+
assert.ok(markdown, `${schemaId} must render through the generic creation path`);
|
|
112
|
+
const validation = validateArtifactCreationResult({ schemaId, status: 'local', sourceMode: 'local-create', path: `${schemaId}.factory-proof.trace.md`, markdown }, {}, { contract, childPath: `${schemaId}.factory-proof.trace.md` });
|
|
113
|
+
assert.equal(validation.counts.errors, 0, JSON.stringify(validation.findings, null, 2));
|
|
114
|
+
return { contract, markdown, validation };
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const decisionProof = renderAndValidate('tiinex.decision.v1', {
|
|
118
|
+
Summary: 'Factory decision proof',
|
|
119
|
+
Decision: 'Use the shared generic factory.',
|
|
120
|
+
Basis: 'The compiled contract is qualified.',
|
|
121
|
+
Consequences: 'No schema-specific renderer is introduced.'
|
|
122
|
+
});
|
|
123
|
+
const firstTitleEnd = decisionProof.markdown.indexOf('\n', decisionProof.markdown.indexOf('\n# Factory decision proof') + 1);
|
|
124
|
+
const firstDecisionSection = decisionProof.markdown.indexOf('\n## Decision');
|
|
125
|
+
const decisionInterveningBody = decisionProof.markdown.slice(firstTitleEnd, firstDecisionSection).trim();
|
|
126
|
+
assert.equal(decisionInterveningBody, 'Provide the required unheaded body prose here.');
|
|
127
|
+
assert.equal(/^#{1,6}\s/m.test(decisionInterveningBody), false, 'Decision body-prose primitive must remain unheaded');
|
|
128
|
+
|
|
129
|
+
const evidenceProof = renderAndValidate('tiinex.evidence.v1', {
|
|
130
|
+
'Supported Claim Or Question': 'whether the generic factory can create Evidence',
|
|
131
|
+
'Evidence Role': 'supports the factory conformance claim',
|
|
132
|
+
'Known Source': 'local qualified implementation test',
|
|
133
|
+
'Preservation Basis': 'rendered from qualified creation contract',
|
|
134
|
+
'Provenance Limits': 'local conformance only',
|
|
135
|
+
Material: 'qualified renderer output',
|
|
136
|
+
'Material Kind': 'excerpt',
|
|
137
|
+
'Preservation State': 'preserved in local test output',
|
|
138
|
+
'Fidelity Notes': 'exact field values retained',
|
|
139
|
+
'Known Losses': 'none relevant to structural qualification',
|
|
140
|
+
'Does Not Prove': 'product acceptance',
|
|
141
|
+
'Must Not Be Treated As': 'remote publication proof'
|
|
142
|
+
});
|
|
143
|
+
assert.equal(evidenceProof.validation.status, 'valid', 'Standalone factory-created Evidence must validate cleanly without an inferred Preservation Parent requirement');
|
|
144
|
+
assert.equal(evidenceProof.validation.findings.some((finding) => finding.code === 'evidence.preservation.parent.unresolved'), false, 'Evidence schema inheritance must not manufacture an artifact Parent warning');
|
|
145
|
+
assert.ok(evidenceProof.markdown.includes('- Not Yet Used As: unknown / not supplied at creation'));
|
|
146
|
+
assert.equal(evidenceProof.markdown.includes('## Preserved Material'), false);
|
|
147
|
+
assert.equal(evidenceProof.markdown.includes('## Preservation Act'), false);
|
|
148
|
+
assert.equal(evidenceProof.markdown.includes('## Fidelity And Loss'), false);
|
|
149
|
+
assert.equal(evidenceProof.markdown.includes('## Custody Or Storage Boundary'), false);
|
|
150
|
+
|
|
151
|
+
const handoffValues = {
|
|
152
|
+
Purpose: 'Factory conformance handoff.',
|
|
153
|
+
From: 'Anchor',
|
|
154
|
+
'From Kind': 'role',
|
|
155
|
+
To: 'Loom',
|
|
156
|
+
'To Kind': 'role',
|
|
157
|
+
Transfers: [{ name: 'factory-proof', fields: { 'Transfer Kind': 'work', Description: 'Exercise the generic structured creation path.' } }],
|
|
158
|
+
'Required Context': 'none',
|
|
159
|
+
'Reference Context': 'none',
|
|
160
|
+
'Retained Responsibilities': 'none',
|
|
161
|
+
'Exclusions And Dependencies': 'none',
|
|
162
|
+
'Completion Expectation': { 'Signal Kind': 'result', 'Signal Meaning': 'Return qualified factory evidence.' },
|
|
163
|
+
'Interpretation Limits': { 'Does Not Mean': 'This does not authorize broad schema fan-out.', 'Must Not Be Used To Claim': 'This does not prove semantic acceptance.' }
|
|
164
|
+
};
|
|
165
|
+
const handoffProof = renderAndValidate('tiinex.handoff.v1', handoffValues);
|
|
166
|
+
assert.ok(handoffProof.markdown.includes('## Transfers\n\n- factory-proof\n - Transfer Kind: work'));
|
|
167
|
+
assert.ok(handoffProof.markdown.includes('## Completion Expectation\n\n- Signal Kind: result'));
|
|
168
|
+
const invalidStructured = renderArtifactCreationCandidateMarkdown(handoffProof.contract, { values: { ...handoffValues, Transfers: 'opaque free text' }, createdAt: '2026-09-04T08:00:00.000Z' });
|
|
169
|
+
assert.equal(invalidStructured, '', 'Structured declaration inputs must fail closed rather than flatten to free text');
|
|
170
|
+
|
|
171
|
+
const validationFindingProof = renderAndValidate('tiinex.validation.finding.v1', {
|
|
172
|
+
Target: 'generic schema factory',
|
|
173
|
+
'Target Kind': 'local implementation',
|
|
174
|
+
Method: 'contract-driven conformance',
|
|
175
|
+
'Method Scope': 'factory creation and validation',
|
|
176
|
+
Status: 'pass',
|
|
177
|
+
Observation: 'shared renderer produced a valid artifact',
|
|
178
|
+
'What Was Checked': 'compiled creation and validation path',
|
|
179
|
+
'What Was Not Checked': 'remote publication or product acceptance',
|
|
180
|
+
'Recommended Response': 'retain the shared generic path',
|
|
181
|
+
'Does Not Prove': 'broad schema fan-out is safe',
|
|
182
|
+
'Must Not Be Treated As': 'semantic acceptance'
|
|
183
|
+
});
|
|
184
|
+
assert.equal(validationFindingProof.validation.status, 'valid');
|
|
185
|
+
|
|
186
|
+
const validationMethodContract = buildArtifactCreationContract({ schemaId: 'tiinex.validation.method.v1' });
|
|
187
|
+
assert.equal(validationMethodContract.status, 'blocked');
|
|
188
|
+
assert.equal(validationMethodContract.capabilities.create, 'unavailable');
|
|
189
|
+
|
|
190
|
+
const validationReportProof = renderAndValidate('tiinex.validation.report.v1', {
|
|
191
|
+
Scope: 'bounded shared-factory scale proof',
|
|
192
|
+
Targets: 'Validation Method and Validation Report descriptors',
|
|
193
|
+
'Methods Used': 'compiled contract conformance and shared renderer validation',
|
|
194
|
+
'Method Boundaries': 'local source-qualified factory path only',
|
|
195
|
+
Summary: 'Validation Report generation is qualified independently from transition invocation.',
|
|
196
|
+
'Overall State': 'qualified generation; invocable transition unavailable',
|
|
197
|
+
Findings: 'eleven ordinary-field bindings are exact and schema-owned',
|
|
198
|
+
'Run Context': 'Loom bounded implementation tranche',
|
|
199
|
+
'What Was Not Checked': 'remote publication or future Transition Definition applicability',
|
|
200
|
+
'Does Not Prove': 'an invocable Create transition exists',
|
|
201
|
+
'Must Not Hide': 'generation authority and invocation authority are distinct'
|
|
202
|
+
});
|
|
203
|
+
assert.equal(validationReportProof.validation.status, 'valid');
|
|
204
|
+
assert.ok(validationReportProof.markdown.includes('## Findings Summary\n\n- Summary: Validation Report generation is qualified independently from transition invocation.'));
|
|
205
|
+
assert.equal(validationReportProof.contract.capabilities.create, 'implemented');
|
|
206
|
+
|
|
207
|
+
const rootMarkdown = fs.readFileSync(new URL('./tiinex.root.v1.schema.md', import.meta.url), 'utf8');
|
|
208
|
+
const preservationMarkdown = fs.readFileSync(new URL('./core/preservation/tiinex.preservation.v1.schema.md', import.meta.url), 'utf8');
|
|
209
|
+
const evidenceMarkdown = fs.readFileSync(new URL('./core/evidence/tiinex.evidence.v1.schema.md', import.meta.url), 'utf8');
|
|
210
|
+
const standaloneInheritanceRecord = fs.readFileSync(new URL('../tooling/portable/schema/fixtures/evidence-preservation-body.inheritance-record-fixture.md', import.meta.url), 'utf8');
|
|
211
|
+
|
|
212
|
+
function compileEvidenceVariant(evidenceSource = evidenceMarkdown, preservationSource = preservationMarkdown, options = {}) {
|
|
213
|
+
return compilePortableSchemaContractChain([rootMarkdown, preservationSource, evidenceSource], options);
|
|
214
|
+
}
|
|
215
|
+
function expectInlineOverrideBlocked(label, evidenceSource, preservationSource = preservationMarkdown) {
|
|
216
|
+
const compiled = compileEvidenceVariant(evidenceSource, preservationSource);
|
|
217
|
+
assert.equal(compiled.inheritanceResolution.state, 'unresolved', `${label} must fail closed`);
|
|
218
|
+
assert.equal(compiled.inheritanceResolution.applications.length, 0, `${label} must not partially apply an override`);
|
|
219
|
+
assert.ok(compiled.validation.requiredSections.includes('Preserved Material'), `${label} must retain additive parent structure when override authority is unresolved`);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
const additivePreservation = compilePortableSchemaContractChain([rootMarkdown, preservationMarkdown]);
|
|
223
|
+
assert.equal(additivePreservation.inheritanceResolution.state, 'not-declared', 'Schemas without inline Inheritance Overrides remain purely additive');
|
|
224
|
+
|
|
225
|
+
expectInlineOverrideBlocked('unsupported operation', evidenceMarkdown.replace('Merge Operation: override', 'Merge Operation: refine'));
|
|
226
|
+
expectInlineOverrideBlocked('non-ancestor parent', evidenceMarkdown.replace('Parent Schema: tiinex.preservation.v1', 'Parent Schema: tiinex.task.v1'));
|
|
227
|
+
expectInlineOverrideBlocked('missing parent node', evidenceMarkdown.replace('Schema Validation Contract / Preservation Body / Required Shape', 'Schema Validation Contract / Missing Body / Required Shape'));
|
|
228
|
+
const declarationBlock = `- evidence-preservation-body-structure\n - Merge Operation: override\n - Parent Schema: tiinex.preservation.v1\n - Parent Node: Schema Validation Contract / Preservation Body / Required Shape\n - Child Node: Schema Validation Contract / Evidence Body / Required Shape\n - Reason: Evidence specializes Preservation by replacing only the generic Preservation artifact-body structure while retaining compatible non-structural Preservation semantics and provenance.\n - Effective Result: Evidence body structure is authoritative for Evidence artifacts; parent-only structural body groups become inactive, while compatible parent contributions targeting surviving Evidence sections remain active.`;
|
|
229
|
+
expectInlineOverrideBlocked('duplicate inline declaration', evidenceMarkdown.replace(declarationBlock, `${declarationBlock}\n\n${declarationBlock}`));
|
|
230
|
+
const preservationBodyStart = preservationMarkdown.indexOf('### Preservation Body');
|
|
231
|
+
const preservationBodyEnd = preservationMarkdown.indexOf('\n### ', preservationBodyStart + 4);
|
|
232
|
+
const preservationBodyGroup = preservationMarkdown.slice(preservationBodyStart, preservationBodyEnd);
|
|
233
|
+
const ambiguousPreservation = preservationMarkdown.slice(0, preservationBodyEnd) + `\n\n${preservationBodyGroup}` + preservationMarkdown.slice(preservationBodyEnd);
|
|
234
|
+
expectInlineOverrideBlocked('ambiguous parent node', evidenceMarkdown, ambiguousPreservation);
|
|
235
|
+
const duplicateParentGroupWithoutTargetCategory = preservationMarkdown.replace('### Preservation Body', '### Preservation Body\n\n#### Optional Fields\n\n- Noise\n\n### Preservation Body');
|
|
236
|
+
expectInlineOverrideBlocked('ambiguous parent group even when target category appears once', evidenceMarkdown, duplicateParentGroupWithoutTargetCategory);
|
|
237
|
+
|
|
238
|
+
const corroboratedEvidence = compileEvidenceVariant(evidenceMarkdown, preservationMarkdown, { inheritanceArtifacts: [standaloneInheritanceRecord] });
|
|
239
|
+
assert.equal(corroboratedEvidence.inheritanceResolution.state, 'qualified');
|
|
240
|
+
assert.equal(corroboratedEvidence.inheritanceResolution.applications.length, 1, 'Standalone record may corroborate but must not create an extra application');
|
|
241
|
+
assert.equal(corroboratedEvidence.inheritanceResolution.corroborations.length, 1);
|
|
242
|
+
const disagreeingRecord = standaloneInheritanceRecord.replace('Child Contract Nodes: Schema Validation Contract / Evidence Body / Required Shape', 'Child Contract Nodes: Schema Validation Contract / Evidence Material / Required Fields');
|
|
243
|
+
const blockedByMismatch = compileEvidenceVariant(evidenceMarkdown, preservationMarkdown, { inheritanceArtifacts: [disagreeingRecord] });
|
|
244
|
+
assert.equal(blockedByMismatch.inheritanceResolution.state, 'unresolved', 'A disagreeing standalone record must fail visible rather than override inline schema authority');
|
|
245
|
+
assert.equal(blockedByMismatch.inheritanceResolution.applications.length, 0);
|
|
246
|
+
|
|
247
|
+
console.log(JSON.stringify({
|
|
248
|
+
schema: 'tiinex.site.schema-factory-conformance.v2',
|
|
249
|
+
decision: { create: decision.actions.create.status, requiredShapePrimitive: decisionBodyProse.primitive.kind, validation: decisionProof.validation.status },
|
|
250
|
+
evidence: { create: evidence.actions.create.status, inheritance: evidence.factory.inheritance.resolution.state, supplementalRequiredFields: evidence.factory.creation.supplementalRequiredFields.length, validation: evidenceProof.validation.status },
|
|
251
|
+
handoff: { create: handoff.actions.create.status, renderer: GENERIC_ARTIFACT_CREATION_RENDERER_ID, validation: handoffProof.validation.status },
|
|
252
|
+
validationFinding: { create: validationFinding.actions.create.status, generation: validationFinding.factory.generation.ready, methodBinding: methodBinding.section, validation: validationFindingProof.validation.status },
|
|
253
|
+
validationMethod: { read: validationMethod.actions.read.status, validate: validationMethod.actions.validate.status, generation: validationMethod.factory.generation.ready, invocableCreate: validationMethod.factory.invocation.create.state },
|
|
254
|
+
validationReport: { read: validationReport.actions.read.status, validate: validationReport.actions.validate.status, generation: validationReport.factory.generation.ready, invocableCreate: validationReport.factory.invocation.create.state, summaryBinding: reportSummaryBinding.section, validation: validationReportProof.validation.status },
|
|
255
|
+
builderDescriptor: handoff.factory.schema
|
|
256
|
+
}, null, 2));
|