engineering-platform 2.3.91__tar.gz → 2.3.92__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 (172) hide show
  1. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/PKG-INFO +1 -1
  2. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/pyproject.toml +1 -1
  3. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/ENGINEERING_PLATFORM_CONFIG.json +1 -1
  4. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/ENGINEERING_PLATFORM_VERSION.json +4 -4
  5. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/assets/dashboard.css +3 -3
  6. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/execution_host.py +41 -1
  7. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/execution_timing.py +23 -0
  8. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/platform_version.py +1 -1
  9. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/server.py +33 -0
  10. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/templates/workspace-config.json +1 -1
  11. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform.egg-info/PKG-INFO +1 -1
  12. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/README.md +0 -0
  13. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/setup.cfg +0 -0
  14. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/__init__.py +0 -0
  15. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/__main__.py +0 -0
  16. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/agent_state.py +0 -0
  17. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/agent_trust.py +0 -0
  18. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/assets/dashboard.js +0 -0
  19. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/assets/dashboard_locales.mjs +0 -0
  20. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/assets/dashboard_status_store.mjs +0 -0
  21. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/assets/dashboard_translation.mjs +0 -0
  22. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/assets/operations-console/apple-touch-icon-dark.png +0 -0
  23. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/assets/operations-console/apple-touch-icon-light.png +0 -0
  24. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/assets/operations-console/icon-dark.png +0 -0
  25. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/assets/operations-console/icon-light.png +0 -0
  26. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/assets/operations-console/icon-transparent.png +0 -0
  27. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/assets/operations-console/manifest.webmanifest +0 -0
  28. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/assurance_scope.py +0 -0
  29. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/capability_preflight.py +0 -0
  30. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/capability_review.py +0 -0
  31. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/central_data_transfer.py +0 -0
  32. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/central_database.py +0 -0
  33. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/central_operational_reset.py +0 -0
  34. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/central_store_migration.py +0 -0
  35. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/codex_capacity.py +0 -0
  36. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/codex_chat.py +0 -0
  37. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/codex_observability.py +0 -0
  38. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/component_lock.py +0 -0
  39. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/component_logging.py +0 -0
  40. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/console_presentation.py +0 -0
  41. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/console_route_ownership.py +0 -0
  42. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/contracts/__init__.py +0 -0
  43. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/contracts/ep_consumer.py +0 -0
  44. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/contracts/models.py +0 -0
  45. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/contracts/projection.py +0 -0
  46. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/dashboard_browser_validation.py +0 -0
  47. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/dashboard_state.py +0 -0
  48. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/dashboard_supervisor.swift +0 -0
  49. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/dashboard_translation.py +0 -0
  50. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/dependabot_producer.py +0 -0
  51. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/development_profile.py +0 -0
  52. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/drift_diagnostics.py +0 -0
  53. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/emergency_recovery.py +0 -0
  54. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/engineering_memory.py +0 -0
  55. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/ep_consumer_credentials.py +0 -0
  56. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/evidence_projection.py +0 -0
  57. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/execution_activity.py +0 -0
  58. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/execution_context.py +0 -0
  59. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/execution_errors.py +0 -0
  60. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/execution_evidence.py +0 -0
  61. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/execution_executor.py +0 -0
  62. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/execution_finalization.py +0 -0
  63. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/execution_host_evidence.py +0 -0
  64. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/execution_lease.py +0 -0
  65. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/execution_lifecycle.py +0 -0
  66. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/execution_models.py +0 -0
  67. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/execution_readiness.py +0 -0
  68. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/execution_reporting.py +0 -0
  69. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/execution_repository.py +0 -0
  70. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/execution_timeout_policy.py +0 -0
  71. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/execution_transaction.py +0 -0
  72. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/external_producer_binding.py +0 -0
  73. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/file_inbox.py +0 -0
  74. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/forensic_attribution.py +0 -0
  75. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/forensic_attribution_v2.py +0 -0
  76. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/forensic_delta.py +0 -0
  77. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/golden_scenario.py +0 -0
  78. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/historical_dashboard_configuration.py +0 -0
  79. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/host_admin.py +0 -0
  80. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/host_preflight.py +0 -0
  81. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/installation_relocation.py +0 -0
  82. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/installation_update_activation.py +0 -0
  83. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/installation_update_admission.py +0 -0
  84. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/installation_update_backup.py +0 -0
  85. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/installation_update_composition.py +0 -0
  86. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/installation_update_executor.py +0 -0
  87. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/installation_update_migration.py +0 -0
  88. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/installation_update_operation.py +0 -0
  89. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/installation_update_plan.py +0 -0
  90. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/installation_update_preparation.py +0 -0
  91. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/investigation_ledger.py +0 -0
  92. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/legacy_inbox_migration.py +0 -0
  93. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/legacy_installation_adoption.py +0 -0
  94. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/lifecycle_worker.py +0 -0
  95. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/live_status.py +0 -0
  96. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/local_api.py +0 -0
  97. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/local_api_keychain.py +0 -0
  98. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/local_repository_binding.py +0 -0
  99. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/managed_autonomy.py +0 -0
  100. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/managed_codex_runtime.py +0 -0
  101. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/managed_workspace_readiness.py +0 -0
  102. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/merge_delegation.py +0 -0
  103. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/operational_installation.py +0 -0
  104. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/operational_installation_lock.py +0 -0
  105. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/operational_installation_record.py +0 -0
  106. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/owner_credential_recovery.py +0 -0
  107. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/parity_context.py +0 -0
  108. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/parity_lifecycle_dispatcher.py +0 -0
  109. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/platform_admin.py +0 -0
  110. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/platform_api.py +0 -0
  111. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/platform_bootstrap.py +0 -0
  112. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/platform_components.py +0 -0
  113. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/pr_check_repair.py +0 -0
  114. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/pr_evidence_backfill.py +0 -0
  115. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/producer.py +0 -0
  116. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/product_installation_readback.py +0 -0
  117. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/project_agent.py +0 -0
  118. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/project_agent_service.py +0 -0
  119. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/project_topology.py +0 -0
  120. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/prompt_history.py +0 -0
  121. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/provider_context.py +0 -0
  122. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/provider_context_benchmark.py +0 -0
  123. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/provider_context_scope.py +0 -0
  124. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/provider_interruption.py +0 -0
  125. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/provider_process_identity.py +0 -0
  126. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/provider_readiness.py +0 -0
  127. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/provider_recovery.py +0 -0
  128. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/provider_usage.py +0 -0
  129. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/providers.py +0 -0
  130. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/qualification.py +0 -0
  131. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/qualification_runtime.py +0 -0
  132. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/recommendation_handoff.py +0 -0
  133. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/reconciliation_adoption.py +0 -0
  134. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/release_operation.py +0 -0
  135. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/report_analysis.py +0 -0
  136. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/repository_attachment.py +0 -0
  137. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/repository_handoff.py +0 -0
  138. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/resources.py +0 -0
  139. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/reviewer_evidence.py +0 -0
  140. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/revision_binding.py +0 -0
  141. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/schemas/producer-readback-v1.2.schema.json +0 -0
  142. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/schemas/producer-readback-v1.3.schema.json +0 -0
  143. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/schemas/producer-readback-v1.schema.json +0 -0
  144. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/schemas/repository-attachment.schema.json +0 -0
  145. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/server_console_services.py +0 -0
  146. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/server_relay.py +0 -0
  147. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/server_service.py +0 -0
  148. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/status_model.py +0 -0
  149. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/status_reconciliation.py +0 -0
  150. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/storage.py +0 -0
  151. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/submission_cli.py +0 -0
  152. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/submission_intake.py +0 -0
  153. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/submission_service.py +0 -0
  154. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/system_installation_topology.py +0 -0
  155. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/system_server_service.py +0 -0
  156. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/telemetry.py +0 -0
  157. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/telemetry_contract.py +0 -0
  158. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/telemetry_export.py +0 -0
  159. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/telemetry_metrics.py +0 -0
  160. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/terminal_evidence_reconciliation.py +0 -0
  161. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/validation_identity.py +0 -0
  162. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/validation_profile.py +0 -0
  163. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/version_preparation_delivery.py +0 -0
  164. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/workspace_preflight.py +0 -0
  165. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/worktree_provenance.py +0 -0
  166. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform/worktree_tooling.py +0 -0
  167. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform.egg-info/SOURCES.txt +0 -0
  168. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform.egg-info/dependency_links.txt +0 -0
  169. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform.egg-info/entry_points.txt +0 -0
  170. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/src/engineering_platform.egg-info/top_level.txt +0 -0
  171. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/tests/test_adaptive_action_sizing_design.py +0 -0
  172. {engineering_platform-2.3.91 → engineering_platform-2.3.92}/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.91
3
+ Version: 2.3.92
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.91"
7
+ version = "2.3.92"
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.91",
6
+ "version": "2.3.92",
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.91",
4
+ "dashboard_version": "2.3.92",
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.91",
9
+ "platform_version": "2.3.92",
10
10
  "report_format": 2,
11
- "runner_version": "2.3.91",
11
+ "runner_version": "2.3.92",
12
12
  "status_model": 1,
13
13
  "storage_schema": 45,
14
- "watcher_version": "2.3.91"
14
+ "watcher_version": "2.3.92"
15
15
  }
@@ -1144,9 +1144,9 @@ html[data-theme="light"] .dashboard-status-banner--provider-auth_required .provi
1144
1144
  the other operational banners rather than as a scrolling dashboard card. */
1145
1145
  .dashboard-sticky-header:has(#noProjectSelected:not([hidden])){padding-bottom:7px}.dashboard-status-banner--no-project{align-items:center;background:#163b59;border-bottom:1px solid #62bdf0;color:#e7f5ff;font:600 13px/1.45 system-ui}.dashboard-status-banner--no-project strong{color:#9bd7ff}.no-project-selected__dismiss{align-items:center;background:transparent!important;border:1px solid currentColor!important;border-radius:50%;color:inherit!important;cursor:pointer;display:inline-flex;flex:none;font:22px/1 system-ui;height:30px;justify-content:center;margin-left:auto;min-height:30px;min-width:30px;padding:0;width:30px}.no-project-selected__dismiss:hover,.no-project-selected__dismiss:focus-visible{background:#9bd7ff!important;border-color:#9bd7ff!important;color:#123a58!important}.no-project-selected__dismiss:focus-visible{box-shadow:0 0 0 4px #9bd7ff55!important;outline:2px solid #9bd7ff!important;outline-offset:2px!important}html[data-theme="light"] .dashboard-status-banner--no-project{background:#e2f3ff;color:#12466b}html[data-theme="light"] .dashboard-status-banner--no-project strong{color:#075985}html[data-theme="light"] .no-project-selected__dismiss:hover,html[data-theme="light"] .no-project-selected__dismiss:focus-visible{background:#075985!important;border-color:#075985!important;color:#fff!important}
1146
1146
 
1147
- /* Managed PR evidence remains a normal link, positioned under execution
1148
- context so both current and historical operational context stay scannable. */
1149
- .prompt-detail-card--pull-requests,.active-run-pull-requests{grid-column:2}.prompt-detail-pr-link{border-bottom:1px solid currentColor;color:var(--category-color);font-weight:400;text-decoration:none}.prompt-detail-pr-link:hover{background:transparent;color:var(--category-color);outline:0}.prompt-detail-pr-link:focus-visible{background:transparent;color:var(--category-color);outline:2px solid var(--category-color);outline-offset:2px}.prompt-detail-pr-metrics{color:var(--dashboard-modal-muted);display:flex;flex-wrap:wrap;font-size:12px;gap:5px 12px;margin-top:7px}.prompt-detail-pr-metric{white-space:nowrap}@media (max-width:620px){.prompt-detail-card--pull-requests,.active-run-pull-requests{grid-column:1;grid-row:auto}}
1147
+ /* Active PR evidence starts in the left column directly below the lifecycle.
1148
+ Historical Mission details keep PR evidence in their right context column. */
1149
+ .prompt-detail-card--pull-requests{grid-column:2}.active-run-pull-requests{grid-column:1}.prompt-detail-pr-link{border-bottom:1px solid currentColor;color:var(--category-color);font-weight:400;text-decoration:none}.prompt-detail-pr-link:hover{background:transparent;color:var(--category-color);outline:0}.prompt-detail-pr-link:focus-visible{background:transparent;color:var(--category-color);outline:2px solid var(--category-color);outline-offset:2px}.prompt-detail-pr-metrics{color:var(--dashboard-modal-muted);display:flex;flex-wrap:wrap;font-size:12px;gap:5px 12px;margin-top:7px}.prompt-detail-pr-metric{white-space:nowrap}@media (max-width:620px){.prompt-detail-card--pull-requests,.active-run-pull-requests{grid-column:1;grid-row:auto}}
1150
1150
 
1151
1151
  /* Authentication is a recoverable warning, not a destructive provider failure. */
1152
1152
  .dashboard-status-banner--provider-auth_required .provider-readiness-banner__action{background:transparent!important;border-color:#ffd768!important;color:#fff4d6!important}.dashboard-status-banner--provider-auth_required .provider-readiness-banner__action:hover:not(:disabled),.dashboard-status-banner--provider-auth_required .provider-readiness-banner__action:focus-visible{background:#f4c34f!important;border-color:#ffd768!important;color:#2a2415!important}.dashboard-status-banner--provider-auth_required .provider-readiness-banner__action:focus-visible{box-shadow:0 0 0 4px #f4c34f88;outline-color:#ffd768}
@@ -119,6 +119,7 @@ from .execution_timing import complete_active_phase as _complete_active_phase
119
119
  from .execution_timing import complete_phase as _complete_phase
120
120
  from .execution_timing import start_or_resume_phase as _start_or_resume_phase
121
121
  from .execution_timing import start_phase as _start_phase
122
+ from .execution_timing import update_active_phase_metadata as _update_active_phase_metadata
122
123
  from .managed_autonomy import (
123
124
  append_action as record_managed_action,
124
125
  append_pr_check_observation as record_managed_pr_check,
@@ -194,6 +195,20 @@ def complete_phase(root: Path, active: ActivePhase | None, **kwargs: object) ->
194
195
  )
195
196
 
196
197
 
198
+ def update_phase_metadata(
199
+ root: Path, active: ActivePhase | None, metadata: dict[str, object],
200
+ ) -> None:
201
+ """Publish optional bounded live phase data without affecting the run."""
202
+ if active is None:
203
+ return
204
+ try:
205
+ _update_active_phase_metadata(root, active, metadata)
206
+ except EngineeringStorageError as error:
207
+ _timing_unavailable(
208
+ root, active.run_id, error, central_database=active.central_database,
209
+ )
210
+
211
+
197
212
  def complete_active_phase(root: Path, run_id: str, phase_name: str, **kwargs: object) -> bool:
198
213
  try:
199
214
  return _complete_active_phase(root, run_id, phase_name, **kwargs)
@@ -700,6 +715,7 @@ class EngineeringRunner:
700
715
  selection: ReviewerSelection,
701
716
  event: str,
702
717
  result: ReviewerResult | None = None,
718
+ phase: ActivePhase | None = None,
703
719
  ) -> None:
704
720
  """Publish bounded reviewer lifecycle status without granting reviewer authority."""
705
721
  self._heartbeat()
@@ -725,6 +741,18 @@ class EngineeringRunner:
725
741
  else 0
726
742
  )
727
743
  break
744
+ update_phase_metadata(
745
+ self.root,
746
+ phase,
747
+ {"reviewer_agents": [
748
+ {
749
+ "reviewer": str(item.get("reviewer", ""))[:80],
750
+ "capability": str(item.get("capability", "engineering"))[:80],
751
+ "status": str(item.get("status", "selected"))[:16],
752
+ }
753
+ for item in self.reviewer_runtime[:12]
754
+ ]},
755
+ )
728
756
  write_live_status(self.root, state, "Capability review: " + selection.reviewer, self.reviewer_runtime)
729
757
 
730
758
  def _persist_agent_usage(self, run_id: str) -> None:
@@ -3366,6 +3394,18 @@ First implementation pull-request publication gate:
3366
3394
  }
3367
3395
  for item in selections
3368
3396
  ]
3397
+ update_phase_metadata(
3398
+ self.root,
3399
+ capability_review,
3400
+ {"reviewer_agents": [
3401
+ {
3402
+ "reviewer": str(item["reviewer"])[:80],
3403
+ "capability": str(item["capability"])[:80],
3404
+ "status": "selected",
3405
+ }
3406
+ for item in self.reviewer_runtime[:12]
3407
+ ]},
3408
+ )
3369
3409
  write_live_status(
3370
3410
  self.root,
3371
3411
  state
@@ -3399,7 +3439,7 @@ First implementation pull-request publication gate:
3399
3439
  objective,
3400
3440
  self.agent if hasattr(self.agent, "review") else None,
3401
3441
  progress=lambda selection, event, result: self._publish_reviewer_progress(
3402
- state, selection, event, result
3442
+ state, selection, event, result, capability_review
3403
3443
  ),
3404
3444
  evidence=reviewer_evidence,
3405
3445
  )
@@ -132,6 +132,29 @@ def complete_phase(root: Path, active: ActivePhase, *, outcome: str = "COMPLETE"
132
132
  connection.close()
133
133
 
134
134
 
135
+ def update_active_phase_metadata(
136
+ root: Path, active: ActivePhase, metadata: Mapping[str, object],
137
+ ) -> None:
138
+ """Replace bounded metadata for one exact active phase.
139
+
140
+ Live projections can change while the measured phase is active. The phase
141
+ identity and timing remain immutable; only its bounded presentation data is
142
+ replaced, and a terminal phase cannot be rewritten.
143
+ """
144
+ encoded = _metadata(metadata)
145
+ connection = _connection(root, active.central_database)
146
+ try:
147
+ changed = connection.execute(
148
+ """UPDATE execution_phase_spans SET metadata=?
149
+ WHERE phase_id=? AND run_id=? AND outcome='ACTIVE'""",
150
+ (encoded, active.phase_id, active.run_id),
151
+ ).rowcount
152
+ if changed != 1:
153
+ raise EngineeringStorageError("Execution phase is not active.")
154
+ finally:
155
+ connection.close()
156
+
157
+
135
158
  def start_or_resume_phase(root: Path, run_id: str, phase_name: str, **kwargs: object) -> ActivePhase:
136
159
  """Start one envelope or resume its observed active database boundary.
137
160
 
@@ -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.91"
15
+ CURRENT_PLATFORM_VERSION = "2.3.92"
16
16
  MANIFEST_FIELDS = frozenset(
17
17
  {
18
18
  "platform_version",
@@ -3788,6 +3788,12 @@ def _central_console_invocation_reviewers(data_root: Path, run_id: str) -> list[
3788
3788
  """
3789
3789
  try:
3790
3790
  with storage.sqlite_connection(data_root / SERVER_DATABASE_FILENAME) as connection:
3791
+ active_phase = connection.execute(
3792
+ """SELECT metadata FROM execution_phase_spans
3793
+ WHERE run_id=? AND phase_name='CAPABILITY_REVIEW' AND outcome='ACTIVE'
3794
+ ORDER BY ordinal DESC LIMIT 1""",
3795
+ (run_id,),
3796
+ ).fetchone()
3791
3797
  rows = connection.execute(
3792
3798
  """SELECT role,completed_at FROM provider_invocations
3793
3799
  WHERE run_id=? AND phase='CAPABILITY_REVIEW'
@@ -3797,6 +3803,33 @@ def _central_console_invocation_reviewers(data_root: Path, run_id: str) -> list[
3797
3803
  ).fetchall()
3798
3804
  except (sqlite3.DatabaseError, storage.EngineeringStorageError):
3799
3805
  return []
3806
+ if active_phase is not None:
3807
+ try:
3808
+ metadata = json.loads(str(active_phase[0]))
3809
+ except (TypeError, ValueError, json.JSONDecodeError):
3810
+ metadata = {}
3811
+ live = metadata.get("reviewer_agents") if isinstance(metadata, dict) else None
3812
+ if isinstance(live, list) and 0 < len(live) <= 12:
3813
+ projected: list[dict[str, object]] = []
3814
+ for item in live:
3815
+ if not isinstance(item, Mapping):
3816
+ projected = []
3817
+ break
3818
+ reviewer = str(item.get("reviewer") or "").strip()
3819
+ capability = str(item.get("capability") or "engineering").strip()
3820
+ status = str(item.get("status") or "").strip().lower()
3821
+ if (
3822
+ re.fullmatch(r"[a-z0-9][a-z0-9_-]{0,79}", reviewer) is None
3823
+ or re.fullmatch(r"[a-z0-9][a-z0-9_-]{0,79}", capability) is None
3824
+ or status not in {"selected", "running", "completed", "failed"}
3825
+ ):
3826
+ projected = []
3827
+ break
3828
+ projected.append({
3829
+ "reviewer": reviewer, "capability": capability, "status": status,
3830
+ })
3831
+ if len(projected) == len(live):
3832
+ return projected
3800
3833
  reviewers: list[dict[str, object]] = []
3801
3834
  for role, completed_at in rows:
3802
3835
  name = str(role).removeprefix("reviewer:").strip()
@@ -3,7 +3,7 @@
3
3
  "platform": {
4
4
  "id": "engineering-platform",
5
5
  "name": "Engineering Platform",
6
- "version": "2.3.91",
6
+ "version": "2.3.92",
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.91
3
+ Version: 2.3.92
4
4
  Summary: Local-first Engineering Platform execution operations runtime
5
5
  Author: Peter van Tol
6
6
  License: MIT