A task being pulled back in because of `if-dependencies` doesn't pull its own dependencies back in if they're also `if-dependencies`

Open
#711 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
38/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Stale
Tech stack
python

Research direction

Start in src/taskgraph/optimize/base.py, especially remove_tasks and get_subgraph, and reproduce the YAML example from the issue. Trace how if-dependencies pruning orders prune_candidates and pulls tasks back; done means a task restored because of if-dependencies also restores its own if-dependencies dependencies without an optimization error.

Written by the indexing model from the issue text.

Description

I'm assuming that fixing #710 would also fix this one but this is where it began

Assuming the following

loader: taskgraph.loader.transform:loader

transforms:
  - taskgraph.transforms.task

task-defaults:
  worker-type: succeed

tasks:
  task-a:
    label: task-a
    optimization:
      skip-unless-changed: ["world"]
    description: task-a

  task-apush-a:
    label: task-apush-a
    dependencies:
      task-a: task-a
    if-dependencies:
      - task-a
    description: task-push-a

  task-b:
    label: task-b
    description: task-b

  final:
    label: final
    dependencies:
      task-push-a: task-apush-a
      task-b: task-b
    if-dependencies:
      - task-push-a
      - task-b
    description: final
2025-06-23 17:49:11,994 - INFO - Generating optimized task graph
2025-06-23 17:49:11,994 - DEBUG - no files found matching a pattern in `skip-unless-changed` for "task-a"
2025-06-23 17:49:11,994 - DEBUG - optimize: final kept because of never
2025-06-23 17:49:11,994 - DEBUG - optimize: task-apush-a kept because of dependent tasks
2025-06-23 17:49:11,994 - DEBUG - optimize: task-b kept because of never
2025-06-23 17:49:11,994 - DEBUG - optimize: task-a removed because of if-dependencies pruning
2025-06-23 17:49:11,994 - INFO - Removed 1 tasks by if-dependencies pruning during optimization.

...

  File "/home/eijemoz/code/taskgraph/src/taskgraph/optimize/base.py", line 110, in optimize_task_graph
    get_subgraph(
    ~~~~~~~~~~~~^
        target_task_graph,
        ^^^^^^^^^^^^^^^^^^
    ...<3 lines>...
        decision_task_id,
        ^^^^^^^^^^^^^^^^^
    ),
    ^
  File "/home/eijemoz/code/taskgraph/src/taskgraph/optimize/base.py", line 396, in get_subgraph
    raise Exception("Optimization error: " + probs)
Exception: Optimization error: task-apush-a depends on task-a as task-a but it has been removed

If you rename task-apush-a to task-push-a then instead you run into #710 and the whole graph gets pulled in. This optimization error only happens when the label of the task getting optimized gets ordered before the other tasks in the prune_candidates set in remove_tasks.

Dominant language
Python
Stars
26
Forks
55
Avg merge
2d 6m
Merged PRs (30d)
15

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from taskcluster/taskgraph

All issues in taskcluster/taskgraph

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.