Skip to content

Modules v2: design and roadmap#12900

Open
shykes wants to merge 41 commits intomainfrom
modules-v2
Open

Modules v2: design and roadmap#12900
shykes wants to merge 41 commits intomainfrom
modules-v2

Conversation

@shykes
Copy link
Copy Markdown
Contributor

@shykes shykes commented Apr 3, 2026

Modules v2 redesigns, in a backwards-compatible way, how Dagger modules are developed, configured, and operated.

Module developers don't have enough control over their user's workspace. End users are exposed to too much complexity. Modules v2 addresses both: more powerful APIs for module developers, a simpler experience for end users.

This PR contains the design specs and their rollout sequence:

Spec Description PR
Overview Dependency graph and design principles
Workspace API SDK types for workspace filesystem access #11874
Workspace plumbing Runtime binding and backward compatibility #11995
Workspace configuration Filesystem binding and access control #11812
Lockfile Deterministic lookup resolution #12046
Artifacts How users select what modules produce
Provenance Which artifacts are affected by file changes
Plans How verbs like check and generate execute
Collections Dynamic sets (tests by name, packages by path) #12892
Ship Pushing artifacts to external systems
Stdlib Standard library adoption track

Dependency graph

graph TD
    M(("💡")) --> WP["Workspace plumbing ✅"]
    M --> WA["Workspace API ✅"]
    M --> LF["Lockfile 🏗️"]

    WP --> AR["Artifacts 📝"]
    AR --> EP["Execution Plans 📝"]
    AR --> PR["Provenance 📝"]
    WA --> PR

    EP --> SH["Ship 📝"]
    EP --> CO["Collections 🏗️"]

    WP --> WC["Workspace configuration 🏗️"]
    LF --> WC

    SH --> E(("🎉"))
    CO --> E
    PR --> E
    WC --> E
Loading

shykes and others added 25 commits April 1, 2026 04:54
Consolidated design home for the next generation of the module system.
Reconciles and supersedes design docs scattered across workspace-artifacts
and collections branches.

Components: workspace, lockfile, artifacts, execution plans, collections,
provenance, stdlib. Sequencing: Artifacts → Execution Plans → Collections,
with stdlib as a parallel track.

Archived superseded docs as gists:
- workspace-artifacts.md → https://gist.github.com/shykes/948cd5d82610d762d8d4473089d19cae
- artifacts-on-collections-report.md → https://gist.github.com/shykes/6fa6ad9e478ab5c4572133d814ba350a
- do-we-need-artifact-addresses.md → https://gist.github.com/shykes/9c800d491ab62f7da6a83cfe46ce4a41
- workspace-artifacts-tracking.md → https://gist.github.com/shykes/d26874aaa1b0a8216957e59b8639d478

Signed-off-by: Solomon Hykes <solomon@dagger.io>
Artifacts:
- Replace key + ancestors with scope-relative coordinates
- Add scope back-reference so coordinates are always interpretable
- Move column disambiguation question to collections.md

Plans:
- Add Action.withAfter to public API schema
- Lock decision: engine and users share the same plan construction API

Collections:
- Add open question for column disambiguation (moved from artifacts.md)

Also add handoff preparation doc with recommendations for remaining
open questions and suggested implementation task breakdown.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace the terse Problem/Solution sections with a plain-language
intro that explains what artifacts are, why they matter on their own,
and what they make possible for downstream designs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Explain what artifacts are, how to discover them with dagger list,
how to select them with dimension flags, and how dimensions are
synthesized from module type structure.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Cut opening list, get to the gap faster
- Drop "until now" framing, describe the system as-is
- Bridge concept-to-CLI transition in discovery section
- Add verb variety to selection examples (ship, generate)
- Explain grouping objects aren't artifacts in tree example
- Add intro line before verb-scoped discovery examples
- Fold module/check relationships into relevant sections
- Explain root artifact row in the table
- Address single-module case
- Soften Next Steps link text

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Rename Design Summary to Detailed Design with transition line
- Fold Identity into Selector Model as first subsection
- Cut repeated dimension-source and UX bullets from Selector Model
- Consolidate verb composition rules in Selector Algebra
- Move disambiguation example to Selector Algebra
- Add singleton fallback concrete example
- Flag context switch in coordinates example
- Promote Filter Algebra from Notes to its own section
- Add empty-list and presence+value chaining rules to Filter Algebra
- Move normative content from Notes into Synthesis Constraints section
- Annotate UP verb as reserved
- Cross-reference CI Collision test from Naming section
- Fix TOC (add Detailed Design, Filter Algebra, Synthesis Constraints,
  Locked Decisions)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@shykes shykes changed the title docs: modules v2 design specifications Modules v2: design and roadmap Apr 3, 2026
Signed-off-by: Solomon Hykes <solomon@dagger.io>
@shykes shykes marked this pull request as ready for review April 3, 2026 10:50
@shykes shykes requested a review from a team as a code owner April 3, 2026 10:50
@shykes shykes requested a review from a team April 3, 2026 10:50
@shykes shykes requested review from tiborvass and vito April 3, 2026 10:50
shykes and others added 7 commits April 9, 2026 18:22
Signed-off-by: Solomon Hykes <solomon@dagger.io>
artifacts.md is the foundation doc and already defines `enum Verb` and
`Artifacts.filterVerb(...)`. plans.md had drifted: it declared a parallel
`enum ActionKind` with the same members and used `actionKind` / `kind:`
field and parameter names throughout, while its prose still called
`filterVerb` from artifacts.md. README.md also describes Ship in terms of
`filterVerb(SHIP)`, confirming Verb is the umbrella vocabulary.

This commit removes the duplicate `enum ActionKind` and renames the
remaining ActionKind references in plans.md so that the schema and prose
are consistent with the rest of the design. No new primitives are
introduced; this brings plans.md back into sync with its dependency.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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