agentera 3.0.0-dev.38 → 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 (101) hide show
  1. package/bundle/CHANGELOG.md +29 -4
  2. package/bundle/references/artifacts/state-storage-authority.yaml +118 -77
  3. package/bundle/references/cli/agent-ready-state-contract.yaml +84 -2
  4. package/bundle/skills/agentera/SKILL.md +26 -26
  5. package/bundle/skills/agentera/capabilities/build/schemas/exit.yaml +5 -4
  6. package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +17 -3
  7. package/bundle/skills/agentera/schemas/artifacts/plan.yaml +14 -3
  8. package/dist/capabilities/build/instructions.js +27 -2
  9. package/dist/capabilities/build/instructions.js.map +1 -1
  10. package/dist/capabilities/orchestrate/instructions.js +1 -1
  11. package/dist/cli/capabilityContext/bespoke.js +4 -3
  12. package/dist/cli/capabilityContext/bespoke.js.map +1 -1
  13. package/dist/cli/capabilityContext/build.js +77 -24
  14. package/dist/cli/capabilityContext/build.js.map +1 -1
  15. package/dist/cli/capabilityContext/closeout.js +2 -2
  16. package/dist/cli/capabilityContext/closeout.js.map +1 -1
  17. package/dist/cli/capabilityContext/evidence.js +2 -6
  18. package/dist/cli/capabilityContext/evidence.js.map +1 -1
  19. package/dist/cli/capabilityContext/planState.js +59 -78
  20. package/dist/cli/capabilityContext/planState.js.map +1 -1
  21. package/dist/cli/capabilityContext/projectVerification.js +410 -0
  22. package/dist/cli/capabilityContext/projectVerification.js.map +1 -0
  23. package/dist/cli/capabilityContext/startup.js +2 -2
  24. package/dist/cli/capabilityContext/startup.js.map +1 -1
  25. package/dist/cli/commands/prime/buildExecutionRequest.js +165 -0
  26. package/dist/cli/commands/prime/buildExecutionRequest.js.map +1 -0
  27. package/dist/cli/commands/prime/collectEntityOrientation.js +2 -1
  28. package/dist/cli/commands/prime/collectEntityOrientation.js.map +1 -1
  29. package/dist/cli/commands/prime/collectOrientationState.js +3 -1
  30. package/dist/cli/commands/prime/collectOrientationState.js.map +1 -1
  31. package/dist/cli/commands/prime.js +37 -2
  32. package/dist/cli/commands/prime.js.map +1 -1
  33. package/dist/cli/commands/query.js +4 -0
  34. package/dist/cli/commands/query.js.map +1 -1
  35. package/dist/cli/dispatch/prime.js +22 -1
  36. package/dist/cli/dispatch/prime.js.map +1 -1
  37. package/dist/cli/dispatch/shared.js +1 -1
  38. package/dist/cli/dispatch/shared.js.map +1 -1
  39. package/dist/cli/help.js +2 -1
  40. package/dist/cli/help.js.map +1 -1
  41. package/dist/cli/orientation.js +2 -2
  42. package/dist/cli/orientation.js.map +1 -1
  43. package/dist/registries/glossaryCaveatContract.js +3 -1
  44. package/dist/registries/glossaryCaveatContract.js.map +1 -1
  45. package/dist/state/changelog.js +222 -0
  46. package/dist/state/changelog.js.map +1 -0
  47. package/dist/state/decisionEntities.js +16 -9
  48. package/dist/state/decisionEntities.js.map +1 -1
  49. package/dist/state/decisionMigrationProvenance.js +84 -1
  50. package/dist/state/decisionMigrationProvenance.js.map +1 -1
  51. package/dist/state/decisionOverlay.js +9 -32
  52. package/dist/state/decisionOverlay.js.map +1 -1
  53. package/dist/state/decisionRevision.js +69 -444
  54. package/dist/state/decisionRevision.js.map +1 -1
  55. package/dist/state/decisionRevisionMigration.js +90 -0
  56. package/dist/state/decisionRevisionMigration.js.map +1 -0
  57. package/dist/state/directRetrieval.js +3 -52
  58. package/dist/state/directRetrieval.js.map +1 -1
  59. package/dist/state/entityCutover.js +6 -6
  60. package/dist/state/entityCutover.js.map +1 -1
  61. package/dist/state/entityGlossaryAuthority.js +14 -0
  62. package/dist/state/entityGlossaryAuthority.js.map +1 -0
  63. package/dist/state/entityMigrationIdentity.js +6 -0
  64. package/dist/state/entityMigrationIdentity.js.map +1 -0
  65. package/dist/state/entityMigrationPreview.js +14 -23
  66. package/dist/state/entityMigrationPreview.js.map +1 -1
  67. package/dist/state/entityStorage.js +20 -19
  68. package/dist/state/entityStorage.js.map +1 -1
  69. package/dist/state/healthEntities.js +2 -4
  70. package/dist/state/healthEntities.js.map +1 -1
  71. package/dist/state/listRetrieval.js +7 -38
  72. package/dist/state/listRetrieval.js.map +1 -1
  73. package/dist/state/migrationSourceBinding.js +1 -1
  74. package/dist/state/migrationSourceBinding.js.map +1 -1
  75. package/dist/state/objectiveExperimentEntities.js +3 -3
  76. package/dist/state/objectiveExperimentEntities.js.map +1 -1
  77. package/dist/state/planEntities.js +40 -7
  78. package/dist/state/planEntities.js.map +1 -1
  79. package/dist/state/progressEntities.js +2 -4
  80. package/dist/state/progressEntities.js.map +1 -1
  81. package/dist/state/safeProjectFile.js +4 -1
  82. package/dist/state/safeProjectFile.js.map +1 -1
  83. package/dist/state/startupProjection.js +2 -70
  84. package/dist/state/startupProjection.js.map +1 -1
  85. package/dist/state/stateStorageAuthority.js +48 -0
  86. package/dist/state/stateStorageAuthority.js.map +1 -0
  87. package/dist/state/summarySourceRowAuthority.js +1 -1
  88. package/dist/state/summarySourceRowAuthority.js.map +1 -1
  89. package/dist/state/todoDocsEntities.js +2 -3
  90. package/dist/state/todoDocsEntities.js.map +1 -1
  91. package/dist/state/write/explain.js +38 -59
  92. package/dist/state/write/explain.js.map +1 -1
  93. package/dist/state/write/operations.js +2 -26
  94. package/dist/state/write/operations.js.map +1 -1
  95. package/dist/state/write/transaction.js +3 -3
  96. package/dist/state/write/transaction.js.map +1 -1
  97. package/dist/upgrade/upgradeOrchestrator.js +15 -10
  98. package/dist/upgrade/upgradeOrchestrator.js.map +1 -1
  99. package/package.json +2 -2
  100. package/dist/state/decisionRevisionPublication.js +0 -532
  101. package/dist/state/decisionRevisionPublication.js.map +0 -1
@@ -4,6 +4,9 @@
4
4
 
5
5
  ### Changed
6
6
 
7
+ - `agentera prime` now selects Build and Audit work from the complete plan task
8
+ graph, prioritizes in-progress work before dependency-ready pending tasks, and
9
+ keeps status recommendations aligned when the public task list is bounded.
7
10
  - Status now selects TODO recommendations from complete typed readiness state
8
11
  before applying startup bounds, preserves the selected TODO ID and exact
9
12
  retrieval command across JSON, terminal, and host projections, and abstains
@@ -61,9 +64,9 @@
61
64
  - Added a validated TODO readiness authority with phase-derived capability
62
65
  destinations, explicit triage/block/gate/dependency outcomes, and
63
66
  reviewer-assigned deterministic queue ordering.
64
- - Added post-cutover entity-backed default state views, bare-ID durability diagnostics, and read-only historical migration-manifest target validation while preserving legacy numbered behavior before cutover.
65
- - Added a Git-backed entity cutover owned by the full development-channel `upgrade --yes` command, with deterministic direct publication, exact-target retries, marker-last authority activation, and first-unresolved-path handoff.
66
- - Added post-cutover decision entities for immutable bases and content revisions, replaceable satisfaction ownership, bare-ID exact and bounded reads, deterministic effective provenance, stale-base and transition validation, and explicit same-decision conflict detection; marker-absent projects retain the legacy numbered authority without dual writes.
67
+ - Added entity-backed state views, bare-ID durability diagnostics, and read-only historical migration validation; marker-absent projects now require migration instead of exposing legacy numbered reads.
68
+ - Added a Git-backed entity cutover owned by the full development-channel `upgrade --yes` command, with deterministic direct publication, exact-target retries, source-bound marker-last authority activation, and first-unresolved-path handoff.
69
+ - Added decision entities for immutable bases and content revisions, replaceable satisfaction ownership, bare-ID exact and bounded reads, deterministic effective provenance, stale-base and transition validation, and serialized same-decision ownership. Migration preserves ordered legacy amendments, including whole-alternative replacements and dateless evidence, rejects invalid or stale claims, and requires source-bound provenance for inherited legacy confidence; marker-absent aggregate files remain migration input only.
67
70
  - Added the post-cutover progress entity writer and `state progress get|list` reads with bare IDs, one canonical file per cycle, atomic replay-safe publication, full provenance, bounded snapshot pagination, and no legacy projection or archive writes; legacy projects remain unchanged until the durable cutover marker exists.
68
71
  - Added authority-driven, one-file-per-entity storage primitives with secure project-wide IDs, symlink-safe discovery, conflict-safe publication, relationship validation, and `agentera check validate state` diagnostics.
69
72
  - Added an authoritative evidence-tier contract (`references/analysis/evidence-tier-authority.yaml`) and contract-model loader (`packages/cli/src/registries/evidenceTierContract.ts`) fixing the bounded full-evidence and signal tiers, supported Codex, Cursor, OpenCode, Copilot, and historical Claude source coverage, the consumer field-supply map including the latent startup-analysis reader, bounded personal-glossary synthesis semantics, and deterministic recovery outcomes for oversized, legacy, missing, corrupt, and incomplete state.
@@ -78,7 +81,7 @@
78
81
  - Added `agentera state plan list` and `agentera state plan get --plan PLAN_ID` for deterministic, cursor-paginated active and archived plan retrieval, full-plan exact reads, lifecycle provenance, and explicit legacy, invalid, missing, and ambiguous archive outcomes.
79
82
  - Added persisted plan identity across active-to-archive transitions, deterministic read-only identity for legacy plans, explicit lifecycle provenance, mirrored-path reporting, and structured ambiguity failures for identity collisions.
80
83
  - Added `agentera state plan tasks list` and `agentera state plan tasks get --task N` for bounded active-plan task retrieval with declared task-number order, opaque snapshot cursors, structured not-found and compatibility errors, and exact omission recovery in text and JSON plan output.
81
- - Added `agentera state decisions amend --number N [--question ... --context ... --alternative-chosen ... --alternative-rejected ... --choice ... --reasoning ... --confidence firm|provisional|exploratory --feeds-into ...] [--dry-run] --format json`: validates and publishes a record-local revision under `.agentera/revisions/decisions.yaml` that composes over the immutable numbered archive at read time. Apply never rewrites the decisions projection, preserves unrelated decisions' bytes (including comments, block scalars, quoting, and inherited legacy confidence labels), refuses a broken revision document or unsafe record-local boundary without side effects, retries converge on a stable revision identity, and an identical re-submission is an idempotent replay. Append, satisfaction update, and amend tolerate untouched inherited confidence labels as explicit legacy caveats while requiring current vocabulary for new or amended content.
84
+ - Added `agentera state decisions amend --id ID --base-sha256 HASH [--question ... --context ... --alternative-chosen ... --alternative-rejected ... --choice ... --reasoning ... --confidence firm|provisional|exploratory --feeds-into ...] [--dry-run] --format json`: validates and publishes one immutable decision revision entity. Effective reads compose the base, ordered revisions, and current satisfaction entity; stale-base and same-base conflicts fail before publication, and identical retries converge.
82
85
 
83
86
  - Added an executable bounded-retrieval authority and reserved CLI grammar for plan tasks, plans, and objective-scoped experiments, including stable and legacy identity rules, experiment `0`, opaque cursors, explicit omissions, and structured compatibility errors; retrieval execution remains staged for subsequent tasks.
84
87
  - Added one shared skill at `~/.agents/skills/agentera` plus the CLI and entity-backed project state as the active integration contract; host-native plugin, hook, agent, and package surfaces are not shipped.
@@ -121,6 +124,28 @@
121
124
 
122
125
  ### Fixed
123
126
 
127
+ - Fixed `agentera state query changelog`, Build Prime, and Document closeout to
128
+ use one bounded Keep-a-Changelog reader with matching headings, boundary,
129
+ provenance, and fail-safe recovery for missing, malformed, unsafe, ambiguous,
130
+ or oversized input.
131
+ - Fixed explicit-home upgrade planning to ignore inherited
132
+ `OPENCODE_CONFIG_DIR` values outside the selected home, preventing unrelated
133
+ OpenCode resources from blocking fixture, package, or isolated project
134
+ upgrades while retaining in-home overrides.
135
+ - Fixed `agentera prime --context build` to accept bounded, transient no-plan
136
+ scope and acceptance through `--input <file|->`, complete execution context
137
+ without creating plan state or returning non-advancing plan recovery, and
138
+ reject active-plan conflicts.
139
+ - Fixed `agentera prime --context build` to derive bounded verification commands
140
+ from `AGENTS.md` and package scripts, preserve exact provenance, canonicalize
141
+ aliases, and reject placeholders, conflicts, unsafe paths, missing targets,
142
+ and over-limit input.
143
+ - Fixed `agentera prime --context build` instructions to log TODO, progress,
144
+ changelog, and plan closeout before one commit, and to describe canonical
145
+ progress entity publication instead of numbered aggregate compaction.
146
+ - Fixed plan supersession and open-plan completion to require every replacement
147
+ task to be complete with latest persisted PASS evidence. Existing records
148
+ remain readable, and affected open plans retain the narrow first-PASS repair.
124
149
  - Fixed same-minute progress recency to use persisted writer-owned publication
125
150
  order instead of opaque IDs. List and `prime` now select the final committed
126
151
  publication after restart or copy. Version 2 snapshot cursors preserve
@@ -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
@@ -313,9 +314,25 @@ entity_target:
313
314
  publication: immutable
314
315
  ownership: { fields: [decision, base_sha256], cardinality: zero_or_one }
315
316
  record:
316
- required_fields: [decision, date, provenance, base_sha256, changes]
317
+ required_fields: [decision, provenance, base_sha256, changes]
318
+ legacy_optional_fields: [date]
317
319
  required_paths: []
318
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.
319
336
  - boundary: health_audit
320
337
  artifact: health
321
338
  independently_mutable: true
@@ -761,7 +778,11 @@ entity_target:
761
778
  repetitions: 5
762
779
  pass_rule: every repetition stays within every applicable limit
763
780
  elapsed: wall-clock milliseconds from process start through complete serialized output
764
- 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
765
786
  bytes: UTF-8 byte length of stdout including the trailing newline
766
787
  targets:
767
788
  exact_get:
@@ -799,6 +820,8 @@ entity_migration:
799
820
  entity_mode:
800
821
  schemaVersion: agentera.stateMode.v1
801
822
  mode: entities
823
+ source_fingerprint: lowercase_sha256_of_bound_migration_inputs
824
+ preview_digest: lowercase_sha256_of_bound_migration_preview
802
825
  absent_mode: legacy
803
826
  invalid_behavior: fail_without_fallback
804
827
  detection: read_only
@@ -1300,33 +1323,33 @@ retrieval:
1300
1323
  - collection_id: progress.records
1301
1324
  artifact_id: progress
1302
1325
  growth: append_only_unbounded
1303
- identity: 'progress:<positive-entry-number>'
1304
- storage_ownership: immutable_numbered_archive_with_bounded_current_projection
1305
- 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
1306
1329
  bounds: count_1_to_100_and_serialized_utf8_budget
1307
1330
  cursor: opaque_snapshot_cursor
1308
1331
  omission: explicit_with_advancing_cursor_or_exact_get
1309
- get: agentera state progress get --number N --format json
1332
+ get: agentera state progress get --id ID --format json
1310
1333
  - collection_id: decisions.records
1311
1334
  artifact_id: decisions
1312
- growth: append_only_unbounded_with_declared_mutable_overlay
1313
- identity: 'decisions:<positive-entry-number>'
1314
- storage_ownership: immutable_numbered_archive_plus_decision_overlay_with_bounded_current_projection
1315
- 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
1316
1339
  bounds: count_1_to_100_and_serialized_utf8_budget
1317
1340
  cursor: opaque_snapshot_cursor
1318
1341
  omission: explicit_with_advancing_cursor_or_exact_get
1319
- get: agentera state decisions get --number N --format json
1342
+ get: agentera state decisions get --id ID --format json
1320
1343
  - collection_id: health.records
1321
1344
  artifact_id: health
1322
1345
  growth: append_only_unbounded
1323
- identity: 'health:<positive-entry-number>'
1324
- storage_ownership: immutable_numbered_archive_with_bounded_current_projection
1325
- 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
1326
1349
  bounds: count_1_to_100_and_serialized_utf8_budget
1327
1350
  cursor: opaque_snapshot_cursor
1328
1351
  omission: explicit_with_advancing_cursor_or_exact_get
1329
- get: agentera state health get --number N --format json
1352
+ get: agentera state health get --id ID --format json
1330
1353
  - collection_id: plan.plans
1331
1354
  artifact_id: plan
1332
1355
  growth: one_active_plus_append_only_immutable_file_archives
@@ -1666,6 +1689,7 @@ identity:
1666
1689
  not emitted on the current bounded page.
1667
1690
 
1668
1691
  envelope:
1692
+ legacy_source_state: migration_input_only
1669
1693
  schema_version: agentera.stateArchiveEntry.v1
1670
1694
  required_fields:
1671
1695
  - schemaVersion
@@ -1702,15 +1726,18 @@ envelope:
1702
1726
 
1703
1727
  overlays:
1704
1728
  location: .agentera/overlays/decisions.yaml
1729
+ legacy_source_state: migration_input_only
1730
+ current_entity_boundary: decision_satisfaction
1705
1731
  project_root_fixed: true
1706
1732
  docs_yaml_override: forbidden
1707
1733
  schema_version: agentera.decisionOverlay.v1
1708
1734
  supported_artifact: decisions
1709
1735
  identity_key: decisions:<decision-number>
1710
1736
  storage_shape: >-
1711
- A mapping keyed by stable decision ID. Each value contains only the
1712
- authority-declared mutable paths and never replaces the immutable archive
1713
- 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.
1714
1741
  mutable_paths:
1715
1742
  - satisfaction.state
1716
1743
  - satisfaction.evidence
@@ -1753,18 +1780,29 @@ overlays:
1753
1780
 
1754
1781
  revisions:
1755
1782
  location: .agentera/revisions/decisions.yaml
1783
+ legacy_source_state: migration_input_only
1756
1784
  project_root_fixed: true
1757
1785
  docs_yaml_override: forbidden
1758
1786
  schema_version: agentera.decisionRevision.v1
1759
1787
  supported_artifact: decisions
1760
1788
  identity_key: decisions:<decision-number>
1761
1789
  storage_shape: >-
1762
- A mapping keyed by stable decision ID. Each value is an ordered list of
1763
- immutable revision records carrying only authority-declared amendable
1764
- content paths plus revision provenance. A revision never replaces the
1765
- immutable numbered archive record and never replaces the satisfaction
1766
- 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.
1767
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:
1768
1806
  - question
1769
1807
  - context
1770
1808
  - alternatives
@@ -1777,14 +1815,15 @@ revisions:
1777
1815
  temporal_paths:
1778
1816
  - date
1779
1817
  separation_from_overlay: >-
1780
- Amendments never touch satisfaction overlay paths. Satisfaction updates
1781
- remain under overlays; content amendments remain under revisions. Each
1782
- 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.
1783
1822
  immutability: >-
1784
- Original numbered archive records remain immutable historical evidence.
1785
- Revisions are additional immutable evidence appended in declared order;
1786
- no revision overwrites, reorders, or deletes a prior revision. A revision
1787
- 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
1788
1827
  idempotent replay.
1789
1828
  provenance: >-
1790
1829
  Revision evidence carries revision provenance only. It is never labeled
@@ -1792,33 +1831,32 @@ revisions:
1792
1831
  legacy projection record may carry degraded_projection provenance and
1793
1832
  never historical_archive provenance.
1794
1833
  publication_order:
1795
- - validate_target_identity
1834
+ - validate_entity_target_identity
1796
1835
  - validate_amendment_vocabulary
1797
- - stage_revision
1798
- - publish_revision
1799
- - update_effective_projection
1800
- 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
1801
1840
  apply_state_note: >-
1802
- The revision authority and amend command publish record-local amendments
1803
- with recovery. A valid dry-run reports the exact revision, effective record,
1804
- and projection effect without writing any file. Apply writes a
1805
- record-local override to the revision document only (preserving unrelated
1806
- entries' bytes), retries converge on a stable revision identity, and an
1807
- identical re-submission is an idempotent replay. The decisions projection
1808
- is never rewritten by an amendment; effective detail composes
1809
- base→revisions→overlay. Amend execution still refuses before side effects
1810
- for an unsafe target-only change, a duplicate-revision conflict, a stale
1811
- base hash, or an unsafe target identity, returning an actionable retry or
1812
- 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
1813
1849
  `agentera state decisions explain --verb amend --format json`.
1814
1850
 
1815
1851
  projections:
1816
1852
  archive:
1817
- role: complete immutable historical detail
1853
+ source_state: migration_input_only
1854
+ role: complete immutable historical migration detail
1818
1855
  source_of_truth_for: historical_record_fields
1819
1856
  omission: never omit fields from an archive record
1820
1857
  current:
1821
- role: bounded active projection for current artifact consumers
1858
+ source_state: migration_input_only
1859
+ role: bounded aggregate migration projection
1822
1860
  default_capacity:
1823
1861
  active_entries: 10
1824
1862
  summary_entries: 40
@@ -1842,14 +1880,15 @@ projections:
1842
1880
  progress: .agentera/progress.yaml
1843
1881
  decisions: .agentera/decisions.yaml
1844
1882
  health: .agentera/health.yaml
1845
- source_of_truth_for: current_projection_and_legacy_compatibility_state
1883
+ source_of_truth_for: legacy_migration_and_compatibility_state_only
1846
1884
  archive_relationship: >-
1847
- 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;
1848
1886
  archive presence and hash verification determine whether full detail is
1849
- available. Current mutable decision overlay values are composed at read
1850
- 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.
1851
1889
  summary:
1852
- role: bounded list and startup representation
1890
+ source_state: migration_input_only
1891
+ role: bounded aggregate migration representation
1853
1892
  required_item_fields: [stable_id, artifact_id, entry_number, addressable, classification, detail_availability, source]
1854
1893
  nullable_item_fields:
1855
1894
  - stable_id
@@ -1870,6 +1909,7 @@ projections:
1870
1909
  truncated, represented as a fabricated summary, or treated as missing
1871
1910
  history without provenance.
1872
1911
  startup:
1912
+ source_state: canonical_entity_authority
1873
1913
  role: bounded orientation and capability-startup projection
1874
1914
  required_fields: [command, status, source, source_contract]
1875
1915
  allowed_payload: >-
@@ -1886,17 +1926,17 @@ api:
1886
1926
  artifact_syntax: agentera state <artifact-id>
1887
1927
  formats: [text, json, yaml]
1888
1928
  direct_get:
1889
- command: agentera state <artifact-id> get --number N --format json
1929
+ command: agentera state <artifact-id> get --id ID --format json
1890
1930
  examples:
1891
- progress: agentera state progress get --number 747 --format json
1892
- decisions: agentera state decisions get --number 53 --format json
1893
- health: agentera state health get --number 29 --format json
1894
- 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
1895
1935
  result: >-
1896
- One complete record composed from the immutable archive and only the
1897
- authority-declared current overlay fields, with stable_id, source,
1898
- detail_availability, compatibility, and provenance metadata.
1899
- 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
1900
1940
  list:
1901
1941
  command: agentera state <artifact-id> list [--limit N] [--cursor TOKEN] --format json
1902
1942
  examples:
@@ -1905,20 +1945,21 @@ api:
1905
1945
  default_limit: 20
1906
1946
  minimum_limit: 1
1907
1947
  maximum_limit: 100
1908
- 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
1909
1952
  response_fields:
1910
1953
  required: [command, status, entries, counts, source, filters, snapshot, source_contract]
1911
- entry: [stable_id, artifact_id, entry_number, current_status, detail_availability, source, compatibility, provenance]
1912
- optional_entry: [summary, record_status, overlay_applied, retrieval]
1954
+ entry: [id, artifact, detail_availability, compatibility, record, provenance, retrieval]
1955
+ optional_entry: [summary, caveats]
1913
1956
  empty_result: status=ok with entries=[] and counts.total=0; absence is not an error
1914
1957
  durability:
1915
- command: agentera check durability [--project PATH] [--artifact ARTIFACT] [--number N] [--limit N] --format json
1916
- 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
1917
1959
  formats: [text, json, yaml]
1918
1960
  selectors:
1919
- artifact: optional supported numbered archive artifact ID
1920
- number: optional positive entry number; requires artifact
1921
- 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
1922
1963
  limit: optional bounded result count
1923
1964
  default_limit: 100
1924
1965
  maximum_limit: 100
@@ -1927,7 +1968,7 @@ api:
1927
1968
  git_values: [verified, degraded, unavailable]
1928
1969
  response_fields:
1929
1970
  required: [command, status, project, read_only, remote_contact, head, counts, entries, diagnostics, source_contract]
1930
- entry: [stable_id, artifact_id, entry_number, status, local, git]
1971
+ entry: [id, artifact, status, local, git]
1931
1972
  guarantees:
1932
1973
  read_only: true
1933
1974
  remote_contact: forbidden
@@ -1948,14 +1989,14 @@ api:
1948
1989
  syntax: opaque TOKEN returned as response.next_cursor
1949
1990
  first_page: omit --cursor to establish a snapshot
1950
1991
  snapshot_identity: >-
1951
- deterministic hash of ordered candidate IDs, archive hashes, legacy
1952
- projection hashes when no archive exists, filters, and overlay revision.
1992
+ deterministic hash of ordered canonical entity IDs, projected record
1993
+ hashes, and filters.
1953
1994
  snapshot_scope: artifact and filters are bound to the cursor; limit may change between pages
1954
1995
  append_behavior: >-
1955
1996
  Entries appended after the first page are excluded from that cursor's
1956
1997
  snapshot. They appear only in a new listing without the old cursor.
1957
1998
  continuation: >-
1958
- Continue strictly after the last emitted numeric entry number. Never
1999
+ Continue strictly after the last emitted entity ordering key. Never
1959
2000
  restart from page one, skip an entry, or duplicate an entry.
1960
2001
  unavailable: return cursor_snapshot_unavailable rather than silently creating a new snapshot
1961
2002
  opacity: callers must not parse, construct, or compare token internals
@@ -1970,7 +2011,7 @@ failures:
1970
2011
  required_fields: [schemaVersion, status, error]
1971
2012
  status: fail
1972
2013
  error_required_fields: [class, message, syntax, example, recovery]
1973
- error_optional_fields: [artifact_id, entry_number, stable_id, details, valid_values]
2014
+ error_optional_fields: [artifact, id, details, valid_values]
1974
2015
  exit_codes:
1975
2016
  invalid_input: 2
1976
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