engineering-platform 2.3.74__tar.gz → 2.3.76__tar.gz

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 (164) hide show
  1. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/PKG-INFO +1 -1
  2. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/pyproject.toml +1 -1
  3. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/ENGINEERING_PLATFORM_CONFIG.json +1 -1
  4. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/ENGINEERING_PLATFORM_VERSION.json +4 -4
  5. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/platform_version.py +1 -1
  6. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/server.py +69 -15
  7. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/templates/workspace-config.json +1 -1
  8. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform.egg-info/PKG-INFO +1 -1
  9. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/README.md +0 -0
  10. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/setup.cfg +0 -0
  11. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/__init__.py +0 -0
  12. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/__main__.py +0 -0
  13. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/agent_state.py +0 -0
  14. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/agent_trust.py +0 -0
  15. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/assets/dashboard.css +0 -0
  16. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/assets/dashboard.js +0 -0
  17. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/assets/dashboard_locales.mjs +0 -0
  18. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/assets/dashboard_status_store.mjs +0 -0
  19. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/assets/dashboard_translation.mjs +0 -0
  20. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/assets/operations-console/apple-touch-icon-dark.png +0 -0
  21. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/assets/operations-console/apple-touch-icon-light.png +0 -0
  22. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/assets/operations-console/icon-dark.png +0 -0
  23. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/assets/operations-console/icon-light.png +0 -0
  24. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/assets/operations-console/icon-transparent.png +0 -0
  25. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/assets/operations-console/manifest.webmanifest +0 -0
  26. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/capability_preflight.py +0 -0
  27. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/capability_review.py +0 -0
  28. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/central_data_transfer.py +0 -0
  29. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/central_database.py +0 -0
  30. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/central_store_migration.py +0 -0
  31. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/codex_capacity.py +0 -0
  32. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/codex_chat.py +0 -0
  33. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/codex_observability.py +0 -0
  34. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/component_lock.py +0 -0
  35. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/component_logging.py +0 -0
  36. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/console_presentation.py +0 -0
  37. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/console_route_ownership.py +0 -0
  38. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/contracts/__init__.py +0 -0
  39. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/contracts/ep_consumer.py +0 -0
  40. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/contracts/models.py +0 -0
  41. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/contracts/projection.py +0 -0
  42. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/dashboard_browser_validation.py +0 -0
  43. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/dashboard_state.py +0 -0
  44. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/dashboard_supervisor.swift +0 -0
  45. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/dashboard_translation.py +0 -0
  46. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/dependabot_producer.py +0 -0
  47. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/development_profile.py +0 -0
  48. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/drift_diagnostics.py +0 -0
  49. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/emergency_recovery.py +0 -0
  50. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/engineering_memory.py +0 -0
  51. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/ep_consumer_credentials.py +0 -0
  52. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/evidence_projection.py +0 -0
  53. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/execution_activity.py +0 -0
  54. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/execution_context.py +0 -0
  55. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/execution_errors.py +0 -0
  56. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/execution_evidence.py +0 -0
  57. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/execution_executor.py +0 -0
  58. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/execution_finalization.py +0 -0
  59. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/execution_host.py +0 -0
  60. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/execution_host_evidence.py +0 -0
  61. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/execution_lease.py +0 -0
  62. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/execution_lifecycle.py +0 -0
  63. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/execution_models.py +0 -0
  64. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/execution_readiness.py +0 -0
  65. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/execution_reporting.py +0 -0
  66. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/execution_repository.py +0 -0
  67. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/execution_timeout_policy.py +0 -0
  68. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/execution_timing.py +0 -0
  69. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/execution_transaction.py +0 -0
  70. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/external_producer_binding.py +0 -0
  71. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/file_inbox.py +0 -0
  72. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/forensic_attribution.py +0 -0
  73. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/forensic_attribution_v2.py +0 -0
  74. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/forensic_delta.py +0 -0
  75. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/golden_scenario.py +0 -0
  76. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/historical_dashboard_configuration.py +0 -0
  77. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/host_admin.py +0 -0
  78. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/host_preflight.py +0 -0
  79. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/installation_relocation.py +0 -0
  80. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/installation_update_activation.py +0 -0
  81. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/installation_update_admission.py +0 -0
  82. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/installation_update_backup.py +0 -0
  83. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/installation_update_composition.py +0 -0
  84. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/installation_update_executor.py +0 -0
  85. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/installation_update_migration.py +0 -0
  86. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/installation_update_operation.py +0 -0
  87. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/installation_update_plan.py +0 -0
  88. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/installation_update_preparation.py +0 -0
  89. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/investigation_ledger.py +0 -0
  90. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/legacy_inbox_migration.py +0 -0
  91. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/legacy_installation_adoption.py +0 -0
  92. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/lifecycle_worker.py +0 -0
  93. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/live_status.py +0 -0
  94. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/local_api.py +0 -0
  95. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/local_api_keychain.py +0 -0
  96. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/local_repository_binding.py +0 -0
  97. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/managed_autonomy.py +0 -0
  98. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/managed_codex_runtime.py +0 -0
  99. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/operational_installation.py +0 -0
  100. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/operational_installation_lock.py +0 -0
  101. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/operational_installation_record.py +0 -0
  102. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/owner_credential_recovery.py +0 -0
  103. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/parity_context.py +0 -0
  104. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/parity_lifecycle_dispatcher.py +0 -0
  105. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/platform_admin.py +0 -0
  106. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/platform_api.py +0 -0
  107. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/platform_bootstrap.py +0 -0
  108. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/platform_components.py +0 -0
  109. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/pr_check_repair.py +0 -0
  110. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/pr_evidence_backfill.py +0 -0
  111. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/producer.py +0 -0
  112. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/product_installation_readback.py +0 -0
  113. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/project_agent.py +0 -0
  114. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/project_agent_service.py +0 -0
  115. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/project_topology.py +0 -0
  116. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/prompt_history.py +0 -0
  117. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/provider_context.py +0 -0
  118. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/provider_context_benchmark.py +0 -0
  119. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/provider_context_scope.py +0 -0
  120. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/provider_interruption.py +0 -0
  121. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/provider_process_identity.py +0 -0
  122. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/provider_readiness.py +0 -0
  123. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/provider_recovery.py +0 -0
  124. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/provider_usage.py +0 -0
  125. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/providers.py +0 -0
  126. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/qualification.py +0 -0
  127. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/qualification_runtime.py +0 -0
  128. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/recommendation_handoff.py +0 -0
  129. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/reconciliation_adoption.py +0 -0
  130. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/release_operation.py +0 -0
  131. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/report_analysis.py +0 -0
  132. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/repository_attachment.py +0 -0
  133. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/repository_handoff.py +0 -0
  134. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/resources.py +0 -0
  135. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/reviewer_evidence.py +0 -0
  136. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/revision_binding.py +0 -0
  137. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/schemas/producer-readback-v1.2.schema.json +0 -0
  138. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/schemas/producer-readback-v1.schema.json +0 -0
  139. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/schemas/repository-attachment.schema.json +0 -0
  140. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/server_console_services.py +0 -0
  141. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/server_relay.py +0 -0
  142. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/server_service.py +0 -0
  143. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/status_model.py +0 -0
  144. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/status_reconciliation.py +0 -0
  145. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/storage.py +0 -0
  146. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/submission_cli.py +0 -0
  147. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/submission_intake.py +0 -0
  148. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/submission_service.py +0 -0
  149. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/system_installation_topology.py +0 -0
  150. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/system_server_service.py +0 -0
  151. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/telemetry.py +0 -0
  152. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/terminal_evidence_reconciliation.py +0 -0
  153. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/validation_identity.py +0 -0
  154. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/validation_profile.py +0 -0
  155. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/version_preparation_delivery.py +0 -0
  156. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/workspace_preflight.py +0 -0
  157. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/worktree_provenance.py +0 -0
  158. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform/worktree_tooling.py +0 -0
  159. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform.egg-info/SOURCES.txt +0 -0
  160. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform.egg-info/dependency_links.txt +0 -0
  161. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform.egg-info/entry_points.txt +0 -0
  162. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/src/engineering_platform.egg-info/top_level.txt +0 -0
  163. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/tests/test_adaptive_action_sizing_design.py +0 -0
  164. {engineering_platform-2.3.74 → engineering_platform-2.3.76}/tests/test_role_task_model_policy_design.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: engineering-platform
3
- Version: 2.3.74
3
+ Version: 2.3.76
4
4
  Summary: Local-first Engineering Platform execution operations runtime
5
5
  Author: Peter van Tol
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "engineering-platform"
7
- version = "2.3.74"
7
+ version = "2.3.76"
8
8
  description = "Local-first Engineering Platform execution operations runtime"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.14,<3.15"
@@ -3,7 +3,7 @@
3
3
  "platform": {
4
4
  "id": "engineering-platform",
5
5
  "name": "Engineering Platform",
6
- "version": "2.3.74",
6
+ "version": "2.3.76",
7
7
  "generation": 2,
8
8
  "documentation_namespace": "engineering-platform",
9
9
  "capability_registry_version": 1
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "bootstrap_contract": "2026.12",
3
3
  "checkpoint_format": 1,
4
- "dashboard_version": "2.3.74",
4
+ "dashboard_version": "2.3.76",
5
5
  "handoff_protocol": 1,
6
6
  "memory_format": 2,
7
7
  "minimum_codex_cli": "0.146.0",
8
8
  "inbox_protocol": 1,
9
- "platform_version": "2.3.74",
9
+ "platform_version": "2.3.76",
10
10
  "report_format": 2,
11
- "runner_version": "2.3.74",
11
+ "runner_version": "2.3.76",
12
12
  "status_model": 1,
13
13
  "storage_schema": 45,
14
- "watcher_version": "2.3.74"
14
+ "watcher_version": "2.3.76"
15
15
  }
@@ -12,7 +12,7 @@ from .storage import ENGINEERING_STORAGE_SCHEMA_VERSION
12
12
 
13
13
  SEMVER = re.compile(r"^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$")
14
14
  CONTRACT = re.compile(r"^(\d{4})\.(0[1-9]|1[0-2])$")
15
- CURRENT_PLATFORM_VERSION = "2.3.74"
15
+ CURRENT_PLATFORM_VERSION = "2.3.76"
16
16
  MANIFEST_FIELDS = frozenset(
17
17
  {
18
18
  "platform_version",
@@ -87,7 +87,11 @@ from .component_logging import (
87
87
  component_logger,
88
88
  log_event,
89
89
  )
90
- from .agent_state import redact_diagnostic
90
+ from .agent_state import (
91
+ MAX_COMMIT_EVIDENCE_RECORDS,
92
+ is_valid_commit_evidence_record,
93
+ redact_diagnostic,
94
+ )
91
95
  from .codex_chat import (
92
96
  CHAT_RETENTION_DAYS,
93
97
  MAX_HISTORY_ITEMS,
@@ -3429,15 +3433,58 @@ def _central_console_validation_evidence(
3429
3433
  return projected
3430
3434
 
3431
3435
 
3436
+ def _central_console_checkpoint_commit_timeline(
3437
+ data_root: Path, project_id: str, submission_id: str, run_id: str, outcome: str,
3438
+ ) -> list[dict[str, str]]:
3439
+ """Project strict phase commits from one exactly bound terminal checkpoint."""
3440
+ try:
3441
+ with storage.sqlite_connection(data_root / SERVER_DATABASE_FILENAME) as connection:
3442
+ row = connection.execute(
3443
+ """SELECT t.payload,t.phase,d.state
3444
+ FROM engineering_transactions AS t
3445
+ JOIN ep_parity_lifecycle_dispatches AS d ON d.run_id=t.run_id
3446
+ WHERE d.project_id=? AND d.submission_id=? AND d.run_id=?""",
3447
+ (project_id, submission_id, run_id),
3448
+ ).fetchone()
3449
+ except sqlite3.Error:
3450
+ return []
3451
+ if row is None or row[1] != outcome or row[2] != outcome:
3452
+ return []
3453
+ try:
3454
+ checkpoint = json.loads(str(row[0]))
3455
+ except (TypeError, ValueError, json.JSONDecodeError):
3456
+ return []
3457
+ if (
3458
+ not isinstance(checkpoint, Mapping)
3459
+ or checkpoint.get("run_id") != run_id
3460
+ or checkpoint.get("phase") != outcome
3461
+ or checkpoint.get("terminal") is not True
3462
+ ):
3463
+ return []
3464
+ raw = checkpoint.get("commit_evidence")
3465
+ if (
3466
+ not isinstance(raw, list)
3467
+ or len(raw) > MAX_COMMIT_EVIDENCE_RECORDS
3468
+ or any(not is_valid_commit_evidence_record(item) for item in raw)
3469
+ ):
3470
+ return []
3471
+ events = [dict(item) for item in raw]
3472
+ identities = {(item["phase"], item["commit_sha"]) for item in events}
3473
+ if len(identities) != len(events):
3474
+ return []
3475
+ return sorted(events, key=lambda item: item["observed_at"])
3476
+
3477
+
3432
3478
  def _central_console_terminal_revision_timeline(
3433
3479
  data_root: Path, project_id: str, run_id: str,
3434
3480
  ) -> list[dict[str, str]]:
3435
- """Project an exact terminal artifact's verified repository revision.
3481
+ """Project verified phase commits plus an exact terminal revision fallback.
3436
3482
 
3437
- A successful no-change run has no phase commit to display, but its
3438
- integrity-verified terminal artifact can still attest the final repository
3439
- revision. This stays distinct from a phase commit: malformed or tampered
3440
- payloads never become Console evidence.
3483
+ The immutable terminal artifact first proves the project/submission/run
3484
+ binding. The terminal CENTRAL checkpoint then supplies the append-only
3485
+ phase commit records that the execution host actually verified. A
3486
+ successful no-change run has no phase commit, so its artifact revision is
3487
+ retained as a distinct fallback rather than being called a phase commit.
3441
3488
  """
3442
3489
  try:
3443
3490
  with storage.sqlite_connection(data_root / SERVER_DATABASE_FILENAME) as connection:
@@ -3449,6 +3496,7 @@ def _central_console_terminal_revision_timeline(
3449
3496
  WHERE d.project_id=? AND d.run_id=?
3450
3497
  AND a.artifact_type='EP_TERMINAL_EVIDENCE'
3451
3498
  AND a.integrity_status='VERIFIED'
3499
+ AND a.projection_status='AVAILABLE'
3452
3500
  ORDER BY a.created_at DESC,a.artifact_id DESC LIMIT 1""",
3453
3501
  (project_id, run_id),
3454
3502
  ).fetchone()
@@ -3472,25 +3520,31 @@ def _central_console_terminal_revision_timeline(
3472
3520
  repository = evidence.get("repository")
3473
3521
  if not all(isinstance(value, Mapping) for value in (submission, terminal_run, repository)):
3474
3522
  return []
3523
+ submission_id = submission.get("id")
3475
3524
  revision = repository.get("revision")
3476
3525
  outcome = terminal_run.get("outcome")
3477
3526
  if (
3478
3527
  submission.get("project_id") != project_id
3528
+ or not isinstance(submission_id, str)
3479
3529
  or terminal_run.get("id") != run_id
3480
3530
  or outcome not in {"COMPLETE", "BLOCKED", "FAILED"}
3481
- or not isinstance(revision, str)
3482
- or re.fullmatch(r"[0-9a-f]{40}", revision) is None
3483
3531
  ):
3484
3532
  return []
3485
3533
  observed_at = row[1]
3486
3534
  if not isinstance(observed_at, str) or not observed_at.strip():
3487
3535
  return []
3488
- return [{
3489
- "phase": "TERMINAL",
3490
- "observed_at": observed_at,
3491
- "commit_sha": revision,
3492
- "description": "terminal_repository_revision_verified",
3493
- }]
3536
+ events = _central_console_checkpoint_commit_timeline(
3537
+ data_root, project_id, submission_id, run_id, str(outcome),
3538
+ )
3539
+ if isinstance(revision, str) and re.fullmatch(r"[0-9a-f]{40}", revision):
3540
+ if not any(item["commit_sha"] == revision for item in events):
3541
+ events.append({
3542
+ "phase": "TERMINAL",
3543
+ "observed_at": observed_at,
3544
+ "commit_sha": revision,
3545
+ "description": "terminal_repository_revision_verified",
3546
+ })
3547
+ return sorted(events, key=lambda item: item["observed_at"])
3494
3548
 
3495
3549
 
3496
3550
  def _central_console_current_execution_diagnostic(data_root: Path, project_id: str) -> str | None:
@@ -6199,7 +6253,7 @@ class _HealthHandler(http.server.BaseHTTPRequestHandler):
6199
6253
  self._send(503, {"error": "CENTRAL_UNAVAILABLE"})
6200
6254
  return
6201
6255
  artifact = re.fullmatch(
6202
- r"/v1/projects/([^/]+)/artifacts/((?:terminal-evidence|assurance-findings):[^/]+)",
6256
+ r"/v1/projects/([^/]+)/artifacts/((?:terminal-evidence(?:-reconciled)?|assurance-findings):[^/]+)",
6203
6257
  unquote(request.path),
6204
6258
  )
6205
6259
  if artifact:
@@ -3,7 +3,7 @@
3
3
  "platform": {
4
4
  "id": "engineering-platform",
5
5
  "name": "Engineering Platform",
6
- "version": "2.3.74",
6
+ "version": "2.3.76",
7
7
  "generation": 2,
8
8
  "documentation_namespace": "engineering-platform",
9
9
  "capability_registry_version": 1
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: engineering-platform
3
- Version: 2.3.74
3
+ Version: 2.3.76
4
4
  Summary: Local-first Engineering Platform execution operations runtime
5
5
  Author: Peter van Tol
6
6
  License: MIT