agentera 3.0.0-dev.26 → 3.0.0-dev.28

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 (385) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +13 -3
  3. package/bundle/CHANGELOG.md +14 -1
  4. package/bundle/DESIGN.md +3 -7
  5. package/bundle/README.md +1 -4
  6. package/bundle/UPGRADE.md +33 -0
  7. package/bundle/fixtures/routing/hybrid-corpus.yaml +154 -0
  8. package/bundle/references/adapters/package-registry.yaml +2 -0
  9. package/bundle/references/adapters/package-surface-characterization.md +10 -5
  10. package/bundle/references/analysis/benchmark.md +4 -0
  11. package/bundle/references/analysis/verification-policy.yaml +142 -0
  12. package/bundle/references/artifacts/state-storage-authority.yaml +303 -14
  13. package/bundle/references/cli/capability-instruction-structure.md +2 -2
  14. package/bundle/references/cli/hybrid-route-contract.yaml +416 -0
  15. package/bundle/references/cli/prime-consumer-compatibility.yaml +77 -32
  16. package/bundle/references/cli/routing-model.md +136 -91
  17. package/bundle/references/cli/trigger-schema-enrichment.md +50 -46
  18. package/bundle/references/cli/vocabulary.md +7 -9
  19. package/bundle/references/meta/documentation-inventory.md +2 -2
  20. package/bundle/skills/agentera/SKILL.md +50 -18
  21. package/bundle/skills/agentera/capabilities/audit/schemas/triggers.yaml +13 -35
  22. package/bundle/skills/agentera/capabilities/build/schemas/triggers.yaml +14 -36
  23. package/bundle/skills/agentera/capabilities/design/schemas/triggers.yaml +5 -34
  24. package/bundle/skills/agentera/capabilities/discuss/schemas/triggers.yaml +6 -40
  25. package/bundle/skills/agentera/capabilities/document/schemas/triggers.yaml +5 -34
  26. package/bundle/skills/agentera/capabilities/optimize/schemas/triggers.yaml +4 -35
  27. package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +3 -2
  28. package/bundle/skills/agentera/capabilities/orchestrate/schemas/exit.yaml +1 -1
  29. package/bundle/skills/agentera/capabilities/orchestrate/schemas/triggers.yaml +5 -37
  30. package/bundle/skills/agentera/capabilities/plan/schemas/triggers.yaml +8 -31
  31. package/bundle/skills/agentera/capabilities/profile/schemas/triggers.yaml +8 -37
  32. package/bundle/skills/agentera/capabilities/research/schemas/triggers.yaml +5 -29
  33. package/bundle/skills/agentera/capabilities/status/schemas/triggers.yaml +7 -47
  34. package/bundle/skills/agentera/capabilities/vision/schemas/triggers.yaml +7 -39
  35. package/bundle/skills/agentera/capability_schema_contract.yaml +29 -29
  36. package/bundle/skills/agentera/route-phrases.yaml +81 -0
  37. package/bundle/skills/agentera/schemas/artifacts/plan.yaml +23 -5
  38. package/dist/analytics/extractCorpus/cli.js.map +1 -1
  39. package/dist/analytics/extractCorpus/copilotSessions.js.map +1 -1
  40. package/dist/analytics/extractCorpus/core.js.map +1 -1
  41. package/dist/analytics/extractCorpus/corpus.js.map +1 -1
  42. package/dist/analytics/extractCorpus/coverageAudit.js.map +1 -1
  43. package/dist/analytics/extractCorpus/cursorSessions.js.map +1 -1
  44. package/dist/analytics/extractCorpus/evidenceTiers.js.map +1 -1
  45. package/dist/analytics/extractCorpus/extractCorpusParity.js +1 -1
  46. package/dist/analytics/extractCorpus/extractCorpusParity.js.map +1 -1
  47. package/dist/analytics/extractCorpus/filesystemSources.js.map +1 -1
  48. package/dist/analytics/extractCorpus/index.js.map +1 -1
  49. package/dist/analytics/extractCorpus/jsonlSessions.js.map +1 -1
  50. package/dist/analytics/extractCorpus/sqliteCaps.js.map +1 -1
  51. package/dist/analytics/extractCorpus/sqliteSessions.js.map +1 -1
  52. package/dist/analytics/extractCorpus/tierReader.js.map +1 -1
  53. package/dist/analytics/extractCorpus.js.map +1 -1
  54. package/dist/analytics/profileSignals.js.map +1 -1
  55. package/dist/analytics/usageStats.js.map +1 -1
  56. package/dist/bin/agentera.js.map +1 -1
  57. package/dist/capabilities/audit/instructions.js.map +1 -1
  58. package/dist/capabilities/build/instructions.js.map +1 -1
  59. package/dist/capabilities/design/instructions.js.map +1 -1
  60. package/dist/capabilities/discuss/instructions.js +1 -1
  61. package/dist/capabilities/discuss/instructions.js.map +1 -1
  62. package/dist/capabilities/document/instructions.js.map +1 -1
  63. package/dist/capabilities/index.js.map +1 -1
  64. package/dist/capabilities/optimize/instructions.js.map +1 -1
  65. package/dist/capabilities/orchestrate/instructions.js +1 -1
  66. package/dist/capabilities/orchestrate/instructions.js.map +1 -1
  67. package/dist/capabilities/plan/instructions.js +1 -1
  68. package/dist/capabilities/plan/instructions.js.map +1 -1
  69. package/dist/capabilities/profile/instructions.js.map +1 -1
  70. package/dist/capabilities/research/instructions.js.map +1 -1
  71. package/dist/capabilities/status/instructions.js.map +1 -1
  72. package/dist/capabilities/status/startupInstructions.js.map +1 -1
  73. package/dist/capabilities/vision/instructions.js.map +1 -1
  74. package/dist/cli/appContext.js.map +1 -1
  75. package/dist/cli/argvalidate.js.map +1 -1
  76. package/dist/cli/capabilityContext/benchmark.js.map +1 -1
  77. package/dist/cli/capabilityContext/bespoke.js.map +1 -1
  78. package/dist/cli/capabilityContext/build.js.map +1 -1
  79. package/dist/cli/capabilityContext/closeout.js.map +1 -1
  80. package/dist/cli/capabilityContext/contract.js.map +1 -1
  81. package/dist/cli/capabilityContext/evidence.js +1 -1
  82. package/dist/cli/capabilityContext/evidence.js.map +1 -1
  83. package/dist/cli/capabilityContext/index.js.map +1 -1
  84. package/dist/cli/capabilityContext/orchestration.js +15 -5
  85. package/dist/cli/capabilityContext/orchestration.js.map +1 -1
  86. package/dist/cli/capabilityContext/planState.js +1 -1
  87. package/dist/cli/capabilityContext/planState.js.map +1 -1
  88. package/dist/cli/capabilityContext/progress.js.map +1 -1
  89. package/dist/cli/capabilityContext/shared.js.map +1 -1
  90. package/dist/cli/capabilityContext/slim.js +16 -3
  91. package/dist/cli/capabilityContext/slim.js.map +1 -1
  92. package/dist/cli/capabilityContext/startup.js +3 -0
  93. package/dist/cli/capabilityContext/startup.js.map +1 -1
  94. package/dist/cli/capabilityContext/types.js.map +1 -1
  95. package/dist/cli/capabilityContext.js.map +1 -1
  96. package/dist/cli/commands/appHome.js.map +1 -1
  97. package/dist/cli/commands/capability.js.map +1 -1
  98. package/dist/cli/commands/compact.js.map +1 -1
  99. package/dist/cli/commands/doctor.js.map +1 -1
  100. package/dist/cli/commands/durability.js.map +1 -1
  101. package/dist/cli/commands/entityMigrate.js +7 -3
  102. package/dist/cli/commands/entityMigrate.js.map +1 -1
  103. package/dist/cli/commands/lint.js.map +1 -1
  104. package/dist/cli/commands/prime/briefOrientation.js +33 -8
  105. package/dist/cli/commands/prime/briefOrientation.js.map +1 -1
  106. package/dist/cli/commands/prime/bundleStatus.js.map +1 -1
  107. package/dist/cli/commands/prime/collectEntityOrientation.js +117 -18
  108. package/dist/cli/commands/prime/collectEntityOrientation.js.map +1 -1
  109. package/dist/cli/commands/prime/collectOrientationState.js +4 -2
  110. package/dist/cli/commands/prime/collectOrientationState.js.map +1 -1
  111. package/dist/cli/commands/prime/orientationOutput.js +47 -18
  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 +47 -23
  116. package/dist/cli/commands/prime.js.map +1 -1
  117. package/dist/cli/commands/query.js.map +1 -1
  118. package/dist/cli/commands/report.js.map +1 -1
  119. package/dist/cli/commands/route.js +142 -0
  120. package/dist/cli/commands/route.js.map +1 -0
  121. package/dist/cli/commands/schema.js.map +1 -1
  122. package/dist/cli/commands/state/decisions.js.map +1 -1
  123. package/dist/cli/commands/state/docs.js.map +1 -1
  124. package/dist/cli/commands/state/experimentRecords.js.map +1 -1
  125. package/dist/cli/commands/state/experiments.js.map +1 -1
  126. package/dist/cli/commands/state/get.js.map +1 -1
  127. package/dist/cli/commands/state/health.js.map +1 -1
  128. package/dist/cli/commands/state/index.js.map +1 -1
  129. package/dist/cli/commands/state/list.js.map +1 -1
  130. package/dist/cli/commands/state/objective.js.map +1 -1
  131. package/dist/cli/commands/state/plan.js.map +1 -1
  132. package/dist/cli/commands/state/planTasks.js.map +1 -1
  133. package/dist/cli/commands/state/plans.js.map +1 -1
  134. package/dist/cli/commands/state/progress.js.map +1 -1
  135. package/dist/cli/commands/state/shared.js.map +1 -1
  136. package/dist/cli/commands/state/todo.js.map +1 -1
  137. package/dist/cli/commands/state/write.js +21 -2
  138. package/dist/cli/commands/state/write.js.map +1 -1
  139. package/dist/cli/commands/upgrade.js.map +1 -1
  140. package/dist/cli/commands/upgradeVerify.js.map +1 -1
  141. package/dist/cli/commands/validate.js.map +1 -1
  142. package/dist/cli/commands/verify.js +17 -1
  143. package/dist/cli/commands/verify.js.map +1 -1
  144. package/dist/cli/contracts/bundleStatus.js.map +1 -1
  145. package/dist/cli/contracts/orientationState.js.map +1 -1
  146. package/dist/cli/dispatch/argvParser.js.map +1 -1
  147. package/dist/cli/dispatch/check.js.map +1 -1
  148. package/dist/cli/dispatch/commands.js.map +1 -1
  149. package/dist/cli/dispatch/index.js +18 -0
  150. package/dist/cli/dispatch/index.js.map +1 -1
  151. package/dist/cli/dispatch/lifecycle.js.map +1 -1
  152. package/dist/cli/dispatch/prime.js.map +1 -1
  153. package/dist/cli/dispatch/shared.js.map +1 -1
  154. package/dist/cli/dispatch/state.js.map +1 -1
  155. package/dist/cli/dispatch.js.map +1 -1
  156. package/dist/cli/errors.js +2 -2
  157. package/dist/cli/errors.js.map +1 -1
  158. package/dist/cli/help.js +20 -1
  159. package/dist/cli/help.js.map +1 -1
  160. package/dist/cli/migrationRequired.js +1 -1
  161. package/dist/cli/migrationRequired.js.map +1 -1
  162. package/dist/cli/orientation/attention.js.map +1 -1
  163. package/dist/cli/orientation/corpusCoverage.js.map +1 -1
  164. package/dist/cli/orientation.js +18 -4
  165. package/dist/cli/orientation.js.map +1 -1
  166. package/dist/cli/planArtifacts.js.map +1 -1
  167. package/dist/cli/planEvidence.js.map +1 -1
  168. package/dist/cli/planLifecycleState.js.map +1 -1
  169. package/dist/cli/planTaskIndex.js +12 -0
  170. package/dist/cli/planTaskIndex.js.map +1 -0
  171. package/dist/cli/prime-blob.js +1 -1
  172. package/dist/cli/prime-blob.js.map +1 -1
  173. package/dist/cli/startupCompletenessContract.js.map +1 -1
  174. package/dist/cli/stateQuery.js.map +1 -1
  175. package/dist/cli/structured.js.map +1 -1
  176. package/dist/cli/todoMarkdown.js.map +1 -1
  177. package/dist/cli/todoSeverity.js.map +1 -1
  178. package/dist/core/atomicWriter.js.map +1 -1
  179. package/dist/core/difflib.js.map +1 -1
  180. package/dist/core/envPaths.js.map +1 -1
  181. package/dist/core/jsonValue.js.map +1 -1
  182. package/dist/core/paths.js.map +1 -1
  183. package/dist/core/pyjson.js.map +1 -1
  184. package/dist/core/skillIdentity.js.map +1 -1
  185. package/dist/core/sourceRoot.js.map +1 -1
  186. package/dist/core/text.js.map +1 -1
  187. package/dist/core/toml.js.map +1 -1
  188. package/dist/core/yaml.js.map +1 -1
  189. package/dist/eval/evalSkills.js.map +1 -1
  190. package/dist/eval/hybridRouteEvaluation.js +156 -0
  191. package/dist/eval/hybridRouteEvaluation.js.map +1 -0
  192. package/dist/eval/semanticEval.js.map +1 -1
  193. package/dist/eval/semanticFixtures.js.map +1 -1
  194. package/dist/hooks/common.js.map +1 -1
  195. package/dist/hooks/compaction/apply.js.map +1 -1
  196. package/dist/hooks/compaction/dryRun.js.map +1 -1
  197. package/dist/hooks/compaction/index.js.map +1 -1
  198. package/dist/hooks/compaction/parse.js.map +1 -1
  199. package/dist/hooks/compaction/retention.js.map +1 -1
  200. package/dist/hooks/compaction/status.js.map +1 -1
  201. package/dist/hooks/compaction/types.js.map +1 -1
  202. package/dist/hooks/cursorPreToolUse.js.map +1 -1
  203. package/dist/hooks/cursorSessionStart.js.map +1 -1
  204. package/dist/hooks/projectHookInput.js.map +1 -1
  205. package/dist/hooks/sessionStart.js.map +1 -1
  206. package/dist/hooks/sessionStop.js.map +1 -1
  207. package/dist/hooks/validateArtifact/agentFacing.js.map +1 -1
  208. package/dist/hooks/validateArtifact/index.js.map +1 -1
  209. package/dist/hooks/validateArtifact/markdown.js.map +1 -1
  210. package/dist/hooks/validateArtifact/runtime.js.map +1 -1
  211. package/dist/hooks/validateArtifact/schema.js.map +1 -1
  212. package/dist/hooks/validateArtifact/traversal.js.map +1 -1
  213. package/dist/hooks/validateArtifact/violations.js.map +1 -1
  214. package/dist/migrate/v2HandoffManifest.js.map +1 -1
  215. package/dist/registries/artifactProtocolIds.js.map +1 -1
  216. package/dist/registries/artifactRegistry.js.map +1 -1
  217. package/dist/registries/capabilityContract.js +5 -20
  218. package/dist/registries/capabilityContract.js.map +1 -1
  219. package/dist/registries/evaluatorHandoffContract.js.map +1 -1
  220. package/dist/registries/evidenceTierContract.js.map +1 -1
  221. package/dist/registries/hybridRoute.js +203 -0
  222. package/dist/registries/hybridRoute.js.map +1 -0
  223. package/dist/registries/hybridRouteReceipt.js +221 -0
  224. package/dist/registries/hybridRouteReceipt.js.map +1 -0
  225. package/dist/registries/packageRegistry.js.map +1 -1
  226. package/dist/registries/triggerLoader.js +7 -43
  227. package/dist/registries/triggerLoader.js.map +1 -1
  228. package/dist/registries/verbosityBudgetContract.js.map +1 -1
  229. package/dist/release/releaseMetadata.js +2 -0
  230. package/dist/release/releaseMetadata.js.map +1 -1
  231. package/dist/runtime/lifecycleAdapterContract.js.map +1 -1
  232. package/dist/runtime/lifecycleAdapters.js.map +1 -1
  233. package/dist/runtime/lifecycleAuthority.js.map +1 -1
  234. package/dist/runtime/lifecycleOperationContract.js.map +1 -1
  235. package/dist/runtime/lifecycleOperations.js.map +1 -1
  236. package/dist/runtime/lifecycleOwnershipJournal.js.map +1 -1
  237. package/dist/runtime/lifecyclePublication.js.map +1 -1
  238. package/dist/runtime/lifecycleSnapshot.js.map +1 -1
  239. package/dist/runtime/retiredRuntimeCleanup.js.map +1 -1
  240. package/dist/setup/codex/agents.js.map +1 -1
  241. package/dist/setup/codex/cli.js.map +1 -1
  242. package/dist/setup/codex/configToml.js.map +1 -1
  243. package/dist/setup/codex/constants.js.map +1 -1
  244. package/dist/setup/codex/installRoot.js.map +1 -1
  245. package/dist/setup/codex/state.js.map +1 -1
  246. package/dist/setup/codex.js.map +1 -1
  247. package/dist/setup/opencode.js.map +1 -1
  248. package/dist/setup/opencodeConstants.js.map +1 -1
  249. package/dist/setup/sharedSkill.js.map +1 -1
  250. package/dist/setup/smokeChecks.js.map +1 -1
  251. package/dist/state/archiveDiscovery.js +24 -35
  252. package/dist/state/archiveDiscovery.js.map +1 -1
  253. package/dist/state/archivePublication.js.map +1 -1
  254. package/dist/state/archiveRecovery.js.map +1 -1
  255. package/dist/state/archiveReplay.js.map +1 -1
  256. package/dist/state/canonicalMigrationRecord.js +37 -0
  257. package/dist/state/canonicalMigrationRecord.js.map +1 -0
  258. package/dist/state/decisionEntities.js +73 -33
  259. package/dist/state/decisionEntities.js.map +1 -1
  260. package/dist/state/decisionLegacyValidation.js +31 -0
  261. package/dist/state/decisionLegacyValidation.js.map +1 -1
  262. package/dist/state/decisionMigrationProvenance.js +117 -0
  263. package/dist/state/decisionMigrationProvenance.js.map +1 -0
  264. package/dist/state/decisionOverlay.js.map +1 -1
  265. package/dist/state/decisionRevision.js.map +1 -1
  266. package/dist/state/decisionRevisionPublication.js.map +1 -1
  267. package/dist/state/directRetrieval.js.map +1 -1
  268. package/dist/state/durability.js +24 -5
  269. package/dist/state/durability.js.map +1 -1
  270. package/dist/state/entityCutover.js +2 -2
  271. package/dist/state/entityCutover.js.map +1 -1
  272. package/dist/state/entityCutoverGit.js.map +1 -1
  273. package/dist/state/entityMigrationCausality.js +99 -0
  274. package/dist/state/entityMigrationCausality.js.map +1 -0
  275. package/dist/state/entityMigrationPreview.js +141 -80
  276. package/dist/state/entityMigrationPreview.js.map +1 -1
  277. package/dist/state/entityPublicationContext.js.map +1 -1
  278. package/dist/state/entityStorage.js +81 -26
  279. package/dist/state/entityStorage.js.map +1 -1
  280. package/dist/state/experimentArchive.js.map +1 -1
  281. package/dist/state/experimentIdentity.js.map +1 -1
  282. package/dist/state/experimentRetrieval.js.map +1 -1
  283. package/dist/state/healthEntities.js +28 -31
  284. package/dist/state/healthEntities.js.map +1 -1
  285. package/dist/state/healthEntityValidation.js.map +1 -1
  286. package/dist/state/healthRepair.js.map +1 -1
  287. package/dist/state/installRoot.js.map +1 -1
  288. package/dist/state/legacyEntityCutoverEvidence.js.map +1 -1
  289. package/dist/state/legacyIdentity.js.map +1 -1
  290. package/dist/state/legacySummaryRecord.js +7 -0
  291. package/dist/state/legacySummaryRecord.js.map +1 -0
  292. package/dist/state/listAccounting.js.map +1 -1
  293. package/dist/state/listClassification.js.map +1 -1
  294. package/dist/state/listCursor.js +43 -0
  295. package/dist/state/listCursor.js.map +1 -0
  296. package/dist/state/listRetrieval.js.map +1 -1
  297. package/dist/state/migrationSourceBinding.js +29 -0
  298. package/dist/state/migrationSourceBinding.js.map +1 -0
  299. package/dist/state/objectiveExperimentEntities.js.map +1 -1
  300. package/dist/state/planEntities.js +46 -2
  301. package/dist/state/planEntities.js.map +1 -1
  302. package/dist/state/planIdentity.js.map +1 -1
  303. package/dist/state/planRetrieval.js.map +1 -1
  304. package/dist/state/planTaskRetrieval.js.map +1 -1
  305. package/dist/state/progressEntities.js +35 -59
  306. package/dist/state/progressEntities.js.map +1 -1
  307. package/dist/state/projectRoot.js.map +1 -1
  308. package/dist/state/projectionPolicy.js.map +1 -1
  309. package/dist/state/retrievalAuthority.js +10 -0
  310. package/dist/state/retrievalAuthority.js.map +1 -1
  311. package/dist/state/safeProjectFile.js.map +1 -1
  312. package/dist/state/startupAnalysis/benchmark.js.map +1 -1
  313. package/dist/state/startupAnalysis/contract.js.map +1 -1
  314. package/dist/state/startupAnalysis/helpers.js.map +1 -1
  315. package/dist/state/startupAnalysis/index.js.map +1 -1
  316. package/dist/state/startupAnalysis/metrics.js.map +1 -1
  317. package/dist/state/startupAnalysis/records.js.map +1 -1
  318. package/dist/state/startupAnalysis/report.js.map +1 -1
  319. package/dist/state/startupAnalysis/threshold.js.map +1 -1
  320. package/dist/state/startupAnalysis.js.map +1 -1
  321. package/dist/state/startupProjection.js +2 -1
  322. package/dist/state/startupProjection.js.map +1 -1
  323. package/dist/state/stateMode.js.map +1 -1
  324. package/dist/state/summaryEntityRead.js +26 -0
  325. package/dist/state/summaryEntityRead.js.map +1 -0
  326. package/dist/state/summaryMigrationProvenance.js +67 -0
  327. package/dist/state/summaryMigrationProvenance.js.map +1 -0
  328. package/dist/state/summarySourceRowAuthority.js +37 -0
  329. package/dist/state/summarySourceRowAuthority.js.map +1 -0
  330. package/dist/state/todoDocsEntities.js.map +1 -1
  331. package/dist/state/todoDocsEntityValidation.js.map +1 -1
  332. package/dist/state/write/assign.js.map +1 -1
  333. package/dist/state/write/candidateMutation.js.map +1 -1
  334. package/dist/state/write/errors.js.map +1 -1
  335. package/dist/state/write/experimentPublication.js.map +1 -1
  336. package/dist/state/write/explain.js +9 -3
  337. package/dist/state/write/explain.js.map +1 -1
  338. package/dist/state/write/fields.js.map +1 -1
  339. package/dist/state/write/helpers.js.map +1 -1
  340. package/dist/state/write/index.js.map +1 -1
  341. package/dist/state/write/input.js.map +1 -1
  342. package/dist/state/write/lock.js.map +1 -1
  343. package/dist/state/write/mutation.js.map +1 -1
  344. package/dist/state/write/operations.js +6 -0
  345. package/dist/state/write/operations.js.map +1 -1
  346. package/dist/state/write/planEvaluation.js +19 -5
  347. package/dist/state/write/planEvaluation.js.map +1 -1
  348. package/dist/state/write/planPublication.js +7 -0
  349. package/dist/state/write/planPublication.js.map +1 -1
  350. package/dist/state/write/serialize.js.map +1 -1
  351. package/dist/state/write/transaction.js +2 -1
  352. package/dist/state/write/transaction.js.map +1 -1
  353. package/dist/state/write/validate.js.map +1 -1
  354. package/dist/upgrade/appContentRefresh.js +15 -20
  355. package/dist/upgrade/appContentRefresh.js.map +1 -1
  356. package/dist/upgrade/appModel.js.map +1 -1
  357. package/dist/upgrade/atomicWriter.js.map +1 -1
  358. package/dist/upgrade/bundleEvidence.js.map +1 -1
  359. package/dist/upgrade/channels.js.map +1 -1
  360. package/dist/upgrade/coexistenceProbe.js.map +1 -1
  361. package/dist/upgrade/compatibility.js.map +1 -1
  362. package/dist/upgrade/doctor.js.map +1 -1
  363. package/dist/upgrade/doctorClassifier.js.map +1 -1
  364. package/dist/upgrade/installedHooksRetirement.js.map +1 -1
  365. package/dist/upgrade/legacyAgentCleanup.js.map +1 -1
  366. package/dist/upgrade/lifecycleUpgrade.js.map +1 -1
  367. package/dist/upgrade/migrateArtifactsV2ToV3.js.map +1 -1
  368. package/dist/upgrade/migrationPublication.js.map +1 -1
  369. package/dist/upgrade/nextMajorDoctor.js.map +1 -1
  370. package/dist/upgrade/npxPlatformStatus.js.map +1 -1
  371. package/dist/upgrade/projectIntegration.js.map +1 -1
  372. package/dist/upgrade/projectIntegrationDecision.js.map +1 -1
  373. package/dist/upgrade/runtimeMigration.js.map +1 -1
  374. package/dist/upgrade/upgradeCommands.js.map +1 -1
  375. package/dist/upgrade/upgradeLock.js.map +1 -1
  376. package/dist/upgrade/upgradeOrchestrator.js.map +1 -1
  377. package/dist/upgrade/v3CapabilitySurface.js.map +1 -1
  378. package/dist/upgrade/versionResolution.js.map +1 -1
  379. package/dist/validate/appHomeContract.js.map +1 -1
  380. package/dist/validate/capability.js +11 -2
  381. package/dist/validate/capability.js.map +1 -1
  382. package/dist/validate/crossCapability.js.map +1 -1
  383. package/dist/validate/selfAudit.js.map +1 -1
  384. package/dist/validate/vocabularyAuthority.js.map +1 -1
  385. package/package.json +19 -6
@@ -0,0 +1,416 @@
1
+ schema_version: agentera.hybrid_route_contract.v3
2
+ status: normative
3
+ purpose: >-
4
+ Define the portable, two-phase request-to-capability route contract. The CLI
5
+ implements deterministic resolution and receipt validation; the host supplies
6
+ open-ended semantic judgment only after deterministic abstention.
7
+ ownership:
8
+ cli: >-
9
+ The CLI owns request validation, deterministic terminal selections, receipt
10
+ validation, and all startup authorization.
11
+ host: >-
12
+ The portable shared skill is the only host integration. A host may make a
13
+ semantic judgment only after semantic_required and must submit a receipt.
14
+ prohibited: [runtime_specific_adapter, host_bypasses_receipt_validation]
15
+ phrase_registry: skills/agentera/route-phrases.yaml
16
+ semantic_intent: references/cli/trigger-schema-enrichment.md
17
+ evaluation_corpus: fixtures/routing/hybrid-corpus.yaml
18
+
19
+ protocol:
20
+ request:
21
+ version: agentera.route_request.v1
22
+ required_fields: [request]
23
+ request: >-
24
+ The transient, unmodified user message. It is accepted for routing and is
25
+ never persisted by this protocol.
26
+ cli_seam:
27
+ command: agentera route request --input PATH --format json
28
+ input: >-
29
+ A YAML or JSON mapping supplied by --input PATH or --input -. The request
30
+ field is never accepted in argv; --input - reads it from stdin.
31
+ output: >-
32
+ The versioned route response is emitted as JSON on stdout. Diagnostics do
33
+ not include request or topic text, and routing writes no state or report.
34
+ exit_codes: { ok: 0, invalid_input: 2, authority_conflict: 2 }
35
+ response:
36
+ version: agentera.route_response.v1
37
+ outcomes: [deterministic_selection, semantic_required]
38
+ deterministic_selection:
39
+ required_fields: [capability, tier, recognized_span, topic_span, provenance]
40
+ tiers: [bare, direct, phrase]
41
+ semantic_required:
42
+ required_fields: [request_sha256, semantic_capsule, semantic_capsule_sha256, provenance]
43
+ semantic_capsule: >-
44
+ The active trigger intent documentation and contract version needed for
45
+ a host judgment. It contains no state-derived next_action and no raw
46
+ request text beyond the host's transient input.
47
+ semantic_capsule_sha256: >-
48
+ SHA-256 of the contract-owned canonical JSON representation of exactly
49
+ semantic_capsule. The host returns this value unchanged in its receipt.
50
+ semantic_capsule_canonicalization:
51
+ source: semantic_capsule
52
+ serialization: >-
53
+ UTF-8 JSON with recursively lexicographically sorted object keys and
54
+ no insignificant whitespace; array order is the order presented in
55
+ semantic_capsule.
56
+ included_inputs: [contract_version, capabilities, capability, triggers, id, description, priority, disambiguates_against, hint]
57
+ excluded_inputs: [request, request_sha256, provenance, diagnostics, next_action, phrase_registry, raw_trigger_matchers]
58
+ binding: >-
59
+ The digest binds the bounded classification inputs presented to the
60
+ host, not route diagnostics, state, private raw request duplication,
61
+ or any authority the host did not see.
62
+ receipt:
63
+ version: agentera.route_receipt.v1
64
+ required_fields: [version, request_sha256, semantic_capsule_sha256, outcome]
65
+ cli_seam:
66
+ command: agentera route receipt --input PATH --format json
67
+ input: >-
68
+ A YAML or JSON mapping supplied by --input PATH or --input -. It has the
69
+ transient original request in request and the complete nullable host output
70
+ in receipt. Neither field is accepted in argv or persisted.
71
+ output: >-
72
+ JSON startup authorization only: selected capability, one clarification,
73
+ or explicit status fallback. A preserved remainder includes its exact span
74
+ and transient text for the receiving host; diagnostics never echo input.
75
+ exit_codes: { ok: 0, invalid_input: 2, invalid_receipt: 64 }
76
+ outcomes: [select, clarify, no_match]
77
+ select:
78
+ required_fields: [capability, compound]
79
+ forbidden_fields: [question]
80
+ clarify:
81
+ required_fields: [question]
82
+ forbidden_fields: [capability, compound, remainder_span]
83
+ no_match:
84
+ forbidden_fields: [capability, question, compound, remainder_span]
85
+ validation_authority:
86
+ name: agentera.route_receipt_schema.v1
87
+ dialect: json_schema_draft_2020_12
88
+ canonical_capability_source: &canonical_capability_source skills/agentera/capability_schema_contract.yaml#route_aliases.primary_aliases
89
+ request_binding: sha256_of_original_utf8_request_bytes
90
+ semantic_capsule_binding: sha256_of_canonical_semantic_required.semantic_capsule
91
+ request_bound_fields:
92
+ remainder_span:
93
+ encoding: utf8_bytes
94
+ relation: 0 <= start < end = original_request_utf8_byte_length
95
+ exact_suffix: >-
96
+ start and end are UTF-8 code-point boundaries. The suffix bytes decode
97
+ with fatal UTF-8 handling and are returned unchanged, without
98
+ truncation or replacement characters.
99
+ schema: &agentera_route_receipt_schema
100
+ type: object
101
+ additionalProperties: false
102
+ required: [version, request_sha256, semantic_capsule_sha256, outcome]
103
+ properties:
104
+ version: { const: agentera.route_receipt.v1 }
105
+ request_sha256: { type: string, pattern: '^[a-f0-9]{64}$' }
106
+ semantic_capsule_sha256: { type: string, pattern: '^[a-f0-9]{64}$' }
107
+ outcome: { enum: [select, clarify, no_match] }
108
+ capability: { type: string }
109
+ compound: { enum: [none, preserve] }
110
+ question: { type: string, minLength: 1, maxLength: 280 }
111
+ remainder_span:
112
+ type: object
113
+ additionalProperties: false
114
+ required: [start, end]
115
+ properties:
116
+ start: { type: integer, minimum: 0 }
117
+ end: { type: integer, minimum: 0 }
118
+ allOf:
119
+ - if: { properties: { outcome: { const: select } }, required: [outcome] }
120
+ then:
121
+ required: [capability, compound]
122
+ not: { required: [question] }
123
+ - if: { properties: { outcome: { const: clarify } }, required: [outcome] }
124
+ then:
125
+ required: [question]
126
+ allOf:
127
+ - not: { required: [capability] }
128
+ - not: { required: [compound] }
129
+ - not: { required: [remainder_span] }
130
+ - if: { properties: { outcome: { const: no_match } }, required: [outcome] }
131
+ then:
132
+ allOf:
133
+ - not: { required: [capability] }
134
+ - not: { required: [question] }
135
+ - not: { required: [compound] }
136
+ - not: { required: [remainder_span] }
137
+ - if:
138
+ properties: { outcome: { const: select }, compound: { const: preserve } }
139
+ required: [outcome, compound]
140
+ then: { required: [remainder_span] }
141
+ - if:
142
+ properties: { outcome: { const: select }, compound: { const: none } }
143
+ required: [outcome, compound]
144
+ then: { not: { required: [remainder_span] } }
145
+ host_output_shape:
146
+ name: agentera_route_receipt
147
+ purpose: >-
148
+ The portable nullable host receipt shape. It validates the complete
149
+ receipt object only; the CLI receipt schema remains authoritative for
150
+ outcome relationships, request binding, and capability authorization.
151
+ canonical_capability_values_source: *canonical_capability_source
152
+ schema: &agentera_route_receipt_host_schema
153
+ type: object
154
+ additionalProperties: false
155
+ required: [version, request_sha256, semantic_capsule_sha256, outcome, capability, compound, question, remainder_span]
156
+ properties:
157
+ version: { type: string, enum: [agentera.route_receipt.v1] }
158
+ request_sha256: { type: string, pattern: '^[a-f0-9]{64}$' }
159
+ semantic_capsule_sha256: { type: string, pattern: '^[a-f0-9]{64}$' }
160
+ outcome: { type: string, enum: [select, clarify, no_match] }
161
+ capability:
162
+ type: [string, "null"]
163
+ enum: [status, vision, discuss, research, plan, build, optimize, audit, document, profile, design, orchestrate, null]
164
+ compound:
165
+ type: [string, "null"]
166
+ enum: [none, preserve, null]
167
+ question: { type: [string, "null"], maxLength: 280 }
168
+ remainder_span:
169
+ type: [object, "null"]
170
+ additionalProperties: false
171
+ required: [start, end]
172
+ properties:
173
+ start: { type: integer }
174
+ end: { type: integer }
175
+ host_to_cli_normalization:
176
+ name: agentera.route_receipt_host_to_cli.v1
177
+ purpose: >-
178
+ Project the host-required nullable shape into the authoritative CLI
179
+ receipt shape without changing any non-null value.
180
+ input:
181
+ first_step: >-
182
+ Validate the unmodified host receipt against host_output_shape.schema.
183
+ Reject it on any host-shape failure before projecting any field.
184
+ accepted_keys: [version, request_sha256, semantic_capsule_sha256, outcome, capability, compound, question, remainder_span]
185
+ projection:
186
+ operation: >-
187
+ Copy every non-null field unchanged, including its exact string bytes
188
+ and numeric values; remove only a null field listed as inapplicable by
189
+ the matching outcome rule.
190
+ outcome_rules:
191
+ select:
192
+ required_non_null: [version, request_sha256, semantic_capsule_sha256, outcome, capability, compound]
193
+ removable_nulls:
194
+ question: always
195
+ remainder_span: when_compound_none
196
+ clarify:
197
+ required_non_null: [version, request_sha256, semantic_capsule_sha256, outcome, question]
198
+ removable_nulls:
199
+ capability: always
200
+ compound: always
201
+ remainder_span: always
202
+ no_match:
203
+ required_non_null: [version, request_sha256, semantic_capsule_sha256, outcome]
204
+ removable_nulls:
205
+ capability: always
206
+ compound: always
207
+ question: always
208
+ remainder_span: always
209
+ rejection:
210
+ unsupported_key: reject
211
+ unexpected_null: reject
212
+ projection_bypass: reject
213
+ downstream_validation: >-
214
+ Pass only the projected receipt to agentera.route_receipt_schema.v1, then
215
+ rerun deterministic routing against the supplied request and source
216
+ authority, require semantic_required with the same request digest and
217
+ semantic_capsule_sha256, then apply canonical-capability, request-digest,
218
+ semantic-capsule, span, and startup-authorization checks. Normalization
219
+ does not authorize startup and does not weaken any CLI cross-field rule.
220
+ request_binding: >-
221
+ The host sends the original request transiently beside the receipt. The
222
+ CLI recomputes SHA-256 over its UTF-8 bytes and requires an exact match to
223
+ request_sha256. No session, nonce, or receipt is stored.
224
+ validation_result:
225
+ terminal_outcomes: [selected, clarification, status_fallback, invalid_receipt]
226
+ startup_authorization:
227
+ selected: selected capability only
228
+ clarification: none
229
+ status_fallback: status only
230
+ invalid_receipt: none
231
+ invalid_receipt_exit: 64
232
+ result_schema:
233
+ version: agentera.route_receipt_result.v1
234
+ selected: >-
235
+ Emits the selected canonical capability, bounded semantic-receipt
236
+ provenance, and agentera prime --context <capability> --format json as
237
+ the existing startup path. It authorizes that capability only.
238
+ clarification: >-
239
+ Emits exactly one validated question and semantic-receipt provenance; it
240
+ authorizes no startup.
241
+ status_fallback: >-
242
+ Emits status with status_reason no_match and the existing status startup
243
+ path. It is not a readiness classification.
244
+
245
+ precedence:
246
+ - order: 1
247
+ name: bare
248
+ condition: /agentera with no additional text
249
+ response: deterministic_selection
250
+ capability: status
251
+ tier: bare
252
+ - order: 2
253
+ name: direct
254
+ condition: >-
255
+ An explicit canonical capability name, or a primary alias, before any
256
+ topic under the existing direct-route grammar.
257
+ response: deterministic_selection
258
+ tier: direct
259
+ - order: 3
260
+ name: curated_phrase
261
+ condition: >-
262
+ A globally unique active phrase from the phrase registry exactly matches
263
+ the normalized leading token sequence.
264
+ response: deterministic_selection
265
+ tier: phrase
266
+ - order: 4
267
+ name: deterministic_abstention
268
+ condition: Any request not selected by orders 1 through 3.
269
+ response: semantic_required
270
+ rule: >-
271
+ The deterministic tier does not infer meaning, score candidates, match
272
+ substrings, or use regexes, thresholds, bands, state, or next_action.
273
+ - order: 5
274
+ name: semantic_receipt
275
+ condition: A valid receipt for a semantic_required response.
276
+ response: select, clarify, or no_match as validated below
277
+
278
+ receipt_semantics:
279
+ select:
280
+ result: selected
281
+ startup: The selected capability starts after validation.
282
+ clarify:
283
+ result: clarification
284
+ startup: No capability starts; the host asks exactly the supplied question.
285
+ no_match:
286
+ result: status_fallback
287
+ startup: Status starts for orientation only, after validation.
288
+ invalid_receipt:
289
+ result: invalid_receipt
290
+ startup: No capability starts; return a bounded correction naming the invalid field.
291
+
292
+ compound_intent:
293
+ principle: >-
294
+ A route selects at most one capability. Remainder is preserved and is never
295
+ silently chained, dispatched, or executed.
296
+ deterministic: >-
297
+ A direct or phrase route passes its exact topic_span to the selected
298
+ capability without classifying it as a follow-on request.
299
+ semantic:
300
+ dispositions: [none, preserve]
301
+ clarification: >-
302
+ clarify is a receipt outcome only, never a compound disposition. It is used
303
+ when one primary capability cannot safely be named.
304
+ preserve: >-
305
+ A select receipt with compound=preserve MUST include a non-empty
306
+ remainder_span inside the original request. The CLI carries that exact
307
+ original slice as deferred intent; it does not start another capability.
308
+ clarify: >-
309
+ Independent or consequential requests that cannot safely name one primary
310
+ capability require a clarify receipt, not a select receipt.
311
+
312
+ phrase_matching:
313
+ comparison_view: >-
314
+ Decode the request as valid UTF-8, then split it into source tokens at
315
+ Unicode whitespace. Apply Unicode NFKC and locale-independent Unicode case
316
+ folding to each source-token comparison segment; join phrase segments with
317
+ one ASCII space. The final source token may be partitioned at its first
318
+ permitted separator; only its prefix participates in phrase comparison.
319
+ leading_only: >-
320
+ The registry phrase must equal the first normalized comparison-token
321
+ sequence. For every source token except the final phrase token, the whole
322
+ normalized token must match. The final phrase token either matches whole or
323
+ ends immediately before its first permitted separator. A permitted separator
324
+ is a source code point whose NFKC form is exactly `:`, `-`, or `—`; it is
325
+ not consumed and need not be followed by whitespace. No other attached
326
+ punctuation terminates a token. Quotation, negation, a phrase later in a
327
+ sentence, and a partial token abstain.
328
+ recognized_span: >-
329
+ Return half-open UTF-8 byte offsets from the first matched source token
330
+ through the final matched-token prefix. The exact original bytes between
331
+ source tokens, including whitespace, belong to this span; leading whitespace
332
+ and a separator do not. Decoding that byte slice reproduces the recognized
333
+ text exactly.
334
+ topic_span: >-
335
+ The topic is the exact original UTF-8 byte slice from recognized_span.end to
336
+ request_byte_length. It begins at the permitted separator when one ended the
337
+ final phrase token, otherwise at the end of that token. It preserves every
338
+ separator, whitespace character, and remainder byte; it is not normalized,
339
+ trimmed, or interpreted.
340
+ example:
341
+ request: " HELP\tME decide: migrate the store"
342
+ normalized_leading_phrase: help me decide
343
+ recognized_span: { utf8_start: 2, utf8_end: 16, text: "HELP\tME decide" }
344
+ topic_span: { utf8_start: 16, utf8_end: 35, text: ": migrate the store" }
345
+
346
+ phrase_ownership:
347
+ active_phrase_source: skills/agentera/route-phrases.yaml
348
+ collision_rule: >-
349
+ Every normalized phrase is globally unique across every registry entry,
350
+ including deprecated entries. A collision fails validation; precedence must
351
+ never choose a phrase owner.
352
+ direct_route_rule: >-
353
+ A phrase must not duplicate a canonical capability name or primary alias and
354
+ must not begin with one under the direct-route grammar. Direct routes always
355
+ retain order-2 precedence.
356
+ trigger_rule: >-
357
+ Trigger descriptions are semantic documentation only. They neither create
358
+ phrase ownership nor alter phrase precedence.
359
+
360
+ privacy:
361
+ default_persistence: forbidden
362
+ transient_data: [request, topic, receipt, request_sha256, semantic_capsule_sha256]
363
+ retained_evaluation_evidence: >-
364
+ Retain only corpus version, case ID, partition, expected and observed
365
+ outcome, capability ID, tier, timing, model profile, and aggregate metrics.
366
+ Do not retain raw private request text, topic text, receipt question, or
367
+ semantic rationale by default.
368
+ permitted_corpus_text: >-
369
+ Frozen corpus text is synthetic or explicitly consented, and each corpus
370
+ declares its text provenance. Private production prompts are never imported.
371
+
372
+ evaluation:
373
+ conformance_owner: packages/cli/test/registries/hybridRouteContract.test.ts
374
+ visible_corpus_entrypoint: agentera route evaluate --format json
375
+ visible_corpus_exit_codes: { pass: 0, failed_evaluation: 1, authority_conflict: 2 }
376
+ visible_corpus_output: >-
377
+ agentera.hybrid_route_evaluation.v1 reports only case IDs, partitions,
378
+ expected/observed outcomes, routing tier, capability ID, timings, authority
379
+ hashes, and aggregate metrics. It never writes a report or emits request,
380
+ topic, receipt-question, or rationale text.
381
+ corpus_partitions: { development: frozen, adversarial: frozen }
382
+ corpus_scope: >-
383
+ The frozen synthetic development and adversarial corpus is the sole
384
+ implementation conformance corpus. It has no hidden, sealed, or vendor-host
385
+ companion corpus.
386
+ semantic_host: >-
387
+ A host may make the semantic judgment and submit the portable nullable host
388
+ receipt shape. Host selection, model quality, and latency are host-dependent
389
+ and unmeasured by this offline evaluator; no host invocation is required.
390
+ local_latency_caveat: >-
391
+ Deterministic and receipt-validation p95 values are run-specific local
392
+ conformance measurements, not semantic-host or end-to-end latency claims.
393
+ target_gates:
394
+ deterministic_phase1_p95: 25_ms
395
+ receipt_validation_p95: 25_ms
396
+ harmful_misroutes: 0
397
+ deterministic_fixture_accuracy: 100_percent
398
+ harmful_misroute_taxonomy:
399
+ - wrong_capability_starts_a_state_changing_or_destructive_flow
400
+ - a_compound_remainder_is_executed_or_chained_without_user_consent
401
+ - a_no_match_or_clarify_request_starts_non_status_work
402
+ - private_request_text_is_persisted_or_exported
403
+ execution_status: >-
404
+ Offline implementation acceptance requires frozen deterministic and
405
+ receipt-validation conformance only. The visible corpus proves protocol
406
+ conformance, not semantic generalization. Semantic host quality and latency
407
+ are explicitly unmeasured and do not block implementation acceptance.
408
+
409
+ deprecations:
410
+ decision_76: >-
411
+ Superseded by Decision mpulyomlyl only for the order-3 curated literal fast
412
+ path. Decision 76 continues to assign open-ended language and ambiguity
413
+ judgment to the LLM host; legacy trigger patterns, regexes, scores,
414
+ thresholds, and bands stay retired.
415
+ legacy_matchers: prohibited_from_active_routing
416
+ route_contract_changes: Require a new schema_version and a new frozen corpus version.
@@ -24,9 +24,9 @@ exclusions:
24
24
  consumers:
25
25
  - id: status_dashboard_renderer
26
26
  startup_command: agentera prime --context status --format json
27
- evidence: skills/agentera/SKILL.md:68
27
+ evidence: skills/agentera/SKILL.md:83
28
28
  dashboard_evidence: packages/cli/src/capabilities/status/instructions.ts
29
- state_evidence: packages/cli/src/cli/commands/prime/orientationOutput.ts:206
29
+ state_evidence: packages/cli/src/cli/commands/prime/orientationOutput.ts:209
30
30
  consumed_fields:
31
31
  - capability_context.instructions
32
32
  - capability_context.context.status_context.health
@@ -39,16 +39,17 @@ consumers:
39
39
  - capability_context.context.status_context.state_presence
40
40
  - capability_context.context.status_context.source_contract
41
41
  notes: >-
42
- Bare `/agentera` and natural-language routing run one status-context call.
43
- The response contains the full `capability_context.instructions` body and
44
- the bounded `capability_context.context.status_context` projection. The
45
- dashboard glyphs (health/todo/plan/objective/profile/next_action/attention)
46
- define the minimum required state families; omitted rich detail is recovered
47
- through the named command in the status context, never by raw artifact read.
42
+ Bare `/agentera` and status orientation run one status-context call.
43
+ Deterministic routing resolves bare, direct, and curated phrase requests;
44
+ every other request requires a validated semantic receipt before the
45
+ selected capability context starts. The status response contains the full
46
+ `capability_context.instructions` body and bounded
47
+ `capability_context.context.status_context`; omitted rich detail recovers
48
+ through its named command, never by raw artifact read.
48
49
  - id: capability_context_dispatcher
49
50
  startup_command: agentera prime --context <capability> --format json
50
- evidence: packages/cli/src/cli/capabilityContext/startup.ts:250
51
- skill_evidence: skills/agentera/SKILL.md:68-103
51
+ evidence: packages/cli/src/cli/capabilityContext/startup.ts:264
52
+ skill_evidence: skills/agentera/SKILL.md:77-96
52
53
  consumed_fields:
53
54
  - command
54
55
  - status
@@ -100,7 +101,7 @@ consumers:
100
101
  from the retired `prose` field to the v3 `capability_context.instructions`
101
102
  field after the second Task 1 evaluation found this guidance was the one
102
103
  remaining live consumer contradiction. Runtime authority
103
- (capabilityContext/startup.ts:250) and SKILL.md (lines 68, 103) both use
104
+ (capabilityContext/startup.ts:264) and SKILL.md (lines 112-114) both use
104
105
  `capability_context.instructions`. The
105
106
  `documentation_drift` guard below prevents this guidance from drifting
106
107
  back to `prose`; it does not execute a prime command.
@@ -112,12 +113,13 @@ consumers:
112
113
  # (public_output_policy.canonical_field_set). Each list below now derives from
113
114
  # that authority, so schema discovery, the emitted JSON source_contract.fields,
114
115
  # the text-mode fields line, and the agent-ready-state contract advertise the
115
- # same canonical 27-field set. The `issues` deprecated transition alias is
116
- # emitted by default as a duplicate of `todo` (with a stderr deprecation warning)
117
- # and kept until the 3.0.0 stable cut; it is excluded only from the canonical
118
- # advertised `source_contract.fields` set (one canonical representation `todo`
119
- # is canonical). It is NOT selector-only: it ships in the default bare briefing
120
- # only as bounded CLI transition compatibility.
116
+ # same canonical 27-field set. The `issues` deprecated transition field preserves
117
+ # the four legacy severity counts (`critical`, `degraded`, `normal`, `annoying`)
118
+ # with a stderr deprecation warning, but intentionally excludes canonical
119
+ # `todo.detail` so bounded detail is serialized once. It remains until the 3.0.0
120
+ # stable cut and is excluded from the canonical advertised
121
+ # `source_contract.fields` set (`todo` is canonical). It is NOT selector-only: it
122
+ # ships in the default bare briefing as bounded CLI transition compatibility.
121
123
  # ---------------------------------------------------------------------------
122
124
  field_authorities:
123
125
  - id: orientation_output_emission
@@ -127,9 +129,9 @@ field_authorities:
127
129
  role: actual_emission_authority
128
130
  notes: >-
129
131
  Emits PRIME_STRUCTURED_FIELDS as source_contract.fields; the keys actually
130
- serialized by buildOrientationJsonPayload. `issues` is emitted as a
131
- deprecated alias of `todo` with a stderr warning, not as a member of the
132
- canonical set.
132
+ serialized by buildOrientationJsonPayload. `issues` emits only `todo`'s
133
+ four legacy severity counts with a stderr warning; canonical `todo.detail`
134
+ is not duplicated. `issues` is not a member of the canonical set.
133
135
  - id: schema_advertised
134
136
  location: packages/cli/src/cli/commands/schema.ts
135
137
  authority: packages/cli/src/cli/stateQuery.ts:PRIME_STRUCTURED_FIELDS
@@ -287,9 +289,11 @@ field_classification:
287
289
  - field: issues
288
290
  status: deprecated_transition
289
291
  rationale: >-
290
- Deprecated alias of `todo`. No current consumer in this inventory reads
291
- it; the alias remains only as bounded CLI transition compatibility until
292
- its owning contract removes it.
292
+ Deprecated count-only compatibility projection of `todo`. It preserves
293
+ critical, degraded, normal, and annoying for legacy consumers while
294
+ excluding canonical `todo.detail` to prevent startup payload duplication.
295
+ No current consumer in this inventory reads it; the projection remains
296
+ until its owning contract removes it.
293
297
  - field: bundle
294
298
  status: retired
295
299
  rationale: >-
@@ -307,9 +311,21 @@ public_output_policy:
307
311
  authority for the bare prime briefing. Task 2 reconciles schema.ts, the text
308
312
  briefing hardcoded list, and agent-ready-state-contract.yaml hej.fields to
309
313
  this set, removing the four-way drift documented above.
310
- deprecated_alias_rule: >-
311
- `issues` remains a transition alias of `todo` with a stderr deprecation
312
- warning until the 3.0.0 stable cut. No task in this plan may remove it.
314
+ deprecated_alias_rule:
315
+ field: issues
316
+ status: retained_until_3_0_0_stable_cut
317
+ retained_fields:
318
+ - critical
319
+ - degraded
320
+ - normal
321
+ - annoying
322
+ excluded_fields:
323
+ - detail
324
+ rationale: >-
325
+ `issues` preserves the four legacy severity counts with a stderr
326
+ deprecation warning. Canonical bounded detail belongs only to `todo.detail`
327
+ and is intentionally excluded to prevent duplicate startup payload. No
328
+ task in this plan may remove the compatibility projection before the cut.
313
329
  default_only_omission_rule: >-
314
330
  Fields classified conditional or diagnostic may be omitted by Task 2 when
315
331
  they are in their default/empty state, provided missing-versus-empty
@@ -327,17 +343,41 @@ public_output_policy:
327
343
  Task 4 folds the bounded state into one `agentera prime --context status
328
344
  --format json` response (<=25000 bytes) so the status dashboard needs no
329
345
  separate bare-prime call or raw artifact read. The `--context` capsule
330
- contract (command/status/capability_context) is unchanged. The status
331
- capsule puts the canonical Task 3 projection at
332
- `capability_context.context.status_context`; app/project integration and
333
- shared-skill diagnosis remain available for routing while unrelated detail
334
- is omitted.
346
+ contract (command/status/capability_context) is unchanged, including
347
+ contract-owned state declarations, inventory, included/missing families,
348
+ schema diagnostics, and first-invocation reads. The status capsule assembles
349
+ and measures that fixed envelope first, then bounds
350
+ `capability_context.context.status_context` to the remaining complete-capsule
351
+ budget. If a projection leaves the complete envelope over budget, the next
352
+ allowance is set one byte below that projection's actual serialized size,
353
+ forcing a strictly smaller bounded form; projection continues monotonically
354
+ until the capsule fits or the routing-preserving irreducible form fails
355
+ explicitly. The status-specific degraded envelope retains TODO
356
+ aggregate/detail recovery, attention, and next_action rather than collapsing
357
+ to non-routing metadata. App/project integration and shared-skill diagnosis
358
+ remain available through the bounded status state while unrelated rich
359
+ copies are omitted.
335
360
  status_context_contract:
336
361
  startup_command: agentera prime --context status --format json
337
362
  state_path: capability_context.context.status_context
338
363
  instructions_path: capability_context.instructions
339
364
  max_utf8_bytes: 25000
340
365
  measurement: Buffer.byteLength(JSON.stringify(payload, null, 2) + "\n", "utf8")
366
+ budget_allocation: >-
367
+ Assemble contract-owned capability metadata, instructions, and context
368
+ keys and measure the complete envelope. When it is over budget, set the
369
+ next status_context allowance one byte below the current nested
370
+ projection's measured serialized size. Every accepted retry is therefore
371
+ strictly smaller; terminate only with a <=25000-byte capsule or explicit
372
+ irreducible routing-envelope failure.
373
+ required_capability_metadata:
374
+ - capability_context.state.declared_read_needs
375
+ - capability_context.state.declared_write_targets
376
+ - capability_context.state.artifact_inventory
377
+ - capability_context.state.included
378
+ - capability_context.state.schema_error
379
+ - capability_context.context.first_invocation_read
380
+ - capability_context.context.schema_error
341
381
  required_state:
342
382
  - health
343
383
  - todo
@@ -347,6 +387,10 @@ public_output_policy:
347
387
  - attention
348
388
  - state_presence
349
389
  - source_contract
390
+ budget_fallback_retains:
391
+ - todo
392
+ - attention
393
+ - next_action
350
394
  omitted_detail_recovery: capability_context.context.status_context.brief.omitted_rich_state
351
395
  raw_artifact_reads_required: false
352
396
  fail_visible_rule: >-
@@ -437,7 +481,8 @@ default_emission_omission_contract:
437
481
  history, shared_skill, project_integration, decision_attention, and
438
482
  the bespoke context pointers (kept null on the bare surface). The
439
483
  conditional v1_migration/docs/objective are retained when active (see
440
- omitted_when_default). issues ships as the deprecated transition alias.
484
+ omitted_when_default). issues ships as the deprecated count-only
485
+ transition projection and excludes canonical todo.detail.
441
486
  projected_subdetail:
442
487
  - field: plan.tasks
443
488
  reason: plan_task_detail