engineering-platform 2.3.103__tar.gz → 2.3.104__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 (176) hide show
  1. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/PKG-INFO +1 -1
  2. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/pyproject.toml +1 -1
  3. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/ENGINEERING_PLATFORM_CONFIG.json +1 -1
  4. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/ENGINEERING_PLATFORM_VERSION.json +4 -4
  5. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/platform_version.py +1 -1
  6. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/system_instance_lifecycle.py +19 -0
  7. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/templates/workspace-config.json +1 -1
  8. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform.egg-info/PKG-INFO +1 -1
  9. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/README.md +0 -0
  10. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/setup.cfg +0 -0
  11. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/__init__.py +0 -0
  12. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/__main__.py +0 -0
  13. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/agent_state.py +0 -0
  14. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/agent_trust.py +0 -0
  15. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/assets/dashboard.css +0 -0
  16. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/assets/dashboard.js +0 -0
  17. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/assets/dashboard_locales.mjs +0 -0
  18. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/assets/dashboard_status_store.mjs +0 -0
  19. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/assets/dashboard_translation.mjs +0 -0
  20. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/assets/operations-console/apple-touch-icon-dark.png +0 -0
  21. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/assets/operations-console/apple-touch-icon-light.png +0 -0
  22. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/assets/operations-console/icon-dark.png +0 -0
  23. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/assets/operations-console/icon-light.png +0 -0
  24. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/assets/operations-console/icon-transparent.png +0 -0
  25. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/assets/operations-console/manifest.webmanifest +0 -0
  26. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/assurance_scope.py +0 -0
  27. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/capability_preflight.py +0 -0
  28. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/capability_review.py +0 -0
  29. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/central_data_transfer.py +0 -0
  30. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/central_database.py +0 -0
  31. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/central_operational_reset.py +0 -0
  32. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/central_store_migration.py +0 -0
  33. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/codex_capacity.py +0 -0
  34. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/codex_chat.py +0 -0
  35. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/codex_observability.py +0 -0
  36. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/component_lock.py +0 -0
  37. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/component_logging.py +0 -0
  38. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/console_presentation.py +0 -0
  39. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/console_route_ownership.py +0 -0
  40. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/contracts/__init__.py +0 -0
  41. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/contracts/ep_consumer.py +0 -0
  42. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/contracts/models.py +0 -0
  43. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/contracts/projection.py +0 -0
  44. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/dashboard_browser_validation.py +0 -0
  45. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/dashboard_state.py +0 -0
  46. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/dashboard_supervisor.swift +0 -0
  47. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/dashboard_translation.py +0 -0
  48. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/dependabot_producer.py +0 -0
  49. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/development_profile.py +0 -0
  50. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/drift_diagnostics.py +0 -0
  51. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/emergency_recovery.py +0 -0
  52. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/engineering_memory.py +0 -0
  53. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/ep_consumer_credentials.py +0 -0
  54. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/evidence_projection.py +0 -0
  55. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/execution_activity.py +0 -0
  56. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/execution_context.py +0 -0
  57. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/execution_errors.py +0 -0
  58. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/execution_evidence.py +0 -0
  59. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/execution_executor.py +0 -0
  60. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/execution_finalization.py +0 -0
  61. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/execution_host.py +0 -0
  62. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/execution_host_evidence.py +0 -0
  63. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/execution_lease.py +0 -0
  64. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/execution_lifecycle.py +0 -0
  65. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/execution_models.py +0 -0
  66. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/execution_readiness.py +0 -0
  67. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/execution_reporting.py +0 -0
  68. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/execution_repository.py +0 -0
  69. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/execution_timeout_policy.py +0 -0
  70. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/execution_timing.py +0 -0
  71. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/execution_transaction.py +0 -0
  72. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/external_producer_binding.py +0 -0
  73. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/file_inbox.py +0 -0
  74. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/forensic_attribution.py +0 -0
  75. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/forensic_attribution_v2.py +0 -0
  76. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/forensic_delta.py +0 -0
  77. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/golden_scenario.py +0 -0
  78. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/historical_dashboard_configuration.py +0 -0
  79. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/host_admin.py +0 -0
  80. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/host_preflight.py +0 -0
  81. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/installation_relocation.py +0 -0
  82. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/installation_update_activation.py +0 -0
  83. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/installation_update_admission.py +0 -0
  84. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/installation_update_backup.py +0 -0
  85. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/installation_update_composition.py +0 -0
  86. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/installation_update_executor.py +0 -0
  87. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/installation_update_migration.py +0 -0
  88. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/installation_update_operation.py +0 -0
  89. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/installation_update_plan.py +0 -0
  90. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/installation_update_preparation.py +0 -0
  91. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/investigation_ledger.py +0 -0
  92. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/legacy_inbox_migration.py +0 -0
  93. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/legacy_installation_adoption.py +0 -0
  94. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/lifecycle_worker.py +0 -0
  95. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/live_status.py +0 -0
  96. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/local_api.py +0 -0
  97. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/local_api_keychain.py +0 -0
  98. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/local_repository_binding.py +0 -0
  99. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/managed_autonomy.py +0 -0
  100. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/managed_codex_runtime.py +0 -0
  101. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/managed_workspace_readiness.py +0 -0
  102. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/managed_workspace_recovery.py +0 -0
  103. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/merge_delegation.py +0 -0
  104. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/operational_installation.py +0 -0
  105. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/operational_installation_lock.py +0 -0
  106. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/operational_installation_record.py +0 -0
  107. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/owner_credential_recovery.py +0 -0
  108. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/parity_context.py +0 -0
  109. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/parity_lifecycle_dispatcher.py +0 -0
  110. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/platform_admin.py +0 -0
  111. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/platform_api.py +0 -0
  112. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/platform_bootstrap.py +0 -0
  113. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/platform_components.py +0 -0
  114. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/pr_check_repair.py +0 -0
  115. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/pr_evidence_backfill.py +0 -0
  116. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/producer.py +0 -0
  117. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/product_installation_readback.py +0 -0
  118. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/project_agent.py +0 -0
  119. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/project_agent_service.py +0 -0
  120. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/project_topology.py +0 -0
  121. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/prompt_history.py +0 -0
  122. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/provider_context.py +0 -0
  123. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/provider_context_benchmark.py +0 -0
  124. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/provider_context_scope.py +0 -0
  125. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/provider_interruption.py +0 -0
  126. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/provider_process_identity.py +0 -0
  127. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/provider_readiness.py +0 -0
  128. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/provider_recovery.py +0 -0
  129. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/provider_usage.py +0 -0
  130. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/providers.py +0 -0
  131. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/qualification.py +0 -0
  132. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/qualification_runtime.py +0 -0
  133. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/recommendation_handoff.py +0 -0
  134. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/reconciliation_adoption.py +0 -0
  135. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/release_operation.py +0 -0
  136. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/report_analysis.py +0 -0
  137. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/repository_attachment.py +0 -0
  138. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/repository_handoff.py +0 -0
  139. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/resources.py +0 -0
  140. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/reviewer_evidence.py +0 -0
  141. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/revision_binding.py +0 -0
  142. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/schemas/producer-readback-v1.2.schema.json +0 -0
  143. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/schemas/producer-readback-v1.3.schema.json +0 -0
  144. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/schemas/producer-readback-v1.schema.json +0 -0
  145. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/schemas/repository-attachment.schema.json +0 -0
  146. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/server.py +0 -0
  147. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/server_console_services.py +0 -0
  148. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/server_relay.py +0 -0
  149. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/server_service.py +0 -0
  150. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/status_model.py +0 -0
  151. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/status_reconciliation.py +0 -0
  152. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/storage.py +0 -0
  153. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/submission_cli.py +0 -0
  154. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/submission_intake.py +0 -0
  155. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/submission_service.py +0 -0
  156. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/system_installation_topology.py +0 -0
  157. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/system_instance_provisioner.py +0 -0
  158. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/system_provider_context.py +0 -0
  159. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/system_server_service.py +0 -0
  160. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/telemetry.py +0 -0
  161. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/telemetry_contract.py +0 -0
  162. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/telemetry_export.py +0 -0
  163. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/telemetry_metrics.py +0 -0
  164. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/terminal_evidence_reconciliation.py +0 -0
  165. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/validation_identity.py +0 -0
  166. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/validation_profile.py +0 -0
  167. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/version_preparation_delivery.py +0 -0
  168. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/workspace_preflight.py +0 -0
  169. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/worktree_provenance.py +0 -0
  170. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform/worktree_tooling.py +0 -0
  171. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform.egg-info/SOURCES.txt +0 -0
  172. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform.egg-info/dependency_links.txt +0 -0
  173. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform.egg-info/entry_points.txt +0 -0
  174. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/src/engineering_platform.egg-info/top_level.txt +0 -0
  175. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/tests/test_adaptive_action_sizing_design.py +0 -0
  176. {engineering_platform-2.3.103 → engineering_platform-2.3.104}/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.103
3
+ Version: 2.3.104
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.103"
7
+ version = "2.3.104"
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.103",
6
+ "version": "2.3.104",
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.103",
4
+ "dashboard_version": "2.3.104",
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.103",
9
+ "platform_version": "2.3.104",
10
10
  "report_format": 2,
11
- "runner_version": "2.3.103",
11
+ "runner_version": "2.3.104",
12
12
  "status_model": 1,
13
13
  "storage_schema": 45,
14
- "watcher_version": "2.3.103"
14
+ "watcher_version": "2.3.104"
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.103"
15
+ CURRENT_PLATFORM_VERSION = "2.3.104"
16
16
  MANIFEST_FIELDS = frozenset(
17
17
  {
18
18
  "platform_version",
@@ -97,10 +97,22 @@ def _atomic_json(path: Path, value: Mapping[str, object]) -> None:
97
97
  temporary.unlink(missing_ok=True)
98
98
 
99
99
 
100
+ def _assert_owned_mode(path: Path, details: os.stat_result) -> None:
101
+ if stat.S_IMODE(details.st_mode) & 0o022:
102
+ raise SystemInstanceLifecycleError(
103
+ f"EP preserved instance contains group/world-writable entry: {path}"
104
+ )
105
+
106
+
100
107
  def _regular_digest(path: Path) -> str:
101
108
  details = path.lstat()
102
109
  if path.is_symlink() or not stat.S_ISREG(details.st_mode):
103
110
  raise SystemInstanceLifecycleError(f"EP preserved instance contains unsafe entry: {path}")
111
+ _assert_owned_mode(path, details)
112
+ if details.st_nlink != 1:
113
+ raise SystemInstanceLifecycleError(
114
+ f"EP preserved instance contains non-exclusive hardlink: {path}"
115
+ )
104
116
  digest = hashlib.sha256()
105
117
  with path.open("rb") as stream:
106
118
  while True:
@@ -118,6 +130,7 @@ def _tree_digest(root: Path, *, ignored_roots: tuple[Path, ...] = ()) -> str:
118
130
  raise SystemInstanceLifecycleError("EP preserved instance root is unavailable") from error
119
131
  if root.is_symlink() or not stat.S_ISDIR(details.st_mode):
120
132
  raise SystemInstanceLifecycleError("EP preserved instance root is unsafe")
133
+ _assert_owned_mode(root, details)
121
134
  ignored: tuple[tuple[str, ...], ...] = tuple(
122
135
  path.relative_to(root).parts for path in ignored_roots
123
136
  )
@@ -137,6 +150,7 @@ def _tree_digest(root: Path, *, ignored_roots: tuple[Path, ...] = ()) -> str:
137
150
  info = path.lstat()
138
151
  if stat.S_ISLNK(info.st_mode) or not stat.S_ISDIR(info.st_mode):
139
152
  raise SystemInstanceLifecycleError(f"EP preserved instance contains unsafe entry: {path}")
153
+ _assert_owned_mode(path, info)
140
154
  entries.append({
141
155
  "path": str(path.relative_to(root)),
142
156
  "kind": "DIRECTORY",
@@ -327,6 +341,7 @@ class SystemInstanceLifecycle:
327
341
  raise SystemInstanceLifecycleError("EP preserved instance changed after terminal preserve")
328
342
  return receipt
329
343
  with _Lock(instance.lifecycle_lock):
344
+ _tree_digest(instance.root)
330
345
  self.controller.remove(instance)
331
346
  if self.controller.loaded(instance) or self.service_interpreter(instance) is not None:
332
347
  raise SystemInstanceLifecycleError("EP preserved service was not fully removed")
@@ -441,6 +456,10 @@ class SystemInstanceLifecycle:
441
456
  if state.get("phase") == "COMPLETE":
442
457
  return state
443
458
  with _Lock(instance.lifecycle_lock):
459
+ _tree_digest(
460
+ instance.root,
461
+ ignored_roots=(instance.operations_root / operation_id,),
462
+ )
444
463
  self.controller.remove(instance)
445
464
  if self.controller.loaded(instance) or self.service_interpreter(instance) is not None:
446
465
  raise SystemInstanceLifecycleError("EP purge service was not fully removed")
@@ -3,7 +3,7 @@
3
3
  "platform": {
4
4
  "id": "engineering-platform",
5
5
  "name": "Engineering Platform",
6
- "version": "2.3.103",
6
+ "version": "2.3.104",
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.103
3
+ Version: 2.3.104
4
4
  Summary: Local-first Engineering Platform execution operations runtime
5
5
  Author: Peter van Tol
6
6
  License: MIT