engineering-platform 2.3.98__tar.gz → 2.3.100__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.98 → engineering_platform-2.3.100}/PKG-INFO +1 -1
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/pyproject.toml +1 -1
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/ENGINEERING_PLATFORM_CONFIG.json +1 -1
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/ENGINEERING_PLATFORM_VERSION.json +4 -4
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/agent_state.py +1 -1
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/assets/dashboard.css +1 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/assets/dashboard.js +41 -15
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/capability_review.py +8 -1
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/execution_executor.py +47 -26
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/execution_host.py +12 -1
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/platform_version.py +1 -1
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/templates/workspace-config.json +1 -1
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform.egg-info/PKG-INFO +1 -1
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/README.md +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/setup.cfg +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/__init__.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/__main__.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/agent_trust.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/assets/dashboard_locales.mjs +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/assets/dashboard_status_store.mjs +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/assets/dashboard_translation.mjs +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/assets/operations-console/apple-touch-icon-dark.png +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/assets/operations-console/apple-touch-icon-light.png +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/assets/operations-console/icon-dark.png +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/assets/operations-console/icon-light.png +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/assets/operations-console/icon-transparent.png +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/assets/operations-console/manifest.webmanifest +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/assurance_scope.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/capability_preflight.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/central_data_transfer.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/central_database.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/central_operational_reset.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/central_store_migration.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/codex_capacity.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/codex_chat.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/codex_observability.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/component_lock.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/component_logging.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/console_presentation.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/console_route_ownership.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/contracts/__init__.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/contracts/ep_consumer.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/contracts/models.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/contracts/projection.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/dashboard_browser_validation.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/dashboard_state.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/dashboard_supervisor.swift +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/dashboard_translation.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/dependabot_producer.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/development_profile.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/drift_diagnostics.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/emergency_recovery.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/engineering_memory.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/ep_consumer_credentials.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/evidence_projection.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/execution_activity.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/execution_context.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/execution_errors.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/execution_evidence.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/execution_finalization.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/execution_host_evidence.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/execution_lease.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/execution_lifecycle.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/execution_models.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/execution_readiness.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/execution_reporting.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/execution_repository.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/execution_timeout_policy.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/execution_timing.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/execution_transaction.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/external_producer_binding.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/file_inbox.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/forensic_attribution.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/forensic_attribution_v2.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/forensic_delta.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/golden_scenario.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/historical_dashboard_configuration.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/host_admin.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/host_preflight.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/installation_relocation.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/installation_update_activation.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/installation_update_admission.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/installation_update_backup.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/installation_update_composition.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/installation_update_executor.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/installation_update_migration.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/installation_update_operation.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/installation_update_plan.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/installation_update_preparation.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/investigation_ledger.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/legacy_inbox_migration.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/legacy_installation_adoption.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/lifecycle_worker.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/live_status.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/local_api.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/local_api_keychain.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/local_repository_binding.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/managed_autonomy.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/managed_codex_runtime.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/managed_workspace_readiness.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/managed_workspace_recovery.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/merge_delegation.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/operational_installation.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/operational_installation_lock.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/operational_installation_record.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/owner_credential_recovery.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/parity_context.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/parity_lifecycle_dispatcher.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/platform_admin.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/platform_api.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/platform_bootstrap.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/platform_components.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/pr_check_repair.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/pr_evidence_backfill.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/producer.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/product_installation_readback.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/project_agent.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/project_agent_service.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/project_topology.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/prompt_history.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/provider_context.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/provider_context_benchmark.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/provider_context_scope.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/provider_interruption.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/provider_process_identity.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/provider_readiness.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/provider_recovery.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/provider_usage.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/providers.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/qualification.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/qualification_runtime.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/recommendation_handoff.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/reconciliation_adoption.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/release_operation.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/report_analysis.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/repository_attachment.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/repository_handoff.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/resources.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/reviewer_evidence.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/revision_binding.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/schemas/producer-readback-v1.2.schema.json +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/schemas/producer-readback-v1.3.schema.json +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/schemas/producer-readback-v1.schema.json +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/schemas/repository-attachment.schema.json +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/server.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/server_console_services.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/server_relay.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/server_service.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/status_model.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/status_reconciliation.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/storage.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/submission_cli.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/submission_intake.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/submission_service.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/system_installation_topology.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/system_server_service.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/telemetry.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/telemetry_contract.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/telemetry_export.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/telemetry_metrics.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/terminal_evidence_reconciliation.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/validation_identity.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/validation_profile.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/version_preparation_delivery.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/workspace_preflight.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/worktree_provenance.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/worktree_tooling.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform.egg-info/SOURCES.txt +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform.egg-info/dependency_links.txt +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform.egg-info/entry_points.txt +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform.egg-info/top_level.txt +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/tests/test_adaptive_action_sizing_design.py +0 -0
- {engineering_platform-2.3.98 → engineering_platform-2.3.100}/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.100"
|
|
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.100",
|
|
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.100",
|
|
10
10
|
"report_format": 2,
|
|
11
|
-
"runner_version": "2.3.
|
|
11
|
+
"runner_version": "2.3.100",
|
|
12
12
|
"status_model": 1,
|
|
13
13
|
"storage_schema": 45,
|
|
14
|
-
"watcher_version": "2.3.
|
|
14
|
+
"watcher_version": "2.3.100"
|
|
15
15
|
}
|
{engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/agent_state.py
RENAMED
|
@@ -490,7 +490,7 @@ class TransactionState:
|
|
|
490
490
|
or not isinstance(review.get("completed_at"), str)
|
|
491
491
|
))
|
|
492
492
|
or (set(review) == integral_review_fields and (
|
|
493
|
-
review.get("contract_version")
|
|
493
|
+
review.get("contract_version") not in {"2.0", "3.0"}
|
|
494
494
|
or not isinstance(review.get("started_at"), str)
|
|
495
495
|
or not isinstance(review.get("completed_at"), str)
|
|
496
496
|
or not isinstance(review.get("coverage"), list)
|
|
@@ -280,6 +280,7 @@ html[data-theme="light"] :is(#rateLimitReset,#codexCliUpdate){background:#e8fff5
|
|
|
280
280
|
.prompt-detail-provider-review{display:grid;gap:18px;grid-column:1/-1;grid-template-columns:minmax(0,1fr) minmax(320px,.78fr)}@media (max-width:760px){.prompt-detail-provider-review{grid-template-columns:1fr}}
|
|
281
281
|
.prompt-detail-provider-review-stack{display:grid;gap:18px;grid-column:1/-1}.prompt-detail-provider-review>.prompt-detail-card{align-self:stretch;box-sizing:border-box}.prompt-detail-card--commit-timeline{display:flex;flex-direction:column;min-height:0}.prompt-detail-commit-timeline__list{align-content:start;display:grid;flex:1;gap:10px;list-style:none;margin:0;max-height:none;min-height:0;overflow:auto;padding:0 8px 0 0;scrollbar-gutter:stable}.prompt-detail-commit-timeline__item{border-top:1px solid color-mix(in srgb,var(--category-color) 38%,transparent);display:grid;gap:3px;padding-top:10px}.prompt-detail-commit-timeline__item:first-child{border-top:0;padding-top:0}.prompt-detail-commit-timeline__meta{color:var(--dashboard-modal-muted);font-size:12px;line-height:1.35}.prompt-detail-commit-timeline__item code{font-size:12px;overflow-wrap:normal;white-space:nowrap}.prompt-detail-commit-timeline__item>span{font-size:13px;line-height:1.4;overflow-wrap:anywhere}
|
|
282
282
|
.prompt-detail-card--evidence pre,.prompt-detail-card--reviewers pre,.prompt-detail-card--assurance-reviews pre{font-family:inherit}
|
|
283
|
+
.prompt-detail-assurance-review__content{display:grid;gap:5px;margin:0;white-space:normal}.prompt-detail-assurance-review__line{display:block;overflow-wrap:anywhere;white-space:pre-wrap}.assurance-review-status{align-items:center;display:inline-flex;gap:8px;width:max-content}.assurance-review-status__text{line-height:18px}
|
|
283
284
|
.reviewer-agent__status--failed{background:#ff6b6b;box-shadow:0 0 8px #ff6b6b66;color:#351313;font:800 14px/1 system-ui;height:16px;width:16px}
|
|
284
285
|
.prompt-detail-reviewer{border-top:1px solid color-mix(in srgb,var(--category-color) 45%,transparent);display:grid;gap:7px;padding-top:14px}.prompt-detail-reviewer:first-of-type{border-top:0;padding-top:0}.prompt-detail-reviewer h4{color:var(--category-color);font-size:16px;margin:0 0 4px}.prompt-detail-reviewer>.field{margin:2px 0 0}.prompt-detail-reviewer__status{align-items:center;display:inline-flex;gap:8px}.prompt-detail-reviewer__status-icon{align-items:center;border-radius:50%;display:inline-flex;flex:0 0 18px;font:800 12px/1 system-ui;height:18px;justify-content:center}.prompt-detail-reviewer__status-icon--completed{background:#51d88a;box-shadow:0 0 8px #51d88a66;color:#11261d}.prompt-detail-reviewer__status-icon--failed{background:#ff6b6b;box-shadow:0 0 8px #ff6b6b66;color:#351313}.prompt-detail-reviewer__status-icon--neutral{background:#9a9aa3;color:#202027}
|
|
285
286
|
.prompt-detail-commit-timeline__phase{border-top:1px solid color-mix(in srgb,var(--category-color) 52%,transparent);list-style:none;padding:13px 0 0}.prompt-detail-commit-timeline__phase:first-child{border-top:0;padding-top:0}.prompt-detail-commit-timeline__phase h4{color:var(--category-color);font-size:12px;letter-spacing:.04em;margin:0 0 9px;text-transform:uppercase}.prompt-detail-commit-timeline__phase-entries{display:grid;gap:10px;list-style:none;margin:0;padding:0 0 2px}.prompt-detail-commit-timeline__phase-entries .prompt-detail-commit-timeline__item{border-top:0;padding-top:0}
|
|
@@ -144,6 +144,32 @@ function assuranceStatusLabel(value, fallback = t("format.not_available")) {
|
|
|
144
144
|
if (!raw) return fallback;
|
|
145
145
|
return t(`lifecycle.assurance_status.${reviewerKey(raw)}`, {}, raw);
|
|
146
146
|
}
|
|
147
|
+
function assuranceStatusPresentation(value) {
|
|
148
|
+
const status = String(value || "UNRESOLVED").toUpperCase();
|
|
149
|
+
const passed = status === "PASS", failed = ["FAIL", "FAILED", "UNRESOLVED"].includes(status);
|
|
150
|
+
return {
|
|
151
|
+
glyph: passed ? "✓" : failed ? "×" : "•",
|
|
152
|
+
label: assuranceStatusLabel(status, status),
|
|
153
|
+
tone: passed ? "passed" : failed ? "failed" : "neutral",
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
function assuranceStatusIcon(presentation) {
|
|
157
|
+
const icon = document.createElement("span");
|
|
158
|
+
icon.className = "assurance-review-status__icon assurance-review-status__icon--" + presentation.tone
|
|
159
|
+
+ " lifecycle-detail-modal__assurance-status lifecycle-detail-modal__assurance-status--" + presentation.tone;
|
|
160
|
+
icon.setAttribute("aria-hidden", "true");
|
|
161
|
+
icon.textContent = presentation.glyph;
|
|
162
|
+
return icon;
|
|
163
|
+
}
|
|
164
|
+
function assuranceStatusRow(value) {
|
|
165
|
+
const presentation = assuranceStatusPresentation(value), row = document.createElement("span"),
|
|
166
|
+
text = document.createElement("span");
|
|
167
|
+
row.className = "assurance-review-status";
|
|
168
|
+
text.className = "assurance-review-status__text";
|
|
169
|
+
text.textContent = presentation.label;
|
|
170
|
+
row.append(assuranceStatusIcon(presentation), text);
|
|
171
|
+
return row;
|
|
172
|
+
}
|
|
147
173
|
function reviewerCapabilityLabel(value, fallback = t("format.not_available")) {
|
|
148
174
|
const raw = String(value || "").trim();
|
|
149
175
|
return raw ? enumLabel(raw.toUpperCase(), raw) : fallback;
|
|
@@ -2166,17 +2192,11 @@ function lifecycleAssuranceEvidence(step) {
|
|
|
2166
2192
|
if (!review || typeof review !== "object") continue;
|
|
2167
2193
|
const findings = Array.isArray(review.findings) ? review.findings : [];
|
|
2168
2194
|
const item = document.createElement("li"), heading = document.createElement("strong"),
|
|
2169
|
-
|
|
2170
|
-
normalizedStatus = status.toUpperCase();
|
|
2195
|
+
status = String(review.status || "UNRESOLVED"), statusPresentation = assuranceStatusPresentation(status);
|
|
2171
2196
|
const role = String(review.reviewer || "");
|
|
2172
|
-
const passed = normalizedStatus === "PASS", failed = ["FAIL", "FAILED", "UNRESOLVED"].includes(normalizedStatus);
|
|
2173
2197
|
heading.className = "lifecycle-detail-modal__assurance-heading";
|
|
2174
|
-
|
|
2175
|
-
|
|
2176
|
-
statusIcon.setAttribute("aria-hidden", "true");
|
|
2177
|
-
statusIcon.textContent = passed ? "✓" : failed ? "×" : "•";
|
|
2178
|
-
heading.append(statusIcon, Object.assign(document.createElement("span"), {
|
|
2179
|
-
textContent: `${reviewerLabel(role, role)} · ${assuranceStatusLabel(status, status)}`,
|
|
2198
|
+
heading.append(assuranceStatusIcon(statusPresentation), Object.assign(document.createElement("span"), {
|
|
2199
|
+
textContent: `${reviewerLabel(role, role)} · ${statusPresentation.label}`,
|
|
2180
2200
|
}));
|
|
2181
2201
|
item.append(heading);
|
|
2182
2202
|
const summary = findings.map((finding) => String(finding?.observation || "").trim()).filter(Boolean).join("; ");
|
|
@@ -8645,18 +8665,24 @@ function promptDetailAssuranceReviewsSection(reviews) {
|
|
|
8645
8665
|
const fields = reviews.map((review) => {
|
|
8646
8666
|
const findings = Array.isArray(review.findings) ? review.findings : [];
|
|
8647
8667
|
const candidate = String(review.candidate_sha || "").trim();
|
|
8668
|
+
const field = detailField(
|
|
8669
|
+
reviewerLabel(review.reviewer, t("detail.specialist_review")),
|
|
8670
|
+
"",
|
|
8671
|
+
true,
|
|
8672
|
+
);
|
|
8673
|
+
const content = field.lastElementChild;
|
|
8674
|
+
content.className = "prompt-detail-assurance-review__content";
|
|
8675
|
+
content.replaceChildren(assuranceStatusRow(review.status || "UNRESOLVED"));
|
|
8648
8676
|
const lines = [
|
|
8649
|
-
assuranceStatusLabel(review.status || "UNRESOLVED"),
|
|
8650
8677
|
candidate ? t("detail.candidate_sha") + ": " + candidate : null,
|
|
8651
8678
|
...(findings.length
|
|
8652
8679
|
? findings.map((finding) => String(finding?.observation || "").trim()).filter(Boolean)
|
|
8653
8680
|
: [t("lifecycle.assurance_no_findings")]),
|
|
8654
8681
|
].filter(Boolean);
|
|
8655
|
-
|
|
8656
|
-
|
|
8657
|
-
|
|
8658
|
-
|
|
8659
|
-
);
|
|
8682
|
+
for (const line of lines) content.append(Object.assign(document.createElement("span"), {
|
|
8683
|
+
className: "prompt-detail-assurance-review__line", textContent: line,
|
|
8684
|
+
}));
|
|
8685
|
+
return field;
|
|
8660
8686
|
});
|
|
8661
8687
|
return promptDetailCard(
|
|
8662
8688
|
t("lifecycle.detail_assurance"), fields, true,
|
|
@@ -45,7 +45,7 @@ REVIEWER_LABELS = {
|
|
|
45
45
|
"finalization": "Finalization Reviewer",
|
|
46
46
|
}
|
|
47
47
|
ADVISORY_REVIEW_OUTPUT_CONTRACT_VERSION = "1.0"
|
|
48
|
-
MANDATORY_REVIEW_OUTPUT_CONTRACT_VERSION = "
|
|
48
|
+
MANDATORY_REVIEW_OUTPUT_CONTRACT_VERSION = "3.0"
|
|
49
49
|
MANDATORY_FINDING_FIELDS = frozenset({
|
|
50
50
|
"id", "observation", "category", "criterion", "severity", "confidence", "evidence_ref",
|
|
51
51
|
})
|
|
@@ -103,6 +103,13 @@ class ReviewerSelection:
|
|
|
103
103
|
selected_because: str
|
|
104
104
|
confidence: float
|
|
105
105
|
capability: str = "engineering"
|
|
106
|
+
# Mandatory assurance is selected by the host for one immutable delivery
|
|
107
|
+
# role and one exact set of still-open findings. Carry that host-owned
|
|
108
|
+
# contract across the provider boundary so the structured-output schema
|
|
109
|
+
# cannot admit a broader, incomplete response that the deterministic
|
|
110
|
+
# validator must subsequently reject.
|
|
111
|
+
required_coverage_surfaces: tuple[str, ...] = ()
|
|
112
|
+
required_finding_ids: tuple[str, ...] = ()
|
|
106
113
|
|
|
107
114
|
|
|
108
115
|
@dataclass(frozen=True)
|
|
@@ -22,7 +22,6 @@ from .capability_review import (
|
|
|
22
22
|
MANDATORY_REVIEW_OUTPUT_CONTRACT_VERSION,
|
|
23
23
|
ReviewerResult,
|
|
24
24
|
ReviewerSelection,
|
|
25
|
-
mandatory_coverage_surfaces,
|
|
26
25
|
reviewer_prompt,
|
|
27
26
|
)
|
|
28
27
|
from .codex_observability import codex_final_message as _codex_final_message, extract_codex_runtime_metadata, extract_codex_usage
|
|
@@ -544,34 +543,39 @@ class CodexCliClient:
|
|
|
544
543
|
}
|
|
545
544
|
if mandatory:
|
|
546
545
|
required.extend(("coverage", "finding_dispositions"))
|
|
547
|
-
surfaces =
|
|
548
|
-
|
|
549
|
-
for role in ("IMPLEMENTATION", "FINALIZATION", "RECONCILIATION")
|
|
550
|
-
for surface in mandatory_coverage_surfaces(selection.reviewer, role)
|
|
551
|
-
})
|
|
546
|
+
surfaces = selection.required_coverage_surfaces
|
|
547
|
+
prior_finding_ids = selection.required_finding_ids
|
|
552
548
|
properties.update({
|
|
553
549
|
"coverage": {
|
|
554
|
-
"type": "
|
|
555
|
-
"
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
"
|
|
560
|
-
"
|
|
561
|
-
"
|
|
562
|
-
|
|
550
|
+
"type": "object",
|
|
551
|
+
"additionalProperties": False,
|
|
552
|
+
"required": list(surfaces),
|
|
553
|
+
"properties": {
|
|
554
|
+
surface: {
|
|
555
|
+
"type": "object", "additionalProperties": False,
|
|
556
|
+
"required": ["status", "evidence_ref"],
|
|
557
|
+
"properties": {
|
|
558
|
+
"status": {"type": "string", "enum": ["REVIEWED", "NOT_APPLICABLE"]},
|
|
559
|
+
"evidence_ref": {"type": "string", "maxLength": 240},
|
|
560
|
+
},
|
|
561
|
+
}
|
|
562
|
+
for surface in surfaces
|
|
563
563
|
},
|
|
564
564
|
},
|
|
565
565
|
"finding_dispositions": {
|
|
566
|
-
"type": "
|
|
567
|
-
"
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
"
|
|
572
|
-
"
|
|
573
|
-
"
|
|
574
|
-
|
|
566
|
+
"type": "object",
|
|
567
|
+
"additionalProperties": False,
|
|
568
|
+
"required": list(prior_finding_ids),
|
|
569
|
+
"properties": {
|
|
570
|
+
finding_id: {
|
|
571
|
+
"type": "object", "additionalProperties": False,
|
|
572
|
+
"required": ["disposition", "evidence_ref"],
|
|
573
|
+
"properties": {
|
|
574
|
+
"disposition": {"type": "string", "enum": ["RESOLVED", "OPEN"]},
|
|
575
|
+
"evidence_ref": {"type": "string", "maxLength": 240},
|
|
576
|
+
},
|
|
577
|
+
}
|
|
578
|
+
for finding_id in prior_finding_ids
|
|
575
579
|
},
|
|
576
580
|
},
|
|
577
581
|
})
|
|
@@ -632,6 +636,23 @@ class CodexCliClient:
|
|
|
632
636
|
)
|
|
633
637
|
try:
|
|
634
638
|
raw = json.loads(_codex_final_message(completed.stdout))
|
|
639
|
+
raw_coverage = raw.get("coverage", {})
|
|
640
|
+
raw_dispositions = raw.get("finding_dispositions", {})
|
|
641
|
+
if mandatory and (
|
|
642
|
+
not isinstance(raw_coverage, dict)
|
|
643
|
+
or set(raw_coverage) != set(selection.required_coverage_surfaces)
|
|
644
|
+
or not isinstance(raw_dispositions, dict)
|
|
645
|
+
or set(raw_dispositions) != set(selection.required_finding_ids)
|
|
646
|
+
):
|
|
647
|
+
raise TypeError("mandatory assurance response does not match the host-owned contract")
|
|
648
|
+
coverage = tuple(
|
|
649
|
+
{"surface": surface, **dict(raw_coverage[surface])}
|
|
650
|
+
for surface in selection.required_coverage_surfaces
|
|
651
|
+
) if mandatory else ()
|
|
652
|
+
finding_dispositions = tuple(
|
|
653
|
+
{"finding_id": finding_id, **dict(raw_dispositions[finding_id])}
|
|
654
|
+
for finding_id in selection.required_finding_ids
|
|
655
|
+
) if mandatory else ()
|
|
635
656
|
return ReviewerResult(
|
|
636
657
|
selection.reviewer,
|
|
637
658
|
str(raw["contribution"]),
|
|
@@ -641,8 +662,8 @@ class CodexCliClient:
|
|
|
641
662
|
usage=dict(self.last_usage), runtime_metadata=dict(self.last_runtime_metadata),
|
|
642
663
|
churn=dict(self.last_churn), duration_seconds=self.last_execution_seconds,
|
|
643
664
|
usage_snapshots=self.last_usage_snapshots,
|
|
644
|
-
coverage=
|
|
645
|
-
finding_dispositions=
|
|
665
|
+
coverage=coverage,
|
|
666
|
+
finding_dispositions=finding_dispositions,
|
|
646
667
|
)
|
|
647
668
|
except (IndexError, KeyError, TypeError, json.JSONDecodeError):
|
|
648
669
|
return ReviewerResult(
|
|
@@ -2530,6 +2530,11 @@ Host-owned validation evidence (candidate-bound, command-terminal receipts):
|
|
|
2530
2530
|
prior_findings = self._unresolved_assurance_findings(quality, reviewer=selection.reviewer)
|
|
2531
2531
|
prior_finding_ids = tuple(str(finding["id"]) for finding in prior_findings)
|
|
2532
2532
|
required_surfaces = mandatory_coverage_surfaces(selection.reviewer, role)
|
|
2533
|
+
contracted_selection = replace(
|
|
2534
|
+
selection,
|
|
2535
|
+
required_coverage_surfaces=required_surfaces,
|
|
2536
|
+
required_finding_ids=prior_finding_ids,
|
|
2537
|
+
)
|
|
2533
2538
|
assurance_objective = (
|
|
2534
2539
|
f"Mandatory {selection.reviewer} assurance. Profile {profile_version} ({profile_digest}); "
|
|
2535
2540
|
f"candidate {candidate.head_sha}. This is an integral candidate review, not a review of only the latest repair. "
|
|
@@ -2542,7 +2547,13 @@ Host-owned validation evidence (candidate-bound, command-terminal receipts):
|
|
|
2542
2547
|
+ criteria
|
|
2543
2548
|
)
|
|
2544
2549
|
started_at = datetime.now(timezone.utc).isoformat()
|
|
2545
|
-
result = run_reviews(
|
|
2550
|
+
result = run_reviews(
|
|
2551
|
+
assurance_root or self.root,
|
|
2552
|
+
(contracted_selection,),
|
|
2553
|
+
assurance_objective,
|
|
2554
|
+
self.agent if hasattr(self.agent, "review") else None,
|
|
2555
|
+
evidence=evidence,
|
|
2556
|
+
)[0]
|
|
2546
2557
|
completed_at = datetime.now(timezone.utc).isoformat()
|
|
2547
2558
|
try:
|
|
2548
2559
|
unchanged = self._inspect_assurance_candidate(candidate_root, state.execution_mode)
|
|
@@ -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.100"
|
|
16
16
|
MANIFEST_FIELDS = frozenset(
|
|
17
17
|
{
|
|
18
18
|
"platform_version",
|
|
File without changes
|
|
File without changes
|
{engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/__init__.py
RENAMED
|
File without changes
|
{engineering_platform-2.3.98 → engineering_platform-2.3.100}/src/engineering_platform/__main__.py
RENAMED
|
File without changes
|
{engineering_platform-2.3.98 → engineering_platform-2.3.100}/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
|
{engineering_platform-2.3.98 → engineering_platform-2.3.100}/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
|
{engineering_platform-2.3.98 → engineering_platform-2.3.100}/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.98 → engineering_platform-2.3.100}/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.98 → engineering_platform-2.3.100}/src/engineering_platform/live_status.py
RENAMED
|
File without changes
|
{engineering_platform-2.3.98 → engineering_platform-2.3.100}/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.98 → engineering_platform-2.3.100}/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.98 → engineering_platform-2.3.100}/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.98 → engineering_platform-2.3.100}/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.98 → engineering_platform-2.3.100}/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.98 → engineering_platform-2.3.100}/src/engineering_platform/storage.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{engineering_platform-2.3.98 → engineering_platform-2.3.100}/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
|