agentera 3.0.0-dev.32 → 3.0.0-dev.39

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 (196) hide show
  1. package/bundle/CHANGELOG.md +75 -5
  2. package/bundle/references/adapters/package-publication.json +43 -0
  3. package/bundle/references/adapters/package-surface-characterization.md +12 -0
  4. package/bundle/references/analysis/evidence-tier-authority.yaml +23 -21
  5. package/bundle/references/analysis/verification-policy.yaml +1 -0
  6. package/bundle/references/artifacts/artifact-registry-interface-model.yaml +11 -2
  7. package/bundle/references/artifacts/glossary-entry-contract.yaml +1241 -0
  8. package/bundle/references/artifacts/state-storage-authority.yaml +149 -80
  9. package/bundle/references/cli/agent-ready-state-contract.yaml +84 -2
  10. package/bundle/references/cli/audience-namespace-cli-migration.yaml +12 -1
  11. package/bundle/references/cli/prime-consumer-compatibility.yaml +7 -1
  12. package/bundle/skills/agentera/SKILL.md +26 -26
  13. package/bundle/skills/agentera/capabilities/audit/schemas/validation.yaml +26 -8
  14. package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +21 -4
  15. package/bundle/skills/agentera/capabilities/build/schemas/exit.yaml +5 -4
  16. package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +67 -3
  17. package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +3 -2
  18. package/bundle/skills/agentera/capabilities/discuss/schemas/validation.yaml +64 -0
  19. package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +4 -1
  20. package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +30 -0
  21. package/bundle/skills/agentera/capabilities/profile/schemas/artifacts.yaml +5 -2
  22. package/bundle/skills/agentera/capabilities/profile/schemas/exit.yaml +3 -2
  23. package/bundle/skills/agentera/capabilities/profile/schemas/validation.yaml +30 -0
  24. package/bundle/skills/agentera/schemas/artifacts/glossary.yaml +82 -0
  25. package/bundle/skills/agentera/schemas/artifacts/plan.yaml +19 -4
  26. package/bundle/skills/agentera/schemas/artifacts/progress.yaml +92 -0
  27. package/dist/analytics/extractCorpus/evidenceTiers.js +46 -3
  28. package/dist/analytics/extractCorpus/evidenceTiers.js.map +1 -1
  29. package/dist/analytics/extractCorpus/tierReader.js +1 -1
  30. package/dist/analytics/extractCorpus/tierReader.js.map +1 -1
  31. package/dist/analytics/glossaryAdviceResolution.js +167 -0
  32. package/dist/analytics/glossaryAdviceResolution.js.map +1 -0
  33. package/dist/analytics/glossaryInputAcquisition.js +320 -0
  34. package/dist/analytics/glossaryInputAcquisition.js.map +1 -0
  35. package/dist/analytics/personalGlossaryAdmission.js +134 -0
  36. package/dist/analytics/personalGlossaryAdmission.js.map +1 -0
  37. package/dist/analytics/personalGlossaryProfile.js +219 -0
  38. package/dist/analytics/personalGlossaryProfile.js.map +1 -0
  39. package/dist/audit/terminologyDrift.js +282 -0
  40. package/dist/audit/terminologyDrift.js.map +1 -0
  41. package/dist/capabilities/audit/instructions.js +2 -1
  42. package/dist/capabilities/audit/instructions.js.map +1 -1
  43. package/dist/capabilities/build/instructions.js +41 -2
  44. package/dist/capabilities/build/instructions.js.map +1 -1
  45. package/dist/capabilities/discuss/instructions.js +14 -1
  46. package/dist/capabilities/discuss/instructions.js.map +1 -1
  47. package/dist/capabilities/index.js +1 -1
  48. package/dist/capabilities/index.js.map +1 -1
  49. package/dist/capabilities/orchestrate/instructions.js +2 -2
  50. package/dist/capabilities/plan/instructions.js +19 -2
  51. package/dist/capabilities/plan/instructions.js.map +1 -1
  52. package/dist/capabilities/profile/instructions.js +67 -1
  53. package/dist/capabilities/profile/instructions.js.map +1 -1
  54. package/dist/cli/capabilityContext/bespoke.js +4 -3
  55. package/dist/cli/capabilityContext/bespoke.js.map +1 -1
  56. package/dist/cli/capabilityContext/build.js +77 -24
  57. package/dist/cli/capabilityContext/build.js.map +1 -1
  58. package/dist/cli/capabilityContext/closeout.js +2 -2
  59. package/dist/cli/capabilityContext/closeout.js.map +1 -1
  60. package/dist/cli/capabilityContext/evidence.js +2 -6
  61. package/dist/cli/capabilityContext/evidence.js.map +1 -1
  62. package/dist/cli/capabilityContext/planState.js +59 -78
  63. package/dist/cli/capabilityContext/planState.js.map +1 -1
  64. package/dist/cli/capabilityContext/projectVerification.js +410 -0
  65. package/dist/cli/capabilityContext/projectVerification.js.map +1 -0
  66. package/dist/cli/capabilityContext/startup.js +21 -4
  67. package/dist/cli/capabilityContext/startup.js.map +1 -1
  68. package/dist/cli/commands/glossaryAdvice.js +139 -0
  69. package/dist/cli/commands/glossaryAdvice.js.map +1 -0
  70. package/dist/cli/commands/personalGlossary.js +177 -0
  71. package/dist/cli/commands/personalGlossary.js.map +1 -0
  72. package/dist/cli/commands/prime/buildExecutionRequest.js +165 -0
  73. package/dist/cli/commands/prime/buildExecutionRequest.js.map +1 -0
  74. package/dist/cli/commands/prime/collectEntityOrientation.js +18 -2
  75. package/dist/cli/commands/prime/collectEntityOrientation.js.map +1 -1
  76. package/dist/cli/commands/prime/collectOrientationState.js +7 -1
  77. package/dist/cli/commands/prime/collectOrientationState.js.map +1 -1
  78. package/dist/cli/commands/prime/orientationOutput.js +12 -2
  79. package/dist/cli/commands/prime/orientationOutput.js.map +1 -1
  80. package/dist/cli/commands/prime.js +37 -2
  81. package/dist/cli/commands/prime.js.map +1 -1
  82. package/dist/cli/commands/profileGrounding.js +77 -0
  83. package/dist/cli/commands/profileGrounding.js.map +1 -0
  84. package/dist/cli/commands/query.js +14 -4
  85. package/dist/cli/commands/query.js.map +1 -1
  86. package/dist/cli/commands/schema.js +10 -0
  87. package/dist/cli/commands/schema.js.map +1 -1
  88. package/dist/cli/commands/state/write.js +4 -1
  89. package/dist/cli/commands/state/write.js.map +1 -1
  90. package/dist/cli/dispatch/lifecycle.js +45 -0
  91. package/dist/cli/dispatch/lifecycle.js.map +1 -1
  92. package/dist/cli/dispatch/prime.js +22 -1
  93. package/dist/cli/dispatch/prime.js.map +1 -1
  94. package/dist/cli/dispatch/shared.js +1 -1
  95. package/dist/cli/dispatch/shared.js.map +1 -1
  96. package/dist/cli/help.js +23 -1
  97. package/dist/cli/help.js.map +1 -1
  98. package/dist/cli/migrationRequired.js +2 -0
  99. package/dist/cli/migrationRequired.js.map +1 -1
  100. package/dist/cli/orientation/attention.js +3 -1
  101. package/dist/cli/orientation/attention.js.map +1 -1
  102. package/dist/cli/orientation.js +2 -2
  103. package/dist/cli/orientation.js.map +1 -1
  104. package/dist/registries/artifactProtocolIds.js +2 -0
  105. package/dist/registries/artifactProtocolIds.js.map +1 -1
  106. package/dist/registries/artifactRegistry.js +2 -0
  107. package/dist/registries/artifactRegistry.js.map +1 -1
  108. package/dist/registries/evidenceTierContract.js +26 -16
  109. package/dist/registries/evidenceTierContract.js.map +1 -1
  110. package/dist/registries/glossaryAdviceContract.js +79 -0
  111. package/dist/registries/glossaryAdviceContract.js.map +1 -0
  112. package/dist/registries/glossaryCaveatContract.js +68 -0
  113. package/dist/registries/glossaryCaveatContract.js.map +1 -0
  114. package/dist/registries/glossaryConsumerContractValidation.js +792 -0
  115. package/dist/registries/glossaryConsumerContractValidation.js.map +1 -0
  116. package/dist/registries/glossaryEntryContract.js +747 -0
  117. package/dist/registries/glossaryEntryContract.js.map +1 -0
  118. package/dist/registries/glossaryTermIdentity.js +18 -0
  119. package/dist/registries/glossaryTermIdentity.js.map +1 -0
  120. package/dist/registries/glossaryTermOccurrence.js +21 -0
  121. package/dist/registries/glossaryTermOccurrence.js.map +1 -0
  122. package/dist/state/changelog.js +222 -0
  123. package/dist/state/changelog.js.map +1 -0
  124. package/dist/state/decisionEntities.js +18 -11
  125. package/dist/state/decisionEntities.js.map +1 -1
  126. package/dist/state/decisionMigrationProvenance.js +84 -1
  127. package/dist/state/decisionMigrationProvenance.js.map +1 -1
  128. package/dist/state/decisionOverlay.js +9 -32
  129. package/dist/state/decisionOverlay.js.map +1 -1
  130. package/dist/state/decisionRevision.js +69 -444
  131. package/dist/state/decisionRevision.js.map +1 -1
  132. package/dist/state/decisionRevisionMigration.js +90 -0
  133. package/dist/state/decisionRevisionMigration.js.map +1 -0
  134. package/dist/state/directRetrieval.js +3 -52
  135. package/dist/state/directRetrieval.js.map +1 -1
  136. package/dist/state/entityCutover.js +6 -6
  137. package/dist/state/entityCutover.js.map +1 -1
  138. package/dist/state/entityGlossaryAuthority.js +14 -0
  139. package/dist/state/entityGlossaryAuthority.js.map +1 -0
  140. package/dist/state/entityMigrationIdentity.js +6 -0
  141. package/dist/state/entityMigrationIdentity.js.map +1 -0
  142. package/dist/state/entityMigrationPreview.js +14 -23
  143. package/dist/state/entityMigrationPreview.js.map +1 -1
  144. package/dist/state/entityPublicationContext.js +374 -71
  145. package/dist/state/entityPublicationContext.js.map +1 -1
  146. package/dist/state/entityStorage.js +45 -29
  147. package/dist/state/entityStorage.js.map +1 -1
  148. package/dist/state/healthEntities.js +2 -4
  149. package/dist/state/healthEntities.js.map +1 -1
  150. package/dist/state/listRetrieval.js +7 -38
  151. package/dist/state/listRetrieval.js.map +1 -1
  152. package/dist/state/migrationSourceBinding.js +1 -1
  153. package/dist/state/migrationSourceBinding.js.map +1 -1
  154. package/dist/state/objectiveExperimentEntities.js +9 -9
  155. package/dist/state/objectiveExperimentEntities.js.map +1 -1
  156. package/dist/state/planEntities.js +57 -16
  157. package/dist/state/planEntities.js.map +1 -1
  158. package/dist/state/progressEntities.js +177 -39
  159. package/dist/state/progressEntities.js.map +1 -1
  160. package/dist/state/progressGlossaryCaveat.js +169 -0
  161. package/dist/state/progressGlossaryCaveat.js.map +1 -0
  162. package/dist/state/progressPublicationOrder.js +20 -0
  163. package/dist/state/progressPublicationOrder.js.map +1 -0
  164. package/dist/state/safeProjectFile.js +4 -1
  165. package/dist/state/safeProjectFile.js.map +1 -1
  166. package/dist/state/startupProjection.js +2 -70
  167. package/dist/state/startupProjection.js.map +1 -1
  168. package/dist/state/stateStorageAuthority.js +48 -0
  169. package/dist/state/stateStorageAuthority.js.map +1 -0
  170. package/dist/state/summarySourceRowAuthority.js +1 -1
  171. package/dist/state/summarySourceRowAuthority.js.map +1 -1
  172. package/dist/state/todoDocsEntities.js +8 -9
  173. package/dist/state/todoDocsEntities.js.map +1 -1
  174. package/dist/state/write/explain.js +101 -92
  175. package/dist/state/write/explain.js.map +1 -1
  176. package/dist/state/write/glossaryPublication.js +264 -0
  177. package/dist/state/write/glossaryPublication.js.map +1 -0
  178. package/dist/state/write/index.js +1 -0
  179. package/dist/state/write/index.js.map +1 -1
  180. package/dist/state/write/operations.js +25 -27
  181. package/dist/state/write/operations.js.map +1 -1
  182. package/dist/state/write/planEvaluation.js +6 -2
  183. package/dist/state/write/planEvaluation.js.map +1 -1
  184. package/dist/state/write/transaction.js +7 -4
  185. package/dist/state/write/transaction.js.map +1 -1
  186. package/dist/upgrade/upgradeOrchestrator.js +15 -10
  187. package/dist/upgrade/upgradeOrchestrator.js.map +1 -1
  188. package/dist/validate/crossCapability.js +3 -0
  189. package/dist/validate/crossCapability.js.map +1 -1
  190. package/dist/validate/v1LegacyCruft.js +141 -0
  191. package/dist/validate/v1LegacyCruft.js.map +1 -0
  192. package/dist/validate/vocabularyAuthority.js +2 -0
  193. package/dist/validate/vocabularyAuthority.js.map +1 -1
  194. package/package.json +4 -3
  195. package/dist/state/decisionRevisionPublication.js +0 -532
  196. package/dist/state/decisionRevisionPublication.js.map +0 -1
@@ -19,8 +19,9 @@ authority:
19
19
  plus one-way forward import, are implemented but activate entity authority only
20
20
  from the durable cutover marker. The preserved
21
21
  singleton families remain legacy files. The
22
- current numbered archive and retrieval groups remain migration input while
23
- that marker is absent; no independent legacy repair mutation remains.
22
+ numbered archives, aggregate overlays, and aggregate revision documents
23
+ remain migration input while that marker is absent; no independent legacy
24
+ read or repair mutation remains.
24
25
 
25
26
  entity_target:
26
27
  status: progress_decisions_health_plan_objective_experiment_todo_and_docs_implemented_other_families_declared
@@ -176,14 +177,42 @@ entity_target:
176
177
  forbidden_fields: [id, artifact, number, stable_id, artifact_id, entry_number]
177
178
  temporal_fields: [timestamp]
178
179
  timestamp_format: 'YYYY-MM-DD HH:MM'
180
+ publication_order:
181
+ field: publication_order
182
+ type: positive_safe_integer
183
+ presence: optional_for_legacy_required_for_new_publications
184
+ visibility: public_record_metadata
185
+ ownership: progress_writer_only
186
+ assignment: max_valid_existing_progress_publication_order_plus_one
187
+ synchronization: .agentera/.writer.lock
188
+ dry_run: omitted_without_consuming_or_mutating_order
189
+ caller_input: forbidden
190
+ malformed_or_spoofed_input: reject_before_mutation_with_bounded_diagnostics
191
+ durability: persisted_in_each_new_progress_cycle_entity
192
+ privacy: bounded_ordinal_without_time_identity_or_content
179
193
  retrieval:
180
194
  exact: agentera state progress get --id ID --format json
181
195
  list: agentera state progress list [--limit N] [--cursor TOKEN] --format json
182
- ordering: timestamp_desc_then_id_asc
196
+ ordering: timestamp_desc_then_publication_order_desc_then_id_asc
197
+ semantic_recency: >-
198
+ The first full progress cycle is latest. Timestamp remains the public
199
+ minute-compatible primary key. Within one timestamp, a valid writer-owned
200
+ publication_order sorts descending; a marked publication sorts after all
201
+ unmarked legacy records observed by that publication and therefore before
202
+ them in newest-first retrieval. Missing markers are legacy unordered ties.
203
+ Equal valid markers can result from independently published histories and
204
+ do not establish relative publication order. Missing or equal markers use
205
+ opaque ID ascending only as a deterministic final fallback and never claim
206
+ reconstructed publication chronology.
183
207
  default_limit: 20
184
208
  maximum_limit: 100
185
209
  max_utf8_bytes: 32768
186
- cursor: opaque_snapshot_cursor
210
+ cursor: opaque_snapshot_cursor_v2
211
+ cursor_compatibility: >-
212
+ Version 2 continuation keys include timestamp, publication_order presence
213
+ and value, and opaque ID. Version 1 progress cursors are rejected with
214
+ recovery to omit --cursor and establish a new snapshot; authority changes
215
+ also invalidate prior cursor signatures by design.
187
216
  mutation_after_snapshot: cursor_snapshot_unavailable
188
217
  omission: whole_entries_only_with_count_reason_continuation_and_exact_get
189
218
  scalar_truncation: forbidden
@@ -285,9 +314,25 @@ entity_target:
285
314
  publication: immutable
286
315
  ownership: { fields: [decision, base_sha256], cardinality: zero_or_one }
287
316
  record:
288
- required_fields: [decision, date, provenance, base_sha256, changes]
317
+ required_fields: [decision, provenance, base_sha256, changes]
318
+ legacy_optional_fields: [date]
289
319
  required_paths: []
290
320
  forbidden_fields: [id, artifact, number, stable_id, artifact_id, entry_number, satisfaction]
321
+ canonical_metadata:
322
+ migration_provenance:
323
+ applicability: inherited_unsupported_revision_confidence_only
324
+ required_fields: [kind, source, source_path, source_identity, source_fingerprint, source_record_sha256, confidence]
325
+ additional_fields: forbidden
326
+ kind: inherited_decision_revision_confidence
327
+ sources: [revision_document]
328
+ semantics: >-
329
+ Cutover persists this envelope-level metadata only when a legacy
330
+ aggregate revision carries high, medium, or low confidence and the
331
+ composed decision is otherwise valid. source_identity selects the
332
+ exact ordered row in .agentera/revisions/decisions.yaml,
333
+ source_fingerprint binds the deterministic canonical decision ID, and
334
+ source_record_sha256 binds that complete row. Ordinary decision
335
+ amendments accept only the current confidence vocabulary.
291
336
  - boundary: health_audit
292
337
  artifact: health
293
338
  independently_mutable: true
@@ -647,7 +692,7 @@ entity_target:
647
692
  detail_availability: summary
648
693
  compatibility: degraded
649
694
  caveats: required
650
- ordering: full_timestamp_desc_then_id_asc_then_summary_id_asc
695
+ ordering: full_timestamp_desc_then_publication_order_desc_then_id_asc_then_summary_id_asc
651
696
  summary_ordering: canonical_id_asc_without_chronology_claim
652
697
  mutation: read_only
653
698
  - boundary: decision_summary
@@ -733,7 +778,11 @@ entity_target:
733
778
  repetitions: 5
734
779
  pass_rule: every repetition stays within every applicable limit
735
780
  elapsed: wall-clock milliseconds from process start through complete serialized output
736
- heap: process heapUsed peak minus heapUsed before fixture discovery
781
+ heap: process heapUsed peak minus the normalized heapUsed baseline before fixture discovery
782
+ heap_baseline:
783
+ boundary: after CLI import reaches the fixture boundary and before the measured operation
784
+ normalization: await successful Node inspector HeapProfiler.collectGarbage, then read Runtime.getHeapUsage
785
+ measured_operation_collection: forbidden
737
786
  bytes: UTF-8 byte length of stdout including the trailing newline
738
787
  targets:
739
788
  exact_get:
@@ -771,6 +820,8 @@ entity_migration:
771
820
  entity_mode:
772
821
  schemaVersion: agentera.stateMode.v1
773
822
  mode: entities
823
+ source_fingerprint: lowercase_sha256_of_bound_migration_inputs
824
+ preview_digest: lowercase_sha256_of_bound_migration_preview
774
825
  absent_mode: legacy
775
826
  invalid_behavior: fail_without_fallback
776
827
  detection: read_only
@@ -1272,33 +1323,33 @@ retrieval:
1272
1323
  - collection_id: progress.records
1273
1324
  artifact_id: progress
1274
1325
  growth: append_only_unbounded
1275
- identity: 'progress:<positive-entry-number>'
1276
- storage_ownership: immutable_numbered_archive_with_bounded_current_projection
1277
- ordering: entry_number_desc
1326
+ identity: bare_ten_letter_entity_id
1327
+ storage_ownership: canonical_progress_entities
1328
+ ordering: timestamp_desc_then_publication_order_desc_then_id_asc
1278
1329
  bounds: count_1_to_100_and_serialized_utf8_budget
1279
1330
  cursor: opaque_snapshot_cursor
1280
1331
  omission: explicit_with_advancing_cursor_or_exact_get
1281
- get: agentera state progress get --number N --format json
1332
+ get: agentera state progress get --id ID --format json
1282
1333
  - collection_id: decisions.records
1283
1334
  artifact_id: decisions
1284
- growth: append_only_unbounded_with_declared_mutable_overlay
1285
- identity: 'decisions:<positive-entry-number>'
1286
- storage_ownership: immutable_numbered_archive_plus_decision_overlay_with_bounded_current_projection
1287
- ordering: entry_number_desc
1335
+ growth: immutable_base_and_revision_entities_with_replaceable_satisfaction_entity
1336
+ identity: bare_ten_letter_entity_id
1337
+ storage_ownership: canonical_decision_entities
1338
+ ordering: date_desc_then_id_asc
1288
1339
  bounds: count_1_to_100_and_serialized_utf8_budget
1289
1340
  cursor: opaque_snapshot_cursor
1290
1341
  omission: explicit_with_advancing_cursor_or_exact_get
1291
- get: agentera state decisions get --number N --format json
1342
+ get: agentera state decisions get --id ID --format json
1292
1343
  - collection_id: health.records
1293
1344
  artifact_id: health
1294
1345
  growth: append_only_unbounded
1295
- identity: 'health:<positive-entry-number>'
1296
- storage_ownership: immutable_numbered_archive_with_bounded_current_projection
1297
- ordering: entry_number_desc
1346
+ identity: bare_ten_letter_entity_id
1347
+ storage_ownership: canonical_health_entities
1348
+ ordering: appended_at_desc_then_id_asc_then_legacy_date_desc_then_id_asc
1298
1349
  bounds: count_1_to_100_and_serialized_utf8_budget
1299
1350
  cursor: opaque_snapshot_cursor
1300
1351
  omission: explicit_with_advancing_cursor_or_exact_get
1301
- get: agentera state health get --number N --format json
1352
+ get: agentera state health get --id ID --format json
1302
1353
  - collection_id: plan.plans
1303
1354
  artifact_id: plan
1304
1355
  growth: one_active_plus_append_only_immutable_file_archives
@@ -1638,6 +1689,7 @@ identity:
1638
1689
  not emitted on the current bounded page.
1639
1690
 
1640
1691
  envelope:
1692
+ legacy_source_state: migration_input_only
1641
1693
  schema_version: agentera.stateArchiveEntry.v1
1642
1694
  required_fields:
1643
1695
  - schemaVersion
@@ -1674,15 +1726,18 @@ envelope:
1674
1726
 
1675
1727
  overlays:
1676
1728
  location: .agentera/overlays/decisions.yaml
1729
+ legacy_source_state: migration_input_only
1730
+ current_entity_boundary: decision_satisfaction
1677
1731
  project_root_fixed: true
1678
1732
  docs_yaml_override: forbidden
1679
1733
  schema_version: agentera.decisionOverlay.v1
1680
1734
  supported_artifact: decisions
1681
1735
  identity_key: decisions:<decision-number>
1682
1736
  storage_shape: >-
1683
- A mapping keyed by stable decision ID. Each value contains only the
1684
- authority-declared mutable paths and never replaces the immutable archive
1685
- record.
1737
+ The legacy migration source is a mapping keyed by numbered decision ID.
1738
+ Entity migration converts each value into one decision_satisfaction entity
1739
+ related to the canonical decision ID. Current reads and writes use that
1740
+ entity and never read or publish the aggregate overlay document.
1686
1741
  mutable_paths:
1687
1742
  - satisfaction.state
1688
1743
  - satisfaction.evidence
@@ -1725,18 +1780,29 @@ overlays:
1725
1780
 
1726
1781
  revisions:
1727
1782
  location: .agentera/revisions/decisions.yaml
1783
+ legacy_source_state: migration_input_only
1728
1784
  project_root_fixed: true
1729
1785
  docs_yaml_override: forbidden
1730
1786
  schema_version: agentera.decisionRevision.v1
1731
1787
  supported_artifact: decisions
1732
1788
  identity_key: decisions:<decision-number>
1733
1789
  storage_shape: >-
1734
- A mapping keyed by stable decision ID. Each value is an ordered list of
1735
- immutable revision records carrying only authority-declared amendable
1736
- content paths plus revision provenance. A revision never replaces the
1737
- immutable numbered archive record and never replaces the satisfaction
1738
- overlay; it is additional immutable evidence composed at read time.
1790
+ The legacy migration source is a mapping keyed by numbered decision ID.
1791
+ Entity migration converts each ordered row into one decision_revision
1792
+ entity related to the canonical decision ID. Current reads and writes use
1793
+ those entities and never read or publish the aggregate revision document.
1739
1794
  amendable_paths:
1795
+ - question
1796
+ - context
1797
+ - alternatives.chosen
1798
+ - alternatives.rejected
1799
+ - choice
1800
+ - reasoning
1801
+ - confidence
1802
+ - feeds_into
1803
+ migration_amendable_paths:
1804
+ - alternatives
1805
+ legacy_amendable_paths:
1740
1806
  - question
1741
1807
  - context
1742
1808
  - alternatives
@@ -1749,14 +1815,15 @@ revisions:
1749
1815
  temporal_paths:
1750
1816
  - date
1751
1817
  separation_from_overlay: >-
1752
- Amendments never touch satisfaction overlay paths. Satisfaction updates
1753
- remain under overlays; content amendments remain under revisions. Each
1754
- authority composes its own evidence and neither rewrites the other.
1818
+ Legacy content amendments never touch legacy aggregate satisfaction paths;
1819
+ migration converts both sources independently. Current satisfaction and
1820
+ content mutations publish decision_satisfaction and decision_revision
1821
+ entities, and neither entity boundary rewrites the other.
1755
1822
  immutability: >-
1756
- Original numbered archive records remain immutable historical evidence.
1757
- Revisions are additional immutable evidence appended in declared order;
1758
- no revision overwrites, reorders, or deletes a prior revision. A revision
1759
- is byte-stable after publication and an identical revision is an
1823
+ Imported numbered archive records remain immutable historical evidence.
1824
+ Current decision_revision entities are additional immutable evidence;
1825
+ no revision overwrites, reorders, or deletes a prior revision. An entity
1826
+ revision is byte-stable after publication and an identical revision is an
1760
1827
  idempotent replay.
1761
1828
  provenance: >-
1762
1829
  Revision evidence carries revision provenance only. It is never labeled
@@ -1764,33 +1831,32 @@ revisions:
1764
1831
  legacy projection record may carry degraded_projection provenance and
1765
1832
  never historical_archive provenance.
1766
1833
  publication_order:
1767
- - validate_target_identity
1834
+ - validate_entity_target_identity
1768
1835
  - validate_amendment_vocabulary
1769
- - stage_revision
1770
- - publish_revision
1771
- - update_effective_projection
1772
- apply_state: implemented
1836
+ - validate_base_sha256
1837
+ - publish_decision_revision_entity
1838
+ - compose_effective_entity_read
1839
+ apply_state: entity_implemented_legacy_source_retired
1773
1840
  apply_state_note: >-
1774
- The revision authority and amend command publish record-local amendments
1775
- with recovery. A valid dry-run reports the exact revision, effective record,
1776
- and projection effect without writing any file. Apply writes a
1777
- record-local override to the revision document only (preserving unrelated
1778
- entries' bytes), retries converge on a stable revision identity, and an
1779
- identical re-submission is an idempotent replay. The decisions projection
1780
- is never rewritten by an amendment; effective detail composes
1781
- base→revisions→overlay. Amend execution still refuses before side effects
1782
- for an unsafe target-only change, a duplicate-revision conflict, a stale
1783
- base hash, or an unsafe target identity, returning an actionable retry or
1784
- repair action. Discover the contract with
1841
+ The entity amend command publishes one immutable decision_revision entity
1842
+ related to the selected bare decision ID. A valid dry-run reports the
1843
+ candidate without writing; retries converge through canonical entity
1844
+ replay. Effective entity reads compose base, ordered revision entities, and
1845
+ satisfaction entities. The aggregate revision document is read only by
1846
+ migration preview and cutover and is never a current publication target.
1847
+ Amend execution refuses before side effects for an unsafe target, duplicate
1848
+ same-base claim, or stale base hash. Discover the current contract with
1785
1849
  `agentera state decisions explain --verb amend --format json`.
1786
1850
 
1787
1851
  projections:
1788
1852
  archive:
1789
- role: complete immutable historical detail
1853
+ source_state: migration_input_only
1854
+ role: complete immutable historical migration detail
1790
1855
  source_of_truth_for: historical_record_fields
1791
1856
  omission: never omit fields from an archive record
1792
1857
  current:
1793
- role: bounded active projection for current artifact consumers
1858
+ source_state: migration_input_only
1859
+ role: bounded aggregate migration projection
1794
1860
  default_capacity:
1795
1861
  active_entries: 10
1796
1862
  summary_entries: 40
@@ -1814,14 +1880,15 @@ projections:
1814
1880
  progress: .agentera/progress.yaml
1815
1881
  decisions: .agentera/decisions.yaml
1816
1882
  health: .agentera/health.yaml
1817
- source_of_truth_for: current_projection_and_legacy_compatibility_state
1883
+ source_of_truth_for: legacy_migration_and_compatibility_state_only
1818
1884
  archive_relationship: >-
1819
- A current entry may be full, summary-only, or absent from the projection;
1885
+ A legacy aggregate entry may be full, summary-only, or absent from the projection;
1820
1886
  archive presence and hash verification determine whether full detail is
1821
- available. Current mutable decision overlay values are composed at read
1822
- time and do not rewrite archive bytes.
1887
+ available during migration. Legacy decision overlay values are converted
1888
+ independently and do not rewrite archive bytes.
1823
1889
  summary:
1824
- role: bounded list and startup representation
1890
+ source_state: migration_input_only
1891
+ role: bounded aggregate migration representation
1825
1892
  required_item_fields: [stable_id, artifact_id, entry_number, addressable, classification, detail_availability, source]
1826
1893
  nullable_item_fields:
1827
1894
  - stable_id
@@ -1842,6 +1909,7 @@ projections:
1842
1909
  truncated, represented as a fabricated summary, or treated as missing
1843
1910
  history without provenance.
1844
1911
  startup:
1912
+ source_state: canonical_entity_authority
1845
1913
  role: bounded orientation and capability-startup projection
1846
1914
  required_fields: [command, status, source, source_contract]
1847
1915
  allowed_payload: >-
@@ -1858,17 +1926,17 @@ api:
1858
1926
  artifact_syntax: agentera state <artifact-id>
1859
1927
  formats: [text, json, yaml]
1860
1928
  direct_get:
1861
- command: agentera state <artifact-id> get --number N --format json
1929
+ command: agentera state <artifact-id> get --id ID --format json
1862
1930
  examples:
1863
- progress: agentera state progress get --number 747 --format json
1864
- decisions: agentera state decisions get --number 53 --format json
1865
- health: agentera state health get --number 29 --format json
1866
- required_selector: --number N
1931
+ progress: agentera state progress get --id qjtrmnpvka --format json
1932
+ decisions: agentera state decisions get --id imumkmffwh --format json
1933
+ health: agentera state health get --id abcdefghij --format json
1934
+ required_selector: --id ID
1867
1935
  result: >-
1868
- One complete record composed from the immutable archive and only the
1869
- authority-declared current overlay fields, with stable_id, source,
1870
- detail_availability, compatibility, and provenance metadata.
1871
- archive_only: direct retrieval reads the exact numbered record without scanning unrelated records
1936
+ One complete canonical entity record with id, artifact, detail availability,
1937
+ compatibility, effective content, and provenance metadata. Decision reads
1938
+ compose immutable base, ordered revisions, and current satisfaction entities.
1939
+ exact_only: direct retrieval resolves one canonical entity ID without scanning unrelated records
1872
1940
  list:
1873
1941
  command: agentera state <artifact-id> list [--limit N] [--cursor TOKEN] --format json
1874
1942
  examples:
@@ -1877,20 +1945,21 @@ api:
1877
1945
  default_limit: 20
1878
1946
  minimum_limit: 1
1879
1947
  maximum_limit: 100
1880
- ordering: identity.ordering.list
1948
+ ordering:
1949
+ progress: timestamp_desc_then_publication_order_desc_then_id_asc
1950
+ decisions: date_desc_then_id_asc
1951
+ health: appended_at_desc_then_id_asc_then_legacy_date_desc_then_id_asc
1881
1952
  response_fields:
1882
1953
  required: [command, status, entries, counts, source, filters, snapshot, source_contract]
1883
- entry: [stable_id, artifact_id, entry_number, current_status, detail_availability, source, compatibility, provenance]
1884
- optional_entry: [summary, record_status, overlay_applied, retrieval]
1954
+ entry: [id, artifact, detail_availability, compatibility, record, provenance, retrieval]
1955
+ optional_entry: [summary, caveats]
1885
1956
  empty_result: status=ok with entries=[] and counts.total=0; absence is not an error
1886
1957
  durability:
1887
- command: agentera check durability [--project PATH] [--artifact ARTIFACT] [--number N] [--limit N] --format json
1888
- entity_command: agentera check durability --project PATH --artifact ARTIFACT --id ID --format json
1958
+ command: agentera check durability [--project PATH] [--artifact ARTIFACT] [--id ID] [--limit N] --format json
1889
1959
  formats: [text, json, yaml]
1890
1960
  selectors:
1891
- artifact: optional supported numbered archive artifact ID
1892
- number: optional positive entry number; requires artifact
1893
- id: entity-mode bare entity ID; requires artifact and replaces number after cutover
1961
+ artifact: optional supported entity artifact ID
1962
+ id: optional bare entity ID; requires artifact
1894
1963
  limit: optional bounded result count
1895
1964
  default_limit: 100
1896
1965
  maximum_limit: 100
@@ -1899,7 +1968,7 @@ api:
1899
1968
  git_values: [verified, degraded, unavailable]
1900
1969
  response_fields:
1901
1970
  required: [command, status, project, read_only, remote_contact, head, counts, entries, diagnostics, source_contract]
1902
- entry: [stable_id, artifact_id, entry_number, status, local, git]
1971
+ entry: [id, artifact, status, local, git]
1903
1972
  guarantees:
1904
1973
  read_only: true
1905
1974
  remote_contact: forbidden
@@ -1920,14 +1989,14 @@ api:
1920
1989
  syntax: opaque TOKEN returned as response.next_cursor
1921
1990
  first_page: omit --cursor to establish a snapshot
1922
1991
  snapshot_identity: >-
1923
- deterministic hash of ordered candidate IDs, archive hashes, legacy
1924
- projection hashes when no archive exists, filters, and overlay revision.
1992
+ deterministic hash of ordered canonical entity IDs, projected record
1993
+ hashes, and filters.
1925
1994
  snapshot_scope: artifact and filters are bound to the cursor; limit may change between pages
1926
1995
  append_behavior: >-
1927
1996
  Entries appended after the first page are excluded from that cursor's
1928
1997
  snapshot. They appear only in a new listing without the old cursor.
1929
1998
  continuation: >-
1930
- Continue strictly after the last emitted numeric entry number. Never
1999
+ Continue strictly after the last emitted entity ordering key. Never
1931
2000
  restart from page one, skip an entry, or duplicate an entry.
1932
2001
  unavailable: return cursor_snapshot_unavailable rather than silently creating a new snapshot
1933
2002
  opacity: callers must not parse, construct, or compare token internals
@@ -1942,7 +2011,7 @@ failures:
1942
2011
  required_fields: [schemaVersion, status, error]
1943
2012
  status: fail
1944
2013
  error_required_fields: [class, message, syntax, example, recovery]
1945
- error_optional_fields: [artifact_id, entry_number, stable_id, details, valid_values]
2014
+ error_optional_fields: [artifact, id, details, valid_values]
1946
2015
  exit_codes:
1947
2016
  invalid_input: 2
1948
2017
  operational_failure: 1
@@ -324,7 +324,20 @@ structured_output:
324
324
  constraints, verification expectations, artifact update requirements,
325
325
  progress logging requirements, changelog boundary, scope boundary,
326
326
  fallback commands, caveats, read-only plan-completion sweep metadata,
327
- and a raw-read-last-resort source contract. It must not introduce
327
+ and a raw-read-last-resort source contract. Verification commands are
328
+ selected only from bounded verification-labelled rows in the root
329
+ AGENTS.md `When | Command` recipe table. Explicit root or `pnpm -C`
330
+ package.json scripts validate those references; exact script aliases are
331
+ resolved before duplicate-label conflict checks, and equivalent canonical
332
+ commands are deduplicated with bounded line/field source pointers retained.
333
+ Command, provenance, rejection, and diagnostic omissions are reported by
334
+ explicit counts below generic startup projection limits. Malformed
335
+ recipes, placeholders, shorthand, unsupported syntax, symlinked sources,
336
+ targets, or existing ancestors, missing scripts, cycles, out-of-root paths,
337
+ every missing Node entrypoint, and conflicting canonical label sets are
338
+ rejected with bounded diagnostics rather than inferred or executed. Node
339
+ arguments use tokens only and reject absolute or parent-traversing values,
340
+ including values after `=`; discovery never executes a recipe. It must not introduce
328
341
  `agentera realisera`, `agentera build`, new top-level commands, or new subcommands.
329
342
  decision_attention_semantics: >-
330
343
  `agentera prime --format json` may include one bounded `decision_attention`
@@ -369,7 +382,7 @@ startup_completeness:
369
382
  - docs artifact mapping and source-contract completeness metadata
370
383
  - latest progress verification metadata needed for Orkestrera evaluation
371
384
  - Optimera benchmark_context metadata for retained startup benchmark summaries
372
- - Realisera execution_context metadata for plan-driven implementation startup
385
+ - Realisera execution_context metadata for plan-driven or explicit transient no-plan implementation startup
373
386
  empty_state_behavior: >-
374
387
  agentera prime reports absent plan, docs, and progress state explicitly through
375
388
  structured summaries and state_presence absence metadata instead of forcing
@@ -381,6 +394,75 @@ startup_completeness:
381
394
  - Do not add Decision 43 slash-route aliases to the CLI command surface.
382
395
  - Do not remove or rename routine state commands.
383
396
  - Do not add a separate benchmark command; Optimera benchmark comparison stays inside benchmark_context.
397
+ build_transient_execution_request:
398
+ status: implemented
399
+ command: agentera prime --context build --input <file|-> --format json
400
+ schema_version: agentera.buildExecutionRequest.v1
401
+ transport:
402
+ sources:
403
+ - file
404
+ - stdin
405
+ request_text_in_argv: forbidden
406
+ max_utf8_bytes: 32768
407
+ malformed_utf8: fatal
408
+ document: YAML or JSON mapping
409
+ acquisition:
410
+ file: >-
411
+ Regular files only; symlinks and non-regular inputs fail closed. Open
412
+ no-follow where supported, verify the opened descriptor identity against
413
+ the observed file, precheck known size, and incrementally read at most
414
+ max_utf8_bytes + 1 before rejecting overflow.
415
+ stdin: >-
416
+ Incrementally read fd 0 in bounded chunks through max_utf8_bytes + 1;
417
+ reject overflow and never close fd 0. Injected test stdin is capped
418
+ immediately after the supplied value returns.
419
+ fields:
420
+ exact_required:
421
+ - schema_version
422
+ - scope
423
+ - acceptance
424
+ additional_fields: forbidden
425
+ scope:
426
+ type: string
427
+ non_empty: true
428
+ max_unicode_code_points: 160
429
+ control_characters: forbidden
430
+ acceptance:
431
+ type: list_of_strings
432
+ min_items: 1
433
+ max_items: 12
434
+ duplicate_items: forbidden
435
+ item_non_empty: true
436
+ item_max_unicode_code_points: 160
437
+ item_control_characters: forbidden
438
+ validation_failure:
439
+ envelope: agentera.invalidInputEnvelope.v2
440
+ exit_code: 2
441
+ sensitive_input_echo: forbidden
442
+ availability:
443
+ only_with_context: build
444
+ active_or_completed_current_plan: conflict
445
+ archived_history_without_current_executable_plan: allowed
446
+ malformed_or_degraded_plan_state: fail_safe
447
+ persistence:
448
+ request_persisted: false
449
+ orientation_state_extended: false
450
+ state_mutation: none
451
+ plan_creation_or_mutation: forbidden
452
+ no_plan_execution_context:
453
+ mode: no_plan
454
+ valid_request:
455
+ work_selection_reason: explicit_no_plan_scope
456
+ acceptance_source: exact transient request
457
+ source_path_inference: forbidden
458
+ plan_fallback: forbidden
459
+ plan_status_update_required: false
460
+ complete_for_execution_context: true when all non-plan required execution state is available
461
+ missing_request:
462
+ complete_for_execution_context: false
463
+ plan_fallback: forbidden
464
+ advancing_recovery: agentera prime --context build --input - --format json
465
+ caveat: Explicit scope and acceptance are required for no-plan execution.
384
466
  evidence_context_target_contract:
385
467
  status: task_1_design_contract
386
468
  planned_context_name: evidence_context
@@ -160,12 +160,23 @@ audience_namespaces:
160
160
  [--project-root PATH] [--format text|json]
161
161
  delegates_from: stats refresh
162
162
  behavior: Matches today's `agentera stats refresh` including consent gates.
163
+ profile_glossary:
164
+ canonical_shape: >-
165
+ agentera report profile-glossary --input <file|-> [--dry-run]
166
+ --format json
167
+ delegates_from: null
168
+ behavior: >-
169
+ Applies one versioned personal glossary update request to the exact
170
+ PROFILE.md path supplied by Profile Full. Runs headlessly without a
171
+ project checkout; never discovers or reads project state or a project
172
+ glossary. Dry-run validates and computes the candidate without a write.
163
173
  legacy_top_level_alias: stats
164
174
  rejected_top_level: corpus
165
175
  notes: >-
166
176
  `agentera usage` and `agentera usage` remain backward-compatible
167
177
  maintainer seams per AGENTS.md until separately classified; public user-facing
168
- analytics consolidate under `report`.
178
+ analytics and Profile's bounded personal-output implementation consolidate
179
+ under `report`.
169
180
  check:
170
181
  audience: [maintainer]
171
182
  status: target_canonical_namespace
@@ -235,7 +235,13 @@ field_classification:
235
235
  recommendation is active.
236
236
  - field: attention
237
237
  status: required
238
- rationale: Bounded; opencode and status dashboard consume it.
238
+ rationale: >-
239
+ Bounded; opencode and status dashboard consume it. Valid current glossary
240
+ caveats add at most one generic review item through the glossary authority's
241
+ declared prime projection. When current, its one reserved final slot leaves
242
+ the first five unrelated items in their existing order under the six-item
243
+ public cap; lifecycle identity and private semantics remain internal, and
244
+ next_action is unchanged.
239
245
  - field: history
240
246
  status: diagnostic
241
247
  rationale: >-