engineering-platform 2.3.71__tar.gz → 2.3.73__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.71 → engineering_platform-2.3.73}/PKG-INFO +1 -1
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/pyproject.toml +1 -1
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/ENGINEERING_PLATFORM_CONFIG.json +1 -1
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/ENGINEERING_PLATFORM_VERSION.json +4 -4
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/execution_repository.py +9 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/parity_lifecycle_dispatcher.py +72 -9
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/platform_version.py +1 -1
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/storage.py +22 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/templates/workspace-config.json +1 -1
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform.egg-info/PKG-INFO +1 -1
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/README.md +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/setup.cfg +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/__init__.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/__main__.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/agent_state.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/agent_trust.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/assets/dashboard.css +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/assets/dashboard.js +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/assets/dashboard_locales.mjs +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/assets/dashboard_status_store.mjs +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/assets/dashboard_translation.mjs +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/assets/operations-console/apple-touch-icon-dark.png +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/assets/operations-console/apple-touch-icon-light.png +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/assets/operations-console/icon-dark.png +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/assets/operations-console/icon-light.png +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/assets/operations-console/icon-transparent.png +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/assets/operations-console/manifest.webmanifest +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/capability_preflight.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/capability_review.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/central_data_transfer.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/central_database.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/central_store_migration.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/codex_capacity.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/codex_chat.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/codex_observability.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/component_lock.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/component_logging.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/console_presentation.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/console_route_ownership.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/contracts/__init__.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/contracts/ep_consumer.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/contracts/models.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/contracts/projection.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/dashboard_browser_validation.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/dashboard_state.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/dashboard_supervisor.swift +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/dashboard_translation.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/dependabot_producer.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/development_profile.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/drift_diagnostics.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/emergency_recovery.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/engineering_memory.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/ep_consumer_credentials.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/evidence_projection.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/execution_activity.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/execution_context.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/execution_errors.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/execution_evidence.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/execution_executor.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/execution_finalization.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/execution_host.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/execution_host_evidence.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/execution_lease.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/execution_lifecycle.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/execution_models.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/execution_readiness.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/execution_reporting.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/execution_timeout_policy.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/execution_timing.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/execution_transaction.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/external_producer_binding.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/file_inbox.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/forensic_attribution.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/forensic_attribution_v2.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/forensic_delta.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/golden_scenario.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/historical_dashboard_configuration.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/host_admin.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/host_preflight.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/installation_relocation.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/installation_update_activation.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/installation_update_admission.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/installation_update_backup.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/installation_update_composition.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/installation_update_executor.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/installation_update_migration.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/installation_update_operation.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/installation_update_plan.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/installation_update_preparation.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/investigation_ledger.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/legacy_inbox_migration.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/legacy_installation_adoption.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/lifecycle_worker.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/live_status.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/local_api.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/local_api_keychain.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/local_repository_binding.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/managed_autonomy.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/managed_codex_runtime.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/operational_installation.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/operational_installation_lock.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/operational_installation_record.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/owner_credential_recovery.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/parity_context.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/platform_admin.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/platform_api.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/platform_bootstrap.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/platform_components.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/pr_check_repair.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/pr_evidence_backfill.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/producer.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/product_installation_readback.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/project_agent.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/project_agent_service.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/project_topology.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/prompt_history.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/provider_context.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/provider_context_benchmark.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/provider_context_scope.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/provider_interruption.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/provider_process_identity.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/provider_readiness.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/provider_recovery.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/provider_usage.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/providers.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/qualification.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/qualification_runtime.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/recommendation_handoff.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/reconciliation_adoption.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/release_operation.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/report_analysis.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/repository_attachment.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/repository_handoff.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/resources.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/reviewer_evidence.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/revision_binding.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/schemas/producer-readback-v1.2.schema.json +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/schemas/producer-readback-v1.schema.json +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/schemas/repository-attachment.schema.json +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/server.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/server_console_services.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/server_relay.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/server_service.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/status_model.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/status_reconciliation.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/submission_cli.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/submission_intake.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/submission_service.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/system_installation_topology.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/system_server_service.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/telemetry.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/validation_identity.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/validation_profile.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/version_preparation_delivery.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/workspace_preflight.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/worktree_provenance.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/worktree_tooling.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform.egg-info/SOURCES.txt +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform.egg-info/dependency_links.txt +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform.egg-info/entry_points.txt +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform.egg-info/top_level.txt +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/tests/test_adaptive_action_sizing_design.py +0 -0
- {engineering_platform-2.3.71 → engineering_platform-2.3.73}/tests/test_role_task_model_policy_design.py +0 -0
|
@@ -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.73",
|
|
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.73",
|
|
10
10
|
"report_format": 2,
|
|
11
|
-
"runner_version": "2.3.
|
|
11
|
+
"runner_version": "2.3.73",
|
|
12
12
|
"status_model": 1,
|
|
13
13
|
"storage_schema": 45,
|
|
14
|
-
"watcher_version": "2.3.
|
|
14
|
+
"watcher_version": "2.3.73"
|
|
15
15
|
}
|
|
@@ -33,6 +33,7 @@ def github_repository_slug(remote: str) -> str:
|
|
|
33
33
|
class RepositoryClient(Protocol):
|
|
34
34
|
def inspect(self, root: Path) -> RepositoryEvidence: ...
|
|
35
35
|
def main_contains(self, root: Path, sha: str) -> bool: ...
|
|
36
|
+
def protected_main_revision(self, root: Path) -> str: ...
|
|
36
37
|
def refresh_main_reference(self, root: Path) -> None: ...
|
|
37
38
|
def remote_main_contains(self, root: Path, sha: str) -> bool: ...
|
|
38
39
|
def synchronize_main(self, root: Path) -> None: ...
|
|
@@ -77,6 +78,14 @@ class SubprocessRepositoryClient:
|
|
|
77
78
|
"""Refresh remote main evidence without changing the shared checkout."""
|
|
78
79
|
self._synchronize_command(root, "git", "fetch", "origin", "main")
|
|
79
80
|
|
|
81
|
+
def protected_main_revision(self, root: Path) -> str:
|
|
82
|
+
"""Return the freshly observed protected-main revision without checkout mutation."""
|
|
83
|
+
self.refresh_main_reference(root)
|
|
84
|
+
revision = self._run(root, "git", "rev-parse", "--verify", "origin/main")
|
|
85
|
+
if re.fullmatch(r"[0-9a-f]{40}", revision) is None:
|
|
86
|
+
raise RunnerError("protected main revision is unavailable")
|
|
87
|
+
return revision
|
|
88
|
+
|
|
80
89
|
def remote_main_contains(self, root: Path, sha: str) -> bool:
|
|
81
90
|
return self.provider.execute(root, "git", "merge-base", "--is-ancestor", sha, "origin/main").returncode == 0
|
|
82
91
|
|
|
@@ -47,6 +47,7 @@ from .storage import (
|
|
|
47
47
|
)
|
|
48
48
|
from .prompt_history import prompt_history, record_terminal_report
|
|
49
49
|
from .report_analysis import analyze as analyze_terminal_report
|
|
50
|
+
from .revision_binding import CONSTRAINT_KEY, parse_repository_revision_binding
|
|
50
51
|
|
|
51
52
|
|
|
52
53
|
TERMINAL_STATES = frozenset({"COMPLETE", "BLOCKED", "FAILED"})
|
|
@@ -83,9 +84,76 @@ def dismiss_operator_gate(data_root: Path, *, project_id: str, run_id: str) -> d
|
|
|
83
84
|
return {"run_id": run_id, "handling_state": OPERATOR_RESOLUTION_DISMISSED}
|
|
84
85
|
|
|
85
86
|
|
|
86
|
-
def
|
|
87
|
+
def _retry_constraints_for_current_main(
|
|
88
|
+
constraints: dict[str, object], *, repository_root: Path | None,
|
|
89
|
+
repository: SubprocessRepositoryClient,
|
|
90
|
+
) -> dict[str, object]:
|
|
91
|
+
"""Bind one explicit retry to freshly observed protected main.
|
|
92
|
+
|
|
93
|
+
The producer's requested revision remains immutable history. The retry
|
|
94
|
+
gets one exact allowed baseline so the Execution Host can synchronize to
|
|
95
|
+
and re-verify the current repository state promised by the operator UI.
|
|
96
|
+
"""
|
|
97
|
+
try:
|
|
98
|
+
binding = parse_repository_revision_binding(constraints)
|
|
99
|
+
except ValueError as error:
|
|
100
|
+
raise ParityLifecycleDispatchError("RETRY_CONSTRAINTS_INVALID") from error
|
|
101
|
+
if binding is None:
|
|
102
|
+
return constraints
|
|
103
|
+
if repository_root is None:
|
|
104
|
+
raise ParityLifecycleDispatchError("RETRY_BASELINE_UNAVAILABLE")
|
|
105
|
+
try:
|
|
106
|
+
evidence = repository.inspect(repository_root)
|
|
107
|
+
if not evidence.clean or evidence.branch != "main" or not evidence.main_contains_head:
|
|
108
|
+
raise ParityLifecycleDispatchError("RETRY_BASELINE_NOT_CLEAN_MAIN")
|
|
109
|
+
current_main = repository.protected_main_revision(repository_root)
|
|
110
|
+
if not repository.remote_main_contains(repository_root, binding.requested_revision):
|
|
111
|
+
raise ParityLifecycleDispatchError("RETRY_REQUESTED_REVISION_NOT_ON_MAIN")
|
|
112
|
+
except RunnerError as error:
|
|
113
|
+
raise ParityLifecycleDispatchError("RETRY_BASELINE_UNAVAILABLE") from error
|
|
114
|
+
rebound = json.loads(json.dumps(constraints))
|
|
115
|
+
rebound[CONSTRAINT_KEY] = {
|
|
116
|
+
"requested_revision": binding.requested_revision,
|
|
117
|
+
"allowed_baseline_revision": current_main,
|
|
118
|
+
}
|
|
119
|
+
return rebound
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def retry_operator_gate(
|
|
123
|
+
data_root: Path, *, project_id: str, run_id: str,
|
|
124
|
+
repository: SubprocessRepositoryClient | None = None,
|
|
125
|
+
) -> submission_service.SubmissionResult:
|
|
87
126
|
"""Create the only FIFO-successor allowed to resolve a failed run."""
|
|
88
|
-
|
|
127
|
+
repository = repository or SubprocessRepositoryClient()
|
|
128
|
+
database = central_database.path(data_root)
|
|
129
|
+
with sqlite_connection(database) as connection:
|
|
130
|
+
source = connection.execute(
|
|
131
|
+
"""SELECT d.repository_id,s.producer_id,s.producer_type,s.producer_version,
|
|
132
|
+
s.prompt,s.transport,s.correlation_id,s.mission_id,s.engineering_action_id,s.constraints
|
|
133
|
+
FROM ep_parity_lifecycle_dispatches AS d
|
|
134
|
+
JOIN ep_submissions AS s ON s.submission_id=d.submission_id
|
|
135
|
+
WHERE d.project_id=? AND d.run_id=? AND d.state IN ('BLOCKED','FAILED')
|
|
136
|
+
AND d.operator_resolution=?""",
|
|
137
|
+
(project_id, run_id, OPERATOR_RESOLUTION_OPEN),
|
|
138
|
+
).fetchone()
|
|
139
|
+
if source is None:
|
|
140
|
+
raise ParityLifecycleDispatchError("PROJECT_RUN_NOT_AWAITING_OPERATOR")
|
|
141
|
+
context = project_context(
|
|
142
|
+
connection, data_root=data_root, project_id=project_id,
|
|
143
|
+
repository_id=str(source[0]),
|
|
144
|
+
)
|
|
145
|
+
try:
|
|
146
|
+
constraints = json.loads(str(source[9]))
|
|
147
|
+
except (TypeError, ValueError, json.JSONDecodeError):
|
|
148
|
+
raise ParityLifecycleDispatchError("RETRY_CONSTRAINTS_INVALID") from None
|
|
149
|
+
if not isinstance(constraints, dict):
|
|
150
|
+
raise ParityLifecycleDispatchError("RETRY_CONSTRAINTS_INVALID")
|
|
151
|
+
constraints = _retry_constraints_for_current_main(
|
|
152
|
+
constraints,
|
|
153
|
+
repository_root=context.local_repository_root,
|
|
154
|
+
repository=repository,
|
|
155
|
+
)
|
|
156
|
+
with sqlite_connection(database) as connection:
|
|
89
157
|
connection.execute("BEGIN IMMEDIATE")
|
|
90
158
|
row = connection.execute(
|
|
91
159
|
"""SELECT d.repository_id,s.producer_id,s.producer_type,s.producer_version,
|
|
@@ -99,14 +167,9 @@ def retry_operator_gate(data_root: Path, *, project_id: str, run_id: str) -> sub
|
|
|
99
167
|
if row is None:
|
|
100
168
|
connection.execute("ROLLBACK")
|
|
101
169
|
raise ParityLifecycleDispatchError("PROJECT_RUN_NOT_AWAITING_OPERATOR")
|
|
102
|
-
|
|
103
|
-
constraints = json.loads(str(row[9]))
|
|
104
|
-
except (TypeError, ValueError, json.JSONDecodeError):
|
|
105
|
-
connection.execute("ROLLBACK")
|
|
106
|
-
raise ParityLifecycleDispatchError("RETRY_CONSTRAINTS_INVALID") from None
|
|
107
|
-
if not isinstance(constraints, dict):
|
|
170
|
+
if tuple(row) != tuple(source):
|
|
108
171
|
connection.execute("ROLLBACK")
|
|
109
|
-
raise ParityLifecycleDispatchError("
|
|
172
|
+
raise ParityLifecycleDispatchError("PROJECT_RETRY_SOURCE_CHANGED")
|
|
110
173
|
request = submission_service.SubmissionRequest(
|
|
111
174
|
project_id=project_id, repository_id=str(row[0]), producer_id=str(row[1]),
|
|
112
175
|
producer_type=str(row[2]), producer_version=str(row[3]) if row[3] is not None else None,
|
|
@@ -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.73"
|
|
16
16
|
MANIFEST_FIELDS = frozenset(
|
|
17
17
|
{
|
|
18
18
|
"platform_version",
|
{engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/storage.py
RENAMED
|
@@ -1969,6 +1969,7 @@ def load_forge_governance_handoff_snapshot(root: Path, run_id: str) -> dict[str,
|
|
|
1969
1969
|
def load_submission_for_run(root: Path, run_id: str, *, central_database: Path | None = None) -> dict[str, object] | None:
|
|
1970
1970
|
"""Load immutable Producer provenance for one linked execution without prompt inspection."""
|
|
1971
1971
|
connection = _evidence_connection(root, central_database)
|
|
1972
|
+
attempt_constraints_payload: object | None = None
|
|
1972
1973
|
try:
|
|
1973
1974
|
row = connection.execute(
|
|
1974
1975
|
"SELECT submission.submission_id,submission.producer_id,submission.producer_type,"
|
|
@@ -1978,6 +1979,20 @@ def load_submission_for_run(root: Path, run_id: str, *, central_database: Path |
|
|
|
1978
1979
|
"FROM execution_submissions AS submission JOIN execution_submission_run_links AS link "
|
|
1979
1980
|
"ON link.submission_id=submission.submission_id WHERE link.run_id=?", (run_id,)
|
|
1980
1981
|
).fetchone()
|
|
1982
|
+
if row is not None and central_database is not None:
|
|
1983
|
+
# A correlated retry deliberately retains the canonical producer
|
|
1984
|
+
# submission while its execution attempt has its own immutable
|
|
1985
|
+
# CENTRAL request. Revision transitions are attempt-scoped, so
|
|
1986
|
+
# the Execution Host must consume the accepted attempt constraints
|
|
1987
|
+
# rather than silently falling back to the root submission's pin.
|
|
1988
|
+
attempt = connection.execute(
|
|
1989
|
+
"SELECT accepted.constraints FROM execution_submission_attempt_links AS link "
|
|
1990
|
+
"JOIN ep_submissions AS accepted ON accepted.submission_id=link.submission_id "
|
|
1991
|
+
"WHERE link.run_id=?",
|
|
1992
|
+
(run_id,),
|
|
1993
|
+
).fetchone()
|
|
1994
|
+
if attempt is not None:
|
|
1995
|
+
attempt_constraints_payload = attempt[0]
|
|
1981
1996
|
finally:
|
|
1982
1997
|
connection.close()
|
|
1983
1998
|
if not row:
|
|
@@ -1999,6 +2014,13 @@ def load_submission_for_run(root: Path, run_id: str, *, central_database: Path |
|
|
|
1999
2014
|
constraints = prompt_metadata.get("constraints")
|
|
2000
2015
|
if constraints is not None and not isinstance(constraints, dict):
|
|
2001
2016
|
raise EngineeringStorageError("Persisted submission constraints are invalid.")
|
|
2017
|
+
if attempt_constraints_payload is not None:
|
|
2018
|
+
try:
|
|
2019
|
+
constraints = json.loads(str(attempt_constraints_payload))
|
|
2020
|
+
except (TypeError, json.JSONDecodeError) as error:
|
|
2021
|
+
raise EngineeringStorageError("Persisted submission attempt constraints are corrupt.") from error
|
|
2022
|
+
if not isinstance(constraints, dict):
|
|
2023
|
+
raise EngineeringStorageError("Persisted submission attempt constraints are invalid.")
|
|
2002
2024
|
handoff = None
|
|
2003
2025
|
if row[12] is not None:
|
|
2004
2026
|
try:
|
|
File without changes
|
|
File without changes
|
{engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/__init__.py
RENAMED
|
File without changes
|
{engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/__main__.py
RENAMED
|
File without changes
|
{engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/agent_state.py
RENAMED
|
File without changes
|
{engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/agent_trust.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
|
{engineering_platform-2.3.71 → engineering_platform-2.3.73}/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
|
{engineering_platform-2.3.71 → engineering_platform-2.3.73}/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.71 → engineering_platform-2.3.73}/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
|
{engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/live_status.py
RENAMED
|
File without changes
|
{engineering_platform-2.3.71 → engineering_platform-2.3.73}/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
|
{engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/platform_api.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{engineering_platform-2.3.71 → engineering_platform-2.3.73}/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.71 → engineering_platform-2.3.73}/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.71 → engineering_platform-2.3.73}/src/engineering_platform/resources.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/server.py
RENAMED
|
File without changes
|
|
File without changes
|
{engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/server_relay.py
RENAMED
|
File without changes
|
|
File without changes
|
{engineering_platform-2.3.71 → engineering_platform-2.3.73}/src/engineering_platform/status_model.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.71 → engineering_platform-2.3.73}/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
|