agentera 3.0.0-dev.39 → 3.0.0-dev.41
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/README.md +1 -1
- package/bundle/CHANGELOG.md +55 -8
- package/bundle/README.md +3 -3
- package/bundle/references/artifacts/glossary-entry-contract.yaml +18 -5
- package/bundle/references/artifacts/state-storage-authority.yaml +865 -171
- package/bundle/references/cli/agent-ready-state-contract.yaml +12 -12
- package/bundle/references/cli/audience-namespace-cli-migration.yaml +5 -5
- package/bundle/references/cli/prime-consumer-compatibility.yaml +58 -18
- package/bundle/references/cli/vocabulary-index.yaml +1 -1
- package/bundle/references/cli/vocabulary.md +4 -3
- package/bundle/skills/agentera/SKILL.md +23 -4
- package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +3 -3
- package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +3 -1
- package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +2 -1
- package/bundle/skills/agentera/capabilities/discuss/schemas/validation.yaml +3 -1
- package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +2 -2
- package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +3 -1
- package/bundle/skills/agentera/capabilities/profile/schemas/artifacts.yaml +3 -1
- package/bundle/skills/agentera/capabilities/status/schemas/artifacts.yaml +2 -1
- package/bundle/skills/agentera/capability_schema_contract.yaml +1 -1
- package/bundle/skills/agentera/schemas/artifacts/plan.yaml +89 -30
- package/bundle/skills/agentera/schemas/artifacts/todo.yaml +103 -20
- package/dist/analytics/extractCorpus/cli.js.map +1 -1
- package/dist/analytics/extractCorpus/copilotSessions.js.map +1 -1
- package/dist/analytics/extractCorpus/core.js.map +1 -1
- package/dist/analytics/extractCorpus/corpus.js.map +1 -1
- package/dist/analytics/extractCorpus/coverageAudit.js.map +1 -1
- package/dist/analytics/extractCorpus/cursorSessions.js.map +1 -1
- package/dist/analytics/extractCorpus/evidenceTiers.js.map +1 -1
- package/dist/analytics/extractCorpus/extractCorpusParity.js.map +1 -1
- package/dist/analytics/extractCorpus/filesystemSources.js.map +1 -1
- package/dist/analytics/extractCorpus/index.js.map +1 -1
- package/dist/analytics/extractCorpus/jsonlSessions.js.map +1 -1
- package/dist/analytics/extractCorpus/sqliteCaps.js.map +1 -1
- package/dist/analytics/extractCorpus/sqliteSessions.js.map +1 -1
- package/dist/analytics/extractCorpus/tierReader.js.map +1 -1
- package/dist/analytics/extractCorpus.js.map +1 -1
- package/dist/analytics/glossaryAdviceResolution.js.map +1 -1
- package/dist/analytics/glossaryInputAcquisition.js.map +1 -1
- package/dist/analytics/personalGlossaryAdmission.js.map +1 -1
- package/dist/analytics/personalGlossaryProfile.js +2 -1
- package/dist/analytics/personalGlossaryProfile.js.map +1 -1
- package/dist/analytics/profileSignals.js.map +1 -1
- package/dist/analytics/usageStats.js.map +1 -1
- package/dist/audit/terminologyDrift.js.map +1 -1
- package/dist/bin/agentera.js.map +1 -1
- package/dist/capabilities/audit/instructions.js.map +1 -1
- package/dist/capabilities/build/instructions.js +2 -2
- package/dist/capabilities/build/instructions.js.map +1 -1
- package/dist/capabilities/design/instructions.js.map +1 -1
- package/dist/capabilities/discuss/instructions.js +2 -1
- package/dist/capabilities/discuss/instructions.js.map +1 -1
- package/dist/capabilities/document/instructions.js.map +1 -1
- package/dist/capabilities/index.js +1 -1
- package/dist/capabilities/index.js.map +1 -1
- package/dist/capabilities/optimize/instructions.js +1 -0
- package/dist/capabilities/optimize/instructions.js.map +1 -1
- package/dist/capabilities/orchestrate/instructions.js.map +1 -1
- package/dist/capabilities/plan/instructions.js +3 -2
- package/dist/capabilities/plan/instructions.js.map +1 -1
- package/dist/capabilities/profile/instructions.js.map +1 -1
- package/dist/capabilities/research/instructions.js.map +1 -1
- package/dist/capabilities/status/instructions.js +8 -1
- package/dist/capabilities/status/instructions.js.map +1 -1
- package/dist/capabilities/status/startupInstructions.js.map +1 -1
- package/dist/capabilities/vision/instructions.js.map +1 -1
- package/dist/cli/appContext.js.map +1 -1
- package/dist/cli/argvalidate.js.map +1 -1
- package/dist/cli/capabilityContext/benchmark.js +2 -1
- package/dist/cli/capabilityContext/benchmark.js.map +1 -1
- package/dist/cli/capabilityContext/bespoke.js.map +1 -1
- package/dist/cli/capabilityContext/build.js +6 -6
- package/dist/cli/capabilityContext/build.js.map +1 -1
- package/dist/cli/capabilityContext/closeout.js +11 -7
- package/dist/cli/capabilityContext/closeout.js.map +1 -1
- package/dist/cli/capabilityContext/contract.js +4 -4
- package/dist/cli/capabilityContext/contract.js.map +1 -1
- package/dist/cli/capabilityContext/evidence.js +4 -4
- package/dist/cli/capabilityContext/evidence.js.map +1 -1
- package/dist/cli/capabilityContext/index.js.map +1 -1
- package/dist/cli/capabilityContext/orchestration.js +12 -7
- package/dist/cli/capabilityContext/orchestration.js.map +1 -1
- package/dist/cli/capabilityContext/planState.js.map +1 -1
- package/dist/cli/capabilityContext/progress.js.map +1 -1
- package/dist/cli/capabilityContext/projectVerification.js.map +1 -1
- package/dist/cli/capabilityContext/shared.js +2 -2
- package/dist/cli/capabilityContext/shared.js.map +1 -1
- package/dist/cli/capabilityContext/slim.js.map +1 -1
- package/dist/cli/capabilityContext/startup.js +6 -2
- package/dist/cli/capabilityContext/startup.js.map +1 -1
- package/dist/cli/capabilityContext/types.js +19 -14
- package/dist/cli/capabilityContext/types.js.map +1 -1
- package/dist/cli/capabilityContext.js.map +1 -1
- package/dist/cli/commands/appHome.js.map +1 -1
- package/dist/cli/commands/capability.js.map +1 -1
- package/dist/cli/commands/compact.js.map +1 -1
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/durability.js.map +1 -1
- package/dist/cli/commands/entityMigrate.js.map +1 -1
- package/dist/cli/commands/glossaryAdvice.js.map +1 -1
- package/dist/cli/commands/lint.js.map +1 -1
- package/dist/cli/commands/personalGlossary.js.map +1 -1
- package/dist/cli/commands/prime/briefOrientation.js +260 -44
- package/dist/cli/commands/prime/briefOrientation.js.map +1 -1
- package/dist/cli/commands/prime/buildExecutionRequest.js.map +1 -1
- package/dist/cli/commands/prime/bundleStatus.js.map +1 -1
- package/dist/cli/commands/prime/collectEntityOrientation.js +22 -13
- package/dist/cli/commands/prime/collectEntityOrientation.js.map +1 -1
- package/dist/cli/commands/prime/collectOrientationState.js +20 -28
- package/dist/cli/commands/prime/collectOrientationState.js.map +1 -1
- package/dist/cli/commands/prime/orientationOutput.js +4 -5
- package/dist/cli/commands/prime/orientationOutput.js.map +1 -1
- package/dist/cli/commands/prime/types.js.map +1 -1
- package/dist/cli/commands/prime/v1Migration.js.map +1 -1
- package/dist/cli/commands/prime.js +1 -1
- package/dist/cli/commands/prime.js.map +1 -1
- package/dist/cli/commands/profileGrounding.js +29 -50
- package/dist/cli/commands/profileGrounding.js.map +1 -1
- package/dist/cli/commands/query.js.map +1 -1
- package/dist/cli/commands/report.js.map +1 -1
- package/dist/cli/commands/route.js.map +1 -1
- package/dist/cli/commands/schema.js +4 -43
- package/dist/cli/commands/schema.js.map +1 -1
- package/dist/cli/commands/state/decisions.js +1 -1
- package/dist/cli/commands/state/decisions.js.map +1 -1
- package/dist/cli/commands/state/docs.js.map +1 -1
- package/dist/cli/commands/state/experimentRecords.js +28 -15
- package/dist/cli/commands/state/experimentRecords.js.map +1 -1
- package/dist/cli/commands/state/experiments.js.map +1 -1
- package/dist/cli/commands/state/get.js +6 -3
- package/dist/cli/commands/state/get.js.map +1 -1
- package/dist/cli/commands/state/health.js.map +1 -1
- package/dist/cli/commands/state/index.js +3 -46
- package/dist/cli/commands/state/index.js.map +1 -1
- package/dist/cli/commands/state/list.js +41 -22
- package/dist/cli/commands/state/list.js.map +1 -1
- package/dist/cli/commands/state/objective.js.map +1 -1
- package/dist/cli/commands/state/plan.js.map +1 -1
- package/dist/cli/commands/state/planTasks.js +26 -13
- package/dist/cli/commands/state/planTasks.js.map +1 -1
- package/dist/cli/commands/state/plans.js +31 -19
- package/dist/cli/commands/state/plans.js.map +1 -1
- package/dist/cli/commands/state/progress.js.map +1 -1
- package/dist/cli/commands/state/shared.js.map +1 -1
- package/dist/cli/commands/state/todo.js +2 -1
- package/dist/cli/commands/state/todo.js.map +1 -1
- package/dist/cli/commands/state/write.js +52 -48
- package/dist/cli/commands/state/write.js.map +1 -1
- package/dist/cli/commands/upgrade.js.map +1 -1
- package/dist/cli/commands/upgradeVerify.js.map +1 -1
- package/dist/cli/commands/validate.js +44 -4
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/commands/verify.js.map +1 -1
- package/dist/cli/contracts/bundleStatus.js.map +1 -1
- package/dist/cli/contracts/orientationState.js.map +1 -1
- package/dist/cli/dispatch/argvParser.js.map +1 -1
- package/dist/cli/dispatch/check.js.map +1 -1
- package/dist/cli/dispatch/commands.js.map +1 -1
- package/dist/cli/dispatch/index.js +12 -4
- package/dist/cli/dispatch/index.js.map +1 -1
- package/dist/cli/dispatch/lifecycle.js.map +1 -1
- package/dist/cli/dispatch/prime.js.map +1 -1
- package/dist/cli/dispatch/shared.js.map +1 -1
- package/dist/cli/dispatch/state.js +53 -86
- package/dist/cli/dispatch/state.js.map +1 -1
- package/dist/cli/dispatch.js.map +1 -1
- package/dist/cli/errors.js.map +1 -1
- package/dist/cli/help.js +134 -48
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/migrationRequired.js.map +1 -1
- package/dist/cli/orientation/attention.js +8 -5
- package/dist/cli/orientation/attention.js.map +1 -1
- package/dist/cli/orientation/corpusCoverage.js.map +1 -1
- package/dist/cli/orientation.js +61 -38
- package/dist/cli/orientation.js.map +1 -1
- package/dist/cli/planArtifacts.js.map +1 -1
- package/dist/cli/planEvidence.js.map +1 -1
- package/dist/cli/planLifecycleState.js +3 -1
- package/dist/cli/planLifecycleState.js.map +1 -1
- package/dist/cli/planTaskIndex.js.map +1 -1
- package/dist/cli/prime-blob.js +2 -1
- package/dist/cli/prime-blob.js.map +1 -1
- package/dist/cli/profileAcquisition.js +168 -0
- package/dist/cli/profileAcquisition.js.map +1 -0
- package/dist/cli/startupCompletenessContract.js +5 -2
- package/dist/cli/startupCompletenessContract.js.map +1 -1
- package/dist/cli/stateQuery.js.map +1 -1
- package/dist/cli/structured.js.map +1 -1
- package/dist/cli/todoMarkdown.js +25 -11
- package/dist/cli/todoMarkdown.js.map +1 -1
- package/dist/cli/todoReadinessSelection.js +52 -17
- package/dist/cli/todoReadinessSelection.js.map +1 -1
- package/dist/cli/todoSeverity.js.map +1 -1
- package/dist/core/atomicWriter.js.map +1 -1
- package/dist/core/difflib.js.map +1 -1
- package/dist/core/envPaths.js.map +1 -1
- package/dist/core/jsonValue.js.map +1 -1
- package/dist/core/paths.js.map +1 -1
- package/dist/core/pyjson.js.map +1 -1
- package/dist/core/shell.js +5 -0
- package/dist/core/shell.js.map +1 -0
- package/dist/core/skillIdentity.js.map +1 -1
- package/dist/core/sourceRoot.js.map +1 -1
- package/dist/core/text.js.map +1 -1
- package/dist/core/toml.js.map +1 -1
- package/dist/core/yaml.js.map +1 -1
- package/dist/eval/evalSkills.js.map +1 -1
- package/dist/eval/hybridRouteEvaluation.js.map +1 -1
- package/dist/eval/semanticEval.js.map +1 -1
- package/dist/eval/semanticFixtures.js.map +1 -1
- package/dist/hooks/common.js.map +1 -1
- package/dist/hooks/compaction/apply.js.map +1 -1
- package/dist/hooks/compaction/dryRun.js.map +1 -1
- package/dist/hooks/compaction/index.js.map +1 -1
- package/dist/hooks/compaction/parse.js.map +1 -1
- package/dist/hooks/compaction/retention.js.map +1 -1
- package/dist/hooks/compaction/status.js.map +1 -1
- package/dist/hooks/compaction/types.js.map +1 -1
- package/dist/hooks/cursorPreToolUse.js.map +1 -1
- package/dist/hooks/cursorSessionStart.js.map +1 -1
- package/dist/hooks/projectHookInput.js.map +1 -1
- package/dist/hooks/sessionStart.js.map +1 -1
- package/dist/hooks/sessionStop.js.map +1 -1
- package/dist/hooks/validateArtifact/agentFacing.js.map +1 -1
- package/dist/hooks/validateArtifact/index.js.map +1 -1
- package/dist/hooks/validateArtifact/markdown.js.map +1 -1
- package/dist/hooks/validateArtifact/runtime.js.map +1 -1
- package/dist/hooks/validateArtifact/schema.js +6 -0
- package/dist/hooks/validateArtifact/schema.js.map +1 -1
- package/dist/hooks/validateArtifact/traversal.js.map +1 -1
- package/dist/hooks/validateArtifact/violations.js.map +1 -1
- package/dist/migrate/v2HandoffManifest.js.map +1 -1
- package/dist/registries/artifactProtocolIds.js.map +1 -1
- package/dist/registries/artifactRegistry.js.map +1 -1
- package/dist/registries/artifactSchemaProjection.js +46 -0
- package/dist/registries/artifactSchemaProjection.js.map +1 -0
- package/dist/registries/capabilityContract.js.map +1 -1
- package/dist/registries/evaluatorHandoffContract.js.map +1 -1
- package/dist/registries/evidenceTierContract.js.map +1 -1
- package/dist/registries/glossaryAdviceContract.js.map +1 -1
- package/dist/registries/glossaryCaveatContract.js.map +1 -1
- package/dist/registries/glossaryConsumerContractValidation.js +1 -5
- package/dist/registries/glossaryConsumerContractValidation.js.map +1 -1
- package/dist/registries/glossaryEntryContract.js +10 -0
- package/dist/registries/glossaryEntryContract.js.map +1 -1
- package/dist/registries/glossaryTermIdentity.js.map +1 -1
- package/dist/registries/glossaryTermOccurrence.js.map +1 -1
- package/dist/registries/hybridRoute.js.map +1 -1
- package/dist/registries/hybridRouteReceipt.js.map +1 -1
- package/dist/registries/packageRegistry.js.map +1 -1
- package/dist/registries/todoReadinessContract.js +49 -6
- package/dist/registries/todoReadinessContract.js.map +1 -1
- package/dist/registries/triggerLoader.js.map +1 -1
- package/dist/registries/verbosityBudgetContract.js.map +1 -1
- package/dist/release/releaseMetadata.js.map +1 -1
- package/dist/runtime/lifecycleAdapterContract.js.map +1 -1
- package/dist/runtime/lifecycleAdapters.js.map +1 -1
- package/dist/runtime/lifecycleAuthority.js.map +1 -1
- package/dist/runtime/lifecycleOperationContract.js.map +1 -1
- package/dist/runtime/lifecycleOperations.js.map +1 -1
- package/dist/runtime/lifecycleOwnershipJournal.js.map +1 -1
- package/dist/runtime/lifecyclePublication.js.map +1 -1
- package/dist/runtime/lifecycleSnapshot.js.map +1 -1
- package/dist/runtime/nativeResourceCleanup.js.map +1 -1
- package/dist/setup/codex/cli.js.map +1 -1
- package/dist/setup/codex/configToml.js.map +1 -1
- package/dist/setup/codex/constants.js.map +1 -1
- package/dist/setup/codex/installRoot.js.map +1 -1
- package/dist/setup/codex/state.js.map +1 -1
- package/dist/setup/codex.js.map +1 -1
- package/dist/setup/opencode.js.map +1 -1
- package/dist/setup/opencodeConstants.js.map +1 -1
- package/dist/setup/sharedSkill.js.map +1 -1
- package/dist/setup/smokeChecks.js.map +1 -1
- package/dist/state/archiveDiscovery.js +8 -5
- package/dist/state/archiveDiscovery.js.map +1 -1
- package/dist/state/archivePublication.js.map +1 -1
- package/dist/state/archiveRecovery.js.map +1 -1
- package/dist/state/archiveReplay.js.map +1 -1
- package/dist/state/canonicalMigrationRecord.js.map +1 -1
- package/dist/state/changelog.js.map +1 -1
- package/dist/state/decisionEntities.js +59 -20
- package/dist/state/decisionEntities.js.map +1 -1
- package/dist/state/decisionLegacyValidation.js.map +1 -1
- package/dist/state/decisionMigrationProvenance.js.map +1 -1
- package/dist/state/decisionOverlay.js.map +1 -1
- package/dist/state/decisionRevision.js.map +1 -1
- package/dist/state/decisionRevisionMigration.js.map +1 -1
- package/dist/state/directRetrieval.js.map +1 -1
- package/dist/state/durability.js.map +1 -1
- package/dist/state/entityCutover.js.map +1 -1
- package/dist/state/entityCutoverGit.js.map +1 -1
- package/dist/state/entityGlossaryAuthority.js.map +1 -1
- package/dist/state/entityListProjection.js +188 -0
- package/dist/state/entityListProjection.js.map +1 -0
- package/dist/state/entityListRuntimeRegistry.js +50 -0
- package/dist/state/entityListRuntimeRegistry.js.map +1 -0
- package/dist/state/entityMigrationCausality.js.map +1 -1
- package/dist/state/entityMigrationIdentity.js.map +1 -1
- package/dist/state/entityMigrationPreview.js +32 -3
- package/dist/state/entityMigrationPreview.js.map +1 -1
- package/dist/state/entityPublicationContext.js +607 -765
- package/dist/state/entityPublicationContext.js.map +1 -1
- package/dist/state/entityRetrievalHelp.js +476 -0
- package/dist/state/entityRetrievalHelp.js.map +1 -0
- package/dist/state/entityStorage.js.map +1 -1
- package/dist/state/exactReplacementRecovery.js +19 -0
- package/dist/state/exactReplacementRecovery.js.map +1 -0
- package/dist/state/experimentArchive.js.map +1 -1
- package/dist/state/experimentIdentity.js.map +1 -1
- package/dist/state/healthEntities.js +15 -16
- package/dist/state/healthEntities.js.map +1 -1
- package/dist/state/healthEntityValidation.js.map +1 -1
- package/dist/state/healthRepair.js.map +1 -1
- package/dist/state/installRoot.js.map +1 -1
- package/dist/state/legacyEntityCutoverEvidence.js.map +1 -1
- package/dist/state/legacyIdentity.js.map +1 -1
- package/dist/state/legacySummaryRecord.js.map +1 -1
- package/dist/state/listAccounting.js.map +1 -1
- package/dist/state/listClassification.js.map +1 -1
- package/dist/state/listCursor.js.map +1 -1
- package/dist/state/listRetrieval.js.map +1 -1
- package/dist/state/migrationSourceBinding.js.map +1 -1
- package/dist/state/objectiveExperimentEntities.js +22 -22
- package/dist/state/objectiveExperimentEntities.js.map +1 -1
- package/dist/state/planEntities.js +75 -29
- package/dist/state/planEntities.js.map +1 -1
- package/dist/state/planIdentity.js +4 -1
- package/dist/state/planIdentity.js.map +1 -1
- package/dist/state/planRetrieval.js.map +1 -1
- package/dist/state/planTaskRetrieval.js +41 -31
- package/dist/state/planTaskRetrieval.js.map +1 -1
- package/dist/state/progressEntities.js +40 -25
- package/dist/state/progressEntities.js.map +1 -1
- package/dist/state/progressGlossaryCaveat.js.map +1 -1
- package/dist/state/progressPublicationOrder.js.map +1 -1
- package/dist/state/projectRoot.js.map +1 -1
- package/dist/state/projectionPolicy.js +12 -5
- package/dist/state/projectionPolicy.js.map +1 -1
- package/dist/state/retrievalAuthority.js +86 -272
- package/dist/state/retrievalAuthority.js.map +1 -1
- package/dist/state/safeProjectFile.js.map +1 -1
- package/dist/state/startupAnalysis/benchmark.js.map +1 -1
- package/dist/state/startupAnalysis/contract.js.map +1 -1
- package/dist/state/startupAnalysis/helpers.js.map +1 -1
- package/dist/state/startupAnalysis/index.js.map +1 -1
- package/dist/state/startupAnalysis/metrics.js.map +1 -1
- package/dist/state/startupAnalysis/records.js.map +1 -1
- package/dist/state/startupAnalysis/report.js.map +1 -1
- package/dist/state/startupAnalysis/threshold.js.map +1 -1
- package/dist/state/startupAnalysis.js.map +1 -1
- package/dist/state/startupProjection.js.map +1 -1
- package/dist/state/stateMode.js +11 -8
- package/dist/state/stateMode.js.map +1 -1
- package/dist/state/stateStorageAuthority.js.map +1 -1
- package/dist/state/summaryEntityRead.js.map +1 -1
- package/dist/state/summaryMigrationProvenance.js.map +1 -1
- package/dist/state/summarySourceRowAuthority.js.map +1 -1
- package/dist/state/todoDocsEntities.js +811 -91
- package/dist/state/todoDocsEntities.js.map +1 -1
- package/dist/state/todoDocsEntityValidation.js +127 -2
- package/dist/state/todoDocsEntityValidation.js.map +1 -1
- package/dist/state/todoReconciliationActivation.js +63 -0
- package/dist/state/todoReconciliationActivation.js.map +1 -0
- package/dist/state/todoReconciliationTransaction.js +554 -0
- package/dist/state/todoReconciliationTransaction.js.map +1 -0
- package/dist/state/write/assign.js.map +1 -1
- package/dist/state/write/candidateMutation.js +1 -12
- package/dist/state/write/candidateMutation.js.map +1 -1
- package/dist/state/write/errors.js.map +1 -1
- package/dist/state/write/experimentPublication.js.map +1 -1
- package/dist/state/write/explain.js +198 -177
- package/dist/state/write/explain.js.map +1 -1
- package/dist/state/write/fields.js.map +1 -1
- package/dist/state/write/glossaryPublication.js.map +1 -1
- package/dist/state/write/grammar.js +271 -0
- package/dist/state/write/grammar.js.map +1 -0
- package/dist/state/write/helpers.js.map +1 -1
- package/dist/state/write/index.js.map +1 -1
- package/dist/state/write/input.js +351 -5
- package/dist/state/write/input.js.map +1 -1
- package/dist/state/write/lock.js.map +1 -1
- package/dist/state/write/mutation.js.map +1 -1
- package/dist/state/write/operations.js +140 -343
- package/dist/state/write/operations.js.map +1 -1
- package/dist/state/write/planEvaluation.js +4 -0
- package/dist/state/write/planEvaluation.js.map +1 -1
- package/dist/state/write/planPublication.js +48 -3
- package/dist/state/write/planPublication.js.map +1 -1
- package/dist/state/write/runtimeOperations.js +65 -0
- package/dist/state/write/runtimeOperations.js.map +1 -0
- package/dist/state/write/serialize.js.map +1 -1
- package/dist/state/write/transaction.js +13 -7
- package/dist/state/write/transaction.js.map +1 -1
- package/dist/state/write/validate.js.map +1 -1
- package/dist/upgrade/appContentRefresh.js.map +1 -1
- package/dist/upgrade/appModel.js.map +1 -1
- package/dist/upgrade/atomicWriter.js.map +1 -1
- package/dist/upgrade/bundleEvidence.js.map +1 -1
- package/dist/upgrade/channels.js.map +1 -1
- package/dist/upgrade/coexistenceProbe.js.map +1 -1
- package/dist/upgrade/compatibility.js.map +1 -1
- package/dist/upgrade/doctor.js.map +1 -1
- package/dist/upgrade/doctorClassifier.js.map +1 -1
- package/dist/upgrade/installedHooksRetirement.js.map +1 -1
- package/dist/upgrade/legacyAgentCleanup.js.map +1 -1
- package/dist/upgrade/lifecycleUpgrade.js.map +1 -1
- package/dist/upgrade/migrateArtifactsV2ToV3.js.map +1 -1
- package/dist/upgrade/migrationPublication.js.map +1 -1
- package/dist/upgrade/nextMajorDoctor.js.map +1 -1
- package/dist/upgrade/npxPlatformStatus.js.map +1 -1
- package/dist/upgrade/projectIntegration.js.map +1 -1
- package/dist/upgrade/projectIntegrationDecision.js.map +1 -1
- package/dist/upgrade/runtimeMigration.js.map +1 -1
- package/dist/upgrade/upgradeCommands.js.map +1 -1
- package/dist/upgrade/upgradeLock.js.map +1 -1
- package/dist/upgrade/upgradeOrchestrator.js.map +1 -1
- package/dist/upgrade/v3CapabilitySurface.js.map +1 -1
- package/dist/upgrade/versionResolution.js.map +1 -1
- package/dist/validate/appHomeContract.js.map +1 -1
- package/dist/validate/capability.js.map +1 -1
- package/dist/validate/crossCapability.js.map +1 -1
- package/dist/validate/selfAudit.js.map +1 -1
- package/dist/validate/v1LegacyCruft.js.map +1 -1
- package/dist/validate/vocabularyAuthority.js.map +1 -1
- package/package.json +2 -2
- package/dist/state/experimentRetrieval.js +0 -447
- package/dist/state/experimentRetrieval.js.map +0 -1
|
@@ -73,32 +73,142 @@ entity_target:
|
|
|
73
73
|
status: final
|
|
74
74
|
commands:
|
|
75
75
|
progress:
|
|
76
|
-
list: agentera state progress list [--limit N] [--cursor TOKEN] --format json
|
|
76
|
+
list: agentera state progress list [--topic TEXT] [--status STATUS] [--limit N] [--cursor TOKEN] [--ids-only | --fields FIELDS] --format json
|
|
77
77
|
get: agentera state progress get --id ID --format json
|
|
78
78
|
decisions:
|
|
79
|
-
list: agentera state decisions list [--limit N] [--cursor TOKEN] --format json
|
|
79
|
+
list: agentera state decisions list [--topic TEXT] [--limit N] [--cursor TOKEN] [--ids-only | --fields FIELDS] --format json
|
|
80
80
|
get: agentera state decisions get --id ID --format json
|
|
81
81
|
health:
|
|
82
|
-
list: agentera state health list [--limit N] [--cursor TOKEN] --format json
|
|
82
|
+
list: agentera state health list [--dimension DIMENSION] [--limit N] [--cursor TOKEN] [--ids-only | --fields FIELDS] --format json
|
|
83
83
|
get: agentera state health get --id ID --format json
|
|
84
84
|
plans:
|
|
85
|
-
list: agentera state plan list [--status open|complete|archived] [--limit N] [--cursor TOKEN] --format json
|
|
85
|
+
list: agentera state plan list [--status open|complete|archived] [--limit N] [--cursor TOKEN] [--ids-only | --fields FIELDS] --format json
|
|
86
86
|
get: agentera state plan get --id ID --format json
|
|
87
87
|
plan_tasks:
|
|
88
|
-
list: agentera state plan tasks list [--limit N] [--cursor TOKEN] --format json
|
|
88
|
+
list: agentera state plan tasks list [PLAN_ID] [--limit N] [--cursor TOKEN] [--ids-only | --fields FIELDS] --format json
|
|
89
89
|
get: agentera state plan tasks get --id ID --format json
|
|
90
90
|
objective:
|
|
91
|
-
list: agentera state objective list [--limit N] [--cursor TOKEN] --format json
|
|
91
|
+
list: agentera state objective list [--limit N] [--cursor TOKEN] [--ids-only | --fields FIELDS] --format json
|
|
92
92
|
get: agentera state objective get --id ID --format json
|
|
93
93
|
experiments:
|
|
94
|
-
list: agentera state experiments list --objective ID [--limit N] [--cursor TOKEN] --format json
|
|
94
|
+
list: agentera state experiments list --objective ID [--limit N] [--cursor TOKEN] [--ids-only | --fields FIELDS] --format json
|
|
95
95
|
get: agentera state experiments get --id ID --format json
|
|
96
96
|
todo:
|
|
97
|
-
list: agentera state todo list [--limit N] [--cursor TOKEN] --format json
|
|
97
|
+
list: agentera state todo list [--severity SEVERITY] [--status STATUS] [--limit N] [--cursor TOKEN] [--ids-only | --fields FIELDS] --format json
|
|
98
98
|
get: agentera state todo get --id ID --format json
|
|
99
99
|
docs:
|
|
100
|
-
list: agentera state docs list [--limit N] [--cursor TOKEN] --format json
|
|
100
|
+
list: agentera state docs list [--topic TEXT] [--status STATUS] [--limit N] [--cursor TOKEN] [--ids-only | --fields FIELDS] --format json
|
|
101
101
|
get: agentera state docs get --id ID --format json
|
|
102
|
+
list_help:
|
|
103
|
+
schema_version: agentera.entityListHelp.v1
|
|
104
|
+
defaults:
|
|
105
|
+
summary_fields: [id, artifact, retrieval.get]
|
|
106
|
+
selectors:
|
|
107
|
+
ids_only:
|
|
108
|
+
flag: --ids-only
|
|
109
|
+
description: Return only canonical minimum identity, exact-get recovery, and required family minimum fields such as TODO queue_rank.
|
|
110
|
+
fields:
|
|
111
|
+
flag: --fields FIELDS
|
|
112
|
+
description: Select comma-separated lowercase record paths present in the filtered snapshot; identity and exact-get recovery remain present.
|
|
113
|
+
mutual_exclusion: true
|
|
114
|
+
bounds: { minimum: 1, default: 20, maximum: 100, max_utf8_bytes: 32768 }
|
|
115
|
+
formats: [text, json, yaml]
|
|
116
|
+
families:
|
|
117
|
+
progress:
|
|
118
|
+
command_tokens: [progress]
|
|
119
|
+
bare_read: alias
|
|
120
|
+
filters:
|
|
121
|
+
- { flag: --topic TEXT, name: topic, values: free_text }
|
|
122
|
+
- { flag: --status STATUS, name: status, values: free_text }
|
|
123
|
+
example: agentera state progress list --limit 20 --format json
|
|
124
|
+
decisions:
|
|
125
|
+
command_tokens: [decisions]
|
|
126
|
+
bare_read: alias
|
|
127
|
+
filters:
|
|
128
|
+
- { flag: --topic TEXT, name: topic, values: free_text }
|
|
129
|
+
example: agentera state decisions list --limit 20 --format json
|
|
130
|
+
health:
|
|
131
|
+
command_tokens: [health]
|
|
132
|
+
bare_read: correction
|
|
133
|
+
bare_recovery: agentera state health list --limit 20 --format json
|
|
134
|
+
filters:
|
|
135
|
+
- { flag: --dimension DIMENSION, name: dimension, values: free_text }
|
|
136
|
+
example: agentera state health list --limit 20 --format json
|
|
137
|
+
plans:
|
|
138
|
+
command_tokens: [plan]
|
|
139
|
+
bare_read: correction
|
|
140
|
+
bare_recovery: agentera state plan list --status open --limit 20 --format json
|
|
141
|
+
filters:
|
|
142
|
+
- { flag: '--status open|complete|archived', name: status, values: [open, complete, archived] }
|
|
143
|
+
example: agentera state plan list --status open --limit 20 --format json
|
|
144
|
+
plan_tasks:
|
|
145
|
+
command_tokens: [plan, tasks]
|
|
146
|
+
bare_read: correction
|
|
147
|
+
bare_recovery: agentera state plan tasks list --limit 20 --format json
|
|
148
|
+
family_identifier:
|
|
149
|
+
syntax: PLAN_ID
|
|
150
|
+
required: false
|
|
151
|
+
description: Optional bare plan ID; omit it to list tasks from the active plan.
|
|
152
|
+
filters: []
|
|
153
|
+
example: agentera state plan tasks list --limit 20 --format json
|
|
154
|
+
objective:
|
|
155
|
+
command_tokens: [objective]
|
|
156
|
+
bare_read: correction
|
|
157
|
+
bare_recovery: agentera state objective list --limit 20 --format json
|
|
158
|
+
filters: []
|
|
159
|
+
example: agentera state objective list --limit 20 --format json
|
|
160
|
+
experiments:
|
|
161
|
+
command_tokens: [experiments]
|
|
162
|
+
bare_read: correction
|
|
163
|
+
bare_recovery: agentera state objective list --limit 20 --format json
|
|
164
|
+
family_identifier:
|
|
165
|
+
syntax: --objective ID
|
|
166
|
+
required: true
|
|
167
|
+
description: Required bare objective entity ID.
|
|
168
|
+
filters: []
|
|
169
|
+
example: agentera state experiments list --objective qjtrmnpvka --limit 20 --format json
|
|
170
|
+
todo:
|
|
171
|
+
command_tokens: [todo]
|
|
172
|
+
bare_read: alias
|
|
173
|
+
filters:
|
|
174
|
+
- { flag: --severity SEVERITY, name: severity, values: free_text }
|
|
175
|
+
- { flag: --status STATUS, name: status, values: free_text }
|
|
176
|
+
summary_fields: [id, artifact, public_order, readiness, actionability, queue_rank, reconciliation, retrieval.get]
|
|
177
|
+
summary_field_notes:
|
|
178
|
+
public_order:
|
|
179
|
+
description: Markdown-owned one-based order within the item's public section, or null before reconciliation activation.
|
|
180
|
+
ownership: markdown_read_projection
|
|
181
|
+
persisted: false
|
|
182
|
+
filter: false
|
|
183
|
+
readiness:
|
|
184
|
+
description: Public lifecycle state plus whether Agentera readiness declares an explicit blocker.
|
|
185
|
+
ownership: agentera_operational_projection
|
|
186
|
+
persisted: false
|
|
187
|
+
filter: false
|
|
188
|
+
actionability:
|
|
189
|
+
description: Read-only TODO readiness outcome and eligibility computed across the complete TODO snapshot.
|
|
190
|
+
ownership: computed_read_snapshot
|
|
191
|
+
persisted: false
|
|
192
|
+
filter: false
|
|
193
|
+
queue_rank:
|
|
194
|
+
description: Computed one-based position in the complete ordered TODO snapshot before filters.
|
|
195
|
+
ownership: computed_read_snapshot
|
|
196
|
+
persisted: false
|
|
197
|
+
filter: false
|
|
198
|
+
reconciliation:
|
|
199
|
+
description: Global reconciliation status and item-specific drift state for this read snapshot.
|
|
200
|
+
ownership: computed_read_snapshot
|
|
201
|
+
persisted: false
|
|
202
|
+
filter: false
|
|
203
|
+
example: agentera state todo list --severity critical --ids-only --limit 20 --format json
|
|
204
|
+
docs:
|
|
205
|
+
command_tokens: [docs]
|
|
206
|
+
bare_read: correction
|
|
207
|
+
bare_recovery: agentera state docs list --limit 20 --format json
|
|
208
|
+
filters:
|
|
209
|
+
- { flag: --topic TEXT, name: topic, values: free_text }
|
|
210
|
+
- { flag: --status STATUS, name: status, values: free_text }
|
|
211
|
+
example: agentera state docs list --limit 20 --format json
|
|
102
212
|
collections:
|
|
103
213
|
- { artifact: progress, identity: id, classification: artifact }
|
|
104
214
|
- { artifact: decisions, identity: id, classification: artifact }
|
|
@@ -109,6 +219,116 @@ entity_target:
|
|
|
109
219
|
- { artifact: experiments, identity: id, classification: artifact }
|
|
110
220
|
- { artifact: todo, identity: id, classification: artifact }
|
|
111
221
|
- { artifact: docs, identity: id, classification: artifact }
|
|
222
|
+
policy:
|
|
223
|
+
schema_version: agentera.entityPublicRetrievalPolicy.v1
|
|
224
|
+
status: final
|
|
225
|
+
authority_boundary: >-
|
|
226
|
+
This canonical public-retrieval model owns list/get envelopes, cursors,
|
|
227
|
+
selectors, identities, omissions, structured failures, and output bounds.
|
|
228
|
+
Entity definitions own family ordering and storage. No other active
|
|
229
|
+
section may declare public retrieval commands, selectors, or identities.
|
|
230
|
+
envelope:
|
|
231
|
+
required_fields:
|
|
232
|
+
- schemaVersion
|
|
233
|
+
- command
|
|
234
|
+
- status
|
|
235
|
+
- entries
|
|
236
|
+
- counts
|
|
237
|
+
- filters
|
|
238
|
+
- snapshot
|
|
239
|
+
- source
|
|
240
|
+
- source_contract
|
|
241
|
+
counts_required_fields: [total, returned, remaining, candidate, omitted, continuation]
|
|
242
|
+
status_values: [ok, degraded]
|
|
243
|
+
bounded_summary_projection:
|
|
244
|
+
cardinality_owner: summary_rows_after_filters_and_cursor
|
|
245
|
+
limit_semantics: >-
|
|
246
|
+
Return exactly min(requested limit, candidates remaining in the bound
|
|
247
|
+
snapshot) rows. Serialized-byte pressure may remove optional detail
|
|
248
|
+
from those rows but never removes a selected row.
|
|
249
|
+
minimum_fields: [id, artifact, retrieval.get]
|
|
250
|
+
family_minimum_fields:
|
|
251
|
+
todo: [queue_rank]
|
|
252
|
+
optional_fields_rule: >-
|
|
253
|
+
Every declared family summary field that is not a minimum field is
|
|
254
|
+
optional under byte pressure and is removed as one deterministic tier.
|
|
255
|
+
queue_rank: >-
|
|
256
|
+
One-based position in the complete canonically ordered TODO queue
|
|
257
|
+
before request filters. It is computed from the read snapshot and is
|
|
258
|
+
never persisted or used to reorder TODO.md.
|
|
259
|
+
optional_detail_degradation:
|
|
260
|
+
status: degraded
|
|
261
|
+
reason: optional_detail_byte_budget
|
|
262
|
+
row_omission: forbidden
|
|
263
|
+
scalar_truncation: forbidden
|
|
264
|
+
required_metadata: [reason, detail_omitted_count, omitted_fields, recovery]
|
|
265
|
+
omitted_fields_order: lexical
|
|
266
|
+
recovery: concrete_exact_get_pointer_per_returned_row
|
|
267
|
+
selectors:
|
|
268
|
+
ids_only:
|
|
269
|
+
fields: canonical_minimum_fields
|
|
270
|
+
optional_summary_fields: excluded
|
|
271
|
+
fields:
|
|
272
|
+
fields: canonical_minimum_fields_plus_all_requested_record_paths
|
|
273
|
+
validation: >-
|
|
274
|
+
Each lowercase dot path must exist in at least one record in the
|
|
275
|
+
filtered cursor snapshot. Duplicate, malformed, or absent paths
|
|
276
|
+
are invalid_request. Requested paths are sorted before projection
|
|
277
|
+
and cursor binding; a missing value in one row remains absent.
|
|
278
|
+
scalar_truncation: forbidden
|
|
279
|
+
mutual_exclusion: ids_only_and_fields
|
|
280
|
+
byte_pressure:
|
|
281
|
+
ids_only: reject_without_partial_rows_if_minimum_rows_cannot_fit
|
|
282
|
+
selected_fields: reject_without_partial_rows_or_fields
|
|
283
|
+
default: degrade_full_to_summary_then_minimum_before_rejection
|
|
284
|
+
metadata:
|
|
285
|
+
continuation: binds_family_identifier_filters_selector_limit_order_and_snapshot
|
|
286
|
+
exact_get: one_concrete_command_per_returned_row
|
|
287
|
+
cursor:
|
|
288
|
+
vocabulary: opaque_snapshot_cursor
|
|
289
|
+
first_page: omit_cursor
|
|
290
|
+
response_field: next_cursor
|
|
291
|
+
binding: [collection, family_identifier, selectors, filters, limit, order, snapshot]
|
|
292
|
+
invalid_behavior: cursor_invalid
|
|
293
|
+
unavailable_behavior: cursor_snapshot_unavailable
|
|
294
|
+
caller_rules: [do_not_parse, do_not_construct, do_not_compare_internals]
|
|
295
|
+
omission:
|
|
296
|
+
required_when_candidates_remain: [omitted, omitted_count, omission_reason, retrieval]
|
|
297
|
+
semantics: >-
|
|
298
|
+
Omission reports only candidates beyond the selected row window.
|
|
299
|
+
Optional detail degradation is separate and names every omitted field.
|
|
300
|
+
A response never silently slices rows or truncates scalar values.
|
|
301
|
+
output_bounds:
|
|
302
|
+
maximum_limit: 100
|
|
303
|
+
max_serialized_utf8_bytes: 32768
|
|
304
|
+
scalar_truncation: forbidden
|
|
305
|
+
row_omission_under_byte_pressure: forbidden
|
|
306
|
+
optional_detail: degrade_before_minimum_row_rejection
|
|
307
|
+
failures:
|
|
308
|
+
schema_version: agentera.stateFailure.v1
|
|
309
|
+
required_fields: [class, message, syntax, example, recovery]
|
|
310
|
+
classes:
|
|
311
|
+
invalid_request: malformed, duplicate, missing, or incompatible selector
|
|
312
|
+
unsupported_artifact: collection is not exposed by the canonical grammar
|
|
313
|
+
not_found: a valid exact identity has no matching record
|
|
314
|
+
ambiguous: duplicate identity or compatibility state has multiple candidates
|
|
315
|
+
corrupt: selected state cannot be parsed or validated safely
|
|
316
|
+
incomplete: selected record exists but required detail is unavailable
|
|
317
|
+
cursor_invalid: cursor is malformed or bound to different request state
|
|
318
|
+
cursor_snapshot_unavailable: exact cursor snapshot cannot be resumed
|
|
319
|
+
unsupported_state: authority cannot return a safe bounded envelope
|
|
320
|
+
exit_codes: { usage: 2, state_or_compatibility_failure: 1 }
|
|
321
|
+
archive_policy:
|
|
322
|
+
plan:
|
|
323
|
+
owner: canonical_plan_entities_and_immutable_plan_archive_entities
|
|
324
|
+
diagnostics: selected_candidate_only_blocks_exact_get
|
|
325
|
+
unselected_diagnostics: degrade_catalog_without_blocking_other_exact_gets
|
|
326
|
+
experiments:
|
|
327
|
+
owner: experiment_archival
|
|
328
|
+
storage_scope: objective_directory
|
|
329
|
+
publication_order: archive_before_projection
|
|
330
|
+
projection_policy: uniform_10_40_50
|
|
331
|
+
missing_detail: never_reconstructed
|
|
112
332
|
identity:
|
|
113
333
|
scope: project_wide_across_all_entity_artifacts
|
|
114
334
|
alphabet: abcdefghijklmnopqrstuvwxyz
|
|
@@ -135,14 +355,23 @@ entity_target:
|
|
|
135
355
|
scope: shared_by_all_entity_families
|
|
136
356
|
binding: validated_project_root_and_exact_cutover_marker_snapshot
|
|
137
357
|
lifetime: mode_detection_through_writer_lock_and_final_publication_validation
|
|
358
|
+
filesystem_contract:
|
|
359
|
+
primitives: [node_fs_linkSync, node_fs_renameSync]
|
|
360
|
+
replacement_visibility: complete_old_or_new_bytes_per_file
|
|
361
|
+
journal_visibility: pending_journal_blocks_reads
|
|
362
|
+
global_snapshot: not_promised
|
|
363
|
+
late_racer: outside_contract_after_final_successful_validation
|
|
364
|
+
unsupported_result: structured_unsupported_target_before_target_effects
|
|
138
365
|
pathname_race_contract: >-
|
|
139
|
-
Entity publication
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
366
|
+
Entity publication uses project-relative standard Node paths. The root,
|
|
367
|
+
exact valid marker, target, recovery directories, and attempt-owned
|
|
368
|
+
roles are revalidated at declared boundaries before publication or
|
|
369
|
+
recovery effects. Immutable creation linearizes through link and
|
|
370
|
+
replacement linearizes through complete-file rename. A detected
|
|
371
|
+
boundary change preserves the competitor and returns a structured
|
|
372
|
+
conflict. The journal is a read barrier and recovery authority, not a
|
|
373
|
+
global multi-file snapshot; a non-cooperating writer that races after
|
|
374
|
+
the final successful validation is outside this contract.
|
|
146
375
|
marker_change_after_detection: conflict_without_legacy_fallback
|
|
147
376
|
successor_preservation: never_remove_unmatched_or_unrelated_identity
|
|
148
377
|
allocation: provisional_candidate_until_publication
|
|
@@ -192,7 +421,7 @@ entity_target:
|
|
|
192
421
|
privacy: bounded_ordinal_without_time_identity_or_content
|
|
193
422
|
retrieval:
|
|
194
423
|
exact: agentera state progress get --id ID --format json
|
|
195
|
-
list: agentera state progress list [--limit N] [--cursor TOKEN] --format json
|
|
424
|
+
list: agentera state progress list [--limit N] [--cursor TOKEN] [--ids-only | --fields FIELDS] --format json
|
|
196
425
|
ordering: timestamp_desc_then_publication_order_desc_then_id_asc
|
|
197
426
|
semantic_recency: >-
|
|
198
427
|
The first full progress cycle is latest. Timestamp remains the public
|
|
@@ -263,7 +492,7 @@ entity_target:
|
|
|
263
492
|
Current confidence values and ordinary decision writes omit this metadata.
|
|
264
493
|
retrieval:
|
|
265
494
|
exact: agentera state decisions get --id ID --format json
|
|
266
|
-
list: agentera state decisions list [--limit N] [--cursor TOKEN] --format json
|
|
495
|
+
list: agentera state decisions list [--limit N] [--cursor TOKEN] [--ids-only | --fields FIELDS] --format json
|
|
267
496
|
ordering: date_desc_then_id_asc
|
|
268
497
|
default_limit: 20
|
|
269
498
|
maximum_limit: 100
|
|
@@ -354,7 +583,7 @@ entity_target:
|
|
|
354
583
|
reconstructed chronology.
|
|
355
584
|
retrieval:
|
|
356
585
|
exact: agentera state health get --id ID --format json
|
|
357
|
-
list: agentera state health list [--limit N] [--cursor TOKEN] --format json
|
|
586
|
+
list: agentera state health list [--limit N] [--cursor TOKEN] [--ids-only | --fields FIELDS] --format json
|
|
358
587
|
ordering: appended_at_desc_then_id_asc_then_legacy_date_desc_then_id_asc
|
|
359
588
|
default_limit: 20
|
|
360
589
|
maximum_limit: 100
|
|
@@ -398,6 +627,10 @@ entity_target:
|
|
|
398
627
|
required_fields: [header, what, why, scope]
|
|
399
628
|
required_paths: [header.title, header.created, header.status]
|
|
400
629
|
forbidden_fields: [id, artifact, stable_id, plan_id, tasks, previous_plan_archived]
|
|
630
|
+
identity: >-
|
|
631
|
+
The canonical plan identity is the bare ten-letter entity envelope id.
|
|
632
|
+
A composite header.id belongs only to legacy migration source and is
|
|
633
|
+
never a public selector.
|
|
401
634
|
field_shapes:
|
|
402
635
|
scope:
|
|
403
636
|
type: mapping
|
|
@@ -418,7 +651,7 @@ entity_target:
|
|
|
418
651
|
under this source-form rule; no semantic intent is inferred.
|
|
419
652
|
retrieval:
|
|
420
653
|
exact: agentera state plan get --id ID --format json
|
|
421
|
-
list: agentera state plan list [--limit N] [--cursor TOKEN] --format json
|
|
654
|
+
list: agentera state plan list [--limit N] [--cursor TOKEN] [--ids-only | --fields FIELDS] --format json
|
|
422
655
|
ordering: created_desc_then_id_asc
|
|
423
656
|
default_limit: 20
|
|
424
657
|
maximum_limit: 100
|
|
@@ -437,6 +670,9 @@ entity_target:
|
|
|
437
670
|
required_fields: [plan, name, status, depends_on, acceptance]
|
|
438
671
|
required_paths: []
|
|
439
672
|
forbidden_fields: [id, artifact, number, task_number, stable_id, plan_id]
|
|
673
|
+
identity: >-
|
|
674
|
+
The canonical task identity is the bare ten-letter entity envelope id;
|
|
675
|
+
dependencies and replacements are bare IDs resolved within the same plan.
|
|
440
676
|
- boundary: objective
|
|
441
677
|
artifact: objective
|
|
442
678
|
independently_mutable: true
|
|
@@ -449,7 +685,7 @@ entity_target:
|
|
|
449
685
|
forbidden_fields: [id, artifact, stable_id, objective_id]
|
|
450
686
|
retrieval:
|
|
451
687
|
exact: agentera state objective get --id ID --format json
|
|
452
|
-
list: agentera state objective list [--limit N] [--cursor TOKEN] --format json
|
|
688
|
+
list: agentera state objective list [--limit N] [--cursor TOKEN] [--ids-only | --fields FIELDS] --format json
|
|
453
689
|
ordering: created_desc_then_id_asc
|
|
454
690
|
default_limit: 20
|
|
455
691
|
maximum_limit: 100
|
|
@@ -474,7 +710,7 @@ entity_target:
|
|
|
474
710
|
forbidden_fields: [id, artifact, number, experiment_number, stable_id, objective_id]
|
|
475
711
|
retrieval:
|
|
476
712
|
exact: agentera state experiments get --id ID --format json
|
|
477
|
-
list: agentera state experiments list --objective ID [--limit N] [--cursor TOKEN] --format json
|
|
713
|
+
list: agentera state experiments list --objective ID [--limit N] [--cursor TOKEN] [--ids-only | --fields FIELDS] --format json
|
|
478
714
|
ordering: date_desc_then_id_asc
|
|
479
715
|
default_limit: 20
|
|
480
716
|
maximum_limit: 100
|
|
@@ -488,15 +724,120 @@ entity_target:
|
|
|
488
724
|
independently_mutable: true
|
|
489
725
|
relationships: []
|
|
490
726
|
implementation: implemented
|
|
491
|
-
publication:
|
|
727
|
+
publication: reconcile_markdown_under_recoverable_journal
|
|
492
728
|
record:
|
|
493
|
-
required_fields: [severity, status
|
|
729
|
+
required_fields: [severity, status]
|
|
494
730
|
required_paths: []
|
|
495
|
-
forbidden_fields: [id, artifact, number, stable_id, artifact_id, entry_number, path]
|
|
731
|
+
forbidden_fields: [id, artifact, number, stable_id, artifact_id, entry_number, path, public_order]
|
|
732
|
+
ownership:
|
|
733
|
+
fields: [kind, target_version, title, requirements, acceptance, release_blocker, severity, status, readiness, lifecycle, reconciliation]
|
|
734
|
+
cardinality: TODO.md owns public fields; Agentera owns operational fields
|
|
735
|
+
identity: managed row and canonical entity share one visible ten-letter id
|
|
736
|
+
markdown_public_fields: [description, severity, status, order]
|
|
737
|
+
agentera_operational_fields: [readiness, dependencies, blocked, gate, evidence, lifecycle]
|
|
738
|
+
reconciliation:
|
|
739
|
+
baseline: record.reconciliation
|
|
740
|
+
schema_version: agentera.todoReconciliation.v1
|
|
741
|
+
public_fields: [description, severity, status, order]
|
|
742
|
+
transaction_journal: .agentera/.todo-reconciliation/<content-digest>.json
|
|
743
|
+
create_recovery_receipt:
|
|
744
|
+
applicability: create_transactions_only
|
|
745
|
+
created_id: original_writer_assigned_ten_letter_id
|
|
746
|
+
request_sha256: sha256_of_domain_separated_canonical_normalized_create_record
|
|
747
|
+
transaction_identity: canonical_create_receipt_and_targets
|
|
748
|
+
retry: >-
|
|
749
|
+
Before applying a pending create journal, require the retry's normalized
|
|
750
|
+
request digest to match. Exact retry recovers and returns the original ID
|
|
751
|
+
as an idempotent replay without allocation; a different request rejects
|
|
752
|
+
before target effects and leaves the journal intact.
|
|
753
|
+
activation:
|
|
754
|
+
path: .agentera/todo-reconciliation-activation.json
|
|
755
|
+
schema_version: agentera.todoReconciliationActivation.v1
|
|
756
|
+
cardinality: zero_before_activation_then_exactly_one
|
|
757
|
+
initial_match: exact_unique_public_fields_only
|
|
758
|
+
retained_legacy_rows: bounded_section_and_exact_line_sha256_identities
|
|
759
|
+
rule: >-
|
|
760
|
+
The first reconciliation may assign a canonical ID only when one
|
|
761
|
+
ID-less pre-activation row exactly matches one otherwise-unclaimed
|
|
762
|
+
entity public record. It records unmatched pre-existing rows by
|
|
763
|
+
section-and-line digest as retained unmanaged legacy bytes. The
|
|
764
|
+
activation record, all entity baselines, and the public document
|
|
765
|
+
publish in the same journal. After activation, every new checkbox
|
|
766
|
+
row under a managed severity or resolved heading requires a
|
|
767
|
+
canonical ten-letter ID; each retained legacy exemption admits at
|
|
768
|
+
most one exact row occurrence per reconciliation and cannot
|
|
769
|
+
authorize a changed or duplicate row.
|
|
770
|
+
managed_row_identity: every_activated_managed_checkbox_row_has_one_ten_letter_id
|
|
771
|
+
unmanaged_regions: checkbox_rows_outside_managed_headings_remain_ordinary_markdown
|
|
772
|
+
public_path_binding: exact_docs_mapped_relative_path_plus_docs_yaml_snapshot_sha256
|
|
773
|
+
pending_visibility: agentera_todo_get_list_startup_and_dry_run_fail_closed_without_recovery_effects
|
|
774
|
+
hard_crash_recovery: consume_exact_original_previous_replacement_tmp_and_replacement_metadata_before_target_replay
|
|
775
|
+
startup_selection:
|
|
776
|
+
ordering_authority: skills/agentera/schemas/artifacts/todo.yaml#READINESS.ordering.modes.projected_startup
|
|
777
|
+
projected_entity_bound: 256
|
|
778
|
+
public_replacement: >-
|
|
779
|
+
Stage and fsync complete replacement bytes plus exact prior bytes on the
|
|
780
|
+
target filesystem, then replace each regular file with standard Node
|
|
781
|
+
filesystem operations. Each replacement linearizes as one complete-file
|
|
782
|
+
rename, so readers observe complete old or new bytes. The journal is a
|
|
783
|
+
read barrier and recovery authority, not a global multi-file atomic
|
|
784
|
+
snapshot. Publication validates the target and project context at
|
|
785
|
+
declared boundaries and preserves a change detected at a validation
|
|
786
|
+
boundary. A non-cooperating writer that races after the final successful
|
|
787
|
+
validation is outside this contract. Cross-filesystem or operational
|
|
788
|
+
filesystem rejection rolls back every attempted target before returning
|
|
789
|
+
one bounded correction. Recovery consumes exact private roles;
|
|
790
|
+
concurrent bytes remain canonical or retained and produce one structured
|
|
791
|
+
correction.
|
|
792
|
+
semantics: >-
|
|
793
|
+
TODO reads project Markdown-owned public fields and order with
|
|
794
|
+
Agentera-owned operational fields, report bounded field-level drift,
|
|
795
|
+
and have no reconciliation effects. Startup builds one complete
|
|
796
|
+
bounded projection through that same read authority; readiness,
|
|
797
|
+
dependency state, selection, and counts all consume its projected
|
|
798
|
+
status, severity, and order while retaining operational readiness and
|
|
799
|
+
gates. Eligibility and severity grouping apply before managed Markdown
|
|
800
|
+
order. An entity intentionally absent from managed Markdown sorts after
|
|
801
|
+
managed rows of the same severity by queue rank and then ID.
|
|
802
|
+
Every TODO mutation compares
|
|
803
|
+
TODO.md and the entity against the last public baseline, merges
|
|
804
|
+
one-sided or independent field edits, rejects different edits to the
|
|
805
|
+
same public field, applies the requested mutation, and publishes all
|
|
806
|
+
changed targets under one recoverable journal. Interrupted create retry
|
|
807
|
+
is bound to its canonical normalized request and original created ID;
|
|
808
|
+
exact retry returns that ID without allocating another entity, while a
|
|
809
|
+
different request rejects before recovery effects. Missing post-activation
|
|
810
|
+
baselines, divergent edits, duplicate or orphaned IDs, and removal of an
|
|
811
|
+
unchecked row reject before effects. One bounded activation
|
|
812
|
+
transaction admits exact legacy state
|
|
813
|
+
without treating retained unmatched rows as managed. The durable
|
|
814
|
+
journal is the Agentera-visible commit barrier:
|
|
815
|
+
while it exists, TODO reads and startup reject rather than expose mixed
|
|
816
|
+
targets, and dry-run inspects it without recovery effects. Each ordinary
|
|
817
|
+
file replacement remains whole-file atomic. A non-dry retry repairs a
|
|
818
|
+
target interrupted before or after replacement from exact retained role
|
|
819
|
+
files, and recovers the public document from the same portable
|
|
820
|
+
complete-file roles, then completes the prepared journal before
|
|
821
|
+
replaying the request. Invalid journals and stale or retained-role
|
|
822
|
+
conflicts preserve all target and recovery bytes and return one
|
|
823
|
+
bounded structured correction. Recovery is bound to the exact
|
|
824
|
+
docs-mapped public path and mapping snapshot; unrelated branch,
|
|
825
|
+
competitor, or mapping changes are never overwritten.
|
|
826
|
+
Rollback attempts every applied target even when one target reports a
|
|
827
|
+
boundary conflict; it retains the pending journal and bounded per-target role
|
|
828
|
+
evidence for only the targets that could not be restored.
|
|
829
|
+
bounds:
|
|
830
|
+
managed_items: 256
|
|
831
|
+
startup_projected_entities: 256
|
|
832
|
+
retained_pre_activation_legacy_rows: 256
|
|
833
|
+
transaction_targets: 258
|
|
834
|
+
activation_utf8_bytes: 32768
|
|
835
|
+
journal_utf8_bytes: 4194304
|
|
836
|
+
todo_markdown_utf8_bytes: 1048576
|
|
496
837
|
retrieval:
|
|
497
838
|
exact: agentera state todo get --id ID --format json
|
|
498
|
-
list: agentera state todo list [--limit N] [--cursor TOKEN] --format json
|
|
499
|
-
ordering:
|
|
839
|
+
list: agentera state todo list [--limit N] [--cursor TOKEN] [--ids-only | --fields FIELDS] --format json
|
|
840
|
+
ordering: severity_then_status_then_markdown_order_then_id
|
|
500
841
|
default_limit: 20
|
|
501
842
|
maximum_limit: 100
|
|
502
843
|
max_utf8_bytes: 32768
|
|
@@ -516,7 +857,7 @@ entity_target:
|
|
|
516
857
|
forbidden_fields: [id, artifact, number, stable_id, artifact_id, entry_number]
|
|
517
858
|
retrieval:
|
|
518
859
|
exact: agentera state docs get --id ID --format json
|
|
519
|
-
list: agentera state docs list [--limit N] [--cursor TOKEN] --format json
|
|
860
|
+
list: agentera state docs list [--limit N] [--cursor TOKEN] [--ids-only | --fields FIELDS] --format json
|
|
520
861
|
ordering: path_then_id
|
|
521
862
|
default_limit: 20
|
|
522
863
|
maximum_limit: 100
|
|
@@ -688,7 +1029,7 @@ entity_target:
|
|
|
688
1029
|
source_row_provenance: entity_target.declared_compacted_summary_contract.source_row_provenance
|
|
689
1030
|
retrieval:
|
|
690
1031
|
exact: agentera state progress get --id ID --format json
|
|
691
|
-
list: agentera state progress list [--limit N] [--cursor TOKEN] --format json
|
|
1032
|
+
list: agentera state progress list [--limit N] [--cursor TOKEN] [--ids-only | --fields FIELDS] --format json
|
|
692
1033
|
detail_availability: summary
|
|
693
1034
|
compatibility: degraded
|
|
694
1035
|
caveats: required
|
|
@@ -726,7 +1067,7 @@ entity_target:
|
|
|
726
1067
|
source_row_provenance: entity_target.declared_compacted_summary_contract.source_row_provenance
|
|
727
1068
|
retrieval:
|
|
728
1069
|
exact: agentera state decisions get --id ID --format json
|
|
729
|
-
list: agentera state decisions list [--limit N] [--cursor TOKEN] --format json
|
|
1070
|
+
list: agentera state decisions list [--limit N] [--cursor TOKEN] [--ids-only | --fields FIELDS] --format json
|
|
730
1071
|
detail_availability: summary
|
|
731
1072
|
compatibility: degraded
|
|
732
1073
|
caveats: required
|
|
@@ -760,7 +1101,7 @@ entity_target:
|
|
|
760
1101
|
source_row_provenance: entity_target.declared_compacted_summary_contract.source_row_provenance
|
|
761
1102
|
retrieval:
|
|
762
1103
|
exact: agentera state health get --id ID --format json
|
|
763
|
-
list: agentera state health list [--limit N] [--cursor TOKEN] --format json
|
|
1104
|
+
list: agentera state health list [--limit N] [--cursor TOKEN] [--ids-only | --fields FIELDS] --format json
|
|
764
1105
|
detail_availability: summary
|
|
765
1106
|
compatibility: degraded
|
|
766
1107
|
caveats: required
|
|
@@ -1087,9 +1428,10 @@ scope:
|
|
|
1087
1428
|
- objective
|
|
1088
1429
|
- experiments
|
|
1089
1430
|
|
|
1090
|
-
|
|
1091
|
-
schema_version: agentera.
|
|
1092
|
-
status:
|
|
1431
|
+
historical_retrieval_evidence:
|
|
1432
|
+
schema_version: agentera.stateRetrievalHistory.v1
|
|
1433
|
+
status: retired_historical_evidence
|
|
1434
|
+
runtime_consumption: forbidden
|
|
1093
1435
|
implementation:
|
|
1094
1436
|
plan_tasks: implemented
|
|
1095
1437
|
plans: implemented
|
|
@@ -1098,10 +1440,9 @@ retrieval:
|
|
|
1098
1440
|
decisions: implemented
|
|
1099
1441
|
health: implemented
|
|
1100
1442
|
authority_boundary: >-
|
|
1101
|
-
This group
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
cutover marker; retained v2 aggregates are immutable migration evidence only.
|
|
1443
|
+
This inert group records pre-entity retrieval closure evidence only. It does
|
|
1444
|
+
not own runtime grammar or policy; entity_target.public_retrieval is the sole
|
|
1445
|
+
active public retrieval model.
|
|
1105
1446
|
envelope:
|
|
1106
1447
|
schema_version: agentera.stateRetrieval.v1
|
|
1107
1448
|
required_fields:
|
|
@@ -1140,6 +1481,54 @@ retrieval:
|
|
|
1140
1481
|
timestamped or dated full rows and then by canonical ID ascending.
|
|
1141
1482
|
counts_required_fields: [total, returned, remaining, omitted]
|
|
1142
1483
|
status_values: [ok, degraded]
|
|
1484
|
+
bounded_summary_projection:
|
|
1485
|
+
cardinality_owner: summary_rows_after_filters_and_cursor
|
|
1486
|
+
limit_semantics: >-
|
|
1487
|
+
Return exactly min(requested limit, candidates remaining in the bound
|
|
1488
|
+
snapshot) summary rows. Serialized-byte pressure may remove optional
|
|
1489
|
+
full detail from those rows but never removes a summary row.
|
|
1490
|
+
summary_required_fields: [id, artifact, retrieval.get]
|
|
1491
|
+
todo_summary_additional_fields: [queue_rank]
|
|
1492
|
+
queue_rank: >-
|
|
1493
|
+
One-based position in the complete canonically ordered TODO candidate
|
|
1494
|
+
queue before request filters. It is computed from the read snapshot and
|
|
1495
|
+
does not persist, reorder, or add a public field to TODO.md.
|
|
1496
|
+
optional_detail_degradation:
|
|
1497
|
+
status: degraded
|
|
1498
|
+
reason: optional_detail_byte_budget
|
|
1499
|
+
row_omission: forbidden
|
|
1500
|
+
scalar_truncation: forbidden
|
|
1501
|
+
recovery: exact_get_pointer_per_summary_row
|
|
1502
|
+
selectors:
|
|
1503
|
+
ids_only:
|
|
1504
|
+
flag: --ids-only
|
|
1505
|
+
fields: [id, artifact, retrieval.get]
|
|
1506
|
+
todo_additional_fields: [queue_rank]
|
|
1507
|
+
fields:
|
|
1508
|
+
flag: --fields COMMA_SEPARATED_RECORD_PATHS
|
|
1509
|
+
validation: >-
|
|
1510
|
+
Each lowercase dot path must exist in at least one record in the
|
|
1511
|
+
filtered cursor snapshot. Duplicate or malformed paths and paths
|
|
1512
|
+
absent from that snapshot are invalid_request. Paths are sorted
|
|
1513
|
+
before projection and cursor binding; missing values in individual
|
|
1514
|
+
rows remain absent.
|
|
1515
|
+
identity_and_recovery_fields_always_present: true
|
|
1516
|
+
scalar_truncation: forbidden
|
|
1517
|
+
mutual_exclusion: ids_only_and_fields
|
|
1518
|
+
byte_pressure:
|
|
1519
|
+
ids_only_or_selected_fields: reject_without_partial_rows_or_fields
|
|
1520
|
+
summary_rows: reject_without_partial_rows
|
|
1521
|
+
metadata:
|
|
1522
|
+
counts: [candidate, returned, omitted, continuation]
|
|
1523
|
+
continuation: binds_collection_selectors_filters_order_and_snapshot
|
|
1524
|
+
continuation_command: >-
|
|
1525
|
+
Preserve every active family identifier, filter, selector, limit, and
|
|
1526
|
+
cursor in deterministic grammar order. Quote every non-literal string
|
|
1527
|
+
argument with the shared POSIX-shell argument primitive; generated
|
|
1528
|
+
commands must be safe to paste and must not permit expansion or
|
|
1529
|
+
injection through spaces, quotes, dollar signs, semicolons, or other
|
|
1530
|
+
shell metacharacters.
|
|
1531
|
+
exact_get: one_concrete_command_per_returned_row
|
|
1143
1532
|
cursor:
|
|
1144
1533
|
vocabulary: opaque_snapshot_cursor
|
|
1145
1534
|
first_page: omit --cursor
|
|
@@ -1171,134 +1560,8 @@ retrieval:
|
|
|
1171
1560
|
maximum_limit: 100
|
|
1172
1561
|
max_serialized_utf8_bytes: 32768
|
|
1173
1562
|
scalar_truncation: forbidden
|
|
1174
|
-
omission_unit:
|
|
1175
|
-
|
|
1176
|
-
plan:
|
|
1177
|
-
canonical_format: 'plan:<lowercase-rfc9562-uuid>'
|
|
1178
|
-
persistence: stored in header.id when a plan is first published
|
|
1179
|
-
transition: the identical ID is copied unchanged into the immutable archive file
|
|
1180
|
-
legacy_format: 'legacy-plan:<sha256>'
|
|
1181
|
-
legacy_derivation: >-
|
|
1182
|
-
SHA-256 over RFC 8785 canonical JSON of the complete plan after the
|
|
1183
|
-
existing read-compatibility normalization of legacy status and task
|
|
1184
|
-
shape. The archive transition computes identity from the same normalized
|
|
1185
|
-
document before publication. Derivation is read-only and never rewrites
|
|
1186
|
-
active or archived bytes; a legacy identity may change while an active
|
|
1187
|
-
legacy plan is edited because no persisted historical identity exists.
|
|
1188
|
-
test_vectors:
|
|
1189
|
-
- canonical_json: '{"header":{"created":"2026-07-14","status":"open","title":"Plan: Complete bounded retrieval"},"tasks":[]}'
|
|
1190
|
-
stable_id: legacy-plan:b6f93d6fc5a0ac3ada017670ac311794ad92800fb436703f8f09e25ddce8b89a
|
|
1191
|
-
mirrored_example_paths: [.agentera/archive/PLAN-copy-a.yaml, .agentera/archive/PLAN-copy-b.yaml]
|
|
1192
|
-
identical_result: mirrored_provenance
|
|
1193
|
-
collision: >-
|
|
1194
|
-
Byte-equivalent normalized legacy plans are one logical identity with
|
|
1195
|
-
every physical path retained as mirrored provenance. Different plan
|
|
1196
|
-
documents carrying the same persisted ID, or a detected digest collision,
|
|
1197
|
-
are unaddressable; list reports compatibility=degraded and get returns
|
|
1198
|
-
ambiguous with every candidate provenance path. The CLI never chooses by
|
|
1199
|
-
mtime, archive filename, or discovery order.
|
|
1200
|
-
task:
|
|
1201
|
-
format: '<plan-id>/task:<positive-integer>'
|
|
1202
|
-
selector: --task N
|
|
1203
|
-
scope: task numbers are unique only inside one plan identity
|
|
1204
|
-
objective:
|
|
1205
|
-
canonical_format: 'objective:<lowercase-rfc9562-uuid>'
|
|
1206
|
-
persistence: stored in header.id and unchanged by title or directory rename
|
|
1207
|
-
canonical_root: .agentera/optimize/<objective-slug>
|
|
1208
|
-
legacy_root: .agentera/optimera/<objective-slug>
|
|
1209
|
-
legacy_format: 'legacy-objective:<sha256>'
|
|
1210
|
-
legacy_derivation: >-
|
|
1211
|
-
SHA-256 over RFC 8785 canonical JSON of the legacy objective's description,
|
|
1212
|
-
measurement, metric, baseline, gates, constraints, and scope; title,
|
|
1213
|
-
status, closure fields, directory root, and directory slug are excluded.
|
|
1214
|
-
This preserves identity across a title/path-only rename without rewriting
|
|
1215
|
-
history. Editing identity inputs may change a legacy identity and is
|
|
1216
|
-
reported as degraded compatibility.
|
|
1217
|
-
test_vectors:
|
|
1218
|
-
- canonical_json: '{"baseline":{"description":"100 ms"},"constraints":[],"description":"Reduce latency","gates":{},"measurement":"p95","metric":{"direction":"minimize","unit":"ms"},"scope":{"excluded":[],"included":["CLI"]}}'
|
|
1219
|
-
title_variants: [CLI latency, Faster CLI]
|
|
1220
|
-
root_variants: [.agentera/optimize/cli-latency, .agentera/optimera/faster-cli]
|
|
1221
|
-
stable_id: legacy-objective:aa987d92dadce65b8b2d8f54c741a10f5d024d864cb0ef309b4321b4e19e4ceb
|
|
1222
|
-
path_compatibility: >-
|
|
1223
|
-
Read both optimize and optimera roots. Identical records carrying one
|
|
1224
|
-
persisted objective ID are mirrored provenance. Different records with
|
|
1225
|
-
the same persisted or derived ID, or unresolved candidates in both roots,
|
|
1226
|
-
return ambiguous; canonical-root preference must not hide a collision.
|
|
1227
|
-
experiment:
|
|
1228
|
-
format: '<objective-id>/experiment:<non-negative-integer>'
|
|
1229
|
-
scope: experiment numbers are unique only within one objective identity
|
|
1230
|
-
zero: experiment 0 is valid and is normally the baseline
|
|
1231
|
-
collision: duplicate numbers inside one objective are ambiguous and never resolved by array order
|
|
1232
|
-
compatibility: >-
|
|
1233
|
-
Legacy full-detail or 10/40/50 summary entries with a missing or
|
|
1234
|
-
duplicate number remain visible in reads with addressable=false and an
|
|
1235
|
-
explicit compatibility caveat. Reads do not assign a number, choose a
|
|
1236
|
-
duplicate by array order, migrate a root, or rewrite retained bytes.
|
|
1237
|
-
publication_validation: >-
|
|
1238
|
-
Before any publication effect, require one unambiguous objective
|
|
1239
|
-
identity, a non-negative integer number, and no retained full-detail or
|
|
1240
|
-
summary entry with that number. Ambiguous canonical/legacy objective
|
|
1241
|
-
candidates, missing objective identity, and duplicate experiment
|
|
1242
|
-
identity fail validation without changing bytes.
|
|
1243
|
-
publication:
|
|
1244
|
-
command: agentera state experiments publish --objective OBJECTIVE_ID --number N --input EXPERIMENT.yaml --format json
|
|
1245
|
-
authority: typed_state_writer
|
|
1246
|
-
archive_ownership: experiment_archival
|
|
1247
|
-
storage_scope: objective_directory
|
|
1248
|
-
publication_order: archive_before_projection
|
|
1249
|
-
projection_policy: uniform_10_40_50
|
|
1250
|
-
input: one schema-valid experiment entry without the CLI-owned number field
|
|
1251
|
-
identity_assignment: the CLI assigns the validated --number to the published entry
|
|
1252
|
-
collision_rule: >-
|
|
1253
|
-
An existing matching identity and byte-equivalent experiment is an
|
|
1254
|
-
idempotent replay; the same identity with different content is a
|
|
1255
|
-
collision and leaves the projection unchanged.
|
|
1256
|
-
transaction: >-
|
|
1257
|
-
Validate objective identity, canonical/legacy ambiguity, experiment
|
|
1258
|
-
identity, existing projection schema, caller input schema, and final
|
|
1259
|
-
projection bytes before atomically replacing experiments.yaml.
|
|
1260
|
-
failure_atomicity: >-
|
|
1261
|
-
Validation, staging, and pre-publication failures preserve both active
|
|
1262
|
-
and one-line archive bytes. An interruption after atomic replacement
|
|
1263
|
-
may report failure after publication; retrying the same command must
|
|
1264
|
-
return the already-published entry without duplication.
|
|
1265
|
-
scope_boundary: >-
|
|
1266
|
-
Publication preserves the existing 10/40/50 projection contract and
|
|
1267
|
-
durably publishes its objective-scoped immutable archive before
|
|
1268
|
-
replacing the projection, as owned by experiment_archival.
|
|
1269
|
-
commands:
|
|
1270
|
-
plan_tasks:
|
|
1271
|
-
list: agentera state plan tasks list [--plan PLAN_ID] [--limit N] [--cursor TOKEN] --format json
|
|
1272
|
-
get: agentera state plan tasks get [--plan PLAN_ID] --task N --format json
|
|
1273
|
-
selectors:
|
|
1274
|
-
plan:
|
|
1275
|
-
list_required: false
|
|
1276
|
-
list_default: active plan resolved once and returned as filters.plan
|
|
1277
|
-
get_required: false
|
|
1278
|
-
get_default: active plan resolved once and returned in the response source
|
|
1279
|
-
pattern: '^(plan:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|legacy-plan:[0-9a-f]{64})$'
|
|
1280
|
-
task:
|
|
1281
|
-
get_required: true
|
|
1282
|
-
pattern: '^[1-9][0-9]*$'
|
|
1283
|
-
plans:
|
|
1284
|
-
list: agentera state plan list [--limit N] [--cursor TOKEN] --format json
|
|
1285
|
-
get: agentera state plan get --plan PLAN_ID --format json
|
|
1286
|
-
selectors:
|
|
1287
|
-
plan:
|
|
1288
|
-
get_required: true
|
|
1289
|
-
pattern: '^(plan:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|legacy-plan:[0-9a-f]{64})$'
|
|
1290
|
-
experiments:
|
|
1291
|
-
list: agentera state experiments list --objective OBJECTIVE_ID [--limit N] [--cursor TOKEN] --format json
|
|
1292
|
-
get: agentera state experiments get --objective OBJECTIVE_ID --number N --format json
|
|
1293
|
-
publish: agentera state experiments publish --objective OBJECTIVE_ID --number N --input EXPERIMENT.yaml --format json
|
|
1294
|
-
selectors:
|
|
1295
|
-
objective:
|
|
1296
|
-
list_required: true
|
|
1297
|
-
get_required: true
|
|
1298
|
-
pattern: '^(objective:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|legacy-objective:[0-9a-f]{64})$'
|
|
1299
|
-
number:
|
|
1300
|
-
get_required: true
|
|
1301
|
-
pattern: '^(0|[1-9][0-9]*)$'
|
|
1563
|
+
omission_unit: candidates_beyond_the_summary_row_window
|
|
1564
|
+
optional_detail: degrade_before_any_summary_row_omission
|
|
1302
1565
|
failures:
|
|
1303
1566
|
schema_version: agentera.stateFailure.v1
|
|
1304
1567
|
required_fields: [class, message, syntax, example, recovery]
|
|
@@ -1365,7 +1628,7 @@ retrieval:
|
|
|
1365
1628
|
growth: mutable_while_plan_active_then_immutable_with_archived_plan
|
|
1366
1629
|
identity: retrieval.identity.task
|
|
1367
1630
|
storage_ownership: owning_active_plan_file
|
|
1368
|
-
ordering:
|
|
1631
|
+
ordering: id_asc
|
|
1369
1632
|
bounds: count_1_to_100_and_serialized_utf8_budget
|
|
1370
1633
|
cursor: opaque_snapshot_cursor
|
|
1371
1634
|
omission: explicit_with_advancing_cursor_or_exact_get
|
|
@@ -1938,7 +2201,7 @@ api:
|
|
|
1938
2201
|
compose immutable base, ordered revisions, and current satisfaction entities.
|
|
1939
2202
|
exact_only: direct retrieval resolves one canonical entity ID without scanning unrelated records
|
|
1940
2203
|
list:
|
|
1941
|
-
command: agentera state <artifact-id> list [--limit N] [--cursor TOKEN] --format json
|
|
2204
|
+
command: agentera state <artifact-id> list [--limit N] [--cursor TOKEN] [--ids-only | --fields FIELDS] --format json
|
|
1942
2205
|
examples:
|
|
1943
2206
|
progress: agentera state progress list --limit 20 --format json
|
|
1944
2207
|
decisions_next_page: agentera state decisions list --limit 20 --cursor TOKEN --format json
|
|
@@ -2146,6 +2409,8 @@ budgets:
|
|
|
2146
2409
|
list:
|
|
2147
2410
|
max_utf8_bytes: 32768
|
|
2148
2411
|
benchmark:
|
|
2412
|
+
measurement_contract: entity_target.measurement_contract.sampling
|
|
2413
|
+
fixture: numbered progress archive entries measured through one cold source process per scale
|
|
2149
2414
|
small:
|
|
2150
2415
|
entries: 100
|
|
2151
2416
|
max_latency_ms: 5000
|
|
@@ -2231,6 +2496,435 @@ budgets:
|
|
|
2231
2496
|
status, mode, state_presence, a brief source_contract, and the
|
|
2232
2497
|
byte-budget error with a recovery command; never emit an over-budget
|
|
2233
2498
|
payload. Diagnostics are measured on stderr separately.
|
|
2234
|
-
|
|
2235
|
-
|
|
2236
|
-
|
|
2499
|
+
validation:
|
|
2500
|
+
authority: this file plus the referenced JSON surface manifest
|
|
2501
|
+
drift_rule: tests fail if manifest IDs or byte values disagree with this contract
|
|
2502
|
+
|
|
2503
|
+
# The mutation grammar is the only declarative inventory of public state writes.
|
|
2504
|
+
# Runtime code owns execution; this section owns the vocabulary, shape, bounds,
|
|
2505
|
+
# recovery, and projections exposed by discovery.
|
|
2506
|
+
mutation_grammar:
|
|
2507
|
+
schema_version: agentera.stateMutationGrammar.v1
|
|
2508
|
+
status: active
|
|
2509
|
+
authority: references/artifacts/state-storage-authority.yaml
|
|
2510
|
+
operation_classes: [record_payload, simple_transition, batch_transaction]
|
|
2511
|
+
contract_scope: public_state_writer_verbs
|
|
2512
|
+
structured_input:
|
|
2513
|
+
parser: yaml_or_json_mapping
|
|
2514
|
+
sources: [file, stdin]
|
|
2515
|
+
flag: --input
|
|
2516
|
+
stdin_value: '-'
|
|
2517
|
+
operations:
|
|
2518
|
+
- artifact: progress
|
|
2519
|
+
verb: append
|
|
2520
|
+
class: record_payload
|
|
2521
|
+
selectors: []
|
|
2522
|
+
preconditions: [entity_mode_marker_is_valid]
|
|
2523
|
+
owned_fields: [id, artifact, publication_order]
|
|
2524
|
+
input:
|
|
2525
|
+
mode: structured
|
|
2526
|
+
root: one progress cycle record
|
|
2527
|
+
sources: [file, stdin]
|
|
2528
|
+
structured_sources: [file, stdin]
|
|
2529
|
+
cli_owned_fields: [id, artifact, publication_order]
|
|
2530
|
+
recovery: Run agentera state progress explain --verb append --format json and correct the rejected field; no state was changed.
|
|
2531
|
+
examples: ['agentera state progress append --input progress.yaml --format json']
|
|
2532
|
+
bounds: { max_input_utf8_bytes: 32768, max_collection_items: 1 }
|
|
2533
|
+
compacts: true
|
|
2534
|
+
fields: []
|
|
2535
|
+
|
|
2536
|
+
- artifact: decisions
|
|
2537
|
+
verb: append
|
|
2538
|
+
class: record_payload
|
|
2539
|
+
selectors: []
|
|
2540
|
+
preconditions: [entity_mode_marker_is_valid, exactly_one_chosen_alternative]
|
|
2541
|
+
owned_fields: [id, artifact]
|
|
2542
|
+
input:
|
|
2543
|
+
mode: structured
|
|
2544
|
+
root: one decision record
|
|
2545
|
+
sources: [file, stdin]
|
|
2546
|
+
structured_sources: [file, stdin]
|
|
2547
|
+
cli_owned_fields: [id, artifact]
|
|
2548
|
+
recovery: Run agentera state decisions explain --verb append --format json and supply every required field; no state was changed.
|
|
2549
|
+
examples: ['agentera state decisions append --input decision.yaml --format json']
|
|
2550
|
+
bounds: { max_input_utf8_bytes: 32768, max_collection_items: 1 }
|
|
2551
|
+
compacts: true
|
|
2552
|
+
fields: []
|
|
2553
|
+
|
|
2554
|
+
- artifact: decisions
|
|
2555
|
+
verb: update
|
|
2556
|
+
class: simple_transition
|
|
2557
|
+
selectors: [--id]
|
|
2558
|
+
preconditions: [entity_mode_marker_is_valid, target_id_is_bare_ten_letters, satisfaction_state_is_valid]
|
|
2559
|
+
owned_fields: [id, artifact, satisfaction]
|
|
2560
|
+
input: { mode: none, sources: [], cli_owned_fields: [] }
|
|
2561
|
+
recovery: Run agentera state decisions explain --verb update --format json, use the returned bare decision ID, and provide a valid satisfaction transition.
|
|
2562
|
+
examples: ['agentera state decisions update --id qjtrmnpvka --satisfaction-state provisionally_satisfied --satisfaction-evidence "..." --format json']
|
|
2563
|
+
bounds: { max_input_utf8_bytes: 0, max_collection_items: 1 }
|
|
2564
|
+
fields:
|
|
2565
|
+
- { flag: --id, field: id, kind: string, required: true }
|
|
2566
|
+
- { flag: --satisfaction-state, field: satisfaction.state, kind: string, required: true, valid_values: [open, provisionally_satisfied, user_confirmed_satisfied] }
|
|
2567
|
+
- { flag: --satisfaction-evidence, field: satisfaction.evidence, kind: string }
|
|
2568
|
+
- { flag: --confirmed-by, field: satisfaction.user_confirmation.confirmed_by, kind: string }
|
|
2569
|
+
- { flag: --confirmed-at, field: satisfaction.user_confirmation.confirmed_at, kind: string }
|
|
2570
|
+
|
|
2571
|
+
- artifact: decisions
|
|
2572
|
+
verb: amend
|
|
2573
|
+
class: record_payload
|
|
2574
|
+
selectors: [--id, --base-sha256]
|
|
2575
|
+
preconditions: [entity_mode_marker_is_valid, target_id_is_bare_ten_letters, base_sha256_matches_current_effective_record]
|
|
2576
|
+
owned_fields: [id, artifact, base_sha256]
|
|
2577
|
+
input:
|
|
2578
|
+
mode: structured
|
|
2579
|
+
root: amendable decision content
|
|
2580
|
+
sources: [file, stdin]
|
|
2581
|
+
structured_sources: [file, stdin]
|
|
2582
|
+
cli_owned_fields: [id, artifact, base_sha256]
|
|
2583
|
+
recovery: Reread the exact decision, copy its current effective SHA-256, and retry with at least one amendable field; no state was changed.
|
|
2584
|
+
examples: ['agentera state decisions amend --id qjtrmnpvka --base-sha256 HASH --input amendment.yaml --format json']
|
|
2585
|
+
bounds: { max_input_utf8_bytes: 32768, max_collection_items: 1 }
|
|
2586
|
+
fields:
|
|
2587
|
+
- { flag: --id, field: id, kind: string, required: true }
|
|
2588
|
+
- { flag: --base-sha256, field: base_sha256, kind: string, required: true }
|
|
2589
|
+
|
|
2590
|
+
- artifact: plan
|
|
2591
|
+
verb: append
|
|
2592
|
+
class: record_payload
|
|
2593
|
+
selectors: [--plan]
|
|
2594
|
+
preconditions: [entity_mode_marker_is_valid, selected_plan_is_open, input_is_one_complete_plan_task_record, task_dependencies_are_bare_ids_in_same_plan]
|
|
2595
|
+
owned_fields: [id, artifact, plan, status, superseded_by, superseded_reason, evaluation, header.status, header.id, previous_plan_archived, task_ids]
|
|
2596
|
+
input:
|
|
2597
|
+
mode: structured
|
|
2598
|
+
root: one plan task record
|
|
2599
|
+
sources: [file, stdin]
|
|
2600
|
+
structured_sources: [file, stdin]
|
|
2601
|
+
cli_owned_fields: [id, artifact, plan, status, superseded_by, superseded_reason, evaluation, header.status, header.id, previous_plan_archived, task_ids]
|
|
2602
|
+
recovery: Use agentera state plan explain --verb append --format json, select an open plan, and supply one complete task record with bare same-plan dependencies.
|
|
2603
|
+
examples: ['agentera state plan append --plan qjtrmnpvka --input task.yaml --format json']
|
|
2604
|
+
bounds: { max_input_utf8_bytes: 32768, max_collection_items: 1 }
|
|
2605
|
+
fields:
|
|
2606
|
+
- { flag: --plan, field: plan, kind: string }
|
|
2607
|
+
|
|
2608
|
+
- artifact: plan
|
|
2609
|
+
verb: update
|
|
2610
|
+
class: record_payload
|
|
2611
|
+
selectors: [--id, --plan]
|
|
2612
|
+
preconditions: [entity_mode_marker_is_valid, target_id_is_bare_ten_letters, selected_plan_is_open, input_is_plan_task_patch, task_dependencies_are_bare_ids_in_same_plan]
|
|
2613
|
+
owned_fields: [id, artifact, plan, status, superseded_by, superseded_reason, evaluation, header.status, header.id, previous_plan_archived, task_ids]
|
|
2614
|
+
input:
|
|
2615
|
+
mode: structured
|
|
2616
|
+
root: plan task patch
|
|
2617
|
+
sources: [file, stdin]
|
|
2618
|
+
structured_sources: [file, stdin]
|
|
2619
|
+
cli_owned_fields: [id, artifact, plan, status, superseded_by, superseded_reason, evaluation, header.status, header.id, previous_plan_archived, task_ids]
|
|
2620
|
+
recovery: Reread the plan task by its bare ID, supply an omission-preserving patch through --input, and retry; no state was changed.
|
|
2621
|
+
examples: ['agentera state plan update --id qjtrmnpvka --plan abcdefghij --input task-patch.yaml --format json']
|
|
2622
|
+
bounds: { max_input_utf8_bytes: 32768, max_collection_items: 1 }
|
|
2623
|
+
fields:
|
|
2624
|
+
- { flag: --id, field: id, kind: string, required: true }
|
|
2625
|
+
- { flag: --plan, field: plan, kind: string }
|
|
2626
|
+
|
|
2627
|
+
- artifact: plan
|
|
2628
|
+
verb: set-status
|
|
2629
|
+
class: simple_transition
|
|
2630
|
+
selectors: [--id, --plan]
|
|
2631
|
+
preconditions: [entity_mode_marker_is_valid, target_id_is_bare_ten_letters, task_exists_in_selected_plan]
|
|
2632
|
+
owned_fields: [id, artifact, plan, status]
|
|
2633
|
+
input: { mode: none, sources: [], cli_owned_fields: [] }
|
|
2634
|
+
recovery: Reread the task list, copy its bare task ID, and use one of complete, in_progress, pending, or blocked.
|
|
2635
|
+
examples: ['agentera state plan set-status --id qjtrmnpvka --status complete --format json']
|
|
2636
|
+
bounds: { max_input_utf8_bytes: 0, max_collection_items: 1 }
|
|
2637
|
+
fields:
|
|
2638
|
+
- { flag: --id, field: id, kind: string, required: true }
|
|
2639
|
+
- { flag: --plan, field: plan, kind: string }
|
|
2640
|
+
- { flag: --status, field: status, kind: string, required: true, valid_values: [complete, in_progress, pending, blocked] }
|
|
2641
|
+
|
|
2642
|
+
- artifact: plan
|
|
2643
|
+
verb: supersede
|
|
2644
|
+
class: simple_transition
|
|
2645
|
+
selectors: [--id, --plan]
|
|
2646
|
+
preconditions: [entity_mode_marker_is_valid, target_id_is_bare_ten_letters, replacements_are_distinct_same_plan_complete_latest_pass]
|
|
2647
|
+
owned_fields: [id, artifact, plan, superseded_by, superseded_reason]
|
|
2648
|
+
input: { mode: none, sources: [], cli_owned_fields: [] }
|
|
2649
|
+
recovery: Complete and evaluate each replacement task with latest PASS evidence, then retry with the returned bare IDs.
|
|
2650
|
+
examples: ['agentera state plan supersede --id qjtrmnpvka --by zqtrmnpvka --reason "Replacement task" --format json']
|
|
2651
|
+
bounds: { max_input_utf8_bytes: 0, max_collection_items: 100, max_reason_code_points: 500 }
|
|
2652
|
+
fields:
|
|
2653
|
+
- { flag: --id, field: id, kind: string, required: true }
|
|
2654
|
+
- { flag: --plan, field: plan, kind: string }
|
|
2655
|
+
- { flag: --by, field: superseded_by, kind: string_list, required: true, repeatable: true }
|
|
2656
|
+
- { flag: --reason, field: superseded_reason, kind: string, required: true }
|
|
2657
|
+
|
|
2658
|
+
- artifact: plan
|
|
2659
|
+
verb: set-plan-status
|
|
2660
|
+
class: simple_transition
|
|
2661
|
+
selectors: [--plan]
|
|
2662
|
+
preconditions: [entity_mode_marker_is_valid, selected_plan_is_open_or_complete, completion_requires_complete_tasks_and_latest_pass_replacements]
|
|
2663
|
+
owned_fields: [id, artifact, plan, header.status]
|
|
2664
|
+
input: { mode: none, sources: [], cli_owned_fields: [] }
|
|
2665
|
+
recovery: Keep the plan open or resolve every incomplete task and replacement evaluation before retrying completion.
|
|
2666
|
+
examples: ['agentera state plan set-plan-status --status complete --format json']
|
|
2667
|
+
bounds: { max_input_utf8_bytes: 0, max_collection_items: 100 }
|
|
2668
|
+
fields:
|
|
2669
|
+
- { flag: --plan, field: plan, kind: string }
|
|
2670
|
+
- { flag: --status, field: status, kind: string, required: true, valid_values: [open, complete] }
|
|
2671
|
+
|
|
2672
|
+
- artifact: plan
|
|
2673
|
+
verb: record-evaluation
|
|
2674
|
+
class: simple_transition
|
|
2675
|
+
selectors: [--id, --plan]
|
|
2676
|
+
preconditions: [entity_mode_marker_is_valid, target_id_is_bare_ten_letters, attempt_id_is_idempotent, verdict_is_pass_or_fail]
|
|
2677
|
+
owned_fields: [id, artifact, plan, evaluation]
|
|
2678
|
+
input: { mode: none, sources: [], cli_owned_fields: [] }
|
|
2679
|
+
recovery: Use the task's bare ID, a stable attempt ID, and evaluator provenance, then retry without changing published evidence.
|
|
2680
|
+
examples: ['agentera state plan record-evaluation --id qjtrmnpvka --attempt-id audit-1 --verdict pass --provenance "audit report" --format json']
|
|
2681
|
+
bounds: { max_input_utf8_bytes: 0, max_collection_items: 1 }
|
|
2682
|
+
fields:
|
|
2683
|
+
- { flag: --id, field: id, kind: string, required: true }
|
|
2684
|
+
- { flag: --plan, field: plan, kind: string }
|
|
2685
|
+
- { flag: --attempt-id, field: evaluation.attempt_id, kind: string, required: true }
|
|
2686
|
+
- { flag: --verdict, field: evaluation.verdict, kind: string, required: true, valid_values: [pass, fail] }
|
|
2687
|
+
- { flag: --failure-evidence, field: evaluation.failure_evidence, kind: string }
|
|
2688
|
+
- { flag: --provenance, field: evaluation.provenance, kind: string, required: true }
|
|
2689
|
+
|
|
2690
|
+
- artifact: plan
|
|
2691
|
+
verb: archive
|
|
2692
|
+
class: simple_transition
|
|
2693
|
+
selectors: [--plan]
|
|
2694
|
+
preconditions: [entity_mode_marker_is_valid, selected_plan_is_not_open]
|
|
2695
|
+
owned_fields: [id, artifact, plan, header.status]
|
|
2696
|
+
input: { mode: none, sources: [], cli_owned_fields: [] }
|
|
2697
|
+
recovery: Complete or preserve the selected plan, then retry archive with no content flags; no state was changed.
|
|
2698
|
+
examples: ['agentera state plan archive --dry-run --format json']
|
|
2699
|
+
bounds: { max_input_utf8_bytes: 0, max_collection_items: 100 }
|
|
2700
|
+
allow_force: true
|
|
2701
|
+
fields: [{ flag: --plan, field: plan, kind: string }]
|
|
2702
|
+
|
|
2703
|
+
- artifact: plan
|
|
2704
|
+
verb: create
|
|
2705
|
+
class: batch_transaction
|
|
2706
|
+
selectors: []
|
|
2707
|
+
preconditions: [entity_mode_marker_is_valid, input_is_one_complete_plan_document, create_local_task_ordinals_are_sequential, dependency_graph_is_valid]
|
|
2708
|
+
owned_fields: [id, artifact, header.id, previous_plan_archived, task_ids]
|
|
2709
|
+
input:
|
|
2710
|
+
mode: structured
|
|
2711
|
+
root: complete plan document
|
|
2712
|
+
sources: [file, stdin]
|
|
2713
|
+
cli_owned_fields: [id, artifact, header.id, previous_plan_archived, task_ids]
|
|
2714
|
+
recovery: Run agentera state plan explain --verb create --format json, keep task ordinals and dependencies local to this atomic input, remove CLI-owned fields, and correct the first schema or dependency violation.
|
|
2715
|
+
examples: ['agentera state plan create --input plan.yaml --format json']
|
|
2716
|
+
bounds: { max_input_utf8_bytes: 32768, max_collection_items: 100 }
|
|
2717
|
+
allow_force: true
|
|
2718
|
+
fields: []
|
|
2719
|
+
|
|
2720
|
+
- artifact: health
|
|
2721
|
+
verb: append
|
|
2722
|
+
class: record_payload
|
|
2723
|
+
selectors: []
|
|
2724
|
+
preconditions: [entity_mode_marker_is_valid, input_is_one_audit_entry_not_a_whole_artifact]
|
|
2725
|
+
owned_fields: [id, artifact, appended_at]
|
|
2726
|
+
input:
|
|
2727
|
+
mode: structured
|
|
2728
|
+
root: one audit entry
|
|
2729
|
+
sources: [file, stdin]
|
|
2730
|
+
cli_owned_fields: [id, artifact, appended_at]
|
|
2731
|
+
recovery: Run agentera check validate state --format json, preserve audit evidence, and retry with one schema-valid audit entry.
|
|
2732
|
+
examples: ['agentera state health append --input audit.yaml --format json']
|
|
2733
|
+
bounds: { max_input_utf8_bytes: 32768, max_collection_items: 100 }
|
|
2734
|
+
compacts: true
|
|
2735
|
+
fields: []
|
|
2736
|
+
|
|
2737
|
+
- artifact: objective
|
|
2738
|
+
verb: create
|
|
2739
|
+
class: record_payload
|
|
2740
|
+
selectors: []
|
|
2741
|
+
preconditions: [entity_mode_marker_is_valid, input_is_one_objective_document]
|
|
2742
|
+
owned_fields: [id, artifact, header.id]
|
|
2743
|
+
input:
|
|
2744
|
+
mode: structured
|
|
2745
|
+
root: one objective document
|
|
2746
|
+
sources: [file, stdin]
|
|
2747
|
+
cli_owned_fields: [id, artifact, header.id]
|
|
2748
|
+
recovery: Remove identity fields assigned by the CLI and retry with one schema-valid objective document.
|
|
2749
|
+
examples: ['agentera state objective create --input objective.yaml --format json']
|
|
2750
|
+
bounds: { max_input_utf8_bytes: 32768, max_collection_items: 1 }
|
|
2751
|
+
fields: []
|
|
2752
|
+
|
|
2753
|
+
- artifact: objective
|
|
2754
|
+
verb: update
|
|
2755
|
+
class: record_payload
|
|
2756
|
+
selectors: [--id]
|
|
2757
|
+
preconditions: [entity_mode_marker_is_valid, target_id_is_bare_ten_letters, input_is_one_objective_document]
|
|
2758
|
+
owned_fields: [id, artifact, header.id]
|
|
2759
|
+
input:
|
|
2760
|
+
mode: structured
|
|
2761
|
+
root: one objective document
|
|
2762
|
+
sources: [file, stdin]
|
|
2763
|
+
cli_owned_fields: [id, artifact, header.id]
|
|
2764
|
+
recovery: Reread the objective, copy its bare ID to --id, remove CLI-owned fields, and retry.
|
|
2765
|
+
examples: ['agentera state objective update --id qjtrmnpvka --input objective.yaml --format json']
|
|
2766
|
+
bounds: { max_input_utf8_bytes: 32768, max_collection_items: 1 }
|
|
2767
|
+
fields: [{ flag: --id, field: id, kind: string, required: true }]
|
|
2768
|
+
|
|
2769
|
+
- artifact: experiments
|
|
2770
|
+
verb: publish
|
|
2771
|
+
class: batch_transaction
|
|
2772
|
+
selectors: [--objective, --id]
|
|
2773
|
+
preconditions: [entity_mode_marker_is_valid, owner_is_bare_ten_letters, input_is_one_experiment_entry, archive_and_projection_publication_is_atomic]
|
|
2774
|
+
owned_fields: [id, artifact, objective, archive_identity]
|
|
2775
|
+
input:
|
|
2776
|
+
mode: structured
|
|
2777
|
+
root: one experiment entry
|
|
2778
|
+
sources: [file, stdin]
|
|
2779
|
+
cli_owned_fields: [id, artifact, objective]
|
|
2780
|
+
recovery: Use a bare objective ID, omit numeric legacy selectors, and retry the exact input; divergent immutable identities remain untouched.
|
|
2781
|
+
examples: ['agentera state experiments publish --objective qjtrmnpvka --input experiment.yaml --format json']
|
|
2782
|
+
bounds: { max_input_utf8_bytes: 32768, max_collection_items: 100 }
|
|
2783
|
+
compacts: true
|
|
2784
|
+
fields:
|
|
2785
|
+
- { flag: --objective, field: objective, kind: string, required: true }
|
|
2786
|
+
- { flag: --id, field: id, kind: string }
|
|
2787
|
+
|
|
2788
|
+
- artifact: todo
|
|
2789
|
+
verb: create
|
|
2790
|
+
class: record_payload
|
|
2791
|
+
selectors: []
|
|
2792
|
+
preconditions: [entity_mode_marker_is_valid, todo_reconciliation_is_valid, full_typed_record_is_valid, readiness_is_complete_or_needs_triage, dependency_graph_is_valid]
|
|
2793
|
+
owned_fields: [id, artifact, status, public_order, lifecycle]
|
|
2794
|
+
input:
|
|
2795
|
+
mode: structured
|
|
2796
|
+
root: full typed TODO record
|
|
2797
|
+
sources: [file, stdin]
|
|
2798
|
+
structured_sources: [file, stdin]
|
|
2799
|
+
cli_owned_fields: [id, artifact, status, public_order, lifecycle]
|
|
2800
|
+
recovery: Run agentera state todo explain --verb create --format json, remove CLI-owned fields, provide the full typed TODO record, and retry.
|
|
2801
|
+
examples: ['agentera state todo create --input todo.yaml --format json']
|
|
2802
|
+
bounds: { max_input_utf8_bytes: 32768, max_collection_items: 100 }
|
|
2803
|
+
fields: []
|
|
2804
|
+
|
|
2805
|
+
- artifact: todo
|
|
2806
|
+
verb: update
|
|
2807
|
+
class: record_payload
|
|
2808
|
+
selectors: [--id]
|
|
2809
|
+
preconditions: [entity_mode_marker_is_valid, todo_reconciliation_is_valid, target_id_is_bare_ten_letters, typed_patch_is_valid, dependency_graph_is_valid]
|
|
2810
|
+
owned_fields: [id, artifact, status, public_order, lifecycle]
|
|
2811
|
+
input:
|
|
2812
|
+
mode: structured
|
|
2813
|
+
root: TODO record patch
|
|
2814
|
+
sources: [file, stdin]
|
|
2815
|
+
structured_sources: [file, stdin]
|
|
2816
|
+
cli_owned_fields: [id, artifact, status, public_order, lifecycle]
|
|
2817
|
+
recovery: Reread the TODO item, use its bare ID, supply only typed patch fields, and use null or an empty list only for declared clearable fields.
|
|
2818
|
+
examples: ['agentera state todo update --id qjtrmnpvka --input todo-patch.yaml --format json']
|
|
2819
|
+
bounds: { max_input_utf8_bytes: 32768, max_collection_items: 1 }
|
|
2820
|
+
fields: [{ flag: --id, field: id, kind: string, required: true }]
|
|
2821
|
+
|
|
2822
|
+
- artifact: todo
|
|
2823
|
+
verb: set-severity
|
|
2824
|
+
class: simple_transition
|
|
2825
|
+
selectors: [--id]
|
|
2826
|
+
preconditions: [entity_mode_marker_is_valid, todo_reconciliation_is_valid, target_id_is_bare_ten_letters, severity_is_valid, reason_and_date_are_present]
|
|
2827
|
+
owned_fields: [id, artifact, severity, lifecycle]
|
|
2828
|
+
input: { mode: none, sources: [], cli_owned_fields: [] }
|
|
2829
|
+
recovery: Use the bare TODO ID, one immediate-impact severity, a reason, and a YYYY-MM-DD date; no record input is accepted.
|
|
2830
|
+
examples: ['agentera state todo set-severity --id qjtrmnpvka --severity degraded --reason "Impact changed" --date 2026-07-31 --format json']
|
|
2831
|
+
bounds: { max_input_utf8_bytes: 0, max_collection_items: 1, max_reason_code_points: 500 }
|
|
2832
|
+
fields:
|
|
2833
|
+
- { flag: --id, field: id, kind: string, required: true }
|
|
2834
|
+
- { flag: --severity, field: severity, kind: string, required: true, valid_values: [critical, degraded, normal, annoying] }
|
|
2835
|
+
- { flag: --reason, field: lifecycle.reason, kind: string, required: true }
|
|
2836
|
+
- { flag: --date, field: lifecycle.date, kind: date, required: true }
|
|
2837
|
+
|
|
2838
|
+
- artifact: todo
|
|
2839
|
+
verb: supersede
|
|
2840
|
+
class: simple_transition
|
|
2841
|
+
selectors: [--id]
|
|
2842
|
+
preconditions: [entity_mode_marker_is_valid, todo_reconciliation_is_valid, target_id_is_bare_ten_letters, replacement_is_distinct_existing_todo, reason_and_date_are_present]
|
|
2843
|
+
owned_fields: [id, artifact, status, lifecycle]
|
|
2844
|
+
input: { mode: none, sources: [], cli_owned_fields: [] }
|
|
2845
|
+
recovery: Use the selected bare TODO ID, an existing distinct replacement ID, a reason, and a YYYY-MM-DD date; no record input is accepted.
|
|
2846
|
+
examples: ['agentera state todo supersede --id qjtrmnpvka --replacement zqtrmnpvka --reason "Replaced by narrower work" --date 2026-07-31 --format json']
|
|
2847
|
+
bounds: { max_input_utf8_bytes: 0, max_collection_items: 1, max_reason_code_points: 500 }
|
|
2848
|
+
fields:
|
|
2849
|
+
- { flag: --id, field: id, kind: string, required: true }
|
|
2850
|
+
- { flag: --replacement, field: lifecycle.replacement, kind: string, required: true }
|
|
2851
|
+
- { flag: --reason, field: lifecycle.reason, kind: string, required: true }
|
|
2852
|
+
- { flag: --date, field: lifecycle.date, kind: date, required: true }
|
|
2853
|
+
|
|
2854
|
+
- artifact: todo
|
|
2855
|
+
verb: resolve
|
|
2856
|
+
class: simple_transition
|
|
2857
|
+
selectors: [--id]
|
|
2858
|
+
preconditions: [entity_mode_marker_is_valid, todo_reconciliation_is_valid, target_id_is_bare_ten_letters, item_is_open, reason_and_date_are_present]
|
|
2859
|
+
owned_fields: [id, artifact, status, lifecycle]
|
|
2860
|
+
input: { mode: none, sources: [], cli_owned_fields: [] }
|
|
2861
|
+
recovery: Use the bare TODO ID, a reason, and a YYYY-MM-DD date; no record input is accepted.
|
|
2862
|
+
examples: ['agentera state todo resolve --id qjtrmnpvka --reason "Shipped" --date 2026-07-31 --format json']
|
|
2863
|
+
bounds: { max_input_utf8_bytes: 0, max_collection_items: 1, max_reason_code_points: 500 }
|
|
2864
|
+
fields:
|
|
2865
|
+
- { flag: --id, field: id, kind: string, required: true }
|
|
2866
|
+
- { flag: --reason, field: lifecycle.reason, kind: string, required: true }
|
|
2867
|
+
- { flag: --date, field: lifecycle.date, kind: date, required: true }
|
|
2868
|
+
|
|
2869
|
+
- artifact: todo
|
|
2870
|
+
verb: reopen
|
|
2871
|
+
class: simple_transition
|
|
2872
|
+
selectors: [--id]
|
|
2873
|
+
preconditions: [entity_mode_marker_is_valid, todo_reconciliation_is_valid, target_id_is_bare_ten_letters, item_is_resolved, reason_and_date_are_present]
|
|
2874
|
+
owned_fields: [id, artifact, status, lifecycle]
|
|
2875
|
+
input: { mode: none, sources: [], cli_owned_fields: [] }
|
|
2876
|
+
recovery: Use the bare resolved TODO ID, a reason, and a YYYY-MM-DD date; no record input is accepted.
|
|
2877
|
+
examples: ['agentera state todo reopen --id qjtrmnpvka --reason "Scope returned" --date 2026-07-31 --format json']
|
|
2878
|
+
bounds: { max_input_utf8_bytes: 0, max_collection_items: 1, max_reason_code_points: 500 }
|
|
2879
|
+
fields:
|
|
2880
|
+
- { flag: --id, field: id, kind: string, required: true }
|
|
2881
|
+
- { flag: --reason, field: lifecycle.reason, kind: string, required: true }
|
|
2882
|
+
- { flag: --date, field: lifecycle.date, kind: date, required: true }
|
|
2883
|
+
|
|
2884
|
+
- artifact: docs
|
|
2885
|
+
verb: create
|
|
2886
|
+
class: record_payload
|
|
2887
|
+
selectors: []
|
|
2888
|
+
preconditions: [entity_mode_marker_is_valid, input_is_one_documentation_inventory_entry]
|
|
2889
|
+
owned_fields: [id, artifact]
|
|
2890
|
+
input:
|
|
2891
|
+
mode: structured
|
|
2892
|
+
root: one documentation inventory entry
|
|
2893
|
+
sources: [file, stdin]
|
|
2894
|
+
cli_owned_fields: [id, artifact]
|
|
2895
|
+
recovery: Remove id and artifact from the input and retry with one schema-valid documentation inventory entry.
|
|
2896
|
+
examples: ['agentera state docs create --input documentation.yaml --format json']
|
|
2897
|
+
bounds: { max_input_utf8_bytes: 32768, max_collection_items: 100 }
|
|
2898
|
+
fields: []
|
|
2899
|
+
|
|
2900
|
+
- artifact: docs
|
|
2901
|
+
verb: update
|
|
2902
|
+
class: record_payload
|
|
2903
|
+
selectors: [--id]
|
|
2904
|
+
preconditions: [entity_mode_marker_is_valid, target_id_is_bare_ten_letters, input_is_one_documentation_inventory_entry]
|
|
2905
|
+
owned_fields: [id, artifact]
|
|
2906
|
+
input:
|
|
2907
|
+
mode: structured
|
|
2908
|
+
root: one documentation inventory entry
|
|
2909
|
+
sources: [file, stdin]
|
|
2910
|
+
cli_owned_fields: [id, artifact]
|
|
2911
|
+
recovery: Reread the documentation entry, copy its bare ID to --id, remove CLI-owned fields, and retry.
|
|
2912
|
+
examples: ['agentera state docs update --id qjtrmnpvka --input documentation.yaml --format json']
|
|
2913
|
+
bounds: { max_input_utf8_bytes: 32768, max_collection_items: 1 }
|
|
2914
|
+
fields: [{ flag: --id, field: id, kind: string, required: true }]
|
|
2915
|
+
|
|
2916
|
+
- artifact: glossary
|
|
2917
|
+
verb: publish
|
|
2918
|
+
class: batch_transaction
|
|
2919
|
+
selectors: []
|
|
2920
|
+
preconditions: [input_is_one_glossary_publication_request, cited_source_lines_are_current, confirmation_matches_proposal]
|
|
2921
|
+
owned_fields: [approval_id, glossary_entry_id]
|
|
2922
|
+
input:
|
|
2923
|
+
mode: structured
|
|
2924
|
+
root: one glossary publication request
|
|
2925
|
+
sources: [file, stdin]
|
|
2926
|
+
cli_owned_fields: []
|
|
2927
|
+
recovery: Run agentera state glossary explain --verb publish --format json and correct the bounded request or confirmation.
|
|
2928
|
+
examples: ['agentera state glossary publish --input glossary-publication.yaml --format json']
|
|
2929
|
+
bounds: { max_input_utf8_bytes: 32768, max_collection_items: 1 }
|
|
2930
|
+
fields: []
|