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.
Files changed (428) hide show
  1. package/README.md +1 -1
  2. package/bundle/CHANGELOG.md +55 -8
  3. package/bundle/README.md +3 -3
  4. package/bundle/references/artifacts/glossary-entry-contract.yaml +18 -5
  5. package/bundle/references/artifacts/state-storage-authority.yaml +865 -171
  6. package/bundle/references/cli/agent-ready-state-contract.yaml +12 -12
  7. package/bundle/references/cli/audience-namespace-cli-migration.yaml +5 -5
  8. package/bundle/references/cli/prime-consumer-compatibility.yaml +58 -18
  9. package/bundle/references/cli/vocabulary-index.yaml +1 -1
  10. package/bundle/references/cli/vocabulary.md +4 -3
  11. package/bundle/skills/agentera/SKILL.md +23 -4
  12. package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +3 -3
  13. package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +3 -1
  14. package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +2 -1
  15. package/bundle/skills/agentera/capabilities/discuss/schemas/validation.yaml +3 -1
  16. package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +2 -2
  17. package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +3 -1
  18. package/bundle/skills/agentera/capabilities/profile/schemas/artifacts.yaml +3 -1
  19. package/bundle/skills/agentera/capabilities/status/schemas/artifacts.yaml +2 -1
  20. package/bundle/skills/agentera/capability_schema_contract.yaml +1 -1
  21. package/bundle/skills/agentera/schemas/artifacts/plan.yaml +89 -30
  22. package/bundle/skills/agentera/schemas/artifacts/todo.yaml +103 -20
  23. package/dist/analytics/extractCorpus/cli.js.map +1 -1
  24. package/dist/analytics/extractCorpus/copilotSessions.js.map +1 -1
  25. package/dist/analytics/extractCorpus/core.js.map +1 -1
  26. package/dist/analytics/extractCorpus/corpus.js.map +1 -1
  27. package/dist/analytics/extractCorpus/coverageAudit.js.map +1 -1
  28. package/dist/analytics/extractCorpus/cursorSessions.js.map +1 -1
  29. package/dist/analytics/extractCorpus/evidenceTiers.js.map +1 -1
  30. package/dist/analytics/extractCorpus/extractCorpusParity.js.map +1 -1
  31. package/dist/analytics/extractCorpus/filesystemSources.js.map +1 -1
  32. package/dist/analytics/extractCorpus/index.js.map +1 -1
  33. package/dist/analytics/extractCorpus/jsonlSessions.js.map +1 -1
  34. package/dist/analytics/extractCorpus/sqliteCaps.js.map +1 -1
  35. package/dist/analytics/extractCorpus/sqliteSessions.js.map +1 -1
  36. package/dist/analytics/extractCorpus/tierReader.js.map +1 -1
  37. package/dist/analytics/extractCorpus.js.map +1 -1
  38. package/dist/analytics/glossaryAdviceResolution.js.map +1 -1
  39. package/dist/analytics/glossaryInputAcquisition.js.map +1 -1
  40. package/dist/analytics/personalGlossaryAdmission.js.map +1 -1
  41. package/dist/analytics/personalGlossaryProfile.js +2 -1
  42. package/dist/analytics/personalGlossaryProfile.js.map +1 -1
  43. package/dist/analytics/profileSignals.js.map +1 -1
  44. package/dist/analytics/usageStats.js.map +1 -1
  45. package/dist/audit/terminologyDrift.js.map +1 -1
  46. package/dist/bin/agentera.js.map +1 -1
  47. package/dist/capabilities/audit/instructions.js.map +1 -1
  48. package/dist/capabilities/build/instructions.js +2 -2
  49. package/dist/capabilities/build/instructions.js.map +1 -1
  50. package/dist/capabilities/design/instructions.js.map +1 -1
  51. package/dist/capabilities/discuss/instructions.js +2 -1
  52. package/dist/capabilities/discuss/instructions.js.map +1 -1
  53. package/dist/capabilities/document/instructions.js.map +1 -1
  54. package/dist/capabilities/index.js +1 -1
  55. package/dist/capabilities/index.js.map +1 -1
  56. package/dist/capabilities/optimize/instructions.js +1 -0
  57. package/dist/capabilities/optimize/instructions.js.map +1 -1
  58. package/dist/capabilities/orchestrate/instructions.js.map +1 -1
  59. package/dist/capabilities/plan/instructions.js +3 -2
  60. package/dist/capabilities/plan/instructions.js.map +1 -1
  61. package/dist/capabilities/profile/instructions.js.map +1 -1
  62. package/dist/capabilities/research/instructions.js.map +1 -1
  63. package/dist/capabilities/status/instructions.js +8 -1
  64. package/dist/capabilities/status/instructions.js.map +1 -1
  65. package/dist/capabilities/status/startupInstructions.js.map +1 -1
  66. package/dist/capabilities/vision/instructions.js.map +1 -1
  67. package/dist/cli/appContext.js.map +1 -1
  68. package/dist/cli/argvalidate.js.map +1 -1
  69. package/dist/cli/capabilityContext/benchmark.js +2 -1
  70. package/dist/cli/capabilityContext/benchmark.js.map +1 -1
  71. package/dist/cli/capabilityContext/bespoke.js.map +1 -1
  72. package/dist/cli/capabilityContext/build.js +6 -6
  73. package/dist/cli/capabilityContext/build.js.map +1 -1
  74. package/dist/cli/capabilityContext/closeout.js +11 -7
  75. package/dist/cli/capabilityContext/closeout.js.map +1 -1
  76. package/dist/cli/capabilityContext/contract.js +4 -4
  77. package/dist/cli/capabilityContext/contract.js.map +1 -1
  78. package/dist/cli/capabilityContext/evidence.js +4 -4
  79. package/dist/cli/capabilityContext/evidence.js.map +1 -1
  80. package/dist/cli/capabilityContext/index.js.map +1 -1
  81. package/dist/cli/capabilityContext/orchestration.js +12 -7
  82. package/dist/cli/capabilityContext/orchestration.js.map +1 -1
  83. package/dist/cli/capabilityContext/planState.js.map +1 -1
  84. package/dist/cli/capabilityContext/progress.js.map +1 -1
  85. package/dist/cli/capabilityContext/projectVerification.js.map +1 -1
  86. package/dist/cli/capabilityContext/shared.js +2 -2
  87. package/dist/cli/capabilityContext/shared.js.map +1 -1
  88. package/dist/cli/capabilityContext/slim.js.map +1 -1
  89. package/dist/cli/capabilityContext/startup.js +6 -2
  90. package/dist/cli/capabilityContext/startup.js.map +1 -1
  91. package/dist/cli/capabilityContext/types.js +19 -14
  92. package/dist/cli/capabilityContext/types.js.map +1 -1
  93. package/dist/cli/capabilityContext.js.map +1 -1
  94. package/dist/cli/commands/appHome.js.map +1 -1
  95. package/dist/cli/commands/capability.js.map +1 -1
  96. package/dist/cli/commands/compact.js.map +1 -1
  97. package/dist/cli/commands/doctor.js.map +1 -1
  98. package/dist/cli/commands/durability.js.map +1 -1
  99. package/dist/cli/commands/entityMigrate.js.map +1 -1
  100. package/dist/cli/commands/glossaryAdvice.js.map +1 -1
  101. package/dist/cli/commands/lint.js.map +1 -1
  102. package/dist/cli/commands/personalGlossary.js.map +1 -1
  103. package/dist/cli/commands/prime/briefOrientation.js +260 -44
  104. package/dist/cli/commands/prime/briefOrientation.js.map +1 -1
  105. package/dist/cli/commands/prime/buildExecutionRequest.js.map +1 -1
  106. package/dist/cli/commands/prime/bundleStatus.js.map +1 -1
  107. package/dist/cli/commands/prime/collectEntityOrientation.js +22 -13
  108. package/dist/cli/commands/prime/collectEntityOrientation.js.map +1 -1
  109. package/dist/cli/commands/prime/collectOrientationState.js +20 -28
  110. package/dist/cli/commands/prime/collectOrientationState.js.map +1 -1
  111. package/dist/cli/commands/prime/orientationOutput.js +4 -5
  112. package/dist/cli/commands/prime/orientationOutput.js.map +1 -1
  113. package/dist/cli/commands/prime/types.js.map +1 -1
  114. package/dist/cli/commands/prime/v1Migration.js.map +1 -1
  115. package/dist/cli/commands/prime.js +1 -1
  116. package/dist/cli/commands/prime.js.map +1 -1
  117. package/dist/cli/commands/profileGrounding.js +29 -50
  118. package/dist/cli/commands/profileGrounding.js.map +1 -1
  119. package/dist/cli/commands/query.js.map +1 -1
  120. package/dist/cli/commands/report.js.map +1 -1
  121. package/dist/cli/commands/route.js.map +1 -1
  122. package/dist/cli/commands/schema.js +4 -43
  123. package/dist/cli/commands/schema.js.map +1 -1
  124. package/dist/cli/commands/state/decisions.js +1 -1
  125. package/dist/cli/commands/state/decisions.js.map +1 -1
  126. package/dist/cli/commands/state/docs.js.map +1 -1
  127. package/dist/cli/commands/state/experimentRecords.js +28 -15
  128. package/dist/cli/commands/state/experimentRecords.js.map +1 -1
  129. package/dist/cli/commands/state/experiments.js.map +1 -1
  130. package/dist/cli/commands/state/get.js +6 -3
  131. package/dist/cli/commands/state/get.js.map +1 -1
  132. package/dist/cli/commands/state/health.js.map +1 -1
  133. package/dist/cli/commands/state/index.js +3 -46
  134. package/dist/cli/commands/state/index.js.map +1 -1
  135. package/dist/cli/commands/state/list.js +41 -22
  136. package/dist/cli/commands/state/list.js.map +1 -1
  137. package/dist/cli/commands/state/objective.js.map +1 -1
  138. package/dist/cli/commands/state/plan.js.map +1 -1
  139. package/dist/cli/commands/state/planTasks.js +26 -13
  140. package/dist/cli/commands/state/planTasks.js.map +1 -1
  141. package/dist/cli/commands/state/plans.js +31 -19
  142. package/dist/cli/commands/state/plans.js.map +1 -1
  143. package/dist/cli/commands/state/progress.js.map +1 -1
  144. package/dist/cli/commands/state/shared.js.map +1 -1
  145. package/dist/cli/commands/state/todo.js +2 -1
  146. package/dist/cli/commands/state/todo.js.map +1 -1
  147. package/dist/cli/commands/state/write.js +52 -48
  148. package/dist/cli/commands/state/write.js.map +1 -1
  149. package/dist/cli/commands/upgrade.js.map +1 -1
  150. package/dist/cli/commands/upgradeVerify.js.map +1 -1
  151. package/dist/cli/commands/validate.js +44 -4
  152. package/dist/cli/commands/validate.js.map +1 -1
  153. package/dist/cli/commands/verify.js.map +1 -1
  154. package/dist/cli/contracts/bundleStatus.js.map +1 -1
  155. package/dist/cli/contracts/orientationState.js.map +1 -1
  156. package/dist/cli/dispatch/argvParser.js.map +1 -1
  157. package/dist/cli/dispatch/check.js.map +1 -1
  158. package/dist/cli/dispatch/commands.js.map +1 -1
  159. package/dist/cli/dispatch/index.js +12 -4
  160. package/dist/cli/dispatch/index.js.map +1 -1
  161. package/dist/cli/dispatch/lifecycle.js.map +1 -1
  162. package/dist/cli/dispatch/prime.js.map +1 -1
  163. package/dist/cli/dispatch/shared.js.map +1 -1
  164. package/dist/cli/dispatch/state.js +53 -86
  165. package/dist/cli/dispatch/state.js.map +1 -1
  166. package/dist/cli/dispatch.js.map +1 -1
  167. package/dist/cli/errors.js.map +1 -1
  168. package/dist/cli/help.js +134 -48
  169. package/dist/cli/help.js.map +1 -1
  170. package/dist/cli/migrationRequired.js.map +1 -1
  171. package/dist/cli/orientation/attention.js +8 -5
  172. package/dist/cli/orientation/attention.js.map +1 -1
  173. package/dist/cli/orientation/corpusCoverage.js.map +1 -1
  174. package/dist/cli/orientation.js +61 -38
  175. package/dist/cli/orientation.js.map +1 -1
  176. package/dist/cli/planArtifacts.js.map +1 -1
  177. package/dist/cli/planEvidence.js.map +1 -1
  178. package/dist/cli/planLifecycleState.js +3 -1
  179. package/dist/cli/planLifecycleState.js.map +1 -1
  180. package/dist/cli/planTaskIndex.js.map +1 -1
  181. package/dist/cli/prime-blob.js +2 -1
  182. package/dist/cli/prime-blob.js.map +1 -1
  183. package/dist/cli/profileAcquisition.js +168 -0
  184. package/dist/cli/profileAcquisition.js.map +1 -0
  185. package/dist/cli/startupCompletenessContract.js +5 -2
  186. package/dist/cli/startupCompletenessContract.js.map +1 -1
  187. package/dist/cli/stateQuery.js.map +1 -1
  188. package/dist/cli/structured.js.map +1 -1
  189. package/dist/cli/todoMarkdown.js +25 -11
  190. package/dist/cli/todoMarkdown.js.map +1 -1
  191. package/dist/cli/todoReadinessSelection.js +52 -17
  192. package/dist/cli/todoReadinessSelection.js.map +1 -1
  193. package/dist/cli/todoSeverity.js.map +1 -1
  194. package/dist/core/atomicWriter.js.map +1 -1
  195. package/dist/core/difflib.js.map +1 -1
  196. package/dist/core/envPaths.js.map +1 -1
  197. package/dist/core/jsonValue.js.map +1 -1
  198. package/dist/core/paths.js.map +1 -1
  199. package/dist/core/pyjson.js.map +1 -1
  200. package/dist/core/shell.js +5 -0
  201. package/dist/core/shell.js.map +1 -0
  202. package/dist/core/skillIdentity.js.map +1 -1
  203. package/dist/core/sourceRoot.js.map +1 -1
  204. package/dist/core/text.js.map +1 -1
  205. package/dist/core/toml.js.map +1 -1
  206. package/dist/core/yaml.js.map +1 -1
  207. package/dist/eval/evalSkills.js.map +1 -1
  208. package/dist/eval/hybridRouteEvaluation.js.map +1 -1
  209. package/dist/eval/semanticEval.js.map +1 -1
  210. package/dist/eval/semanticFixtures.js.map +1 -1
  211. package/dist/hooks/common.js.map +1 -1
  212. package/dist/hooks/compaction/apply.js.map +1 -1
  213. package/dist/hooks/compaction/dryRun.js.map +1 -1
  214. package/dist/hooks/compaction/index.js.map +1 -1
  215. package/dist/hooks/compaction/parse.js.map +1 -1
  216. package/dist/hooks/compaction/retention.js.map +1 -1
  217. package/dist/hooks/compaction/status.js.map +1 -1
  218. package/dist/hooks/compaction/types.js.map +1 -1
  219. package/dist/hooks/cursorPreToolUse.js.map +1 -1
  220. package/dist/hooks/cursorSessionStart.js.map +1 -1
  221. package/dist/hooks/projectHookInput.js.map +1 -1
  222. package/dist/hooks/sessionStart.js.map +1 -1
  223. package/dist/hooks/sessionStop.js.map +1 -1
  224. package/dist/hooks/validateArtifact/agentFacing.js.map +1 -1
  225. package/dist/hooks/validateArtifact/index.js.map +1 -1
  226. package/dist/hooks/validateArtifact/markdown.js.map +1 -1
  227. package/dist/hooks/validateArtifact/runtime.js.map +1 -1
  228. package/dist/hooks/validateArtifact/schema.js +6 -0
  229. package/dist/hooks/validateArtifact/schema.js.map +1 -1
  230. package/dist/hooks/validateArtifact/traversal.js.map +1 -1
  231. package/dist/hooks/validateArtifact/violations.js.map +1 -1
  232. package/dist/migrate/v2HandoffManifest.js.map +1 -1
  233. package/dist/registries/artifactProtocolIds.js.map +1 -1
  234. package/dist/registries/artifactRegistry.js.map +1 -1
  235. package/dist/registries/artifactSchemaProjection.js +46 -0
  236. package/dist/registries/artifactSchemaProjection.js.map +1 -0
  237. package/dist/registries/capabilityContract.js.map +1 -1
  238. package/dist/registries/evaluatorHandoffContract.js.map +1 -1
  239. package/dist/registries/evidenceTierContract.js.map +1 -1
  240. package/dist/registries/glossaryAdviceContract.js.map +1 -1
  241. package/dist/registries/glossaryCaveatContract.js.map +1 -1
  242. package/dist/registries/glossaryConsumerContractValidation.js +1 -5
  243. package/dist/registries/glossaryConsumerContractValidation.js.map +1 -1
  244. package/dist/registries/glossaryEntryContract.js +10 -0
  245. package/dist/registries/glossaryEntryContract.js.map +1 -1
  246. package/dist/registries/glossaryTermIdentity.js.map +1 -1
  247. package/dist/registries/glossaryTermOccurrence.js.map +1 -1
  248. package/dist/registries/hybridRoute.js.map +1 -1
  249. package/dist/registries/hybridRouteReceipt.js.map +1 -1
  250. package/dist/registries/packageRegistry.js.map +1 -1
  251. package/dist/registries/todoReadinessContract.js +49 -6
  252. package/dist/registries/todoReadinessContract.js.map +1 -1
  253. package/dist/registries/triggerLoader.js.map +1 -1
  254. package/dist/registries/verbosityBudgetContract.js.map +1 -1
  255. package/dist/release/releaseMetadata.js.map +1 -1
  256. package/dist/runtime/lifecycleAdapterContract.js.map +1 -1
  257. package/dist/runtime/lifecycleAdapters.js.map +1 -1
  258. package/dist/runtime/lifecycleAuthority.js.map +1 -1
  259. package/dist/runtime/lifecycleOperationContract.js.map +1 -1
  260. package/dist/runtime/lifecycleOperations.js.map +1 -1
  261. package/dist/runtime/lifecycleOwnershipJournal.js.map +1 -1
  262. package/dist/runtime/lifecyclePublication.js.map +1 -1
  263. package/dist/runtime/lifecycleSnapshot.js.map +1 -1
  264. package/dist/runtime/nativeResourceCleanup.js.map +1 -1
  265. package/dist/setup/codex/cli.js.map +1 -1
  266. package/dist/setup/codex/configToml.js.map +1 -1
  267. package/dist/setup/codex/constants.js.map +1 -1
  268. package/dist/setup/codex/installRoot.js.map +1 -1
  269. package/dist/setup/codex/state.js.map +1 -1
  270. package/dist/setup/codex.js.map +1 -1
  271. package/dist/setup/opencode.js.map +1 -1
  272. package/dist/setup/opencodeConstants.js.map +1 -1
  273. package/dist/setup/sharedSkill.js.map +1 -1
  274. package/dist/setup/smokeChecks.js.map +1 -1
  275. package/dist/state/archiveDiscovery.js +8 -5
  276. package/dist/state/archiveDiscovery.js.map +1 -1
  277. package/dist/state/archivePublication.js.map +1 -1
  278. package/dist/state/archiveRecovery.js.map +1 -1
  279. package/dist/state/archiveReplay.js.map +1 -1
  280. package/dist/state/canonicalMigrationRecord.js.map +1 -1
  281. package/dist/state/changelog.js.map +1 -1
  282. package/dist/state/decisionEntities.js +59 -20
  283. package/dist/state/decisionEntities.js.map +1 -1
  284. package/dist/state/decisionLegacyValidation.js.map +1 -1
  285. package/dist/state/decisionMigrationProvenance.js.map +1 -1
  286. package/dist/state/decisionOverlay.js.map +1 -1
  287. package/dist/state/decisionRevision.js.map +1 -1
  288. package/dist/state/decisionRevisionMigration.js.map +1 -1
  289. package/dist/state/directRetrieval.js.map +1 -1
  290. package/dist/state/durability.js.map +1 -1
  291. package/dist/state/entityCutover.js.map +1 -1
  292. package/dist/state/entityCutoverGit.js.map +1 -1
  293. package/dist/state/entityGlossaryAuthority.js.map +1 -1
  294. package/dist/state/entityListProjection.js +188 -0
  295. package/dist/state/entityListProjection.js.map +1 -0
  296. package/dist/state/entityListRuntimeRegistry.js +50 -0
  297. package/dist/state/entityListRuntimeRegistry.js.map +1 -0
  298. package/dist/state/entityMigrationCausality.js.map +1 -1
  299. package/dist/state/entityMigrationIdentity.js.map +1 -1
  300. package/dist/state/entityMigrationPreview.js +32 -3
  301. package/dist/state/entityMigrationPreview.js.map +1 -1
  302. package/dist/state/entityPublicationContext.js +607 -765
  303. package/dist/state/entityPublicationContext.js.map +1 -1
  304. package/dist/state/entityRetrievalHelp.js +476 -0
  305. package/dist/state/entityRetrievalHelp.js.map +1 -0
  306. package/dist/state/entityStorage.js.map +1 -1
  307. package/dist/state/exactReplacementRecovery.js +19 -0
  308. package/dist/state/exactReplacementRecovery.js.map +1 -0
  309. package/dist/state/experimentArchive.js.map +1 -1
  310. package/dist/state/experimentIdentity.js.map +1 -1
  311. package/dist/state/healthEntities.js +15 -16
  312. package/dist/state/healthEntities.js.map +1 -1
  313. package/dist/state/healthEntityValidation.js.map +1 -1
  314. package/dist/state/healthRepair.js.map +1 -1
  315. package/dist/state/installRoot.js.map +1 -1
  316. package/dist/state/legacyEntityCutoverEvidence.js.map +1 -1
  317. package/dist/state/legacyIdentity.js.map +1 -1
  318. package/dist/state/legacySummaryRecord.js.map +1 -1
  319. package/dist/state/listAccounting.js.map +1 -1
  320. package/dist/state/listClassification.js.map +1 -1
  321. package/dist/state/listCursor.js.map +1 -1
  322. package/dist/state/listRetrieval.js.map +1 -1
  323. package/dist/state/migrationSourceBinding.js.map +1 -1
  324. package/dist/state/objectiveExperimentEntities.js +22 -22
  325. package/dist/state/objectiveExperimentEntities.js.map +1 -1
  326. package/dist/state/planEntities.js +75 -29
  327. package/dist/state/planEntities.js.map +1 -1
  328. package/dist/state/planIdentity.js +4 -1
  329. package/dist/state/planIdentity.js.map +1 -1
  330. package/dist/state/planRetrieval.js.map +1 -1
  331. package/dist/state/planTaskRetrieval.js +41 -31
  332. package/dist/state/planTaskRetrieval.js.map +1 -1
  333. package/dist/state/progressEntities.js +40 -25
  334. package/dist/state/progressEntities.js.map +1 -1
  335. package/dist/state/progressGlossaryCaveat.js.map +1 -1
  336. package/dist/state/progressPublicationOrder.js.map +1 -1
  337. package/dist/state/projectRoot.js.map +1 -1
  338. package/dist/state/projectionPolicy.js +12 -5
  339. package/dist/state/projectionPolicy.js.map +1 -1
  340. package/dist/state/retrievalAuthority.js +86 -272
  341. package/dist/state/retrievalAuthority.js.map +1 -1
  342. package/dist/state/safeProjectFile.js.map +1 -1
  343. package/dist/state/startupAnalysis/benchmark.js.map +1 -1
  344. package/dist/state/startupAnalysis/contract.js.map +1 -1
  345. package/dist/state/startupAnalysis/helpers.js.map +1 -1
  346. package/dist/state/startupAnalysis/index.js.map +1 -1
  347. package/dist/state/startupAnalysis/metrics.js.map +1 -1
  348. package/dist/state/startupAnalysis/records.js.map +1 -1
  349. package/dist/state/startupAnalysis/report.js.map +1 -1
  350. package/dist/state/startupAnalysis/threshold.js.map +1 -1
  351. package/dist/state/startupAnalysis.js.map +1 -1
  352. package/dist/state/startupProjection.js.map +1 -1
  353. package/dist/state/stateMode.js +11 -8
  354. package/dist/state/stateMode.js.map +1 -1
  355. package/dist/state/stateStorageAuthority.js.map +1 -1
  356. package/dist/state/summaryEntityRead.js.map +1 -1
  357. package/dist/state/summaryMigrationProvenance.js.map +1 -1
  358. package/dist/state/summarySourceRowAuthority.js.map +1 -1
  359. package/dist/state/todoDocsEntities.js +811 -91
  360. package/dist/state/todoDocsEntities.js.map +1 -1
  361. package/dist/state/todoDocsEntityValidation.js +127 -2
  362. package/dist/state/todoDocsEntityValidation.js.map +1 -1
  363. package/dist/state/todoReconciliationActivation.js +63 -0
  364. package/dist/state/todoReconciliationActivation.js.map +1 -0
  365. package/dist/state/todoReconciliationTransaction.js +554 -0
  366. package/dist/state/todoReconciliationTransaction.js.map +1 -0
  367. package/dist/state/write/assign.js.map +1 -1
  368. package/dist/state/write/candidateMutation.js +1 -12
  369. package/dist/state/write/candidateMutation.js.map +1 -1
  370. package/dist/state/write/errors.js.map +1 -1
  371. package/dist/state/write/experimentPublication.js.map +1 -1
  372. package/dist/state/write/explain.js +198 -177
  373. package/dist/state/write/explain.js.map +1 -1
  374. package/dist/state/write/fields.js.map +1 -1
  375. package/dist/state/write/glossaryPublication.js.map +1 -1
  376. package/dist/state/write/grammar.js +271 -0
  377. package/dist/state/write/grammar.js.map +1 -0
  378. package/dist/state/write/helpers.js.map +1 -1
  379. package/dist/state/write/index.js.map +1 -1
  380. package/dist/state/write/input.js +351 -5
  381. package/dist/state/write/input.js.map +1 -1
  382. package/dist/state/write/lock.js.map +1 -1
  383. package/dist/state/write/mutation.js.map +1 -1
  384. package/dist/state/write/operations.js +140 -343
  385. package/dist/state/write/operations.js.map +1 -1
  386. package/dist/state/write/planEvaluation.js +4 -0
  387. package/dist/state/write/planEvaluation.js.map +1 -1
  388. package/dist/state/write/planPublication.js +48 -3
  389. package/dist/state/write/planPublication.js.map +1 -1
  390. package/dist/state/write/runtimeOperations.js +65 -0
  391. package/dist/state/write/runtimeOperations.js.map +1 -0
  392. package/dist/state/write/serialize.js.map +1 -1
  393. package/dist/state/write/transaction.js +13 -7
  394. package/dist/state/write/transaction.js.map +1 -1
  395. package/dist/state/write/validate.js.map +1 -1
  396. package/dist/upgrade/appContentRefresh.js.map +1 -1
  397. package/dist/upgrade/appModel.js.map +1 -1
  398. package/dist/upgrade/atomicWriter.js.map +1 -1
  399. package/dist/upgrade/bundleEvidence.js.map +1 -1
  400. package/dist/upgrade/channels.js.map +1 -1
  401. package/dist/upgrade/coexistenceProbe.js.map +1 -1
  402. package/dist/upgrade/compatibility.js.map +1 -1
  403. package/dist/upgrade/doctor.js.map +1 -1
  404. package/dist/upgrade/doctorClassifier.js.map +1 -1
  405. package/dist/upgrade/installedHooksRetirement.js.map +1 -1
  406. package/dist/upgrade/legacyAgentCleanup.js.map +1 -1
  407. package/dist/upgrade/lifecycleUpgrade.js.map +1 -1
  408. package/dist/upgrade/migrateArtifactsV2ToV3.js.map +1 -1
  409. package/dist/upgrade/migrationPublication.js.map +1 -1
  410. package/dist/upgrade/nextMajorDoctor.js.map +1 -1
  411. package/dist/upgrade/npxPlatformStatus.js.map +1 -1
  412. package/dist/upgrade/projectIntegration.js.map +1 -1
  413. package/dist/upgrade/projectIntegrationDecision.js.map +1 -1
  414. package/dist/upgrade/runtimeMigration.js.map +1 -1
  415. package/dist/upgrade/upgradeCommands.js.map +1 -1
  416. package/dist/upgrade/upgradeLock.js.map +1 -1
  417. package/dist/upgrade/upgradeOrchestrator.js.map +1 -1
  418. package/dist/upgrade/v3CapabilitySurface.js.map +1 -1
  419. package/dist/upgrade/versionResolution.js.map +1 -1
  420. package/dist/validate/appHomeContract.js.map +1 -1
  421. package/dist/validate/capability.js.map +1 -1
  422. package/dist/validate/crossCapability.js.map +1 -1
  423. package/dist/validate/selfAudit.js.map +1 -1
  424. package/dist/validate/v1LegacyCruft.js.map +1 -1
  425. package/dist/validate/vocabularyAuthority.js.map +1 -1
  426. package/package.json +2 -2
  427. package/dist/state/experimentRetrieval.js +0 -447
  428. 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 is rooted through held directory descriptors. The
140
- root and exact valid marker identity and bytes are revalidated before
141
- each directory, stage, and immutable-link boundary and after durable
142
- publication before success. Because Node cannot make pathname
143
- validation and mutation one kernel operation, a detected substitution
144
- rolls back only attempt-owned links, stages, and empty directories by
145
- pinned identity; final failure retains no attempt-owned entity state.
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: replace_owned_entity
727
+ publication: reconcile_markdown_under_recoverable_journal
492
728
  record:
493
- required_fields: [severity, status, description]
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: severity_then_status_then_id
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
- retrieval:
1091
- schema_version: agentera.stateRetrievalAuthority.v1
1092
- status: plan_task_plan_and_experiment_retrieval_implemented
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 owns public list/get envelopes, cursors, selectors, identities,
1102
- omissions, and structured retrieval failures. It does not replace storage
1103
- ownership: canonical entity files remain authoritative after the durable
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: whole_entries
1175
- identity:
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: task_number_asc
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
- validation:
2235
- authority: this file plus the referenced JSON surface manifest
2236
- drift_rule: tests fail if manifest IDs or byte values disagree with this contract
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: []