You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Provide deterministic, offline-reporting artifacts derived from existing StageResult/FullBuildResult data so users can inspect what happened and why without coupling reporting to executor state or adding scheduling logic.
Always produce a compact BuildSummary while making the detailed BuildReport opt-in via options to avoid unnecessary work in default runs.
Description
Added BuildSummary and pure builder build_summary(result) with deterministic serializers to_dict(), to_json(), and to_markdown() that count final products, missing inputs, approvals, and warnings. (src/buildcompiler/reporting/summary.py)
Implemented reporting-only BuildGraph with BuildGraphNode/BuildGraphEdge, deterministic dedupe, to_dict() and summary() and a pure build_graph(result) that derives nodes/edges from stage results, final products, missing inputs, and approvals without mutating results or scheduling. (src/buildcompiler/reporting/graph.py)
Implemented BuildReport and supporting dataclasses (StageReportSection, RouteReport, RecommendedAction, DependencyChainStep) plus build_report(result, graph) which extracts selected/rejected routes from StageResult.protocol_artifacts, explains blockers, recommends next actions and produces dependency-chain + graph summary; serialization helpers are provided and outputs are deterministic. (src/buildcompiler/reporting/report.py)
Wired reporting into the executor so FullBuildExecutor.execute(...) now: constructs a preliminary FullBuildResult, builds the reporting-only graph, always generates and attaches a BuildSummary, and attaches a BuildReport only when options.reporting.include_detailed_report is true; reporting exports were added to src/buildcompiler/reporting/__init__.py. (src/buildcompiler/execution/executor.py)
Added focused unit tests and a reporting fixture covering summary, graph, report, and executor reporting integration. (tests/unit/reporting/*, tests/unit/execution/test_executor_reporting.py)
Attempted full automated workflow with uv to create venv and run tests: failed due to external network restriction when fetching optional dependency SBOLInventory (network 403), which is unrelated to these changes and prevented the uv-driven run; smallest successful command set was the direct pytest invocation above.
Repo lint check ruff check . reported pre-existing repository issues outside the scope of this PR; those are deferred to separate cleanup.
Base executive summary on build status as well as blockers
This branch can emit a success-sounding summary even when the overall build failed, because it only checks missing_inputs and required_approvals. If a stage fails without producing blockers (for example, an execution error path with empty missing inputs), status can be failed while executive_summary says the build completed, which makes the detailed report internally inconsistent and misleading for users triaging failures.
Serialize required_stage with enum values in report output
Using str(x.required_stage) produces enum repr strings like BuildStage.ASSEMBLY_LVL1 instead of the contract-style stage value (assembly_lvl1), while other stage fields in this report use .value. That creates inconsistent output formats for required_stage and forces downstream consumers to handle two representations ("fatal" vs enum repr) for the same field.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Motivation
StageResult/FullBuildResultdata so users can inspect what happened and why without coupling reporting to executor state or adding scheduling logic.BuildSummarywhile making the detailedBuildReportopt-in via options to avoid unnecessary work in default runs.Description
BuildSummaryand pure builderbuild_summary(result)with deterministic serializersto_dict(),to_json(), andto_markdown()that count final products, missing inputs, approvals, and warnings. (src/buildcompiler/reporting/summary.py)BuildGraphwithBuildGraphNode/BuildGraphEdge, deterministic dedupe,to_dict()andsummary()and a purebuild_graph(result)that derives nodes/edges from stage results, final products, missing inputs, and approvals without mutating results or scheduling. (src/buildcompiler/reporting/graph.py)BuildReportand supporting dataclasses (StageReportSection,RouteReport,RecommendedAction,DependencyChainStep) plusbuild_report(result, graph)which extracts selected/rejected routes fromStageResult.protocol_artifacts, explains blockers, recommends next actions and produces dependency-chain + graph summary; serialization helpers are provided and outputs are deterministic. (src/buildcompiler/reporting/report.py)FullBuildExecutor.execute(...)now: constructs a preliminaryFullBuildResult, builds the reporting-only graph, always generates and attaches aBuildSummary, and attaches aBuildReportonly whenoptions.reporting.include_detailed_reportis true; reporting exports were added tosrc/buildcompiler/reporting/__init__.py. (src/buildcompiler/execution/executor.py)Testing
python -c "from buildcompiler.reporting import BuildGraph, BuildSummary, BuildReport"— passed.python -c "from buildcompiler.execution import FullBuildExecutor"— passed.pytest tests/unit/reporting/test_summary.py tests/unit/reporting/test_graph.py tests/unit/reporting/test_report.py tests/unit/execution/test_executor_reporting.py tests/unit/execution/test_executor.py— all tests passed (12 passed).uvto create venv and run tests: failed due to external network restriction when fetching optional dependencySBOLInventory(network 403), which is unrelated to these changes and prevented theuv-driven run; smallest successful command set was the directpytestinvocation above.ruff check .reported pre-existing repository issues outside the scope of this PR; those are deferred to separate cleanup.Codex Task