Skip to content

feat: add log step type#2101

Merged
yottahmd merged 4 commits intomainfrom
codex/add-log-step-type
May 6, 2026
Merged

feat: add log step type#2101
yottahmd merged 4 commits intomainfrom
codex/add-log-step-type

Conversation

@yottahmd
Copy link
Copy Markdown
Collaborator

@yottahmd yottahmd commented May 6, 2026

Summary

  • add a built-in log step type that writes its resolved message to stdout
  • register and validate log in the DAG spec/schema/runtime
  • show log step output directly in the run status UI after execution, and show configured log messages in definition/details views

Testing

  • go test ./internal/runtime/builtin ./internal/runtime/builtin/log ./internal/core/spec ./internal/runtime ./internal/cmn/schema -count=1
  • pnpm exec vitest run src/lib/__tests__/executor-utils.test.ts src/features/dags/components/dag-details/__tests__/DAGStepTableRow.test.tsx src/features/dags/components/dag-details/__tests__/NodeStatusTableRow.test.tsx src/features/dags/components/step-details/__tests__/StepDetails.test.tsx
  • pnpm typecheck
  • pnpm build
  • git diff --check

Summary by CodeRabbit

  • New Features

    • Added "log" executor type allowing steps to emit configured messages.
    • UI: displays log messages in step tables, step details, and node status with truncation, tooltips, and remote log viewing.
    • Variable expansion for log messages and log output formatting/sanitization utilities.
  • Tests

    • Schema and unit tests added/updated to validate log executor/config behavior and runtime output.

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 6, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 1ba9d841-e651-4d60-9ed1-8d7454a9306a

📥 Commits

Reviewing files that changed from the base of the PR and between 80c67cd and 0518630.

📒 Files selected for processing (9)
  • internal/cmn/schema/dag.schema.json
  • internal/cmn/schema/dag_schema_test.go
  • internal/core/spec/step_test.go
  • internal/runtime/builtin/log/log.go
  • internal/runtime/builtin/log/log_test.go
  • ui/src/features/dags/components/dag-details/LogStepMessage.tsx
  • ui/src/features/dags/components/dag-details/NodeStatusTableRow.tsx
  • ui/src/features/dags/components/dag-details/__tests__/NodeStatusTableRow.test.tsx
  • ui/src/lib/executor-utils.ts
🚧 Files skipped from review as they are similar to previous changes (2)
  • ui/src/features/dags/components/dag-details/NodeStatusTableRow.tsx
  • internal/cmn/schema/dag.schema.json

📝 Walkthrough

Walkthrough

Adds a new "log" executor type: schema entries, runtime registration and implementation, YAML/schema tests, UI utilities and components to display configured log messages, API-driven log fetching/display in status rows, and multiple unit tests covering schema, runtime, and UI paths.

Changes

Log Executor Implementation & UI Integration

Layer / File(s) Summary
Schema Definition
internal/cmn/schema/dag.schema.json
Adds builtinExecutorType enum member "log"; introduces public logExecutorConfig requiring message; wires "log" to logExecutorConfig for both step-level with and executor config validation in two schema locations.
Schema Tests / Resolver
internal/cmn/schema/dag_schema_test.go
Reworked definition resolution to build root schema + Ref; added tests ensuring log steps and executor objects require message in both canonical and legacy forms.
Core Type Registration
internal/core/spec/step_types.go
Inserted "log" into builtinStepTypeNames map.
Runtime Builtins Registry
internal/runtime/builtin/builtin.go
Blank-imported internal/runtime/builtin/log to register the new executor.
Runtime Executor Implementation
internal/runtime/builtin/log/log.go
New internal log executor that validates config via JSON Schema, expands variables, writes a message to stdout (avoids duplicating trailing newline), supports SetStdout/Kill, and registers its schema/type on init.
Runtime Executor Tests
internal/runtime/builtin/log/log_test.go
Tests for stdout writing, trailing-newline handling, context cancellation behavior, and missing-message validation.
Core YAML Loading Test
internal/core/spec/step_test.go
Registered log capability in TestMain and added TestLoadYAMLLogStep to validate YAML loading of a log step.
Variable Expansion Test
internal/runtime/node_internal_test.go
Added TestSetupExecutor_LogMessageExpandsVariables verifying environment-variable expansion in log messages.
UI Executor Utilities
ui/src/lib/executor-utils.ts
Added getLogStepMessage, getLogMessageFromConfig, and formatLogStepOutput (ANSI stripping, newline normalization).
UI Executor Utilities Tests
ui/src/lib/__tests__/executor-utils.test.ts
Tests for message extraction and log output formatting (CRLF->LF, strip ANSI, trim trailing newline).
Log Message Display Component
ui/src/features/dags/components/dag-details/LogStepMessage.tsx
New LogStepMessage component: single-line truncation (72 chars), multiline <pre> rendering, tooltip for truncated/multiline content, and accessibility labels.
Step Table Integration & Tests
ui/src/features/dags/components/dag-details/DAGStepTableRow.tsx, ui/src/features/dags/components/dag-details/__tests__/DAGStepTableRow.test.tsx
Uses getLogStepMessage(step) and conditionally renders LogStepMessage in the Execution cell; test verifies rendering of log-step label.
Node Status Enhancement & Tests
ui/src/features/dags/components/dag-details/NodeStatusTableRow.tsx, ui/src/features/dags/components/dag-details/__tests__/NodeStatusTableRow.test.tsx
Added queries to fetch stdout for standard and sub-DAG runs, derived flags (isSubDAGRun, shouldFetchLogStepOutput), logOutputContent/logStepDisplayMessage, desktop/mobile rendering to show LogStepMessage and formatted output, and tests verifying substituted messages and fallback behavior.
Step Details Rendering & Tests
ui/src/features/dags/components/step-details/StepDetails.tsx, ui/src/features/dags/components/step-details/__tests__/StepDetails.test.tsx
New ExecutorConfigField used for executorConfig; when type is "log", displays message via LogStepMessage; tests assert presence of "Executor" and "Message" labels and log message rendering.
Misc UI Import Refactor
ui/src/features/dags/components/dag-details/SubDAGRunsList.tsx
Split combined imports (moved STATUS_DISPLAY_LABELS and StatusDot to separate imports).

Sequence Diagram

sequenceDiagram
    participant User
    participant DAGRuntime as DAG Runtime
    participant LogExec as Log Executor
    participant API as API/Stdout
    participant UI

    User->>DAGRuntime: Load DAG with log step
    DAGRuntime->>DAGRuntime: Validate schema (type="log")
    DAGRuntime->>LogExec: Instantiate log executor with config
    LogExec->>LogExec: Validate config (message required)
    LogExec->>LogExec: Expand variables in message
    LogExec->>API: Write message to stdout

    UI->>API: Request DAG run & step details
    API-->>UI: Return step with executorConfig
    UI->>UI: getLogStepMessage / getLogMessageFromConfig
    UI->>UI: Render LogStepMessage component
    UI->>API: Fetch step stdout (if available)
    API-->>UI: Return stdout content
    UI->>UI: formatLogStepOutput (strip ANSI, normalize newlines)
    UI->>UI: Render formatted output in NodeStatusTableRow
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

  • dagucloud/dagu#1987: Modifies DAG schema executor typing and adds builtin executor values — related to the schema changes here.
  • dagucloud/dagu#1978: Adds builtin executor implementations and updates builtin registry imports — related to runtime registration patterns used here.
  • dagucloud/dagu#2052: Registers new built-in executor types and touches step_types.go / builtin imports — similar registration changes.
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 12.50% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'feat: add log step type' clearly and concisely describes the main change: adding a new log step type. It is specific, follows conventional commit format, and directly reflects the primary objective of the changeset.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/add-log-step-type

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
internal/core/spec/step_test.go (1)

21-62: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

"log" executor capabilities not registered in TestMain.

Every other builtin type recognized in this package (including "mail" with empty capabilities) is explicitly registered via core.RegisterExecutorCapabilities in TestMain. The new "log" type is absent. TestLoadYAMLLogStep currently passes because the test YAML contains no command/script/shell/container fields, but the omission is inconsistent and will silently affect future tests that probe capability validation for log steps.

🛡️ Proposed fix
 // mail: no command support
 core.RegisterExecutorCapabilities("mail", core.ExecutorCapabilities{})
 // chat: LLM executor
 core.RegisterExecutorCapabilities("chat", core.ExecutorCapabilities{LLM: true})
+// log: no command support
+core.RegisterExecutorCapabilities("log", core.ExecutorCapabilities{})
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/core/spec/step_test.go` around lines 21 - 62, TestMain is missing
registration for the "log" executor; add a call to
core.RegisterExecutorCapabilities("log", core.ExecutorCapabilities{}) in
TestMain ( alongside the existing registrations like "mail" ) so the "log" type
is explicitly recognized by tests and future capability validation (use the same
empty capabilities as "mail" unless log should have specific flags).
🧹 Nitpick comments (6)
ui/src/features/dags/components/dag-details/__tests__/NodeStatusTableRow.test.tsx (2)

115-122: 💤 Low value

toHaveClass('w-[320px]') ties the test to a Tailwind implementation detail.

If LogStepMessage's width is ever adjusted, this assertion fails without any semantic regression. The test already validates the element is present and has no SVG icon; the class check adds low informational value.

♻️ Consider removing the class assertion
 const message = screen.getByLabelText('Log message: Deploying production');
 expect(message).toBeInTheDocument();
-expect(message).toHaveClass('w-[320px]');
 expect(message.querySelector('svg')).not.toBeInTheDocument();
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@ui/src/features/dags/components/dag-details/__tests__/NodeStatusTableRow.test.tsx`
around lines 115 - 122, Remove the brittle Tailwind-specific assertion in the
NodeStatusTableRow test: delete the expect(message).toHaveClass('w-[320px]')
line in the test (the variable is message from getByLabelText('Log message:
Deploying production')) so the test relies on semantic behavior only (presence,
absence of SVG, no interpolated text), not a concrete CSS utility class.

53-65: 💤 Low value

useQuery mock keyed solely on init truthiness is brittle.

The mock distinguishes calls by whether the second argument (init) is truthy, returning { content: 'Deploying production\n' } for any call where init is provided. If NodeStatusTableRow adds a second useQuery call that also passes an init value (or the current call loses its init), the mock silently changes behavior without a test failure.

Consider tying the mock to the actual path argument instead:

♻️ More explicit mock
-mockedUseQuery.mockImplementation((_, init) => ({
-  data: init ? { content: 'Deploying production\n' } : undefined,
+mockedUseQuery.mockImplementation((path) => ({
+  data: String(path).includes('/stdout') ? { content: 'Deploying production\n' } : undefined,
   isLoading: false,
   error: undefined,
   isValidating: false,
   mutate: vi.fn(),
 }));
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@ui/src/features/dags/components/dag-details/__tests__/NodeStatusTableRow.test.tsx`
around lines 53 - 65, The current mockedUseQuery implementation only branches on
init truthiness which is brittle; update the mock
(mockedUseQuery.mockImplementation used in the beforeEach for NodeStatusTableRow
tests) to switch behavior based on the first argument (the query path) instead
of just init, returning the specific { data: { content: 'Deploying production\n'
}, isLoading: false, error: undefined, isValidating: false, mutate: vi.fn() }
for the exact path NodeStatusTableRow expects and a safe default for other paths
so additional useQuery calls won’t accidentally change test behavior.
ui/src/lib/executor-utils.ts (1)

76-87: 💤 Low value

Pre-compile the ANSI regex once.

new RegExp(ANSI_CODES_REGEX, 'g') is rebuilt on every call to formatLogStepOutput. Since the source is a hardcoded constant, hoisting the compiled RegExp to module scope avoids the per-call recompilation. (The ast-grep ReDoS hint is a false positive — the pattern isn't user-controlled.)

Proposed fix
-const ANSI_CODES_REGEX = [
+const ANSI_CODES_PATTERN = [
   '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)',
   '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))',
 ].join('|');
+const ANSI_CODES_REGEX = new RegExp(ANSI_CODES_PATTERN, 'g');

 export function formatLogStepOutput(content: string): string {
   return content
-    .replace(new RegExp(ANSI_CODES_REGEX, 'g'), '')
+    .replace(ANSI_CODES_REGEX, '')
     .replace(/\r\n/g, '\n')
     .replace(/\r/g, '\n')
     .replace(/\n+$/, '');
 }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ui/src/lib/executor-utils.ts` around lines 76 - 87, The ANSI regex is being
recompiled on every call to formatLogStepOutput; hoist its compiled RegExp to
module scope by creating a constant (e.g., ANSI_CODES_RE or ANSI_CODES_REGEX_RE)
initialized with new RegExp(ANSI_CODES_REGEX, 'g') and then update
formatLogStepOutput to use that precompiled RegExp instead of calling new
RegExp(...) each time; keep the existing ANSI_CODES_REGEX string constant
unchanged and only replace the RegExp construction site.
ui/src/features/dags/components/dag-details/NodeStatusTableRow.tsx (1)

199-201: 💤 Low value

Drop unnecessary nullable accesses on the required dagRun prop.

Props.dagRun is typed as non-optional, so dagRun?.name (line 221) and the || '' fallback for dagRun.rootDAGRunId on line 200 are defensive but redundant — and the whenEnabled gating already ensures rootDAGRunId/rootDAGRunName are truthy strings before the sub-DAG query fires. Minor cleanup; aligns with the rest of the file (e.g. line 148 destructures dagRun directly).

Also applies to: 221-222

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ui/src/features/dags/components/dag-details/NodeStatusTableRow.tsx` around
lines 199 - 201, Remove the redundant nullable checks on the required dagRun
prop in NodeStatusTableRow: replace uses like dagRun?.name and
dagRun.rootDAGRunId || '' with direct accesses (dagRun.name,
dagRun.rootDAGRunId) since Props.dagRun is non-optional and the whenEnabled
gating already guarantees rootDAGRunId/rootDAGRunName are truthy before the
sub-DAG query runs; update the JSX/logic in NodeStatusTableRow where dagRun is
destructured and where rootDAGRunId/rootDAGRunName are referenced to use direct
property access without optional chaining or empty-string fallbacks.
ui/src/features/dags/components/dag-details/LogStepMessage.tsx (1)

65-65: 💤 Low value

Consider truncating aria-label for long messages.

aria-label={Log message: ${formatSingleLine(message)}} will read out the entire message — including very long or multiline content — to assistive tech users on every focus. Consider using the truncated single-line variant (or a short label) to keep the announcement concise.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ui/src/features/dags/components/dag-details/LogStepMessage.tsx` at line 65,
The ARIA label on the LogStepMessage component currently uses the full formatted
message (aria-label={`Log message: ${formatSingleLine(message)}`}), which can be
excessively long; change it to a concise/truncated variant by computing a
shortLabel (e.g., call formatSingleLine(message) then truncate to a safe max
length like 100–150 chars and append an ellipsis) and use that in aria-label
(`aria-label={`Log message: ${shortLabel}`}`) so assistive tech receives a
brief, single-line announcement; implement the truncation where LogStepMessage
renders the label (or add a small helper truncate function referenced by
LogStepMessage).
internal/runtime/builtin/log/log.go (1)

61-70: 💤 Low value

Run ignores ctx cancellation.

For a one-shot io.WriteString this is rarely problematic, but for parity with other executors and to avoid emitting output after a step has been cancelled, consider an early ctx.Err() check before writing.

Optional fix
-func (e *logExecutor) Run(_ context.Context) error {
+func (e *logExecutor) Run(ctx context.Context) error {
+	if err := ctx.Err(); err != nil {
+		return err
+	}
 	if _, err := io.WriteString(e.stdout, e.message); err != nil {
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/runtime/builtin/log/log.go` around lines 61 - 70, The Run method of
logExecutor should respect ctx cancellation: before performing the initial
io.WriteString to e.stdout check if ctx.Err() != nil and return that error if
set, and likewise check ctx.Err() again before writing the final "\n" so you
don't emit output after cancellation; keep existing behavior and error returns
from io.WriteString on success paths. Reference the logExecutor.Run method and
fields e.stdout and e.message when making the changes.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@internal/cmn/schema/dag.schema.json`:
- Around line 1977-1989: The schema allows { "type": "log" } to validate without
the required message because the "if" lacks required:["type"] and the "then"
only defines properties for "with"/"config" but doesn't require them; update the
"if" blocks (the ones surrounding the "type": "log" condition used by step and
executorObject) to include "required": ["type"], and change the corresponding
"then" to enforce that either "with" or deprecated "config" must be present
(e.g., add a oneOf/anyOf with [{"required":["with"]},{"required":["config"]}])
while keeping their $ref to "#/definitions/logExecutorConfig" so the required
message field in logExecutorConfig is enforced; apply the same change to the
other occurrence around lines 5369-5376.

In `@ui/src/features/dags/components/dag-details/NodeStatusTableRow.tsx`:
- Around line 187-241: logStepDisplayMessage currently returns 'Loading log
output...' whenever shouldFetchLogStepOutput is true and logOutputContent isn't
a string; change it to fall back to the static logMessage when the corresponding
query has errored. Inspect subDAGLogQuery.error and dagRunLogQuery.error (based
on isSubDAGRun) and, if an error is present, return logMessage instead of the
loading text; otherwise preserve the existing logic that uses
formatLogStepOutput(logOutputContent) for string content and keeps the loading
text while the query is pending.

---

Outside diff comments:
In `@internal/core/spec/step_test.go`:
- Around line 21-62: TestMain is missing registration for the "log" executor;
add a call to core.RegisterExecutorCapabilities("log",
core.ExecutorCapabilities{}) in TestMain ( alongside the existing registrations
like "mail" ) so the "log" type is explicitly recognized by tests and future
capability validation (use the same empty capabilities as "mail" unless log
should have specific flags).

---

Nitpick comments:
In `@internal/runtime/builtin/log/log.go`:
- Around line 61-70: The Run method of logExecutor should respect ctx
cancellation: before performing the initial io.WriteString to e.stdout check if
ctx.Err() != nil and return that error if set, and likewise check ctx.Err()
again before writing the final "\n" so you don't emit output after cancellation;
keep existing behavior and error returns from io.WriteString on success paths.
Reference the logExecutor.Run method and fields e.stdout and e.message when
making the changes.

In
`@ui/src/features/dags/components/dag-details/__tests__/NodeStatusTableRow.test.tsx`:
- Around line 115-122: Remove the brittle Tailwind-specific assertion in the
NodeStatusTableRow test: delete the expect(message).toHaveClass('w-[320px]')
line in the test (the variable is message from getByLabelText('Log message:
Deploying production')) so the test relies on semantic behavior only (presence,
absence of SVG, no interpolated text), not a concrete CSS utility class.
- Around line 53-65: The current mockedUseQuery implementation only branches on
init truthiness which is brittle; update the mock
(mockedUseQuery.mockImplementation used in the beforeEach for NodeStatusTableRow
tests) to switch behavior based on the first argument (the query path) instead
of just init, returning the specific { data: { content: 'Deploying production\n'
}, isLoading: false, error: undefined, isValidating: false, mutate: vi.fn() }
for the exact path NodeStatusTableRow expects and a safe default for other paths
so additional useQuery calls won’t accidentally change test behavior.

In `@ui/src/features/dags/components/dag-details/LogStepMessage.tsx`:
- Line 65: The ARIA label on the LogStepMessage component currently uses the
full formatted message (aria-label={`Log message:
${formatSingleLine(message)}`}), which can be excessively long; change it to a
concise/truncated variant by computing a shortLabel (e.g., call
formatSingleLine(message) then truncate to a safe max length like 100–150 chars
and append an ellipsis) and use that in aria-label (`aria-label={`Log message:
${shortLabel}`}`) so assistive tech receives a brief, single-line announcement;
implement the truncation where LogStepMessage renders the label (or add a small
helper truncate function referenced by LogStepMessage).

In `@ui/src/features/dags/components/dag-details/NodeStatusTableRow.tsx`:
- Around line 199-201: Remove the redundant nullable checks on the required
dagRun prop in NodeStatusTableRow: replace uses like dagRun?.name and
dagRun.rootDAGRunId || '' with direct accesses (dagRun.name,
dagRun.rootDAGRunId) since Props.dagRun is non-optional and the whenEnabled
gating already guarantees rootDAGRunId/rootDAGRunName are truthy before the
sub-DAG query runs; update the JSX/logic in NodeStatusTableRow where dagRun is
destructured and where rootDAGRunId/rootDAGRunName are referenced to use direct
property access without optional chaining or empty-string fallbacks.

In `@ui/src/lib/executor-utils.ts`:
- Around line 76-87: The ANSI regex is being recompiled on every call to
formatLogStepOutput; hoist its compiled RegExp to module scope by creating a
constant (e.g., ANSI_CODES_RE or ANSI_CODES_REGEX_RE) initialized with new
RegExp(ANSI_CODES_REGEX, 'g') and then update formatLogStepOutput to use that
precompiled RegExp instead of calling new RegExp(...) each time; keep the
existing ANSI_CODES_REGEX string constant unchanged and only replace the RegExp
construction site.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 423d2c4c-c6a6-4bc3-93cc-b35c9f685793

📥 Commits

Reviewing files that changed from the base of the PR and between 928231d and 80c67cd.

📒 Files selected for processing (17)
  • internal/cmn/schema/dag.schema.json
  • internal/core/spec/step_test.go
  • internal/core/spec/step_types.go
  • internal/runtime/builtin/builtin.go
  • internal/runtime/builtin/log/log.go
  • internal/runtime/builtin/log/log_test.go
  • internal/runtime/node_internal_test.go
  • ui/src/features/dags/components/dag-details/DAGStepTableRow.tsx
  • ui/src/features/dags/components/dag-details/LogStepMessage.tsx
  • ui/src/features/dags/components/dag-details/NodeStatusTableRow.tsx
  • ui/src/features/dags/components/dag-details/SubDAGRunsList.tsx
  • ui/src/features/dags/components/dag-details/__tests__/DAGStepTableRow.test.tsx
  • ui/src/features/dags/components/dag-details/__tests__/NodeStatusTableRow.test.tsx
  • ui/src/features/dags/components/step-details/StepDetails.tsx
  • ui/src/features/dags/components/step-details/__tests__/StepDetails.test.tsx
  • ui/src/lib/__tests__/executor-utils.test.ts
  • ui/src/lib/executor-utils.ts

Comment thread internal/cmn/schema/dag.schema.json
Comment thread ui/src/features/dags/components/dag-details/NodeStatusTableRow.tsx
@yottahmd
Copy link
Copy Markdown
Collaborator Author

yottahmd commented May 6, 2026

@coderabbitai review

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 6, 2026

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@yottahmd yottahmd merged commit e3a0c07 into main May 6, 2026
11 checks passed
@yottahmd yottahmd deleted the codex/add-log-step-type branch May 6, 2026 10:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant