Skip to content

feat(task): support arguments in sources and outputs - #11823

Closed
Marukome0743 wants to merge 1 commit into
jdx:mainfrom
Marukome0743:pr11823
Closed

Marukome0743 wants to merge 1 commit into
jdx:mainfrom
Marukome0743:pr11823

Conversation

@Marukome0743

@Marukome0743 Marukome0743 commented Aug 10, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • defer task source and output template expansion until each scheduled task occurrence has parsed its arguments
  • support the recommended {{usage.*}} values and the deprecated arg(), option(), and flag() helpers in file patterns
  • use the same rendered patterns for freshness, artifact caching, task_source_files(), and mise watch
  • discover usage declarations that appear only in source/output templates, deduplicate identical declarations, and reject conflicting definitions

Details

Previously, sources and outputs were rendered while loading configuration, before task arguments and dependency environments were available. This left {{usage.*}} without invocation values and made the legacy helpers unknown. The new flow preserves raw patterns, validates every scheduled occurrence before the scheduler starts, then renders filesystem patterns with the complete task-local toolset, environment, and vars after that occurrence's dependencies finish and before its freshness/cache checks.

This ordering keeps preflight side-effect free: it does not run _.source or plugin environment hooks before a dependency can produce their inputs. mise watch, which must determine filters before starting watchexec, renders from the already-loaded config context plus literal task/dependency overrides and performs the same argument preflight first. Filesystem values remain unquoted, while existing shell escaping for run scripts is unchanged. Normal dependencies, post dependencies, injected tasks, and watch targets receive their own arguments and dependency environment. Task file rendering and execution share the standard MISE_TASK_* metadata keys. Tasks that bypass usage parsing through raw_args or double-dash help passthrough fail before scheduling when they contain argument-dependent patterns. This restriction is documented, and argument parse failures use the same unwrapped usage error output as run scripts.

Testing

Passed:

  • mise exec -- cargo fmt --all -- --check
  • mise exec -- shfmt -d for the three new E2E files
  • mise exec -- shellcheck for the three new E2E files
  • mise exec -- cargo check --all-features
  • mise exec -- cargo clippy --workspace --all-features --all-targets -- -D warnings
  • mise exec -- cargo test --all-features task_script_parser
  • mise exec -- cargo test --all-features test_template_has_usage_input
  • mise run test:e2e e2e/tasks/test_task_usage_sources_outputs
  • mise run test:e2e e2e/tasks/test_task_usage_sources_outputs_deps
  • mise run test:e2e e2e/tasks/test_task_watch_usage_sources
  • mise run test:e2e e2e/tasks/test_task_run_sources
  • mise run test:e2e e2e/tasks/test_task_usage_preflight
  • mise run test:e2e e2e/tasks/test_task_watch_skip_deps

The CodeRabbit follow-ups were additionally verified with the affected E2Es, the task script parser unit suite, Rustfmt, shfmt, ShellCheck, Cargo check, and Clippy. Regression coverage now verifies watch preflight, distinct Debug/Release output paths, and a task whose dependency generates the env file used by its argument-dependent source/output patterns. The watch assertion checks the rendered -f filter rather than the task argument portion of the watchexec command.

mise run format and mise run lint could not run their hk wrapper in this Sapling working copy because hk reported failed to find git repository; the underlying Rustfmt, shfmt, ShellCheck, Cargo check, and Clippy checks above passed individually.

Addresses #5229

AI-assisted — Tool: Codex; model: OpenAI/GPT-5; version: unavailable.

Summary by CodeRabbit

  • New Features

    • Task sources and outputs can now use parsed arguments and flags through usage.* templates.
    • Usage-derived paths work with dependencies, caching, freshness checks, file selection, and watch mode.
    • Added validation for unsupported raw-argument and post--- usage-template scenarios.
    • Legacy arg(), option(), and flag() templates remain supported with compatibility guidance.
  • Bug Fixes

    • Improved task usage validation and template rendering, including dependency-specific environments and clearer task-specific errors.
    • Prevented usage-dependent paths from rendering before required arguments are available.
  • Documentation

    • Expanded configuration and argument-template documentation with examples and migration guidance.

@coderabbitai

coderabbitai Bot commented Aug 10, 2026 •

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

Task arguments and flags now support usage-dependent sources and outputs. Rendering is deferred until invocation context is available. Run, watch, dependency, caching, freshness, validation, documentation, and end-to-end tests cover the behavior.

Changes

Usage-aware task templates

Layer / File(s) Summary
Template-aware usage specification
src/task/task_script_parser.rs
Specification templates now contribute argument, option, and flag definitions. Identical definitions are deduplicated, conflicting definitions produce errors, and usage-file templates participate in parsing and preflight validation.
Deferred source and output rendering
src/task/mod.rs, src/task/task_script_parser.rs, src/task/task_sources.rs
Tasks retain raw source templates and render usage-dependent sources and outputs with parsed invocation arguments. Detection covers usage.* and legacy template helpers.
Execution and watch integration
src/task/task_context_builder.rs, src/task/task_executor.rs, src/cli/run.rs, src/cli/watch.rs
Run, watch, and nested task flows resolve context, validate file templates, and render them before dependency selection, freshness checks, caching, and execution.
End-to-end validation and documentation
e2e/tasks/*, docs/tasks/*
Tests cover source and output selection, dependency propagation, caching, validation, legacy helpers, and watch behavior. Documentation describes supported templates and restrictions.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant RunWatch as run/watch
  participant TaskContextBuilder
  participant Task
  participant FreshnessCache as freshness/cache
  RunWatch->>TaskContextBuilder: resolve task tools and environment
  TaskContextBuilder->>Task: render task file templates with arguments
  Task-->>RunWatch: return rendered sources and outputs
  RunWatch->>FreshnessCache: perform freshness and cache checks
Loading

Possibly related PRs

  • jdx/mise#11113: Both modify task context and metadata environment rendering.
  • jdx/mise#11114: Both modify task watch integration.
  • jdx/mise#11787: This change extends task-usage preflight validation to source/output templates and watch flows.

Suggested reviewers: jdx

Poem

I hop through paths with args in flight,
Sources and outputs render right.
Cache and watch now share the way,
Dependencies build without delay.
— A cheerful rabbit 🐇

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 69.23% 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
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.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the main change: supporting task arguments in sources and outputs.

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.

@greptile-apps

greptile-apps Bot commented Aug 10, 2026 •

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR adds invocation-argument support to task source and output templates.

  • Parses usage definitions found in source and output templates.
  • Renders invocation-specific file patterns before freshness, cache, and watch operations.
  • Adds preflight validation and task-context metadata handling.
  • Documents the feature and adds end-to-end coverage for execution, dependencies, caching, and watch mode.

Confidence Score: 5/5

The PR appears safe to merge.

No blocking failure remains.

Important Files Changed

Filename Overview
src/task/mod.rs Preserves raw source/output templates and renders usage-dependent file patterns per invocation.
src/task/task_context_builder.rs Adds task-context resolution and pre-scheduler rendering support for argument-dependent file templates.
src/task/task_executor.rs Integrates file-template rendering and usage validation ahead of freshness and artifact-cache processing.
src/task/task_script_parser.rs Collects and deduplicates usage definitions across scripts and source/output templates.
src/cli/watch.rs Renders argument-dependent sources before constructing watchexec filters for requested and dependency tasks.
src/task/task_sources.rs Extends output-template handling to retain and rerender invocation-dependent patterns.
e2e/tasks/test_task_usage_sources_outputs Covers argument-selected freshness paths, legacy helpers, validation, metadata, and artifact-cache isolation.
e2e/tasks/test_task_usage_sources_outputs_deps Covers argument-aware file patterns across pre- and post-dependencies and generated environment files.
e2e/tasks/test_task_watch_usage_sources Verifies watch filters use the source selected by task arguments.

Reviews (4): Last reviewed commit: "feat(task): support arguments in sources..." | Re-trigger Greptile

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🧹 Nitpick comments (3)
src/task/task_script_parser.rs (2)

85-96: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Match the conflict error by a shared constant, not by an inline literal.

collect_spec_template decides whether to propagate an error by searching for the literal "conflicting definitions for task". The three producers of that message are in setup_tera_for_spec_parsing and use their own literals. If one message is reworded, conflict detection stops propagating and the parser silently accepts conflicting definitions.

Extract the prefix into one constant and use it in all four places.

♻️ Proposed refactor
+const CONFLICTING_DEFINITION_PREFIX: &str = "conflicting definitions for task";
+
     fn collect_spec_template(
         tera: &mut TeraEngine,
         template: &str,
         ctx: &tera::Context,
     ) -> Result<()> {
         if let Err(err) = Self::render_script_with_context(tera, template, ctx)
-            && format!("{err:#}").contains("conflicting definitions for task")
+            && format!("{err:#}").contains(CONFLICTING_DEFINITION_PREFIX)
         {
             return Err(err);
         }
         Ok(())
     }

Then build each producer message from the same constant, for example:

return Err(format!(
    "{CONFLICTING_DEFINITION_PREFIX} flag '{name}'"
));
🤖 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 `@src/task/task_script_parser.rs` around lines 85 - 96, Extract the shared
“conflicting definitions for task” prefix into a module-level constant, then
replace the inline literal in collect_spec_template and all three conflict-error
producers in setup_tera_for_spec_parsing with that constant when matching or
constructing messages. Preserve the existing error propagation and
message-specific suffixes.

372-383: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

Acquire arg_order before input_args, or drop the input_args guard first.

Line 382 locks arg_order while the input_args guard is held. The collection code at lines 693-705 locks arg_order first and then input_args. The two orders are inverted. Rendering and collection currently run sequentially on one thread, so no deadlock occurs today. The inversion still becomes a deadlock as soon as any caller renders templates concurrently with collection.

Record the order after the duplicate check without nesting the guards.

♻️ Proposed change
-                let mut input_args = input_args.lock().map_err(Self::lock_error)?;
-                if let Some(existing) = input_args.iter().find(|existing| existing.name == name) {
-                    if format!("{existing:?}") != format!("{arg:?}") {
-                        return Err(format!(
-                            "conflicting definitions for task argument '{name}'"
-                        ));
-                    }
-                    trace!("already seen {name}");
-                    return Ok(json!(""));
-                }
-                arg_order.lock().map_err(Self::lock_error)?.insert(name, i);
-                input_args.push(arg);
+                {
+                    let mut input_args = input_args.lock().map_err(Self::lock_error)?;
+                    if let Some(existing) = input_args.iter().find(|e| e.name == name) {
+                        if format!("{existing:?}") != format!("{arg:?}") {
+                            return Err(format!(
+                                "conflicting definitions for task argument '{name}'"
+                            ));
+                        }
+                        trace!("already seen {name}");
+                        return Ok(json!(""));
+                    }
+                    input_args.push(arg);
+                }
+                arg_order.lock().map_err(Self::lock_error)?.insert(name, i);
🤖 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 `@src/task/task_script_parser.rs` around lines 372 - 383, Update the
argument-registration logic around the duplicate check to avoid locking
arg_order while the input_args guard is held. Preserve the existing duplicate
validation and early returns, then release the input_args guard before acquiring
arg_order and recording the argument order, maintaining the same lock order used
by the collection code.
src/task/task_context_builder.rs (1)

55-86: 📐 Maintainability & Code Quality | 🔵 Trivial | 🏗️ Heavy lift

Share the context setup with TaskExecutor::prepare_task_context.

Lines 67-83 duplicate the tool collection, task_cf selection, toolset build, and env resolution performed by TaskExecutor::prepare_task_context in src/task/task_executor.rs (lines 1932-1962). The two copies must stay identical, because a source template must render against the same environment the task later executes with.

Two consequences follow from the duplication:

  • prepare_task_context additionally injects MISE_TASK_NAME, MISE_TASK_DIR, MISE_TASK_FILE, MISE_PROJECT_ROOT, and related keys. A source or output template that combines {{usage.*}} with one of those env.* keys renders here without them.
  • For a task that declares its own env or tools, the builder caches nothing, so the toolset and env resolution run twice per task.

Extract the common prefix into one helper that both call sites use.

🤖 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 `@src/task/task_context_builder.rs` around lines 55 - 86, Extract the
duplicated tool collection, task configuration selection, toolset construction,
and environment resolution from render_task_file_templates and
TaskExecutor::prepare_task_context into a shared helper. Ensure the helper also
performs the context-specific injections currently added by
prepare_task_context, and have both callers reuse its returned context so
template rendering matches task execution and avoids duplicate resolution.
🤖 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 `@docs/tasks/task-configuration.md`:
- Around line 409-431: Update the task configuration documentation near the
parsed-argument sources and outputs examples to state that argument templates
require usage-based argument parsing. Document that they are unavailable when
raw_args is enabled or when arguments are passed after --, and mention the
resulting error or required alternative.

In `@e2e/tasks/test_task_watch_usage_sources`:
- Around line 13-20: Increase the retry window in wait_for_watchexec beyond the
current 50 iterations while preserving the 0.1-second polling interval and
existing timeout failure message.

In `@src/task/task_script_parser.rs`:
- Around line 931-939: Update the usage parser error handling in
parallelize_tasks to match parse_run_scripts_with_args: display the parser
result through the existing usage error path and exit with status 1, rather than
wrapping it with eyre::eyre! and propagating it. Preserve successful parsing and
source/output rendering behavior.

---

Nitpick comments:
In `@src/task/task_context_builder.rs`:
- Around line 55-86: Extract the duplicated tool collection, task configuration
selection, toolset construction, and environment resolution from
render_task_file_templates and TaskExecutor::prepare_task_context into a shared
helper. Ensure the helper also performs the context-specific injections
currently added by prepare_task_context, and have both callers reuse its
returned context so template rendering matches task execution and avoids
duplicate resolution.

In `@src/task/task_script_parser.rs`:
- Around line 85-96: Extract the shared “conflicting definitions for task”
prefix into a module-level constant, then replace the inline literal in
collect_spec_template and all three conflict-error producers in
setup_tera_for_spec_parsing with that constant when matching or constructing
messages. Preserve the existing error propagation and message-specific suffixes.
- Around line 372-383: Update the argument-registration logic around the
duplicate check to avoid locking arg_order while the input_args guard is held.
Preserve the existing duplicate validation and early returns, then release the
input_args guard before acquiring arg_order and recording the argument order,
maintaining the same lock order used by the collection code.
🪄 Autofix

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: Central YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro Plus

Run ID: fc83d656-d3ca-4d21-b837-28957ab4ba11

📥 Commits

Reviewing files that changed from the base of the PR and between f6ac131 and dff026b.

📒 Files selected for processing (12)
  • docs/tasks/task-arguments.md
  • docs/tasks/task-configuration.md
  • e2e/tasks/test_task_usage_sources_outputs
  • e2e/tasks/test_task_usage_sources_outputs_deps
  • e2e/tasks/test_task_watch_usage_sources
  • src/cli/run.rs
  • src/cli/watch.rs
  • src/task/mod.rs
  • src/task/task_context_builder.rs
  • src/task/task_executor.rs
  • src/task/task_script_parser.rs
  • src/task/task_sources.rs

Comment thread docs/tasks/task-configuration.md Resolved
Comment thread e2e/tasks/test_task_watch_usage_sources Resolved
Comment thread src/task/task_script_parser.rs Resolved

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 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 `@e2e/tasks/test_task_watch_usage_sources`:
- Line 28: Update the assertions for the watch command in the task-watch
usage-source test to verify the rendered source filter rather than merely
matching selected.txt in the full command. Check for “-f selected.txt” or
restrict the inspected watchexec line to the portion before “ -- ”, and apply
the same correction to both affected assertions.
🪄 Autofix

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: Central YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro Plus

Run ID: 7189b3ba-9960-4000-b96a-05443bdda03f

📥 Commits

Reviewing files that changed from the base of the PR and between dff026b and 4ce97f9.

📒 Files selected for processing (4)
  • docs/tasks/task-configuration.md
  • e2e/tasks/test_task_usage_sources_outputs
  • e2e/tasks/test_task_watch_usage_sources
  • src/task/task_script_parser.rs
🚧 Files skipped from review as they are similar to previous changes (3)
  • docs/tasks/task-configuration.md
  • e2e/tasks/test_task_usage_sources_outputs
  • src/task/task_script_parser.rs

Comment thread e2e/tasks/test_task_watch_usage_sources Resolved

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🧹 Nitpick comments (2)
e2e/tasks/test_task_usage_sources_outputs (1)

69-75: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Assert the rendered output paths, not only the rendered source paths.

Lines 69-75 verify the sources rendering through task_source_files() and through freshness skipping. No assertion checks that outputs rendered to a different path per invocation. A regression that renders every output to debug/app.out would still pass this block.

💚 Proposed additional assertions
 assert "mise run -q build app" "debug/app.in"
 assert_empty "mise run -q build app"
 assert "mise run -q build app --release" "release/app.in"
+[[ -f debug/app.out ]] || fail "debug output was not created"
+[[ -f release/app.out ]] || fail "release output was not created"
🤖 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 `@e2e/tasks/test_task_usage_sources_outputs` around lines 69 - 75, Add
assertions in the task usage test around the existing debug and release build
invocations to verify the rendered output paths, including that each invocation
uses its expected distinct output path rather than always rendering to
debug/app.out. Keep the current source-path and freshness assertions unchanged,
and use the existing output-path rendering helpers or assertion style.
src/task/task_executor.rs (1)

1948-1964: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Share the injected metadata key list with inject_task_metadata.

This literal list must stay identical to the keys written by TaskContextBuilder::inject_task_metadata in src/task/task_context_builder.rs (Lines 118-143). If a key is added in one place only, that key leaks into __MISE_DIFF and changes the environment observed by nested mise invocations. Export a single constant and use it in both files.

♻️ Proposed refactor

In src/task/task_context_builder.rs:

pub(crate) const TASK_METADATA_ENV_KEYS: &[&str] = &[
    "MISE_PROJECT_ROOT",
    "MISE_MONOREPO_ROOT",
    "MISE_TASK_NAME",
    "MISE_TASK_FILE",
    "MISE_TASK_DIR",
    "MISE_CONFIG_ROOT",
];

In src/task/task_executor.rs:

-            .chain(
-                [
-                    "MISE_PROJECT_ROOT",
-                    "MISE_MONOREPO_ROOT",
-                    "MISE_TASK_NAME",
-                    "MISE_TASK_FILE",
-                    "MISE_TASK_DIR",
-                    "MISE_CONFIG_ROOT",
-                ]
-                .into_iter()
-                .map(str::to_string),
-            )
+            .chain(
+                crate::task::task_context_builder::TASK_METADATA_ENV_KEYS
+                    .iter()
+                    .copied()
+                    .map(str::to_string),
+            )
🤖 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 `@src/task/task_executor.rs` around lines 1948 - 1964, Extract the shared
metadata key list into a crate-visible constant such as TASK_METADATA_ENV_KEYS
alongside TaskContextBuilder::inject_task_metadata, then replace the duplicated
literal list in the nested_mise_diff_exclude_keys construction with that
constant. Ensure both locations use the same keys so metadata injected by
inject_task_metadata is excluded from __MISE_DIFF.
🤖 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 `@src/task/task_context_builder.rs`:
- Around line 62-77: Update render_task_file_templates to avoid resolving the
full task context before dependency processing. Use only the task/dependency
environment required for argument interpolation when calling
render_file_templates_with_args, and leave full context resolution to the
scheduler’s execution-start path.

In `@src/task/task_executor.rs`:
- Around line 1789-1790: Ensure watch-task scheduling performs argument
validation before building the dependency graph. In the flow around
render_task_file_templates, invoke preflight_task_usage after template rendering
(or an equivalent guard) so dynamic-file-template tasks with static usage reject
missing required arguments before dependencies start.

---

Nitpick comments:
In `@e2e/tasks/test_task_usage_sources_outputs`:
- Around line 69-75: Add assertions in the task usage test around the existing
debug and release build invocations to verify the rendered output paths,
including that each invocation uses its expected distinct output path rather
than always rendering to debug/app.out. Keep the current source-path and
freshness assertions unchanged, and use the existing output-path rendering
helpers or assertion style.

In `@src/task/task_executor.rs`:
- Around line 1948-1964: Extract the shared metadata key list into a
crate-visible constant such as TASK_METADATA_ENV_KEYS alongside
TaskContextBuilder::inject_task_metadata, then replace the duplicated literal
list in the nested_mise_diff_exclude_keys construction with that constant.
Ensure both locations use the same keys so metadata injected by
inject_task_metadata is excluded from __MISE_DIFF.
🪄 Autofix

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: Central YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro Plus

Run ID: a64a0479-3672-4c7a-bb32-fe12afa4e5b7

📥 Commits

Reviewing files that changed from the base of the PR and between 4ce97f9 and 7ac7e67.

📒 Files selected for processing (5)
  • e2e/tasks/test_task_usage_sources_outputs
  • e2e/tasks/test_task_watch_usage_sources
  • src/task/task_context_builder.rs
  • src/task/task_executor.rs
  • src/task/task_script_parser.rs
🚧 Files skipped from review as they are similar to previous changes (2)
  • e2e/tasks/test_task_watch_usage_sources
  • src/task/task_script_parser.rs

Comment thread src/task/task_context_builder.rs Resolved
Comment thread src/task/task_executor.rs Resolved
@jdx

jdx commented Aug 10, 2026

Copy link
Copy Markdown
Owner

not ready to support this, sorry

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.

2 participants