agentera 3.0.0-dev.7 → 3.0.0-dev.74
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 +229 -22
- package/bundle/.agentera-build-source.json +8 -0
- package/bundle/CHANGELOG.md +1361 -0
- package/bundle/DESIGN.md +229 -0
- package/bundle/LICENSE +201 -0
- package/bundle/README.md +143 -0
- package/bundle/UPGRADE.md +252 -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 +439 -188
- package/bundle/references/adapters/package-surface-characterization.md +68 -34
- 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 +333 -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 +266 -0
- package/bundle/references/artifacts/artifact-registry-interface-model.yaml +17 -8
- package/bundle/references/artifacts/glossary-entry-contract.yaml +2752 -0
- package/bundle/references/artifacts/state-storage-authority.yaml +3061 -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 +6 -4
- package/bundle/references/cli/vocabulary-index.yaml +5 -7
- package/bundle/references/cli/vocabulary.md +52 -94
- package/bundle/references/meta/retained-reference-authority.yaml +166 -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 +30 -12
- package/bundle/skills/agentera/schemas/artifacts/design.yaml +1 -0
- package/bundle/skills/agentera/schemas/artifacts/docs.yaml +7 -12
- package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +140 -9
- package/bundle/skills/agentera/schemas/artifacts/glossary.yaml +87 -0
- package/bundle/skills/agentera/schemas/artifacts/health.yaml +56 -19
- package/bundle/skills/agentera/schemas/artifacts/objective.yaml +18 -4
- package/bundle/skills/agentera/schemas/artifacts/plan.yaml +464 -32
- package/bundle/skills/agentera/schemas/artifacts/progress.yaml +131 -18
- package/bundle/skills/agentera/schemas/artifacts/todo.yaml +302 -7
- 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 +692 -0
- package/dist/analytics/personalGlossaryCandidateProjectionExcerpts.js +144 -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/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 +51 -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 +117 -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 +744 -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 +326 -0
- package/dist/cli/commands/prime/collectOrientationState.js +126 -63
- package/dist/cli/commands/prime/orientationOutput.js +267 -56
- package/dist/cli/commands/prime/types.js +0 -1
- package/dist/cli/commands/prime/v1Migration.js +0 -1
- package/dist/cli/commands/prime.js +76 -11
- package/dist/cli/commands/profileGrounding.js +55 -0
- package/dist/cli/commands/query.js +74 -52
- package/dist/cli/commands/report.js +91 -21
- 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 +433 -0
- package/dist/cli/commands/upgrade.js +146 -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 +77 -52
- package/dist/cli/dispatch/lifecycle.js +162 -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 +404 -39
- package/dist/cli/migrationRequired.js +125 -0
- package/dist/cli/orientation/attention.js +19 -19
- 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/profileAcquisition.js +167 -0
- package/dist/cli/startupCompletenessContract.js +11 -8
- 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 +136 -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 +197 -0
- package/dist/registries/glossaryCandidateProjectionContract.js +104 -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 +167 -10
- 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 +502 -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 +899 -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/todoDocsEntities.js +1124 -0
- package/dist/state/todoDocsEntityValidation.js +158 -0
- package/dist/state/todoMarkdownProjection.js +51 -0
- package/dist/state/todoReconciliationActivation.js +182 -0
- package/dist/state/todoReconciliationInspection.js +171 -0
- package/dist/state/todoReconciliationRepair.js +318 -0
- package/dist/state/todoReconciliationTransaction.js +595 -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 +377 -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 +187 -21
- package/dist/upgrade/lifecycleUpgrade.js +113 -0
- package/dist/upgrade/migrateArtifactsV2ToV3.js +334 -64
- package/dist/upgrade/migrationPublication.js +122 -0
- package/dist/upgrade/nextMajorDoctor.js +0 -1
- package/dist/upgrade/npxPlatformStatus.js +2 -2
- package/dist/upgrade/projectIntegration.js +128 -160
- package/dist/upgrade/projectIntegrationDecision.js +42 -85
- package/dist/upgrade/retiredResourceDiagnostics.js +117 -0
- package/dist/upgrade/runtimeMigration.js +262 -453
- package/dist/upgrade/upgradeCommands.js +14 -1
- package/dist/upgrade/upgradeLock.js +85 -0
- package/dist/upgrade/upgradeOrchestrator.js +263 -59
- 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/retainedReferenceAuthority.js +879 -0
- package/dist/validate/selfAudit.js +39 -45
- package/dist/validate/v1LegacyCruft.js +131 -0
- 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/dokumentera/instructions.js +0 -6
- package/dist/capabilities/dokumentera/instructions.js.map +0 -1
- package/dist/capabilities/hej/instructions.js +0 -6
- package/dist/capabilities/hej/instructions.js.map +0 -1
- package/dist/capabilities/index.js.map +0 -1
- package/dist/capabilities/inspektera/instructions.js +0 -6
- package/dist/capabilities/inspektera/instructions.js.map +0 -1
- package/dist/capabilities/inspirera/instructions.js +0 -6
- package/dist/capabilities/inspirera/instructions.js.map +0 -1
- package/dist/capabilities/optimera/instructions.js +0 -6
- package/dist/capabilities/optimera/instructions.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/orkestrera/instructions.js +0 -6
- package/dist/capabilities/orkestrera/instructions.js.map +0 -1
- package/dist/capabilities/plan/instructions.js.map +0 -1
- package/dist/capabilities/planera/instructions.js +0 -6
- package/dist/capabilities/planera/instructions.js.map +0 -1
- package/dist/capabilities/profile/instructions.js.map +0 -1
- package/dist/capabilities/profilera/instructions.js +0 -6
- package/dist/capabilities/profilera/instructions.js.map +0 -1
- package/dist/capabilities/realisera/instructions.js +0 -6
- package/dist/capabilities/realisera/instructions.js.map +0 -1
- package/dist/capabilities/research/instructions.js.map +0 -1
- package/dist/capabilities/resonera/instructions.js +0 -6
- package/dist/capabilities/resonera/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/capabilities/visionera/instructions.js +0 -6
- package/dist/capabilities/visionera/instructions.js.map +0 -1
- package/dist/capabilities/visualisera/instructions.js +0 -5
- package/dist/capabilities/visualisera/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/realisera.js +0 -174
- package/dist/cli/capabilityContext/realisera.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/backfill.js +0 -84
- package/dist/cli/commands/backfill.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/routeOutput.js +0 -50
- package/dist/cli/commands/prime/routeOutput.js.map +0 -1
- package/dist/cli/commands/prime/types.js.map +0 -1
- 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/state.js +0 -1023
- package/dist/cli/commands/state.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/git.js +0 -43
- package/dist/core/git.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/todoResolved.js +0 -137
- package/dist/hooks/compaction/todoResolved.js.map +0 -1
- package/dist/hooks/compaction/types.js.map +0 -1
- package/dist/hooks/compaction.js +0 -935
- package/dist/hooks/compaction.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/todoLayout.js +0 -177
- package/dist/hooks/todoLayout.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/hooks/validateArtifact.js +0 -924
- package/dist/hooks/validateArtifact.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/routing/index.js +0 -2
- package/dist/routing/index.js.map +0 -1
- package/dist/routing/routeEngine.js +0 -189
- package/dist/routing/routeEngine.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/progressCommit.js +0 -289
- package/dist/state/progressCommit.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/cliProbe.js +0 -22
- package/dist/upgrade/cliProbe.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
|
@@ -0,0 +1,2752 @@
|
|
|
1
|
+
schema_version: agentera.glossaryEntryContract.v1
|
|
2
|
+
status: active_authority
|
|
3
|
+
purpose: >-
|
|
4
|
+
Define glossary entry semantics once, specialize evidence ownership for
|
|
5
|
+
personal and project entries, and declare one consumer-semantics and caveat
|
|
6
|
+
lifecycle contract with bounded acquisition and shared advice resolution.
|
|
7
|
+
Build, Discuss, Plan, and prime consumption are active. Build alone owns
|
|
8
|
+
durable caveat publication; prime projects only bounded review attention.
|
|
9
|
+
|
|
10
|
+
authority:
|
|
11
|
+
source: references/artifacts/glossary-entry-contract.yaml
|
|
12
|
+
confidence: skills/agentera/protocol.yaml#CONFIDENCE_SCALE
|
|
13
|
+
personal_history: references/analysis/evidence-tier-authority.yaml
|
|
14
|
+
permanence_decay: packages/cli/src/capabilities/profile/instructions.ts#Profile-format
|
|
15
|
+
single_source_rule: >-
|
|
16
|
+
Producers and consumers derive entry shape from shared_primitive and must
|
|
17
|
+
not restate confidence bands, decay constants, or provenance variants.
|
|
18
|
+
|
|
19
|
+
shared_primitive:
|
|
20
|
+
required_fields: [term, meaning, confidence, permanence, temporal, provenance]
|
|
21
|
+
fields:
|
|
22
|
+
term:
|
|
23
|
+
type: non_empty_string
|
|
24
|
+
meaning:
|
|
25
|
+
type: non_empty_string
|
|
26
|
+
confidence:
|
|
27
|
+
type: integer
|
|
28
|
+
range_from: skills/agentera/protocol.yaml#CONFIDENCE_SCALE
|
|
29
|
+
permanence:
|
|
30
|
+
type: enum
|
|
31
|
+
values: [stable, durable, situational]
|
|
32
|
+
classification_rule: >-
|
|
33
|
+
Classify expected persistence independently from evidence strength.
|
|
34
|
+
Confidence changes never reclassify permanence.
|
|
35
|
+
temporal:
|
|
36
|
+
type: object
|
|
37
|
+
required_fields: [observed_at, last_confirmed_at]
|
|
38
|
+
field_type: iso_date
|
|
39
|
+
provenance:
|
|
40
|
+
type: discriminated_union
|
|
41
|
+
discriminator: kind
|
|
42
|
+
evidence_field: evidence
|
|
43
|
+
variants_from: provenance_variants
|
|
44
|
+
|
|
45
|
+
term_occurrence:
|
|
46
|
+
runtime: packages/cli/src/registries/glossaryTermOccurrence.ts#containsGlossaryTerm
|
|
47
|
+
consumers: [audit_evidence, project_publication_revalidation, confirmed_variant_guard]
|
|
48
|
+
comparison: exact_case_sensitive_literal
|
|
49
|
+
normalization: none
|
|
50
|
+
identifier_continuation: unicode_ID_Continue_plus_dollar_ZWNJ_ZWJ
|
|
51
|
+
rule: >-
|
|
52
|
+
Match one escaped literal without case folding or Unicode normalization.
|
|
53
|
+
When a term edge is an identifier-continuation character, reject an
|
|
54
|
+
occurrence adjacent to Unicode ID_Continue, dollar sign, U+200C ZERO WIDTH
|
|
55
|
+
NON-JOINER, or U+200D ZERO WIDTH JOINER. These are the ECMAScript identifier
|
|
56
|
+
continuation characters relevant to source-line terminology boundaries.
|
|
57
|
+
Literal escaping and fixed-width boundary assertions prevent regex syntax,
|
|
58
|
+
partial identifier matches, and input-dependent backtracking.
|
|
59
|
+
|
|
60
|
+
personal_mining_authority:
|
|
61
|
+
status: active_partial
|
|
62
|
+
implementation_boundary: >-
|
|
63
|
+
This section settles personal glossary mining identity, evidence provenance,
|
|
64
|
+
consent, privacy, lifecycle, bounded explicit-discovery, public receipt construction,
|
|
65
|
+
and deterministic decision authority. The runtime performs bounded discovery,
|
|
66
|
+
candidate projection, private candidate retrieval, deterministic CLI
|
|
67
|
+
validation of host semantic evidence, explicit authorized personal
|
|
68
|
+
publication, and Profile Full integration. It does not perform host
|
|
69
|
+
semantic classification, project or public-state candidate reads, or
|
|
70
|
+
project glossary integration.
|
|
71
|
+
preserved_decisions: [prmnztjytv, mcsmqqitnm, zyvgyvjnsv]
|
|
72
|
+
replacement:
|
|
73
|
+
shared_primitive: shared_primitive
|
|
74
|
+
personal_owner: ownership_contracts.personal
|
|
75
|
+
project_owner: ownership_contracts.project
|
|
76
|
+
consumer_precedence: consumer_boundary.primary_selection
|
|
77
|
+
project_publication: ownership_contracts.project.publication
|
|
78
|
+
allowed_effects: [personal_profile_output]
|
|
79
|
+
forbidden_effects:
|
|
80
|
+
- project_glossary_read
|
|
81
|
+
- project_glossary_mutation
|
|
82
|
+
- project_publication_replacement
|
|
83
|
+
- consumer_precedence_change
|
|
84
|
+
- personal_project_merge
|
|
85
|
+
rule: >-
|
|
86
|
+
Mining may replace only the user-owned personal profile glossary through
|
|
87
|
+
the existing personal profile output lifecycle. It never reads or writes
|
|
88
|
+
project glossary state, changes consumer precedence, or changes the
|
|
89
|
+
Build-owned digest-confirmed project publication operation.
|
|
90
|
+
explicit_discovery:
|
|
91
|
+
status: active
|
|
92
|
+
runtime: packages/cli/src/analytics/personalGlossaryExplicit.ts#discoverExplicitGlossaryCues
|
|
93
|
+
mining_runtime: packages/cli/src/analytics/personalGlossaryExplicitMining.ts#mineExplicitGlossaryCandidates
|
|
94
|
+
input: bounded_signal_tier_plus_direct_single_anchor_resolution
|
|
95
|
+
output: evidence_capsule_plus_exact_source_spans_only
|
|
96
|
+
scope_window: current_sentence_and_one_adjacent_sentence_each_side
|
|
97
|
+
scope_binding: explicit_scope_marker_must_contain_the_term_or_be_a_direct_qualifier
|
|
98
|
+
span_encoding: utf8_byte_offsets
|
|
99
|
+
strings: preserve_exact_source_bytes_without_unicode_normalization
|
|
100
|
+
adjacent_direct_reference_exclusion:
|
|
101
|
+
references:
|
|
102
|
+
- this_definition
|
|
103
|
+
- this_term
|
|
104
|
+
- this_meaning
|
|
105
|
+
- following_definition
|
|
106
|
+
- following_term
|
|
107
|
+
- following_meaning
|
|
108
|
+
qualifiers: [question, example, future, hypothetical]
|
|
109
|
+
binding:
|
|
110
|
+
preceding_sentence: following_reference_only
|
|
111
|
+
following_sentence: this_reference_only
|
|
112
|
+
exact_literal_term: either_direction
|
|
113
|
+
grammar:
|
|
114
|
+
forms:
|
|
115
|
+
- id: quoted_means
|
|
116
|
+
segment_class: explicit_cue_segment
|
|
117
|
+
entry: outside_approved_cue
|
|
118
|
+
termination: shared_bounded_termination
|
|
119
|
+
output: shared_cue_segment_output
|
|
120
|
+
syntax: quoted_or_code_delimited_term_means_meaning
|
|
121
|
+
term: one_balanced_supported_quote_or_backtick_delimited_span
|
|
122
|
+
- id: definition_list_colon
|
|
123
|
+
segment_class: explicit_cue_segment
|
|
124
|
+
entry: outside_approved_cue
|
|
125
|
+
termination: shared_bounded_termination
|
|
126
|
+
output: shared_cue_segment_output
|
|
127
|
+
syntax: standalone_safe_definition_list_term_colon_meaning
|
|
128
|
+
prefix: sentence_or_line_start_with_optional_markdown_list_bullet
|
|
129
|
+
unmarked_terms:
|
|
130
|
+
- quoted_or_code_delimited_term
|
|
131
|
+
- uppercase_acronym_with_exact_expansion_initials
|
|
132
|
+
markers: [definition, term]
|
|
133
|
+
marked_term: bounded_nonempty_term
|
|
134
|
+
bare_multiword_term_without_marker: reject
|
|
135
|
+
meaning_start: nonempty_same_physical_line
|
|
136
|
+
continuation: after_nonempty_inline_meaning_within_maximum_meaning_bound_only
|
|
137
|
+
empty_marker_structure: reject_immediately_following_colon_line
|
|
138
|
+
exclusions: yaml_config_labels_times_urls_headings_citations_and_labels
|
|
139
|
+
- id: acronym_stands_for
|
|
140
|
+
segment_class: explicit_cue_segment
|
|
141
|
+
entry: outside_approved_cue
|
|
142
|
+
termination: shared_bounded_termination
|
|
143
|
+
output: shared_cue_segment_output
|
|
144
|
+
syntax: bounded_acronym_stands_for_expansion
|
|
145
|
+
validation: expansion_initials_must_match_acronym_exactly
|
|
146
|
+
- id: acronym_parenthetical
|
|
147
|
+
segment_class: explicit_cue_segment
|
|
148
|
+
entry: outside_approved_cue
|
|
149
|
+
termination: shared_bounded_termination
|
|
150
|
+
output: shared_cue_segment_output
|
|
151
|
+
syntax: bounded_acronym_parenthesized_expansion_or_reverse
|
|
152
|
+
validation: expansion_initials_must_match_acronym_exactly
|
|
153
|
+
- id: by_i_mean
|
|
154
|
+
segment_class: explicit_cue_segment
|
|
155
|
+
entry: outside_approved_cue
|
|
156
|
+
termination: shared_bounded_termination
|
|
157
|
+
output: shared_cue_segment_output
|
|
158
|
+
syntax: by_term_i_mean_meaning
|
|
159
|
+
- id: use_for
|
|
160
|
+
segment_class: explicit_cue_segment
|
|
161
|
+
entry: outside_approved_cue
|
|
162
|
+
termination: shared_bounded_termination
|
|
163
|
+
output: shared_cue_segment_output
|
|
164
|
+
syntax: use_term_for_meaning
|
|
165
|
+
- id: use_to_mean
|
|
166
|
+
segment_class: explicit_cue_segment
|
|
167
|
+
entry: outside_approved_cue
|
|
168
|
+
termination: shared_bounded_termination
|
|
169
|
+
output: shared_cue_segment_output
|
|
170
|
+
syntax: use_term_to_mean_meaning
|
|
171
|
+
- id: refers_to
|
|
172
|
+
segment_class: explicit_cue_segment
|
|
173
|
+
entry: outside_approved_cue
|
|
174
|
+
termination: shared_bounded_termination
|
|
175
|
+
output: shared_cue_segment_output
|
|
176
|
+
syntax: term_refers_to_meaning
|
|
177
|
+
- id: clarification_prefer_to_mean
|
|
178
|
+
segment_class: explicit_cue_segment
|
|
179
|
+
entry: outside_approved_cue
|
|
180
|
+
termination: shared_bounded_termination
|
|
181
|
+
output: shared_cue_segment_output
|
|
182
|
+
syntax: to_clarify_i_prefer_term_to_mean_meaning
|
|
183
|
+
- id: correction_means
|
|
184
|
+
segment_class: explicit_cue_segment
|
|
185
|
+
entry: outside_approved_cue
|
|
186
|
+
termination: shared_bounded_termination
|
|
187
|
+
output: shared_cue_segment_output
|
|
188
|
+
syntax: approved_correction_prefix_quoted_or_code_term_means_meaning
|
|
189
|
+
prefixes: [actually, correction, not_quite, instead, rather]
|
|
190
|
+
bounds:
|
|
191
|
+
maximum_term_utf8_bytes: 256
|
|
192
|
+
maximum_meaning_utf8_bytes: 4096
|
|
193
|
+
maximum_acronym_utf8_bytes: 32
|
|
194
|
+
maximum_acronym_words: 32
|
|
195
|
+
segment_grammar:
|
|
196
|
+
schema_version: agentera.personalGlossarySegmentGrammar.v1
|
|
197
|
+
segment_class: explicit_cue_segment
|
|
198
|
+
states: [outside, cue, inline_meaning, continuation, structural_config, terminated, rejected]
|
|
199
|
+
input_classes:
|
|
200
|
+
- approved_cue
|
|
201
|
+
- non_empty_inline_meaning
|
|
202
|
+
- continuation_line
|
|
203
|
+
- blank_line
|
|
204
|
+
- next_cue
|
|
205
|
+
- structural_fragment
|
|
206
|
+
- comment
|
|
207
|
+
- list_boundary
|
|
208
|
+
- indentation
|
|
209
|
+
- nested_marker
|
|
210
|
+
- block_scalar
|
|
211
|
+
- prose
|
|
212
|
+
- unsupported
|
|
213
|
+
- eof
|
|
214
|
+
initial_state: outside
|
|
215
|
+
terminal_states: [terminated, rejected]
|
|
216
|
+
entry:
|
|
217
|
+
from: outside
|
|
218
|
+
input: approved_cue
|
|
219
|
+
to: cue
|
|
220
|
+
accepted_forms:
|
|
221
|
+
- quoted_means
|
|
222
|
+
- definition_list_colon
|
|
223
|
+
- acronym_stands_for
|
|
224
|
+
- acronym_parenthetical
|
|
225
|
+
- by_i_mean
|
|
226
|
+
- use_for
|
|
227
|
+
- use_to_mean
|
|
228
|
+
- refers_to
|
|
229
|
+
- clarification_prefer_to_mean
|
|
230
|
+
- correction_means
|
|
231
|
+
unsupported_reason: unsupported_transition
|
|
232
|
+
termination:
|
|
233
|
+
start_state: inline_meaning
|
|
234
|
+
continuation_state: continuation
|
|
235
|
+
terminal_state: terminated
|
|
236
|
+
required: non_empty_inline_meaning
|
|
237
|
+
boundary_inputs: [blank_line, next_cue, structural_fragment, comment, list_boundary]
|
|
238
|
+
maximum_meaning_utf8_bytes: 4096
|
|
239
|
+
limit: inclusive
|
|
240
|
+
over_limit_reason: meaning_bound_exceeded
|
|
241
|
+
output:
|
|
242
|
+
fields: [term, meaning, term_span, meaning_span]
|
|
243
|
+
span_encoding: utf8_byte_offsets
|
|
244
|
+
source_semantics: exact_source_bytes_without_unicode_normalization
|
|
245
|
+
continuation:
|
|
246
|
+
starts_after: non_empty_inline_meaning
|
|
247
|
+
preserves: exact_source_newlines_and_utf8_bytes
|
|
248
|
+
stops_on: [blank_line, next_cue, structural_fragment, comment, list_boundary]
|
|
249
|
+
maximum_utf8_bytes: 4096
|
|
250
|
+
limit: inclusive
|
|
251
|
+
over_limit: reject
|
|
252
|
+
over_limit_reason: meaning_bound_exceeded
|
|
253
|
+
structural_configuration:
|
|
254
|
+
state: structural_config
|
|
255
|
+
entry_inputs: [structural_fragment, list_boundary]
|
|
256
|
+
persist_inputs: [comment, blank_line, indentation, nested_marker, block_scalar, structural_fragment, list_boundary]
|
|
257
|
+
reject_inputs: [comment, blank_line, indentation, nested_marker, block_scalar, structural_fragment, list_boundary, approved_cue]
|
|
258
|
+
exit:
|
|
259
|
+
input: prose
|
|
260
|
+
condition: top_level_nonempty_noncomment_nonmarker_nonstructural_line
|
|
261
|
+
action: reject_fragment_then_exit
|
|
262
|
+
next_state: outside
|
|
263
|
+
definition_allowed: next_physical_line_only
|
|
264
|
+
reference_binding:
|
|
265
|
+
following: nearest_next_cue
|
|
266
|
+
this: nearest_previous_cue
|
|
267
|
+
exact_term: nearest_matching_cue
|
|
268
|
+
matching: unicode_caseless_exact_no_normalization
|
|
269
|
+
duplicate_target_reason: ambiguous_reference
|
|
270
|
+
missing_target_reason: ambiguous_reference
|
|
271
|
+
duplicate_target_outcome: exclude_bound_cue_only
|
|
272
|
+
missing_target_outcome: exclude_bound_cue_only
|
|
273
|
+
unrelated_cue_outcome: retain
|
|
274
|
+
deduplication:
|
|
275
|
+
identity: personal_mining_authority.term_identity.stable_term_identity
|
|
276
|
+
same_identity_same_meaning: retain_one_earliest_source_span
|
|
277
|
+
same_identity_different_meaning: reject_all_conflicting_meaning
|
|
278
|
+
unrelated_cue_outcome: retain
|
|
279
|
+
canonical_order:
|
|
280
|
+
fields: [term, meaning, term_span.start, meaning_span.start]
|
|
281
|
+
comparator: unicode_scalar_code_point_ascending
|
|
282
|
+
direction: ascending
|
|
283
|
+
transitions:
|
|
284
|
+
- {from: outside, input: approved_cue, to: cue, action: enter_cue_segment}
|
|
285
|
+
- {from: outside, input: structural_fragment, to: structural_config, action: enter_structural_config, reason: structural_fragment}
|
|
286
|
+
- {from: outside, input: list_boundary, to: structural_config, action: enter_structural_config, reason: structural_fragment}
|
|
287
|
+
- {from: outside, input: unsupported, to: rejected, action: reject, reason: unsupported_transition}
|
|
288
|
+
- {from: cue, input: non_empty_inline_meaning, to: inline_meaning, action: capture_inline_meaning}
|
|
289
|
+
- {from: cue, input: blank_line, to: rejected, action: reject, reason: empty_meaning}
|
|
290
|
+
- {from: cue, input: next_cue, to: rejected, action: reject, reason: empty_meaning}
|
|
291
|
+
- {from: cue, input: structural_fragment, to: rejected, action: reject, reason: empty_meaning}
|
|
292
|
+
- {from: cue, input: unsupported, to: rejected, action: reject, reason: unsupported_transition}
|
|
293
|
+
- {from: inline_meaning, input: continuation_line, to: continuation, action: append_original_newline}
|
|
294
|
+
- {from: inline_meaning, input: blank_line, to: terminated, action: finish_before_boundary}
|
|
295
|
+
- {from: inline_meaning, input: next_cue, to: terminated, action: finish_before_boundary}
|
|
296
|
+
- {from: inline_meaning, input: structural_fragment, to: terminated, action: finish_before_boundary}
|
|
297
|
+
- {from: inline_meaning, input: comment, to: terminated, action: finish_before_boundary}
|
|
298
|
+
- {from: inline_meaning, input: list_boundary, to: terminated, action: finish_before_boundary}
|
|
299
|
+
- {from: inline_meaning, input: prose, to: continuation, action: append_original_newline}
|
|
300
|
+
- {from: inline_meaning, input: eof, to: terminated, action: finish_at_eof}
|
|
301
|
+
- {from: inline_meaning, input: unsupported, to: rejected, action: reject, reason: unsupported_transition}
|
|
302
|
+
- {from: continuation, input: continuation_line, to: continuation, action: append_original_newline}
|
|
303
|
+
- {from: continuation, input: prose, to: continuation, action: append_original_newline}
|
|
304
|
+
- {from: continuation, input: blank_line, to: terminated, action: finish_before_boundary}
|
|
305
|
+
- {from: continuation, input: next_cue, to: terminated, action: finish_before_boundary}
|
|
306
|
+
- {from: continuation, input: structural_fragment, to: terminated, action: finish_before_boundary}
|
|
307
|
+
- {from: continuation, input: comment, to: terminated, action: finish_before_boundary}
|
|
308
|
+
- {from: continuation, input: list_boundary, to: terminated, action: finish_before_boundary}
|
|
309
|
+
- {from: continuation, input: eof, to: terminated, action: finish_at_eof}
|
|
310
|
+
- {from: continuation, input: unsupported, to: rejected, action: reject, reason: unsupported_transition}
|
|
311
|
+
- {from: structural_config, input: approved_cue, to: rejected, action: reject, reason: structural_fragment}
|
|
312
|
+
- {from: structural_config, input: structural_fragment, to: structural_config, action: reject_structural_fragment, reason: structural_fragment}
|
|
313
|
+
- {from: structural_config, input: comment, to: structural_config, action: reject_structural_fragment, reason: structural_fragment}
|
|
314
|
+
- {from: structural_config, input: blank_line, to: structural_config, action: reject_structural_fragment, reason: structural_fragment}
|
|
315
|
+
- {from: structural_config, input: indentation, to: structural_config, action: reject_structural_fragment, reason: structural_fragment}
|
|
316
|
+
- {from: structural_config, input: nested_marker, to: structural_config, action: reject_structural_fragment, reason: structural_fragment}
|
|
317
|
+
- {from: structural_config, input: block_scalar, to: structural_config, action: reject_structural_fragment, reason: structural_fragment}
|
|
318
|
+
- {from: structural_config, input: list_boundary, to: structural_config, action: reject_structural_fragment, reason: structural_fragment}
|
|
319
|
+
- {from: structural_config, input: prose, to: outside, action: reject_fragment_then_exit, reason: structural_fragment}
|
|
320
|
+
- {from: structural_config, input: unsupported, to: rejected, action: reject, reason: unsupported_transition}
|
|
321
|
+
- {from: structural_config, input: eof, to: rejected, action: reject, reason: structural_fragment}
|
|
322
|
+
- {from: terminated, input: unsupported, to: rejected, action: reject, reason: unsupported_transition}
|
|
323
|
+
- {from: rejected, input: unsupported, to: rejected, action: reject, reason: unsupported_transition}
|
|
324
|
+
fallback_transitions:
|
|
325
|
+
outside: {from: outside, input: unsupported, to: rejected, action: reject, reason: unsupported_transition}
|
|
326
|
+
cue: {from: cue, input: unsupported, to: rejected, action: reject, reason: unsupported_transition}
|
|
327
|
+
inline_meaning: {from: inline_meaning, input: unsupported, to: rejected, action: reject, reason: unsupported_transition}
|
|
328
|
+
continuation: {from: continuation, input: unsupported, to: rejected, action: reject, reason: unsupported_transition}
|
|
329
|
+
structural_config: {from: structural_config, input: unsupported, to: rejected, action: reject, reason: unsupported_transition}
|
|
330
|
+
terminated: {from: terminated, input: unsupported, to: rejected, action: reject, reason: unsupported_transition}
|
|
331
|
+
rejected: {from: rejected, input: unsupported, to: rejected, action: reject, reason: unsupported_transition}
|
|
332
|
+
reasons:
|
|
333
|
+
unsupported_transition: unsupported_transition
|
|
334
|
+
structural_fragment: structural_fragment
|
|
335
|
+
empty_meaning: empty_meaning
|
|
336
|
+
meaning_bound_exceeded: meaning_bound_exceeded
|
|
337
|
+
ambiguous_reference: ambiguous_reference
|
|
338
|
+
conflicting_meaning: conflicting_meaning
|
|
339
|
+
invalid_exit_boundary: invalid_exit_boundary
|
|
340
|
+
exclusions:
|
|
341
|
+
- examples
|
|
342
|
+
- mere_mentions
|
|
343
|
+
- direct_or_indirect_questions
|
|
344
|
+
- negations
|
|
345
|
+
- hypotheticals_conditionals
|
|
346
|
+
- future_language
|
|
347
|
+
- deterministic_sarcasm_markers
|
|
348
|
+
- quotations_attributed_to_others
|
|
349
|
+
- retractions_or_replacements_bound_to_the_same_term
|
|
350
|
+
- project_qualified_scope
|
|
351
|
+
- malformed_empty_or_oversized_spans
|
|
352
|
+
- incomplete_or_invalid_source_provenance
|
|
353
|
+
provenance:
|
|
354
|
+
required_source_fields:
|
|
355
|
+
- source_id
|
|
356
|
+
- evidence_anchor
|
|
357
|
+
- source_kind
|
|
358
|
+
- signal_type
|
|
359
|
+
- origin_id
|
|
360
|
+
- content_fingerprint
|
|
361
|
+
- author_class
|
|
362
|
+
- session_id
|
|
363
|
+
- project_id
|
|
364
|
+
allowed_source_kinds: [conversation_turn]
|
|
365
|
+
identity_fields_must_match_full_record: true
|
|
366
|
+
user_author_class: user
|
|
367
|
+
unresolved_or_invalid: stable_provenance_abstention
|
|
368
|
+
term_identity:
|
|
369
|
+
equality:
|
|
370
|
+
runtime: packages/cli/src/registries/glossaryTermIdentity.ts#unicodeCaselessExact
|
|
371
|
+
semantics: unicode_caseless_exact_no_normalization
|
|
372
|
+
rule: >-
|
|
373
|
+
Equality remains the existing locale-independent ECMAScript Unicode
|
|
374
|
+
caseless-exact matcher. Canonical, compatibility, accent, and locale
|
|
375
|
+
normalization are not added to equality.
|
|
376
|
+
stable_term_identity:
|
|
377
|
+
schema_version: agentera.personalGlossaryTermIdentity.v1
|
|
378
|
+
runtime: packages/cli/src/registries/glossaryTermIdentity.ts#stableGlossaryTermIdentity
|
|
379
|
+
algorithm: sha256
|
|
380
|
+
encoding: lowercase_hex
|
|
381
|
+
canonical_input: ecmascript_simple_case_fold_key
|
|
382
|
+
no_unicode_normalization: true
|
|
383
|
+
key_rule: >-
|
|
384
|
+
For each Unicode scalar, use its one-scalar locale-independent lowercase
|
|
385
|
+
mapping. Also derive the lowercase mapping of its one-scalar uppercase
|
|
386
|
+
mapping, but use that alternate only when unicodeCaselessExact confirms
|
|
387
|
+
the original scalar and alternate are equal. Concatenate those selected
|
|
388
|
+
scalars without normalization, then hash the resulting UTF-8 key with the
|
|
389
|
+
versioned schema name. This follows the exact matcher, including keeping
|
|
390
|
+
ASCII I and dotless ı distinct.
|
|
391
|
+
invariant: >-
|
|
392
|
+
Stable identity is an identifier for the existing equality class, not a
|
|
393
|
+
new comparison rule. It never lowercases, normalizes, trims, or changes
|
|
394
|
+
the term stored in a shared entry.
|
|
395
|
+
candidate_revision:
|
|
396
|
+
schema_version: agentera.personalGlossaryCandidateRevision.v1
|
|
397
|
+
runtime: packages/cli/src/registries/glossaryTermIdentity.ts#glossaryCandidateRevision
|
|
398
|
+
algorithm: sha256
|
|
399
|
+
encoding: lowercase_hex
|
|
400
|
+
canonicalization: >-
|
|
401
|
+
Hash canonical UTF-8 JSON with recursively code-point-sorted object keys,
|
|
402
|
+
preserved string bytes, and evidence records sorted by their canonical
|
|
403
|
+
JSON. The schema name, stable_term_identity, meaning, scope, complete
|
|
404
|
+
evidence identity set, policy_version, and generation are all included.
|
|
405
|
+
No field may be omitted, reordered semantically, normalized, or replaced
|
|
406
|
+
by a display label.
|
|
407
|
+
bound_fields:
|
|
408
|
+
- stable_term_identity
|
|
409
|
+
- meaning
|
|
410
|
+
- scope
|
|
411
|
+
- evidence
|
|
412
|
+
- policy_version
|
|
413
|
+
- generation
|
|
414
|
+
policy_version: agentera.personalGlossaryMiningPolicy.v1
|
|
415
|
+
generation: content_addressed_candidate_projection_generation
|
|
416
|
+
evidence: complete_source_id_anchor_identity_set
|
|
417
|
+
replay_rule: >-
|
|
418
|
+
A changed meaning, scope, evidence identity set, policy version, or
|
|
419
|
+
candidate generation creates a new revision. Identical canonical inputs
|
|
420
|
+
create the same revision and do not imply a second candidate.
|
|
421
|
+
provenance:
|
|
422
|
+
existing_inferred_variant: provenance_variants.personal_inferred_usage
|
|
423
|
+
conversation_variant: provenance_variants.personal_inferred_conversation
|
|
424
|
+
evolution:
|
|
425
|
+
status: explicit_append_only_extension
|
|
426
|
+
shared_primitive: unchanged
|
|
427
|
+
existing_variant_rule: >-
|
|
428
|
+
The firm two-independent-record instruction/configuration route remains
|
|
429
|
+
exactly two records with both anchors exposed.
|
|
430
|
+
conversation_rule: >-
|
|
431
|
+
Conversation inference uses the explicit conversation provenance variant
|
|
432
|
+
and retains every qualifying evidence record. It never projects a longer
|
|
433
|
+
evidence set into the two-record variant.
|
|
434
|
+
audit_rule: >-
|
|
435
|
+
The provenance kind, complete-evidence marker, source identities, anchors,
|
|
436
|
+
session identities, project identities, author class, and content
|
|
437
|
+
fingerprints remain inspectable by the later validator. Missing metadata,
|
|
438
|
+
unresolved anchors, or incomplete evidence fail closed.
|
|
439
|
+
consent_lifecycle:
|
|
440
|
+
authority: references/analysis/evidence-tier-authority.yaml
|
|
441
|
+
operation: Profile_Full
|
|
442
|
+
policy: reuse_existing_generation
|
|
443
|
+
refresh: forbidden_during_profile_full
|
|
444
|
+
reuse: >-
|
|
445
|
+
Profile Full may consume one existing local-history generation only when a
|
|
446
|
+
valid local-history consent binding and a readable current generation are
|
|
447
|
+
already present. Profile Full never refreshes, discovers, or rereads local
|
|
448
|
+
history to obtain consent.
|
|
449
|
+
discriminator:
|
|
450
|
+
inputs: [consent_status, generation_status, coverage_status, signal_tier_bounded]
|
|
451
|
+
order: [absent, stale, degraded, present]
|
|
452
|
+
values:
|
|
453
|
+
consent_status: [absent, valid, stale]
|
|
454
|
+
generation_status: [absent, current, stale]
|
|
455
|
+
coverage_status: [complete, cap_selected, truncated, flagged_incomplete]
|
|
456
|
+
signal_tier_bounded: [true, false]
|
|
457
|
+
predicates:
|
|
458
|
+
absent: consent_absent_or_generation_absent
|
|
459
|
+
stale: after_absent_consent_or_generation_stale
|
|
460
|
+
degraded: valid_current_actual_cap_truncation_or_flagged_incomplete
|
|
461
|
+
present: valid_current_complete_any_boundedness
|
|
462
|
+
exclusivity: >-
|
|
463
|
+
Evaluate the ordered predicates exactly once and select the first match.
|
|
464
|
+
Absent wins over stale, stale wins over degraded, and degraded wins over
|
|
465
|
+
present. No input tuple may select two states.
|
|
466
|
+
boundedness_rule: >-
|
|
467
|
+
A signal tier being inherently bounded does not make a generation
|
|
468
|
+
degraded. Degraded requires actual cap selection, truncation, or flagged
|
|
469
|
+
incomplete coverage.
|
|
470
|
+
states:
|
|
471
|
+
present:
|
|
472
|
+
condition: valid_current_complete_any_boundedness
|
|
473
|
+
action: reuse_generation_once_for_bounded_mining
|
|
474
|
+
result: mining_authorized
|
|
475
|
+
absent:
|
|
476
|
+
condition: consent_absent_or_generation_absent
|
|
477
|
+
action: skip_mining_without_read_or_refresh
|
|
478
|
+
result: degraded_consent_required
|
|
479
|
+
stale:
|
|
480
|
+
condition: after_absent_consent_or_generation_stale
|
|
481
|
+
action: reject_generation_for_new_mining_and_preserve_existing_entries
|
|
482
|
+
result: degraded_refresh_required
|
|
483
|
+
degraded:
|
|
484
|
+
condition: valid_current_actual_cap_truncation_or_flagged_incomplete
|
|
485
|
+
action: reuse_only_as_degraded_evidence_without_automatic_admission
|
|
486
|
+
result: degraded_coverage
|
|
487
|
+
recovery:
|
|
488
|
+
command: npx -y agentera@next report refresh --consent local-history
|
|
489
|
+
explicit_consent: required
|
|
490
|
+
after_refresh: retry_profile_full_with_the_new_generation
|
|
491
|
+
forbidden: [live_extraction_without_consent, silent_refresh, stale_generation_reuse]
|
|
492
|
+
rule: >-
|
|
493
|
+
Absent, stale, and degraded states expose the same explicit refresh
|
|
494
|
+
recovery without inspecting raw history. Recovery never changes project
|
|
495
|
+
state or project glossary publication.
|
|
496
|
+
profile_full:
|
|
497
|
+
status: active
|
|
498
|
+
entrypoint: Profile_Full
|
|
499
|
+
base_profile_order: write_base_profile_before_personal_glossary
|
|
500
|
+
existing_generation:
|
|
501
|
+
source: existing_consent_bound_user_local_candidate_projection
|
|
502
|
+
generation_count: 1
|
|
503
|
+
binding_fields: [generation, policy_version, candidate_projection_sha256]
|
|
504
|
+
list_limit: 20
|
|
505
|
+
continuation: forbidden
|
|
506
|
+
degraded: explicit_refresh_required_without_candidate_classification_or_publication
|
|
507
|
+
forbidden_effects:
|
|
508
|
+
- history_refresh
|
|
509
|
+
- history_collection
|
|
510
|
+
- candidate_discovery
|
|
511
|
+
- candidate_projection_write
|
|
512
|
+
- new_generation
|
|
513
|
+
- project_glossary_read
|
|
514
|
+
unavailable: preserve_base_profile_and_owned_section
|
|
515
|
+
deterministic_admission:
|
|
516
|
+
host_classification: semantic_evidence_not_admission_authority
|
|
517
|
+
command: candidate_contracts.layers.cli_decision
|
|
518
|
+
automatic: explicit_current_authorized_only
|
|
519
|
+
inferred: review_or_abstain
|
|
520
|
+
review:
|
|
521
|
+
queue_before_question: true
|
|
522
|
+
question_channel_maximum: 3
|
|
523
|
+
no_question_channel: durable_queue
|
|
524
|
+
output: bounded_review_cards_and_summary
|
|
525
|
+
publication:
|
|
526
|
+
command: ownership_contracts.personal.profile_output
|
|
527
|
+
automatic: explicit_current_authorized_only
|
|
528
|
+
no_decision_synthesis: true
|
|
529
|
+
failure: preserve_base_profile_and_owned_section
|
|
530
|
+
output:
|
|
531
|
+
profile_path: canonical_user_profile_authority
|
|
532
|
+
terminal: compact_bounded_summary
|
|
533
|
+
privacy:
|
|
534
|
+
owner: current_user
|
|
535
|
+
scope: user_local
|
|
536
|
+
storage:
|
|
537
|
+
root: $AGENTERA_PROFILE_DIR/intermediate/personal-glossary
|
|
538
|
+
project_storage: forbidden
|
|
539
|
+
records: [candidate_metadata, safe_excerpts, review_metadata, review_dispositions]
|
|
540
|
+
project_state: unchanged
|
|
541
|
+
filesystem:
|
|
542
|
+
authority: host_filesystem
|
|
543
|
+
configured_path: use_as_provided
|
|
544
|
+
outcomes: ordinary_permissions_and_io
|
|
545
|
+
same_user_path_manipulation: outside_agentera_threat_model
|
|
546
|
+
symlink_confinement: not_claimed
|
|
547
|
+
rule: >-
|
|
548
|
+
Agentera uses the configured profile path as provided. The host
|
|
549
|
+
filesystem owns permissions, symlink behavior, and same-user path
|
|
550
|
+
manipulation. Agentera does not add realpath or no-follow confinement.
|
|
551
|
+
rule: >-
|
|
552
|
+
Agentera deliberately selects only the configured user profile path for
|
|
553
|
+
mining records. It never selects .agentera, TODO.md, progress, the
|
|
554
|
+
project glossary, or another project path as projection storage. A user
|
|
555
|
+
configuration or same-user filesystem change does not become an
|
|
556
|
+
Agentera path-confinement claim.
|
|
557
|
+
content_exclusion:
|
|
558
|
+
owner: glossary_content_policy
|
|
559
|
+
classification: actual_secret_or_sensitive_value
|
|
560
|
+
conceptual_terminology: eligible
|
|
561
|
+
candidate_fields: [term, meaning]
|
|
562
|
+
candidate_action: reject_before_projection
|
|
563
|
+
candidate_reason: secret_content
|
|
564
|
+
excerpt_action: omit_complete_excerpt_before_projection
|
|
565
|
+
secret_classes:
|
|
566
|
+
- api_keys
|
|
567
|
+
- access_tokens
|
|
568
|
+
- passwords
|
|
569
|
+
- cookies
|
|
570
|
+
- private_keys
|
|
571
|
+
- authorization_headers
|
|
572
|
+
- personal_contact_data
|
|
573
|
+
- session_identifiers
|
|
574
|
+
- runtime_store_paths
|
|
575
|
+
rule: >-
|
|
576
|
+
A term or meaning containing an actual credential, session, or other
|
|
577
|
+
sensitive value is not a glossary candidate and is rejected with the
|
|
578
|
+
stable secret_content reason. Field names and ordinary conceptual
|
|
579
|
+
terminology remain eligible. If candidate-adjacent context contains an
|
|
580
|
+
actual secret or sensitive value, omit the complete excerpt. Never redact
|
|
581
|
+
and retain part of that excerpt.
|
|
582
|
+
excerpts:
|
|
583
|
+
purpose: bounded_review_context_only
|
|
584
|
+
max_utf8_bytes: 500
|
|
585
|
+
forbidden_content:
|
|
586
|
+
- raw_transcript
|
|
587
|
+
- raw_tool_arguments
|
|
588
|
+
- raw_runtime_store_paths
|
|
589
|
+
- raw_session_identifiers
|
|
590
|
+
- secret_or_sensitive_content
|
|
591
|
+
- unrelated_conversation
|
|
592
|
+
failure: omit_complete_excerpt_before_persistence
|
|
593
|
+
reviews:
|
|
594
|
+
owner: current_user
|
|
595
|
+
required_fields:
|
|
596
|
+
- candidate_id
|
|
597
|
+
- candidate_revision
|
|
598
|
+
- semantic_fingerprint
|
|
599
|
+
- generation
|
|
600
|
+
- policy_version
|
|
601
|
+
- disposition
|
|
602
|
+
- disposed_at
|
|
603
|
+
dispositions: [accept, correct, reject, defer]
|
|
604
|
+
trusted_disposition_authority: current_user
|
|
605
|
+
authentication:
|
|
606
|
+
receipt_schema_version: agentera.personalGlossaryReviewApproval.v1
|
|
607
|
+
issuer: agentera-local-host
|
|
608
|
+
subject: current_user
|
|
609
|
+
trusted_channel: agentera-local-host-ipc
|
|
610
|
+
required_fields:
|
|
611
|
+
- schema_version
|
|
612
|
+
- issuer
|
|
613
|
+
- subject
|
|
614
|
+
- trusted_channel
|
|
615
|
+
- review_id
|
|
616
|
+
- candidate_id
|
|
617
|
+
- candidate_revision
|
|
618
|
+
- candidate_projection_sha256
|
|
619
|
+
- semantic_fingerprint
|
|
620
|
+
- generation
|
|
621
|
+
- policy_version
|
|
622
|
+
- disposition
|
|
623
|
+
- corrected_meaning
|
|
624
|
+
- corrected_scope
|
|
625
|
+
- disposed_at
|
|
626
|
+
- expires_at
|
|
627
|
+
- nonce
|
|
628
|
+
- signature
|
|
629
|
+
proof: >-
|
|
630
|
+
The local host signs an explicit current-user action. The verifier
|
|
631
|
+
checks the trusted host public key before accepting the receipt; a
|
|
632
|
+
model, agent, imported transcript, or unbound text field cannot create
|
|
633
|
+
proof by asserting issuer or subject values.
|
|
634
|
+
binding_fields: [review_id, candidate_id, candidate_revision, candidate_projection_sha256, semantic_fingerprint, generation, policy_version, disposition, corrected_meaning, corrected_scope, disposed_at]
|
|
635
|
+
forbidden_principals: [agent, model, imported_record, generic_consent]
|
|
636
|
+
correction:
|
|
637
|
+
correct_fields: [corrected_meaning, corrected_scope]
|
|
638
|
+
non_correct_values: null
|
|
639
|
+
corrected_scope_values: [personal]
|
|
640
|
+
corrected_meaning_max_utf8_bytes: 4096
|
|
641
|
+
rule: >-
|
|
642
|
+
Only a signed correct action may carry a complete bounded corrected
|
|
643
|
+
meaning and the personal scope. Other dispositions carry null correction
|
|
644
|
+
fields. Corrected content remains user-local review metadata and must
|
|
645
|
+
pass the same secret and sensitive-content exclusion as a candidate.
|
|
646
|
+
signature:
|
|
647
|
+
algorithm: ed25519
|
|
648
|
+
encoding: base64url
|
|
649
|
+
key_source: user_local_trusted_host_key
|
|
650
|
+
signed_fields:
|
|
651
|
+
- schema_version
|
|
652
|
+
- issuer
|
|
653
|
+
- subject
|
|
654
|
+
- trusted_channel
|
|
655
|
+
- review_id
|
|
656
|
+
- candidate_id
|
|
657
|
+
- candidate_revision
|
|
658
|
+
- candidate_projection_sha256
|
|
659
|
+
- semantic_fingerprint
|
|
660
|
+
- generation
|
|
661
|
+
- policy_version
|
|
662
|
+
- disposition
|
|
663
|
+
- corrected_meaning
|
|
664
|
+
- corrected_scope
|
|
665
|
+
- disposed_at
|
|
666
|
+
- expires_at
|
|
667
|
+
- nonce
|
|
668
|
+
verification: trusted_host_public_key_signature_check
|
|
669
|
+
freshness:
|
|
670
|
+
max_age_seconds: 300
|
|
671
|
+
disposed_at: trusted_host_clock
|
|
672
|
+
expires_at_required: true
|
|
673
|
+
rule: disposed_at_must_not_be_future_and_expires_at_must_be_after_now
|
|
674
|
+
replay:
|
|
675
|
+
nonce: required_unique_receipt_nonce
|
|
676
|
+
index: user_local_consumed_receipt_digest_index
|
|
677
|
+
exact_replay: no_op_only_when_nonce_and_receipt_digest_match
|
|
678
|
+
conflicting_replay: reject_reused_nonce_with_changed_bindings_or_signature
|
|
679
|
+
terminal_disposition:
|
|
680
|
+
terminal: [accept, correct, reject]
|
|
681
|
+
pending: [defer]
|
|
682
|
+
retention:
|
|
683
|
+
pending_excerpt_days: 30
|
|
684
|
+
terminal_excerpt_days: 0
|
|
685
|
+
review_metadata_days_after_terminal: 90
|
|
686
|
+
accepted_entry: ownership_contracts.personal.retention_and_decay
|
|
687
|
+
pending_review_metadata: retained_until_terminal_or_purge
|
|
688
|
+
terminal_review_metadata: retained_for_90_days_after_disposition
|
|
689
|
+
rule: >-
|
|
690
|
+
Safe excerpts expire after 30 days and are removed immediately when a
|
|
691
|
+
review becomes terminal. Disposition metadata remains for 90 days after
|
|
692
|
+
a terminal disposition to suppress the same revision, then expires.
|
|
693
|
+
Accepted glossary entries follow the existing personal profile decay
|
|
694
|
+
authority and never retain an excerpt.
|
|
695
|
+
purge:
|
|
696
|
+
authority: current_user
|
|
697
|
+
trigger: explicit_authenticated_user_request_or_retention_expiry
|
|
698
|
+
removes: [candidate_metadata, safe_excerpts, review_metadata, review_dispositions]
|
|
699
|
+
behavior: atomic_remove_user_local_records_before_next_read
|
|
700
|
+
project_state: untouched
|
|
701
|
+
profile_entry: not_implicitly_deleted
|
|
702
|
+
boundaries:
|
|
703
|
+
pending: purge_removes_excerpt_and_metadata_immediately
|
|
704
|
+
terminal: purge_removes_excerpt_and_metadata_before_next_read
|
|
705
|
+
accepted_profile_entry: purge_does_not_implicitly_delete_profile_entry
|
|
706
|
+
recovery: >-
|
|
707
|
+
A purge is local and irreversible to the mining records. A later run
|
|
708
|
+
requires fresh consent-bound evidence and creates no project-side record.
|
|
709
|
+
candidate_projection:
|
|
710
|
+
status: active
|
|
711
|
+
runtime: packages/cli/src/analytics/personalGlossaryCandidateProjection.ts#projectPersonalGlossaryCandidates
|
|
712
|
+
schema_version: agentera.personalGlossaryCandidateProjection.v1
|
|
713
|
+
owner: deterministic_discovery_projection
|
|
714
|
+
input: validated_completed_explicit_and_recurring_capsules_with_transient_source_project_ids_and_candidate_adjacent_excerpts
|
|
715
|
+
output: bounded_user_local_candidate_projection_with_safe_excerpts_and_selection_report
|
|
716
|
+
implementation_boundary: >-
|
|
717
|
+
This runtime selects and persists only bounded candidate metadata and safe
|
|
718
|
+
review context. Candidate retrieval is the separate private
|
|
719
|
+
candidate_retrieval operation. It does not add project or public-state
|
|
720
|
+
candidate reads, host classification, CLI admission, review-disposition
|
|
721
|
+
writes, profile publication, project-glossary access, or project-state
|
|
722
|
+
effects.
|
|
723
|
+
selection:
|
|
724
|
+
candidates_max: 50
|
|
725
|
+
project_ids_max_per_candidate: 100
|
|
726
|
+
source_families:
|
|
727
|
+
explicit: [personal_explicit_definition]
|
|
728
|
+
recurring: [personal_inferred_usage, personal_inferred_conversation]
|
|
729
|
+
algorithm: least_retained_source_family_then_project_then_canonical_candidate
|
|
730
|
+
tie_break: candidate_id_then_candidate_revision_then_capsule_sha256
|
|
731
|
+
project_identity:
|
|
732
|
+
schema_version: agentera.personalGlossaryProjectionProjectIdentity.v1
|
|
733
|
+
algorithm: sha256
|
|
734
|
+
input: canonical_utf8_json_of_exact_transient_project_id
|
|
735
|
+
output: lowercase_hex
|
|
736
|
+
rule: >-
|
|
737
|
+
Projection-only project labels are used transiently to allocate
|
|
738
|
+
diversity. Persisted allocation fields and reports contain only this
|
|
739
|
+
exact-byte, no-normalization project identity. The validated capsule
|
|
740
|
+
keeps its separately authority-required provenance unchanged.
|
|
741
|
+
coverage: >-
|
|
742
|
+
Each selection round prefers the represented source family with the
|
|
743
|
+
fewest retained candidates, then the candidate whose represented project
|
|
744
|
+
has the fewest retained candidates. A capped or uncovered family or
|
|
745
|
+
project reports degraded coverage with retained and dropped counts.
|
|
746
|
+
excerpts:
|
|
747
|
+
source_max_utf8_bytes: 4096
|
|
748
|
+
max_per_candidate: 1
|
|
749
|
+
authority: personal_mining_authority.privacy.excerpts
|
|
750
|
+
input_rule: candidate_adjacent_text_must_contain_the_exact_candidate_term
|
|
751
|
+
output_fields: [text, expires_at, redacted]
|
|
752
|
+
compatibility:
|
|
753
|
+
redacted_field: retained_for_v1_consumers
|
|
754
|
+
new_projection_value: false
|
|
755
|
+
omission_reasons: [no_excerpt, unrelated_context, source_bound_exceeded, unsafe_tool_arguments, unsafe_content]
|
|
756
|
+
rule: >-
|
|
757
|
+
Sort transient excerpts canonically, retain at most one complete safe
|
|
758
|
+
excerpt, and omit secret-bearing, sensitive, unsafe, or unrelated text
|
|
759
|
+
without echoing it. The v1 redacted field remains for schema compatibility,
|
|
760
|
+
but new projections set it to false and never persist partial redactions.
|
|
761
|
+
retention:
|
|
762
|
+
authority: personal_mining_authority.privacy.retention
|
|
763
|
+
purge: personal_mining_authority.privacy.purge
|
|
764
|
+
rule: >-
|
|
765
|
+
Pending candidate excerpts expire after the authority's thirty-day
|
|
766
|
+
period. Retention maintenance may remove only expired safe excerpts;
|
|
767
|
+
a current-user-authorized purge removes the complete user-local
|
|
768
|
+
projection before the next read. Review-disposition persistence remains
|
|
769
|
+
outside this runtime.
|
|
770
|
+
persistence:
|
|
771
|
+
root: $AGENTERA_PROFILE_DIR/intermediate/personal-glossary
|
|
772
|
+
file: candidate-projection.json
|
|
773
|
+
canonicalization: candidate_contracts.canonicalization
|
|
774
|
+
fields: [schema_version, owner, generation, policy_version, retained_at, candidates, report, projection_sha256]
|
|
775
|
+
replay: byte_identical_projection_is_unchanged_replay
|
|
776
|
+
project_storage: forbidden
|
|
777
|
+
public_reads: forbidden
|
|
778
|
+
private_machine_reads: [candidate_retrieval, cli_decision]
|
|
779
|
+
review_disposition_writes: forbidden
|
|
780
|
+
rule: >-
|
|
781
|
+
Write one private canonical projection file at the configured user
|
|
782
|
+
profile path using ordinary filesystem I/O. The file contains validated
|
|
783
|
+
capsules, hashed project identities, safe excerpts, and a bounded report
|
|
784
|
+
only. Never serialize a raw project path, .agentera state, raw excerpt
|
|
785
|
+
source, or review disposition, and never deliberately select project
|
|
786
|
+
storage.
|
|
787
|
+
candidate_retrieval:
|
|
788
|
+
status: active
|
|
789
|
+
owner: private_user_local_candidate_retrieval
|
|
790
|
+
runtime: packages/cli/src/cli/commands/personalGlossaryCandidateReads.ts#runPersonalGlossaryCandidateReadsCommand
|
|
791
|
+
input: current_validated_user_local_candidate_projection_bound_to_current_tier_generation
|
|
792
|
+
current_generation:
|
|
793
|
+
source: current.json_readable_bounded_evidence_tier_generation
|
|
794
|
+
projection_generation: exact_match_required
|
|
795
|
+
unavailable_behavior: current_generation_unavailable
|
|
796
|
+
stale_projection_behavior: projection_stale
|
|
797
|
+
command:
|
|
798
|
+
canonical: npx -y agentera@next report personal-glossary-candidates
|
|
799
|
+
namespace: report
|
|
800
|
+
format: json
|
|
801
|
+
project_checkout: not_required
|
|
802
|
+
list:
|
|
803
|
+
schema_version: agentera.personalGlossaryCandidateRetrieval.v1
|
|
804
|
+
default_limit: 20
|
|
805
|
+
maximum_limit: 50
|
|
806
|
+
max_serialized_utf8_bytes: 32768
|
|
807
|
+
order: candidate_id_then_candidate_revision_then_capsule_sha256
|
|
808
|
+
projection_binding_field: candidate_projection_sha256
|
|
809
|
+
filters:
|
|
810
|
+
source_family: [explicit, recurring]
|
|
811
|
+
provenance_kind_from: candidate_projection.selection.source_families
|
|
812
|
+
scope: [personal, ambiguous]
|
|
813
|
+
cursor:
|
|
814
|
+
authority: references/artifacts/state-storage-authority.yaml#entity_target.public_retrieval.policy.cursor
|
|
815
|
+
vocabulary: opaque_snapshot_cursor
|
|
816
|
+
binding: [collection, generation, policy_version, filters, limit, order, snapshot]
|
|
817
|
+
invalid_behavior: cursor_invalid
|
|
818
|
+
unavailable_behavior: cursor_snapshot_unavailable
|
|
819
|
+
summaries: >-
|
|
820
|
+
List returns only bounded candidate summaries, projection-local selection
|
|
821
|
+
abstention counts, derived safe-context availability and omission or
|
|
822
|
+
expiry counts, and the current coverage report. It never returns a
|
|
823
|
+
meaning, project label, project key, raw evidence identity, excerpt text,
|
|
824
|
+
or a per-row expanded command.
|
|
825
|
+
abstentions: >-
|
|
826
|
+
Upstream mining abstentions are not retained in a candidate projection and
|
|
827
|
+
are never reconstructed. This read reports only bounded projection-local
|
|
828
|
+
candidate-selection and safe-context omission counts.
|
|
829
|
+
coverage: >-
|
|
830
|
+
Coverage remains the validated current projection report and is not
|
|
831
|
+
recomputed from a list filter or page.
|
|
832
|
+
safe_context_view:
|
|
833
|
+
authority: personal_mining_authority.privacy.retention
|
|
834
|
+
retention_days: 30
|
|
835
|
+
expiry: expires_at_lte_read_time_is_unavailable
|
|
836
|
+
mutation: forbidden
|
|
837
|
+
snapshot: effective_availability_bound_to_opaque_cursor_snapshot
|
|
838
|
+
rule: >-
|
|
839
|
+
Candidate retrieval derives current safe-context availability from the
|
|
840
|
+
persisted projection at read time. An excerpt at or after its expiry is
|
|
841
|
+
omitted from list and exact output without writing the projection. The
|
|
842
|
+
derived availability contributes to the opaque cursor snapshot, so a
|
|
843
|
+
continuation from a prior availability view is unavailable.
|
|
844
|
+
exact:
|
|
845
|
+
schema_version: agentera.personalGlossaryCandidateRetrieval.v1
|
|
846
|
+
required_bindings: [candidate_id, candidate_revision, generation, policy_version]
|
|
847
|
+
projection_binding_field: candidate_projection_sha256
|
|
848
|
+
occurrences_max: 100
|
|
849
|
+
safe_context_max_utf8_bytes: 500
|
|
850
|
+
max_serialized_utf8_bytes: 32768
|
|
851
|
+
occurrence:
|
|
852
|
+
schema_version: agentera.personalGlossaryCandidateOccurrence.v1
|
|
853
|
+
identity: opaque_sha256_of_validated_evidence_and_candidate_binding
|
|
854
|
+
allowed_fields: [occurrence_id, source_kind, signal_type, author_class]
|
|
855
|
+
rule: >-
|
|
856
|
+
Exact read first validates the readable current tier generation, the
|
|
857
|
+
projection's exact generation binding, and every requested candidate
|
|
858
|
+
binding. It returns only the bounded validated occurrence
|
|
859
|
+
projection, its candidate_projection_sha256 binding, and a currently
|
|
860
|
+
available validated safe excerpt context.
|
|
861
|
+
Raw source, anchor, session, project, fingerprint, project-key, and
|
|
862
|
+
filesystem values are never emitted.
|
|
863
|
+
rule: >-
|
|
864
|
+
Candidate retrieval is read-only, non-interactive, and user-local. It never
|
|
865
|
+
refreshes or purges evidence, acquires consent, records review state, reads
|
|
866
|
+
a project glossary, selects project storage, or changes the persisted
|
|
867
|
+
projection. It derives an expiry-aware safe-context read view, reuses the
|
|
868
|
+
canonical opaque snapshot cursor construction, and fails closed before
|
|
869
|
+
emitting candidate data when the current generation is unavailable, the
|
|
870
|
+
projection is stale, or a continuation or exact binding is malformed,
|
|
871
|
+
unavailable, or mismatched.
|
|
872
|
+
review_records:
|
|
873
|
+
status: active
|
|
874
|
+
owner: user_local_review_lifecycle
|
|
875
|
+
runtime: packages/cli/src/analytics/personalGlossaryReviewRecords.ts#queuePersonalGlossaryReviewRecord
|
|
876
|
+
input: current_validated_review_required_cli_decision_and_host_receipt
|
|
877
|
+
trusted_host_key:
|
|
878
|
+
root: $AGENTERA_PROFILE_DIR/intermediate/personal-glossary
|
|
879
|
+
file: trusted-local-host.json
|
|
880
|
+
schema_version: agentera.personalGlossaryTrustedLocalHost.v1
|
|
881
|
+
fields: [schema_version, owner, subject, public_key_spki_base64url]
|
|
882
|
+
owner: current_user
|
|
883
|
+
public_key_algorithm: ed25519
|
|
884
|
+
max_serialized_utf8_bytes: 4096
|
|
885
|
+
rule: >-
|
|
886
|
+
The configured user-local host key names the current-user subject and one
|
|
887
|
+
Ed25519 SPKI public key. It is read only to verify a local-host IPC receipt;
|
|
888
|
+
it is never accepted from command input, project state, agent text, or output.
|
|
889
|
+
persistence:
|
|
890
|
+
root: $AGENTERA_PROFILE_DIR/intermediate/personal-glossary
|
|
891
|
+
file: review-records.json
|
|
892
|
+
schema_version: agentera.personalGlossaryReviewStore.v2
|
|
893
|
+
record_schema_version: agentera.personalGlossaryReviewRecord.v2
|
|
894
|
+
owner: current_user
|
|
895
|
+
fields: [schema_version, owner, records, replay_index, store_sha256]
|
|
896
|
+
record_fields:
|
|
897
|
+
- schema_version
|
|
898
|
+
- owner
|
|
899
|
+
- review_id
|
|
900
|
+
- candidate_id
|
|
901
|
+
- candidate_revision
|
|
902
|
+
- candidate_capsule_sha256
|
|
903
|
+
- candidate_projection_sha256
|
|
904
|
+
- host_receipt_sha256
|
|
905
|
+
- cli_decision_sha256
|
|
906
|
+
- semantic_fingerprint
|
|
907
|
+
- generation
|
|
908
|
+
- policy_version
|
|
909
|
+
- scope
|
|
910
|
+
- reason
|
|
911
|
+
- status
|
|
912
|
+
- disposition
|
|
913
|
+
- review_record
|
|
914
|
+
- reopen_reason
|
|
915
|
+
- queued_at
|
|
916
|
+
- terminal_at
|
|
917
|
+
- expires_at
|
|
918
|
+
- record_sha256
|
|
919
|
+
records_max: 100
|
|
920
|
+
replay_index_fields: [nonce_sha256, receipt_sha256, expires_at]
|
|
921
|
+
replay_entries_max: 100
|
|
922
|
+
record_max_serialized_utf8_bytes: 8192
|
|
923
|
+
max_serialized_utf8_bytes: 1048576
|
|
924
|
+
canonicalization: candidate_contracts.canonicalization
|
|
925
|
+
order: review_id_asc
|
|
926
|
+
replay: exact_current_binding_is_unchanged_replay_and_exact_receipt_is_idempotent
|
|
927
|
+
conflict: changed_receipt_nonce_binding_or_signature_fails_before_effects
|
|
928
|
+
suppression_binding: [candidate_id, semantic_fingerprint, scope, policy_version]
|
|
929
|
+
suppression_dispositions: [reject, defer]
|
|
930
|
+
reopen_reasons: [policy_changed, scope_changed, meaning_changed]
|
|
931
|
+
project_storage: forbidden
|
|
932
|
+
forbidden_fields:
|
|
933
|
+
- term
|
|
934
|
+
- meaning
|
|
935
|
+
- excerpt
|
|
936
|
+
- raw_evidence
|
|
937
|
+
- source_id
|
|
938
|
+
- evidence_anchor
|
|
939
|
+
- session_id
|
|
940
|
+
- project_id
|
|
941
|
+
- source_path
|
|
942
|
+
- tool_content
|
|
943
|
+
- review_approval
|
|
944
|
+
- signature
|
|
945
|
+
- nonce
|
|
946
|
+
rule: >-
|
|
947
|
+
Persist only bounded current-user review metadata. Generation and policy
|
|
948
|
+
bindings must be non-secret, non-path metadata identifiers; the current
|
|
949
|
+
content-addressed tier generation is an allowed opaque digest. A record contains
|
|
950
|
+
opaque candidate and receipt bindings, a safe scope, deterministic review
|
|
951
|
+
reason, lifecycle status, disposition, optional canonical review record,
|
|
952
|
+
visible reopening reason, and canonical digests. Only a correct canonical
|
|
953
|
+
review record may retain its authority-approved corrected meaning. It never
|
|
954
|
+
persists a term, excerpt, raw evidence identity, host proof, profile content,
|
|
955
|
+
project identity, path, or tool content. The bounded replay index stores only
|
|
956
|
+
nonce and receipt digests until receipt expiry. Exact current queue replay or
|
|
957
|
+
exact receipt replay is idempotent; changed nonce content fails before a write.
|
|
958
|
+
compatibility:
|
|
959
|
+
accepted_store_schema_versions:
|
|
960
|
+
- agentera.personalGlossaryReviewStore.v1
|
|
961
|
+
- agentera.personalGlossaryReviewStore.v2
|
|
962
|
+
accepted_record_schema_versions:
|
|
963
|
+
- agentera.personalGlossaryPendingReviewRecord.v1
|
|
964
|
+
- agentera.personalGlossaryReviewRecord.v2
|
|
965
|
+
read_mutation: forbidden
|
|
966
|
+
migration_operation: disposition_only
|
|
967
|
+
scope_derivation: current_validated_host_receipt_only
|
|
968
|
+
invalid_behavior: fail_before_effects
|
|
969
|
+
preserved_bindings:
|
|
970
|
+
- review_id
|
|
971
|
+
- candidate_id
|
|
972
|
+
- candidate_revision
|
|
973
|
+
- candidate_capsule_sha256
|
|
974
|
+
- candidate_projection_sha256
|
|
975
|
+
- host_receipt_sha256
|
|
976
|
+
- cli_decision_sha256
|
|
977
|
+
- semantic_fingerprint
|
|
978
|
+
- generation
|
|
979
|
+
- policy_version
|
|
980
|
+
- reason
|
|
981
|
+
legacy_digest: validate_before_migration
|
|
982
|
+
migrated_digest: reseal_v2_lifecycle_record
|
|
983
|
+
rule: >-
|
|
984
|
+
Canonical v1 pending review stores remain readable without a write. Only
|
|
985
|
+
disposition may compat-decode one valid v1 record after it revalidates the
|
|
986
|
+
current receipt and projection. It derives the missing scope only from that
|
|
987
|
+
current validated receipt, preserves the listed immutable bindings and review
|
|
988
|
+
identity, and atomically writes the v2 store and replay state. Invalid or
|
|
989
|
+
ambiguous v1 input fails before effects. Untouched valid v1 records remain
|
|
990
|
+
byte-for-byte v1 records inside the v2 store until their own disposition.
|
|
991
|
+
queue:
|
|
992
|
+
command:
|
|
993
|
+
canonical: npx -y agentera@next report personal-glossary-reviews
|
|
994
|
+
namespace: report
|
|
995
|
+
input_flag: --input
|
|
996
|
+
stdin_value: '-'
|
|
997
|
+
format: json
|
|
998
|
+
project_checkout: not_required
|
|
999
|
+
request:
|
|
1000
|
+
schema_version: agentera.personalGlossaryReviewQueueRequest.v1
|
|
1001
|
+
required_fields: [schema_version, receipt]
|
|
1002
|
+
additional_fields: forbidden
|
|
1003
|
+
max_utf8_bytes: 16384
|
|
1004
|
+
decision_outcome: review_required
|
|
1005
|
+
current_bindings:
|
|
1006
|
+
- candidate_id
|
|
1007
|
+
- candidate_revision
|
|
1008
|
+
- candidate_capsule_sha256
|
|
1009
|
+
- candidate_projection_sha256
|
|
1010
|
+
- host_receipt_sha256
|
|
1011
|
+
- cli_decision_sha256
|
|
1012
|
+
- semantic_fingerprint
|
|
1013
|
+
- generation
|
|
1014
|
+
- policy_version
|
|
1015
|
+
- reason
|
|
1016
|
+
result:
|
|
1017
|
+
schema_version: agentera.personalGlossaryReviewQueueResult.v1
|
|
1018
|
+
statuses: [queued, unchanged_replay, suppressed, reopened]
|
|
1019
|
+
max_utf8_bytes: 4096
|
|
1020
|
+
no_question_channel: queue_without_prompt_or_disposition
|
|
1021
|
+
rule: >-
|
|
1022
|
+
Queue revalidates one bounded host receipt through the current deterministic
|
|
1023
|
+
CLI decision before a write. Only a current review_required decision may
|
|
1024
|
+
create pending metadata. The command does not prompt, accept a disposition,
|
|
1025
|
+
write a profile entry, read or change project state, or mutate the candidate
|
|
1026
|
+
projection.
|
|
1027
|
+
disposition:
|
|
1028
|
+
command:
|
|
1029
|
+
canonical: npx -y agentera@next report personal-glossary-reviews
|
|
1030
|
+
namespace: report
|
|
1031
|
+
input_flag: --input
|
|
1032
|
+
stdin_value: '-'
|
|
1033
|
+
format: json
|
|
1034
|
+
project_checkout: not_required
|
|
1035
|
+
request:
|
|
1036
|
+
schema_version: agentera.personalGlossaryReviewDispositionRequest.v1
|
|
1037
|
+
required_fields: [schema_version, review_id, receipt, approval]
|
|
1038
|
+
additional_fields: forbidden
|
|
1039
|
+
max_utf8_bytes: 16384
|
|
1040
|
+
result:
|
|
1041
|
+
schema_version: agentera.personalGlossaryReviewDispositionResult.v1
|
|
1042
|
+
statuses: [disposed, unchanged_replay]
|
|
1043
|
+
max_utf8_bytes: 4096
|
|
1044
|
+
publication_authorization:
|
|
1045
|
+
dispositions: [accept, correct]
|
|
1046
|
+
fields: [review_id, review_record_sha256]
|
|
1047
|
+
rule: >-
|
|
1048
|
+
Disposition accepts only a current queued review and a complete signed
|
|
1049
|
+
current-user local-host approval. It verifies the configured trusted public
|
|
1050
|
+
key, exact receipt fields and bindings, current clock freshness, replay index,
|
|
1051
|
+
current projection, policy, and semantic fingerprint before a user-local write.
|
|
1052
|
+
Accept and correct create an opaque authorization for the existing personal
|
|
1053
|
+
publish command. Reject and defer never publish. The operation does not read
|
|
1054
|
+
project state, mutate the candidate projection, or change PROFILE.md.
|
|
1055
|
+
retrieval:
|
|
1056
|
+
command:
|
|
1057
|
+
canonical: npx -y agentera@next report personal-glossary-reviews
|
|
1058
|
+
namespace: report
|
|
1059
|
+
format: json
|
|
1060
|
+
project_checkout: not_required
|
|
1061
|
+
owner: current_user
|
|
1062
|
+
schema_version: agentera.personalGlossaryReviewRetrieval.v1
|
|
1063
|
+
list:
|
|
1064
|
+
default_limit: 20
|
|
1065
|
+
maximum_limit: 50
|
|
1066
|
+
max_serialized_utf8_bytes: 32768
|
|
1067
|
+
order: queued_at_desc_then_review_id_asc
|
|
1068
|
+
filters:
|
|
1069
|
+
status: [pending, terminal]
|
|
1070
|
+
cursor:
|
|
1071
|
+
authority: references/artifacts/state-storage-authority.yaml#entity_target.public_retrieval.policy.cursor
|
|
1072
|
+
vocabulary: opaque_snapshot_cursor
|
|
1073
|
+
binding: [collection, owner, filters, limit, order, snapshot]
|
|
1074
|
+
invalid_behavior: cursor_invalid
|
|
1075
|
+
unavailable_behavior: cursor_snapshot_unavailable
|
|
1076
|
+
summaries: >-
|
|
1077
|
+
List returns only opaque identity and binding digests, stable reason,
|
|
1078
|
+
lifecycle status and dates, and bounded current, stale, or expired counts.
|
|
1079
|
+
It never returns candidate content, source identity, user identity, or
|
|
1080
|
+
approval material.
|
|
1081
|
+
exact:
|
|
1082
|
+
required_bindings: [review_id, candidate_id, candidate_revision, generation, policy_version]
|
|
1083
|
+
current_binding_field: candidate_projection_sha256
|
|
1084
|
+
max_serialized_utf8_bytes: 8192
|
|
1085
|
+
rule: >-
|
|
1086
|
+
Exact retrieval validates every selector, including a current
|
|
1087
|
+
content-addressed generation or non-secret, non-path generation and policy
|
|
1088
|
+
metadata bindings, the record digest, the current
|
|
1089
|
+
store owner, and the record's current candidate projection binding before
|
|
1090
|
+
emitting one private metadata record.
|
|
1091
|
+
rule: >-
|
|
1092
|
+
Reads are structured, non-interactive, private to the configured current-user
|
|
1093
|
+
profile, bounded, and mutation-free. They cannot select another owner or
|
|
1094
|
+
return stale, malformed, expired, or owner-mismatched metadata.
|
|
1095
|
+
maintenance:
|
|
1096
|
+
entrypoint: packages/cli/src/analytics/personalGlossaryReviewRecords.ts#maintainPersonalGlossaryReviewRecords
|
|
1097
|
+
exposure: authenticated_review_owner_only
|
|
1098
|
+
terminal_metadata_days: 90
|
|
1099
|
+
pending_metadata: retained_until_terminal_or_purge
|
|
1100
|
+
cache: replay_index_until_receipt_expiry
|
|
1101
|
+
purge: current_user_authorized_review_records_only
|
|
1102
|
+
forbidden_effects:
|
|
1103
|
+
- profile_entry
|
|
1104
|
+
- project_state
|
|
1105
|
+
- candidate_projection
|
|
1106
|
+
- publication
|
|
1107
|
+
rule: >-
|
|
1108
|
+
Separate maintenance removes only expired terminal review metadata and expired
|
|
1109
|
+
replay-index entries, or the complete review-record file after a
|
|
1110
|
+
current-user-authorized purge. It never creates a record during a read and
|
|
1111
|
+
never deletes or changes a profile entry, project state, candidate projection,
|
|
1112
|
+
or publication result.
|
|
1113
|
+
admission:
|
|
1114
|
+
inferred_automatic_admission: disabled
|
|
1115
|
+
inferred_review: allowed
|
|
1116
|
+
quality_threshold: references/analysis/personal-glossary-evaluation-authority.yaml#gates.release_authorizing_gate
|
|
1117
|
+
holdout: references/analysis/personal-glossary-evaluation-authority.yaml#holdout
|
|
1118
|
+
rule: >-
|
|
1119
|
+
The separate evaluation authority defines the frozen holdout, metric
|
|
1120
|
+
thresholds, and fail-closed release gate. Inferred meanings remain
|
|
1121
|
+
review-only, and no measured result enables inferred automatic admission.
|
|
1122
|
+
|
|
1123
|
+
candidate_contracts:
|
|
1124
|
+
schema_version: agentera.personalGlossaryCandidateContracts.v1
|
|
1125
|
+
status: active_partial
|
|
1126
|
+
implementation_boundary: receipt_validation_deterministic_decision_and_explicit_personal_publication_runtime
|
|
1127
|
+
purpose: >-
|
|
1128
|
+
Define five distinct, content-addressed boundaries for one personal glossary
|
|
1129
|
+
candidate. Discovery and projection own evidence, the semantic host owns only
|
|
1130
|
+
bounded classification, the CLI owns deterministic admission validation, the
|
|
1131
|
+
user owns review lifecycle, and one explicit personal publication operation
|
|
1132
|
+
owns the personal publication result. Candidate retrieval alone exposes
|
|
1133
|
+
private reads; personal publication alone changes the owned profile section.
|
|
1134
|
+
Neither replaces shared consumer or project publication contracts.
|
|
1135
|
+
canonicalization:
|
|
1136
|
+
algorithm: sha256
|
|
1137
|
+
encoding: lowercase_hex
|
|
1138
|
+
input: canonical_utf8_json
|
|
1139
|
+
object_keys: unicode_code_point_sorted
|
|
1140
|
+
evidence_records: canonical_json_sorted
|
|
1141
|
+
digest_field_rule: exclude_digest_field_from_body
|
|
1142
|
+
arrays: preserve_declared_order
|
|
1143
|
+
rule: >-
|
|
1144
|
+
Every digest hashes canonical UTF-8 JSON with recursively sorted object keys.
|
|
1145
|
+
Evidence records are sorted by their canonical JSON before capsule creation.
|
|
1146
|
+
A layer digest excludes only its own digest field. Strings are preserved
|
|
1147
|
+
exactly; no Unicode normalization or display-label substitution is allowed.
|
|
1148
|
+
identity:
|
|
1149
|
+
stable_term_identity: personal_mining_authority.term_identity.stable_term_identity
|
|
1150
|
+
candidate_revision: personal_mining_authority.term_identity.candidate_revision
|
|
1151
|
+
rule: >-
|
|
1152
|
+
candidate_id is the settled stable term identity. candidate_revision is
|
|
1153
|
+
produced only by the current revision helper, so meaning, evidence, policy,
|
|
1154
|
+
or generation changes produce a new revision while an unchanged equality
|
|
1155
|
+
class keeps the same stable identity.
|
|
1156
|
+
bounds:
|
|
1157
|
+
term_max_utf8_bytes: 256
|
|
1158
|
+
meaning_max_utf8_bytes: 4096
|
|
1159
|
+
binding_max_utf8_bytes: 256
|
|
1160
|
+
evidence_records_max: 100
|
|
1161
|
+
reason_max_utf8_bytes: 512
|
|
1162
|
+
corrected_meaning_max_utf8_bytes: 4096
|
|
1163
|
+
digest_bytes: 32
|
|
1164
|
+
rule: >-
|
|
1165
|
+
These limits apply before downstream effects. Candidate evidence remains a
|
|
1166
|
+
complete bounded projection, not a preview that can silently omit records.
|
|
1167
|
+
layers:
|
|
1168
|
+
evidence_capsule:
|
|
1169
|
+
owner: deterministic_discovery_projection
|
|
1170
|
+
schema_version: agentera.personalGlossaryCandidateCapsule.v1
|
|
1171
|
+
required_fields:
|
|
1172
|
+
- schema_version
|
|
1173
|
+
- owner
|
|
1174
|
+
- candidate_id
|
|
1175
|
+
- candidate_revision
|
|
1176
|
+
- term
|
|
1177
|
+
- meaning
|
|
1178
|
+
- scope
|
|
1179
|
+
- provenance_kind
|
|
1180
|
+
- evidence
|
|
1181
|
+
- evidence_complete
|
|
1182
|
+
- evidence_set_sha256
|
|
1183
|
+
- policy_version
|
|
1184
|
+
- generation
|
|
1185
|
+
- capsule_sha256
|
|
1186
|
+
additional_fields: forbidden
|
|
1187
|
+
binding_fields: [candidate_id, candidate_revision, generation, policy_version]
|
|
1188
|
+
body_digest: capsule_sha256
|
|
1189
|
+
evidence_owner: deterministic_discovery_projection
|
|
1190
|
+
evidence_source: personal_mining_authority.provenance
|
|
1191
|
+
evidence_required_fields: provenance_variant_required_fields
|
|
1192
|
+
evidence_complete: true
|
|
1193
|
+
forbidden_fields:
|
|
1194
|
+
- admission
|
|
1195
|
+
- decision
|
|
1196
|
+
- review
|
|
1197
|
+
- publication
|
|
1198
|
+
- mutation
|
|
1199
|
+
- trusted_publication_effect
|
|
1200
|
+
rule: >-
|
|
1201
|
+
The capsule contains only the bounded candidate projection and complete
|
|
1202
|
+
qualifying evidence identities. It has no host judgment, admission result,
|
|
1203
|
+
review disposition, or publication effect.
|
|
1204
|
+
host_classification_receipt:
|
|
1205
|
+
owner: semantic_host_classification
|
|
1206
|
+
schema_version: agentera.personalGlossaryHostClassificationReceipt.v1
|
|
1207
|
+
required_fields:
|
|
1208
|
+
- schema_version
|
|
1209
|
+
- owner
|
|
1210
|
+
- candidate_id
|
|
1211
|
+
- candidate_revision
|
|
1212
|
+
- candidate_capsule_sha256
|
|
1213
|
+
- candidate_projection_sha256
|
|
1214
|
+
- generation
|
|
1215
|
+
- policy_version
|
|
1216
|
+
- classification
|
|
1217
|
+
- semantic_fingerprint
|
|
1218
|
+
- receipt_sha256
|
|
1219
|
+
additional_fields: forbidden
|
|
1220
|
+
binding_fields:
|
|
1221
|
+
- candidate_id
|
|
1222
|
+
- candidate_revision
|
|
1223
|
+
- candidate_capsule_sha256
|
|
1224
|
+
- candidate_projection_sha256
|
|
1225
|
+
- generation
|
|
1226
|
+
- policy_version
|
|
1227
|
+
body_digest: receipt_sha256
|
|
1228
|
+
classification:
|
|
1229
|
+
fields: [term, meaning, scope, permanence, consistency, confidence]
|
|
1230
|
+
term: shared_primitive.fields.term
|
|
1231
|
+
meaning: shared_primitive.fields.meaning
|
|
1232
|
+
scope: packages/cli/src/registries/glossaryTermIdentity.ts#GlossaryCandidateScope
|
|
1233
|
+
permanence: shared_primitive.fields.permanence
|
|
1234
|
+
confidence: shared_primitive.fields.confidence
|
|
1235
|
+
consistency_values: [consistent, inconsistent, uncertain]
|
|
1236
|
+
forbidden_fields:
|
|
1237
|
+
- admission
|
|
1238
|
+
- decision
|
|
1239
|
+
- mutation
|
|
1240
|
+
- publication
|
|
1241
|
+
- review_bypass
|
|
1242
|
+
- trusted_publication_effect
|
|
1243
|
+
- project_glossary
|
|
1244
|
+
- project_publication
|
|
1245
|
+
rule: >-
|
|
1246
|
+
The host may classify only term, meaning, scope, permanence, consistency,
|
|
1247
|
+
and confidence. The receipt binds the exact capsule, current projection,
|
|
1248
|
+
revision, generation, and policy. It cannot choose admission, authorize
|
|
1249
|
+
mutation, bypass review, or supply a trusted publication effect.
|
|
1250
|
+
cli_decision:
|
|
1251
|
+
owner: deterministic_cli_admission_validation
|
|
1252
|
+
schema_version: agentera.personalGlossaryAdmissionDecision.v1
|
|
1253
|
+
required_fields:
|
|
1254
|
+
- schema_version
|
|
1255
|
+
- owner
|
|
1256
|
+
- candidate_id
|
|
1257
|
+
- candidate_revision
|
|
1258
|
+
- candidate_capsule_sha256
|
|
1259
|
+
- candidate_projection_sha256
|
|
1260
|
+
- host_receipt_sha256
|
|
1261
|
+
- classification_contract_version
|
|
1262
|
+
- semantic_fingerprint
|
|
1263
|
+
- generation
|
|
1264
|
+
- policy_version
|
|
1265
|
+
- outcome
|
|
1266
|
+
- reason
|
|
1267
|
+
- decision_sha256
|
|
1268
|
+
additional_fields: forbidden
|
|
1269
|
+
binding_fields:
|
|
1270
|
+
- candidate_id
|
|
1271
|
+
- candidate_revision
|
|
1272
|
+
- candidate_capsule_sha256
|
|
1273
|
+
- candidate_projection_sha256
|
|
1274
|
+
- host_receipt_sha256
|
|
1275
|
+
- classification_contract_version
|
|
1276
|
+
- semantic_fingerprint
|
|
1277
|
+
- generation
|
|
1278
|
+
- policy_version
|
|
1279
|
+
body_digest: decision_sha256
|
|
1280
|
+
outcomes: [automatic_admission, review_required, abstain]
|
|
1281
|
+
reason_codes:
|
|
1282
|
+
- explicit_current_authorized
|
|
1283
|
+
- inferred_requires_review
|
|
1284
|
+
- scope_ambiguous
|
|
1285
|
+
- classification_inconsistent
|
|
1286
|
+
- classification_changed
|
|
1287
|
+
- entry_conflict
|
|
1288
|
+
- evidence_retracted_or_conflicted
|
|
1289
|
+
- quality_gate_not_authorizing
|
|
1290
|
+
- scope_project
|
|
1291
|
+
- evidence_unavailable
|
|
1292
|
+
- evidence_changed
|
|
1293
|
+
reason_codes_by_outcome:
|
|
1294
|
+
automatic_admission: [explicit_current_authorized]
|
|
1295
|
+
review_required:
|
|
1296
|
+
- inferred_requires_review
|
|
1297
|
+
- scope_ambiguous
|
|
1298
|
+
- classification_inconsistent
|
|
1299
|
+
- classification_changed
|
|
1300
|
+
- entry_conflict
|
|
1301
|
+
- evidence_retracted_or_conflicted
|
|
1302
|
+
- quality_gate_not_authorizing
|
|
1303
|
+
abstain: [scope_project, evidence_unavailable, evidence_changed]
|
|
1304
|
+
automatic_admission:
|
|
1305
|
+
owner: deterministic_cli_admission_validation
|
|
1306
|
+
allowed_provenance: provenance_variants.personal_explicit_definition
|
|
1307
|
+
inferred_automatic_admission: disabled
|
|
1308
|
+
required_classification:
|
|
1309
|
+
scope: personal
|
|
1310
|
+
consistency: consistent
|
|
1311
|
+
term: exact_capsule_term
|
|
1312
|
+
meaning: exact_capsule_meaning
|
|
1313
|
+
current_evidence: required
|
|
1314
|
+
quality_gate: personal_mining_authority.admission.quality_threshold
|
|
1315
|
+
command:
|
|
1316
|
+
canonical: npx -y agentera@next report personal-glossary-decision
|
|
1317
|
+
namespace: report
|
|
1318
|
+
input_flag: --input
|
|
1319
|
+
stdin_value: '-'
|
|
1320
|
+
format: json
|
|
1321
|
+
project_checkout: not_required
|
|
1322
|
+
request:
|
|
1323
|
+
schema_version: agentera.personalGlossaryAdmissionRequest.v1
|
|
1324
|
+
required_fields: [schema_version, receipt]
|
|
1325
|
+
additional_fields: forbidden
|
|
1326
|
+
max_utf8_bytes: 16384
|
|
1327
|
+
result:
|
|
1328
|
+
schema_version: agentera.personalGlossaryAdmissionResult.v1
|
|
1329
|
+
fields: [schemaVersion, command, status, decision, reason, effects]
|
|
1330
|
+
statuses: [automatic_admission, review_required, abstain]
|
|
1331
|
+
max_utf8_bytes: 4096
|
|
1332
|
+
effects: []
|
|
1333
|
+
receipt_construction:
|
|
1334
|
+
schema_version: agentera.personalGlossaryAdmissionRequest.v2
|
|
1335
|
+
required_fields: [schema_version, candidate_id, candidate_revision, candidate_capsule_sha256, candidate_projection_sha256, generation, policy_version, classification]
|
|
1336
|
+
additional_fields: forbidden
|
|
1337
|
+
max_utf8_bytes: 16384
|
|
1338
|
+
result:
|
|
1339
|
+
schema_version: agentera.personalGlossaryAdmissionResult.v2
|
|
1340
|
+
fields: [schemaVersion, command, status, receipt, decision, reason, effects]
|
|
1341
|
+
statuses: [automatic_admission, review_required, abstain]
|
|
1342
|
+
max_utf8_bytes: 16384
|
|
1343
|
+
effects: []
|
|
1344
|
+
rule: >-
|
|
1345
|
+
The command accepts either one existing host receipt or one bounded host
|
|
1346
|
+
classification with every exact candidate binding through a structured
|
|
1347
|
+
file or stdin request. For the classification request, the CLI reads the
|
|
1348
|
+
current private projection, constructs the receipt including its semantic
|
|
1349
|
+
fingerprint and receipt digest, computes one deterministic outcome, and
|
|
1350
|
+
returns both receipt and decision. It emits JSON without changing a
|
|
1351
|
+
projection, review record, profile, project glossary, or project state.
|
|
1352
|
+
forbidden_fields: [host_authority, host_override, mutation, publication]
|
|
1353
|
+
rule: >-
|
|
1354
|
+
Only the deterministic CLI validator may emit an admission outcome. It
|
|
1355
|
+
validates the capsule and host receipt bindings before any later workflow;
|
|
1356
|
+
it does not itself write a profile, project glossary, or review record.
|
|
1357
|
+
review_record:
|
|
1358
|
+
owner: user_local_review_lifecycle
|
|
1359
|
+
schema_version: agentera.personalGlossaryReviewRecord.v1
|
|
1360
|
+
required_fields:
|
|
1361
|
+
- schema_version
|
|
1362
|
+
- owner
|
|
1363
|
+
- candidate_id
|
|
1364
|
+
- candidate_revision
|
|
1365
|
+
- candidate_capsule_sha256
|
|
1366
|
+
- host_receipt_sha256
|
|
1367
|
+
- cli_decision_sha256
|
|
1368
|
+
- semantic_fingerprint
|
|
1369
|
+
- generation
|
|
1370
|
+
- policy_version
|
|
1371
|
+
- disposition
|
|
1372
|
+
- corrected_meaning
|
|
1373
|
+
- corrected_scope
|
|
1374
|
+
- disposed_at
|
|
1375
|
+
- expires_at
|
|
1376
|
+
- record_sha256
|
|
1377
|
+
additional_fields: forbidden
|
|
1378
|
+
binding_fields:
|
|
1379
|
+
- candidate_id
|
|
1380
|
+
- candidate_revision
|
|
1381
|
+
- candidate_capsule_sha256
|
|
1382
|
+
- host_receipt_sha256
|
|
1383
|
+
- cli_decision_sha256
|
|
1384
|
+
- semantic_fingerprint
|
|
1385
|
+
- generation
|
|
1386
|
+
- policy_version
|
|
1387
|
+
body_digest: record_sha256
|
|
1388
|
+
storage: $AGENTERA_PROFILE_DIR/intermediate/personal-glossary
|
|
1389
|
+
dispositions_from: [personal_mining_authority.privacy.reviews.dispositions]
|
|
1390
|
+
authentication: personal_mining_authority.privacy.reviews.authentication
|
|
1391
|
+
forbidden_fields:
|
|
1392
|
+
- project_glossary
|
|
1393
|
+
- project_publication
|
|
1394
|
+
- profile_entry_mutation
|
|
1395
|
+
- trusted_host_authority
|
|
1396
|
+
rule: >-
|
|
1397
|
+
A review record is user-local lifecycle state bound to the exact candidate,
|
|
1398
|
+
semantic classification, generation, policy, and CLI decision. It is not a
|
|
1399
|
+
host classification receipt and cannot mutate project or profile state by
|
|
1400
|
+
itself.
|
|
1401
|
+
publication_result:
|
|
1402
|
+
owner: personal_profile_publication
|
|
1403
|
+
schema_version: agentera.personalGlossaryPublicationResult.v1
|
|
1404
|
+
required_fields:
|
|
1405
|
+
- schema_version
|
|
1406
|
+
- owner
|
|
1407
|
+
- candidate_id
|
|
1408
|
+
- candidate_revision
|
|
1409
|
+
- candidate_capsule_sha256
|
|
1410
|
+
- decision_sha256
|
|
1411
|
+
- review_record_sha256
|
|
1412
|
+
- generation
|
|
1413
|
+
- policy_version
|
|
1414
|
+
- status
|
|
1415
|
+
- profile_section_sha256
|
|
1416
|
+
- published_at
|
|
1417
|
+
- result_sha256
|
|
1418
|
+
additional_fields: forbidden
|
|
1419
|
+
binding_fields:
|
|
1420
|
+
- candidate_id
|
|
1421
|
+
- candidate_revision
|
|
1422
|
+
- candidate_capsule_sha256
|
|
1423
|
+
- decision_sha256
|
|
1424
|
+
- generation
|
|
1425
|
+
- policy_version
|
|
1426
|
+
body_digest: result_sha256
|
|
1427
|
+
command: ownership_contracts.personal.profile_output.command.canonical
|
|
1428
|
+
status_values_from: [ownership_contracts.personal.profile_output.command.output_statuses]
|
|
1429
|
+
forbidden_fields:
|
|
1430
|
+
- project_glossary
|
|
1431
|
+
- project_publication
|
|
1432
|
+
- consumer_precedence
|
|
1433
|
+
- review_authorization
|
|
1434
|
+
rule: >-
|
|
1435
|
+
This is the bounded result of explicit personal-profile publication only. It binds
|
|
1436
|
+
the validated decision and optional review record, reports the existing
|
|
1437
|
+
personal output status, and never changes Build-owned project publication.
|
|
1438
|
+
shared_invariance:
|
|
1439
|
+
shared_primitive: shared_primitive
|
|
1440
|
+
consumer_precedence: consumer_boundary.primary_selection
|
|
1441
|
+
project_publication: ownership_contracts.project.publication
|
|
1442
|
+
personal_project_isolation: ownership_contracts.personal.admission.isolation_rule
|
|
1443
|
+
rule: >-
|
|
1444
|
+
Candidate contracts add evidence and identity bindings without adding fields
|
|
1445
|
+
to the shared glossary entry. Consumers keep project precedence and Build
|
|
1446
|
+
publication unchanged; personal mining has no project glossary input.
|
|
1447
|
+
recovery:
|
|
1448
|
+
stale_or_mismatch: fail_closed_no_effects
|
|
1449
|
+
retry: >-
|
|
1450
|
+
Reject the layer before effects, reread the current bounded source contract,
|
|
1451
|
+
recompute the capsule and settled identities, and retry the downstream
|
|
1452
|
+
operation with all exact bindings. Never repair a stale receipt in place.
|
|
1453
|
+
|
|
1454
|
+
provenance_variants:
|
|
1455
|
+
personal_explicit_definition:
|
|
1456
|
+
owner: personal
|
|
1457
|
+
evidence_count: 1
|
|
1458
|
+
required_evidence_fields: [source_id, evidence_anchor, signal_type]
|
|
1459
|
+
additional_evidence_fields: forbidden
|
|
1460
|
+
source_provenance:
|
|
1461
|
+
required_fields: [source_id, evidence_anchor, source_kind, signal_type, origin_id, content_fingerprint, author_class, session_id, project_id]
|
|
1462
|
+
allowed_source_kinds: [conversation_turn]
|
|
1463
|
+
identity_fields_must_match_full_record: true
|
|
1464
|
+
allowed_signal_types: [correction, decision, instruction]
|
|
1465
|
+
resolution_rule: >-
|
|
1466
|
+
evidence_anchor resolves to source_id of exactly one retained
|
|
1467
|
+
full-evidence shard through the bounded signal tier. One such distinct
|
|
1468
|
+
retained record is sufficient; unanchored or unresolved evidence fails.
|
|
1469
|
+
personal_inferred_usage:
|
|
1470
|
+
owner: personal
|
|
1471
|
+
evidence_count: 2
|
|
1472
|
+
required_evidence_fields: [source_id, evidence_anchor, source_kind]
|
|
1473
|
+
additional_evidence_fields: forbidden
|
|
1474
|
+
distinctness:
|
|
1475
|
+
source_ids: 2
|
|
1476
|
+
evidence_anchors: 2
|
|
1477
|
+
allowed_source_kinds: [instruction_document, project_config_signal]
|
|
1478
|
+
resolution_rule: >-
|
|
1479
|
+
Each evidence_anchor resolves to its source_id in retained full evidence.
|
|
1480
|
+
Both source_id and evidence_anchor must be pairwise distinct, so two
|
|
1481
|
+
signals or anchors resolving to one retained record fail. Both anchors
|
|
1482
|
+
remain exposed on the entry.
|
|
1483
|
+
personal_inferred_conversation:
|
|
1484
|
+
owner: personal
|
|
1485
|
+
evidence_count: variable
|
|
1486
|
+
minimum_evidence_count: 3
|
|
1487
|
+
required_evidence_fields:
|
|
1488
|
+
- source_id
|
|
1489
|
+
- evidence_anchor
|
|
1490
|
+
- source_kind
|
|
1491
|
+
- signal_type
|
|
1492
|
+
- session_id
|
|
1493
|
+
- project_id
|
|
1494
|
+
- content_fingerprint
|
|
1495
|
+
- author_class
|
|
1496
|
+
additional_evidence_fields: forbidden
|
|
1497
|
+
allowed_signal_types: [correction, decision, question, instruction, configuration]
|
|
1498
|
+
allowed_source_kinds: [conversation_turn]
|
|
1499
|
+
allowed_author_classes: [user]
|
|
1500
|
+
distinctness:
|
|
1501
|
+
source_ids: 3
|
|
1502
|
+
evidence_anchors: 3
|
|
1503
|
+
session_ids: 2
|
|
1504
|
+
project_ids: 2
|
|
1505
|
+
content_fingerprints: 3
|
|
1506
|
+
completeness_field: provenance.evidence_complete
|
|
1507
|
+
completeness_value: true
|
|
1508
|
+
completeness_authority: expected_qualifying_anchor_set_exact_match
|
|
1509
|
+
expected_evidence:
|
|
1510
|
+
binding: generation_bound
|
|
1511
|
+
context_fields: [generation, qualifying_evidence_anchors, qualifying_evidence_set_sha256]
|
|
1512
|
+
exact_set: required
|
|
1513
|
+
set_digest:
|
|
1514
|
+
algorithm: sha256
|
|
1515
|
+
encoding: lowercase_hex
|
|
1516
|
+
canonicalization: >-
|
|
1517
|
+
Hash canonical UTF-8 JSON containing the schema name, generation, and
|
|
1518
|
+
lexicographically code-point-sorted qualifying evidence anchors. The
|
|
1519
|
+
expected set digest is authoritative; list order is not.
|
|
1520
|
+
duplicate_rule: >-
|
|
1521
|
+
Reject duplicate source_id, evidence_anchor, or content_fingerprint at
|
|
1522
|
+
every list length, even when the list still meets the minimum count.
|
|
1523
|
+
admission: review_only
|
|
1524
|
+
resolution_rule: >-
|
|
1525
|
+
Retain every qualifying user-authored conversation record. At least three
|
|
1526
|
+
pairwise-distinct source identities, anchors, and content fingerprints must
|
|
1527
|
+
span at least two sessions and two projects. Agent-authored text may
|
|
1528
|
+
corroborate a later review but cannot satisfy this variant. The evidence
|
|
1529
|
+
list is complete, not a bounded preview; any unresolved, duplicated, or
|
|
1530
|
+
missing identity fails.
|
|
1531
|
+
project_file:
|
|
1532
|
+
owner: project
|
|
1533
|
+
evidence_count: 1
|
|
1534
|
+
required_evidence_fields: [source_path, source_record_sha256]
|
|
1535
|
+
additional_evidence_fields: forbidden
|
|
1536
|
+
resolution_rule: >-
|
|
1537
|
+
source_path is a safe project-relative path and source_record_sha256 is
|
|
1538
|
+
the lowercase SHA-256 of the cited parsed source record. These reuse the
|
|
1539
|
+
repository source-path and record-digest provenance vocabulary from
|
|
1540
|
+
references/artifacts/state-storage-authority.yaml.
|
|
1541
|
+
|
|
1542
|
+
ownership_contracts:
|
|
1543
|
+
personal:
|
|
1544
|
+
scope: user
|
|
1545
|
+
implementation:
|
|
1546
|
+
status: active_partial
|
|
1547
|
+
active:
|
|
1548
|
+
- bounded_admission
|
|
1549
|
+
- bounded_explicit_discovery
|
|
1550
|
+
- bounded_candidate_projection
|
|
1551
|
+
- bounded_candidate_retrieval
|
|
1552
|
+
- public_receipt_construction
|
|
1553
|
+
- host_classification_receipt_validation
|
|
1554
|
+
- deterministic_cli_admission_decision
|
|
1555
|
+
- explicit_classification
|
|
1556
|
+
- inferred_evidence_check
|
|
1557
|
+
- authorized_personal_publication
|
|
1558
|
+
- profile_section_persistence
|
|
1559
|
+
inactive: [lookup]
|
|
1560
|
+
allowed_provenance:
|
|
1561
|
+
- personal_explicit_definition
|
|
1562
|
+
- personal_inferred_usage
|
|
1563
|
+
- personal_inferred_conversation
|
|
1564
|
+
input:
|
|
1565
|
+
tier: signal
|
|
1566
|
+
authority: references/analysis/evidence-tier-authority.yaml
|
|
1567
|
+
bounded_rule: >-
|
|
1568
|
+
Admit only bounded personal-history signals and resolve qualifying
|
|
1569
|
+
evidence one anchor at a time to retained full-evidence shards. Never
|
|
1570
|
+
scan unbounded history or load a monolithic corpus.
|
|
1571
|
+
excluded_categories:
|
|
1572
|
+
- project_glossary_artifact_identity
|
|
1573
|
+
- project_glossary_path
|
|
1574
|
+
- project_glossary_record
|
|
1575
|
+
- project_file_provenance
|
|
1576
|
+
admission:
|
|
1577
|
+
explicit:
|
|
1578
|
+
candidate_signal_types: [correction, decision]
|
|
1579
|
+
language_rule: >-
|
|
1580
|
+
The bounded explicit discovery grammar accepts only the ten forms in
|
|
1581
|
+
personal_mining_authority.explicit_discovery. Quoted or code-delimited
|
|
1582
|
+
means, standalone safe definition-list colons, exact acronym expansions,
|
|
1583
|
+
By X I mean Y, Use X for/to mean Y, To clarify X refers to Y, the
|
|
1584
|
+
clarification prefer form, and approved correction means forms are
|
|
1585
|
+
recognized. YAML/config labels, times, URLs, headings, citations,
|
|
1586
|
+
indirect questions, future language, and unbound prose are rejected.
|
|
1587
|
+
evidence_count: 1
|
|
1588
|
+
inferred:
|
|
1589
|
+
candidate_signal_types: [instruction, configuration]
|
|
1590
|
+
source_kinds: [instruction_document, project_config_signal]
|
|
1591
|
+
identity_rule: >-
|
|
1592
|
+
A requested term must occur as a complete case-insensitive token in
|
|
1593
|
+
two pairwise-distinct retained source identities and anchors. Duplicate
|
|
1594
|
+
identities or anchors fail and successful admission exposes both.
|
|
1595
|
+
evidence_count: 2
|
|
1596
|
+
read_rule: >-
|
|
1597
|
+
Read the bounded signal tier once, select only authority-declared signal
|
|
1598
|
+
types and source kinds, and resolve each selected evidence_anchor through
|
|
1599
|
+
direct single-shard retrieval. Never iterate full history or read legacy
|
|
1600
|
+
corpus.json. Missing, legacy, corrupt, or insufficient evidence returns
|
|
1601
|
+
deterministic recovery without a candidate.
|
|
1602
|
+
insufficient_recovery: >-
|
|
1603
|
+
Refresh bounded local-history evidence or provide another distinct
|
|
1604
|
+
qualifying record; no personal glossary candidate was admitted.
|
|
1605
|
+
isolation_rule: >-
|
|
1606
|
+
Admission accepts only the personal tiers directory and optional legacy
|
|
1607
|
+
corpus location. It has no project-glossary identity, path, or record
|
|
1608
|
+
input, and its result is invariant to project-glossary presence.
|
|
1609
|
+
retention_and_decay:
|
|
1610
|
+
retention: Retained entries decay rather than disappearing solely because evidence ages.
|
|
1611
|
+
confidence: Apply the existing profile permanence decay class to integer confidence.
|
|
1612
|
+
permanence: Remains independently classified and is not changed by evidence age or confidence decay.
|
|
1613
|
+
authority: packages/cli/src/capabilities/profile/instructions.ts#Profile-format
|
|
1614
|
+
profile_output:
|
|
1615
|
+
owner: personal_profile_publication
|
|
1616
|
+
lifecycle_callable: packages/cli/src/analytics/personalGlossaryProfile.ts#updatePersonalGlossaryProfile
|
|
1617
|
+
command:
|
|
1618
|
+
canonical: npx -y agentera@next report personal-glossary-publish
|
|
1619
|
+
namespace: report
|
|
1620
|
+
input_flag: --input
|
|
1621
|
+
stdin_value: "-"
|
|
1622
|
+
format: json
|
|
1623
|
+
dry_run_flag: --dry-run
|
|
1624
|
+
project_checkout: not_required
|
|
1625
|
+
request:
|
|
1626
|
+
schema_version: agentera.personalGlossaryPublishRequest.v1
|
|
1627
|
+
required_fields: [schema_version, receipt, decision, as_of]
|
|
1628
|
+
optional_fields: [review_authorization]
|
|
1629
|
+
additional_fields: forbidden
|
|
1630
|
+
max_utf8_bytes: 16384
|
|
1631
|
+
profile_path_rule: >-
|
|
1632
|
+
Resolve only $AGENTERA_PROFILE_DIR/PROFILE.md through the canonical
|
|
1633
|
+
user-profile authority. The request cannot select a path, project
|
|
1634
|
+
root, project glossary, or other artifact.
|
|
1635
|
+
current_decision_rule: >-
|
|
1636
|
+
Accept either a complete CLI-owned automatic_admission decision with
|
|
1637
|
+
explicit_current_authorized reason and no review authorization, or one
|
|
1638
|
+
current review_required decision with an exact stored accept or correct
|
|
1639
|
+
authorization. Before effects, revalidate the current projection,
|
|
1640
|
+
capsule, receipt, generation, policy, semantic fingerprint, current
|
|
1641
|
+
meaning and revision, scope, conflict, retraction, secret content, and
|
|
1642
|
+
the existing decision rules. A review authorization never skips current
|
|
1643
|
+
evidence validation and does not permit project scope.
|
|
1644
|
+
review_authorization:
|
|
1645
|
+
required_fields: [review_id, review_record_sha256]
|
|
1646
|
+
additional_fields: forbidden
|
|
1647
|
+
dispositions: [accept, correct]
|
|
1648
|
+
source: personal_mining_authority.review_records.disposition.publication_authorization
|
|
1649
|
+
rule: >-
|
|
1650
|
+
The command rereads one current user-local review record, validates its
|
|
1651
|
+
canonical record hash and all receipt, decision, projection, policy,
|
|
1652
|
+
semantic-fingerprint, and revision bindings, then uses its approved
|
|
1653
|
+
corrected meaning and personal scope only for correct. No direct review
|
|
1654
|
+
record, correction, key, nonce, signature, profile path, or project path
|
|
1655
|
+
is accepted from publication input.
|
|
1656
|
+
date_rule: >-
|
|
1657
|
+
as_of is one injected ISO calendar date. Use it for lifecycle
|
|
1658
|
+
rendering and derive published_at as UTC midnight of that exact date;
|
|
1659
|
+
never read the wall clock for publication content or replay.
|
|
1660
|
+
result:
|
|
1661
|
+
schema_version: agentera.personalGlossaryPublicationResult.v1
|
|
1662
|
+
fields: [schema_version, owner, candidate_id, candidate_revision, candidate_capsule_sha256, decision_sha256, review_record_sha256, generation, policy_version, status, profile_section_sha256, published_at, result_sha256]
|
|
1663
|
+
max_utf8_bytes: 4096
|
|
1664
|
+
output_statuses: [changed, unchanged_replay, dry_run_candidate]
|
|
1665
|
+
rule: >-
|
|
1666
|
+
The packaged headless command accepts only one bounded structured
|
|
1667
|
+
receipt and CLI decision, revalidates authorization immediately before
|
|
1668
|
+
effects, and invokes the lifecycle_callable without duplicating merge,
|
|
1669
|
+
decay, replacement, or persistence behavior. It changes only the owned
|
|
1670
|
+
PROFILE.md Glossary section. JSON output contains opaque bindings only;
|
|
1671
|
+
diagnostics use stable generic envelopes. Dry-run computes a candidate
|
|
1672
|
+
without writing PROFILE.md.
|
|
1673
|
+
section:
|
|
1674
|
+
heading: "## Glossary"
|
|
1675
|
+
start_marker: "<!-- agentera:personal-glossary:start -->"
|
|
1676
|
+
end_marker: "<!-- agentera:personal-glossary:end -->"
|
|
1677
|
+
encoding: deterministic_json_fence
|
|
1678
|
+
document_schema_version: agentera.personalGlossarySection.v1
|
|
1679
|
+
entry_shape: shared_primitive
|
|
1680
|
+
lifecycle_metadata: [as_of, confidence_basis]
|
|
1681
|
+
boundary_rule: >-
|
|
1682
|
+
Add one owned section when absent or replace exactly the bytes from its
|
|
1683
|
+
start marker through its end marker. Reject unmatched markers,
|
|
1684
|
+
duplicate owned sections, or an unowned Glossary heading before any
|
|
1685
|
+
write. Preserve every other profile byte exactly.
|
|
1686
|
+
merge_identity:
|
|
1687
|
+
normalization: unicode_caseless_exact_no_normalization
|
|
1688
|
+
rule: >-
|
|
1689
|
+
One locale-independent Unicode caseless-exact term identity may occur
|
|
1690
|
+
once. Identity performs no Unicode normalization, accent folding, or
|
|
1691
|
+
compatibility folding; canonically distinct strings remain distinct.
|
|
1692
|
+
Preserve the established spelling and observed_at date. Fresh
|
|
1693
|
+
qualifying evidence may refresh an entry only when meaning and
|
|
1694
|
+
provenance kind are unchanged; divergent meaning or provenance kind is
|
|
1695
|
+
a conflict rather than an implicit overwrite.
|
|
1696
|
+
refresh_rule: >-
|
|
1697
|
+
For matching fresh qualifying evidence, set confidence and its
|
|
1698
|
+
confidence_basis to the fresh evidence-based integer, replace only the
|
|
1699
|
+
same-kind personal evidence anchors, and set last_confirmed_at to the
|
|
1700
|
+
injected as_of date. Preserve observed_at and permanence. This rule is
|
|
1701
|
+
stable for identical input and as_of.
|
|
1702
|
+
decay_rule: >-
|
|
1703
|
+
Without matching fresh evidence, retain the entry and permanence. Derive
|
|
1704
|
+
confidence from its unchanged confidence_basis, its permanence-class
|
|
1705
|
+
lambda, and calendar days from last_confirmed_at to injected as_of using
|
|
1706
|
+
the Profile formula; round to the nearest integer after applying the
|
|
1707
|
+
existing floor. The section-level basis prevents same-date drift and
|
|
1708
|
+
repeated compounding from already-decayed confidence. Age alone never
|
|
1709
|
+
removes an entry.
|
|
1710
|
+
isolation_rule: >-
|
|
1711
|
+
The command accepts only one receipt, one CLI decision, and an injected
|
|
1712
|
+
ISO date. It resolves the canonical user PROFILE.md path itself and has
|
|
1713
|
+
no project root, project glossary parameter, artifact lookup, or project
|
|
1714
|
+
file read.
|
|
1715
|
+
filesystem:
|
|
1716
|
+
authority: host_filesystem
|
|
1717
|
+
configured_path: canonical_user_profile_authority
|
|
1718
|
+
outcomes: ordinary_permissions_and_io
|
|
1719
|
+
same_user_path_manipulation: outside_agentera_threat_model
|
|
1720
|
+
symlink_confinement: not_claimed
|
|
1721
|
+
rule: >-
|
|
1722
|
+
Profile storage uses ordinary current-user filesystem permissions and
|
|
1723
|
+
atomic replacement. This contract does not claim symlink confinement.
|
|
1724
|
+
project:
|
|
1725
|
+
scope: repository
|
|
1726
|
+
implementation:
|
|
1727
|
+
status: active
|
|
1728
|
+
active: [audit_proposal_digest, build_publication, confirmed_variant_guard]
|
|
1729
|
+
inactive: [lookup, precedence, semantic_equivalence_review]
|
|
1730
|
+
allowed_provenance: [project_file]
|
|
1731
|
+
input:
|
|
1732
|
+
authority: repository_files
|
|
1733
|
+
bounded_rule: Admit only the cited project-relative record bound by its record SHA-256.
|
|
1734
|
+
excluded_categories: [personal_history_record, personal_history_anchor]
|
|
1735
|
+
proposal_digest:
|
|
1736
|
+
algorithm: sha256
|
|
1737
|
+
encoding: lowercase_hex
|
|
1738
|
+
canonicalization: >-
|
|
1739
|
+
Hash the complete terminology finding except proposal_digest as canonical
|
|
1740
|
+
JSON with mapping keys sorted recursively. Sort canonical_evidence and
|
|
1741
|
+
each variant evidence by source_path, line, then source_record_sha256;
|
|
1742
|
+
sort variants by case-insensitive term and then exact term. The digest
|
|
1743
|
+
therefore changes when any proposal, confidence, severity, divergence,
|
|
1744
|
+
term, source path, line identity, or source-record digest changes, but not
|
|
1745
|
+
when equivalent evidence or variant arrays arrive in a different order.
|
|
1746
|
+
Locale-independent lowercase ordering is only a deterministic sort key;
|
|
1747
|
+
it does not define term identity.
|
|
1748
|
+
proposal_validation:
|
|
1749
|
+
owner: audit
|
|
1750
|
+
shared_runtime: packages/cli/src/audit/terminologyDrift.ts#validateTerminologyProposal
|
|
1751
|
+
required_rules:
|
|
1752
|
+
- safe_distinct_evidence_identities_per_term
|
|
1753
|
+
- unicode_caseless_exact_unique_term_identities
|
|
1754
|
+
- best_supported_canonical_term_with_lexicographic_tie_break
|
|
1755
|
+
- authority_confidence_floor_and_range
|
|
1756
|
+
- confidence_below_70_forces_info_severity
|
|
1757
|
+
- canonical_evidence_and_variant_order
|
|
1758
|
+
- canonical_proposal_digest
|
|
1759
|
+
publication_rule: >-
|
|
1760
|
+
Build publication accepts only the complete canonical finding that this
|
|
1761
|
+
Audit-owned validator can emit. Publication reuses this validator and
|
|
1762
|
+
must not duplicate or weaken Audit proposal semantics.
|
|
1763
|
+
entry_derivation:
|
|
1764
|
+
term: proposal.proposed_canonical_term
|
|
1765
|
+
meaning: proposal.concept
|
|
1766
|
+
confidence: proposal.confidence
|
|
1767
|
+
permanence: stable
|
|
1768
|
+
temporal.observed_at: confirmation.confirmed_at calendar date
|
|
1769
|
+
temporal.last_confirmed_at: confirmation.confirmed_at calendar date
|
|
1770
|
+
provenance.kind: project_file
|
|
1771
|
+
provenance.evidence: >-
|
|
1772
|
+
Exactly the first canonical_evidence record after proposal-digest
|
|
1773
|
+
canonical ordering, projected to source_path and source_record_sha256.
|
|
1774
|
+
Line identifies and revalidates the source record during publication but
|
|
1775
|
+
is not persisted because it is not part of the shared project_file
|
|
1776
|
+
provenance variant.
|
|
1777
|
+
rejection_rule: >-
|
|
1778
|
+
Reject before effects when any required proposal or derived entry value
|
|
1779
|
+
is absent or invalid; never invent a field or extend the shared entry.
|
|
1780
|
+
publication:
|
|
1781
|
+
owner: build
|
|
1782
|
+
command: npx -y agentera@next state glossary publish --input REQUEST --format json
|
|
1783
|
+
request:
|
|
1784
|
+
schema_version: agentera.glossaryPublicationRequest.v1
|
|
1785
|
+
required_fields: [schema_version, proposal, confirmation]
|
|
1786
|
+
additional_fields: forbidden
|
|
1787
|
+
proposal_shape: complete_terminology_drift_finding_with_proposal_digest
|
|
1788
|
+
confirmation:
|
|
1789
|
+
required_fields: [proposal_digest, confirmed_by, confirmed_at]
|
|
1790
|
+
additional_fields: forbidden
|
|
1791
|
+
confirmed_by: user
|
|
1792
|
+
confirmed_at: iso_8601_timestamp
|
|
1793
|
+
binding: >-
|
|
1794
|
+
proposal_digest must equal the digest recomputed from proposal and
|
|
1795
|
+
therefore binds the exact finding, every cited source record, and
|
|
1796
|
+
the user's timestamped confirmation.
|
|
1797
|
+
persisted_document:
|
|
1798
|
+
schema_version: agentera.projectGlossary.v1
|
|
1799
|
+
required_fields: [schema_version, approvals, entries]
|
|
1800
|
+
additional_fields: forbidden
|
|
1801
|
+
approvals:
|
|
1802
|
+
type: list
|
|
1803
|
+
immutable_record_fields: [proposal_digest, proposal, confirmation]
|
|
1804
|
+
additional_record_fields: forbidden
|
|
1805
|
+
entries:
|
|
1806
|
+
type: list
|
|
1807
|
+
item: shared_primitive
|
|
1808
|
+
approval_fields: forbidden
|
|
1809
|
+
terminology_set_identity:
|
|
1810
|
+
normalization: unicode_caseless_exact_no_normalization
|
|
1811
|
+
members: [paired_entry.term, paired_approval.proposal.variants.term]
|
|
1812
|
+
uniqueness: global_across_complete_document
|
|
1813
|
+
rule: >-
|
|
1814
|
+
Every Unicode caseless-exact canonical or variant term belongs to
|
|
1815
|
+
exactly one approval-entry pair. Identity performs no Unicode
|
|
1816
|
+
normalization, accent folding, or compatibility folding. Reject
|
|
1817
|
+
duplicate variants and every cross-set canonical/variant collision
|
|
1818
|
+
before effects. An exact replay compares against its existing pair
|
|
1819
|
+
and remains a no-op.
|
|
1820
|
+
transaction: >-
|
|
1821
|
+
Under the established project writer lock, resolve the registered
|
|
1822
|
+
project path, safely re-read every cited project-relative source line,
|
|
1823
|
+
recompute its SHA-256 and the proposal digest, validate the complete
|
|
1824
|
+
candidate bytes, then atomically replace the single glossary document.
|
|
1825
|
+
Creation follows the same path. Dry-run performs all validation without
|
|
1826
|
+
publication.
|
|
1827
|
+
merge_and_replay: >-
|
|
1828
|
+
Preserve unrelated valid approvals and entries semantically unchanged.
|
|
1829
|
+
Canonical and variant identity is case-insensitive and globally unique
|
|
1830
|
+
across confirmed canonical sets. An exact approval and derived-entry
|
|
1831
|
+
replay is a no-op. An approval without its matching entry, a matching
|
|
1832
|
+
term with changed entry or proposal, reuse of an old confirmation for
|
|
1833
|
+
changed proposal content, duplicate identity, cross-set terminology
|
|
1834
|
+
collision, or malformed existing state is a conflict and must never be
|
|
1835
|
+
repaired or overwritten implicitly.
|
|
1836
|
+
confirmed_variant_guard:
|
|
1837
|
+
owner: packages/cli/src/validate/v1LegacyCruft.ts#scanPost30CruftViolations
|
|
1838
|
+
validation_surface: packages/cli/test/cli/v1LegacyCruft.test.ts
|
|
1839
|
+
loader: packages/cli/src/state/write/glossaryPublication.ts#loadProjectGlossaryDocument
|
|
1840
|
+
source_rule: >-
|
|
1841
|
+
Resolve the glossary through the canonical artifact registry and consume
|
|
1842
|
+
only complete validated approval-entry pairs. Derive each forbidden
|
|
1843
|
+
variant from approval.proposal.variants and its canonical replacement
|
|
1844
|
+
from the paired entry.term; never infer equivalence or consume personal
|
|
1845
|
+
glossary state.
|
|
1846
|
+
matching: exact_case_sensitive_boundary_aware_literal
|
|
1847
|
+
approved_evidence_rule: >-
|
|
1848
|
+
The exact source_path, line, and source_record_sha256 retained by the
|
|
1849
|
+
immutable proposal is historical evidence and does not self-trigger.
|
|
1850
|
+
Changed bytes at that location or a matching variant elsewhere fail.
|
|
1851
|
+
exclusions:
|
|
1852
|
+
- generated_output
|
|
1853
|
+
- vendor_and_dependency_state
|
|
1854
|
+
- cache_state
|
|
1855
|
+
- repository_metadata
|
|
1856
|
+
- historical_agentera_state
|
|
1857
|
+
- project_glossary_document
|
|
1858
|
+
- unrelated_agentera_state
|
|
1859
|
+
excluded_directory_names:
|
|
1860
|
+
- .agentera
|
|
1861
|
+
- .agentera-generated
|
|
1862
|
+
- .cache
|
|
1863
|
+
- .git
|
|
1864
|
+
- .next
|
|
1865
|
+
- .pnpm
|
|
1866
|
+
- .turbo
|
|
1867
|
+
- .venv
|
|
1868
|
+
- .vite
|
|
1869
|
+
- build
|
|
1870
|
+
- bundle
|
|
1871
|
+
- coverage
|
|
1872
|
+
- dist
|
|
1873
|
+
- node_modules
|
|
1874
|
+
- target
|
|
1875
|
+
- vendor
|
|
1876
|
+
exclusion_rule: >-
|
|
1877
|
+
Skip a directory only when its basename exactly equals one declared
|
|
1878
|
+
name. The validator and fixtures consume this list directly; prefixes,
|
|
1879
|
+
suffixes, substrings, and nearby ordinary source names remain scanned.
|
|
1880
|
+
failure_rule: >-
|
|
1881
|
+
Emit one deterministic violation per variant location with the canonical
|
|
1882
|
+
term, confirmed proposal evidence, offending source location, and the
|
|
1883
|
+
runnable validation command. A malformed present glossary fails closed;
|
|
1884
|
+
an absent glossary leaves the pre-existing legacy checks unchanged.
|
|
1885
|
+
|
|
1886
|
+
consumer_boundary:
|
|
1887
|
+
contract_status: active
|
|
1888
|
+
implementation:
|
|
1889
|
+
acquisition: active
|
|
1890
|
+
advice_resolution: active
|
|
1891
|
+
capability_integrations:
|
|
1892
|
+
build: active
|
|
1893
|
+
discuss: active
|
|
1894
|
+
plan: active
|
|
1895
|
+
prime: active
|
|
1896
|
+
forbidden_persisted_entry_fields: [precedence, collision, review]
|
|
1897
|
+
deterministic_judgments:
|
|
1898
|
+
term_identity: unicode_caseless_exact_no_normalization
|
|
1899
|
+
term_identity_runtime: packages/cli/src/registries/glossaryTermIdentity.ts#unicodeCaselessExact
|
|
1900
|
+
meaning_identity: exact_string
|
|
1901
|
+
project_state_validity: schema_and_bound_validation
|
|
1902
|
+
project_gap: valid_project_state_without_exact_term_identity
|
|
1903
|
+
forbidden_semantic_heuristics: [scores, thresholds, embeddings, automatic_merge]
|
|
1904
|
+
host_reviewed_judgments:
|
|
1905
|
+
inferred_semantic_equivalence: >-
|
|
1906
|
+
The host may identify a possible equivalence only from the current
|
|
1907
|
+
meaning-sensitive input and bounded candidate meanings. It never selects
|
|
1908
|
+
authority, merges entries, or resolves the review itself.
|
|
1909
|
+
project_state:
|
|
1910
|
+
gap_proving_states: [canonically_absent, valid_empty, valid_nonmatching]
|
|
1911
|
+
invalid_states: [malformed, unreadable, ambiguous_path, over_bound]
|
|
1912
|
+
invalid_rule: >-
|
|
1913
|
+
An invalid project state cannot prove a project gap. Abstain rather than
|
|
1914
|
+
falling back to a personal meaning, repairing state, or guessing authority.
|
|
1915
|
+
acquisition:
|
|
1916
|
+
implementation: active
|
|
1917
|
+
runtime: packages/cli/src/analytics/glossaryInputAcquisition.ts#acquireGlossaryInputs
|
|
1918
|
+
mutation: forbidden
|
|
1919
|
+
bounds:
|
|
1920
|
+
authority: consumer_boundary.profile_grounding.max_profile_utf8_bytes
|
|
1921
|
+
max_source_utf8_bytes: 65536
|
|
1922
|
+
max_entries: 100
|
|
1923
|
+
rule: >-
|
|
1924
|
+
Apply the existing bounded profile-read byte ceiling to each source and
|
|
1925
|
+
admit at most 100 entries from either owned glossary. The entry ceiling
|
|
1926
|
+
is declared only here and consumed by the runtime and schema validator.
|
|
1927
|
+
Reject raw bytes above the source ceiling before decoding, decode UTF-8
|
|
1928
|
+
fatally, and reject a parsed document above the entry ceiling; never
|
|
1929
|
+
replacement-decode, truncate, or partially admit input. Exactly 65,536
|
|
1930
|
+
raw bytes and 100 entries are permitted.
|
|
1931
|
+
availability:
|
|
1932
|
+
states:
|
|
1933
|
+
- absent
|
|
1934
|
+
- valid_empty
|
|
1935
|
+
- valid_present
|
|
1936
|
+
- malformed
|
|
1937
|
+
- unreadable
|
|
1938
|
+
- ambiguous
|
|
1939
|
+
- over_bound
|
|
1940
|
+
valid: [absent, valid_empty, valid_present]
|
|
1941
|
+
invalid: [malformed, unreadable, ambiguous, over_bound]
|
|
1942
|
+
project_gap_proving: [absent, valid_empty]
|
|
1943
|
+
rule: >-
|
|
1944
|
+
Classify the two sources independently. Project absence means the
|
|
1945
|
+
canonical artifact does not exist; personal absence means PROFILE.md or
|
|
1946
|
+
its owned Glossary section does not exist. A present empty owned document
|
|
1947
|
+
is valid_empty. Invalid states expose no entries and cannot prove a
|
|
1948
|
+
project gap. Dual invalid or absent input exposes no glossary entries;
|
|
1949
|
+
valid project entries remain available when personal input is invalid.
|
|
1950
|
+
project:
|
|
1951
|
+
identity: glossary
|
|
1952
|
+
discovery: packages/cli/src/registries/artifactRegistry.ts#loadArtifactRecord
|
|
1953
|
+
path_resolution: packages/cli/src/registries/artifactRegistry.ts#resolveArtifactPath
|
|
1954
|
+
docs_override: canonical_GLOSSARY.md_mapping_only
|
|
1955
|
+
docs_override_read: bounded_no_follow_regular_file
|
|
1956
|
+
project_root: packages/cli/src/state/projectRoot.ts#validateRealProjectRoot
|
|
1957
|
+
boundary_rule: >-
|
|
1958
|
+
Resolve only the registered glossary identity and its canonical docs
|
|
1959
|
+
override under one validated real project root. Missing canonical
|
|
1960
|
+
artifacts are absent. Unsafe overrides, path escapes, symlink ambiguity,
|
|
1961
|
+
or unavailable registry identity classify ambiguous; malformed present
|
|
1962
|
+
docs mappings or glossary documents fail closed and never fall back to a
|
|
1963
|
+
default path.
|
|
1964
|
+
filesystem_guarantee: >-
|
|
1965
|
+
Open the canonical .agentera/docs.yaml and resolved glossary target with
|
|
1966
|
+
O_NOFOLLOW after lstat snapshots of every existing project-relative path
|
|
1967
|
+
component. Match the opened regular-file descriptor to the snapshotted
|
|
1968
|
+
device and inode, read raw bytes from that descriptor, and require its
|
|
1969
|
+
size, mtime, ctime, device, and inode plus every snapshotted parent path
|
|
1970
|
+
identity to remain unchanged through the read. For an absent target,
|
|
1971
|
+
require the first missing component to remain missing while all existing
|
|
1972
|
+
parent identities remain unchanged. The descriptor pins accepted bytes;
|
|
1973
|
+
a symlink, parent swap, changed identity, unsupported no-follow boundary,
|
|
1974
|
+
or failed stability check is ambiguous. This does not claim detection of
|
|
1975
|
+
an identity swapped away and restored between observations, because such
|
|
1976
|
+
a swap cannot change bytes already pinned to the verified descriptor.
|
|
1977
|
+
external_docs_rule: >-
|
|
1978
|
+
A symlinked, escaped, changed, unreadable, malformed, over-bound, or
|
|
1979
|
+
non-UTF-8 docs mapping is ambiguous and never selects a glossary target.
|
|
1980
|
+
document_validation: ownership_contracts.project.publication
|
|
1981
|
+
approval_output: forbidden
|
|
1982
|
+
raw_source_provenance_output: forbidden
|
|
1983
|
+
personal:
|
|
1984
|
+
owner: ownership_contracts.personal.profile_output.owner
|
|
1985
|
+
profile_path_input: >-
|
|
1986
|
+
The caller passes exactly the profile path already returned by canonical
|
|
1987
|
+
profile context. Acquisition does not discover or return that path and
|
|
1988
|
+
accepts no project identity, root, glossary path, or project record.
|
|
1989
|
+
section: ownership_contracts.personal.profile_output.section
|
|
1990
|
+
parser: packages/cli/src/analytics/personalGlossaryProfile.ts#personalGlossaryConsumerEntries
|
|
1991
|
+
grounding_parser_isolation: >-
|
|
1992
|
+
profile-grounding continues to remove the owned section and never
|
|
1993
|
+
exposes it. Consumer acquisition separately parses exactly the existing
|
|
1994
|
+
single owned marker range and returns no bytes outside that range.
|
|
1995
|
+
provenance_output: forbidden
|
|
1996
|
+
producer_invariance: >-
|
|
1997
|
+
Personal parsing accepts only profile bytes and therefore returns the
|
|
1998
|
+
same result regardless of project glossary presence.
|
|
1999
|
+
output:
|
|
2000
|
+
entry_fields: [term, meaning, owner]
|
|
2001
|
+
owners: [personal, project]
|
|
2002
|
+
source_fields: [owner, availability, entries, gap_proving, diagnostic]
|
|
2003
|
+
diagnostic_fields: [class, recovery]
|
|
2004
|
+
diagnostic_rule: >-
|
|
2005
|
+
Diagnostics name only the availability class and a public recovery.
|
|
2006
|
+
They never contain profile paths, artifact paths, raw bytes, sections,
|
|
2007
|
+
definitions, entries, anchors, approval records, or provenance.
|
|
2008
|
+
entry_rule: >-
|
|
2009
|
+
Return only validated term and meaning plus source ownership. Do not
|
|
2010
|
+
return confidence, permanence, temporal metadata, personal anchors,
|
|
2011
|
+
profile paths, unrelated profile sections, project approval records, or
|
|
2012
|
+
project source provenance. Acquisition does not select precedence,
|
|
2013
|
+
fallback, tension, review, or a primary outcome.
|
|
2014
|
+
advice_resolution:
|
|
2015
|
+
implementation: active
|
|
2016
|
+
runtime: packages/cli/src/analytics/glossaryAdviceResolution.ts#resolveGlossaryAdvice
|
|
2017
|
+
mutation: forbidden
|
|
2018
|
+
invocation:
|
|
2019
|
+
command: npx -y agentera@next report glossary-advice --input REQUEST --format json
|
|
2020
|
+
request_schema_version: agentera.glossaryAdviceRequest.v1
|
|
2021
|
+
request_fields: [schema_version, requested_term, host_review]
|
|
2022
|
+
max_request_utf8_bytes: 131072
|
|
2023
|
+
acquisition: internal_bounded_owned_sources
|
|
2024
|
+
project_root: current_working_directory
|
|
2025
|
+
profile_path: canonical_registry_resolution
|
|
2026
|
+
output_envelope_fields: [schemaVersion, command, status, advice]
|
|
2027
|
+
rule: >-
|
|
2028
|
+
Consumers send the requested term and optional host review through one
|
|
2029
|
+
structured stdin or file request. The CLI acquires both owned sources;
|
|
2030
|
+
callers never read raw project glossary or profile files. The command is
|
|
2031
|
+
read-only, headless, JSON-only, and never refreshes either source.
|
|
2032
|
+
input:
|
|
2033
|
+
fields: [requested_term, acquired, host_review]
|
|
2034
|
+
requested_term_utf8_bound: consumer_boundary.acquisition.bounds.max_source_utf8_bytes
|
|
2035
|
+
acquired_contract: consumer_boundary.acquisition.output
|
|
2036
|
+
host_review:
|
|
2037
|
+
optional: true
|
|
2038
|
+
fields: [relation, candidate_owner, candidate_term]
|
|
2039
|
+
relations: [inferred_equivalence]
|
|
2040
|
+
candidate_owners: [personal]
|
|
2041
|
+
rule: >-
|
|
2042
|
+
A host may report only one explicit inferred-equivalence relation to
|
|
2043
|
+
one differently named, valid acquired personal candidate. Omission
|
|
2044
|
+
means no inferred candidate. Unknown relations, owners, fields, or
|
|
2045
|
+
candidates fail before selection and never echo input content.
|
|
2046
|
+
additional_fields: forbidden
|
|
2047
|
+
output:
|
|
2048
|
+
schema_version: agentera.glossaryAdvice.v1
|
|
2049
|
+
fields: [outcome, applicable_meaning, applicable_owner, review, tension, advisory]
|
|
2050
|
+
owners: [personal, project]
|
|
2051
|
+
advisory_fields: [reason, ownership_state]
|
|
2052
|
+
advisory_reasons: [personal_input_unavailable, inferred_equivalence]
|
|
2053
|
+
advisory_ownership_states: [project_governs_exact]
|
|
2054
|
+
rule: >-
|
|
2055
|
+
Return exactly one matrix outcome and its authority-declared semantics.
|
|
2056
|
+
Include only the selected meaning and owner. An orthogonal advisory may
|
|
2057
|
+
expose only its bounded reason and ownership state. Never return the
|
|
2058
|
+
requested or candidate term, acquisition diagnostics, source content,
|
|
2059
|
+
paths, anchors, approvals, provenance, unrelated entries, or conflict
|
|
2060
|
+
state.
|
|
2061
|
+
failure:
|
|
2062
|
+
classes: [invalid_request, invalid_acquisition, invalid_host_review]
|
|
2063
|
+
rule: >-
|
|
2064
|
+
Fail once before selection with only a bounded class and public recovery;
|
|
2065
|
+
never quote or serialize an input term, meaning, diagnostic, path, raw
|
|
2066
|
+
entry, profile or project content, approval, anchor, or provenance.
|
|
2067
|
+
primary_selection:
|
|
2068
|
+
dimensions:
|
|
2069
|
+
project_input: [invalid, valid_gap, valid_exact]
|
|
2070
|
+
personal_input: [invalid, valid_without_exact, valid_exact]
|
|
2071
|
+
exact_meaning: [not_applicable, equivalent, divergent]
|
|
2072
|
+
inferred_candidate: [absent, present]
|
|
2073
|
+
valid_state_rule: >-
|
|
2074
|
+
exact_meaning is equivalent or divergent exactly when both inputs have an
|
|
2075
|
+
exact term; otherwise it is not_applicable. inferred_candidate is
|
|
2076
|
+
considered only when no personal exact term exists.
|
|
2077
|
+
order:
|
|
2078
|
+
- invalid_or_unavailable_project
|
|
2079
|
+
- equivalent_exact_collision
|
|
2080
|
+
- divergent_exact_collision
|
|
2081
|
+
- project_only
|
|
2082
|
+
- proven_project_gap
|
|
2083
|
+
- inferred_equivalence
|
|
2084
|
+
- invalid_or_unavailable_personal
|
|
2085
|
+
- no_applicable_entry
|
|
2086
|
+
rule: >-
|
|
2087
|
+
Evaluate rows in this order and select exactly the first matching primary
|
|
2088
|
+
outcome. The declared valid input state space must match exactly one row;
|
|
2089
|
+
availability and inferred-equivalence advisories never compete with a
|
|
2090
|
+
usable exact project meaning.
|
|
2091
|
+
outcome_matrix:
|
|
2092
|
+
invalid_or_unavailable_project:
|
|
2093
|
+
when: project input is malformed, unreadable, ambiguous, or over bound
|
|
2094
|
+
match:
|
|
2095
|
+
project_input: [invalid]
|
|
2096
|
+
personal_input: [invalid, valid_without_exact, valid_exact]
|
|
2097
|
+
exact_meaning: [not_applicable]
|
|
2098
|
+
inferred_candidate: [absent, present]
|
|
2099
|
+
judgment: deterministic
|
|
2100
|
+
selected_owner: none
|
|
2101
|
+
selected_meaning: none
|
|
2102
|
+
review: unavailable
|
|
2103
|
+
tension: authority_unavailable
|
|
2104
|
+
equivalent_exact_collision:
|
|
2105
|
+
when: valid personal and project entries have exact term identity and exact meaning identity
|
|
2106
|
+
match:
|
|
2107
|
+
project_input: [valid_exact]
|
|
2108
|
+
personal_input: [valid_exact]
|
|
2109
|
+
exact_meaning: [equivalent]
|
|
2110
|
+
inferred_candidate: [absent, present]
|
|
2111
|
+
judgment: deterministic
|
|
2112
|
+
selected_owner: project
|
|
2113
|
+
selected_meaning: project
|
|
2114
|
+
review: none
|
|
2115
|
+
tension: none
|
|
2116
|
+
divergent_exact_collision:
|
|
2117
|
+
when: valid personal and project entries have exact term identity but not exact meaning identity
|
|
2118
|
+
match:
|
|
2119
|
+
project_input: [valid_exact]
|
|
2120
|
+
personal_input: [valid_exact]
|
|
2121
|
+
exact_meaning: [divergent]
|
|
2122
|
+
inferred_candidate: [absent, present]
|
|
2123
|
+
judgment: deterministic
|
|
2124
|
+
selected_owner: project
|
|
2125
|
+
selected_meaning: project
|
|
2126
|
+
review: none
|
|
2127
|
+
tension: divergent_exact_collision
|
|
2128
|
+
project_only:
|
|
2129
|
+
when: >-
|
|
2130
|
+
valid project input has an exact term and personal input is invalid,
|
|
2131
|
+
unavailable, valid without an exact term, or only a differently named
|
|
2132
|
+
inferred-equivalence candidate
|
|
2133
|
+
match:
|
|
2134
|
+
project_input: [valid_exact]
|
|
2135
|
+
personal_input: [invalid, valid_without_exact]
|
|
2136
|
+
exact_meaning: [not_applicable]
|
|
2137
|
+
inferred_candidate: [absent, present]
|
|
2138
|
+
judgment: deterministic
|
|
2139
|
+
selected_owner: project
|
|
2140
|
+
selected_meaning: project
|
|
2141
|
+
review: none_for_primary
|
|
2142
|
+
tension: none
|
|
2143
|
+
proven_project_gap:
|
|
2144
|
+
when: project state is gap-proving and one valid personal exact term exists
|
|
2145
|
+
match:
|
|
2146
|
+
project_input: [valid_gap]
|
|
2147
|
+
personal_input: [valid_exact]
|
|
2148
|
+
exact_meaning: [not_applicable]
|
|
2149
|
+
inferred_candidate: [absent, present]
|
|
2150
|
+
judgment: deterministic
|
|
2151
|
+
selected_owner: personal
|
|
2152
|
+
selected_meaning: personal
|
|
2153
|
+
review: none
|
|
2154
|
+
tension: none
|
|
2155
|
+
inferred_equivalence:
|
|
2156
|
+
when: >-
|
|
2157
|
+
project state is gap-proving, personal input is valid without an exact
|
|
2158
|
+
term, and the host identifies a possible semantic-equivalence candidate
|
|
2159
|
+
match:
|
|
2160
|
+
project_input: [valid_gap]
|
|
2161
|
+
personal_input: [valid_without_exact]
|
|
2162
|
+
exact_meaning: [not_applicable]
|
|
2163
|
+
inferred_candidate: [present]
|
|
2164
|
+
judgment: host_reviewed
|
|
2165
|
+
selected_owner: none_until_review
|
|
2166
|
+
selected_meaning: none_until_review
|
|
2167
|
+
review: required_when_meaning_sensitive
|
|
2168
|
+
tension: inferred_equivalence
|
|
2169
|
+
invalid_or_unavailable_personal:
|
|
2170
|
+
when: >-
|
|
2171
|
+
project state is gap-proving and personal input is malformed,
|
|
2172
|
+
unavailable, or over bound, so no fallback can be proven
|
|
2173
|
+
match:
|
|
2174
|
+
project_input: [valid_gap]
|
|
2175
|
+
personal_input: [invalid]
|
|
2176
|
+
exact_meaning: [not_applicable]
|
|
2177
|
+
inferred_candidate: [absent, present]
|
|
2178
|
+
judgment: deterministic
|
|
2179
|
+
selected_owner: none
|
|
2180
|
+
selected_meaning: none
|
|
2181
|
+
review: unavailable
|
|
2182
|
+
tension: input_unavailable
|
|
2183
|
+
no_applicable_entry:
|
|
2184
|
+
when: >-
|
|
2185
|
+
project state is gap-proving, personal input is valid without an exact
|
|
2186
|
+
term, and no inferred-equivalence candidate is present
|
|
2187
|
+
match:
|
|
2188
|
+
project_input: [valid_gap]
|
|
2189
|
+
personal_input: [valid_without_exact]
|
|
2190
|
+
exact_meaning: [not_applicable]
|
|
2191
|
+
inferred_candidate: [absent]
|
|
2192
|
+
judgment: deterministic
|
|
2193
|
+
selected_owner: none
|
|
2194
|
+
selected_meaning: none
|
|
2195
|
+
review: none
|
|
2196
|
+
tension: none
|
|
2197
|
+
orthogonal_advisories:
|
|
2198
|
+
personal_input_unavailable_with_project_exact:
|
|
2199
|
+
primary_outcome: project_only
|
|
2200
|
+
when: personal_input is invalid and project_input is valid_exact
|
|
2201
|
+
match:
|
|
2202
|
+
project_input: [valid_exact]
|
|
2203
|
+
personal_input: [invalid]
|
|
2204
|
+
exact_meaning: [not_applicable]
|
|
2205
|
+
inferred_candidate: [absent, present]
|
|
2206
|
+
caveat_reason: personal_input_unavailable
|
|
2207
|
+
ownership_state: project_governs_exact
|
|
2208
|
+
rule: >-
|
|
2209
|
+
Preserve the exact project meaning. The bounded availability caveat may
|
|
2210
|
+
report only reason and ownership state; it never becomes another primary
|
|
2211
|
+
outcome or exposes personal content.
|
|
2212
|
+
inferred_equivalence_with_project_exact:
|
|
2213
|
+
primary_outcome: project_only
|
|
2214
|
+
when: >-
|
|
2215
|
+
personal_input is valid_without_exact, project_input is valid_exact, and
|
|
2216
|
+
inferred_candidate is present
|
|
2217
|
+
match:
|
|
2218
|
+
project_input: [valid_exact]
|
|
2219
|
+
personal_input: [valid_without_exact]
|
|
2220
|
+
exact_meaning: [not_applicable]
|
|
2221
|
+
inferred_candidate: [present]
|
|
2222
|
+
review: required_when_the_inferred_relation_is_meaning_sensitive
|
|
2223
|
+
caveat_reason: inferred_equivalence
|
|
2224
|
+
ownership_state: project_governs_exact
|
|
2225
|
+
rule: >-
|
|
2226
|
+
Project authority remains the usable primary meaning. Host review governs
|
|
2227
|
+
only the possible differently named relation and cannot displace, merge,
|
|
2228
|
+
or suppress the exact project entry.
|
|
2229
|
+
refresh_events:
|
|
2230
|
+
required:
|
|
2231
|
+
- initial_meaning_sensitive_input
|
|
2232
|
+
- later_user_requirement_change_that_can_change_meaning
|
|
2233
|
+
- later_user_intent_change_that_can_change_meaning
|
|
2234
|
+
- later_acceptance_change_that_can_change_meaning
|
|
2235
|
+
- later_deliberation_premise_change_that_can_change_meaning
|
|
2236
|
+
- later_cycle_intent_change_that_can_change_meaning
|
|
2237
|
+
- clarification_answer_for_a_reviewed_term
|
|
2238
|
+
not_required:
|
|
2239
|
+
- unrelated_conversation_turn
|
|
2240
|
+
- unchanged_input_replay
|
|
2241
|
+
- background_state_reread
|
|
2242
|
+
- status_or_progress_render
|
|
2243
|
+
- tool_output_without_requirement_or_intent_change
|
|
2244
|
+
- artifact_rendering
|
|
2245
|
+
- evaluator_text_without_user_change
|
|
2246
|
+
- control_only_continuation
|
|
2247
|
+
rule: >-
|
|
2248
|
+
Refresh only at a governed event whose changed input can alter the meaning
|
|
2249
|
+
used by the capability. Rereads and incidental turns do not refresh advice.
|
|
2250
|
+
discuss_integration:
|
|
2251
|
+
implementation: active
|
|
2252
|
+
invocation: consumer_boundary.advice_resolution.invocation
|
|
2253
|
+
governed_events: consumer_boundary.refresh_events
|
|
2254
|
+
outcome_authority: consumer_boundary.outcome_matrix
|
|
2255
|
+
disclosure: consumer_boundary.disclosure.transient_advice
|
|
2256
|
+
interaction:
|
|
2257
|
+
scope: current_user_authored_meaning_sensitive_input
|
|
2258
|
+
transcript_scan: forbidden
|
|
2259
|
+
done_only_control: no_refresh
|
|
2260
|
+
review_rule: >-
|
|
2261
|
+
Before meaning-sensitive reasoning or decision framing relies on an
|
|
2262
|
+
inferred relation, ask one focused clarification question under the
|
|
2263
|
+
existing one-question-per-turn and Done contract. The clarification may
|
|
2264
|
+
identify a host-reviewed relation for a fresh advice request but is not
|
|
2265
|
+
decision confirmation, approval, or publication consent.
|
|
2266
|
+
exact_collision_rule: >-
|
|
2267
|
+
Use an applicable project meaning for a divergent exact collision and
|
|
2268
|
+
surface the bounded divergence as a concise scratchpad tension or Crux.
|
|
2269
|
+
Never ask the user to choose project versus personal authority.
|
|
2270
|
+
unavailable_rule: >-
|
|
2271
|
+
Continue without glossary grounding when advice is unavailable, invalid,
|
|
2272
|
+
or has no applicable entry. Ask ordinary clarification only when the term
|
|
2273
|
+
is necessary and ambiguous, without fabricating glossary facts.
|
|
2274
|
+
output_rule: >-
|
|
2275
|
+
Use only the transient applicable meaning and owner needed for the current
|
|
2276
|
+
deliberation, and never quote unrelated glossary content.
|
|
2277
|
+
mutation: forbidden
|
|
2278
|
+
forbidden_effects:
|
|
2279
|
+
- glossary_write
|
|
2280
|
+
- glossary_approval
|
|
2281
|
+
- publication_consent
|
|
2282
|
+
- progress_caveat
|
|
2283
|
+
- plan_conflict
|
|
2284
|
+
- decision_conflict
|
|
2285
|
+
plan_integration:
|
|
2286
|
+
implementation: active
|
|
2287
|
+
invocation: consumer_boundary.advice_resolution.invocation
|
|
2288
|
+
governed_events: consumer_boundary.refresh_events
|
|
2289
|
+
outcome_authority: consumer_boundary.outcome_matrix
|
|
2290
|
+
disclosure: consumer_boundary.disclosure.transient_advice
|
|
2291
|
+
mode:
|
|
2292
|
+
precedence:
|
|
2293
|
+
- explicit_delegated_or_orchestrated_no_pause
|
|
2294
|
+
- direct_user_invocation_with_available_clarification_turn
|
|
2295
|
+
- unknown_or_ambiguous
|
|
2296
|
+
signals:
|
|
2297
|
+
explicit_delegated_or_orchestrated_no_pause:
|
|
2298
|
+
result: autonomous
|
|
2299
|
+
direct_user_invocation_with_available_clarification_turn:
|
|
2300
|
+
result: interactive
|
|
2301
|
+
unknown_or_ambiguous:
|
|
2302
|
+
result: interactive_waiting
|
|
2303
|
+
silence_or_timeout: never_autonomous
|
|
2304
|
+
rule: >-
|
|
2305
|
+
Use the first matching signal. Unknown or conflicting mode evidence waits
|
|
2306
|
+
for interactive clarification; silence and elapsed time never imply
|
|
2307
|
+
autonomous execution.
|
|
2308
|
+
interaction:
|
|
2309
|
+
scope: current_user_authored_meaning_sensitive_input
|
|
2310
|
+
transcript_scan: forbidden
|
|
2311
|
+
control_only_continuation: no_refresh
|
|
2312
|
+
review:
|
|
2313
|
+
interactive_sequence:
|
|
2314
|
+
- emit_one_focused_clarification
|
|
2315
|
+
- wait_for_user_answer
|
|
2316
|
+
- refresh_advice_for_affected_term
|
|
2317
|
+
- finalize_affected_scope_requirements_tasks_acceptance
|
|
2318
|
+
autonomous_sequence:
|
|
2319
|
+
- abstain_from_disputed_meaning
|
|
2320
|
+
- defer_affected_scope_requirements_tasks_acceptance
|
|
2321
|
+
- emit_transient_handoff_intent
|
|
2322
|
+
clarification_effects:
|
|
2323
|
+
- not_plan_approval
|
|
2324
|
+
- not_decision_confirmation
|
|
2325
|
+
- not_glossary_approval
|
|
2326
|
+
- not_publication_consent
|
|
2327
|
+
exact_collision_rule: >-
|
|
2328
|
+
Use an applicable project meaning for a divergent exact collision. Where
|
|
2329
|
+
the divergence materially affects planning, represent only the bounded
|
|
2330
|
+
tension and never disclose the personal definition.
|
|
2331
|
+
unavailable_rule: >-
|
|
2332
|
+
Continue without glossary grounding when advice is unavailable, invalid,
|
|
2333
|
+
or has no applicable entry. In interactive Plan, ask ordinary focused
|
|
2334
|
+
clarification only when the term is necessary and meaning-critical.
|
|
2335
|
+
autonomous_handoff_intent:
|
|
2336
|
+
status: transient_emitted_not_delivered
|
|
2337
|
+
caller_fields: [event, reason, ownership_state]
|
|
2338
|
+
fixed_values:
|
|
2339
|
+
event: current
|
|
2340
|
+
accepted_writer_flags:
|
|
2341
|
+
[--input]
|
|
2342
|
+
input: one progress cycle YAML/JSON mapping whose glossary_caveat contains the three caller fields
|
|
2343
|
+
writer_owned_fields: [caveat_id, capability, transition_id]
|
|
2344
|
+
forbidden_fields: [caveat_id, capability, transition_id]
|
|
2345
|
+
forbidden_claims: [delivered, stored, persisted, published, durable_envelope]
|
|
2346
|
+
durable_writer: build
|
|
2347
|
+
writer_interface: npx -y agentera@next state progress explain --verb append --format json
|
|
2348
|
+
writer_result: authoritative_identity_and_six_field_envelope
|
|
2349
|
+
allowed_reason_state_pairs: consumer_boundary.autonomous_caveat.allowed_current_pairs
|
|
2350
|
+
rule: >-
|
|
2351
|
+
Emit one intent only when autonomous meaning-sensitive work has unresolved
|
|
2352
|
+
review or unavailable authority. The emitted-only intent contains exactly
|
|
2353
|
+
event=current, reason, and ownership_state, the three caller inputs accepted
|
|
2354
|
+
by the Build writer in one bounded structured record input. It is not delivered, stored, persisted, or published.
|
|
2355
|
+
The writer creates caveat_id, capability=build, and transition_id=null to
|
|
2356
|
+
complete the authoritative current envelope.
|
|
2357
|
+
exact_project_personal_unavailable:
|
|
2358
|
+
primary_outcome: project_only
|
|
2359
|
+
advisory_reason: personal_input_unavailable
|
|
2360
|
+
advisory_ownership_state: project_governs_exact
|
|
2361
|
+
plan_action: ground_exact_project_meaning
|
|
2362
|
+
autonomous_handoff_intent: none
|
|
2363
|
+
durable_unresolved_caveat: none
|
|
2364
|
+
rule: >-
|
|
2365
|
+
Unavailable personal input does not make exact project authority
|
|
2366
|
+
unresolved. Keep the advisory transient and never emit or publish it as
|
|
2367
|
+
an autonomous unresolved handoff.
|
|
2368
|
+
unavailable:
|
|
2369
|
+
invalid_project:
|
|
2370
|
+
interactive: clarify_or_wait_when_meaning_critical
|
|
2371
|
+
autonomous: abstain_defer_and_emit_authority_unavailable
|
|
2372
|
+
handoff_pair: [authority_unavailable, authority_unavailable]
|
|
2373
|
+
invalid_personal_after_project_gap:
|
|
2374
|
+
interactive: clarify_or_wait_when_meaning_critical
|
|
2375
|
+
autonomous: abstain_defer_and_emit_personal_input_unavailable
|
|
2376
|
+
handoff_pair: [personal_input_unavailable, authority_unavailable]
|
|
2377
|
+
behavior_matrix:
|
|
2378
|
+
interactive_review_required:
|
|
2379
|
+
mode: interactive
|
|
2380
|
+
plan_action: clarify_refresh_then_finalize
|
|
2381
|
+
handoff_intent: none
|
|
2382
|
+
autonomous_review_required:
|
|
2383
|
+
mode: autonomous
|
|
2384
|
+
plan_action: abstain_and_defer
|
|
2385
|
+
handoff_intent: emitted
|
|
2386
|
+
exact_project_personal_unavailable:
|
|
2387
|
+
mode: any
|
|
2388
|
+
plan_action: ground_exact_project_meaning
|
|
2389
|
+
handoff_intent: none
|
|
2390
|
+
unavailable_unresolved:
|
|
2391
|
+
mode: autonomous
|
|
2392
|
+
plan_action: abstain_and_defer
|
|
2393
|
+
handoff_intent: emitted
|
|
2394
|
+
divergent_exact_collision:
|
|
2395
|
+
mode: any
|
|
2396
|
+
plan_action: ground_project_and_bound_tension
|
|
2397
|
+
handoff_intent: none
|
|
2398
|
+
irrelevant_or_no_applicable_entry:
|
|
2399
|
+
mode: any
|
|
2400
|
+
plan_action: leave_unaffected_planning_unchanged
|
|
2401
|
+
handoff_intent: none
|
|
2402
|
+
output_rule: >-
|
|
2403
|
+
Use only the transient applicable meaning and owner needed for affected
|
|
2404
|
+
planning. An autonomous handoff intent is emitted, not delivered or stored,
|
|
2405
|
+
and contains exactly event=current, reason, and ownership_state for a later
|
|
2406
|
+
Build write.
|
|
2407
|
+
handoff: consumer_boundary.autonomous_caveat.handoff.plan
|
|
2408
|
+
mutation: forbidden
|
|
2409
|
+
forbidden_effects:
|
|
2410
|
+
- glossary_write
|
|
2411
|
+
- glossary_approval
|
|
2412
|
+
- publication_consent
|
|
2413
|
+
- progress_caveat
|
|
2414
|
+
- plan_conflict
|
|
2415
|
+
- decision_conflict
|
|
2416
|
+
disclosure:
|
|
2417
|
+
transient_advice:
|
|
2418
|
+
allowed: [outcome, applicable_meaning, applicable_owner, review, tension, advisory]
|
|
2419
|
+
minimum_rule: >-
|
|
2420
|
+
Include a meaning only when that meaning is selected by the matrix and
|
|
2421
|
+
needed for the current meaning-sensitive work. Never include unrelated entries.
|
|
2422
|
+
forbidden:
|
|
2423
|
+
- personal_evidence_anchor
|
|
2424
|
+
- personal_profile_path
|
|
2425
|
+
- raw_personal_glossary_section
|
|
2426
|
+
- unrelated_entry
|
|
2427
|
+
- provenance
|
|
2428
|
+
- project_source_path
|
|
2429
|
+
durable_surfaces:
|
|
2430
|
+
surfaces: [progress_evidence, prime_attention, diagnostics, errors]
|
|
2431
|
+
allowed: [caveat_id, event, capability, reason, ownership_state, transition_id]
|
|
2432
|
+
forbidden:
|
|
2433
|
+
- personal_definition
|
|
2434
|
+
- project_definition
|
|
2435
|
+
- personal_evidence_anchor
|
|
2436
|
+
- personal_profile_path
|
|
2437
|
+
- raw_personal_glossary_section
|
|
2438
|
+
- raw_project_glossary_section
|
|
2439
|
+
- unrelated_entry
|
|
2440
|
+
- provenance
|
|
2441
|
+
- project_source_path
|
|
2442
|
+
failure_rule: >-
|
|
2443
|
+
Errors identify only the invalid input class and a public recovery command;
|
|
2444
|
+
they never quote private bytes, definitions, paths, anchors, or provenance.
|
|
2445
|
+
plan_artifacts:
|
|
2446
|
+
surfaces:
|
|
2447
|
+
[
|
|
2448
|
+
scope,
|
|
2449
|
+
requirements,
|
|
2450
|
+
constraints,
|
|
2451
|
+
tasks,
|
|
2452
|
+
task_acceptance,
|
|
2453
|
+
overall_acceptance,
|
|
2454
|
+
diagnostics,
|
|
2455
|
+
handoff,
|
|
2456
|
+
]
|
|
2457
|
+
allowed_sources:
|
|
2458
|
+
[user_authored_term, user_authored_clarification, derived_behavioral_requirement]
|
|
2459
|
+
forbidden_content:
|
|
2460
|
+
- profile_derived_definition
|
|
2461
|
+
- personal_glossary_definition
|
|
2462
|
+
- personal_evidence_anchor
|
|
2463
|
+
- personal_profile_path
|
|
2464
|
+
- raw_personal_glossary_section
|
|
2465
|
+
- raw_project_glossary_section
|
|
2466
|
+
- unrelated_entry
|
|
2467
|
+
- provenance
|
|
2468
|
+
- project_source_path
|
|
2469
|
+
user_term_rule: >-
|
|
2470
|
+
A term already supplied by the user may remain in the plan. Never copy or
|
|
2471
|
+
quote a profile-derived or personal glossary definition; express only the
|
|
2472
|
+
derived behavioral requirement needed by the plan.
|
|
2473
|
+
autonomous_caveat:
|
|
2474
|
+
durable_owner: build
|
|
2475
|
+
durable_channel: progress
|
|
2476
|
+
authority: skills/agentera/schemas/artifacts/progress.yaml#ENTITY_AUTHORITY
|
|
2477
|
+
publication_command: npx -y agentera@next state progress append
|
|
2478
|
+
publication_boundary: progress_cycle.glossary_caveat
|
|
2479
|
+
publication_status: active_build
|
|
2480
|
+
writer_runtime: packages/cli/src/state/progressEntities.ts#appendProgressEntity
|
|
2481
|
+
writer_interface: npx -y agentera@next state progress explain --verb append --format json
|
|
2482
|
+
envelope_validator: packages/cli/src/state/progressGlossaryCaveat.ts#validateProgressGlossaryCaveat
|
|
2483
|
+
lifecycle_validator: packages/cli/src/state/progressGlossaryCaveat.ts#glossaryCaveatLifecycleInvalidEntities
|
|
2484
|
+
allowed_current_pairs:
|
|
2485
|
+
- reason: inferred_equivalence
|
|
2486
|
+
ownership_state: review_required
|
|
2487
|
+
- reason: inferred_equivalence
|
|
2488
|
+
ownership_state: project_governs_exact
|
|
2489
|
+
- reason: authority_unavailable
|
|
2490
|
+
ownership_state: authority_unavailable
|
|
2491
|
+
- reason: personal_input_unavailable
|
|
2492
|
+
ownership_state: authority_unavailable
|
|
2493
|
+
identity:
|
|
2494
|
+
field: caveat_id
|
|
2495
|
+
type: opaque_non_content_id
|
|
2496
|
+
alphabet: abcdefghijklmnopqrstuvwxyz
|
|
2497
|
+
length: 10
|
|
2498
|
+
pattern: "^[a-z]{10}$"
|
|
2499
|
+
rule: >-
|
|
2500
|
+
Assign a fresh opaque ID for a current caveat and carry it unchanged to
|
|
2501
|
+
its matching terminal event. The ID must not encode a term, meaning,
|
|
2502
|
+
anchor, path, provenance, or project identity.
|
|
2503
|
+
envelope:
|
|
2504
|
+
schema_version: agentera.glossaryConsumerCaveat.v1
|
|
2505
|
+
fields: [caveat_id, event, capability, reason, ownership_state, transition_id]
|
|
2506
|
+
additional_fields: forbidden
|
|
2507
|
+
max_string_utf8_bytes: 64
|
|
2508
|
+
events: [current, resolved, superseded]
|
|
2509
|
+
capabilities: [build]
|
|
2510
|
+
reasons: [inferred_equivalence, authority_unavailable, personal_input_unavailable]
|
|
2511
|
+
ownership_states: [project_governs_exact, review_required, authority_unavailable]
|
|
2512
|
+
transition_rule: >-
|
|
2513
|
+
current and resolved require null transition_id. Superseded requires one
|
|
2514
|
+
different opaque successor caveat_id. Every field is required; only
|
|
2515
|
+
transition_id may be null.
|
|
2516
|
+
current_append:
|
|
2517
|
+
caller_fields: [event, reason, ownership_state]
|
|
2518
|
+
caller_fixed_values:
|
|
2519
|
+
event: current
|
|
2520
|
+
writer_fields: [caveat_id, capability, transition_id]
|
|
2521
|
+
writer_fixed_values:
|
|
2522
|
+
capability: build
|
|
2523
|
+
transition_id: null
|
|
2524
|
+
rule: >-
|
|
2525
|
+
A current append requires the caller to submit event=current, reason,
|
|
2526
|
+
and ownership_state. The writer creates the opaque identity, Build
|
|
2527
|
+
capability, and null current-transition field; it never defaults event.
|
|
2528
|
+
lifecycle:
|
|
2529
|
+
current: >-
|
|
2530
|
+
Append current once when autonomous meaning-sensitive work cannot pause
|
|
2531
|
+
and review or authority remains unresolved.
|
|
2532
|
+
resolved: >-
|
|
2533
|
+
Append resolved with the same caveat_id after explicit clarification or
|
|
2534
|
+
a governed refresh proves the caveat no longer applies.
|
|
2535
|
+
superseded: >-
|
|
2536
|
+
Append superseded with the old caveat_id and the fresh successor ID as
|
|
2537
|
+
transition_id when a governed refresh replaces, rather than resolves,
|
|
2538
|
+
the caveat.
|
|
2539
|
+
matching_rule: >-
|
|
2540
|
+
The latest valid event for one caveat_id determines whether it is current.
|
|
2541
|
+
A terminal event affects only its matching identity. Supersession is valid
|
|
2542
|
+
only when a matching current successor event also exists.
|
|
2543
|
+
expiration: none
|
|
2544
|
+
expiration_rule: >-
|
|
2545
|
+
Time alone never resolves or hides a caveat. Only an explicit matching
|
|
2546
|
+
resolved or valid superseded transition makes it noncurrent.
|
|
2547
|
+
prime_projection:
|
|
2548
|
+
status: active
|
|
2549
|
+
runtime: packages/cli/src/state/progressGlossaryCaveat.ts#projectCurrentGlossaryCaveats
|
|
2550
|
+
retrieval: canonical_validated_progress_entities
|
|
2551
|
+
attention_text: "normal: glossary review required before meaning-sensitive work"
|
|
2552
|
+
max_attention_entries: 1
|
|
2553
|
+
source:
|
|
2554
|
+
artifact: progress
|
|
2555
|
+
boundary: progress_cycle
|
|
2556
|
+
capability: build
|
|
2557
|
+
capacity:
|
|
2558
|
+
public_attention_limit: 6
|
|
2559
|
+
reserved_glossary_slots: 1
|
|
2560
|
+
policy: reserve_final_slot_when_current
|
|
2561
|
+
unrelated_retention: first_five_in_existing_order
|
|
2562
|
+
insertion: reserved_final_slot_when_current
|
|
2563
|
+
rule: >-
|
|
2564
|
+
Reconstruct current caveats by opaque identity from validated canonical
|
|
2565
|
+
progress entities. A matching resolved event or valid superseded event
|
|
2566
|
+
removes only that identity. Invalid, orphan, mismatched, or duplicate
|
|
2567
|
+
terminal evidence is omitted and cannot suppress a valid current event.
|
|
2568
|
+
Emit at most the declared generic attention text when one or more current
|
|
2569
|
+
caveats remain; preserve the relative order of every unrelated attention
|
|
2570
|
+
entry and do not change next-action selection.
|
|
2571
|
+
expiration: none
|
|
2572
|
+
forbidden_sources:
|
|
2573
|
+
- timestamp
|
|
2574
|
+
- recency
|
|
2575
|
+
- plan_state
|
|
2576
|
+
- transient_plan_handoff
|
|
2577
|
+
- profile_presence
|
|
2578
|
+
- unrelated_progress
|
|
2579
|
+
forbidden_output:
|
|
2580
|
+
- caveat_id
|
|
2581
|
+
- transition_id
|
|
2582
|
+
- reason
|
|
2583
|
+
- ownership_state
|
|
2584
|
+
- definition
|
|
2585
|
+
- meaning
|
|
2586
|
+
- anchor
|
|
2587
|
+
- path
|
|
2588
|
+
- raw_section
|
|
2589
|
+
- provenance
|
|
2590
|
+
- source_bytes
|
|
2591
|
+
malformed_evidence:
|
|
2592
|
+
prime: omit
|
|
2593
|
+
direct_progress_retrieval: fail_closed_generic_corrupt_entity
|
|
2594
|
+
allowed_diagnostic: canonical progress evidence is corrupt; run state validation
|
|
2595
|
+
forbidden_diagnostic_content:
|
|
2596
|
+
[stored_filename, stored_path, parser_text, raw_value, raw_bytes, provenance]
|
|
2597
|
+
handoff:
|
|
2598
|
+
plan: >-
|
|
2599
|
+
Plan cannot write progress. In autonomous mode it emits at most one
|
|
2600
|
+
transient intent containing exactly event=current, reason, and
|
|
2601
|
+
ownership_state and stores no caveat or conflict in plan state. It never
|
|
2602
|
+
emits identity, capability, transition_id, or a purported complete or
|
|
2603
|
+
delivered durable envelope.
|
|
2604
|
+
discuss: >-
|
|
2605
|
+
Discuss pauses for clarification; it does not persist caveat evidence or
|
|
2606
|
+
turn review into decision approval.
|
|
2607
|
+
build: >-
|
|
2608
|
+
Build is the sole durable writer and may later pass all three emitted
|
|
2609
|
+
intent inputs to the typed progress writer. The writer preserves the
|
|
2610
|
+
caller-owned event, reason, and ownership_state and creates authoritative
|
|
2611
|
+
identity, capability, and transition_id fields. Advice never invokes
|
|
2612
|
+
glossary publication.
|
|
2613
|
+
publication_isolation:
|
|
2614
|
+
rule: >-
|
|
2615
|
+
Advice, tension, review, clarification, caveat publication, resolution, and
|
|
2616
|
+
supersession never invoke glossary publication, authorize a proposal, reuse
|
|
2617
|
+
confirmation, satisfy a decision, or approve plan state.
|
|
2618
|
+
project_publication_authority: ownership_contracts.project.publication
|
|
2619
|
+
downstream_gate:
|
|
2620
|
+
status: blocked_until_contract_valid
|
|
2621
|
+
validator: packages/cli/src/registries/glossaryEntryContract.ts#validateGlossaryEntryContract
|
|
2622
|
+
command: npx -y agentera@next check validate vocabularyAuthority --format json
|
|
2623
|
+
required_sections:
|
|
2624
|
+
- consumer_boundary.acquisition
|
|
2625
|
+
- consumer_boundary.advice_resolution
|
|
2626
|
+
- consumer_boundary.primary_selection
|
|
2627
|
+
- consumer_boundary.outcome_matrix
|
|
2628
|
+
- consumer_boundary.orthogonal_advisories
|
|
2629
|
+
- consumer_boundary.refresh_events
|
|
2630
|
+
- consumer_boundary.discuss_integration
|
|
2631
|
+
- consumer_boundary.plan_integration
|
|
2632
|
+
- consumer_boundary.disclosure
|
|
2633
|
+
- consumer_boundary.autonomous_caveat
|
|
2634
|
+
- consumer_boundary.publication_isolation
|
|
2635
|
+
failure_rule: >-
|
|
2636
|
+
Discuss, Plan, Build, advice, and prime integration remain blocked when
|
|
2637
|
+
validation reports a missing or contradictory section. Acquisition itself
|
|
2638
|
+
fails closed. Each issue names the invalid section and required correction.
|
|
2639
|
+
profile_grounding:
|
|
2640
|
+
implementation: active_exclusion_only
|
|
2641
|
+
capabilities: [discuss, plan, build]
|
|
2642
|
+
command: npx -y agentera@next report profile-grounding --format json
|
|
2643
|
+
schema_version: agentera.profileGrounding.v1
|
|
2644
|
+
parser: packages/cli/src/analytics/personalGlossaryProfile.ts#personalProfileGrounding
|
|
2645
|
+
max_profile_utf8_bytes: 65536
|
|
2646
|
+
validity:
|
|
2647
|
+
statuses: [absent, valid, repair_needed]
|
|
2648
|
+
classes: [absent, valid, malformed, ambiguous, unreadable, unsafe, oversized, invalid_utf8]
|
|
2649
|
+
freshness:
|
|
2650
|
+
states: [current, stale, unknown]
|
|
2651
|
+
rule: Freshness is computed only after one source passes validity and never changes validity.
|
|
2652
|
+
recovery:
|
|
2653
|
+
repair: >-
|
|
2654
|
+
Use the Profile capability to repair or regenerate PROFILE.md, then retry `npx -y agentera@next report profile-grounding --format json`; no profile bytes were changed.
|
|
2655
|
+
absent: >-
|
|
2656
|
+
Use the Profile capability to generate PROFILE.md, then retry npx -y agentera@next report profile-grounding --format json.
|
|
2657
|
+
raw_profile_read: forbidden
|
|
2658
|
+
content_rule: >-
|
|
2659
|
+
Return the complete profile with exactly the validated owned personal
|
|
2660
|
+
Glossary marker range removed. Preserve every byte outside that range.
|
|
2661
|
+
This is profile grounding only and performs no glossary lookup, project
|
|
2662
|
+
glossary read, precedence, matching, review, collision, or advisory work.
|
|
2663
|
+
Profile Full retains access to the complete stored profile for regeneration.
|
|
2664
|
+
failure_rule: >-
|
|
2665
|
+
Absent and repair-needed profiles return nonzero with the shared validity
|
|
2666
|
+
object, exact advancing recovery, unknown freshness, and no profile
|
|
2667
|
+
content. Oversized, unsafe, unreadable, invalid UTF-8, and malformed or
|
|
2668
|
+
ambiguous owned Glossary sources fail closed without path or byte leaks.
|
|
2669
|
+
exact_collision:
|
|
2670
|
+
behavior: project_precedence_at_consumption
|
|
2671
|
+
persistence: forbidden
|
|
2672
|
+
personal_entry_suppression: forbidden
|
|
2673
|
+
inferred_semantic_equivalence:
|
|
2674
|
+
behavior: user_review
|
|
2675
|
+
automatic_merge: forbidden
|
|
2676
|
+
suppression: forbidden
|
|
2677
|
+
precedence: forbidden
|
|
2678
|
+
rule: >-
|
|
2679
|
+
Audit remains mutation-free and Build project-glossary publication is active.
|
|
2680
|
+
Build, Discuss, Plan, and prime bounded glossary consumption are active, and
|
|
2681
|
+
Build progress caveat publication and explicit personal publication are active.
|
|
2682
|
+
Profile Full preserves an existing owned section, then uses only the current
|
|
2683
|
+
consent-bound personal generation and canonical authorized personal publication.
|
|
2684
|
+
Project-driven personal-profile mutation and docs-mapping mutation remain deferred.
|
|
2685
|
+
|
|
2686
|
+
deferred_capability_contracts:
|
|
2687
|
+
profile:
|
|
2688
|
+
capabilities: [profile]
|
|
2689
|
+
implementation: active_partial
|
|
2690
|
+
intended_behavior: personal_glossary_synthesis
|
|
2691
|
+
active_behavior:
|
|
2692
|
+
- ownership_contracts.personal.admission
|
|
2693
|
+
- personal_mining_authority.profile_full
|
|
2694
|
+
inactive_behavior: [lookup]
|
|
2695
|
+
contracts:
|
|
2696
|
+
admission: ownership_contracts.personal.input
|
|
2697
|
+
provenance: ownership_contracts.personal.allowed_provenance
|
|
2698
|
+
confidence: shared_primitive.fields.confidence
|
|
2699
|
+
retention_and_decay: ownership_contracts.personal.retention_and_decay
|
|
2700
|
+
profile_full: personal_mining_authority.profile_full
|
|
2701
|
+
forbidden_current_claims: [lookup, project_glossary_consumption]
|
|
2702
|
+
audit:
|
|
2703
|
+
capabilities: [audit]
|
|
2704
|
+
implementation: active_partial
|
|
2705
|
+
active_behavior: terminology_drift_finding_generation
|
|
2706
|
+
finding_family:
|
|
2707
|
+
status: implemented
|
|
2708
|
+
mutation: forbidden
|
|
2709
|
+
evidence: ownership_contracts.project.input
|
|
2710
|
+
confidence: skills/agentera/protocol.yaml#CONFIDENCE_SCALE
|
|
2711
|
+
filtering: skills/agentera/capabilities/audit/schemas/validation.yaml
|
|
2712
|
+
canonical_proposal_rule: >-
|
|
2713
|
+
Propose the term with the most distinct verified project-file anchors;
|
|
2714
|
+
break ties lexicographically. A proposal is an audit finding, never a
|
|
2715
|
+
decision or persisted glossary entry.
|
|
2716
|
+
personal_comparison_rule: >-
|
|
2717
|
+
A supplied personal-profile term may annotate divergence for the same
|
|
2718
|
+
assessed concept. Missing profile evidence adds no divergence and never
|
|
2719
|
+
invents a personal term.
|
|
2720
|
+
proposal_output:
|
|
2721
|
+
implementation: active
|
|
2722
|
+
intended_output: read_only_terminology_drift_finding
|
|
2723
|
+
digest: ownership_contracts.project.proposal_digest
|
|
2724
|
+
inputs:
|
|
2725
|
+
personal_history: ownership_contracts.personal.input
|
|
2726
|
+
project_file: ownership_contracts.project.input
|
|
2727
|
+
project_file_history_classification: forbidden
|
|
2728
|
+
forbidden_current_claims: [persistence, approval, docs_mapping_mutation, lookup]
|
|
2729
|
+
build_publication:
|
|
2730
|
+
capabilities: [build]
|
|
2731
|
+
implementation: active
|
|
2732
|
+
active_behavior: ownership_contracts.project.publication
|
|
2733
|
+
output: skills/agentera/schemas/artifacts/glossary.yaml
|
|
2734
|
+
inactive_behavior:
|
|
2735
|
+
[
|
|
2736
|
+
lookup,
|
|
2737
|
+
precedence,
|
|
2738
|
+
semantic_equivalence_review,
|
|
2739
|
+
personal_profile_mutation,
|
|
2740
|
+
docs_mapping_mutation,
|
|
2741
|
+
]
|
|
2742
|
+
forbidden_current_claims:
|
|
2743
|
+
[lookup, precedence, review, personal_profile_mutation, docs_mapping_mutation]
|
|
2744
|
+
consumers:
|
|
2745
|
+
capabilities: [discuss, plan, build, prime]
|
|
2746
|
+
implementation:
|
|
2747
|
+
build: active
|
|
2748
|
+
discuss: active
|
|
2749
|
+
plan: active
|
|
2750
|
+
prime: active
|
|
2751
|
+
behavior: consumer_boundary
|
|
2752
|
+
forbidden_current_claims: []
|