Repository navigation
Conversation
This was referenced Oct 28, 2026
This was referenced Oct 28, 2026
yohamta0
force-pushed
the
stack/04-g4
branch
2 times, most recently
from
October 30, 2026 06:44
7cb7e73 to
dd2ab3f
Compare
yohamta0
force-pushed
the
stack/03-g3
branch
2 times, most recently
from
October 30, 2026 08:43
d706354 to
1c8051b
Compare
yohamta0
force-pushed
the
stack/04-g4
branch
2 times, most recently
from
October 31, 2026 09:21
2c37e10 to
4395524
Compare
…agucloud#3383) * Runtime: continuous runner bounds, outputs of selected step runs, synthetic data tool * Satisfy linters in the continuous runner * Fix continuous step reporting found in review * Write synthetic runs like the runner does * Align spec 013 wording with the code * Fix continuous step counts and step finish order * Record continuous step failures as they happen
… selected step runs; generated types
Convert sample counts through a saturating helper instead of raw uint64 to int64 casts, and name every run status in the conformance wait loop, treating a rejected run as finished.
A start request with outputs now has to say which run each step's outputs came from, so the integration test supplies outputsSources alongside outputs.
These fixtures use sh syntax that PowerShell does not parse, and one relies on sh rejecting an unresolved reference. Skip them on Windows as the other shell-dependent tests in this package do.
Fix the wording of ReusedOutputSource, and say that the streak and lastFailureAt of a step are approximate once the raw tier no longer holds the last failure.
A bad events cursor gets 400, a window where every sample failed has an availability of 0, a short outage has a length of 0 seconds, and a stopped event carries no failed count. The conformance test reads the tiers by the wall clock, gives CI more time, and checks the cursor. Spec 083 states what it covers, its errors, and an example.
Two saves from the same read of a DAG could both pass the hash check and the later one replace the earlier. A conditional update checks the hash and writes under a lock that every process sharing the DAG store takes. A failed re-read after a rejected spec is now returned instead of the hash of an empty spec.
An empty default is a default; the scope dropped it like no default.
Tag builds with the run ID, which works with any date command, give build an ID apart from its name so that the by-ID case resolves an ID, and assert the exact message for an invalid run ID.
The help and the skill reference said every skipped step; only the skipped steps that the selected steps depend on carry outputs.
outputsFromRuns accepted a run that never ran the step: a selected-steps run records the steps it did not carry as skipped by retry with no times, and those nodes passed as reusable. Only a node that succeeded or carried outputs (it has a finish time) can now give its outputs, both for the check and for reusedInputs. outputs without outputsSources is accepted again, as in released versions; such a step has no reusedInputs entry. dagu start --output keeps working as a deprecated flag that points to --output-from. The API descriptions, spec 013, and the CLI references say so. A plain spec update takes the lock that a conditional update holds, so it cannot land between the hash check and the write. When the lock directory is unusable, it writes without the lock, since no conditional update can take the lock there either. The step outputs endpoint shows outputs that only reach the published payload, as a reference resolves them, and shows the captured value of an output variable, which differs from the output value with output_schema. The events endpoint rejects a cursor the store did not give, as spec 083 says. The samples and events endpoints document their 400 response.
Nothing can reference the outputs of a handler step, so the scope gives a handler no outputs. It still copied the outputsKnown value of the step, so a handler that only a run would reveal names for said "runtime", and the editor then accepted references to it that the server rejects. A handler entry now says its empty list is final.
A run seeded from another run, such as a selected-steps run with outputsFromRunId or an ephemeral run, names the log files of the source run for its skipped steps. Removing the seeded run deleted those files, so the cleanup of an ephemeral run, ten minutes after it ended, took the step logs of a run that stays in the history. A run now removes only the step logs that lie in the log directory of one of its own attempts. The logs that an attempt carries from an earlier attempt of the same run still go with it.
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.
All PRs of the stack
Summary
This PR adds the intake, CLI and REST API for selected-step runs with carried outputs. It adds endpoints for step samples, events, availability and outputs. It adds editor endpoints for validation issues and reference scope. The OpenAPI file and the generated types are updated.
Why
PR 1 to PR 3 give the store, the state and the runtime. The UI PRs that follow need an API to read them and to start a run of chosen steps. This PR is the last backend step before the UI.
Changes
api/v1/api.yaml, generatedapi/v1/api.gen.go,ui/src/api/v1/schema.ts)/dag-runs/{name}/{dagRunId}/steps/{stepName}/:samples,events,availability,outputs.StepSamples,StepEvents,StepAvailability,StepOutputs,ReusedInput,ReusedOutputSource,ValidationIssue,ReferenceScope.outputsFromRuns,outputsSourcesandephemeral.internal/intake/steps.go,seed.go)SelectedStepNodes,LoadRunStepSources,CheckRunStepSources,CheckOutputSources,SelectionSkipsHandlers.internal/cmd/start_steps.go,start.go,remote_commands.go):--output-from <step>=<run-id>replaces--output. The old flag gives a clear error.internal/service/frontend/api/v1)step_samples.go,editor_step_outputs.go.start_steps.go: validatesoutputsFromRunsandephemeral, which needssteps.seeded_run.goanddagruns.goapply them.editor_issues.go,editor_scope.go,editor_scope_steps.go: structured validation issues and the reference scope.dags.go: spec validation returns a SHA-256.UpdateDAGSpecreturns 409 whenexpectedSha256differs.ephemeral_cleanup.goremoves ended ephemeral runs after a TTL.skills/dagu/references/cli.md,specs/021-mcp-read-tool.md.How to review
api/v1/api.yaml. Skipapi.gen.go.internal/intake/steps.go.start_steps.go(API) andstart_steps.go(CLI).step_samples.go, then the editor files.Pay most attention to these places:
CheckRunStepSources: a step can only be reused from a finished run where it succeeded.UpdateDAGSpec(409 on a stale hash).ephemeral_cleanup.go: a run that has not ended must never be removed.Tests
internal/service/frontend/api/v1:step_samples_test.go,start_steps_internal_test.go,editor_issues_test.go,editor_issues_api_test.go,editor_scope_test.go,editor_scope_steps_test.go,editor_scope_api_test.go,editor_step_outputs_test.go,dags_test.go.internal/intake/steps_test.go,internal/cmd/start_test.go,remote_commands_test.go.spec013_step_run/(ephemeral, from runs, handlers),spec083_continuous_runs/(API, status and log),spec021_mcp_read_tool/read_run_test.go,conformance/cli/start_test.go.Screenshots
No visible UI change in this PR.
The first UI PR that uses these endpoints comes after this one in the stack (PR 5 onward).