engineering-platform 2.3.75__tar.gz → 2.3.77__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/PKG-INFO +1 -1
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/pyproject.toml +1 -1
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/ENGINEERING_PLATFORM_CONFIG.json +1 -1
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/ENGINEERING_PLATFORM_VERSION.json +4 -4
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/assets/dashboard.js +29 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/platform_version.py +1 -1
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/server.py +112 -14
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/templates/workspace-config.json +1 -1
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform.egg-info/PKG-INFO +1 -1
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/README.md +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/setup.cfg +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/__init__.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/__main__.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/agent_state.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/agent_trust.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/assets/dashboard.css +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/assets/dashboard_locales.mjs +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/assets/dashboard_status_store.mjs +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/assets/dashboard_translation.mjs +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/assets/operations-console/apple-touch-icon-dark.png +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/assets/operations-console/apple-touch-icon-light.png +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/assets/operations-console/icon-dark.png +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/assets/operations-console/icon-light.png +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/assets/operations-console/icon-transparent.png +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/assets/operations-console/manifest.webmanifest +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/capability_preflight.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/capability_review.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/central_data_transfer.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/central_database.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/central_store_migration.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/codex_capacity.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/codex_chat.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/codex_observability.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/component_lock.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/component_logging.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/console_presentation.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/console_route_ownership.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/contracts/__init__.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/contracts/ep_consumer.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/contracts/models.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/contracts/projection.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/dashboard_browser_validation.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/dashboard_state.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/dashboard_supervisor.swift +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/dashboard_translation.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/dependabot_producer.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/development_profile.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/drift_diagnostics.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/emergency_recovery.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/engineering_memory.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/ep_consumer_credentials.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/evidence_projection.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/execution_activity.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/execution_context.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/execution_errors.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/execution_evidence.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/execution_executor.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/execution_finalization.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/execution_host.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/execution_host_evidence.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/execution_lease.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/execution_lifecycle.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/execution_models.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/execution_readiness.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/execution_reporting.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/execution_repository.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/execution_timeout_policy.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/execution_timing.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/execution_transaction.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/external_producer_binding.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/file_inbox.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/forensic_attribution.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/forensic_attribution_v2.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/forensic_delta.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/golden_scenario.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/historical_dashboard_configuration.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/host_admin.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/host_preflight.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/installation_relocation.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/installation_update_activation.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/installation_update_admission.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/installation_update_backup.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/installation_update_composition.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/installation_update_executor.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/installation_update_migration.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/installation_update_operation.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/installation_update_plan.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/installation_update_preparation.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/investigation_ledger.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/legacy_inbox_migration.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/legacy_installation_adoption.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/lifecycle_worker.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/live_status.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/local_api.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/local_api_keychain.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/local_repository_binding.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/managed_autonomy.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/managed_codex_runtime.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/operational_installation.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/operational_installation_lock.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/operational_installation_record.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/owner_credential_recovery.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/parity_context.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/parity_lifecycle_dispatcher.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/platform_admin.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/platform_api.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/platform_bootstrap.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/platform_components.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/pr_check_repair.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/pr_evidence_backfill.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/producer.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/product_installation_readback.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/project_agent.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/project_agent_service.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/project_topology.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/prompt_history.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/provider_context.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/provider_context_benchmark.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/provider_context_scope.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/provider_interruption.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/provider_process_identity.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/provider_readiness.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/provider_recovery.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/provider_usage.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/providers.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/qualification.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/qualification_runtime.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/recommendation_handoff.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/reconciliation_adoption.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/release_operation.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/report_analysis.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/repository_attachment.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/repository_handoff.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/resources.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/reviewer_evidence.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/revision_binding.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/schemas/producer-readback-v1.2.schema.json +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/schemas/producer-readback-v1.schema.json +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/schemas/repository-attachment.schema.json +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/server_console_services.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/server_relay.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/server_service.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/status_model.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/status_reconciliation.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/storage.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/submission_cli.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/submission_intake.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/submission_service.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/system_installation_topology.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/system_server_service.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/telemetry.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/terminal_evidence_reconciliation.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/validation_identity.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/validation_profile.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/version_preparation_delivery.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/workspace_preflight.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/worktree_provenance.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/worktree_tooling.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform.egg-info/SOURCES.txt +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform.egg-info/dependency_links.txt +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform.egg-info/entry_points.txt +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform.egg-info/top_level.txt +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/tests/test_adaptive_action_sizing_design.py +0 -0
- {engineering_platform-2.3.75 → engineering_platform-2.3.77}/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.77",
|
|
5
5
|
"handoff_protocol": 1,
|
|
6
6
|
"memory_format": 2,
|
|
7
7
|
"minimum_codex_cli": "0.146.0",
|
|
8
8
|
"inbox_protocol": 1,
|
|
9
|
-
"platform_version": "2.3.
|
|
9
|
+
"platform_version": "2.3.77",
|
|
10
10
|
"report_format": 2,
|
|
11
|
-
"runner_version": "2.3.
|
|
11
|
+
"runner_version": "2.3.77",
|
|
12
12
|
"status_model": 1,
|
|
13
13
|
"storage_schema": 45,
|
|
14
|
-
"watcher_version": "2.3.
|
|
14
|
+
"watcher_version": "2.3.77"
|
|
15
15
|
}
|
|
@@ -8209,6 +8209,29 @@ function promptDetailReviewersSection(reviewers, { wide = true } = {}) {
|
|
|
8209
8209
|
);
|
|
8210
8210
|
return promptDetailCard(t("detail.specialist_reviews"), fields, wide, "prompt-detail-card--reviewers");
|
|
8211
8211
|
}
|
|
8212
|
+
function promptDetailAssuranceReviewsSection(reviews) {
|
|
8213
|
+
if (!reviews.length) return null;
|
|
8214
|
+
const fields = reviews.map((review) => {
|
|
8215
|
+
const findings = Array.isArray(review.findings) ? review.findings : [];
|
|
8216
|
+
const candidate = String(review.candidate_sha || "").trim();
|
|
8217
|
+
const lines = [
|
|
8218
|
+
assuranceStatusLabel(review.status || "UNRESOLVED"),
|
|
8219
|
+
candidate ? t("detail.candidate_sha") + ": " + candidate : null,
|
|
8220
|
+
...(findings.length
|
|
8221
|
+
? findings.map((finding) => String(finding?.observation || "").trim()).filter(Boolean)
|
|
8222
|
+
: [t("lifecycle.assurance_no_findings")]),
|
|
8223
|
+
].filter(Boolean);
|
|
8224
|
+
return detailField(
|
|
8225
|
+
reviewerLabel(review.reviewer, t("detail.specialist_review")),
|
|
8226
|
+
lines.join("\n"),
|
|
8227
|
+
true,
|
|
8228
|
+
);
|
|
8229
|
+
});
|
|
8230
|
+
return promptDetailCard(
|
|
8231
|
+
t("lifecycle.detail_assurance"), fields, true,
|
|
8232
|
+
"prompt-detail-card--assurance-reviews",
|
|
8233
|
+
);
|
|
8234
|
+
}
|
|
8212
8235
|
function promptDetailProviderReviewSections(usage, reviewers, commitTimeline) {
|
|
8213
8236
|
const usageCard = promptDetailUsageSection(usage);
|
|
8214
8237
|
const reviewerCard = promptDetailReviewersSection(reviewers, { wide: false });
|
|
@@ -8242,6 +8265,11 @@ function renderPromptHistoryDetail(payload) {
|
|
|
8242
8265
|
commitTimeline = payload?.commit_timeline || [],
|
|
8243
8266
|
evidence = Array.isArray(payload?.evidence) ? payload.evidence : [],
|
|
8244
8267
|
reviewers = Array.isArray(payload?.reviewers) ? payload.reviewers : [],
|
|
8268
|
+
assuranceReviews = Array.isArray(payload?.assurance_reviews)
|
|
8269
|
+
? payload.assurance_reviews
|
|
8270
|
+
: (Array.isArray(payload?.lifecycle?.steps)
|
|
8271
|
+
? payload.lifecycle.steps.find((step) => step?.id === "QUALITY_CONTROL_AGENT")?.assurance_reviews || []
|
|
8272
|
+
: []),
|
|
8245
8273
|
activity = history.execution_activity_summary,
|
|
8246
8274
|
recommendationHandoff = payload?.recommendation_handoff;
|
|
8247
8275
|
const [executionSummary, executionContext] = promptDetailExecutionSections(history);
|
|
@@ -8266,6 +8294,7 @@ function renderPromptHistoryDetail(payload) {
|
|
|
8266
8294
|
lifecycleFlow(payload?.lifecycle, { historical: true }),
|
|
8267
8295
|
statusReconciliationCard(payload?.lifecycle?.recovery),
|
|
8268
8296
|
promptDetailProviderReviewSections(usage, reviewers, commitTimeline),
|
|
8297
|
+
promptDetailAssuranceReviewsSection(assuranceReviews),
|
|
8269
8298
|
promptDetailRecommendationHandoff(recommendationHandoff),
|
|
8270
8299
|
].filter(Boolean),
|
|
8271
8300
|
);
|
|
@@ -12,7 +12,7 @@ from .storage import ENGINEERING_STORAGE_SCHEMA_VERSION
|
|
|
12
12
|
|
|
13
13
|
SEMVER = re.compile(r"^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$")
|
|
14
14
|
CONTRACT = re.compile(r"^(\d{4})\.(0[1-9]|1[0-2])$")
|
|
15
|
-
CURRENT_PLATFORM_VERSION = "2.3.
|
|
15
|
+
CURRENT_PLATFORM_VERSION = "2.3.77"
|
|
16
16
|
MANIFEST_FIELDS = frozenset(
|
|
17
17
|
{
|
|
18
18
|
"platform_version",
|
{engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/server.py
RENAMED
|
@@ -87,7 +87,11 @@ from .component_logging import (
|
|
|
87
87
|
component_logger,
|
|
88
88
|
log_event,
|
|
89
89
|
)
|
|
90
|
-
from .agent_state import
|
|
90
|
+
from .agent_state import (
|
|
91
|
+
MAX_COMMIT_EVIDENCE_RECORDS,
|
|
92
|
+
is_valid_commit_evidence_record,
|
|
93
|
+
redact_diagnostic,
|
|
94
|
+
)
|
|
91
95
|
from .codex_chat import (
|
|
92
96
|
CHAT_RETENTION_DAYS,
|
|
93
97
|
MAX_HISTORY_ITEMS,
|
|
@@ -3429,15 +3433,58 @@ def _central_console_validation_evidence(
|
|
|
3429
3433
|
return projected
|
|
3430
3434
|
|
|
3431
3435
|
|
|
3436
|
+
def _central_console_checkpoint_commit_timeline(
|
|
3437
|
+
data_root: Path, project_id: str, submission_id: str, run_id: str, outcome: str,
|
|
3438
|
+
) -> list[dict[str, str]]:
|
|
3439
|
+
"""Project strict phase commits from one exactly bound terminal checkpoint."""
|
|
3440
|
+
try:
|
|
3441
|
+
with storage.sqlite_connection(data_root / SERVER_DATABASE_FILENAME) as connection:
|
|
3442
|
+
row = connection.execute(
|
|
3443
|
+
"""SELECT t.payload,t.phase,d.state
|
|
3444
|
+
FROM engineering_transactions AS t
|
|
3445
|
+
JOIN ep_parity_lifecycle_dispatches AS d ON d.run_id=t.run_id
|
|
3446
|
+
WHERE d.project_id=? AND d.submission_id=? AND d.run_id=?""",
|
|
3447
|
+
(project_id, submission_id, run_id),
|
|
3448
|
+
).fetchone()
|
|
3449
|
+
except sqlite3.Error:
|
|
3450
|
+
return []
|
|
3451
|
+
if row is None or row[1] != outcome or row[2] != outcome:
|
|
3452
|
+
return []
|
|
3453
|
+
try:
|
|
3454
|
+
checkpoint = json.loads(str(row[0]))
|
|
3455
|
+
except (TypeError, ValueError, json.JSONDecodeError):
|
|
3456
|
+
return []
|
|
3457
|
+
if (
|
|
3458
|
+
not isinstance(checkpoint, Mapping)
|
|
3459
|
+
or checkpoint.get("run_id") != run_id
|
|
3460
|
+
or checkpoint.get("phase") != outcome
|
|
3461
|
+
or checkpoint.get("terminal") is not True
|
|
3462
|
+
):
|
|
3463
|
+
return []
|
|
3464
|
+
raw = checkpoint.get("commit_evidence")
|
|
3465
|
+
if (
|
|
3466
|
+
not isinstance(raw, list)
|
|
3467
|
+
or len(raw) > MAX_COMMIT_EVIDENCE_RECORDS
|
|
3468
|
+
or any(not is_valid_commit_evidence_record(item) for item in raw)
|
|
3469
|
+
):
|
|
3470
|
+
return []
|
|
3471
|
+
events = [dict(item) for item in raw]
|
|
3472
|
+
identities = {(item["phase"], item["commit_sha"]) for item in events}
|
|
3473
|
+
if len(identities) != len(events):
|
|
3474
|
+
return []
|
|
3475
|
+
return sorted(events, key=lambda item: item["observed_at"])
|
|
3476
|
+
|
|
3477
|
+
|
|
3432
3478
|
def _central_console_terminal_revision_timeline(
|
|
3433
3479
|
data_root: Path, project_id: str, run_id: str,
|
|
3434
3480
|
) -> list[dict[str, str]]:
|
|
3435
|
-
"""Project an exact terminal
|
|
3481
|
+
"""Project verified phase commits plus an exact terminal revision fallback.
|
|
3436
3482
|
|
|
3437
|
-
|
|
3438
|
-
|
|
3439
|
-
|
|
3440
|
-
|
|
3483
|
+
The immutable terminal artifact first proves the project/submission/run
|
|
3484
|
+
binding. The terminal CENTRAL checkpoint then supplies the append-only
|
|
3485
|
+
phase commit records that the execution host actually verified. A
|
|
3486
|
+
successful no-change run has no phase commit, so its artifact revision is
|
|
3487
|
+
retained as a distinct fallback rather than being called a phase commit.
|
|
3441
3488
|
"""
|
|
3442
3489
|
try:
|
|
3443
3490
|
with storage.sqlite_connection(data_root / SERVER_DATABASE_FILENAME) as connection:
|
|
@@ -3449,6 +3496,7 @@ def _central_console_terminal_revision_timeline(
|
|
|
3449
3496
|
WHERE d.project_id=? AND d.run_id=?
|
|
3450
3497
|
AND a.artifact_type='EP_TERMINAL_EVIDENCE'
|
|
3451
3498
|
AND a.integrity_status='VERIFIED'
|
|
3499
|
+
AND a.projection_status='AVAILABLE'
|
|
3452
3500
|
ORDER BY a.created_at DESC,a.artifact_id DESC LIMIT 1""",
|
|
3453
3501
|
(project_id, run_id),
|
|
3454
3502
|
).fetchone()
|
|
@@ -3472,25 +3520,31 @@ def _central_console_terminal_revision_timeline(
|
|
|
3472
3520
|
repository = evidence.get("repository")
|
|
3473
3521
|
if not all(isinstance(value, Mapping) for value in (submission, terminal_run, repository)):
|
|
3474
3522
|
return []
|
|
3523
|
+
submission_id = submission.get("id")
|
|
3475
3524
|
revision = repository.get("revision")
|
|
3476
3525
|
outcome = terminal_run.get("outcome")
|
|
3477
3526
|
if (
|
|
3478
3527
|
submission.get("project_id") != project_id
|
|
3528
|
+
or not isinstance(submission_id, str)
|
|
3479
3529
|
or terminal_run.get("id") != run_id
|
|
3480
3530
|
or outcome not in {"COMPLETE", "BLOCKED", "FAILED"}
|
|
3481
|
-
or not isinstance(revision, str)
|
|
3482
|
-
or re.fullmatch(r"[0-9a-f]{40}", revision) is None
|
|
3483
3531
|
):
|
|
3484
3532
|
return []
|
|
3485
3533
|
observed_at = row[1]
|
|
3486
3534
|
if not isinstance(observed_at, str) or not observed_at.strip():
|
|
3487
3535
|
return []
|
|
3488
|
-
|
|
3489
|
-
|
|
3490
|
-
|
|
3491
|
-
|
|
3492
|
-
"
|
|
3493
|
-
|
|
3536
|
+
events = _central_console_checkpoint_commit_timeline(
|
|
3537
|
+
data_root, project_id, submission_id, run_id, str(outcome),
|
|
3538
|
+
)
|
|
3539
|
+
if isinstance(revision, str) and re.fullmatch(r"[0-9a-f]{40}", revision):
|
|
3540
|
+
if not any(item["commit_sha"] == revision for item in events):
|
|
3541
|
+
events.append({
|
|
3542
|
+
"phase": "TERMINAL",
|
|
3543
|
+
"observed_at": observed_at,
|
|
3544
|
+
"commit_sha": revision,
|
|
3545
|
+
"description": "terminal_repository_revision_verified",
|
|
3546
|
+
})
|
|
3547
|
+
return sorted(events, key=lambda item: item["observed_at"])
|
|
3494
3548
|
|
|
3495
3549
|
|
|
3496
3550
|
def _central_console_current_execution_diagnostic(data_root: Path, project_id: str) -> str | None:
|
|
@@ -3616,6 +3670,48 @@ def _central_console_reviewer_agents(
|
|
|
3616
3670
|
return from_report or _central_console_invocation_reviewers(data_root, run_id)
|
|
3617
3671
|
|
|
3618
3672
|
|
|
3673
|
+
def _central_console_assurance_reviews(
|
|
3674
|
+
lifecycle: Mapping[str, object],
|
|
3675
|
+
) -> list[dict[str, object]]:
|
|
3676
|
+
"""Project the candidate-bound Quality/Security evidence separately.
|
|
3677
|
+
|
|
3678
|
+
Capability reviewers explain why a specialist was selected. Mandatory
|
|
3679
|
+
post-implementation assurance instead proves Quality and Security against
|
|
3680
|
+
one exact candidate. Keeping these contracts separate prevents terminal
|
|
3681
|
+
detail from hiding assurance or presenting a PASS as a recommendation.
|
|
3682
|
+
"""
|
|
3683
|
+
steps = lifecycle.get("steps")
|
|
3684
|
+
if not isinstance(steps, list):
|
|
3685
|
+
return []
|
|
3686
|
+
quality_step = next((
|
|
3687
|
+
step for step in steps
|
|
3688
|
+
if isinstance(step, Mapping) and step.get("id") == "QUALITY_CONTROL_AGENT"
|
|
3689
|
+
), None)
|
|
3690
|
+
reviews = quality_step.get("assurance_reviews") if isinstance(quality_step, Mapping) else None
|
|
3691
|
+
if not isinstance(reviews, list) or len(reviews) > 16:
|
|
3692
|
+
return []
|
|
3693
|
+
projected: list[dict[str, object]] = []
|
|
3694
|
+
for review in reviews:
|
|
3695
|
+
if not isinstance(review, Mapping):
|
|
3696
|
+
continue
|
|
3697
|
+
reviewer = review.get("reviewer")
|
|
3698
|
+
status = review.get("status")
|
|
3699
|
+
candidate_sha = review.get("candidate_sha")
|
|
3700
|
+
findings = review.get("findings")
|
|
3701
|
+
if (
|
|
3702
|
+
reviewer not in {"quality", "security"}
|
|
3703
|
+
or status not in {"PASS", "FAIL", "UNRESOLVED"}
|
|
3704
|
+
or not isinstance(candidate_sha, str)
|
|
3705
|
+
or re.fullmatch(r"[0-9a-f]{40}", candidate_sha) is None
|
|
3706
|
+
or not isinstance(findings, list)
|
|
3707
|
+
or len(findings) > 12
|
|
3708
|
+
or any(not isinstance(finding, Mapping) for finding in findings)
|
|
3709
|
+
):
|
|
3710
|
+
continue
|
|
3711
|
+
projected.append(dict(review))
|
|
3712
|
+
return projected
|
|
3713
|
+
|
|
3714
|
+
|
|
3619
3715
|
def _central_console_project_snapshot(data_root: Path, project_id: str) -> dict[str, object]:
|
|
3620
3716
|
"""Return the project status and terminal-history projections from CENTRAL.
|
|
3621
3717
|
|
|
@@ -3759,6 +3855,7 @@ def _central_console_run_detail(data_root: Path, project_id: str, run_id: str) -
|
|
|
3759
3855
|
"runtime": runtime,
|
|
3760
3856
|
"usage": _central_console_provider_usage(data_root, run_id),
|
|
3761
3857
|
"reviewers": _central_console_reviewer_agents(data_root, project_id, run_id),
|
|
3858
|
+
"assurance_reviews": _central_console_assurance_reviews(lifecycle),
|
|
3762
3859
|
"evidence": _central_console_validation_evidence(data_root, project_id, run_id),
|
|
3763
3860
|
# The historical detail dialog uses the same read-only bubble flow as
|
|
3764
3861
|
# the active card. Terminal history remains separate in the table,
|
|
@@ -5682,6 +5779,7 @@ class _HealthHandler(http.server.BaseHTTPRequestHandler):
|
|
|
5682
5779
|
"execution": detail.get("execution", {}),
|
|
5683
5780
|
"runtime": detail.get("runtime", {}),
|
|
5684
5781
|
"reviewers": detail.get("reviewers", []),
|
|
5782
|
+
"assurance_reviews": detail.get("assurance_reviews", []),
|
|
5685
5783
|
"commits": {},
|
|
5686
5784
|
"commit_timeline": detail.get("commit_timeline", []),
|
|
5687
5785
|
"pull_requests": [],
|
|
File without changes
|
|
File without changes
|
{engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/__init__.py
RENAMED
|
File without changes
|
{engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/__main__.py
RENAMED
|
File without changes
|
{engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/agent_state.py
RENAMED
|
File without changes
|
{engineering_platform-2.3.75 → engineering_platform-2.3.77}/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.75 → engineering_platform-2.3.77}/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.75 → engineering_platform-2.3.77}/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.75 → engineering_platform-2.3.77}/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.75 → engineering_platform-2.3.77}/src/engineering_platform/live_status.py
RENAMED
|
File without changes
|
{engineering_platform-2.3.75 → engineering_platform-2.3.77}/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
|
{engineering_platform-2.3.75 → engineering_platform-2.3.77}/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.75 → engineering_platform-2.3.77}/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.75 → engineering_platform-2.3.77}/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.75 → engineering_platform-2.3.77}/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.75 → engineering_platform-2.3.77}/src/engineering_platform/server_relay.py
RENAMED
|
File without changes
|
|
File without changes
|
{engineering_platform-2.3.75 → engineering_platform-2.3.77}/src/engineering_platform/status_model.py
RENAMED
|
File without changes
|
|
File without changes
|
{engineering_platform-2.3.75 → engineering_platform-2.3.77}/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.75 → engineering_platform-2.3.77}/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
|