agentera 3.0.0-dev.23 → 3.0.0-dev.26
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 +18 -22
- package/bundle/CHANGELOG.md +25 -27
- package/bundle/README.md +22 -42
- package/bundle/UPGRADE.md +71 -179
- package/bundle/references/adapters/package-manifest-interface-model.yaml +41 -240
- package/bundle/references/adapters/package-registry.yaml +9 -145
- package/bundle/references/adapters/package-surface-characterization.md +13 -38
- package/bundle/references/adapters/runtime-lifecycle-adapters.yaml +5 -219
- package/bundle/references/adapters/runtime-lifecycle-authority.yaml +2 -29
- package/bundle/references/adapters/runtime-lifecycle-operation-contract.yaml +1 -1
- package/bundle/references/artifacts/state-storage-authority.yaml +729 -412
- package/bundle/references/cli/agent-ready-state-contract.yaml +12 -12
- package/bundle/references/cli/app-lifecycle-vocabulary.yaml +3 -4
- package/bundle/references/cli/bundle-skill-vocabulary.yaml +9 -18
- package/bundle/references/cli/capability-tool-classification.yaml +2 -2
- package/bundle/references/cli/prime-consumer-compatibility.yaml +28 -98
- package/bundle/references/cli/routing-execution-vocabulary.yaml +4 -22
- package/bundle/references/cli/update-channels.yaml +4 -2
- package/bundle/references/cli/upgrade-repair-wording.md +8 -28
- package/bundle/references/cli/v3-handoff-manifest.schema.yaml +2 -3
- package/bundle/references/cli/vocabulary.md +22 -27
- package/bundle/references/meta/documentation-inventory.md +1 -1
- package/bundle/skills/agentera/SKILL.md +28 -14
- package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +12 -12
- package/bundle/skills/agentera/capabilities/audit/schemas/validation.yaml +2 -2
- package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +12 -12
- package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +8 -8
- package/bundle/skills/agentera/capabilities/design/schemas/artifacts.yaml +6 -6
- package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +7 -7
- package/bundle/skills/agentera/capabilities/document/schemas/artifacts.yaml +12 -12
- package/bundle/skills/agentera/capabilities/optimize/schemas/artifacts.yaml +9 -9
- package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +11 -11
- package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +9 -9
- package/bundle/skills/agentera/capabilities/profile/schemas/artifacts.yaml +2 -2
- package/bundle/skills/agentera/capabilities/research/schemas/artifacts.yaml +3 -3
- package/bundle/skills/agentera/capabilities/status/schemas/artifacts.yaml +11 -11
- package/bundle/skills/agentera/capabilities/vision/schemas/artifacts.yaml +8 -8
- package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +15 -2
- package/bundle/skills/agentera/schemas/artifacts/docs.yaml +7 -12
- package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +21 -21
- package/bundle/skills/agentera/schemas/artifacts/health.yaml +15 -2
- package/bundle/skills/agentera/schemas/artifacts/plan.yaml +36 -15
- package/bundle/skills/agentera/schemas/artifacts/progress.yaml +15 -2
- package/bundle/skills/agentera/schemas/artifacts/todo.yaml +4 -4
- package/dist/capabilities/audit/instructions.js +13 -1
- package/dist/capabilities/audit/instructions.js.map +1 -1
- package/dist/capabilities/build/instructions.js +14 -1
- package/dist/capabilities/build/instructions.js.map +1 -1
- package/dist/capabilities/discuss/instructions.js +11 -1
- package/dist/capabilities/discuss/instructions.js.map +1 -1
- package/dist/capabilities/document/instructions.js +9 -1
- package/dist/capabilities/document/instructions.js.map +1 -1
- package/dist/capabilities/index.js +7 -7
- package/dist/capabilities/index.js.map +1 -1
- package/dist/capabilities/optimize/instructions.js +10 -1
- package/dist/capabilities/optimize/instructions.js.map +1 -1
- package/dist/capabilities/orchestrate/instructions.js +13 -2
- package/dist/capabilities/orchestrate/instructions.js.map +1 -1
- package/dist/capabilities/plan/instructions.js +10 -1
- package/dist/capabilities/plan/instructions.js.map +1 -1
- package/dist/cli/capabilityContext/bespoke.js +8 -2
- package/dist/cli/capabilityContext/bespoke.js.map +1 -1
- package/dist/cli/capabilityContext/closeout.js +3 -3
- package/dist/cli/capabilityContext/closeout.js.map +1 -1
- package/dist/cli/capabilityContext/contract.js +10 -15
- package/dist/cli/capabilityContext/contract.js.map +1 -1
- package/dist/cli/capabilityContext/evidence.js +55 -43
- package/dist/cli/capabilityContext/evidence.js.map +1 -1
- package/dist/cli/capabilityContext/planState.js +5 -5
- package/dist/cli/capabilityContext/planState.js.map +1 -1
- package/dist/cli/capabilityContext/progress.js +1 -1
- package/dist/cli/capabilityContext/progress.js.map +1 -1
- package/dist/cli/capabilityContext/shared.js +8 -2
- package/dist/cli/capabilityContext/shared.js.map +1 -1
- package/dist/cli/capabilityContext/slim.js +2 -1
- package/dist/cli/capabilityContext/slim.js.map +1 -1
- package/dist/cli/capabilityContext/startup.js +19 -8
- package/dist/cli/capabilityContext/startup.js.map +1 -1
- package/dist/cli/capabilityContext/types.js +4 -4
- package/dist/cli/capabilityContext/types.js.map +1 -1
- package/dist/cli/commands/doctor.js +6 -64
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/durability.js +27 -30
- package/dist/cli/commands/durability.js.map +1 -1
- package/dist/cli/commands/entityMigrate.js +128 -0
- package/dist/cli/commands/entityMigrate.js.map +1 -0
- package/dist/cli/commands/prime/briefOrientation.js +7 -22
- package/dist/cli/commands/prime/briefOrientation.js.map +1 -1
- package/dist/cli/commands/prime/bundleStatus.js +8 -2
- package/dist/cli/commands/prime/bundleStatus.js.map +1 -1
- package/dist/cli/commands/prime/collectEntityOrientation.js +161 -0
- package/dist/cli/commands/prime/collectEntityOrientation.js.map +1 -0
- package/dist/cli/commands/prime/collectOrientationState.js +32 -59
- package/dist/cli/commands/prime/collectOrientationState.js.map +1 -1
- package/dist/cli/commands/prime/orientationOutput.js +4 -12
- package/dist/cli/commands/prime/orientationOutput.js.map +1 -1
- package/dist/cli/commands/prime.js +2 -5
- package/dist/cli/commands/prime.js.map +1 -1
- package/dist/cli/commands/query.js +43 -49
- package/dist/cli/commands/query.js.map +1 -1
- package/dist/cli/commands/schema.js +26 -83
- package/dist/cli/commands/schema.js.map +1 -1
- package/dist/cli/commands/state/decisions.js +14 -47
- package/dist/cli/commands/state/decisions.js.map +1 -1
- package/dist/cli/commands/state/docs.js +58 -84
- package/dist/cli/commands/state/docs.js.map +1 -1
- package/dist/cli/commands/state/experimentRecords.js +27 -44
- package/dist/cli/commands/state/experimentRecords.js.map +1 -1
- package/dist/cli/commands/state/experiments.js +11 -64
- package/dist/cli/commands/state/experiments.js.map +1 -1
- package/dist/cli/commands/state/get.js +74 -88
- package/dist/cli/commands/state/get.js.map +1 -1
- package/dist/cli/commands/state/health.js +11 -112
- package/dist/cli/commands/state/health.js.map +1 -1
- package/dist/cli/commands/state/index.js +11 -2
- package/dist/cli/commands/state/index.js.map +1 -1
- package/dist/cli/commands/state/list.js +30 -13
- package/dist/cli/commands/state/list.js.map +1 -1
- package/dist/cli/commands/state/objective.js +21 -64
- package/dist/cli/commands/state/objective.js.map +1 -1
- package/dist/cli/commands/state/plan.js +11 -376
- package/dist/cli/commands/state/plan.js.map +1 -1
- package/dist/cli/commands/state/planTasks.js +58 -80
- package/dist/cli/commands/state/planTasks.js.map +1 -1
- package/dist/cli/commands/state/plans.js +27 -38
- package/dist/cli/commands/state/plans.js.map +1 -1
- package/dist/cli/commands/state/progress.js +11 -44
- 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 +27 -106
- package/dist/cli/commands/state/todo.js.map +1 -1
- package/dist/cli/commands/state/write.js +57 -4
- package/dist/cli/commands/state/write.js.map +1 -1
- package/dist/cli/commands/upgrade.js +99 -35
- package/dist/cli/commands/upgrade.js.map +1 -1
- package/dist/cli/commands/upgradeVerify.js +52 -14
- package/dist/cli/commands/upgradeVerify.js.map +1 -1
- package/dist/cli/commands/validate.js +66 -9
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/dispatch/check.js +13 -13
- package/dist/cli/dispatch/check.js.map +1 -1
- package/dist/cli/dispatch/index.js +35 -28
- package/dist/cli/dispatch/index.js.map +1 -1
- package/dist/cli/dispatch/lifecycle.js +23 -43
- package/dist/cli/dispatch/lifecycle.js.map +1 -1
- package/dist/cli/dispatch/prime.js +15 -0
- package/dist/cli/dispatch/prime.js.map +1 -1
- package/dist/cli/dispatch/state.js +7 -1
- package/dist/cli/dispatch/state.js.map +1 -1
- package/dist/cli/help.js +90 -112
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/migrationRequired.js +87 -0
- package/dist/cli/migrationRequired.js.map +1 -0
- package/dist/cli/orientation/attention.js +3 -99
- package/dist/cli/orientation/attention.js.map +1 -1
- package/dist/cli/orientation.js +10 -7
- package/dist/cli/orientation.js.map +1 -1
- package/dist/cli/planArtifacts.js +192 -42
- package/dist/cli/planArtifacts.js.map +1 -1
- package/dist/cli/prime-blob.js +5 -5
- package/dist/cli/prime-blob.js.map +1 -1
- package/dist/cli/stateQuery.js +6 -7
- package/dist/cli/stateQuery.js.map +1 -1
- package/dist/core/skillIdentity.js +24 -0
- package/dist/core/skillIdentity.js.map +1 -0
- package/dist/hooks/common.js +1 -1
- package/dist/hooks/common.js.map +1 -1
- package/dist/hooks/compaction/status.js +27 -2
- package/dist/hooks/compaction/status.js.map +1 -1
- package/dist/hooks/cursorSessionStart.js +4 -19
- package/dist/hooks/cursorSessionStart.js.map +1 -1
- package/dist/hooks/projectHookInput.js +26 -0
- package/dist/hooks/projectHookInput.js.map +1 -0
- package/dist/hooks/sessionStart.js +58 -212
- package/dist/hooks/sessionStart.js.map +1 -1
- package/dist/hooks/sessionStop.js +4 -12
- package/dist/hooks/sessionStop.js.map +1 -1
- package/dist/hooks/validateArtifact/traversal.js +1 -1
- package/dist/hooks/validateArtifact/traversal.js.map +1 -1
- package/dist/registries/artifactRegistry.js +24 -14
- package/dist/registries/artifactRegistry.js.map +1 -1
- package/dist/registries/packageRegistry.js +58 -232
- package/dist/registries/packageRegistry.js.map +1 -1
- package/dist/release/releaseMetadata.js +1 -13
- package/dist/release/releaseMetadata.js.map +1 -1
- package/dist/runtime/lifecycleAdapterContract.js +4 -4
- package/dist/runtime/lifecycleAdapterContract.js.map +1 -1
- package/dist/runtime/lifecycleAdapters.js +14 -2
- package/dist/runtime/lifecycleAdapters.js.map +1 -1
- package/dist/runtime/lifecycleAuthority.js +5 -43
- package/dist/runtime/lifecycleAuthority.js.map +1 -1
- package/dist/runtime/lifecycleOperationContract.js +3 -2
- package/dist/runtime/lifecycleOperationContract.js.map +1 -1
- package/dist/runtime/lifecyclePublication.js +21 -0
- package/dist/runtime/lifecyclePublication.js.map +1 -1
- package/dist/setup/opencode.js +20 -12
- package/dist/setup/opencode.js.map +1 -1
- package/dist/setup/sharedSkill.js +46 -0
- package/dist/setup/sharedSkill.js.map +1 -0
- package/dist/setup/smokeChecks.js +16 -43
- package/dist/setup/smokeChecks.js.map +1 -1
- package/dist/state/archivePublication.js +3 -2
- package/dist/state/archivePublication.js.map +1 -1
- package/dist/state/decisionEntities.js +282 -0
- package/dist/state/decisionEntities.js.map +1 -0
- package/dist/state/decisionOverlay.js +2 -2
- package/dist/state/decisionOverlay.js.map +1 -1
- package/dist/state/decisionRevision.js +44 -34
- package/dist/state/decisionRevision.js.map +1 -1
- package/dist/state/directRetrieval.js.map +1 -1
- package/dist/state/durability.js +81 -226
- package/dist/state/durability.js.map +1 -1
- package/dist/state/entityCutover.js +294 -0
- package/dist/state/entityCutover.js.map +1 -0
- package/dist/state/entityCutoverGit.js +128 -0
- package/dist/state/entityCutoverGit.js.map +1 -0
- package/dist/state/entityMigrationPreview.js +803 -0
- package/dist/state/entityMigrationPreview.js.map +1 -0
- package/dist/state/entityPublicationContext.js +612 -0
- package/dist/state/entityPublicationContext.js.map +1 -0
- package/dist/state/entityStorage.js +826 -0
- package/dist/state/entityStorage.js.map +1 -0
- package/dist/state/experimentIdentity.js +23 -11
- package/dist/state/experimentIdentity.js.map +1 -1
- package/dist/state/healthEntities.js +230 -0
- package/dist/state/healthEntities.js.map +1 -0
- package/dist/state/healthEntityValidation.js +6 -0
- package/dist/state/healthEntityValidation.js.map +1 -0
- package/dist/state/legacyEntityCutoverEvidence.js +66 -0
- package/dist/state/legacyEntityCutoverEvidence.js.map +1 -0
- package/dist/state/listRetrieval.js.map +1 -1
- package/dist/state/objectiveExperimentEntities.js +323 -0
- package/dist/state/objectiveExperimentEntities.js.map +1 -0
- package/dist/state/planEntities.js +362 -0
- package/dist/state/planEntities.js.map +1 -0
- package/dist/state/progressEntities.js +384 -0
- package/dist/state/progressEntities.js.map +1 -0
- package/dist/state/projectRoot.js +63 -0
- package/dist/state/projectRoot.js.map +1 -0
- package/dist/state/retrievalAuthority.js +13 -6
- package/dist/state/retrievalAuthority.js.map +1 -1
- package/dist/state/safeProjectFile.js +153 -0
- package/dist/state/safeProjectFile.js.map +1 -0
- package/dist/state/startupProjection.js +3 -2
- package/dist/state/startupProjection.js.map +1 -1
- package/dist/state/stateMode.js +83 -0
- package/dist/state/stateMode.js.map +1 -0
- package/dist/state/todoDocsEntities.js +225 -0
- package/dist/state/todoDocsEntities.js.map +1 -0
- package/dist/state/todoDocsEntityValidation.js +26 -0
- package/dist/state/todoDocsEntityValidation.js.map +1 -0
- package/dist/state/write/candidateMutation.js +5 -55
- package/dist/state/write/candidateMutation.js.map +1 -1
- package/dist/state/write/explain.js +119 -28
- package/dist/state/write/explain.js.map +1 -1
- package/dist/state/write/lock.js +794 -87
- package/dist/state/write/lock.js.map +1 -1
- package/dist/state/write/mutation.js +5 -2
- package/dist/state/write/mutation.js.map +1 -1
- package/dist/state/write/operations.js +52 -7
- package/dist/state/write/operations.js.map +1 -1
- package/dist/state/write/planEvaluation.js +107 -0
- package/dist/state/write/planEvaluation.js.map +1 -0
- package/dist/state/write/planPublication.js +11 -55
- package/dist/state/write/planPublication.js.map +1 -1
- package/dist/state/write/transaction.js +32 -455
- package/dist/state/write/transaction.js.map +1 -1
- package/dist/upgrade/appContentRefresh.js +43 -28
- package/dist/upgrade/appContentRefresh.js.map +1 -1
- package/dist/upgrade/compatibility.js +4 -4
- package/dist/upgrade/compatibility.js.map +1 -1
- package/dist/upgrade/doctor.js +5 -1
- package/dist/upgrade/doctor.js.map +1 -1
- package/dist/upgrade/installedHooksRetirement.js +46 -39
- package/dist/upgrade/installedHooksRetirement.js.map +1 -1
- package/dist/upgrade/legacyAgentCleanup.js +132 -32
- package/dist/upgrade/legacyAgentCleanup.js.map +1 -1
- package/dist/upgrade/lifecycleUpgrade.js +65 -378
- package/dist/upgrade/lifecycleUpgrade.js.map +1 -1
- package/dist/upgrade/migrateArtifactsV2ToV3.js +164 -66
- package/dist/upgrade/migrateArtifactsV2ToV3.js.map +1 -1
- package/dist/upgrade/migrationPublication.js +123 -0
- package/dist/upgrade/migrationPublication.js.map +1 -0
- package/dist/upgrade/projectIntegration.js +46 -113
- package/dist/upgrade/projectIntegration.js.map +1 -1
- package/dist/upgrade/projectIntegrationDecision.js +6 -96
- package/dist/upgrade/projectIntegrationDecision.js.map +1 -1
- package/dist/upgrade/runtimeMigration.js +222 -402
- package/dist/upgrade/runtimeMigration.js.map +1 -1
- package/dist/upgrade/upgradeCommands.js +5 -4
- package/dist/upgrade/upgradeCommands.js.map +1 -1
- package/dist/upgrade/upgradeLock.js +73 -41
- package/dist/upgrade/upgradeLock.js.map +1 -1
- package/dist/upgrade/upgradeOrchestrator.js +181 -145
- package/dist/upgrade/upgradeOrchestrator.js.map +1 -1
- package/dist/upgrade/v3CapabilitySurface.js +2 -2
- package/dist/validate/appHomeContract.js +0 -4
- package/dist/validate/appHomeContract.js.map +1 -1
- package/dist/validate/crossCapability.js +2 -2
- package/dist/validate/crossCapability.js.map +1 -1
- package/package.json +8 -6
- package/bundle/.codex-plugin/plugin.json +0 -92
- package/bundle/.cursor/agents/agentera.md +0 -7
- package/bundle/.cursor/hooks.json +0 -32
- package/bundle/.cursor-plugin/plugin.json +0 -34
- package/bundle/.github/hooks/postToolUse.json +0 -9
- package/bundle/.github/hooks/preToolUse.json +0 -8
- package/bundle/.github/hooks/sessionEnd.json +0 -8
- package/bundle/.github/hooks/sessionStart.json +0 -8
- package/bundle/.github/plugin/plugin.json +0 -7
- package/bundle/.opencode/agents/agentera.md +0 -12
- package/bundle/.opencode/commands/agentera.md +0 -5
- package/bundle/.opencode/package.json +0 -31
- package/bundle/.opencode/plugins/agentera.js +0 -820
- package/bundle/agents/openai.yaml +0 -87
- package/bundle/hooks/codex-hooks.json +0 -31
- package/bundle/hooks/codex-plugin-hooks.json +0 -31
- package/bundle/plugin.json +0 -13
- package/bundle/references/adapters/cursor.md +0 -224
- package/bundle/references/adapters/opencode.md +0 -529
- package/bundle/references/adapters/runtime-adapter-characterization.md +0 -44
- package/bundle/references/adapters/runtime-adapter-interface-model.yaml +0 -200
- package/bundle/references/adapters/runtime-adapter-registry.yaml +0 -387
- package/bundle/references/adapters/runtime-feature-parity.md +0 -129
- package/dist/cli/commands/backfill.js +0 -194
- package/dist/cli/commands/backfill.js.map +0 -1
- package/dist/cli/commands/migrate.js +0 -677
- package/dist/cli/commands/migrate.js.map +0 -1
- package/dist/registries/runtimeAdapterRegistry.js +0 -324
- package/dist/registries/runtimeAdapterRegistry.js.map +0 -1
- package/dist/setup/copilot.js +0 -227
- package/dist/setup/copilot.js.map +0 -1
- package/dist/setup/cursor.js +0 -129
- package/dist/setup/cursor.js.map +0 -1
- package/dist/setup/cursorSurfaces.js +0 -67
- package/dist/setup/cursorSurfaces.js.map +0 -1
- package/dist/setup/doctor/core.js +0 -296
- package/dist/setup/doctor/core.js.map +0 -1
- package/dist/setup/doctor/diagnostics.js +0 -201
- package/dist/setup/doctor/diagnostics.js.map +0 -1
- package/dist/setup/doctor/opencode.js +0 -301
- package/dist/setup/doctor/opencode.js.map +0 -1
- package/dist/setup/doctor/report.js +0 -425
- package/dist/setup/doctor/report.js.map +0 -1
- package/dist/setup/doctor.js +0 -10
- package/dist/setup/doctor.js.map +0 -1
- package/dist/state/gitBackfill.js +0 -561
- package/dist/state/gitBackfill.js.map +0 -1
- package/dist/state/gitBackfillAuthority.js +0 -141
- package/dist/state/gitBackfillAuthority.js.map +0 -1
- package/dist/state/gitBackfillHistory.js +0 -278
- package/dist/state/gitBackfillHistory.js.map +0 -1
- package/dist/state/gitBackfillOutput.js +0 -209
- package/dist/state/gitBackfillOutput.js.map +0 -1
- package/dist/state/legacyMigration.js +0 -516
- package/dist/state/legacyMigration.js.map +0 -1
- package/dist/state/legacyMigrationParser.js +0 -489
- package/dist/state/legacyMigrationParser.js.map +0 -1
- package/dist/state/migrationAuthority.js +0 -413
- package/dist/state/migrationAuthority.js.map +0 -1
- package/dist/state/migrationEnrichment.js +0 -35
- package/dist/state/migrationEnrichment.js.map +0 -1
- package/dist/upgrade/migrateArtifactsV1ToV2.js +0 -568
- package/dist/upgrade/migrateArtifactsV1ToV2.js.map +0 -1
- package/dist/upgrade/upgradeSnapshot.js +0 -93
- package/dist/upgrade/upgradeSnapshot.js.map +0 -1
- package/dist/validate/lifecycleAdapters/legacyPythonParity.js +0 -93
- package/dist/validate/lifecycleAdapters/legacyPythonParity.js.map +0 -1
- package/dist/validate/lifecycleAdapters/lifecycleMain.js +0 -154
- package/dist/validate/lifecycleAdapters/lifecycleMain.js.map +0 -1
- package/dist/validate/lifecycleAdapters/nodeFormChecks.js +0 -481
- package/dist/validate/lifecycleAdapters/nodeFormChecks.js.map +0 -1
- package/dist/validate/lifecycleAdapters/shared.js +0 -198
- package/dist/validate/lifecycleAdapters/shared.js.map +0 -1
- package/dist/validate/lifecycleAdapters.js +0 -10
- package/dist/validate/lifecycleAdapters.js.map +0 -1
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
schema_version: agentera.stateStorageAuthority.v1
|
|
2
2
|
status: active_authority
|
|
3
3
|
purpose: >-
|
|
4
|
-
Define the
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
health, plus objective-scoped immutable archival for newly published
|
|
9
|
-
experiments.
|
|
4
|
+
Define both the implemented bounded-retrieval contracts for current state and
|
|
5
|
+
the Decision 94 target entity and cutover contracts. The target declaration is
|
|
6
|
+
authoritative before its storage, writer, retrieval, and migration behavior is
|
|
7
|
+
implemented; implementation status is explicit at each boundary.
|
|
10
8
|
authority:
|
|
11
9
|
source: references/artifacts/state-storage-authority.yaml
|
|
12
10
|
single_source_rule: >-
|
|
@@ -16,10 +14,721 @@ authority:
|
|
|
16
14
|
amendment revision paths, legacy label coexistence rules, failure classes,
|
|
17
15
|
or byte limits.
|
|
18
16
|
implementation_boundary: >-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
17
|
+
Shared entity storage plus the progress, decisions, health, plan, objective,
|
|
18
|
+
experiment, TODO-item, and documentation-inventory family writers and retrieval,
|
|
19
|
+
plus one-way forward import, are implemented but activate entity authority only
|
|
20
|
+
from the durable cutover marker. The preserved
|
|
21
|
+
singleton families remain legacy files. The
|
|
22
|
+
current numbered archive and retrieval groups remain migration input while
|
|
23
|
+
that marker is absent; no independent legacy repair mutation remains.
|
|
24
|
+
|
|
25
|
+
entity_target:
|
|
26
|
+
status: progress_decisions_health_plan_objective_experiment_todo_and_docs_implemented_other_families_declared
|
|
27
|
+
decision: 94
|
|
28
|
+
activation: >-
|
|
29
|
+
This target becomes active persisted and structured state authority only
|
|
30
|
+
after entity_migration publishes a validated entity graph and writes the marker
|
|
31
|
+
last. Before then, legacy aggregates
|
|
32
|
+
remain migration input and explicitly labelled migration-evidence writer state;
|
|
33
|
+
ordinary public reads fail with migration_required instead of exposing them.
|
|
34
|
+
implementation_status:
|
|
35
|
+
progress: implemented
|
|
36
|
+
decisions: implemented
|
|
37
|
+
health: implemented
|
|
38
|
+
plan: implemented
|
|
39
|
+
objective: implemented
|
|
40
|
+
experiments: implemented
|
|
41
|
+
todo: implemented
|
|
42
|
+
docs: implemented
|
|
43
|
+
remaining_families: declared_not_implemented
|
|
44
|
+
rule: >-
|
|
45
|
+
Every implemented family selects entity behavior only when the durable
|
|
46
|
+
cutover marker is valid. Marker-absent ordinary consumers fail with
|
|
47
|
+
migration_required; the read-only migration preview and readiness checks do
|
|
48
|
+
not create entity state or write both authorities.
|
|
49
|
+
public_schema:
|
|
50
|
+
canonical_identity_field: id
|
|
51
|
+
canonical_classification_field: artifact
|
|
52
|
+
identity_and_classification_fields: [id, artifact]
|
|
53
|
+
entity_envelope:
|
|
54
|
+
required_fields: [id, artifact, record]
|
|
55
|
+
additional_identity_or_classification_fields: forbidden
|
|
56
|
+
forbidden_canonical_aliases:
|
|
57
|
+
- stable_id
|
|
58
|
+
- artifact_id
|
|
59
|
+
- entry_number
|
|
60
|
+
- number
|
|
61
|
+
- task_number
|
|
62
|
+
- experiment_number
|
|
63
|
+
- plan_id
|
|
64
|
+
- objective_id
|
|
65
|
+
- type_prefixed_id
|
|
66
|
+
exemptions:
|
|
67
|
+
- historical prose and immutable historical evidence
|
|
68
|
+
- internal TypeScript variable names that are not persisted or public structured output
|
|
69
|
+
- current pre-cutover contracts explicitly marked as implemented legacy authority
|
|
70
|
+
public_retrieval:
|
|
71
|
+
schema_version: agentera.entityPublicRetrieval.v1
|
|
72
|
+
status: final
|
|
73
|
+
commands:
|
|
74
|
+
progress:
|
|
75
|
+
list: agentera state progress list [--limit N] [--cursor TOKEN] --format json
|
|
76
|
+
get: agentera state progress get --id ID --format json
|
|
77
|
+
decisions:
|
|
78
|
+
list: agentera state decisions list [--limit N] [--cursor TOKEN] --format json
|
|
79
|
+
get: agentera state decisions get --id ID --format json
|
|
80
|
+
health:
|
|
81
|
+
list: agentera state health list [--limit N] [--cursor TOKEN] --format json
|
|
82
|
+
get: agentera state health get --id ID --format json
|
|
83
|
+
plans:
|
|
84
|
+
list: agentera state plan list [--status open|complete|archived] [--limit N] [--cursor TOKEN] --format json
|
|
85
|
+
get: agentera state plan get --id ID --format json
|
|
86
|
+
plan_tasks:
|
|
87
|
+
list: agentera state plan tasks list [--limit N] [--cursor TOKEN] --format json
|
|
88
|
+
get: agentera state plan tasks get --id ID --format json
|
|
89
|
+
objective:
|
|
90
|
+
list: agentera state objective list [--limit N] [--cursor TOKEN] --format json
|
|
91
|
+
get: agentera state objective get --id ID --format json
|
|
92
|
+
experiments:
|
|
93
|
+
list: agentera state experiments list --objective ID [--limit N] [--cursor TOKEN] --format json
|
|
94
|
+
get: agentera state experiments get --id ID --format json
|
|
95
|
+
todo:
|
|
96
|
+
list: agentera state todo list [--limit N] [--cursor TOKEN] --format json
|
|
97
|
+
get: agentera state todo get --id ID --format json
|
|
98
|
+
docs:
|
|
99
|
+
list: agentera state docs list [--limit N] [--cursor TOKEN] --format json
|
|
100
|
+
get: agentera state docs get --id ID --format json
|
|
101
|
+
collections:
|
|
102
|
+
- { artifact: progress, identity: id, classification: artifact }
|
|
103
|
+
- { artifact: decisions, identity: id, classification: artifact }
|
|
104
|
+
- { artifact: health, identity: id, classification: artifact }
|
|
105
|
+
- { artifact: plan, boundary: plan, identity: id, classification: artifact }
|
|
106
|
+
- { artifact: plan, boundary: plan_task, identity: id, classification: artifact }
|
|
107
|
+
- { artifact: objective, identity: id, classification: artifact }
|
|
108
|
+
- { artifact: experiments, identity: id, classification: artifact }
|
|
109
|
+
- { artifact: todo, identity: id, classification: artifact }
|
|
110
|
+
- { artifact: docs, identity: id, classification: artifact }
|
|
111
|
+
identity:
|
|
112
|
+
scope: project_wide_across_all_entity_artifacts
|
|
113
|
+
alphabet: abcdefghijklmnopqrstuvwxyz
|
|
114
|
+
length: 10
|
|
115
|
+
accepted_pattern: '^[a-z]{10}$'
|
|
116
|
+
example: qjtrmnpvka
|
|
117
|
+
allocation: random_from_declared_alphabet
|
|
118
|
+
collision_rule: retry before publication; an existing ID is never reassigned or overwritten
|
|
119
|
+
prohibited_components: [prefix, sequence, timestamp, branch, writer, git_reference]
|
|
120
|
+
meaning_rule: >-
|
|
121
|
+
The ID is opaque and carries no artifact or entity-boundary information;
|
|
122
|
+
artifact is the sole public classification field.
|
|
123
|
+
storage_boundary:
|
|
124
|
+
rule: one independently mutable entity per writer-owned canonical file
|
|
125
|
+
aggregate_authority: forbidden
|
|
126
|
+
shared_primitives:
|
|
127
|
+
status: implemented
|
|
128
|
+
canonical_root: .agentera/entities
|
|
129
|
+
canonical_path_template: .agentera/entities/<artifact>/<boundary>/<id>.yaml
|
|
130
|
+
path_components: [artifact, boundary, id]
|
|
131
|
+
extension: .yaml
|
|
132
|
+
publication: exclusive_immutable_file
|
|
133
|
+
publication_context:
|
|
134
|
+
scope: shared_by_all_entity_families
|
|
135
|
+
binding: validated_project_root_and_exact_cutover_marker_snapshot
|
|
136
|
+
lifetime: mode_detection_through_writer_lock_and_final_publication_validation
|
|
137
|
+
pathname_race_contract: >-
|
|
138
|
+
Entity publication is rooted through held directory descriptors. The
|
|
139
|
+
root and exact valid marker identity and bytes are revalidated before
|
|
140
|
+
each directory, stage, and immutable-link boundary and after durable
|
|
141
|
+
publication before success. Because Node cannot make pathname
|
|
142
|
+
validation and mutation one kernel operation, a detected substitution
|
|
143
|
+
rolls back only attempt-owned links, stages, and empty directories by
|
|
144
|
+
pinned identity; final failure retains no attempt-owned entity state.
|
|
145
|
+
marker_change_after_detection: conflict_without_legacy_fallback
|
|
146
|
+
successor_preservation: never_remove_unmatched_or_unrelated_identity
|
|
147
|
+
allocation: provisional_candidate_until_publication
|
|
148
|
+
project_wide_id_claim:
|
|
149
|
+
synchronization: .agentera/.writer.lock
|
|
150
|
+
critical_section: final_project_wide_scan_through_durable_publication
|
|
151
|
+
interrupted_writer_recovery: dead_process_lock_reclamation
|
|
152
|
+
persistent_reservation: none
|
|
153
|
+
identical_replay: idempotent
|
|
154
|
+
replay_equality: recursive_key_sorted_logical_content_with_array_order_preserved
|
|
155
|
+
divergent_same_id: reject_without_overwrite
|
|
156
|
+
state_validation:
|
|
157
|
+
canonical_command: agentera check validate state
|
|
158
|
+
mutates: false
|
|
159
|
+
failure_exit: nonzero
|
|
160
|
+
diagnostics: bounded_structured_with_exact_recovery
|
|
161
|
+
same_entity_conflict: >-
|
|
162
|
+
Concurrent divergent edits to one entity remain an ordinary explicit file
|
|
163
|
+
conflict or validation conflict; no runtime silently selects a winner.
|
|
164
|
+
unrelated_entity_merge: >-
|
|
165
|
+
Independently created or changed entities occupy distinct canonical files
|
|
166
|
+
so ordinary Git can preserve both changes.
|
|
167
|
+
entities:
|
|
168
|
+
- boundary: progress_cycle
|
|
169
|
+
artifact: progress
|
|
170
|
+
independently_mutable: true
|
|
171
|
+
relationships: []
|
|
172
|
+
implementation: implemented
|
|
173
|
+
record:
|
|
174
|
+
required_fields: [timestamp, type, phase, what, context]
|
|
175
|
+
required_paths: [context.intent]
|
|
176
|
+
forbidden_fields: [id, artifact, number, stable_id, artifact_id, entry_number]
|
|
177
|
+
temporal_fields: [timestamp]
|
|
178
|
+
timestamp_format: 'YYYY-MM-DD HH:MM'
|
|
179
|
+
retrieval:
|
|
180
|
+
exact: agentera state progress get --id ID --format json
|
|
181
|
+
list: agentera state progress list [--limit N] [--cursor TOKEN] --format json
|
|
182
|
+
ordering: timestamp_desc_then_id_asc
|
|
183
|
+
default_limit: 20
|
|
184
|
+
maximum_limit: 100
|
|
185
|
+
max_utf8_bytes: 32768
|
|
186
|
+
cursor: opaque_snapshot_cursor
|
|
187
|
+
mutation_after_snapshot: cursor_snapshot_unavailable
|
|
188
|
+
omission: whole_entries_only_with_count_reason_continuation_and_exact_get
|
|
189
|
+
scalar_truncation: forbidden
|
|
190
|
+
- boundary: decision
|
|
191
|
+
artifact: decisions
|
|
192
|
+
independently_mutable: true
|
|
193
|
+
relationships: []
|
|
194
|
+
implementation: implemented
|
|
195
|
+
publication: immutable
|
|
196
|
+
record:
|
|
197
|
+
required_fields: [date, question, context, alternatives, choice, reasoning, confidence]
|
|
198
|
+
required_paths: []
|
|
199
|
+
forbidden_fields: [id, artifact, number, stable_id, artifact_id, entry_number, satisfaction]
|
|
200
|
+
retrieval:
|
|
201
|
+
exact: agentera state decisions get --id ID --format json
|
|
202
|
+
list: agentera state decisions list [--limit N] [--cursor TOKEN] --format json
|
|
203
|
+
ordering: date_desc_then_id_asc
|
|
204
|
+
default_limit: 20
|
|
205
|
+
maximum_limit: 100
|
|
206
|
+
max_utf8_bytes: 32768
|
|
207
|
+
cursor: opaque_snapshot_cursor
|
|
208
|
+
mutation_after_snapshot: cursor_snapshot_unavailable
|
|
209
|
+
omission: whole_entries_only_with_count_reason_continuation_and_exact_get
|
|
210
|
+
scalar_truncation: forbidden
|
|
211
|
+
- boundary: decision_satisfaction
|
|
212
|
+
artifact: decisions
|
|
213
|
+
independently_mutable: true
|
|
214
|
+
relationships: [decision]
|
|
215
|
+
implementation: implemented
|
|
216
|
+
publication: replace_owned_entity
|
|
217
|
+
ownership: { fields: [decision], cardinality: zero_or_one }
|
|
218
|
+
record:
|
|
219
|
+
required_fields: [decision, state]
|
|
220
|
+
required_paths: []
|
|
221
|
+
forbidden_fields: [id, artifact, number, stable_id, artifact_id, entry_number]
|
|
222
|
+
- boundary: decision_revision
|
|
223
|
+
artifact: decisions
|
|
224
|
+
independently_mutable: true
|
|
225
|
+
includes: [amendment]
|
|
226
|
+
relationships: [decision]
|
|
227
|
+
implementation: implemented
|
|
228
|
+
publication: immutable
|
|
229
|
+
ownership: { fields: [decision, base_sha256], cardinality: zero_or_one }
|
|
230
|
+
record:
|
|
231
|
+
required_fields: [decision, date, provenance, base_sha256, changes]
|
|
232
|
+
required_paths: []
|
|
233
|
+
forbidden_fields: [id, artifact, number, stable_id, artifact_id, entry_number, satisfaction]
|
|
234
|
+
- boundary: health_audit
|
|
235
|
+
artifact: health
|
|
236
|
+
independently_mutable: true
|
|
237
|
+
relationships: []
|
|
238
|
+
implementation: implemented
|
|
239
|
+
publication: immutable
|
|
240
|
+
record:
|
|
241
|
+
required_fields: [date, dimensions, findings_summary, trajectory, grades]
|
|
242
|
+
required_paths: []
|
|
243
|
+
forbidden_fields: [id, artifact, number, stable_id, artifact_id, entry_number]
|
|
244
|
+
retrieval:
|
|
245
|
+
exact: agentera state health get --id ID --format json
|
|
246
|
+
list: agentera state health list [--limit N] [--cursor TOKEN] --format json
|
|
247
|
+
ordering: date_desc_then_id_asc
|
|
248
|
+
default_limit: 20
|
|
249
|
+
maximum_limit: 100
|
|
250
|
+
max_utf8_bytes: 32768
|
|
251
|
+
cursor: opaque_snapshot_cursor
|
|
252
|
+
mutation_after_snapshot: cursor_snapshot_unavailable
|
|
253
|
+
omission: whole_entries_only_with_count_reason_continuation_and_exact_get
|
|
254
|
+
scalar_truncation: forbidden
|
|
255
|
+
repair: >-
|
|
256
|
+
Canonical health audit entities are immutable and cannot be row-deduplicated.
|
|
257
|
+
Malformed envelopes, duplicate IDs, or conflicting ownership fail before effects
|
|
258
|
+
and recover through agentera check validate state; no repair event is fabricated.
|
|
259
|
+
- boundary: plan
|
|
260
|
+
artifact: plan
|
|
261
|
+
independently_mutable: true
|
|
262
|
+
relationships: []
|
|
263
|
+
implementation: implemented
|
|
264
|
+
publication: replace_owned_entity
|
|
265
|
+
record:
|
|
266
|
+
required_fields: [header, what, why, scope]
|
|
267
|
+
required_paths: [header.title, header.created, header.status]
|
|
268
|
+
forbidden_fields: [id, artifact, stable_id, plan_id, tasks, previous_plan_archived]
|
|
269
|
+
field_shapes:
|
|
270
|
+
scope:
|
|
271
|
+
type: mapping
|
|
272
|
+
required_fields:
|
|
273
|
+
included: string_list
|
|
274
|
+
excluded: string_list
|
|
275
|
+
optional_fields:
|
|
276
|
+
deferred: string_list
|
|
277
|
+
additional_fields: forbidden
|
|
278
|
+
legacy_source_normalization: >-
|
|
279
|
+
A block-style, non-flow, exactly-one-pair mapping used directly as
|
|
280
|
+
an included, excluded, or deferred sequence item is the historical
|
|
281
|
+
block-colon string encoding and normalizes to one `key: value`
|
|
282
|
+
string only when both source nodes are string scalars. Explicit
|
|
283
|
+
flow mapping syntax never normalizes and remains invalid under the
|
|
284
|
+
canonical validator. A deliberate block single-pair mapping is
|
|
285
|
+
syntactically indistinguishable from the legacy encoding and falls
|
|
286
|
+
under this source-form rule; no semantic intent is inferred.
|
|
287
|
+
retrieval:
|
|
288
|
+
exact: agentera state plan get --id ID --format json
|
|
289
|
+
list: agentera state plan list [--limit N] [--cursor TOKEN] --format json
|
|
290
|
+
ordering: created_desc_then_id_asc
|
|
291
|
+
default_limit: 20
|
|
292
|
+
maximum_limit: 100
|
|
293
|
+
max_utf8_bytes: 32768
|
|
294
|
+
cursor: opaque_snapshot_cursor
|
|
295
|
+
mutation_after_snapshot: cursor_snapshot_unavailable
|
|
296
|
+
omission: whole_entries_only_with_count_reason_continuation_and_exact_get
|
|
297
|
+
scalar_truncation: forbidden
|
|
298
|
+
- boundary: plan_task
|
|
299
|
+
artifact: plan
|
|
300
|
+
independently_mutable: true
|
|
301
|
+
relationships: [plan, depends_on_tasks]
|
|
302
|
+
implementation: implemented
|
|
303
|
+
publication: replace_owned_entity
|
|
304
|
+
record:
|
|
305
|
+
required_fields: [plan, name, status, depends_on, acceptance]
|
|
306
|
+
required_paths: []
|
|
307
|
+
forbidden_fields: [id, artifact, number, task_number, stable_id, plan_id]
|
|
308
|
+
- boundary: objective
|
|
309
|
+
artifact: objective
|
|
310
|
+
independently_mutable: true
|
|
311
|
+
relationships: []
|
|
312
|
+
implementation: implemented
|
|
313
|
+
publication: replace_owned_entity
|
|
314
|
+
record:
|
|
315
|
+
required_fields: [header, objective, metric, baseline, scope]
|
|
316
|
+
required_paths: [header.title, header.status, objective.description, objective.measurement]
|
|
317
|
+
forbidden_fields: [id, artifact, stable_id, objective_id]
|
|
318
|
+
retrieval:
|
|
319
|
+
exact: agentera state objective get --id ID --format json
|
|
320
|
+
list: agentera state objective list [--limit N] [--cursor TOKEN] --format json
|
|
321
|
+
ordering: created_desc_then_id_asc
|
|
322
|
+
default_limit: 20
|
|
323
|
+
maximum_limit: 100
|
|
324
|
+
max_utf8_bytes: 32768
|
|
325
|
+
cursor: opaque_snapshot_cursor
|
|
326
|
+
mutation_after_snapshot: cursor_snapshot_unavailable
|
|
327
|
+
omission: whole_entries_only_with_count_reason_continuation_and_exact_get
|
|
328
|
+
scalar_truncation: forbidden
|
|
329
|
+
- boundary: experiment
|
|
330
|
+
artifact: experiments
|
|
331
|
+
independently_mutable: true
|
|
332
|
+
relationships: [objective]
|
|
333
|
+
implementation: implemented
|
|
334
|
+
publication: immutable
|
|
335
|
+
baseline:
|
|
336
|
+
field: status
|
|
337
|
+
value: baseline
|
|
338
|
+
cardinality: exactly_one_when_experiments_exist
|
|
339
|
+
record:
|
|
340
|
+
required_fields: [objective, date, label, hypothesis, method, change, metric, regression, status, conclusion]
|
|
341
|
+
required_paths: [objective, date, label, status]
|
|
342
|
+
forbidden_fields: [id, artifact, number, experiment_number, stable_id, objective_id]
|
|
343
|
+
retrieval:
|
|
344
|
+
exact: agentera state experiments get --id ID --format json
|
|
345
|
+
list: agentera state experiments list --objective ID [--limit N] [--cursor TOKEN] --format json
|
|
346
|
+
ordering: date_desc_then_id_asc
|
|
347
|
+
default_limit: 20
|
|
348
|
+
maximum_limit: 100
|
|
349
|
+
max_utf8_bytes: 32768
|
|
350
|
+
cursor: opaque_snapshot_cursor
|
|
351
|
+
mutation_after_snapshot: cursor_snapshot_unavailable
|
|
352
|
+
omission: whole_entries_only_with_count_reason_continuation_and_exact_get
|
|
353
|
+
scalar_truncation: forbidden
|
|
354
|
+
- boundary: todo_item
|
|
355
|
+
artifact: todo
|
|
356
|
+
independently_mutable: true
|
|
357
|
+
relationships: []
|
|
358
|
+
implementation: implemented
|
|
359
|
+
publication: replace_owned_entity
|
|
360
|
+
record:
|
|
361
|
+
required_fields: [severity, status, description]
|
|
362
|
+
required_paths: []
|
|
363
|
+
forbidden_fields: [id, artifact, number, stable_id, artifact_id, entry_number, path]
|
|
364
|
+
retrieval:
|
|
365
|
+
exact: agentera state todo get --id ID --format json
|
|
366
|
+
list: agentera state todo list [--limit N] [--cursor TOKEN] --format json
|
|
367
|
+
ordering: severity_then_status_then_id
|
|
368
|
+
default_limit: 20
|
|
369
|
+
maximum_limit: 100
|
|
370
|
+
max_utf8_bytes: 32768
|
|
371
|
+
cursor: opaque_snapshot_cursor
|
|
372
|
+
mutation_after_snapshot: cursor_snapshot_unavailable
|
|
373
|
+
omission: whole_entries_only_with_count_reason_continuation_and_exact_get
|
|
374
|
+
scalar_truncation: forbidden
|
|
375
|
+
- boundary: documentation_inventory_entry
|
|
376
|
+
artifact: docs
|
|
377
|
+
independently_mutable: true
|
|
378
|
+
relationships: []
|
|
379
|
+
implementation: implemented
|
|
380
|
+
publication: replace_owned_entity
|
|
381
|
+
record:
|
|
382
|
+
required_fields: [document, path, last_updated, status]
|
|
383
|
+
required_paths: []
|
|
384
|
+
forbidden_fields: [id, artifact, number, stable_id, artifact_id, entry_number]
|
|
385
|
+
retrieval:
|
|
386
|
+
exact: agentera state docs get --id ID --format json
|
|
387
|
+
list: agentera state docs list [--limit N] [--cursor TOKEN] --format json
|
|
388
|
+
ordering: path_then_id
|
|
389
|
+
default_limit: 20
|
|
390
|
+
maximum_limit: 100
|
|
391
|
+
max_utf8_bytes: 32768
|
|
392
|
+
cursor: opaque_snapshot_cursor
|
|
393
|
+
mutation_after_snapshot: cursor_snapshot_unavailable
|
|
394
|
+
omission: whole_entries_only_with_count_reason_continuation_and_exact_get
|
|
395
|
+
scalar_truncation: forbidden
|
|
396
|
+
relationships:
|
|
397
|
+
representation: bare target entity ID in the named record field
|
|
398
|
+
integrity: every non-null target must resolve to exactly one entity with the declared target boundary
|
|
399
|
+
unresolved_behavior: whole-state validation and migration cutover fail without creating a target
|
|
400
|
+
declarations:
|
|
401
|
+
- source: decision_satisfaction
|
|
402
|
+
field: decision
|
|
403
|
+
target: decision
|
|
404
|
+
cardinality: exactly_one
|
|
405
|
+
- source: decision_revision
|
|
406
|
+
field: decision
|
|
407
|
+
target: decision
|
|
408
|
+
cardinality: exactly_one
|
|
409
|
+
- source: plan_task
|
|
410
|
+
field: plan
|
|
411
|
+
target: plan
|
|
412
|
+
cardinality: exactly_one
|
|
413
|
+
- source: plan_task
|
|
414
|
+
field: depends_on
|
|
415
|
+
target: plan_task
|
|
416
|
+
cardinality: zero_or_many_same_plan
|
|
417
|
+
- source: experiment
|
|
418
|
+
field: objective
|
|
419
|
+
target: objective
|
|
420
|
+
cardinality: exactly_one
|
|
421
|
+
views:
|
|
422
|
+
authority: non_authoritative_cli_rendering
|
|
423
|
+
mutation: forbidden
|
|
424
|
+
source: canonical entity files only after cutover
|
|
425
|
+
requirements:
|
|
426
|
+
- bounded lists expose id and artifact and provide exact get by id
|
|
427
|
+
- ordering and cursors bind to an explicit snapshot and never imply identity
|
|
428
|
+
- omissions expose counts, reasons, and exact retrieval commands
|
|
429
|
+
- nested plan/task and objective/experiment views are relationship projections
|
|
430
|
+
- startup views use the same entities and may omit detail only under declared budgets
|
|
431
|
+
intentional_singletons:
|
|
432
|
+
exhaustive: true
|
|
433
|
+
additions_require_authority_amendment: true
|
|
434
|
+
boundaries:
|
|
435
|
+
- boundary: vision
|
|
436
|
+
reason: one project north star; excluded from execution-cycle mutation
|
|
437
|
+
- boundary: design
|
|
438
|
+
reason: one project visual identity editorial artifact
|
|
439
|
+
- boundary: changelog
|
|
440
|
+
reason: one ordered release-history editorial artifact
|
|
441
|
+
- boundary: profile
|
|
442
|
+
reason: one reusable decision-profile document per selected profile
|
|
443
|
+
- boundary: runtime_local_session_state
|
|
444
|
+
reason: runtime-local and not canonical project entity state
|
|
445
|
+
- boundary: docs_mapping
|
|
446
|
+
reason: one project path and documentation-policy mapping, distinct from documentation inventory entries
|
|
447
|
+
conflict_rule: concurrent edits remain explicit whole-document conflicts
|
|
448
|
+
excluded_from_entity_migration:
|
|
449
|
+
- all intentional_singletons
|
|
450
|
+
- immutable historical prose and evidence, except structured references explicitly declared for rewrite
|
|
451
|
+
- genuinely singleton editorial artifacts added by an authority amendment
|
|
452
|
+
measurement_contract:
|
|
453
|
+
status: implemented
|
|
454
|
+
environment: Linux, Node.js 22 or newer, one cold CLI process per sample
|
|
455
|
+
fixtures:
|
|
456
|
+
small: 100 valid entities distributed across every declared entity boundary
|
|
457
|
+
large: 1000 valid entities distributed across every declared entity boundary
|
|
458
|
+
relationship_rule: every declared relationship has at least one valid fixture edge
|
|
459
|
+
sampling:
|
|
460
|
+
repetitions: 5
|
|
461
|
+
pass_rule: every repetition stays within every applicable limit
|
|
462
|
+
elapsed: wall-clock milliseconds from process start through complete serialized output
|
|
463
|
+
heap: process heapUsed peak minus heapUsed before fixture discovery
|
|
464
|
+
bytes: UTF-8 byte length of stdout including the trailing newline
|
|
465
|
+
targets:
|
|
466
|
+
exact_get:
|
|
467
|
+
max_latency_ms: 1000
|
|
468
|
+
max_heap_delta_bytes: 67108864
|
|
469
|
+
max_utf8_bytes: 1048576
|
|
470
|
+
bounded_list_small:
|
|
471
|
+
max_latency_ms: 5000
|
|
472
|
+
max_heap_delta_bytes: 67108864
|
|
473
|
+
max_utf8_bytes: 32768
|
|
474
|
+
bounded_list_large:
|
|
475
|
+
max_latency_ms: 15000
|
|
476
|
+
max_heap_delta_bytes: 268435456
|
|
477
|
+
max_utf8_bytes: 32768
|
|
478
|
+
startup_small:
|
|
479
|
+
max_latency_ms: 5000
|
|
480
|
+
max_heap_delta_bytes: 67108864
|
|
481
|
+
serialized_limits: budgets.startup.surfaces
|
|
482
|
+
startup_large:
|
|
483
|
+
max_latency_ms: 15000
|
|
484
|
+
max_heap_delta_bytes: 268435456
|
|
485
|
+
serialized_limits: budgets.startup.surfaces
|
|
486
|
+
failure_rule: >-
|
|
487
|
+
Over-budget results fail the target gate. They may return a measured
|
|
488
|
+
degraded envelope only where the referenced budget permits omission; they
|
|
489
|
+
never truncate bytes, omit required identity, or fabricate detail.
|
|
490
|
+
|
|
491
|
+
entity_migration:
|
|
492
|
+
status: one_way_forward_import_implemented
|
|
493
|
+
decision: 94
|
|
494
|
+
kind: single_full_upgrade_cutover
|
|
495
|
+
cutover_marker:
|
|
496
|
+
path: .agentera/state-mode.yaml
|
|
497
|
+
schema_version: agentera.stateMode.v1
|
|
498
|
+
entity_mode:
|
|
499
|
+
schemaVersion: agentera.stateMode.v1
|
|
500
|
+
mode: entities
|
|
501
|
+
absent_mode: legacy
|
|
502
|
+
invalid_behavior: fail_without_fallback
|
|
503
|
+
detection: read_only
|
|
504
|
+
publication_owner: development_channel_v2_to_v3_upgrade
|
|
505
|
+
selection: >-
|
|
506
|
+
Project state and CLI installation state are independent dimensions. A v3
|
|
507
|
+
CLI selects this cutover for recognized marker-absent v2 aggregate state
|
|
508
|
+
whether the CLI runs from a self-contained npm package or a source
|
|
509
|
+
checkout. Pending v1 Markdown state and marker-absent state with no
|
|
510
|
+
recognized v2 entity input are rejected with manual recovery instructions.
|
|
511
|
+
invocation:
|
|
512
|
+
explicit_apply: full_upgrade_yes_only
|
|
513
|
+
dry_run: optional_read_only_preview
|
|
514
|
+
ordinary_reads_migrate: false
|
|
515
|
+
ordinary_writes_migrate: false
|
|
516
|
+
apply_invokes_git: true
|
|
517
|
+
read_only_command: >-
|
|
518
|
+
npx -y agentera@next upgrade --channel development --project "$PWD" --dry-run
|
|
519
|
+
apply_command: >-
|
|
520
|
+
npx -y agentera@next upgrade --channel development --project "$PWD" --yes
|
|
521
|
+
apply_boundary: >-
|
|
522
|
+
Full upgrade serializes through the project writer lock, validates the
|
|
523
|
+
deterministic conversion, writes each missing canonical entity or accepts
|
|
524
|
+
an exact existing match, validates the complete graph, and writes the
|
|
525
|
+
authority marker last. There is no direct
|
|
526
|
+
entity apply, public operation ID, resume, rollback, or cross-major restore.
|
|
527
|
+
git_preflight:
|
|
528
|
+
required: true
|
|
529
|
+
project_root: exact_worktree_root
|
|
530
|
+
source: HEAD_commit
|
|
531
|
+
checkout: no_staged_modified_renamed_or_untracked_paths_except_exact_cutover_outputs
|
|
532
|
+
migration_inputs: regular_tracked_files_whose_bytes_and_executable_mode_match_HEAD
|
|
533
|
+
absent_input: absent_from_HEAD_and_worktree
|
|
534
|
+
ignored_or_untracked_input: refuse
|
|
535
|
+
verification: >-
|
|
536
|
+
Planning and apply resolve the current HEAD commit and prove every present
|
|
537
|
+
migration input is a safe regular tracked path whose bytes and executable
|
|
538
|
+
mode match that commit. Apply repeats the proof under the writer lock
|
|
539
|
+
before its first effect. Non-Git projects and dirty or unsupported source
|
|
540
|
+
state are refused before any selected upgrade effect.
|
|
541
|
+
upgrade_composition:
|
|
542
|
+
owner: development_channel_v2_to_v3_upgrade
|
|
543
|
+
selected_with: [full]
|
|
544
|
+
apply_consent: >-
|
|
545
|
+
The upgrade --yes consent derives all source and target bindings in
|
|
546
|
+
process. Users provide no hashes, approval files, migration IDs, --force,
|
|
547
|
+
or additional cutover consent. Any --only apply is rejected at this
|
|
548
|
+
cross-major boundary.
|
|
549
|
+
interruption: >-
|
|
550
|
+
A rerun recomputes the deterministic conversion from unchanged Git-bound
|
|
551
|
+
source, accepts existing canonical targets only when their bytes match,
|
|
552
|
+
writes the first missing target, validates the complete graph, and finishes
|
|
553
|
+
the marker forward. It never deletes or replaces canonical entities.
|
|
554
|
+
completed: >-
|
|
555
|
+
A valid entity marker makes legacy authority permanently inactive.
|
|
556
|
+
Repeated upgrade validates current entity state and reports a no-op;
|
|
557
|
+
normal entity writes may evolve records without reopening cutover.
|
|
558
|
+
preflight: >-
|
|
559
|
+
Upgrade plans artifact normalization, entity readiness, runtime work,
|
|
560
|
+
and cleanup read-only before any selected apply function runs. A detect,
|
|
561
|
+
artifact, or entity blocker prevents entity publication and activation.
|
|
562
|
+
Runtime or cleanup blockers do not prevent valid entity activation; their
|
|
563
|
+
resources remain untouched and are reported after the marker as
|
|
564
|
+
action-required work.
|
|
565
|
+
phase_filters: >-
|
|
566
|
+
Every --only apply is invalid during a v2-to-v3 boundary. Read-only
|
|
567
|
+
filtered preview may remain available.
|
|
568
|
+
legacy_projection: >-
|
|
569
|
+
Canonical v2 YAML and already-resolved v1 conversions are inventoried
|
|
570
|
+
directly. A pending v1 Markdown conversion is not projected through a
|
|
571
|
+
prerequisite write during planning and therefore blocks the composed
|
|
572
|
+
apply before effects.
|
|
573
|
+
lifecycle_normalization: >-
|
|
574
|
+
Deterministic legacy plan lifecycle normalization is part of entity
|
|
575
|
+
projection during cutover. Upgrade retains the original legacy YAML as
|
|
576
|
+
source and recovery evidence instead of rewriting it first.
|
|
577
|
+
empty_state: unsupported_unknown_source_with_manual_handoff
|
|
578
|
+
existing_entity_state: validate_then_no_op
|
|
579
|
+
source_scope:
|
|
580
|
+
included_entities: entity_target.entities
|
|
581
|
+
included_structured_relationships: entity_target.relationships.declarations
|
|
582
|
+
preserved_singletons: entity_target.intentional_singletons.boundaries
|
|
583
|
+
sources: >-
|
|
584
|
+
Current canonical files, verified immutable archives, overlays, revisions,
|
|
585
|
+
and validated source evidence are inventoried together without changing
|
|
586
|
+
their pre-cutover authority. Every present input must be recoverable from
|
|
587
|
+
the pinned Git commit.
|
|
588
|
+
recovered_projection_correlation: >-
|
|
589
|
+
Every archive carrying recovery_provenance must match the immutable
|
|
590
|
+
.agentera/archive/recovery/projection-correlation.yaml recovery set by
|
|
591
|
+
identity, archive bytes, final record SHA-256, parent/child Git proof or
|
|
592
|
+
legacy converter/source proof, current projection bytes, and overlay.
|
|
593
|
+
Missing, changed, new, replaced, or unlisted recovery evidence blocks.
|
|
594
|
+
internal_migration_diagnostic: true
|
|
595
|
+
read_only_preview:
|
|
596
|
+
implementation: implemented
|
|
597
|
+
ordering: artifact_then_boundary_then_source_identity_then_source_path
|
|
598
|
+
filter: complete_declared_inventory
|
|
599
|
+
source_fingerprint: >-
|
|
600
|
+
SHA-256 over canonical JSON containing every declared source path's
|
|
601
|
+
project-relative name, presence, byte length, byte SHA-256, permission
|
|
602
|
+
mode, regular-file type, device, and inode from one verified open
|
|
603
|
+
descriptor. Missing declared roots are represented explicitly with null
|
|
604
|
+
identity. No mtime, Git value, or cache participates.
|
|
605
|
+
project_root: >-
|
|
606
|
+
The selected root must exist, be a directory, and resolve without a
|
|
607
|
+
symbolic-link root or symbolic-link traversal. Failure is structured and
|
|
608
|
+
occurs before inventory or effects.
|
|
609
|
+
recursive_roots: >-
|
|
610
|
+
Every declared archive and objective inventory root is lstat-validated
|
|
611
|
+
before traversal and again when recursion enters it. Existing symbolic
|
|
612
|
+
links and non-directories are project-bound inventory failures; their
|
|
613
|
+
targets are never inventoried.
|
|
614
|
+
authority_binding: >-
|
|
615
|
+
The preview records the active state-storage authority schema version and
|
|
616
|
+
byte SHA-256. The complete preview digest includes both values, so any
|
|
617
|
+
authority-only change invalidates approval before an apply effect.
|
|
618
|
+
proposed_id: >-
|
|
619
|
+
Preview-only ten-letter candidates are deterministically allocated from a
|
|
620
|
+
domain-separated SHA-256 of the complete source fingerprint and canonical
|
|
621
|
+
source key. This is allocation of a new opaque target candidate, not
|
|
622
|
+
reconstruction of a missing source ID. A collision is a blocker. Apply
|
|
623
|
+
preserves the deterministic mapping in each canonical target path.
|
|
624
|
+
preview_digest: >-
|
|
625
|
+
SHA-256 over canonical JSON of the complete unbounded inventory, proposed
|
|
626
|
+
mapping, authority-validated final envelope byte SHA-256 values,
|
|
627
|
+
relationship rewrite map, counts, blockers, and source
|
|
628
|
+
fingerprint plus the project selector, complete-source filter, declared
|
|
629
|
+
order, and migration-authority binding before output omission.
|
|
630
|
+
target_validation: >-
|
|
631
|
+
Before preview can be ready or produce an approvable digest, every proposed
|
|
632
|
+
final envelope, record, public field vocabulary, and relationship graph is
|
|
633
|
+
validated through the same authority-backed canonical target validator used
|
|
634
|
+
defensively by upgrade apply and forward retry. A target failure is a corrupt blocker tied
|
|
635
|
+
to its source identity and recovery action; preserved nonentity residues are
|
|
636
|
+
excluded from target validation and publication.
|
|
637
|
+
output:
|
|
638
|
+
max_utf8_bytes: 32768
|
|
639
|
+
default_limit: 100
|
|
640
|
+
maximum_limit: 1000
|
|
641
|
+
omission: whole entries and diagnostics only
|
|
642
|
+
scalar_truncation: forbidden
|
|
643
|
+
required_omission_fields: [omitted, omitted_count, omission_reason, retrieval]
|
|
644
|
+
recovery: >-
|
|
645
|
+
--after SOURCE_IDENTITY advances from the last whole logical identity
|
|
646
|
+
returned only when accompanied by that page's --source-fingerprint and
|
|
647
|
+
--preview-digest. The digest binds the project selector, complete-source
|
|
648
|
+
filter, authority-declared order, migration authority, and complete
|
|
649
|
+
source snapshot. Any mismatch refuses continuation with a command that
|
|
650
|
+
omits --after and restarts from the current snapshot. Diagnostics travel
|
|
651
|
+
with their owning entry, so repeated use of retrieval.command recovers
|
|
652
|
+
every later omitted entry and diagnostic.
|
|
653
|
+
counts:
|
|
654
|
+
physical_records: every observed record before identity grouping
|
|
655
|
+
logical_identities: every source identity after grouping
|
|
656
|
+
mirrors: excess canonical-identical physical records grouped under one logical identity
|
|
657
|
+
duplicates: excess divergent physical records claiming one logical identity
|
|
658
|
+
conflicts: logical identities with divergent candidates plus proposed-target collisions
|
|
659
|
+
zero_write: >-
|
|
660
|
+
Inventory, preview, malformed-input handling, and source-binding checks
|
|
661
|
+
open no writer or upgrade lock and create no directory, temporary file,
|
|
662
|
+
mapping, snapshot, journal, cache, or state file.
|
|
663
|
+
binding: >-
|
|
664
|
+
Before any apply effect, recompute the complete preview and require its
|
|
665
|
+
source fingerprint and preview digest to match the Git-pinned preparation.
|
|
666
|
+
A mismatch refuses every selected effect.
|
|
667
|
+
source_outcomes:
|
|
668
|
+
valid_full:
|
|
669
|
+
outcome: ready
|
|
670
|
+
rule: map one complete validated source entity and every relationship exactly once
|
|
671
|
+
canonical_mirror:
|
|
672
|
+
outcome: ready_with_mirrored_provenance
|
|
673
|
+
rule: group canonical-identical physical records as one logical identity and retain every provenance class
|
|
674
|
+
degraded_recoverable:
|
|
675
|
+
outcome: ready_with_provenance
|
|
676
|
+
rule: admit only independently validated full detail and record its recovery provenance
|
|
677
|
+
summary_only_or_missing_detail:
|
|
678
|
+
outcome: blocked
|
|
679
|
+
rule: retain evidence and stop before publication; never reconstruct omitted fields
|
|
680
|
+
ambiguous_or_duplicate_identity:
|
|
681
|
+
outcome: blocked
|
|
682
|
+
rule: retain every candidate and require explicit disposition; never choose by order or recency
|
|
683
|
+
proposed_target_conflict:
|
|
684
|
+
outcome: blocked
|
|
685
|
+
rule: retain every colliding logical identity and allocate no winner
|
|
686
|
+
corrupt_or_unresolved_relationship:
|
|
687
|
+
outcome: blocked
|
|
688
|
+
rule: report the exact source and recovery action; never publish a partial graph
|
|
689
|
+
unsupported:
|
|
690
|
+
outcome: blocked
|
|
691
|
+
rule: preserve bytes and report the unsupported source contract
|
|
692
|
+
non_fabrication:
|
|
693
|
+
forbidden:
|
|
694
|
+
- synthetic entities for missing source detail
|
|
695
|
+
- inferred IDs from order, numbers, paths, timestamps, branches, writers, or Git references
|
|
696
|
+
- guessed relationship targets
|
|
697
|
+
- silent dropping, deduplication, or winner selection
|
|
698
|
+
partial_cutover_success: forbidden
|
|
699
|
+
forward_state:
|
|
700
|
+
persisted_recovery_state: none
|
|
701
|
+
publication_order: exact_or_missing_entities_then_graph_validation_then_marker
|
|
702
|
+
retry_rule: accept_exact_targets_and_continue_at_first_missing_path
|
|
703
|
+
divergent_target: stop_without_replacement_and_name_first_unresolved_path
|
|
704
|
+
forbidden_fields: [operation_id, migration_id, snapshots, source_bytes, inode_receipts, rollback_state]
|
|
705
|
+
historical_evidence: >-
|
|
706
|
+
Already committed .agentera/migrations content is inert and remains
|
|
707
|
+
byte-for-byte untouched. Read-only legacy manifest parsing is retained only
|
|
708
|
+
for public validation of entity markers created by the former cutover.
|
|
709
|
+
fault_test_hook: >-
|
|
710
|
+
Tests may set NODE_ENV=test and
|
|
711
|
+
AGENTERA_FAULT_INJECT_ENTITY_MIGRATION_AFTER_PHASE to one declared publication
|
|
712
|
+
phase. Other environments ignore the variable.
|
|
713
|
+
lifecycle:
|
|
714
|
+
- phase: inventory
|
|
715
|
+
mutates: false
|
|
716
|
+
exit: every source entity and relationship is classified
|
|
717
|
+
- phase: preview
|
|
718
|
+
mutates: false
|
|
719
|
+
exit: proposed graph, mapping, outcomes, blockers, and digest are complete
|
|
720
|
+
- phase: git_preflight
|
|
721
|
+
mutates: false
|
|
722
|
+
exit: project root, HEAD, clean checkout, source bytes, types, and modes match
|
|
723
|
+
- phase: publishing_entities
|
|
724
|
+
mutates: true
|
|
725
|
+
exit: every canonical target is an exact match or is published once
|
|
726
|
+
- phase: entities_published
|
|
727
|
+
mutates: false
|
|
728
|
+
exit: canonical source-to-target parity, uniqueness, ownership, relationships, and budgets pass
|
|
729
|
+
- phase: marker
|
|
730
|
+
mutates: true
|
|
731
|
+
exit: one durable marker activates entity_target and retires writable legacy authority
|
|
23
732
|
|
|
24
733
|
scope:
|
|
25
734
|
supported_artifacts:
|
|
@@ -422,7 +1131,7 @@ consumer_matrix:
|
|
|
422
1131
|
access_contract:
|
|
423
1132
|
startup: agentera prime --context <capability> --format json
|
|
424
1133
|
list: agentera state <artifact-id> list --limit 20 --format json
|
|
425
|
-
get: agentera state <artifact
|
|
1134
|
+
get: agentera state <artifact> get --id ID --format json
|
|
426
1135
|
policy: >-
|
|
427
1136
|
Use the bounded prime context first, then the bounded state list for
|
|
428
1137
|
discovery and exact state get for requested detail. Raw artifact or Git
|
|
@@ -601,7 +1310,7 @@ identity:
|
|
|
601
1310
|
accepted_pattern: '^(progress|decisions|health):[1-9][0-9]*$'
|
|
602
1311
|
example: decisions:53
|
|
603
1312
|
components:
|
|
604
|
-
artifact_id: one of scope
|
|
1313
|
+
artifact_id: one of the supported artifact values declared by scope
|
|
605
1314
|
entry_number: positive integer from the artifact's entry_number_field
|
|
606
1315
|
uniqueness: stable_id is unique within one project archive
|
|
607
1316
|
ordering:
|
|
@@ -879,10 +1588,12 @@ api:
|
|
|
879
1588
|
empty_result: status=ok with entries=[] and counts.total=0; absence is not an error
|
|
880
1589
|
durability:
|
|
881
1590
|
command: agentera check durability [--project PATH] [--artifact ARTIFACT] [--number N] [--limit N] --format json
|
|
1591
|
+
entity_command: agentera check durability --project PATH --artifact ARTIFACT --id ID --format json
|
|
882
1592
|
formats: [text, json, yaml]
|
|
883
1593
|
selectors:
|
|
884
1594
|
artifact: optional supported numbered archive artifact ID
|
|
885
1595
|
number: optional positive entry number; requires artifact
|
|
1596
|
+
id: entity-mode bare entity ID; requires artifact and replaces number after cutover
|
|
886
1597
|
limit: optional bounded result count
|
|
887
1598
|
default_limit: 100
|
|
888
1599
|
maximum_limit: 100
|
|
@@ -902,406 +1613,12 @@ api:
|
|
|
902
1613
|
deterministic: >-
|
|
903
1614
|
With unchanged local files and reachable refs, repeated checks emit the
|
|
904
1615
|
same ordered result and do not create state or contact a remote.
|
|
905
|
-
|
|
906
|
-
command:
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
default_limit: 100
|
|
912
|
-
maximum_limit: 100
|
|
913
|
-
maximum_commits: 500
|
|
914
|
-
maximum_history_bytes: 16777216
|
|
915
|
-
supported_artifacts: [progress, decisions, health]
|
|
916
|
-
reachable_refs: [HEAD, refs/heads, refs/tags]
|
|
917
|
-
excluded_refs: [refs/remotes, custom_refs]
|
|
918
|
-
apply_requires: [--apply, --force, --project PATH, --artifact ARTIFACT, --number N]
|
|
919
|
-
status_values: [complete, degraded, blocked, unavailable]
|
|
920
|
-
response:
|
|
921
|
-
required_fields: [command, mode, status, project, read_only, remote_contact, head, scan, counts, active_projections_unchanged, active_projection_hashes, omitted, omitted_count, omission_reason, continuation, entries, diagnostics, source_contract]
|
|
922
|
-
entry_fields: [entry_id, artifact_id, entry_number, commit, path, blob_id, content_hash, ambiguity_reason, eligible, reachable, provenance, operation, refusal]
|
|
923
|
-
modes:
|
|
924
|
-
inventory: >-
|
|
925
|
-
The default read-only mode reports up to maximum_limit final rows after
|
|
926
|
-
combining reachable and rewritten-history occurrences. Omitted rows
|
|
927
|
-
carry explicit omission metadata; returned rows include commit, path,
|
|
928
|
-
blob identity, stable entry ID, canonical content hash, and an explicit
|
|
929
|
-
ambiguity reason.
|
|
930
|
-
preview: >-
|
|
931
|
-
--dry-run is read-only and shows proposed immutable archive bytes only
|
|
932
|
-
for a returned exact unique candidate, together with every matching
|
|
933
|
-
provenance.
|
|
934
|
-
apply: >-
|
|
935
|
-
--apply --force is the only mutation mode. It requires one project,
|
|
936
|
-
artifact, and entry number. A prior --dry-run is optional. Apply
|
|
937
|
-
independently revalidates the selected project, current HEAD, allowed
|
|
938
|
-
ref reachability, candidate path/blob/content, and immutable archive
|
|
939
|
-
target immediately before publication, and never overwrites conflicts.
|
|
940
|
-
ambiguity_reasons:
|
|
941
|
-
- none
|
|
942
|
-
- conflicting_versions
|
|
943
|
-
- shallow_history
|
|
944
|
-
- history_rewritten
|
|
945
|
-
- missing_history
|
|
946
|
-
- corrupt_history
|
|
947
|
-
- changed_head
|
|
948
|
-
- scan_bounded
|
|
949
|
-
- git_unavailable
|
|
950
|
-
- immutable_conflict
|
|
951
|
-
- candidate_changed
|
|
952
|
-
- no_matching_pin
|
|
953
|
-
guarantees:
|
|
954
|
-
read_only_inventory_and_preview: true
|
|
955
|
-
apply_requires_force: true
|
|
956
|
-
preview_optional: true
|
|
957
|
-
apply_revalidation: >-
|
|
958
|
-
Apply repeats project, HEAD, allowed-ref reachability, candidate
|
|
959
|
-
provenance/content, and immutable-target checks immediately before
|
|
960
|
-
publication; a failed check preserves active projections and archives.
|
|
961
|
-
remote_contact: forbidden
|
|
962
|
-
custom_refs: forbidden
|
|
963
|
-
commit_fields_in_archive_records: forbidden
|
|
964
|
-
projection_writes: forbidden
|
|
965
|
-
immutable_conflicts: refuse_without_overwrite
|
|
966
|
-
retry: identical_publication_is_idempotent
|
|
967
|
-
failure_projection_rule: active_projections_remain_byte_identical
|
|
968
|
-
omission:
|
|
969
|
-
fields: [omitted, omitted_count, omission_reason, continuation]
|
|
970
|
-
complete_reason: none
|
|
971
|
-
bounded_reason: result_limit
|
|
972
|
-
continuation: >-
|
|
973
|
-
No cursor is issued. Use --artifact ARTIFACT --number N to retrieve an
|
|
974
|
-
omitted entry because --limit cannot exceed maximum_limit (100).
|
|
975
|
-
traceability:
|
|
976
|
-
provenance_fields: [commit, path, blob_id, entry_id, content_hash, reachable]
|
|
977
|
-
archive_record_forbids: [commit, commit_hash, git_commit, git_ref]
|
|
978
|
-
recovery: >-
|
|
979
|
-
Resolve the reported ambiguity, unavailable Git state, changed candidate,
|
|
980
|
-
or immutable conflict and retry the same exact selectors. A refused
|
|
981
|
-
operation leaves active projections and existing archives unchanged;
|
|
982
|
-
identical publication is an idempotent replay.
|
|
983
|
-
migrate:
|
|
984
|
-
namespace: agentera state migrate
|
|
985
|
-
command: >-
|
|
986
|
-
agentera state migrate [--project PATH] [--artifact ARTIFACT]
|
|
987
|
-
[--number N] [--path PATH] [--limit N]
|
|
988
|
-
[--dry-run|--apply --force] --format {text,json,yaml}
|
|
989
|
-
purpose: >-
|
|
990
|
-
Inventory bounded, project-local legacy state and define the only
|
|
991
|
-
authority for a later non-Git migration apply. This surface does not
|
|
992
|
-
infer missing records, contact Git, contact a remote, or remove legacy
|
|
993
|
-
source files.
|
|
994
|
-
implementation_boundary: >-
|
|
995
|
-
The runtime owns bounded, project-local candidate inventory and the
|
|
996
|
-
explicit archive, backup, projection, and mutation flow described here.
|
|
997
|
-
Inventory never reads Git or writes archives, backups, or projections;
|
|
998
|
-
migration remains independent of the optional Git backfill surface.
|
|
999
|
-
formats: [text, json, yaml]
|
|
1000
|
-
default_limit: 20
|
|
1001
|
-
maximum_limit: 100
|
|
1002
|
-
supported_artifacts: [progress, decisions, health]
|
|
1003
|
-
selectors:
|
|
1004
|
-
project:
|
|
1005
|
-
flag: --project PATH
|
|
1006
|
-
default: current_working_directory
|
|
1007
|
-
resolution: >-
|
|
1008
|
-
Resolve the selected directory to a real project root before any
|
|
1009
|
-
candidate is considered. The project root is selected explicitly or
|
|
1010
|
-
is the caller's current working directory; AGENTERA_HOME, profile
|
|
1011
|
-
paths, docs.yaml overrides, and Git worktrees do not replace it.
|
|
1012
|
-
artifact:
|
|
1013
|
-
flag: --artifact ARTIFACT
|
|
1014
|
-
required_for_apply: true
|
|
1015
|
-
valid_values: [progress, decisions, health]
|
|
1016
|
-
number:
|
|
1017
|
-
flag: --number N
|
|
1018
|
-
pattern: '^[1-9][0-9]*$'
|
|
1019
|
-
required_with: --artifact
|
|
1020
|
-
meaning: exact positive legacy entry number; never a positional offset
|
|
1021
|
-
path:
|
|
1022
|
-
flag: --path PATH
|
|
1023
|
-
pattern: '^[A-Za-z0-9][A-Za-z0-9._-]{0,63}\.(md|yaml|yml)$'
|
|
1024
|
-
relative_to: selected_project_root
|
|
1025
|
-
required_for_custom_apply: true
|
|
1026
|
-
meaning: exact candidate path pin; inventory may omit it to enumerate candidates
|
|
1027
|
-
limit:
|
|
1028
|
-
flag: --limit N
|
|
1029
|
-
default: 20
|
|
1030
|
-
minimum: 1
|
|
1031
|
-
maximum: 100
|
|
1032
|
-
meaning: maximum returned candidate summaries, not a scan escape hatch
|
|
1033
|
-
format:
|
|
1034
|
-
flag: --format FORMAT
|
|
1035
|
-
valid_values: [text, json, yaml]
|
|
1036
|
-
modes:
|
|
1037
|
-
inventory:
|
|
1038
|
-
selector: default when neither --dry-run nor --apply is present
|
|
1039
|
-
read_only: true
|
|
1040
|
-
writes: forbidden
|
|
1041
|
-
preview:
|
|
1042
|
-
selector: --dry-run
|
|
1043
|
-
read_only: true
|
|
1044
|
-
writes: forbidden
|
|
1045
|
-
output: exact proposed archive, backup, and projection operations only for addressable candidates
|
|
1046
|
-
apply:
|
|
1047
|
-
selector: --apply --force
|
|
1048
|
-
read_only: false
|
|
1049
|
-
mutation_intent: explicit_apply_and_force
|
|
1050
|
-
selectors_required: [--artifact, --number]
|
|
1051
|
-
mutation: >-
|
|
1052
|
-
The runtime publishes only after revalidating the selected candidate,
|
|
1053
|
-
project boundary, backup identity, and immutable archive identity.
|
|
1054
|
-
invalid_combinations:
|
|
1055
|
-
- flags: [--apply, --dry-run]
|
|
1056
|
-
failure_class: invalid_selector
|
|
1057
|
-
message: --apply and --dry-run are mutually exclusive
|
|
1058
|
-
- flags: [--apply]
|
|
1059
|
-
requires: --force
|
|
1060
|
-
failure_class: invalid_selector
|
|
1061
|
-
message: --apply requires explicit --force intent
|
|
1062
|
-
- flags: [--force]
|
|
1063
|
-
requires: --apply
|
|
1064
|
-
failure_class: invalid_selector
|
|
1065
|
-
message: --force requires --apply
|
|
1066
|
-
inventory:
|
|
1067
|
-
project_local: true
|
|
1068
|
-
bounded_scan:
|
|
1069
|
-
roots:
|
|
1070
|
-
- path: .
|
|
1071
|
-
maximum_depth: 1
|
|
1072
|
-
- path: .agentera
|
|
1073
|
-
maximum_depth: 1
|
|
1074
|
-
excluded_relative_paths:
|
|
1075
|
-
- .git
|
|
1076
|
-
- .agentera/archive
|
|
1077
|
-
- .agentera/overlays
|
|
1078
|
-
- .agentera/migration-backups
|
|
1079
|
-
maximum_candidate_files: 256
|
|
1080
|
-
maximum_file_bytes: 1048576
|
|
1081
|
-
maximum_total_bytes: 16777216
|
|
1082
|
-
ordering: normalized_relative_path_ascending
|
|
1083
|
-
candidate_rule: >-
|
|
1084
|
-
A candidate is a regular, non-symlink file directly under one declared
|
|
1085
|
-
scan root whose basename is ASCII and matches
|
|
1086
|
-
^[A-Za-z0-9][A-Za-z0-9._-]{0,63}\.(md|yaml|yml)$. Fixed legacy names
|
|
1087
|
-
are recognized first; every other accepted name is a custom candidate
|
|
1088
|
-
and remains project-local.
|
|
1089
|
-
fixed_names:
|
|
1090
|
-
- path: .agentera/PROGRESS.md
|
|
1091
|
-
artifact: progress
|
|
1092
|
-
- path: .agentera/DECISIONS.md
|
|
1093
|
-
artifact: decisions
|
|
1094
|
-
- path: .agentera/HEALTH.md
|
|
1095
|
-
artifact: health
|
|
1096
|
-
custom_name_rule: >-
|
|
1097
|
-
Custom names are discovered only within the declared roots and are
|
|
1098
|
-
never mapped from their basename alone. A custom candidate is
|
|
1099
|
-
addressable only when --path pins it, --artifact identifies the
|
|
1100
|
-
numbered artifact, and parsing yields exactly one supported stable
|
|
1101
|
-
identity for the requested --number. A candidate with zero, multiple,
|
|
1102
|
-
conflicting, or unsupported identities is inventory-visible but not
|
|
1103
|
-
apply-eligible.
|
|
1104
|
-
deterministic_rejections:
|
|
1105
|
-
unsafe_path: absolute paths, traversal segments, encoded traversal, URI paths, or symlink components
|
|
1106
|
-
escaping_path: realpath is outside the selected project root
|
|
1107
|
-
ambiguous_candidate: one candidate yields multiple artifact or entry identities, or identities conflict
|
|
1108
|
-
unsupported_candidate: unsupported extension, non-regular file, invalid encoding, or unsupported artifact shape
|
|
1109
|
-
scan_bounded: candidate or byte limits are exceeded; omitted candidates are reported, never silently dropped
|
|
1110
|
-
project_boundary:
|
|
1111
|
-
selected_root: resolved_realpath_of_project_selector
|
|
1112
|
-
candidate_rule: >-
|
|
1113
|
-
The candidate realpath and every existing parent must remain strictly
|
|
1114
|
-
beneath selected_root. The project root itself is not a candidate.
|
|
1115
|
-
reject: [absolute_candidate_path, traversal, encoded_traversal, uri_path, symlink_escape, outside_project]
|
|
1116
|
-
docs_mapping: forbidden
|
|
1117
|
-
remote_access: forbidden
|
|
1118
|
-
compatibility_window:
|
|
1119
|
-
name: v2_to_v3_local_state
|
|
1120
|
-
scope: numbered_progress_decisions_health_only
|
|
1121
|
-
supported_sources: [legacy_markdown, legacy_yaml, current_yaml_projection]
|
|
1122
|
-
classifications: [complete, degraded, blocked, unsupported]
|
|
1123
|
-
cases:
|
|
1124
|
-
new:
|
|
1125
|
-
classification: complete
|
|
1126
|
-
behavior: preserve current archive and projection authority
|
|
1127
|
-
legacy_full:
|
|
1128
|
-
classification: degraded
|
|
1129
|
-
behavior: archive exact parsed records and retain source provenance
|
|
1130
|
-
legacy_summary:
|
|
1131
|
-
classification: degraded
|
|
1132
|
-
behavior: preserve summary-only detail and never reconstruct absent fields
|
|
1133
|
-
non_git:
|
|
1134
|
-
classification: complete
|
|
1135
|
-
behavior: local inventory and publication do not require Git
|
|
1136
|
-
ambiguous:
|
|
1137
|
-
classification: blocked
|
|
1138
|
-
behavior: never choose between candidates; preserve all diagnostics
|
|
1139
|
-
corrupt:
|
|
1140
|
-
classification: blocked
|
|
1141
|
-
behavior: preserve source bytes and do not archive or project invalid records
|
|
1142
|
-
unsupported:
|
|
1143
|
-
classification: unsupported
|
|
1144
|
-
behavior: report a deterministic candidate diagnostic without mutation
|
|
1145
|
-
no_reconstruction: >-
|
|
1146
|
-
Missing, ambiguous, compacted, summary-only, and satisfaction-incomplete
|
|
1147
|
-
state remains explicitly classified. No fields, identity, satisfaction,
|
|
1148
|
-
provenance, or history are inferred from names, summaries, Git, or
|
|
1149
|
-
profile state. Decision 53 remains governed by overlays.decision_53_rules.
|
|
1150
|
-
backups:
|
|
1151
|
-
required_for_apply: true
|
|
1152
|
-
project_local: true
|
|
1153
|
-
root: .agentera/migration-backups
|
|
1154
|
-
path_template: .agentera/migration-backups/<sha256-relative-source>.bak
|
|
1155
|
-
bytes: exact_source_bytes_before_projection
|
|
1156
|
-
identity: sha256(relative_source_path + NUL + source_bytes)
|
|
1157
|
-
publication: exclusive_immutable_file
|
|
1158
|
-
existing_backup: >-
|
|
1159
|
-
An identical backup is an idempotent replay. Different bytes at the
|
|
1160
|
-
same backup identity are backup_conflict and block without overwrite.
|
|
1161
|
-
cleanup: forbidden
|
|
1162
|
-
required_before_projection: true
|
|
1163
|
-
publication:
|
|
1164
|
-
order:
|
|
1165
|
-
- validate_candidate_and_selector
|
|
1166
|
-
- publish_immutable_archive_record
|
|
1167
|
-
- publish_immutable_backup
|
|
1168
|
-
- publish_current_projection
|
|
1169
|
-
archive_before_projection: true
|
|
1170
|
-
archive_immutability: storage.archive.mutation_policy
|
|
1171
|
-
projection_failure: >-
|
|
1172
|
-
Leave archive, backup, and the pre-existing projection bytes unchanged
|
|
1173
|
-
except for successfully published immutable artifacts; retry must replay
|
|
1174
|
-
identical artifacts rather than restart or synthesize a new identity.
|
|
1175
|
-
monotonic_states: [inventory, previewed, archive_published, backup_published, projection_published]
|
|
1176
|
-
retry: >-
|
|
1177
|
-
Repeating the same project, selector, source bytes, and canonical record
|
|
1178
|
-
is an idempotent replay. The same stable identity with different bytes
|
|
1179
|
-
is immutable_conflict; no existing archive, backup, or projection bytes
|
|
1180
|
-
may be overwritten.
|
|
1181
|
-
git:
|
|
1182
|
-
required: false
|
|
1183
|
-
reads: forbidden
|
|
1184
|
-
remote_contact: forbidden
|
|
1185
|
-
completion_independent: true
|
|
1186
|
-
provenance: local_source_path_and_content_hash_only
|
|
1187
|
-
result:
|
|
1188
|
-
schema_version: agentera.stateMigrationResult.v1
|
|
1189
|
-
statuses: [complete, degraded, blocked, unavailable]
|
|
1190
|
-
required_fields: [schemaVersion, command, status, mode, project, read_only, mutation_intent, mutation_performed, remote_contact, inventory_performed, entries, counts, diagnostics, source_contract, omitted, omitted_count, omission_reason, retrieval]
|
|
1191
|
-
entry_fields: [candidate_id, path, artifact_id, entry_number, classification, detail_availability, compatibility, source, addressable, size_bytes, rejection, provenance]
|
|
1192
|
-
count_fields: [physical, addressable, addressable_ids, unaddressable, ambiguous, mirrored, duplicate, conflict, omitted]
|
|
1193
|
-
count_rules:
|
|
1194
|
-
physical:
|
|
1195
|
-
source: all_candidates
|
|
1196
|
-
operation: count
|
|
1197
|
-
addressable:
|
|
1198
|
-
source: visible_entries
|
|
1199
|
-
operation: count
|
|
1200
|
-
predicates: [{field: addressable, equals: true}]
|
|
1201
|
-
addressable_ids:
|
|
1202
|
-
source: visible_entries
|
|
1203
|
-
operation: distinct
|
|
1204
|
-
field: candidate_id
|
|
1205
|
-
unaddressable:
|
|
1206
|
-
source: visible_entries
|
|
1207
|
-
operation: count
|
|
1208
|
-
predicates:
|
|
1209
|
-
- {field: addressable, equals: false}
|
|
1210
|
-
- {field: classification, not_equals: ambiguous}
|
|
1211
|
-
ambiguous:
|
|
1212
|
-
source: visible_entries
|
|
1213
|
-
operation: count
|
|
1214
|
-
predicates: [{field: classification, equals: ambiguous}]
|
|
1215
|
-
mirrored:
|
|
1216
|
-
source: visible_entries
|
|
1217
|
-
operation: count
|
|
1218
|
-
predicates: [{field: classification, equals: mirrored}]
|
|
1219
|
-
duplicate:
|
|
1220
|
-
source: visible_entries
|
|
1221
|
-
operation: count
|
|
1222
|
-
predicates: [{field: classification, equals: duplicate}]
|
|
1223
|
-
conflict:
|
|
1224
|
-
source: visible_entries
|
|
1225
|
-
operation: count
|
|
1226
|
-
predicates: [{field: classification, equals: conflict}]
|
|
1227
|
-
omitted:
|
|
1228
|
-
source: omitted_count
|
|
1229
|
-
operation: value
|
|
1230
|
-
omission:
|
|
1231
|
-
fields: [omitted, omitted_count, omission_reason, retrieval]
|
|
1232
|
-
field_sources:
|
|
1233
|
-
omitted: has_omissions
|
|
1234
|
-
omitted_count: omitted_count
|
|
1235
|
-
omission_reason: omission_reason
|
|
1236
|
-
retrieval: retrieval
|
|
1237
|
-
complete_reason: none
|
|
1238
|
-
bounded_reason: scan_bounded
|
|
1239
|
-
output_bounded_reason: serialized_output_byte_budget
|
|
1240
|
-
retry: >-
|
|
1241
|
-
Retry with narrower project or selectors, or use the bounded list
|
|
1242
|
-
pointer to continue from the same normalized snapshot.
|
|
1243
|
-
output_retry: >-
|
|
1244
|
-
Retry with a smaller --limit or narrower selectors; use --path with
|
|
1245
|
-
--artifact and --number to address one omitted candidate. The omitted
|
|
1246
|
-
records remain accounted for and no state was changed by output bounding.
|
|
1247
|
-
retrieval: >-
|
|
1248
|
-
agentera state migrate --project PATH [selectors] --limit N
|
|
1249
|
-
semantics: >-
|
|
1250
|
-
Omitted candidates are represented by omitted=true, omitted_count,
|
|
1251
|
-
omission_reason, and a bounded retry/list pointer. Text, JSON, and YAML
|
|
1252
|
-
are projections of the same envelope and never contain unbounded records.
|
|
1253
|
-
failures:
|
|
1254
|
-
schema_version: agentera.stateFailure.v1
|
|
1255
|
-
deterministic: >-
|
|
1256
|
-
The same authority, project bytes, selectors, and local filesystem
|
|
1257
|
-
state produce the same failure class, syntax, example, and recovery.
|
|
1258
|
-
classes:
|
|
1259
|
-
- class: invalid_selector
|
|
1260
|
-
message: selector is missing, duplicated, malformed, or not allowed for the selected mode
|
|
1261
|
-
example: agentera state migrate --number 1 --format json
|
|
1262
|
-
recovery: add one supported --artifact selector and retry; no state was changed
|
|
1263
|
-
- class: project_boundary
|
|
1264
|
-
message: selected project or candidate path escapes the project boundary
|
|
1265
|
-
example: agentera state migrate --path ../secrets.yaml --format json
|
|
1266
|
-
recovery: select a project-local relative path; no state was changed
|
|
1267
|
-
- class: unsupported_candidate
|
|
1268
|
-
message: candidate is not a supported regular file or artifact shape
|
|
1269
|
-
example: agentera state migrate --path .agentera/state.txt --format json
|
|
1270
|
-
recovery: use a supported Markdown or YAML candidate; no state was changed
|
|
1271
|
-
- class: ambiguous_candidate
|
|
1272
|
-
message: candidate has multiple or conflicting supported identities
|
|
1273
|
-
example: agentera state migrate --artifact progress --number 1 --path CUSTOM.md --dry-run --format json
|
|
1274
|
-
recovery: resolve the candidate ambiguity before retrying; no state was changed
|
|
1275
|
-
- class: corrupt_candidate
|
|
1276
|
-
message: candidate bytes or parsed record fail the declared artifact schema
|
|
1277
|
-
example: agentera state migrate --artifact decisions --number 53 --dry-run --format json
|
|
1278
|
-
recovery: repair or preserve the source and retry only after validation; no state was changed
|
|
1279
|
-
- class: backup_conflict
|
|
1280
|
-
message: immutable backup identity already contains different source bytes
|
|
1281
|
-
example: agentera state migrate --artifact progress --number 1 --apply --force --format json
|
|
1282
|
-
recovery: preserve the existing backup and resolve the source conflict; no projection was changed
|
|
1283
|
-
- class: immutable_conflict
|
|
1284
|
-
message: immutable archive identity already contains different canonical content
|
|
1285
|
-
example: agentera state migrate --artifact progress --number 1 --apply --force --format json
|
|
1286
|
-
recovery: preserve the existing archive and resolve the identity conflict; no projection was changed
|
|
1287
|
-
- class: changed_candidate
|
|
1288
|
-
message: candidate changed between inventory, preview, and apply
|
|
1289
|
-
example: agentera state migrate --artifact health --number 1 --apply --force --format json
|
|
1290
|
-
recovery: rerun inventory and preview against the current local bytes; no projection was changed
|
|
1291
|
-
- class: scan_bounded
|
|
1292
|
-
message: bounded candidate or byte limit was exceeded
|
|
1293
|
-
example: agentera state migrate --limit 100 --format json
|
|
1294
|
-
recovery: narrow the project or selectors; omitted candidates remain reported
|
|
1295
|
-
guarantees:
|
|
1296
|
-
read_only_inventory_and_preview: true
|
|
1297
|
-
apply_requires_force: true
|
|
1298
|
-
archive_before_projection: true
|
|
1299
|
-
backups_before_projection: true
|
|
1300
|
-
monotonic_retry: true
|
|
1301
|
-
archive_immutability: true
|
|
1302
|
-
project_local: true
|
|
1303
|
-
remote_contact: forbidden
|
|
1304
|
-
git_independent: true
|
|
1616
|
+
entity_migration_discovery:
|
|
1617
|
+
command: agentera state migrate entities --project PATH --dry-run --format json
|
|
1618
|
+
implementation: implemented
|
|
1619
|
+
read_only: true
|
|
1620
|
+
writes: forbidden
|
|
1621
|
+
authority: entity_migration.read_only_preview
|
|
1305
1622
|
cursor:
|
|
1306
1623
|
syntax: opaque TOKEN returned as response.next_cursor
|
|
1307
1624
|
first_page: omit --cursor to establish a snapshot
|