agentera 3.0.0-dev.8 → 3.0.0-dev.81
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/README.md +252 -22
- package/bundle/.agentera-build-source.json +8 -0
- package/bundle/CHANGELOG.md +1389 -0
- package/bundle/DESIGN.md +229 -0
- package/bundle/LICENSE +201 -0
- package/bundle/README.md +142 -0
- package/bundle/UPGRADE.md +275 -0
- package/bundle/extract-corpus-parity.json +2 -4
- package/bundle/fixtures/routing/hybrid-corpus.yaml +154 -0
- package/bundle/references/adapters/package-publication.json +484 -0
- package/bundle/references/adapters/package-registry.yaml +443 -188
- package/bundle/references/adapters/package-surface-characterization.md +68 -34
- package/bundle/references/adapters/product-v1-reset.yaml +101 -0
- package/bundle/references/adapters/runtime-lifecycle-adapters.yaml +74 -0
- package/bundle/references/adapters/runtime-lifecycle-authority.yaml +62 -0
- package/bundle/references/adapters/runtime-lifecycle-operation-contract.yaml +84 -0
- package/bundle/references/adapters/runtime-retired-resources.yaml +357 -0
- package/bundle/references/analysis/evidence-tier-authority.yaml +559 -0
- package/bundle/references/analysis/personal-glossary-evaluation-authority.yaml +175 -0
- package/bundle/references/analysis/personal-glossary-evaluation-corpus.yaml +291 -0
- package/bundle/references/analysis/personal-glossary-holdout.yaml +192 -0
- package/bundle/references/analysis/verification-policy.yaml +262 -0
- package/bundle/references/artifacts/artifact-registry-interface-model.yaml +17 -8
- package/bundle/references/artifacts/glossary-entry-contract.yaml +2906 -0
- package/bundle/references/artifacts/state-storage-authority.yaml +3075 -0
- package/bundle/references/artifacts/verbosity-budget-authority.yaml +42 -0
- package/bundle/references/cli/app-lifecycle-vocabulary.yaml +3 -4
- package/bundle/references/cli/capability-instruction-contract.yaml +11 -14
- package/bundle/references/cli/hybrid-route-contract.yaml +438 -0
- package/bundle/references/cli/routing-model.md +152 -93
- package/bundle/references/cli/trigger-schema-enrichment.md +57 -46
- package/bundle/references/cli/update-channels.yaml +7 -5
- package/bundle/references/cli/vocabulary-index.yaml +7 -9
- package/bundle/references/cli/vocabulary.md +54 -97
- package/bundle/references/meta/retained-reference-authority.yaml +171 -0
- package/bundle/skills/agentera/SKILL.md +183 -63
- package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +27 -19
- package/bundle/skills/agentera/capabilities/audit/schemas/exit.yaml +2 -2
- package/bundle/skills/agentera/capabilities/audit/schemas/triggers.yaml +13 -35
- package/bundle/skills/agentera/capabilities/audit/schemas/validation.yaml +30 -11
- package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +44 -21
- package/bundle/skills/agentera/capabilities/build/schemas/exit.yaml +8 -6
- package/bundle/skills/agentera/capabilities/build/schemas/triggers.yaml +14 -36
- package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +95 -21
- package/bundle/skills/agentera/capabilities/design/schemas/artifacts.yaml +6 -6
- package/bundle/skills/agentera/capabilities/design/schemas/exit.yaml +5 -5
- package/bundle/skills/agentera/capabilities/design/schemas/triggers.yaml +5 -34
- package/bundle/skills/agentera/capabilities/design/schemas/validation.yaml +2 -2
- package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +17 -13
- package/bundle/skills/agentera/capabilities/discuss/schemas/exit.yaml +2 -2
- package/bundle/skills/agentera/capabilities/discuss/schemas/triggers.yaml +6 -40
- package/bundle/skills/agentera/capabilities/discuss/schemas/validation.yaml +72 -5
- package/bundle/skills/agentera/capabilities/document/schemas/artifacts.yaml +24 -17
- package/bundle/skills/agentera/capabilities/document/schemas/triggers.yaml +5 -35
- package/bundle/skills/agentera/capabilities/document/schemas/validation.yaml +13 -13
- package/bundle/skills/agentera/capabilities/optimize/schemas/artifacts.yaml +10 -10
- package/bundle/skills/agentera/capabilities/optimize/schemas/exit.yaml +2 -2
- package/bundle/skills/agentera/capabilities/optimize/schemas/triggers.yaml +4 -35
- package/bundle/skills/agentera/capabilities/optimize/schemas/validation.yaml +3 -3
- package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +34 -22
- package/bundle/skills/agentera/capabilities/orchestrate/schemas/exit.yaml +9 -7
- package/bundle/skills/agentera/capabilities/orchestrate/schemas/triggers.yaml +5 -37
- package/bundle/skills/agentera/capabilities/orchestrate/schemas/validation.yaml +38 -37
- package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +20 -16
- package/bundle/skills/agentera/capabilities/plan/schemas/triggers.yaml +8 -31
- package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +66 -6
- package/bundle/skills/agentera/capabilities/profile/schemas/artifacts.yaml +13 -4
- package/bundle/skills/agentera/capabilities/profile/schemas/exit.yaml +8 -5
- package/bundle/skills/agentera/capabilities/profile/schemas/triggers.yaml +8 -37
- package/bundle/skills/agentera/capabilities/profile/schemas/validation.yaml +67 -3
- package/bundle/skills/agentera/capabilities/research/schemas/artifacts.yaml +6 -6
- package/bundle/skills/agentera/capabilities/research/schemas/triggers.yaml +5 -29
- package/bundle/skills/agentera/capabilities/status/schemas/artifacts.yaml +13 -12
- package/bundle/skills/agentera/capabilities/status/schemas/triggers.yaml +7 -49
- package/bundle/skills/agentera/capabilities/vision/schemas/artifacts.yaml +8 -8
- package/bundle/skills/agentera/capabilities/vision/schemas/exit.yaml +7 -6
- package/bundle/skills/agentera/capabilities/vision/schemas/triggers.yaml +7 -39
- package/bundle/skills/agentera/capabilities/vision/schemas/validation.yaml +14 -16
- package/bundle/skills/agentera/capability_schema_contract.yaml +32 -32
- package/bundle/skills/agentera/protocol.yaml +4 -4
- package/bundle/skills/agentera/route-phrases.yaml +81 -0
- package/bundle/skills/agentera/schemas/artifacts/changelog.yaml +1 -0
- package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +29 -30
- package/bundle/skills/agentera/schemas/artifacts/design.yaml +1 -0
- package/bundle/skills/agentera/schemas/artifacts/docs.yaml +7 -43
- package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +140 -34
- package/bundle/skills/agentera/schemas/artifacts/glossary.yaml +87 -0
- package/bundle/skills/agentera/schemas/artifacts/health.yaml +53 -51
- package/bundle/skills/agentera/schemas/artifacts/objective.yaml +18 -35
- package/bundle/skills/agentera/schemas/artifacts/plan.yaml +453 -55
- package/bundle/skills/agentera/schemas/artifacts/progress.yaml +128 -39
- package/bundle/skills/agentera/schemas/artifacts/todo.yaml +305 -7
- package/bundle/skills/agentera/schemas/artifacts/vision.yaml +0 -19
- package/dist/.agentera-build-source.json +8 -0
- package/dist/analytics/extractCorpus/cli.js +52 -11
- package/dist/analytics/extractCorpus/copilotSessions.js +19 -8
- package/dist/analytics/extractCorpus/core.js +262 -14
- package/dist/analytics/extractCorpus/corpus.js +57 -18
- package/dist/analytics/extractCorpus/coverageAudit.js +44 -45
- package/dist/analytics/extractCorpus/cursorSessions.js +28 -8
- package/dist/analytics/extractCorpus/evidenceTiers.js +709 -0
- package/dist/analytics/extractCorpus/extractCorpusParity.js +4 -4
- package/dist/analytics/extractCorpus/filesystemSources.js +5 -5
- package/dist/analytics/extractCorpus/index.js +4 -2
- package/dist/analytics/extractCorpus/jsonlSessions.js +76 -8
- package/dist/analytics/extractCorpus/sqliteCaps.js +0 -1
- package/dist/analytics/extractCorpus/sqliteSessions.js +12 -4
- package/dist/analytics/extractCorpus/tierReader.js +108 -0
- package/dist/analytics/extractCorpus.js +0 -1
- package/dist/analytics/glossaryAdviceResolution.js +166 -0
- package/dist/analytics/glossaryInputAcquisition.js +319 -0
- package/dist/analytics/personalGlossaryAdmission.js +113 -0
- package/dist/analytics/personalGlossaryCandidateProjection.js +788 -0
- package/dist/analytics/personalGlossaryCandidateProjectionExcerpts.js +144 -0
- package/dist/analytics/personalGlossaryCandidateProjectionModel.js +1 -0
- package/dist/analytics/personalGlossaryCandidateReadView.js +23 -0
- package/dist/analytics/personalGlossaryCurrentGeneration.js +25 -0
- package/dist/analytics/personalGlossaryDecision.js +203 -0
- package/dist/analytics/personalGlossaryExplicit.js +788 -0
- package/dist/analytics/personalGlossaryExplicitMining.js +285 -0
- package/dist/analytics/personalGlossaryExplicitScope.js +41 -0
- package/dist/analytics/personalGlossaryExplicitSegments.js +418 -0
- package/dist/analytics/personalGlossaryExplicitTypes.js +26 -0
- package/dist/analytics/personalGlossaryLexicalClassifier.js +175 -0
- package/dist/analytics/personalGlossaryProfile.js +229 -0
- package/dist/analytics/personalGlossaryRecurrence.js +618 -0
- package/dist/analytics/personalGlossaryRefreshProjection.js +351 -0
- package/dist/analytics/personalGlossaryReviewRecordStorage.js +428 -0
- package/dist/analytics/personalGlossaryReviewRecords.js +332 -0
- package/dist/analytics/profileSignals.js +211 -0
- package/dist/analytics/usageStats.js +150 -23
- package/dist/audit/terminologyDrift.js +281 -0
- package/dist/bin/agentera.js +3 -2
- package/dist/capabilities/audit/instructions.js +16 -6
- package/dist/capabilities/build/instructions.js +59 -6
- package/dist/capabilities/design/instructions.js +3 -4
- package/dist/capabilities/discuss/instructions.js +29 -6
- package/dist/capabilities/document/instructions.js +11 -6
- package/dist/capabilities/index.js +20 -14
- package/dist/capabilities/optimize/instructions.js +14 -6
- package/dist/capabilities/orchestrate/instructions.js +42 -6
- package/dist/capabilities/plan/instructions.js +30 -3
- package/dist/capabilities/profile/instructions.js +104 -5
- package/dist/capabilities/research/instructions.js +4 -5
- package/dist/capabilities/status/instructions.js +15 -6
- package/dist/capabilities/status/startupInstructions.js +34 -0
- package/dist/capabilities/vision/instructions.js +3 -5
- package/dist/cli/appContext.js +14 -7
- package/dist/cli/argvalidate.js +0 -1
- package/dist/cli/capabilityContext/benchmark.js +5 -4
- package/dist/cli/capabilityContext/bespoke.js +14 -6
- package/dist/cli/capabilityContext/build.js +116 -42
- package/dist/cli/capabilityContext/closeout.js +30 -27
- package/dist/cli/capabilityContext/contract.js +18 -27
- package/dist/cli/capabilityContext/evidence.js +84 -77
- package/dist/cli/capabilityContext/index.js +0 -1
- package/dist/cli/capabilityContext/orchestration.js +42 -18
- package/dist/cli/capabilityContext/planState.js +89 -96
- package/dist/cli/capabilityContext/progress.js +52 -12
- package/dist/cli/capabilityContext/projectVerification.js +409 -0
- package/dist/cli/capabilityContext/shared.js +9 -20
- package/dist/cli/capabilityContext/slim.js +52 -8
- package/dist/cli/capabilityContext/startup.js +51 -114
- package/dist/cli/capabilityContext/startupAggregation.js +68 -0
- package/dist/cli/capabilityContext/types.js +26 -10
- package/dist/cli/capabilityContext.js +0 -1
- package/dist/cli/commands/appHome.js +0 -1
- package/dist/cli/commands/capability.js +2 -2
- package/dist/cli/commands/compact.js +163 -13
- package/dist/cli/commands/doctor.js +162 -11
- package/dist/cli/commands/durability.js +81 -0
- package/dist/cli/commands/glossaryAdvice.js +138 -0
- package/dist/cli/commands/lint.js +22 -8
- package/dist/cli/commands/personalGlossaryCandidateReads.js +755 -0
- package/dist/cli/commands/personalGlossaryDecision.js +349 -0
- package/dist/cli/commands/personalGlossaryPublish.js +484 -0
- package/dist/cli/commands/personalGlossaryReviewRecordReads.js +209 -0
- package/dist/cli/commands/personalGlossaryReviewRecords.js +623 -0
- package/dist/cli/commands/prime/briefOrientation.js +845 -0
- package/dist/cli/commands/prime/buildExecutionRequest.js +165 -0
- package/dist/cli/commands/prime/bundleStatus.js +54 -4
- package/dist/cli/commands/prime/collectEntityOrientation.js +338 -0
- package/dist/cli/commands/prime/collectOrientationState.js +124 -68
- package/dist/cli/commands/prime/orientationOutput.js +271 -59
- package/dist/cli/commands/prime/types.js +0 -1
- package/dist/cli/commands/prime.js +89 -11
- package/dist/cli/commands/profileGrounding.js +55 -0
- package/dist/cli/commands/query.js +74 -52
- package/dist/cli/commands/report.js +187 -27
- package/dist/cli/commands/route.js +142 -0
- package/dist/cli/commands/schema.js +436 -138
- package/dist/cli/commands/state/decisions.js +40 -56
- package/dist/cli/commands/state/docs.js +58 -85
- package/dist/cli/commands/state/experimentRecords.js +151 -0
- package/dist/cli/commands/state/experiments.js +11 -65
- package/dist/cli/commands/state/get.js +129 -0
- package/dist/cli/commands/state/health.js +11 -113
- package/dist/cli/commands/state/index.js +6 -41
- package/dist/cli/commands/state/list.js +194 -0
- package/dist/cli/commands/state/objective.js +21 -65
- package/dist/cli/commands/state/plan.js +11 -170
- package/dist/cli/commands/state/planTasks.js +154 -0
- package/dist/cli/commands/state/plans.js +154 -0
- package/dist/cli/commands/state/progress.js +11 -45
- package/dist/cli/commands/state/shared.js +0 -1
- package/dist/cli/commands/state/todo.js +28 -107
- package/dist/cli/commands/state/write.js +459 -0
- package/dist/cli/commands/upgrade.js +176 -5
- package/dist/cli/commands/upgradeVerify.js +118 -0
- package/dist/cli/commands/validate.js +235 -136
- package/dist/cli/commands/verify.js +73 -16
- package/dist/cli/contracts/bundleStatus.js +0 -1
- package/dist/cli/contracts/orientationState.js +0 -1
- package/dist/cli/dispatch/argvParser.js +0 -1
- package/dist/cli/dispatch/check.js +84 -40
- package/dist/cli/dispatch/commands.js +3 -3
- package/dist/cli/dispatch/index.js +84 -52
- package/dist/cli/dispatch/lifecycle.js +182 -62
- package/dist/cli/dispatch/prime.js +37 -2
- package/dist/cli/dispatch/projections.js +17 -0
- package/dist/cli/dispatch/shared.js +1 -2
- package/dist/cli/dispatch/state.js +62 -66
- package/dist/cli/dispatch.js +0 -1
- package/dist/cli/errors.js +16 -17
- package/dist/cli/help.js +419 -41
- package/dist/cli/migrationRequired.js +125 -0
- package/dist/cli/orientation/attention.js +19 -22
- package/dist/cli/orientation/corpusCoverage.js +32 -1
- package/dist/cli/orientation.js +346 -129
- package/dist/cli/planArtifacts.js +350 -0
- package/dist/cli/planEvidence.js +157 -0
- package/dist/cli/planLifecycleState.js +36 -0
- package/dist/cli/planTaskIndex.js +11 -0
- package/dist/cli/preCutoverCommand.js +32 -0
- package/dist/cli/prime-blob.js +71 -3
- package/dist/cli/productV1Eol.js +55 -0
- package/dist/cli/profileAcquisition.js +167 -0
- package/dist/cli/startupCompletenessContract.js +11 -9
- package/dist/cli/stateQuery.js +47 -12
- package/dist/cli/structured.js +0 -1
- package/dist/cli/todoMarkdown.js +25 -12
- package/dist/cli/todoReadinessSelection.js +192 -0
- package/dist/cli/todoSeverity.js +0 -1
- package/dist/core/atomicWriter.js +23 -0
- package/dist/core/developmentChannel.js +1 -0
- package/dist/core/developmentInvocation.js +377 -0
- package/dist/core/difflib.js +0 -1
- package/dist/core/envPaths.js +0 -1
- package/dist/core/jsonValue.js +0 -1
- package/dist/core/paths.js +0 -1
- package/dist/core/pyjson.js +0 -1
- package/dist/core/shell.js +4 -0
- package/dist/core/skillIdentity.js +23 -0
- package/dist/core/sourceRoot.js +9 -12
- package/dist/core/text.js +10 -0
- package/dist/core/toml.js +0 -1
- package/dist/core/yaml.js +61 -2
- package/dist/eval/evalSkills.js +13 -14
- package/dist/eval/glossaryEvaluation.js +751 -0
- package/dist/eval/glossaryEvaluationProcess.js +29 -0
- package/dist/eval/glossaryEvaluationRunner.js +571 -0
- package/dist/eval/glossaryEvaluationSuccessReport.js +297 -0
- package/dist/eval/hybridRouteEvaluation.js +155 -0
- package/dist/eval/semanticEval.js +0 -1
- package/dist/eval/semanticFixtures.js +0 -1
- package/dist/hooks/common.js +3 -56
- package/dist/hooks/compaction/apply.js +224 -47
- package/dist/hooks/compaction/dryRun.js +2 -1
- package/dist/hooks/compaction/index.js +5 -6
- package/dist/hooks/compaction/parse.js +73 -6
- package/dist/hooks/compaction/retention.js +28 -25
- package/dist/hooks/compaction/status.js +145 -26
- package/dist/hooks/compaction/types.js +0 -1
- package/dist/hooks/validateArtifact/agentFacing.js +0 -1
- package/dist/hooks/validateArtifact/index.js +6 -65
- package/dist/hooks/validateArtifact/markdown.js +9 -10
- package/dist/hooks/validateArtifact/schema.js +96 -9
- package/dist/hooks/validateArtifact/traversal.js +12 -11
- package/dist/hooks/validateArtifact/violations.js +5 -3
- package/dist/migrate/v2HandoffManifest.js +8 -3
- package/dist/registries/activationContract.js +2 -0
- package/dist/registries/activationTuples.js +145 -0
- package/dist/registries/artifactProtocolIds.js +2 -1
- package/dist/registries/artifactRegistry.js +207 -60
- package/dist/registries/artifactSchemaProjection.js +45 -0
- package/dist/registries/capabilityContract.js +5 -21
- package/dist/registries/evaluatorHandoffContract.js +0 -1
- package/dist/registries/evidenceTierContract.js +375 -0
- package/dist/registries/explicitSegmentGrammarContract.js +619 -0
- package/dist/registries/glossaryAdviceContract.js +79 -0
- package/dist/registries/glossaryCandidateContractPaths.js +6 -0
- package/dist/registries/glossaryCandidateContracts.js +820 -0
- package/dist/registries/glossaryCandidateDecisionAuthority.js +119 -0
- package/dist/registries/glossaryCandidateDecisionContract.js +62 -0
- package/dist/registries/glossaryCandidateProjectionAuthority.js +345 -0
- package/dist/registries/glossaryCandidateProjectionContract.js +108 -0
- package/dist/registries/glossaryCaveatContract.js +67 -0
- package/dist/registries/glossaryConsumerContractValidation.js +787 -0
- package/dist/registries/glossaryEntryContract.js +759 -0
- package/dist/registries/glossaryEntryTemporal.js +12 -0
- package/dist/registries/glossaryMiningAuthority.js +764 -0
- package/dist/registries/glossaryProfileFullContract.js +24 -0
- package/dist/registries/glossaryReviewRecordsAuthority.js +426 -0
- package/dist/registries/glossaryReviewRecordsContract.js +129 -0
- package/dist/registries/glossaryTermIdentity.js +139 -0
- package/dist/registries/glossaryTermOccurrence.js +20 -0
- package/dist/registries/hybridRoute.js +274 -0
- package/dist/registries/hybridRouteReceipt.js +221 -0
- package/dist/registries/packagePublication.js +273 -0
- package/dist/registries/packageRegistry.js +184 -209
- package/dist/registries/personalGlossaryContracts.js +1 -0
- package/dist/registries/todoReadinessContract.js +448 -0
- package/dist/registries/triggerLoader.js +7 -44
- package/dist/registries/verbosityBudgetContract.js +205 -0
- package/dist/release/releaseMetadata.js +168 -11
- package/dist/runtime/lifecycleAdapterContract.js +457 -0
- package/dist/runtime/lifecycleAdapters.js +777 -0
- package/dist/runtime/lifecycleAuthority.js +453 -0
- package/dist/runtime/lifecycleOperationContract.js +123 -0
- package/dist/runtime/lifecycleOperations.js +634 -0
- package/dist/runtime/lifecycleOwnershipJournal.js +622 -0
- package/dist/runtime/lifecyclePublication.js +415 -0
- package/dist/runtime/lifecycleSnapshot.js +438 -0
- package/dist/runtime/nativeResourceCleanup.js +618 -0
- package/dist/setup/opencode.js +20 -13
- package/dist/setup/opencodeConstants.js +1 -0
- package/dist/setup/sharedSkill.js +45 -0
- package/dist/setup/smokeChecks.js +14 -75
- package/dist/state/archiveDiscovery.js +580 -0
- package/dist/state/archivePublication.js +225 -0
- package/dist/state/archiveRecovery.js +237 -0
- package/dist/state/archiveReplay.js +53 -0
- package/dist/state/canonicalMigrationRecord.js +36 -0
- package/dist/state/changelog.js +221 -0
- package/dist/state/decisionEntities.js +367 -0
- package/dist/state/decisionLegacyValidation.js +215 -0
- package/dist/state/decisionMigrationProvenance.js +199 -0
- package/dist/state/decisionOverlay.js +254 -0
- package/dist/state/decisionRevision.js +256 -0
- package/dist/state/decisionRevisionMigration.js +89 -0
- package/dist/state/directRetrieval.js +323 -0
- package/dist/state/durability.js +324 -0
- package/dist/state/entityCutover.js +459 -0
- package/dist/state/entityCutoverGit.js +127 -0
- package/dist/state/entityGlossaryAuthority.js +13 -0
- package/dist/state/entityListProjection.js +187 -0
- package/dist/state/entityListRuntimeRegistry.js +85 -0
- package/dist/state/entityMigrationCausality.js +97 -0
- package/dist/state/entityMigrationIdentity.js +5 -0
- package/dist/state/entityMigrationPreview.js +840 -0
- package/dist/state/entityMigrationTodo.js +133 -0
- package/dist/state/entityPublicationContext.js +859 -0
- package/dist/state/entityRetrievalHelp.js +506 -0
- package/dist/state/entityStorage.js +894 -0
- package/dist/state/entityWriterLock.js +18 -0
- package/dist/state/exactReplacementRecovery.js +18 -0
- package/dist/state/experimentArchive.js +63 -0
- package/dist/state/experimentIdentity.js +202 -0
- package/dist/state/healthEntities.js +262 -0
- package/dist/state/healthEntityValidation.js +18 -0
- package/dist/state/healthRepair.js +69 -0
- package/dist/state/installRoot.js +15 -7
- package/dist/state/legacyEntityCutoverEvidence.js +65 -0
- package/dist/state/legacyIdentity.js +47 -0
- package/dist/state/legacySummaryRecord.js +6 -0
- package/dist/state/listAccounting.js +54 -0
- package/dist/state/listClassification.js +17 -0
- package/dist/state/listCursor.js +42 -0
- package/dist/state/listRetrieval.js +781 -0
- package/dist/state/migrationSourceBinding.js +30 -0
- package/dist/state/objectiveExperimentEntities.js +322 -0
- package/dist/state/planEntities.js +1027 -0
- package/dist/state/planIdentity.js +47 -0
- package/dist/state/planLineageValidation.js +52 -0
- package/dist/state/planReplacementTransaction.js +475 -0
- package/dist/state/planRetrieval.js +313 -0
- package/dist/state/planTaskRetrieval.js +294 -0
- package/dist/state/progressEntities.js +512 -0
- package/dist/state/progressGlossaryCaveat.js +168 -0
- package/dist/state/progressPublicationOrder.js +19 -0
- package/dist/state/progressWritePolicy.js +33 -0
- package/dist/state/projectRoot.js +62 -0
- package/dist/state/projectionPolicy.js +190 -0
- package/dist/state/retrievalAuthority.js +156 -0
- package/dist/state/safeProjectFile.js +155 -0
- package/dist/state/startupAnalysis/benchmark.js +70 -9
- package/dist/state/startupAnalysis/contract.js +44 -10
- package/dist/state/startupAnalysis/helpers.js +1 -2
- package/dist/state/startupAnalysis/index.js +0 -1
- package/dist/state/startupAnalysis/metrics.js +0 -1
- package/dist/state/startupAnalysis/records.js +0 -1
- package/dist/state/startupAnalysis/report.js +0 -1
- package/dist/state/startupAnalysis/threshold.js +13 -1
- package/dist/state/startupAnalysis.js +0 -1
- package/dist/state/startupProjection.js +499 -0
- package/dist/state/stateMode.js +222 -0
- package/dist/state/stateStorageAuthority.js +47 -0
- package/dist/state/summaryEntityRead.js +25 -0
- package/dist/state/summaryMigrationProvenance.js +66 -0
- package/dist/state/summarySourceRowAuthority.js +36 -0
- package/dist/state/todoActivationSafety.js +58 -0
- package/dist/state/todoCreateBatch.js +69 -0
- package/dist/state/todoDocsEntities.js +1339 -0
- package/dist/state/todoDocsEntityValidation.js +158 -0
- package/dist/state/todoMarkdownProjection.js +63 -0
- package/dist/state/todoReconciliationActivation.js +182 -0
- package/dist/state/todoReconciliationInspection.js +184 -0
- package/dist/state/todoReconciliationRepair.js +320 -0
- package/dist/state/todoReconciliationTransaction.js +628 -0
- package/dist/state/todoSeverityHeadings.js +71 -0
- package/dist/state/todoTransitionBatch.js +65 -0
- package/dist/state/todoUpdateBatch.js +50 -0
- package/dist/state/write/assign.js +20 -0
- package/dist/state/write/candidateMutation.js +269 -0
- package/dist/state/write/errors.js +11 -0
- package/dist/state/write/experimentPublication.js +192 -0
- package/dist/state/write/explain.js +380 -0
- package/dist/state/write/fields.js +61 -0
- package/dist/state/write/glossaryPublication.js +263 -0
- package/dist/state/write/grammar.js +285 -0
- package/dist/state/write/helpers.js +29 -0
- package/dist/state/write/index.js +12 -0
- package/dist/state/write/input.js +391 -0
- package/dist/state/write/lock.js +837 -0
- package/dist/state/write/mutation.js +234 -0
- package/dist/state/write/operations.js +170 -0
- package/dist/state/write/planEvaluation.js +128 -0
- package/dist/state/write/planPublication.js +179 -0
- package/dist/state/write/runtimeOperations.js +146 -0
- package/dist/state/write/serialize.js +1 -0
- package/dist/state/write/transaction.js +57 -0
- package/dist/state/write/validate.js +7 -0
- package/dist/upgrade/appContentRefresh.js +77 -36
- package/dist/upgrade/appModel.js +0 -1
- package/dist/upgrade/atomicWriter.js +1 -0
- package/dist/upgrade/bundleEvidence.js +0 -1
- package/dist/upgrade/channels.js +6 -9
- package/dist/upgrade/compatibility.js +43 -17
- package/dist/upgrade/doctor.js +55 -32
- package/dist/upgrade/doctorClassifier.js +11 -1
- package/dist/upgrade/installedHooksRetirement.js +46 -40
- package/dist/upgrade/legacyAgentCleanup.js +133 -34
- package/dist/upgrade/lifecycleUpgrade.js +126 -0
- package/dist/upgrade/migrateArtifactsV2ToV3.js +325 -82
- package/dist/upgrade/migrationPublication.js +122 -0
- package/dist/upgrade/nextMajorDoctor.js +0 -22
- package/dist/upgrade/npxPlatformStatus.js +2 -2
- package/dist/upgrade/productV1Reset.js +515 -0
- package/dist/upgrade/productV1ResetAuthority.js +139 -0
- package/dist/upgrade/projectIntegration.js +126 -134
- package/dist/upgrade/projectIntegrationDecision.js +21 -13
- package/dist/upgrade/retiredResourceDiagnostics.js +117 -0
- package/dist/upgrade/runtimeMigration.js +210 -430
- package/dist/upgrade/upgradeCommands.js +14 -1
- package/dist/upgrade/upgradeLock.js +85 -0
- package/dist/upgrade/upgradeOrchestrator.js +257 -48
- package/dist/upgrade/v3CapabilitySurface.js +2 -3
- package/dist/upgrade/versionResolution.js +0 -1
- package/dist/validate/activationArtifactEvidence.js +866 -0
- package/dist/validate/activationArtifactEvidenceTypes.js +12 -0
- package/dist/validate/activationConjunction.js +816 -0
- package/dist/validate/activationEvidenceManifest.js +610 -0
- package/dist/validate/activationPackageSemantics.js +29 -0
- package/dist/validate/appHomeContract.js +1 -7
- package/dist/validate/bootstrapAuthority.js +44 -0
- package/dist/validate/capability.js +11 -3
- package/dist/validate/crossCapability.js +14 -9
- package/dist/validate/glossaryVariantGuard.js +96 -0
- package/dist/validate/retainedReferenceAuthority.js +879 -0
- package/dist/validate/selfAudit.js +39 -45
- package/dist/validate/vocabularyAuthority.js +8 -8
- package/package.json +39 -13
- package/bundle/references/adapters/cursor.md +0 -214
- package/bundle/references/adapters/opencode.md +0 -530
- package/bundle/references/adapters/package-manifest-interface-model.yaml +0 -337
- package/bundle/references/adapters/runtime-adapter-characterization.md +0 -79
- package/bundle/references/adapters/runtime-adapter-interface-model.yaml +0 -200
- package/bundle/references/adapters/runtime-adapter-registry.yaml +0 -554
- package/bundle/references/adapters/runtime-feature-parity.md +0 -189
- package/bundle/references/analysis/benchmark.md +0 -267
- package/bundle/references/analysis/startup-measurement-contract.yaml +0 -424
- package/bundle/references/cli/agent-ready-state-contract.yaml +0 -953
- package/bundle/references/cli/audience-namespace-cli-migration.yaml +0 -369
- package/bundle/references/cli/bundle-skill-vocabulary.yaml +0 -250
- package/bundle/references/cli/capability-tool-classification.yaml +0 -53
- package/bundle/references/cli/coexistence-probe.yaml +0 -13
- package/bundle/references/cli/parity-expected-actual-template.md +0 -30
- package/bundle/references/cli/routing-execution-vocabulary.yaml +0 -281
- package/bundle/references/cli/single-name-protocol.yaml +0 -42
- package/bundle/references/cli/upgrade-repair-wording.md +0 -45
- package/bundle/references/cli/v3-handoff-manifest.schema.yaml +0 -98
- package/bundle/references/meta/documentation-inventory.md +0 -49
- package/bundle/skills/agentera/.claude-plugin/plugin.json +0 -27
- package/bundle/skills/agentera/agents/audit.toml +0 -6
- package/bundle/skills/agentera/agents/build.toml +0 -6
- package/bundle/skills/agentera/agents/design.toml +0 -6
- package/bundle/skills/agentera/agents/discuss.toml +0 -6
- package/bundle/skills/agentera/agents/document.toml +0 -6
- package/bundle/skills/agentera/agents/optimize.toml +0 -6
- package/bundle/skills/agentera/agents/orchestrate.toml +0 -6
- package/bundle/skills/agentera/agents/plan.toml +0 -6
- package/bundle/skills/agentera/agents/profile.toml +0 -6
- package/bundle/skills/agentera/agents/research.toml +0 -6
- package/bundle/skills/agentera/agents/status.toml +0 -6
- package/bundle/skills/agentera/agents/vision.toml +0 -6
- package/bundle/skills/agentera/references/contract.md +0 -1048
- package/dist/analytics/extractCorpus/cli.js.map +0 -1
- package/dist/analytics/extractCorpus/copilotSessions.js.map +0 -1
- package/dist/analytics/extractCorpus/core.js.map +0 -1
- package/dist/analytics/extractCorpus/corpus.js.map +0 -1
- package/dist/analytics/extractCorpus/coverageAudit.js.map +0 -1
- package/dist/analytics/extractCorpus/cursorSessions.js.map +0 -1
- package/dist/analytics/extractCorpus/extractCorpusParity.js.map +0 -1
- package/dist/analytics/extractCorpus/filesystemSources.js.map +0 -1
- package/dist/analytics/extractCorpus/index.js.map +0 -1
- package/dist/analytics/extractCorpus/jsonlSessions.js.map +0 -1
- package/dist/analytics/extractCorpus/sqliteCaps.js.map +0 -1
- package/dist/analytics/extractCorpus/sqliteSessions.js.map +0 -1
- package/dist/analytics/extractCorpus.js.map +0 -1
- package/dist/analytics/usageStats.js.map +0 -1
- package/dist/bin/agentera.js.map +0 -1
- package/dist/capabilities/audit/instructions.js.map +0 -1
- package/dist/capabilities/build/instructions.js.map +0 -1
- package/dist/capabilities/design/instructions.js.map +0 -1
- package/dist/capabilities/discuss/instructions.js.map +0 -1
- package/dist/capabilities/document/instructions.js.map +0 -1
- package/dist/capabilities/index.js.map +0 -1
- package/dist/capabilities/optimize/instructions.js.map +0 -1
- package/dist/capabilities/orchestrate/instructions.js.map +0 -1
- package/dist/capabilities/plan/instructions.js.map +0 -1
- package/dist/capabilities/profile/instructions.js.map +0 -1
- package/dist/capabilities/research/instructions.js.map +0 -1
- package/dist/capabilities/status/instructions.js.map +0 -1
- package/dist/capabilities/vision/instructions.js.map +0 -1
- package/dist/cli/appContext.js.map +0 -1
- package/dist/cli/argvalidate.js.map +0 -1
- package/dist/cli/capabilityContext/benchmark.js.map +0 -1
- package/dist/cli/capabilityContext/bespoke.js.map +0 -1
- package/dist/cli/capabilityContext/build.js.map +0 -1
- package/dist/cli/capabilityContext/closeout.js.map +0 -1
- package/dist/cli/capabilityContext/contract.js.map +0 -1
- package/dist/cli/capabilityContext/evidence.js.map +0 -1
- package/dist/cli/capabilityContext/index.js.map +0 -1
- package/dist/cli/capabilityContext/orchestration.js.map +0 -1
- package/dist/cli/capabilityContext/planState.js.map +0 -1
- package/dist/cli/capabilityContext/progress.js.map +0 -1
- package/dist/cli/capabilityContext/shared.js.map +0 -1
- package/dist/cli/capabilityContext/slim.js.map +0 -1
- package/dist/cli/capabilityContext/startup.js.map +0 -1
- package/dist/cli/capabilityContext/types.js.map +0 -1
- package/dist/cli/capabilityContext.js.map +0 -1
- package/dist/cli/commands/appHome.js.map +0 -1
- package/dist/cli/commands/capability.js.map +0 -1
- package/dist/cli/commands/compact.js.map +0 -1
- package/dist/cli/commands/doctor.js.map +0 -1
- package/dist/cli/commands/lint.js.map +0 -1
- package/dist/cli/commands/prime/bundleStatus.js.map +0 -1
- package/dist/cli/commands/prime/collectOrientationState.js.map +0 -1
- package/dist/cli/commands/prime/orientationOutput.js.map +0 -1
- package/dist/cli/commands/prime/types.js.map +0 -1
- package/dist/cli/commands/prime/v1Migration.js +0 -39
- package/dist/cli/commands/prime/v1Migration.js.map +0 -1
- package/dist/cli/commands/prime.js.map +0 -1
- package/dist/cli/commands/query.js.map +0 -1
- package/dist/cli/commands/report.js.map +0 -1
- package/dist/cli/commands/schema.js.map +0 -1
- package/dist/cli/commands/state/decisions.js.map +0 -1
- package/dist/cli/commands/state/docs.js.map +0 -1
- package/dist/cli/commands/state/experiments.js.map +0 -1
- package/dist/cli/commands/state/health.js.map +0 -1
- package/dist/cli/commands/state/index.js.map +0 -1
- package/dist/cli/commands/state/objective.js.map +0 -1
- package/dist/cli/commands/state/plan.js.map +0 -1
- package/dist/cli/commands/state/progress.js.map +0 -1
- package/dist/cli/commands/state/shared.js.map +0 -1
- package/dist/cli/commands/state/todo.js.map +0 -1
- package/dist/cli/commands/upgrade.js.map +0 -1
- package/dist/cli/commands/validate.js.map +0 -1
- package/dist/cli/commands/verify.js.map +0 -1
- package/dist/cli/contracts/bundleStatus.js.map +0 -1
- package/dist/cli/contracts/orientationState.js.map +0 -1
- package/dist/cli/dispatch/argvParser.js.map +0 -1
- package/dist/cli/dispatch/check.js.map +0 -1
- package/dist/cli/dispatch/commands.js.map +0 -1
- package/dist/cli/dispatch/index.js.map +0 -1
- package/dist/cli/dispatch/lifecycle.js.map +0 -1
- package/dist/cli/dispatch/prime.js.map +0 -1
- package/dist/cli/dispatch/shared.js.map +0 -1
- package/dist/cli/dispatch/state.js.map +0 -1
- package/dist/cli/dispatch.js.map +0 -1
- package/dist/cli/errors.js.map +0 -1
- package/dist/cli/help.js.map +0 -1
- package/dist/cli/orientation/attention.js.map +0 -1
- package/dist/cli/orientation/corpusCoverage.js.map +0 -1
- package/dist/cli/orientation.js.map +0 -1
- package/dist/cli/prime-blob.js.map +0 -1
- package/dist/cli/startupCompletenessContract.js.map +0 -1
- package/dist/cli/stateQuery.js.map +0 -1
- package/dist/cli/structured.js.map +0 -1
- package/dist/cli/todoMarkdown.js.map +0 -1
- package/dist/cli/todoSeverity.js.map +0 -1
- package/dist/core/difflib.js.map +0 -1
- package/dist/core/envPaths.js.map +0 -1
- package/dist/core/jsonValue.js.map +0 -1
- package/dist/core/paths.js.map +0 -1
- package/dist/core/pyjson.js.map +0 -1
- package/dist/core/sourceRoot.js.map +0 -1
- package/dist/core/toml.js.map +0 -1
- package/dist/core/yaml.js.map +0 -1
- package/dist/eval/evalSkills.js.map +0 -1
- package/dist/eval/semanticEval.js.map +0 -1
- package/dist/eval/semanticFixtures.js.map +0 -1
- package/dist/hooks/common.js.map +0 -1
- package/dist/hooks/compaction/apply.js.map +0 -1
- package/dist/hooks/compaction/dryRun.js.map +0 -1
- package/dist/hooks/compaction/index.js.map +0 -1
- package/dist/hooks/compaction/parse.js.map +0 -1
- package/dist/hooks/compaction/retention.js.map +0 -1
- package/dist/hooks/compaction/status.js.map +0 -1
- package/dist/hooks/compaction/types.js.map +0 -1
- package/dist/hooks/cursorPreToolUse.js +0 -19
- package/dist/hooks/cursorPreToolUse.js.map +0 -1
- package/dist/hooks/cursorSessionStart.js +0 -79
- package/dist/hooks/cursorSessionStart.js.map +0 -1
- package/dist/hooks/sessionStart.js +0 -216
- package/dist/hooks/sessionStart.js.map +0 -1
- package/dist/hooks/sessionStop.js +0 -206
- package/dist/hooks/sessionStop.js.map +0 -1
- package/dist/hooks/validateArtifact/agentFacing.js.map +0 -1
- package/dist/hooks/validateArtifact/index.js.map +0 -1
- package/dist/hooks/validateArtifact/markdown.js.map +0 -1
- package/dist/hooks/validateArtifact/runtime.js +0 -86
- package/dist/hooks/validateArtifact/runtime.js.map +0 -1
- package/dist/hooks/validateArtifact/schema.js.map +0 -1
- package/dist/hooks/validateArtifact/traversal.js.map +0 -1
- package/dist/hooks/validateArtifact/violations.js.map +0 -1
- package/dist/migrate/v2HandoffManifest.js.map +0 -1
- package/dist/registries/artifactProtocolIds.js.map +0 -1
- package/dist/registries/artifactRegistry.js.map +0 -1
- package/dist/registries/capabilityContract.js.map +0 -1
- package/dist/registries/evaluatorHandoffContract.js.map +0 -1
- package/dist/registries/packageRegistry.js.map +0 -1
- package/dist/registries/runtimeAdapterRegistry.js +0 -316
- package/dist/registries/runtimeAdapterRegistry.js.map +0 -1
- package/dist/registries/triggerLoader.js.map +0 -1
- package/dist/release/releaseMetadata.js.map +0 -1
- package/dist/setup/codex/agents.js +0 -96
- package/dist/setup/codex/agents.js.map +0 -1
- package/dist/setup/codex/cli.js +0 -161
- package/dist/setup/codex/cli.js.map +0 -1
- package/dist/setup/codex/configToml.js +0 -639
- package/dist/setup/codex/configToml.js.map +0 -1
- package/dist/setup/codex/constants.js +0 -29
- package/dist/setup/codex/constants.js.map +0 -1
- package/dist/setup/codex/installRoot.js +0 -64
- package/dist/setup/codex/installRoot.js.map +0 -1
- package/dist/setup/codex/state.js +0 -270
- package/dist/setup/codex/state.js.map +0 -1
- package/dist/setup/codex.js +0 -12
- package/dist/setup/codex.js.map +0 -1
- package/dist/setup/copilot.js +0 -227
- package/dist/setup/copilot.js.map +0 -1
- package/dist/setup/cursor.js +0 -129
- package/dist/setup/cursor.js.map +0 -1
- package/dist/setup/cursorSurfaces.js +0 -67
- package/dist/setup/cursorSurfaces.js.map +0 -1
- package/dist/setup/doctor/core.js +0 -300
- package/dist/setup/doctor/core.js.map +0 -1
- package/dist/setup/doctor/diagnostics.js +0 -240
- package/dist/setup/doctor/diagnostics.js.map +0 -1
- package/dist/setup/doctor/opencode.js +0 -313
- package/dist/setup/doctor/opencode.js.map +0 -1
- package/dist/setup/doctor/report.js +0 -425
- package/dist/setup/doctor/report.js.map +0 -1
- package/dist/setup/doctor.js +0 -10
- package/dist/setup/doctor.js.map +0 -1
- package/dist/setup/opencode.js.map +0 -1
- package/dist/setup/smokeChecks.js.map +0 -1
- package/dist/state/installRoot.js.map +0 -1
- package/dist/state/startupAnalysis/benchmark.js.map +0 -1
- package/dist/state/startupAnalysis/contract.js.map +0 -1
- package/dist/state/startupAnalysis/helpers.js.map +0 -1
- package/dist/state/startupAnalysis/index.js.map +0 -1
- package/dist/state/startupAnalysis/metrics.js.map +0 -1
- package/dist/state/startupAnalysis/records.js.map +0 -1
- package/dist/state/startupAnalysis/report.js.map +0 -1
- package/dist/state/startupAnalysis/threshold.js.map +0 -1
- package/dist/state/startupAnalysis.js.map +0 -1
- package/dist/upgrade/appContentRefresh.js.map +0 -1
- package/dist/upgrade/appModel.js.map +0 -1
- package/dist/upgrade/bundleEvidence.js.map +0 -1
- package/dist/upgrade/channels.js.map +0 -1
- package/dist/upgrade/coexistenceProbe.js +0 -107
- package/dist/upgrade/coexistenceProbe.js.map +0 -1
- package/dist/upgrade/compatibility.js.map +0 -1
- package/dist/upgrade/doctor.js.map +0 -1
- package/dist/upgrade/doctorClassifier.js.map +0 -1
- package/dist/upgrade/installedHooksRetirement.js.map +0 -1
- package/dist/upgrade/legacyAgentCleanup.js.map +0 -1
- package/dist/upgrade/migrateArtifactsV1ToV2.js +0 -570
- package/dist/upgrade/migrateArtifactsV1ToV2.js.map +0 -1
- package/dist/upgrade/migrateArtifactsV2ToV3.js.map +0 -1
- package/dist/upgrade/nextMajorDoctor.js.map +0 -1
- package/dist/upgrade/npxPlatformStatus.js.map +0 -1
- package/dist/upgrade/projectIntegration.js.map +0 -1
- package/dist/upgrade/projectIntegrationDecision.js.map +0 -1
- package/dist/upgrade/runtimeMigration.js.map +0 -1
- package/dist/upgrade/upgradeCommands.js.map +0 -1
- package/dist/upgrade/upgradeOrchestrator.js.map +0 -1
- package/dist/upgrade/v3CapabilitySurface.js.map +0 -1
- package/dist/upgrade/versionResolution.js.map +0 -1
- package/dist/validate/appHomeContract.js.map +0 -1
- package/dist/validate/capability.js.map +0 -1
- package/dist/validate/crossCapability.js.map +0 -1
- package/dist/validate/lifecycleAdapters/legacyPythonParity.js +0 -93
- package/dist/validate/lifecycleAdapters/legacyPythonParity.js.map +0 -1
- package/dist/validate/lifecycleAdapters/nodeFormChecks.js +0 -488
- package/dist/validate/lifecycleAdapters/nodeFormChecks.js.map +0 -1
- package/dist/validate/lifecycleAdapters/shared.js +0 -198
- package/dist/validate/lifecycleAdapters/shared.js.map +0 -1
- package/dist/validate/lifecycleAdapters.js +0 -62
- package/dist/validate/lifecycleAdapters.js.map +0 -1
- package/dist/validate/selfAudit.js.map +0 -1
- package/dist/validate/vocabularyAuthority.js.map +0 -1
|
@@ -106,16 +106,11 @@ export function buildCapabilitySchemaContract(data, contractPath) {
|
|
|
106
106
|
}
|
|
107
107
|
function buildTriggerEnrichmentRules(data) {
|
|
108
108
|
const enrichment = data.TRIGGER_ENRICHMENT;
|
|
109
|
-
const defaults = enrichment.contract_defaults;
|
|
110
109
|
const fields = enrichment.fields;
|
|
111
110
|
const primaryAliases = data.ROUTE_ALIASES.primary_aliases;
|
|
112
111
|
const allowedCapabilityIds = primaryAliases.map((entry) => entry.capability);
|
|
113
112
|
return {
|
|
114
113
|
spec: enrichment.spec,
|
|
115
|
-
contractDefaults: {
|
|
116
|
-
confidenceThreshold: defaults.confidence_threshold,
|
|
117
|
-
borderlineBand: defaults.borderline_band,
|
|
118
|
-
},
|
|
119
114
|
fields: Object.fromEntries(Object.entries(fields).map(([name, raw]) => [name, buildEnrichmentFieldRule(raw)])),
|
|
120
115
|
allowedCapabilityIds,
|
|
121
116
|
};
|
|
@@ -355,9 +350,7 @@ function checkSelfGroups(data, sourceLabel, requiredGroups, errors) {
|
|
|
355
350
|
}
|
|
356
351
|
}
|
|
357
352
|
/**
|
|
358
|
-
* Required integer range field inside TRIGGER_ENRICHMENT
|
|
359
|
-
* per-field min/max). Used by both the contract_defaults and field-level
|
|
360
|
-
* constraint checks below.
|
|
353
|
+
* Required integer range field inside TRIGGER_ENRICHMENT compatibility rules.
|
|
361
354
|
*/
|
|
362
355
|
function checkEnrichmentIntegerField(value, label, sourceLabel, errors) {
|
|
363
356
|
if (typeof value !== "number" || !Number.isInteger(value) || value < 0 || value > 100) {
|
|
@@ -373,22 +366,15 @@ function checkTriggerEnrichmentRules(data, sourceLabel, errors) {
|
|
|
373
366
|
if (typeof enrichment.spec !== "string" || !enrichment.spec) {
|
|
374
367
|
errors.push(`bootstrap [error]: TRIGGER_ENRICHMENT.spec in ${sourceLabel} must be a non-empty string`);
|
|
375
368
|
}
|
|
376
|
-
const defaults = enrichment.contract_defaults;
|
|
377
|
-
if (!isMapping(defaults)) {
|
|
378
|
-
errors.push(`bootstrap [error]: TRIGGER_ENRICHMENT.contract_defaults in ${sourceLabel} must be a mapping`);
|
|
379
|
-
}
|
|
380
|
-
else {
|
|
381
|
-
checkEnrichmentIntegerField(defaults.confidence_threshold, "TRIGGER_ENRICHMENT.contract_defaults.confidence_threshold", sourceLabel, errors);
|
|
382
|
-
checkEnrichmentIntegerField(defaults.borderline_band, "TRIGGER_ENRICHMENT.contract_defaults.borderline_band", sourceLabel, errors);
|
|
383
|
-
}
|
|
384
369
|
const fields = enrichment.fields;
|
|
385
370
|
if (!isMapping(fields)) {
|
|
386
371
|
errors.push(`bootstrap [error]: TRIGGER_ENRICHMENT.fields in ${sourceLabel} must be a mapping`);
|
|
387
372
|
return;
|
|
388
373
|
}
|
|
389
|
-
//
|
|
390
|
-
//
|
|
374
|
+
// Legacy fields remain shape-validated for compatibility, but are not
|
|
375
|
+
// carried into the active semantic trigger model.
|
|
391
376
|
const expected = {
|
|
377
|
+
patterns: "list_of_strings",
|
|
392
378
|
confidence_threshold: "integer",
|
|
393
379
|
borderline_band: "integer",
|
|
394
380
|
patterns_regex: "list_of_strings",
|
|
@@ -414,9 +400,8 @@ function checkTriggerEnrichmentRules(data, sourceLabel, errors) {
|
|
|
414
400
|
if (typeof max !== "number" || max !== 100) {
|
|
415
401
|
errors.push(`bootstrap [error]: TRIGGER_ENRICHMENT.fields.${fieldName}.max in ${sourceLabel} must be 100`);
|
|
416
402
|
}
|
|
417
|
-
checkEnrichmentIntegerField(fields[fieldName].default, `TRIGGER_ENRICHMENT.fields.${fieldName}.default`, sourceLabel, errors);
|
|
418
403
|
}
|
|
419
|
-
if (
|
|
404
|
+
if (fieldName === "patterns_regex" && fields[fieldName].each_must_be_valid_regex !== true) {
|
|
420
405
|
errors.push(`bootstrap [error]: TRIGGER_ENRICHMENT.fields.${fieldName}.each_must_be_valid_regex in ${sourceLabel} must be true`);
|
|
421
406
|
}
|
|
422
407
|
}
|
|
@@ -451,4 +436,3 @@ function checkTriggerEnrichmentRules(data, sourceLabel, errors) {
|
|
|
451
436
|
}
|
|
452
437
|
}
|
|
453
438
|
}
|
|
454
|
-
//# sourceMappingURL=capabilityContract.js.map
|
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { loadYamlMappingFile } from "../core/yaml.js";
|
|
3
|
+
import { resolveSourceRoot } from "../core/sourceRoot.js";
|
|
4
|
+
export class EvidenceTierContractError extends Error {
|
|
5
|
+
constructor(message) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = "EvidenceTierContractError";
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
/** Supported source families the contract must never silently omit. */
|
|
11
|
+
export const REQUIRED_SOURCE_FAMILIES = [
|
|
12
|
+
"codex",
|
|
13
|
+
"cursor",
|
|
14
|
+
"opencode",
|
|
15
|
+
"copilot",
|
|
16
|
+
"claude-code",
|
|
17
|
+
];
|
|
18
|
+
/** Signal semantics whose required meaning must remain available. */
|
|
19
|
+
export const REQUIRED_SIGNAL_KINDS = [
|
|
20
|
+
"correction",
|
|
21
|
+
"decision",
|
|
22
|
+
"question",
|
|
23
|
+
"instruction",
|
|
24
|
+
"configuration",
|
|
25
|
+
"record_identity",
|
|
26
|
+
"date",
|
|
27
|
+
"evidence_anchor",
|
|
28
|
+
"session_id",
|
|
29
|
+
"origin_id",
|
|
30
|
+
"content_fingerprint",
|
|
31
|
+
"author_class",
|
|
32
|
+
];
|
|
33
|
+
/** Compatibility states that must have deterministic, actionable outcomes. */
|
|
34
|
+
export const REQUIRED_COMPATIBILITY_STATES = [
|
|
35
|
+
"oversized",
|
|
36
|
+
"legacy",
|
|
37
|
+
"missing",
|
|
38
|
+
"corrupt",
|
|
39
|
+
"incomplete",
|
|
40
|
+
];
|
|
41
|
+
/** Latent startup-analysis reader that must appear in the consumer map. */
|
|
42
|
+
export const STARTUP_ANALYSIS_CONSUMER = "startup_analysis";
|
|
43
|
+
/** Profile-synthesis consumer that must appear in the consumer map. */
|
|
44
|
+
export const PROFILE_SYNTHESIS_CONSUMER = "profile_synthesis";
|
|
45
|
+
/** Signal types the profile_synthesis consumer reads for bounded synthesis. */
|
|
46
|
+
export const PROFILE_SIGNAL_TYPES = [
|
|
47
|
+
"decision",
|
|
48
|
+
"question",
|
|
49
|
+
"correction",
|
|
50
|
+
"instruction",
|
|
51
|
+
"configuration",
|
|
52
|
+
];
|
|
53
|
+
export function evidenceTierAuthorityPath(root = resolveSourceRoot()) {
|
|
54
|
+
return path.join(root, "references", "analysis", "evidence-tier-authority.yaml");
|
|
55
|
+
}
|
|
56
|
+
function mapping(value) {
|
|
57
|
+
return value !== null && typeof value === "object" && !Array.isArray(value)
|
|
58
|
+
? value
|
|
59
|
+
: null;
|
|
60
|
+
}
|
|
61
|
+
function asRecord(value, label) {
|
|
62
|
+
const m = mapping(value);
|
|
63
|
+
if (m === null) {
|
|
64
|
+
throw new EvidenceTierContractError(`${label} must be a mapping`);
|
|
65
|
+
}
|
|
66
|
+
return m;
|
|
67
|
+
}
|
|
68
|
+
function asMappingMap(value, label) {
|
|
69
|
+
const m = mapping(value);
|
|
70
|
+
const out = new Map();
|
|
71
|
+
if (m === null) {
|
|
72
|
+
throw new EvidenceTierContractError(`${label} must be a mapping`);
|
|
73
|
+
}
|
|
74
|
+
for (const [key, entry] of Object.entries(m)) {
|
|
75
|
+
const em = mapping(entry);
|
|
76
|
+
if (em === null) {
|
|
77
|
+
throw new EvidenceTierContractError(`${label}.${key} must be a mapping`);
|
|
78
|
+
}
|
|
79
|
+
out.set(key, em);
|
|
80
|
+
}
|
|
81
|
+
return out;
|
|
82
|
+
}
|
|
83
|
+
function asString(value, label) {
|
|
84
|
+
if (typeof value !== "string" || value.length === 0) {
|
|
85
|
+
throw new EvidenceTierContractError(`${label} must be a non-empty string`);
|
|
86
|
+
}
|
|
87
|
+
return value;
|
|
88
|
+
}
|
|
89
|
+
function asStringArray(value, label) {
|
|
90
|
+
if (!Array.isArray(value)) {
|
|
91
|
+
throw new EvidenceTierContractError(`${label} must be an array`);
|
|
92
|
+
}
|
|
93
|
+
return value.map((entry, i) => asString(entry, `${label}[${i}]`));
|
|
94
|
+
}
|
|
95
|
+
function asPositiveInt(value, label) {
|
|
96
|
+
if (typeof value !== "number" || !Number.isFinite(value) || value <= 0 || Math.floor(value) !== value) {
|
|
97
|
+
throw new EvidenceTierContractError(`${label} must be a positive integer`);
|
|
98
|
+
}
|
|
99
|
+
return value;
|
|
100
|
+
}
|
|
101
|
+
function asPositiveNumber(value, label) {
|
|
102
|
+
if (typeof value !== "number" || !Number.isFinite(value) || value <= 0 || value > 1) {
|
|
103
|
+
throw new EvidenceTierContractError(`${label} must be a positive number in (0, 1]`);
|
|
104
|
+
}
|
|
105
|
+
return value;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* A family declares either `source_product` (single string) or `source_products`
|
|
109
|
+
* (list, e.g. cursor covers both Cursor and Cursor Agent). Normalize to a list
|
|
110
|
+
* for uniform coverage checks. At least one product is required.
|
|
111
|
+
*/
|
|
112
|
+
function resolveSourceProduct(entry, label) {
|
|
113
|
+
const products = entry.source_products ?? entry.source_product;
|
|
114
|
+
if (products === undefined) {
|
|
115
|
+
throw new EvidenceTierContractError(`${label} must declare source_product or source_products`);
|
|
116
|
+
}
|
|
117
|
+
return Array.isArray(products) ? asStringArray(products, `${label}.source_products`) : [asString(products, `${label}.source_product`)];
|
|
118
|
+
}
|
|
119
|
+
/** Load and structurally validate the evidence-tier authority YAML. */
|
|
120
|
+
export function loadEvidenceTierContract(contractPath = evidenceTierAuthorityPath()) {
|
|
121
|
+
let raw;
|
|
122
|
+
try {
|
|
123
|
+
raw = loadYamlMappingFile(contractPath);
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
throw new EvidenceTierContractError(`evidence tier authority ${contractPath} is unreadable or malformed: ${error.message}`);
|
|
127
|
+
}
|
|
128
|
+
const schemaVersion = asString(raw.schema_version, "schema_version");
|
|
129
|
+
if (schemaVersion !== "agentera.evidenceTierAuthority.v1") {
|
|
130
|
+
throw new EvidenceTierContractError(`evidence tier authority ${contractPath} has unsupported schema_version: ${schemaVersion}`);
|
|
131
|
+
}
|
|
132
|
+
const tiersMap = asMappingMap(raw.tiers, "tiers");
|
|
133
|
+
const tierIds = [];
|
|
134
|
+
for (const [key, entry] of tiersMap) {
|
|
135
|
+
if (key !== "full_evidence" && key !== "signal") {
|
|
136
|
+
throw new EvidenceTierContractError(`tiers.${key} is not a recognized tier id`);
|
|
137
|
+
}
|
|
138
|
+
tierIds.push(key);
|
|
139
|
+
const stored = asRecord(entry.stored_fields, `tiers.${key}.stored_fields`);
|
|
140
|
+
asStringArray(stored.required, `tiers.${key}.stored_fields.required`);
|
|
141
|
+
}
|
|
142
|
+
const familiesMap = asMappingMap(asRecord(raw.source_families, "source_families").families, "source_families.families");
|
|
143
|
+
const families = new Map();
|
|
144
|
+
for (const [familyId, entry] of familiesMap) {
|
|
145
|
+
const sourceClass = asString(entry.source_class, `source_families.families.${familyId}.source_class`);
|
|
146
|
+
if (sourceClass !== "active_runtime" && sourceClass !== "historical_import") {
|
|
147
|
+
throw new EvidenceTierContractError(`source_families.families.${familyId}.source_class must be active_runtime or historical_import`);
|
|
148
|
+
}
|
|
149
|
+
families.set(familyId, {
|
|
150
|
+
family_id: familyId,
|
|
151
|
+
source_class: sourceClass,
|
|
152
|
+
source_product: resolveSourceProduct(entry, `source_families.families.${familyId}`),
|
|
153
|
+
active_runtime: Boolean(entry.active_runtime),
|
|
154
|
+
inclusion_rule: typeof entry.inclusion_rule === "string" ? entry.inclusion_rule : undefined,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
const consumerMapRoot = asRecord(raw.consumer_map, "consumer_map");
|
|
158
|
+
const consumersMap = asMappingMap(consumerMapRoot.consumers, "consumer_map.consumers");
|
|
159
|
+
const consumers = new Map();
|
|
160
|
+
for (const [consumerId, entry] of consumersMap) {
|
|
161
|
+
const tier = asString(entry.tier, `consumer_map.consumers.${consumerId}.tier`);
|
|
162
|
+
if (tier !== "full_evidence" && tier !== "signal") {
|
|
163
|
+
throw new EvidenceTierContractError(`consumer_map.consumers.${consumerId}.tier must be full_evidence or signal`);
|
|
164
|
+
}
|
|
165
|
+
consumers.set(consumerId, {
|
|
166
|
+
consumer_id: consumerId,
|
|
167
|
+
tier,
|
|
168
|
+
purpose: asString(entry.purpose, `consumer_map.consumers.${consumerId}.purpose`),
|
|
169
|
+
required_fields: asStringArray(entry.required_fields, `consumer_map.consumers.${consumerId}.required_fields`),
|
|
170
|
+
source_identity: asString(entry.source_identity, `consumer_map.consumers.${consumerId}.source_identity`),
|
|
171
|
+
input_contract: asString(entry.input_contract, `consumer_map.consumers.${consumerId}.input_contract`),
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
const semanticMap = asMappingMap(consumerMapRoot.semantic_consumers, "consumer_map.semantic_consumers");
|
|
175
|
+
const semanticConsumers = new Map();
|
|
176
|
+
for (const [consumerId, entry] of semanticMap) {
|
|
177
|
+
semanticConsumers.set(consumerId, {
|
|
178
|
+
consumer_id: consumerId,
|
|
179
|
+
tier: asString(entry.tier, `consumer_map.semantic_consumers.${consumerId}.tier`),
|
|
180
|
+
status: asString(entry.status, `consumer_map.semantic_consumers.${consumerId}.status`),
|
|
181
|
+
input_scope: typeof entry.input_scope === "string" ? entry.input_scope : undefined,
|
|
182
|
+
excluded_evidence_classes: Array.isArray(entry.excluded_evidence_classes)
|
|
183
|
+
? asStringArray(entry.excluded_evidence_classes, `consumer_map.semantic_consumers.${consumerId}.excluded_evidence_classes`)
|
|
184
|
+
: [],
|
|
185
|
+
required_semantics: asStringArray(entry.required_semantics, `consumer_map.semantic_consumers.${consumerId}.required_semantics`),
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
const semanticsMap = asMappingMap(asRecord(raw.signal_semantics, "signal_semantics").kinds, "signal_semantics.kinds");
|
|
189
|
+
const signalSemantics = new Map();
|
|
190
|
+
for (const [kind, entry] of semanticsMap) {
|
|
191
|
+
signalSemantics.set(kind, {
|
|
192
|
+
kind,
|
|
193
|
+
meaning: asString(entry.meaning, `signal_semantics.kinds.${kind}.meaning`),
|
|
194
|
+
derivable_from: asString(entry.derivable_from, `signal_semantics.kinds.${kind}.derivable_from`),
|
|
195
|
+
consumer: asString(entry.consumer, `signal_semantics.kinds.${kind}.consumer`),
|
|
196
|
+
current_consumer: typeof entry.current_consumer === "string" ? entry.current_consumer : undefined,
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
const statesMap = asMappingMap(asRecord(raw.compatibility_states, "compatibility_states").states, "compatibility_states.states");
|
|
200
|
+
const compatibilityStates = new Map();
|
|
201
|
+
for (const [key, entry] of statesMap) {
|
|
202
|
+
if (!REQUIRED_COMPATIBILITY_STATES.includes(key)) {
|
|
203
|
+
throw new EvidenceTierContractError(`compatibility_states.states.${key} is not a recognized state`);
|
|
204
|
+
}
|
|
205
|
+
const stateId = key;
|
|
206
|
+
const outcome = asString(entry.outcome, `compatibility_states.states.${key}.outcome`);
|
|
207
|
+
if (outcome !== "recover" && outcome !== "degrade") {
|
|
208
|
+
throw new EvidenceTierContractError(`compatibility_states.states.${key}.outcome must be recover or degrade`);
|
|
209
|
+
}
|
|
210
|
+
compatibilityStates.set(stateId, {
|
|
211
|
+
state_id: stateId,
|
|
212
|
+
trigger: asString(entry.trigger, `compatibility_states.states.${key}.trigger`),
|
|
213
|
+
status: asString(entry.status, `compatibility_states.states.${key}.status`),
|
|
214
|
+
reason: asString(entry.reason, `compatibility_states.states.${key}.reason`),
|
|
215
|
+
outcome,
|
|
216
|
+
recovery: asString(entry.recovery, `compatibility_states.states.${key}.recovery`),
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
const reconciliation = asRecord(raw.decision_55_reconciliation, "decision_55_reconciliation");
|
|
220
|
+
const boundsRoot = asRecord(raw.bounds, "bounds");
|
|
221
|
+
const bounds = {
|
|
222
|
+
readerByteCap: asPositiveInt(boundsRoot.reader_byte_cap, "bounds.reader_byte_cap"),
|
|
223
|
+
shardByteCap: asPositiveInt(boundsRoot.shard_byte_cap, "bounds.shard_byte_cap"),
|
|
224
|
+
signalByteCap: asPositiveInt(boundsRoot.signal_byte_cap, "bounds.signal_byte_cap"),
|
|
225
|
+
};
|
|
226
|
+
const suffRoot = asRecord(raw.profile_sufficiency, "profile_sufficiency");
|
|
227
|
+
const profileSufficiency = {
|
|
228
|
+
profileSignalTypes: asStringArray(suffRoot.profile_signal_types, "profile_sufficiency.profile_signal_types"),
|
|
229
|
+
minimumFamilyRetention: asPositiveNumber(suffRoot.minimum_family_retention, "profile_sufficiency.minimum_family_retention"),
|
|
230
|
+
};
|
|
231
|
+
return {
|
|
232
|
+
schemaVersion,
|
|
233
|
+
status: asString(raw.status, "status"),
|
|
234
|
+
tierIds,
|
|
235
|
+
families,
|
|
236
|
+
consumers,
|
|
237
|
+
semanticConsumers,
|
|
238
|
+
signalSemantics,
|
|
239
|
+
compatibilityStates,
|
|
240
|
+
bounds,
|
|
241
|
+
profileSufficiency,
|
|
242
|
+
decisionNumber: typeof reconciliation.decision_number === "number"
|
|
243
|
+
? reconciliation.decision_number
|
|
244
|
+
: 0,
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
/** All declared source family ids (no family is silently omitted). */
|
|
248
|
+
export function supportedSourceFamilies(contractPath = evidenceTierAuthorityPath()) {
|
|
249
|
+
return [...loadEvidenceTierContract(contractPath).families.keys()];
|
|
250
|
+
}
|
|
251
|
+
/** All declared consumers with their bounded input contract and required fields. */
|
|
252
|
+
export function consumerMap(contractPath = evidenceTierAuthorityPath()) {
|
|
253
|
+
return [...loadEvidenceTierContract(contractPath).consumers.values()];
|
|
254
|
+
}
|
|
255
|
+
/** All declared signal semantics available to current consumers. */
|
|
256
|
+
export function signalSemantics(contractPath = evidenceTierAuthorityPath()) {
|
|
257
|
+
return [...loadEvidenceTierContract(contractPath).signalSemantics.values()];
|
|
258
|
+
}
|
|
259
|
+
/** All declared compatibility states with deterministic, actionable outcomes. */
|
|
260
|
+
export function compatibilityStates(contractPath = evidenceTierAuthorityPath()) {
|
|
261
|
+
return [...loadEvidenceTierContract(contractPath).compatibilityStates.values()];
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Projected byte caps for full-evidence shards and the signal tier. These are
|
|
265
|
+
* the bounds the publication writer and direct retriever enforce; they are read
|
|
266
|
+
* from the authority rather than duplicated in callers.
|
|
267
|
+
*/
|
|
268
|
+
export function evidenceTierBounds(contractPath = evidenceTierAuthorityPath()) {
|
|
269
|
+
return loadEvidenceTierContract(contractPath).bounds;
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Profile-synthesis sufficiency threshold (resolves planning Unknown 2). The
|
|
273
|
+
* profile_signal_types and minimum_family_retention are the authority a bounded
|
|
274
|
+
* profile reader projects when comparing the retained signal distribution
|
|
275
|
+
* against the intended distribution. Callers must not re-declare these.
|
|
276
|
+
*/
|
|
277
|
+
export function profileSufficiency(contractPath = evidenceTierAuthorityPath()) {
|
|
278
|
+
return loadEvidenceTierContract(contractPath).profileSufficiency;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Validate the contract against its invariants. Returns a list of human-readable
|
|
282
|
+
* errors; an empty list means the contract satisfies every Task 1 acceptance
|
|
283
|
+
* invariant. Used by tests for both passing (production contract) and failing
|
|
284
|
+
* (mutated fixture) checks.
|
|
285
|
+
*/
|
|
286
|
+
export function validateEvidenceTierContract(contractPath = evidenceTierAuthorityPath()) {
|
|
287
|
+
const errors = [];
|
|
288
|
+
let model;
|
|
289
|
+
try {
|
|
290
|
+
model = loadEvidenceTierContract(contractPath);
|
|
291
|
+
}
|
|
292
|
+
catch (error) {
|
|
293
|
+
return [error.message];
|
|
294
|
+
}
|
|
295
|
+
// AC1: every consumer has one bounded input contract supplying required fields
|
|
296
|
+
// with source identity.
|
|
297
|
+
for (const consumer of model.consumers.values()) {
|
|
298
|
+
if (consumer.required_fields.length === 0) {
|
|
299
|
+
errors.push(`consumer ${consumer.consumer_id} declares no required fields`);
|
|
300
|
+
}
|
|
301
|
+
if (!consumer.source_identity) {
|
|
302
|
+
errors.push(`consumer ${consumer.consumer_id} has no source identity`);
|
|
303
|
+
}
|
|
304
|
+
if (!consumer.input_contract) {
|
|
305
|
+
errors.push(`consumer ${consumer.consumer_id} has no input contract`);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
if (!model.consumers.has(STARTUP_ANALYSIS_CONSUMER)) {
|
|
309
|
+
errors.push(`consumer map omits latent ${STARTUP_ANALYSIS_CONSUMER} reader`);
|
|
310
|
+
}
|
|
311
|
+
// AC2: no supported source family is silently omitted.
|
|
312
|
+
for (const family of REQUIRED_SOURCE_FAMILIES) {
|
|
313
|
+
if (!model.families.has(family)) {
|
|
314
|
+
errors.push(`source family ${family} is omitted`);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
// AC3: signal semantics required meaning remains available to current and
|
|
318
|
+
// declared semantic consumers.
|
|
319
|
+
for (const kind of REQUIRED_SIGNAL_KINDS) {
|
|
320
|
+
const semantic = model.signalSemantics.get(kind);
|
|
321
|
+
if (!semantic) {
|
|
322
|
+
errors.push(`signal semantic ${kind} is omitted`);
|
|
323
|
+
continue;
|
|
324
|
+
}
|
|
325
|
+
if (!semantic.consumer) {
|
|
326
|
+
errors.push(`signal semantic ${kind} has no declared consumer`);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
for (const [name, consumer] of model.semanticConsumers) {
|
|
330
|
+
for (const kind of consumer.required_semantics) {
|
|
331
|
+
if (!model.signalSemantics.has(kind)) {
|
|
332
|
+
errors.push(`semantic consumer ${name} requires unknown semantic ${kind}`);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
const glossary = model.semanticConsumers.get("glossary");
|
|
337
|
+
if (glossary?.status !== "active" ||
|
|
338
|
+
glossary.input_scope !== "bounded_personal_history" ||
|
|
339
|
+
!glossary.excluded_evidence_classes.includes("project_file")) {
|
|
340
|
+
errors.push("active glossary evidence must use bounded personal history and exclude project files");
|
|
341
|
+
}
|
|
342
|
+
// AC4: every compatibility state is deterministic and actionable.
|
|
343
|
+
for (const state of REQUIRED_COMPATIBILITY_STATES) {
|
|
344
|
+
const def = model.compatibilityStates.get(state);
|
|
345
|
+
if (!def) {
|
|
346
|
+
errors.push(`compatibility state ${state} is omitted`);
|
|
347
|
+
continue;
|
|
348
|
+
}
|
|
349
|
+
if (def.outcome !== "recover" && def.outcome !== "degrade") {
|
|
350
|
+
errors.push(`compatibility state ${state} has non-deterministic outcome`);
|
|
351
|
+
}
|
|
352
|
+
if (!def.recovery) {
|
|
353
|
+
errors.push(`compatibility state ${state} has no actionable recovery`);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
// Profile-synthesis sufficiency (Unknown 2): the consumer must appear, the
|
|
357
|
+
// sufficiency model must declare profile signal types, and each declared
|
|
358
|
+
// type must be a recognized signal semantic so the comparison is meaningful.
|
|
359
|
+
if (!model.consumers.has(PROFILE_SYNTHESIS_CONSUMER)) {
|
|
360
|
+
errors.push(`consumer map omits ${PROFILE_SYNTHESIS_CONSUMER} consumer`);
|
|
361
|
+
}
|
|
362
|
+
if (model.profileSufficiency.profileSignalTypes.length === 0) {
|
|
363
|
+
errors.push("profile_sufficiency declares no profile_signal_types");
|
|
364
|
+
}
|
|
365
|
+
for (const kind of model.profileSufficiency.profileSignalTypes) {
|
|
366
|
+
if (!model.signalSemantics.has(kind)) {
|
|
367
|
+
errors.push(`profile_sufficiency references unknown signal semantic ${kind}`);
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
// Decision 55 reconciliation: the decision is referenced, not rewritten.
|
|
371
|
+
if (model.decisionNumber !== 55) {
|
|
372
|
+
errors.push(`decision_55_reconciliation.decision_number is ${model.decisionNumber}, expected 55`);
|
|
373
|
+
}
|
|
374
|
+
return errors;
|
|
375
|
+
}
|