engineering-platform 2.3.76__tar.gz → 2.3.77__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.76 → engineering_platform-2.3.77}/PKG-INFO +1 -1
  2. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/pyproject.toml +1 -1
  3. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/ENGINEERING_PLATFORM_CONFIG.json +1 -1
  4. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/ENGINEERING_PLATFORM_VERSION.json +4 -4
  5. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/assets/dashboard.js +29 -0
  6. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/platform_version.py +1 -1
  7. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/server.py +44 -0
  8. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/templates/workspace-config.json +1 -1
  9. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform.egg-info/PKG-INFO +1 -1
  10. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/README.md +0 -0
  11. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/setup.cfg +0 -0
  12. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/__init__.py +0 -0
  13. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/__main__.py +0 -0
  14. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/agent_state.py +0 -0
  15. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/agent_trust.py +0 -0
  16. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/assets/dashboard.css +0 -0
  17. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/assets/dashboard_locales.mjs +0 -0
  18. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/assets/dashboard_status_store.mjs +0 -0
  19. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/assets/dashboard_translation.mjs +0 -0
  20. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/assets/operations-console/apple-touch-icon-dark.png +0 -0
  21. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/assets/operations-console/apple-touch-icon-light.png +0 -0
  22. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/assets/operations-console/icon-dark.png +0 -0
  23. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/assets/operations-console/icon-light.png +0 -0
  24. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/assets/operations-console/icon-transparent.png +0 -0
  25. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/assets/operations-console/manifest.webmanifest +0 -0
  26. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/capability_preflight.py +0 -0
  27. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/capability_review.py +0 -0
  28. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/central_data_transfer.py +0 -0
  29. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/central_database.py +0 -0
  30. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/central_store_migration.py +0 -0
  31. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/codex_capacity.py +0 -0
  32. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/codex_chat.py +0 -0
  33. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/codex_observability.py +0 -0
  34. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/component_lock.py +0 -0
  35. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/component_logging.py +0 -0
  36. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/console_presentation.py +0 -0
  37. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/console_route_ownership.py +0 -0
  38. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/contracts/__init__.py +0 -0
  39. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/contracts/ep_consumer.py +0 -0
  40. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/contracts/models.py +0 -0
  41. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/contracts/projection.py +0 -0
  42. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/dashboard_browser_validation.py +0 -0
  43. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/dashboard_state.py +0 -0
  44. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/dashboard_supervisor.swift +0 -0
  45. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/dashboard_translation.py +0 -0
  46. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/dependabot_producer.py +0 -0
  47. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/development_profile.py +0 -0
  48. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/drift_diagnostics.py +0 -0
  49. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/emergency_recovery.py +0 -0
  50. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/engineering_memory.py +0 -0
  51. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/ep_consumer_credentials.py +0 -0
  52. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/evidence_projection.py +0 -0
  53. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/execution_activity.py +0 -0
  54. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/execution_context.py +0 -0
  55. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/execution_errors.py +0 -0
  56. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/execution_evidence.py +0 -0
  57. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/execution_executor.py +0 -0
  58. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/execution_finalization.py +0 -0
  59. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/execution_host.py +0 -0
  60. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/execution_host_evidence.py +0 -0
  61. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/execution_lease.py +0 -0
  62. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/execution_lifecycle.py +0 -0
  63. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/execution_models.py +0 -0
  64. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/execution_readiness.py +0 -0
  65. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/execution_reporting.py +0 -0
  66. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/execution_repository.py +0 -0
  67. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/execution_timeout_policy.py +0 -0
  68. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/execution_timing.py +0 -0
  69. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/execution_transaction.py +0 -0
  70. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/external_producer_binding.py +0 -0
  71. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/file_inbox.py +0 -0
  72. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/forensic_attribution.py +0 -0
  73. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/forensic_attribution_v2.py +0 -0
  74. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/forensic_delta.py +0 -0
  75. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/golden_scenario.py +0 -0
  76. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/historical_dashboard_configuration.py +0 -0
  77. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/host_admin.py +0 -0
  78. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/host_preflight.py +0 -0
  79. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/installation_relocation.py +0 -0
  80. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/installation_update_activation.py +0 -0
  81. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/installation_update_admission.py +0 -0
  82. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/installation_update_backup.py +0 -0
  83. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/installation_update_composition.py +0 -0
  84. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/installation_update_executor.py +0 -0
  85. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/installation_update_migration.py +0 -0
  86. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/installation_update_operation.py +0 -0
  87. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/installation_update_plan.py +0 -0
  88. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/installation_update_preparation.py +0 -0
  89. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/investigation_ledger.py +0 -0
  90. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/legacy_inbox_migration.py +0 -0
  91. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/legacy_installation_adoption.py +0 -0
  92. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/lifecycle_worker.py +0 -0
  93. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/live_status.py +0 -0
  94. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/local_api.py +0 -0
  95. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/local_api_keychain.py +0 -0
  96. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/local_repository_binding.py +0 -0
  97. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/managed_autonomy.py +0 -0
  98. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/managed_codex_runtime.py +0 -0
  99. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/operational_installation.py +0 -0
  100. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/operational_installation_lock.py +0 -0
  101. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/operational_installation_record.py +0 -0
  102. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/owner_credential_recovery.py +0 -0
  103. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/parity_context.py +0 -0
  104. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/parity_lifecycle_dispatcher.py +0 -0
  105. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/platform_admin.py +0 -0
  106. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/platform_api.py +0 -0
  107. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/platform_bootstrap.py +0 -0
  108. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/platform_components.py +0 -0
  109. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/pr_check_repair.py +0 -0
  110. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/pr_evidence_backfill.py +0 -0
  111. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/producer.py +0 -0
  112. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/product_installation_readback.py +0 -0
  113. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/project_agent.py +0 -0
  114. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/project_agent_service.py +0 -0
  115. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/project_topology.py +0 -0
  116. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/prompt_history.py +0 -0
  117. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/provider_context.py +0 -0
  118. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/provider_context_benchmark.py +0 -0
  119. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/provider_context_scope.py +0 -0
  120. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/provider_interruption.py +0 -0
  121. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/provider_process_identity.py +0 -0
  122. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/provider_readiness.py +0 -0
  123. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/provider_recovery.py +0 -0
  124. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/provider_usage.py +0 -0
  125. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/providers.py +0 -0
  126. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/qualification.py +0 -0
  127. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/qualification_runtime.py +0 -0
  128. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/recommendation_handoff.py +0 -0
  129. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/reconciliation_adoption.py +0 -0
  130. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/release_operation.py +0 -0
  131. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/report_analysis.py +0 -0
  132. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/repository_attachment.py +0 -0
  133. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/repository_handoff.py +0 -0
  134. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/resources.py +0 -0
  135. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/reviewer_evidence.py +0 -0
  136. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/revision_binding.py +0 -0
  137. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/schemas/producer-readback-v1.2.schema.json +0 -0
  138. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/schemas/producer-readback-v1.schema.json +0 -0
  139. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/schemas/repository-attachment.schema.json +0 -0
  140. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/server_console_services.py +0 -0
  141. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/server_relay.py +0 -0
  142. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/server_service.py +0 -0
  143. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/status_model.py +0 -0
  144. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/status_reconciliation.py +0 -0
  145. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/storage.py +0 -0
  146. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/submission_cli.py +0 -0
  147. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/submission_intake.py +0 -0
  148. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/submission_service.py +0 -0
  149. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/system_installation_topology.py +0 -0
  150. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/system_server_service.py +0 -0
  151. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/telemetry.py +0 -0
  152. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/terminal_evidence_reconciliation.py +0 -0
  153. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/validation_identity.py +0 -0
  154. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/validation_profile.py +0 -0
  155. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/version_preparation_delivery.py +0 -0
  156. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/workspace_preflight.py +0 -0
  157. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/worktree_provenance.py +0 -0
  158. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform/worktree_tooling.py +0 -0
  159. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform.egg-info/SOURCES.txt +0 -0
  160. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform.egg-info/dependency_links.txt +0 -0
  161. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform.egg-info/entry_points.txt +0 -0
  162. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/src/engineering_platform.egg-info/top_level.txt +0 -0
  163. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/tests/test_adaptive_action_sizing_design.py +0 -0
  164. {engineering_platform-2.3.76 → engineering_platform-2.3.77}/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.76
3
+ Version: 2.3.77
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.76"
7
+ version = "2.3.77"
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.76",
6
+ "version": "2.3.77",
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.76",
4
+ "dashboard_version": "2.3.77",
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.76",
9
+ "platform_version": "2.3.77",
10
10
  "report_format": 2,
11
- "runner_version": "2.3.76",
11
+ "runner_version": "2.3.77",
12
12
  "status_model": 1,
13
13
  "storage_schema": 45,
14
- "watcher_version": "2.3.76"
14
+ "watcher_version": "2.3.77"
15
15
  }
@@ -8209,6 +8209,29 @@ function promptDetailReviewersSection(reviewers, { wide = true } = {}) {
8209
8209
  );
8210
8210
  return promptDetailCard(t("detail.specialist_reviews"), fields, wide, "prompt-detail-card--reviewers");
8211
8211
  }
8212
+ function promptDetailAssuranceReviewsSection(reviews) {
8213
+ if (!reviews.length) return null;
8214
+ const fields = reviews.map((review) => {
8215
+ const findings = Array.isArray(review.findings) ? review.findings : [];
8216
+ const candidate = String(review.candidate_sha || "").trim();
8217
+ const lines = [
8218
+ assuranceStatusLabel(review.status || "UNRESOLVED"),
8219
+ candidate ? t("detail.candidate_sha") + ": " + candidate : null,
8220
+ ...(findings.length
8221
+ ? findings.map((finding) => String(finding?.observation || "").trim()).filter(Boolean)
8222
+ : [t("lifecycle.assurance_no_findings")]),
8223
+ ].filter(Boolean);
8224
+ return detailField(
8225
+ reviewerLabel(review.reviewer, t("detail.specialist_review")),
8226
+ lines.join("\n"),
8227
+ true,
8228
+ );
8229
+ });
8230
+ return promptDetailCard(
8231
+ t("lifecycle.detail_assurance"), fields, true,
8232
+ "prompt-detail-card--assurance-reviews",
8233
+ );
8234
+ }
8212
8235
  function promptDetailProviderReviewSections(usage, reviewers, commitTimeline) {
8213
8236
  const usageCard = promptDetailUsageSection(usage);
8214
8237
  const reviewerCard = promptDetailReviewersSection(reviewers, { wide: false });
@@ -8242,6 +8265,11 @@ function renderPromptHistoryDetail(payload) {
8242
8265
  commitTimeline = payload?.commit_timeline || [],
8243
8266
  evidence = Array.isArray(payload?.evidence) ? payload.evidence : [],
8244
8267
  reviewers = Array.isArray(payload?.reviewers) ? payload.reviewers : [],
8268
+ assuranceReviews = Array.isArray(payload?.assurance_reviews)
8269
+ ? payload.assurance_reviews
8270
+ : (Array.isArray(payload?.lifecycle?.steps)
8271
+ ? payload.lifecycle.steps.find((step) => step?.id === "QUALITY_CONTROL_AGENT")?.assurance_reviews || []
8272
+ : []),
8245
8273
  activity = history.execution_activity_summary,
8246
8274
  recommendationHandoff = payload?.recommendation_handoff;
8247
8275
  const [executionSummary, executionContext] = promptDetailExecutionSections(history);
@@ -8266,6 +8294,7 @@ function renderPromptHistoryDetail(payload) {
8266
8294
  lifecycleFlow(payload?.lifecycle, { historical: true }),
8267
8295
  statusReconciliationCard(payload?.lifecycle?.recovery),
8268
8296
  promptDetailProviderReviewSections(usage, reviewers, commitTimeline),
8297
+ promptDetailAssuranceReviewsSection(assuranceReviews),
8269
8298
  promptDetailRecommendationHandoff(recommendationHandoff),
8270
8299
  ].filter(Boolean),
8271
8300
  );
@@ -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.76"
15
+ CURRENT_PLATFORM_VERSION = "2.3.77"
16
16
  MANIFEST_FIELDS = frozenset(
17
17
  {
18
18
  "platform_version",
@@ -3670,6 +3670,48 @@ def _central_console_reviewer_agents(
3670
3670
  return from_report or _central_console_invocation_reviewers(data_root, run_id)
3671
3671
 
3672
3672
 
3673
+ def _central_console_assurance_reviews(
3674
+ lifecycle: Mapping[str, object],
3675
+ ) -> list[dict[str, object]]:
3676
+ """Project the candidate-bound Quality/Security evidence separately.
3677
+
3678
+ Capability reviewers explain why a specialist was selected. Mandatory
3679
+ post-implementation assurance instead proves Quality and Security against
3680
+ one exact candidate. Keeping these contracts separate prevents terminal
3681
+ detail from hiding assurance or presenting a PASS as a recommendation.
3682
+ """
3683
+ steps = lifecycle.get("steps")
3684
+ if not isinstance(steps, list):
3685
+ return []
3686
+ quality_step = next((
3687
+ step for step in steps
3688
+ if isinstance(step, Mapping) and step.get("id") == "QUALITY_CONTROL_AGENT"
3689
+ ), None)
3690
+ reviews = quality_step.get("assurance_reviews") if isinstance(quality_step, Mapping) else None
3691
+ if not isinstance(reviews, list) or len(reviews) > 16:
3692
+ return []
3693
+ projected: list[dict[str, object]] = []
3694
+ for review in reviews:
3695
+ if not isinstance(review, Mapping):
3696
+ continue
3697
+ reviewer = review.get("reviewer")
3698
+ status = review.get("status")
3699
+ candidate_sha = review.get("candidate_sha")
3700
+ findings = review.get("findings")
3701
+ if (
3702
+ reviewer not in {"quality", "security"}
3703
+ or status not in {"PASS", "FAIL", "UNRESOLVED"}
3704
+ or not isinstance(candidate_sha, str)
3705
+ or re.fullmatch(r"[0-9a-f]{40}", candidate_sha) is None
3706
+ or not isinstance(findings, list)
3707
+ or len(findings) > 12
3708
+ or any(not isinstance(finding, Mapping) for finding in findings)
3709
+ ):
3710
+ continue
3711
+ projected.append(dict(review))
3712
+ return projected
3713
+
3714
+
3673
3715
  def _central_console_project_snapshot(data_root: Path, project_id: str) -> dict[str, object]:
3674
3716
  """Return the project status and terminal-history projections from CENTRAL.
3675
3717
 
@@ -3813,6 +3855,7 @@ def _central_console_run_detail(data_root: Path, project_id: str, run_id: str) -
3813
3855
  "runtime": runtime,
3814
3856
  "usage": _central_console_provider_usage(data_root, run_id),
3815
3857
  "reviewers": _central_console_reviewer_agents(data_root, project_id, run_id),
3858
+ "assurance_reviews": _central_console_assurance_reviews(lifecycle),
3816
3859
  "evidence": _central_console_validation_evidence(data_root, project_id, run_id),
3817
3860
  # The historical detail dialog uses the same read-only bubble flow as
3818
3861
  # the active card. Terminal history remains separate in the table,
@@ -5736,6 +5779,7 @@ class _HealthHandler(http.server.BaseHTTPRequestHandler):
5736
5779
  "execution": detail.get("execution", {}),
5737
5780
  "runtime": detail.get("runtime", {}),
5738
5781
  "reviewers": detail.get("reviewers", []),
5782
+ "assurance_reviews": detail.get("assurance_reviews", []),
5739
5783
  "commits": {},
5740
5784
  "commit_timeline": detail.get("commit_timeline", []),
5741
5785
  "pull_requests": [],
@@ -3,7 +3,7 @@
3
3
  "platform": {
4
4
  "id": "engineering-platform",
5
5
  "name": "Engineering Platform",
6
- "version": "2.3.76",
6
+ "version": "2.3.77",
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.76
3
+ Version: 2.3.77
4
4
  Summary: Local-first Engineering Platform execution operations runtime
5
5
  Author: Peter van Tol
6
6
  License: MIT