Skip to content

feat(task-graph): materialize object dependsOn edges#479

Merged
wan9chi merged 1 commit into
mainfrom
claude/busy-ramanujan-0t0t8r-impl
Jun 21, 2026
Merged

feat(task-graph): materialize object dependsOn edges#479
wan9chi merged 1 commit into
mainfrom
claude/busy-ramanujan-0t0t8r-impl

Conversation

@wan9chi

@wan9chi wan9chi commented Jun 20, 2026

Copy link
Copy Markdown
Member

Motivation

Stacked on #478 (the revert of the query-time implementation).

Object-form dependsOn entries — { "task": "build", "from": ["dependencies", "devDependencies"] } — run a task in the direct workspace packages listed under a package.json dependency field. The previous implementation (#467/#469, reverted in #478) expanded these at query time, so the selections never appeared in the global task graph.

This reimplements the feature at graph-load time: each object entry is resolved against the package dependency graph and the matching package#task selections become ordinary task graph edges (add_package_dependency_edges). Because they are now plain edges:

  • they appear in the global task graph, and
  • they flow through the existing dependency machinery for free — including --ignore-depends-on, which drops them at query time like any other dependsOn edge.

Only direct dependencies are followed, and an edge is added only when the dependency package actually defines the task. Supported fields are dependencies, devDependencies, and peerDependencies.

Snapshot coverage

Because the edges now live in the global task graph, the fixture asserts edge construction through the rendered task_graph.md: every from variant, recursive cross-package chains, and the exclusion of peer-only and missing-task dependencies are all visible there. The only behavior the static graph cannot express — --ignore-depends-on removing the materialized edges at query time — is kept as the single per-case plan snapshot. The other four per-case snapshots in the original change were redundant re-assertions of edges already shown in task_graph.md, so they were dropped.

Behavior note vs #467/#469

The reverted query-stage impl also preserved ordering among the sibling dependency tasks selected by a single object dependsOn (e.g. ui#build → shared#build when app#test selected both and ui depends on shared), scoped to that one query's execution graph. The graph-stage model intentionally does not: every edge here is global, and a global ui#build → shared#build edge would make a plain vp run ui#build also build shared, contradicting vp's rule that topological ordering applies only with -r/-t. Ordering among selected dependencies instead comes from each task declaring its own dependsOn (the recursive-expansion path documented in task-query.md).

🤖 Generated with Claude Code

https://claude.ai/code/session_01QowxsN8vDKKbQdaSMdxL67

@wan9chi wan9chi force-pushed the claude/busy-ramanujan-0t0t8r branch from c850975 to 7a3bf10 Compare June 20, 2026 08:56
@wan9chi wan9chi force-pushed the claude/busy-ramanujan-0t0t8r-impl branch from 65e6b2c to 77cb1a0 Compare June 20, 2026 08:56

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 65e6b2ce67

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread crates/vite_task_graph/src/lib.rs

wan9chi commented Jun 21, 2026

Copy link
Copy Markdown
Member Author

@wan9chi wan9chi changed the base branch from claude/busy-ramanujan-0t0t8r to graphite-base/479 June 21, 2026 02:54
wan9chi added a commit that referenced this pull request Jun 21, 2026
## Motivation

Object-form `dependsOn` package selection — `{ "task": "build", "from": "dependencies" }` — was added in #467 and refined in #469, but implemented as **query-time expansion**: the selections were kept on the declaring task and expanded per query instead of being stored in the global task graph. That is the wrong layer. The resulting dependencies never appear as task graph edges, so they are invisible to anything that inspects the graph (graph snapshots, tooling, recursive traversal).

This PR reverts #467 and #469 so the feature can be reintroduced at graph-construction time. The reimplementation is the stacked follow-up **#479**.

## Notes

The first two commits are pure `git revert`s. A third commit completes them for changes that landed on `main` *after* the reverted PRs, which a mechanical revert cannot account for:

- #477 renamed plan task-graph snapshots from `.jsonc` to `.md`, so reverting the `depends_on_package_dependencies` fixture left an orphaned `snapshots/task_graph.md` behind. The plan snapshot harness runs every fixture directory through workspace discovery, so the stale directory would fail the suite.
- `vec1` was used only by the reverted object-form config, so it becomes an unused dependency of `vite_task_graph` that `cargo shear` rejects.

---

**Stack** (via Graphite):
- #478 ← this PR (revert)
- #479 (reimplementation)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_01QowxsN8vDKKbQdaSMdxL67
@wan9chi wan9chi force-pushed the graphite-base/479 branch from 7a3bf10 to 2502ab1 Compare June 21, 2026 02:54
@wan9chi wan9chi force-pushed the claude/busy-ramanujan-0t0t8r-impl branch from b281e54 to 42ad1b0 Compare June 21, 2026 02:54
@graphite-app graphite-app Bot changed the base branch from graphite-base/479 to main June 21, 2026 02:55
@wan9chi wan9chi force-pushed the claude/busy-ramanujan-0t0t8r-impl branch 2 times, most recently from 9116cf3 to 59fbee6 Compare June 21, 2026 03:17
Object-form `dependsOn` entries — `{ "task": "build", "from": "dependencies" }`
— run a task in the direct workspace packages listed under a package.json
dependency field (`dependencies`, `devDependencies`, and/or `peerDependencies`).

The earlier implementation expanded these selections at query time, so they
never appeared in the global task graph. This reimplements the feature at
graph-load time: each object entry is resolved against the package dependency
graph and the matching `package#task` selections are added as ordinary task
graph edges (`add_package_dependency_edges`). Only direct dependencies are
followed, and an edge is added only when the dependency package defines the
task.

Because the selections are now plain task graph edges, they appear in the
global graph and flow through the existing dependency machinery for free —
including `--ignore-depends-on`, which drops them at query time like any other
`dependsOn` edge.

The fixture asserts edge construction through the rendered global
`task_graph.md` (every `from` variant, recursive cross-package chains, and the
exclusion of peer-only and missing-task dependencies). The only behavior the
static graph cannot express — `--ignore-depends-on` removing the materialized
edges at query time — is kept as the single per-case plan snapshot.

Co-authored-by: GPT-5 Codex <codex@openai.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QowxsN8vDKKbQdaSMdxL67
@wan9chi wan9chi force-pushed the claude/busy-ramanujan-0t0t8r-impl branch from 59fbee6 to 04e6b5d Compare June 21, 2026 03:33

wan9chi commented Jun 21, 2026

Copy link
Copy Markdown
Member Author

Merge activity

  • Jun 21, 3:38 AM UTC: A user started a stack merge that includes this pull request via Graphite.
  • Jun 21, 3:38 AM UTC: @wan9chi merged this pull request with Graphite.

@wan9chi wan9chi merged commit 4212c17 into main Jun 21, 2026
20 checks passed
@wan9chi wan9chi deleted the claude/busy-ramanujan-0t0t8r-impl branch June 21, 2026 03:38
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