feat: expose operation graph in progress report - #717
Merged
Merged
Conversation
Operations now carry id, category and dependsOn; waitingFor and stageReports are removed in favor of a single flat operations slice. Meta and release operations are included, so cross-stage dependencies are visible through the stage boundary operations. Operations are ordered by a stable topological sort with id as the tie-break. Plans of one run form a single graph: operations of every plan after the first get an ordinal id prefix and the root operations of a plan depend on the final operations of the plan before it. Operations of a finished plan that never started are reported as Canceled, a new status, instead of staying Pending. Untouched resources are those without plan operations, including resources absent from the cluster whose creation a policy skipped; NoOp/Completed states that nothing was done, not that the resource exists. They are reported for the first plan only, so the NoUntouchedResources option is gone. A plan that is skipped reports its untouched resources alone via UntouchedResourcesOnly. AutoRollback together with LegacyProgressReportCh is rejected, and the reporter plumbing of the rollback path is removed as unreachable. ReleaseInstall and ReleaseUninstall now close LegacyProgressReportCh on every return path, so a consumer can simply range over it. The progrep JSON shape changes: stageReports and waitingFor are gone, operations, id, category, dependsOn and the Canceled status are added. docs/progress-report.md describes the report for library consumers. Signed-off-by: Dmitry Mordvinov <dmitry.mordvinov@flant.com>
dmmordvi
force-pushed
the
feat/progress-report-graph
branch
from
September 18, 2026 15:38
9428d6a to
4d3c2b0
Compare
dmmordvi
marked this pull request as ready for review
September 18, 2026 15:40
alexey-igrychev
added a commit
that referenced
this pull request
Sep 21, 2026
Ported main's #717 (operation graph in progress report) and #718 (ReleaseInstall returns a result) onto branch 2's rewritten release API. releaseInstall now returns (*ReleaseInstallResultV1, error); branch 2's plan-artifact handling, newReleaseLockManager helper and helmrel.Accessor signatures are kept, and the result uses helmreleasestatus.Status instead of main's helmrelease.Status. Signed-off-by: Aleksei Igrychev <aleksei.igrychev@palark.com>
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
The legacy progress report now exposes the plan as a graph: every operation carries
id,categoryanddependsOn, meta and release operations are included, and all plans of a run are reported as one flat, topologically ordered slice.stageReportsandwaitingForare removed.docs/progress-report.mddescribes the report for library consumers.Key changes
progrep.Operationgainsid,category,dependsOn;StageReportandwaitingForare gone,ProgressReportis a singleoperationsslice.StageStart/StageEnd) and release (CreateRelease/UpdateRelease/DeleteRelease) operations are reported, so cross-stage dependencies are visible.idprefix, their roots depend on the previous plan's sinks, and never-started operations of a finished plan becomeCanceled(new status), so the final snapshot has noPending.NoUntouchedResourcesis removed,UntouchedResourcesOnlycovers skipped plans.ReleaseInstallandReleaseUninstallcloseLegacyProgressReportChon every return path, including early errors, so a consumer canrangeover it.AutoRollbacktogether withLegacyProgressReportChis rejected; the unreachable rollback reporter plumbing is removed.Why
The consumer received a flat list with no structure: meta and release operations were filtered out, so
waitingForonly worked within a single chain and dependencies between resources in different stages were invisible. The graph lets the consumer render progress and ordering without reconstructing the plan.Verification
task test:unit paths="./pkg/plan ./pkg/action" tags=ai_tests, including a test that builds a real install plan and failure plan viaBuildPlan/BuildFailurePlanand checks the reported graph end to end.Canceledand the2/prefix included.Review focus / risks
stageReportsandwaitingFordisappear, meta and release operations appear in the list, so progress counters must filter bycategory; must be rolled out together with the consumer side.NoOp/Completedfor untouched resources now also covers resources absent from the cluster whose creation a policy skipped; it means "nothing was done", not "resource exists".AutoRollbackwithLegacyProgressReportChis a user-facing restriction; rollback reporting needs its own design.Timeout: at return, while the deployment may still be winding down inside nelm.