engineering-platform 2.3.104__tar.gz → 2.3.106__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.
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/PKG-INFO +1 -1
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/pyproject.toml +1 -1
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/ENGINEERING_PLATFORM_CONFIG.json +1 -1
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/ENGINEERING_PLATFORM_VERSION.json +4 -4
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/platform_version.py +1 -1
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/system_instance_lifecycle.py +56 -18
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/system_instance_provisioner.py +3 -2
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/templates/workspace-config.json +1 -1
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform.egg-info/PKG-INFO +1 -1
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/README.md +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/setup.cfg +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/__init__.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/__main__.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/agent_state.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/agent_trust.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/assets/dashboard.css +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/assets/dashboard.js +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/assets/dashboard_locales.mjs +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/assets/dashboard_status_store.mjs +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/assets/dashboard_translation.mjs +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/assets/operations-console/apple-touch-icon-dark.png +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/assets/operations-console/apple-touch-icon-light.png +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/assets/operations-console/icon-dark.png +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/assets/operations-console/icon-light.png +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/assets/operations-console/icon-transparent.png +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/assets/operations-console/manifest.webmanifest +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/assurance_scope.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/capability_preflight.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/capability_review.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/central_data_transfer.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/central_database.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/central_operational_reset.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/central_store_migration.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/codex_capacity.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/codex_chat.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/codex_observability.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/component_lock.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/component_logging.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/console_presentation.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/console_route_ownership.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/contracts/__init__.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/contracts/ep_consumer.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/contracts/models.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/contracts/projection.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/dashboard_browser_validation.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/dashboard_state.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/dashboard_supervisor.swift +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/dashboard_translation.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/dependabot_producer.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/development_profile.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/drift_diagnostics.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/emergency_recovery.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/engineering_memory.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/ep_consumer_credentials.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/evidence_projection.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/execution_activity.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/execution_context.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/execution_errors.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/execution_evidence.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/execution_executor.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/execution_finalization.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/execution_host.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/execution_host_evidence.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/execution_lease.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/execution_lifecycle.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/execution_models.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/execution_readiness.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/execution_reporting.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/execution_repository.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/execution_timeout_policy.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/execution_timing.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/execution_transaction.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/external_producer_binding.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/file_inbox.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/forensic_attribution.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/forensic_attribution_v2.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/forensic_delta.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/golden_scenario.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/historical_dashboard_configuration.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/host_admin.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/host_preflight.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/installation_relocation.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/installation_update_activation.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/installation_update_admission.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/installation_update_backup.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/installation_update_composition.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/installation_update_executor.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/installation_update_migration.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/installation_update_operation.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/installation_update_plan.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/installation_update_preparation.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/investigation_ledger.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/legacy_inbox_migration.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/legacy_installation_adoption.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/lifecycle_worker.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/live_status.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/local_api.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/local_api_keychain.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/local_repository_binding.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/managed_autonomy.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/managed_codex_runtime.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/managed_workspace_readiness.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/managed_workspace_recovery.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/merge_delegation.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/operational_installation.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/operational_installation_lock.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/operational_installation_record.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/owner_credential_recovery.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/parity_context.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/parity_lifecycle_dispatcher.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/platform_admin.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/platform_api.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/platform_bootstrap.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/platform_components.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/pr_check_repair.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/pr_evidence_backfill.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/producer.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/product_installation_readback.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/project_agent.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/project_agent_service.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/project_topology.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/prompt_history.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/provider_context.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/provider_context_benchmark.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/provider_context_scope.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/provider_interruption.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/provider_process_identity.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/provider_readiness.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/provider_recovery.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/provider_usage.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/providers.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/qualification.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/qualification_runtime.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/recommendation_handoff.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/reconciliation_adoption.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/release_operation.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/report_analysis.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/repository_attachment.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/repository_handoff.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/resources.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/reviewer_evidence.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/revision_binding.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/schemas/producer-readback-v1.2.schema.json +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/schemas/producer-readback-v1.3.schema.json +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/schemas/producer-readback-v1.schema.json +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/schemas/repository-attachment.schema.json +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/server.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/server_console_services.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/server_relay.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/server_service.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/status_model.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/status_reconciliation.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/storage.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/submission_cli.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/submission_intake.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/submission_service.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/system_installation_topology.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/system_provider_context.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/system_server_service.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/telemetry.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/telemetry_contract.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/telemetry_export.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/telemetry_metrics.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/terminal_evidence_reconciliation.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/validation_identity.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/validation_profile.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/version_preparation_delivery.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/workspace_preflight.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/worktree_provenance.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/worktree_tooling.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform.egg-info/SOURCES.txt +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform.egg-info/dependency_links.txt +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform.egg-info/entry_points.txt +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform.egg-info/top_level.txt +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/tests/test_adaptive_action_sizing_design.py +0 -0
- {engineering_platform-2.3.104 → engineering_platform-2.3.106}/tests/test_role_task_model_policy_design.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "engineering-platform"
|
|
7
|
-
version = "2.3.
|
|
7
|
+
version = "2.3.106"
|
|
8
8
|
description = "Local-first Engineering Platform execution operations runtime"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.14,<3.15"
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"bootstrap_contract": "2026.12",
|
|
3
3
|
"checkpoint_format": 1,
|
|
4
|
-
"dashboard_version": "2.3.
|
|
4
|
+
"dashboard_version": "2.3.106",
|
|
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.
|
|
9
|
+
"platform_version": "2.3.106",
|
|
10
10
|
"report_format": 2,
|
|
11
|
-
"runner_version": "2.3.
|
|
11
|
+
"runner_version": "2.3.106",
|
|
12
12
|
"status_model": 1,
|
|
13
13
|
"storage_schema": 45,
|
|
14
|
-
"watcher_version": "2.3.
|
|
14
|
+
"watcher_version": "2.3.106"
|
|
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.
|
|
15
|
+
CURRENT_PLATFORM_VERSION = "2.3.106"
|
|
16
16
|
MANIFEST_FIELDS = frozenset(
|
|
17
17
|
{
|
|
18
18
|
"platform_version",
|
|
@@ -477,40 +477,78 @@ class SystemInstanceLifecycle:
|
|
|
477
477
|
"PURGE_READY",
|
|
478
478
|
mutable_instance_data_digest=tree_digest,
|
|
479
479
|
descriptor_digest=request["descriptor_digest"],
|
|
480
|
+
# REMOVE publishes its receipt before deleting this tree. A
|
|
481
|
+
# process kill can erase instance.json before rmtree finishes.
|
|
482
|
+
# Retain only the topology and root identity needed to resume
|
|
483
|
+
# that exact deletion without adopting a replacement root.
|
|
484
|
+
display_label=instance.display_label,
|
|
485
|
+
service_account=instance.service_account,
|
|
486
|
+
root_device=instance.root.stat(follow_symlinks=False).st_dev,
|
|
487
|
+
root_inode=instance.root.stat(follow_symlinks=False).st_ino,
|
|
480
488
|
)
|
|
481
489
|
|
|
482
490
|
def resume_purge_target(
|
|
483
491
|
self,
|
|
484
|
-
|
|
485
|
-
descriptor: Mapping[str, object],
|
|
492
|
+
instance_id: str,
|
|
486
493
|
operation_id: str,
|
|
494
|
+
remove_receipt: Mapping[str, object],
|
|
487
495
|
) -> None:
|
|
488
|
-
root = self._operation_root(
|
|
496
|
+
root = self._operation_root(instance_id, operation_id)
|
|
489
497
|
state = _read_json(root / "state.json")
|
|
490
498
|
if (
|
|
491
499
|
state.get("contract") != CONTRACT
|
|
492
500
|
or state.get("operation") != "PURGE"
|
|
493
501
|
or state.get("phase") != "PURGE_READY"
|
|
494
|
-
or state.get("instance_id") !=
|
|
495
|
-
or state.get("
|
|
502
|
+
or state.get("instance_id") != instance_id
|
|
503
|
+
or state.get("request") != {
|
|
504
|
+
"instance_id": instance_id,
|
|
505
|
+
"descriptor_digest": state.get("descriptor_digest"),
|
|
506
|
+
}
|
|
507
|
+
or state.get("request_digest") != _json_digest(state["request"])
|
|
508
|
+
or remove_receipt.get("operation") != "REMOVE"
|
|
509
|
+
or remove_receipt.get("operation_id") != operation_id
|
|
510
|
+
or remove_receipt.get("instance_id") != instance_id
|
|
511
|
+
or not isinstance(remove_receipt.get("evidence"), Mapping)
|
|
512
|
+
or remove_receipt["evidence"].get("removed_descriptor_digest") != state.get("descriptor_digest")
|
|
496
513
|
):
|
|
497
514
|
raise SystemInstanceLifecycleError("EP purge recovery evidence is invalid")
|
|
498
|
-
|
|
515
|
+
try:
|
|
516
|
+
instance = system_installation_topology.system_instance_topology(
|
|
517
|
+
self.product,
|
|
518
|
+
instance_id=instance_id,
|
|
519
|
+
display_label=state["display_label"],
|
|
520
|
+
service_account=state["service_account"],
|
|
521
|
+
)
|
|
522
|
+
except (KeyError, TypeError, ValueError) as error:
|
|
523
|
+
raise SystemInstanceLifecycleError("EP purge recovery topology is invalid") from error
|
|
524
|
+
expected = self.product.system_root / "instances" / instance.instance_id
|
|
525
|
+
if (
|
|
526
|
+
instance.root != expected
|
|
527
|
+
or instance.root.is_symlink()
|
|
528
|
+
or not instance.root.is_relative_to(self.product.system_root / "instances")
|
|
529
|
+
):
|
|
530
|
+
raise SystemInstanceLifecycleError("EP purge recovery target is invalid")
|
|
531
|
+
|
|
532
|
+
def verify_original_root() -> None:
|
|
533
|
+
details = instance.root.stat(follow_symlinks=False)
|
|
534
|
+
if (details.st_dev, details.st_ino) != (state.get("root_device"), state.get("root_inode")):
|
|
535
|
+
raise SystemInstanceLifecycleError("EP purge recovery target was replaced")
|
|
536
|
+
|
|
537
|
+
# Check before opening the instance-owned lock, which may recreate a
|
|
538
|
+
# lock directory already erased by the interrupted deletion.
|
|
539
|
+
verify_original_root()
|
|
540
|
+
with _Lock(root / "purge-recovery.lock"), _Lock(instance.lifecycle_lock):
|
|
541
|
+
verify_original_root()
|
|
499
542
|
self.controller.remove(instance)
|
|
500
543
|
if self.controller.loaded(instance) or self.service_interpreter(instance) is not None:
|
|
501
544
|
raise SystemInstanceLifecycleError("EP purge recovery service was not fully removed")
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
instance.root != expected
|
|
510
|
-
or instance.root.is_symlink()
|
|
511
|
-
or not instance.root.is_relative_to(self.product.system_root / "instances")
|
|
512
|
-
):
|
|
513
|
-
raise SystemInstanceLifecycleError("EP purge recovery target is invalid")
|
|
545
|
+
# The exact root survives until rmtree's final step. Its contents
|
|
546
|
+
# may be a strict subset after SIGKILL, so the original whole-tree
|
|
547
|
+
# digest cannot be required here. Reject unsafe remaining entries.
|
|
548
|
+
_tree_digest(instance.root, ignored_roots=(instance.operations_root / operation_id,))
|
|
549
|
+
if instance.descriptor.exists():
|
|
550
|
+
if _json_digest(_read_json(instance.descriptor)) != state.get("descriptor_digest"):
|
|
551
|
+
raise SystemInstanceLifecycleError("EP purge recovery descriptor changed")
|
|
514
552
|
shutil.rmtree(instance.root)
|
|
515
553
|
|
|
516
554
|
def record_purge(
|
|
@@ -665,8 +665,7 @@ class SystemInstanceProvisioner:
|
|
|
665
665
|
else:
|
|
666
666
|
remove_receipt = prior_remove
|
|
667
667
|
if instance_root.exists() or instance_root.is_symlink():
|
|
668
|
-
|
|
669
|
-
lifecycle.resume_purge_target(instance, descriptor, operation_id)
|
|
668
|
+
lifecycle.resume_purge_target(instance_id, operation_id, remove_receipt)
|
|
670
669
|
receipt = lifecycle.record_purge(instance_id, operation_id, remove_receipt)
|
|
671
670
|
return {
|
|
672
671
|
"contract": system_instance_lifecycle.CONTRACT,
|
|
@@ -707,6 +706,7 @@ class SystemInstanceProvisioner:
|
|
|
707
706
|
result = subprocess.run(
|
|
708
707
|
(sys.executable, "-I", "-m", "venv", str(slot.venv)),
|
|
709
708
|
text=True, capture_output=True, check=False,
|
|
709
|
+
cwd=slot.root,
|
|
710
710
|
env={"PYTHONNOUSERSITE": "1", "PYTHONSAFEPATH": "1"},
|
|
711
711
|
)
|
|
712
712
|
if result.returncode:
|
|
@@ -718,6 +718,7 @@ class SystemInstanceProvisioner:
|
|
|
718
718
|
str(release.artifact),
|
|
719
719
|
),
|
|
720
720
|
text=True, capture_output=True, check=False,
|
|
721
|
+
cwd=slot.root,
|
|
721
722
|
env={"PYTHONNOUSERSITE": "1", "PYTHONSAFEPATH": "1", "PIP_CONFIG_FILE": os.devnull},
|
|
722
723
|
)
|
|
723
724
|
if result.returncode:
|
|
File without changes
|
|
File without changes
|
{engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/__init__.py
RENAMED
|
File without changes
|
{engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/__main__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/codex_chat.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/file_inbox.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/host_admin.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/local_api.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/producer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/providers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/resources.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/server.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/storage.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{engineering_platform-2.3.104 → engineering_platform-2.3.106}/src/engineering_platform/telemetry.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|