Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
339 commits
Select commit Hold shift + click to select a range
1ed2e1c
Add target-path normalization parity tests for obligations and show-t…
cursoragent Feb 17, 2026
18efcc0
Add .dag-directory invalid-target coverage for obligations and show-t…
cursoragent Feb 17, 2026
0a28830
Harden run written inference across sparse transport logs
cursoragent Feb 17, 2026
ba5355d
Add symlinked .dag-directory invalid-target tests for obligations and…
cursoragent Feb 17, 2026
1e86333
Add curdir-suffix symlink invalid-target tests for obligations and sh…
cursoragent Feb 17, 2026
678c78e
Assert real run summaries report written state
cursoragent Feb 17, 2026
3b4afc5
Add curdir-suffix .dag-directory invalid-target tests for obligations…
cursoragent Feb 17, 2026
1ae37d3
Handle non-boolean transport skip signals deterministically
cursoragent Feb 17, 2026
5df7fb0
Add JSON and curdir-directory parity tests for obligations and show-t…
cursoragent Feb 17, 2026
b842438
Cover dash-prefixed equals output path handling
cursoragent Feb 17, 2026
5961144
Extend JSON invalid-target coverage for obligations and show-triplets
cursoragent Feb 17, 2026
b611b3a
Test dash-prefixed equals output path in real mode
cursoragent Feb 17, 2026
2852742
Complete JSON curdir-suffix invalid-target matrix for inspection comm…
cursoragent Feb 17, 2026
a732d47
Add fallback coverage for non-authoritative transport logs
cursoragent Feb 17, 2026
ecbd650
Add case-variant single-file parity tests for obligations and show-tr…
cursoragent Feb 17, 2026
9edfc6a
Cover run flag ordering after input path
cursoragent Feb 17, 2026
1832a64
Refactor single-target command test helper and expand JSON case-varia…
cursoragent Feb 17, 2026
769c40a
Assert real run idempotence written summary
cursoragent Feb 17, 2026
f21aac9
Add missing JSON invalid-target symmetry tests for inspection commands
cursoragent Feb 17, 2026
bd92041
Cover check-mode flag ordering after input
cursoragent Feb 17, 2026
83277d9
Complete JSON invalid-target coverage for curdir and symlink lowercas…
cursoragent Feb 17, 2026
52fc3b7
Cover check-mode equals output ordering
cursoragent Feb 17, 2026
f621731
Complete remaining JSON invalid-target combinations for obligations a…
cursoragent Feb 17, 2026
493d065
Cover dry-run equals output ordering after input
cursoragent Feb 17, 2026
009c60f
Record Worker 2 path-hardening coverage in roadmap acceptance criteria
cursoragent Feb 17, 2026
066a16d
Cover check-mode dash-prefixed equals output paths
cursoragent Feb 17, 2026
16b0fe1
Reject uppercase JSON format token in output-format parsing tests
cursoragent Feb 17, 2026
56f9bdb
Expand invalid format rejection coverage to title-case variants
cursoragent Feb 17, 2026
2129c9a
Add case-variant relative/absolute parity tests for inspection commands
cursoragent Feb 17, 2026
6225311
Complete case-variant relative/absolute parity matrix for inspection …
cursoragent Feb 17, 2026
693a94c
Add absolute-path invalid-target coverage for inspection commands
cursoragent Feb 17, 2026
fc7863a
Clarify roadmap coverage includes absolute .dag aliases
cursoragent Feb 17, 2026
a6c7ce6
Cover post-input conflicting run mode flags
cursoragent Feb 17, 2026
5692d9a
Expand absolute invalid-target coverage for inspection commands
cursoragent Feb 17, 2026
68bb83c
Cover double-dash directory input validation
cursoragent Feb 17, 2026
f4d568c
Assert latest transport success overrides stale interception
cursoragent Feb 17, 2026
4fbd168
Add absolute-target compile-family smoke coverage
cursoragent Feb 17, 2026
9eb21ee
Treat flag-like tokens after -- as positional
cursoragent Feb 17, 2026
58faf05
Add curdir-suffix compile-family smoke coverage
cursoragent Feb 17, 2026
ea9d935
Add absolute curdir-segment compile-family smoke coverage
cursoragent Feb 17, 2026
50ffee0
Add double-separator compile-family smoke coverage
cursoragent Feb 17, 2026
d269fe1
Assert compile-family output parity across path variants
cursoragent Feb 17, 2026
128dfe0
Refactor compile-family cli smoke tests with shared helpers
cursoragent Feb 17, 2026
f689253
Add normalized absolute path parity tests for inspection commands
cursoragent Feb 17, 2026
8bb3a97
Cover double-dash positional single-input contract
cursoragent Feb 17, 2026
cb82d3e
Complete normalized absolute parity matrix for inspection commands
cursoragent Feb 17, 2026
3024a31
Cover unknown run flags after positional input
cursoragent Feb 17, 2026
37eeeac
Refactor inspection parity tests with shared assertion helper
cursoragent Feb 17, 2026
17c1c6c
Document normalized absolute path hardening in roadmap
cursoragent Feb 17, 2026
707bef8
Add parent-segment absolute parity tests for inspection commands
cursoragent Feb 17, 2026
5989805
Add parent-segment compile-family smoke and parity coverage
cursoragent Feb 17, 2026
d3648fb
Extract compile-family command and target variant helpers
cursoragent Feb 17, 2026
ae8f1ff
Cover output-like positional tokens after --
cursoragent Feb 17, 2026
1ce94ff
Add parent-segment alias invalid-target coverage for inspection commands
cursoragent Feb 17, 2026
0ef9042
Accept uppercase .DAG inputs after -- separator
cursoragent Feb 17, 2026
a1cef6e
Refactor makegen variant parity tests with shared helper
cursoragent Feb 17, 2026
b825279
Cover missing input runtime errors after --
cursoragent Feb 17, 2026
751caaa
Expand parent-segment alias coverage for inspection commands
cursoragent Feb 17, 2026
bc03fae
Cover combined dash-prefix and uppercase after --
cursoragent Feb 17, 2026
18c8715
Add normalized absolute alias regressions for inspection commands
cursoragent Feb 17, 2026
1bbbad2
Add equals-output idempotence regression for run
cursoragent Feb 17, 2026
81c3cc6
Broaden normalized absolute alias invalid-target coverage
cursoragent Feb 17, 2026
1f8112a
Add parent-curdir alias invalid-target regressions
cursoragent Feb 17, 2026
b8c27fd
Add dash-prefixed equals-output idempotence run regression
cursoragent Feb 17, 2026
520b53c
Add parent-double alias invalid-target regressions
cursoragent Feb 17, 2026
079775a
Add check-mode missing-output regressions for equals paths
cursoragent Feb 17, 2026
782375a
Add parent-curdir-double alias invalid-target regressions
cursoragent Feb 17, 2026
8b6a5bb
Add equals-output before-input run regressions
cursoragent Feb 17, 2026
7cedee9
Expand parent-curdir-double alias invalid-target matrix
cursoragent Feb 17, 2026
8614167
Add split-output check-mode before-input regressions
cursoragent Feb 17, 2026
810afa5
Cover combined normalized makegen path in compile-family tests
cursoragent Feb 17, 2026
2d75a77
Add dash-prefixed before-input run ordering regressions
cursoragent Feb 17, 2026
a231e5b
Add parent-curdir-segment makegen compile-family coverage
cursoragent Feb 17, 2026
f812306
Add split-output before-input run mode regressions
cursoragent Feb 17, 2026
8e151a3
Add combined normalized absolute parity tests for inspection commands
cursoragent Feb 17, 2026
4d7219b
Add check-mode double-dash dash-prefix regressions
cursoragent Feb 17, 2026
29bec3a
Fill parent-double alias matrix symmetry for inspection commands
cursoragent Feb 17, 2026
3ba6d90
Add real-mode double-dash uppercase dash-input regressions
cursoragent Feb 17, 2026
c943ab6
Complete parent-curdir-segment alias invalid-target symmetry
cursoragent Feb 17, 2026
e5156fb
Add real-mode double-dash idempotence regression
cursoragent Feb 17, 2026
4909593
Add check-mode double-dash missing-output regression
cursoragent Feb 17, 2026
db016a9
Add real-mode equals-output double-dash parser and CLI regressions
cursoragent Feb 17, 2026
7dd9094
Add double-dash split and equals check-mode regressions
cursoragent Feb 17, 2026
ce93d56
Add parent-double makegen path variant to compile-family tests
cursoragent Feb 17, 2026
3bb1484
Add split-output check-mode parse regression for double-dash
cursoragent Feb 17, 2026
ef9b5a5
Clarify roadmap wording for normalized absolute variants
cursoragent Feb 17, 2026
326383f
Complete parent-double canonical parity coverage for inspection commands
cursoragent Feb 17, 2026
26441f5
Add dry/check equals-output double-dash CLI regressions
cursoragent Feb 17, 2026
7181109
Complete curdir and double-separator alias matrix symmetry
cursoragent Feb 17, 2026
d0f501c
Add double-dash conflicting mode parser and CLI regressions
cursoragent Feb 17, 2026
772c74f
Clarify roadmap includes combined normalized alias forms
cursoragent Feb 17, 2026
938939b
Add split-output double-dash parse coverage for dry and real modes
cursoragent Feb 17, 2026
5575f53
Clarify roadmap reflects alias permutation coverage scope
cursoragent Feb 17, 2026
ef3a7da
Add double-dash output-like first-token run regressions
cursoragent Feb 17, 2026
d69e51b
Prefer latest authoritative wrapper written signal
cursoragent Feb 17, 2026
e2dd792
Add invalid-target output parity tests for normalized aliases
cursoragent Feb 17, 2026
39aeef7
Extend wrapper fallback non-authoritative run log tests
cursoragent Feb 17, 2026
ed3fb5f
Add split-output check-mode missing-file regressions
cursoragent Feb 17, 2026
f73c043
Reject duplicate run output flags
cursoragent Feb 17, 2026
a11b198
Add duplicate equals output flag run regressions
cursoragent Feb 17, 2026
23a4ccc
Support split output separator for dash-prefixed paths
cursoragent Feb 17, 2026
5c28d94
Expand normalized alias failure output parity matrix
cursoragent Feb 17, 2026
7534dfa
Cover split output separator across run modes
cursoragent Feb 17, 2026
87874b0
Complete alias failure-output parity across normalized spellings
cursoragent Feb 17, 2026
b9e5de1
Reject duplicate run mode flags
cursoragent Feb 17, 2026
4cb1834
Document invalid-alias failing-output parity coverage
cursoragent Feb 17, 2026
ab73240
Add relative-absolute failure parity tests for alias targets
cursoragent Feb 17, 2026
d065401
Cover split-output mode-order parsing paths
cursoragent Feb 17, 2026
0433b91
Add after-input duplicate mode-flag regressions
cursoragent Feb 17, 2026
d11dbd0
Expand split-output mode-order conflict coverage
cursoragent Feb 17, 2026
3fb5711
Add after-escaped-path split-output mode regressions
cursoragent Feb 17, 2026
afa1b5e
Cover duplicate output after separator escape
cursoragent Feb 17, 2026
98d4394
Complete relative-absolute alias failure parity matrix
cursoragent Feb 17, 2026
61d32d2
Document relative-absolute invalid-alias parity coverage
cursoragent Feb 17, 2026
b7770f6
Cover split-output flag-like escaped value handling
cursoragent Feb 17, 2026
4d0480c
Add normalized relative alias failure parity tests
cursoragent Feb 17, 2026
d2b5036
Clarify roadmap includes normalized relative alias parity
cursoragent Feb 17, 2026
a41f690
Add after-input duplicate output flag regressions
cursoragent Feb 17, 2026
2df5575
Add duplicate equals output after separator escape regressions
cursoragent Feb 17, 2026
b33e22e
Add duplicate separator mode-flag regressions
cursoragent Feb 17, 2026
b2fb94b
Merge sister branch and resolve worker conflicts
cursoragent Feb 17, 2026
5f7712e
Extend separator duplicate-output mixed ordering regressions
cursoragent Feb 17, 2026
75af698
Resolve latest sister-branch CLI merge conflicts
cursoragent Feb 17, 2026
c6690cb
Merge pull request #44 from gunb-ai/cursor/worker-2-tasks-plan-e0b3
briansrls Feb 17, 2026
04a8a44
Typecheck single-file check command targets
cursoragent Feb 17, 2026
0335efb
Centralize dag single-file target classification
cursoragent Feb 17, 2026
a9b547b
Clarify check command scope in CLI usage text
cursoragent Feb 17, 2026
a1c8a18
Add manifest command text/json output formats
cursoragent Feb 17, 2026
aab6507
Expand progress manifest contract fields and JSON
cursoragent Feb 17, 2026
7010295
Add parent traversal path normalization regressions
cursoragent Feb 17, 2026
b184454
Harden manifest CLI determinism and format validation
cursoragent Feb 17, 2026
9dee2c5
Introduce structured PipelineError for pipeline runner
cursoragent Feb 17, 2026
8adcdb7
Add checked-in makegen manifest JSON snapshot
cursoragent Feb 17, 2026
822804b
Introduce structured CompileError in compiler driver
cursoragent Feb 17, 2026
8cdddd4
Emit expanded progress manifest contract fields
cursoragent Feb 17, 2026
de2881b
Add lowered-op resolver and typed op registry scaffold
cursoragent Feb 17, 2026
f661c66
Implement compile-resolve-execute makegen bridge
cursoragent Feb 17, 2026
8e19754
Add run command for compile-resolve-execute bridge
cursoragent Feb 17, 2026
23b4ddf
Harden run parsing and real-mode failure semantics
cursoragent Feb 17, 2026
0ede331
Add check-mode freshness gate for run command
cursoragent Feb 17, 2026
129708d
Introduce makegen op registry in resolver
cursoragent Feb 17, 2026
b2ba3d6
Add daglang-exec-bridge scaffold crate
cursoragent Feb 17, 2026
40db9e4
Port makegen exec bridge runtime behaviors
cursoragent Feb 17, 2026
a92ecc4
Wire daglang-cli compile bridge through new crate
cursoragent Feb 17, 2026
1a2dbc9
Wire daglang run command directly to exec bridge
cursoragent Feb 17, 2026
a8b4222
Extract daglang compiler core into daglang-driver
cursoragent Feb 17, 2026
e697257
Add core regression tests for daglang-driver
cursoragent Feb 17, 2026
ce5af60
Default daglang viz output to deterministic ASCII
cursoragent Feb 17, 2026
5c4dd28
Add makegen expand golden snapshot coverage
cursoragent Feb 17, 2026
ab7de1b
Add modules command JSON output format
cursoragent Feb 17, 2026
a51cb6d
Support config-driven discovery roots for modules command
cursoragent Feb 17, 2026
224bdbb
Enrich modules JSON with summary and ordering
cursoragent Feb 17, 2026
9db13c2
Enrich modules JSON diagnostics with structured details
cursoragent Feb 17, 2026
5d59791
Add workflow contract golden fixtures for eight scenarios
cursoragent Feb 17, 2026
3a142f3
Add expand-status golden contracts for workflow fixtures
cursoragent Feb 17, 2026
098237f
Mark completed bridge workstreams in roadmap status
cursoragent Feb 17, 2026
700867c
Expand workflow fixture coverage across matrix workflows
cursoragent Feb 17, 2026
61c8366
Document workflow fixture contract schema and update flow
cursoragent Feb 17, 2026
50dc89d
Add uniqueness and coverage guard for workflow fixtures
cursoragent Feb 17, 2026
7b2f88a
Add obligations golden contracts to workflow fixtures
cursoragent Feb 17, 2026
0e931a4
Unblock builder parity harness on rust 1.82
cursoragent Feb 17, 2026
22f6c57
Sync roadmap acceptance checklists with delivered worker tasks
cursoragent Feb 17, 2026
c1b7d34
Add deterministic guard for builder makegen parity report
cursoragent Feb 17, 2026
b54458d
Restore full test-all gate on rust 1.82 toolchain
cursoragent Feb 17, 2026
dfbc358
Mark make test-all regression gate as passing
cursoragent Feb 17, 2026
195771a
Refresh phase-1 roadmap gates to current implementation state
cursoragent Feb 17, 2026
1135880
Add makegen builder-vs-compiled ASCII viz parity guard
cursoragent Feb 17, 2026
fed68db
Add per-workflow modeling preview status document
cursoragent Feb 17, 2026
fb159d5
Preserve service transport semantics in lowered triplet nodes
cursoragent Feb 17, 2026
4a8ef63
Expose service semantic buckets in obligations output
cursoragent Feb 17, 2026
fdb902b
Mark purity and boundary guardrail gates as passing
cursoragent Feb 17, 2026
2f52f8a
Resolve interface-backed uses with provider-aware lifecycle wiring
cursoragent Feb 17, 2026
517c45e
Lower interface contracts into verification obligations
cursoragent Feb 17, 2026
e932b3e
Advance GCP credential workflow from typecheck to lower stage
cursoragent Feb 17, 2026
a2139f7
Advance AWS/Azure credential workflows toward lowering
cursoragent Feb 17, 2026
c333da7
Treat std resource types as known in single-file lowering
cursoragent Feb 17, 2026
e0bbaf2
Infer single-file compile root from dsl ancestor
cursoragent Feb 17, 2026
63bc26e
Refresh S9 deployment contract after type import cleanup
cursoragent Feb 17, 2026
d05d090
Fallback single-file typecheck when dependency closure fails
cursoragent Feb 17, 2026
2a716dc
Use dsl-ancestor root inference for check single-file mode
cursoragent Feb 17, 2026
5854ab5
Lower concrete services and advance AWS credential contract
cursoragent Feb 17, 2026
25ad775
Advance Azure credential workflow to successful compile contract
cursoragent Feb 17, 2026
aa5bfad
Stabilize single-file lowering scope and advance workflow contracts
cursoragent Feb 17, 2026
a0ffcb6
Advance gist workflow to lower-stage success contract
cursoragent Feb 17, 2026
659f15b
Promote abstract services workflow contract to compile success
cursoragent Feb 17, 2026
0fcacd4
Promote cross-cloud deployment contract and relax generic interface c…
cursoragent Feb 17, 2026
0af3320
Lower service-only targets and restore shell auth workflow contract
cursoragent Feb 17, 2026
eddd390
Add deterministic GCP credential parity scaffold test
cursoragent Feb 17, 2026
5d38f63
Add deterministic parity scaffolds for clippy and deps workflows
cursoragent Feb 17, 2026
d0f3509
Add deterministic gist snapshot parity scaffold
cursoragent Feb 17, 2026
f32eec6
Add deterministic parity scaffolds for AWS and Azure credential flows
cursoragent Feb 17, 2026
5a8c16f
Add deterministic parity scaffolds for gist diff and recent modes
cursoragent Feb 17, 2026
ca9441a
Scope parity scaffold lowering to target modules
cursoragent Feb 17, 2026
c105824
Add collection-pipe operation extraction primitives
cursoragent Feb 17, 2026
7141a60
Derive ordered collection node specs from pipe chains
cursoragent Feb 17, 2026
25817bf
Model collection pipe chains as ordered lowering plans
cursoragent Feb 17, 2026
18538ef
Add optional collection node lowering for pipe chains
cursoragent Feb 17, 2026
894d568
Model collection nodes as first-class lowered operations
cursoragent Feb 17, 2026
aff94bf
Add driver compile option to emit collection IR nodes
cursoragent Feb 17, 2026
31f9ecd
Add CLI flag for collection-node lowering
cursoragent Feb 17, 2026
d17df40
Mark collection parallelism acceptance gate complete
cursoragent Feb 17, 2026
82579d4
Normalize collection callable labels in derive and expand
cursoragent Feb 17, 2026
e88035c
Derive pipeline stage groups in progress manifest
cursoragent Feb 17, 2026
88b87fa
Add deterministic CI parity scaffold test
cursoragent Feb 17, 2026
fb5c9f1
Add deterministic bootstrap parity scaffold test
cursoragent Feb 17, 2026
bca26f6
Add CI manifest stage-group JSON coverage test
cursoragent Feb 17, 2026
922fa5d
Propagate pipeline stage names into manifest stage groups
cursoragent Feb 17, 2026
eb30a0d
Make CI bootstrap stage explicit after codegen
cursoragent Feb 17, 2026
0822bdd
Mark bootstrap constraint complete in roadmap
cursoragent Feb 17, 2026
bdf1f47
Add deterministic parity scaffolds for build/codegen/pragma
cursoragent Feb 17, 2026
666a721
Add deterministic parity scaffold for docgen workflow
cursoragent Feb 17, 2026
e7049dd
Document new parity scaffolds for tool workflows
cursoragent Feb 17, 2026
785e8d0
Compress gist DSL workflow and mark roadmap gate complete
cursoragent Feb 17, 2026
7dc3de3
Fix DSL-wide symbol ambiguities and root obligations compile
cursoragent Feb 17, 2026
7795f52
Expand CI single-file scope to include pipeline dependencies
cursoragent Feb 17, 2026
e4ba154
Add multi-provider interface wiring and contract coverage tests
cursoragent Feb 17, 2026
3544b72
Add portability and cross-provider auth lowering regressions
cursoragent Feb 17, 2026
78212e6
Document portability and cross-provider auth lowering coverage
cursoragent Feb 17, 2026
39173ba
Include resource modules in pipeline single-file lowering scope
cursoragent Feb 17, 2026
ed6ba1b
Parse interface @contract annotations and add provider contract coverage
cursoragent Feb 17, 2026
6ac7134
Mark provider portability and cross-provider auth gates complete
cursoragent Feb 17, 2026
0fab594
Add AWS/Azure contract obligation workflow fixtures
cursoragent Feb 17, 2026
b33c8c7
Add gist credential-chain composition lowering regression
cursoragent Feb 17, 2026
443ee84
Render manifest stage groups as collapsible sections
cursoragent Feb 17, 2026
5934fe9
Mark stage-group renderer acceptance gate complete
cursoragent Feb 17, 2026
5a35fe6
Lower parity scaffolds over dependency-closure module scopes
cursoragent Feb 17, 2026
0dc28cf
Add collection-based scatter counters to manifest rendering
cursoragent Feb 17, 2026
7e7ad21
Add canonical GCP credential parity comparator
cursoragent Feb 17, 2026
29623e0
Add mode-aware normalized gist parity comparator
cursoragent Feb 17, 2026
2441f47
Add total obligations metric and CI 133 parity gate
cursoragent Feb 17, 2026
5860f40
Add normalized CI parity comparator and exact gate tests
cursoragent Feb 17, 2026
c42e2cd
Remove Zone.Identifier artifacts and ignore them
cursoragent Feb 17, 2026
d066f0a
Remove tracked debug.log and ignore it
cursoragent Feb 17, 2026
b538a27
Unify check typechecking and simplify driver error API
cursoragent Feb 17, 2026
3dd04f3
Align manifest contract fields and harden workflow fixtures
cursoragent Feb 17, 2026
e420afd
Isolate parity section in module and update compile test helpers
cursoragent Feb 17, 2026
8995573
Share DAG file discovery and scope compare_topology
cursoragent Feb 17, 2026
27cd09f
.
briansrls Feb 17, 2026
49ff993
.
briansrls Feb 17, 2026
b4752f7
.
briansrls Feb 17, 2026
2797b63
.
briansrls Feb 17, 2026
a64eea2
Fix semantic bugs, remove dead code, and reduce redundancy in daglang
briansrls Feb 17, 2026
95333a2
Collapse 378 copy-paste path normalization tests into 18 table-driven…
briansrls Feb 17, 2026
189dc8c
.
briansrls Feb 17, 2026
60013e2
.
briansrls Feb 18, 2026
89828d2
.
briansrls Feb 18, 2026
9755b11
.
briansrls Feb 18, 2026
666ac0e
.
briansrls Feb 18, 2026
4094585
.
briansrls Feb 18, 2026
69b5639
.
briansrls Feb 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
613 changes: 262 additions & 351 deletions Cargo.lock

Large diffs are not rendered by default.

5 changes: 4 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,14 @@ members = [

# DSL compiler (daglang)
"core/daglang/daglang-syntax",
"core/daglang/daglang-contract",
"core/daglang/daglang-resolve",
"core/daglang/daglang-typecheck",
"core/daglang/daglang-lower",
"core/daglang/daglang-derive",
"core/daglang/daglang-emit",
"core/daglang/daglang-driver",
"core/daglang/daglang-exec-bridge",
"core/daglang/daglang-cli",

# Library crates (DAG op libraries)
Expand Down Expand Up @@ -55,7 +58,7 @@ serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
thiserror = "1.0"
toml = "0.8"
proptest = "1.4"
proptest = "=1.4.0"
sha2 = "0.10"
hex = "0.4"
glob = "0.3"
Expand Down
40 changes: 40 additions & 0 deletions TODO/TODO_URGENT_dsl_migration.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# URGENT: DSL Migration Checklist

Hand-rolled patterns that should migrate to daglang as the compiler matures.

## Ready Now (DSL has the primitives)

- [ ] **Pragma graphs** (`gunbc-dag/src/bin/pragma/graph.rs`) — 3 parallel content
upsert chains. Express as `pattern` invocations with service calls.
- [ ] **Transport triplets** (all binaries) — prepare/execute/parse 3-node pattern.
DSL already supports via service call lowering.
- [ ] **Codegen graph** (`gunbc-dag/src/bin/codegen/graph.rs`) — staged pipeline:
exists check → conditional codegen → stamp. DSL `if` in `func` bodies.
- [ ] **Conditional execution / skip semantics** — content upsert "compare" step
skips write when content matches. Needs `[skip_if]` or equivalent DSL syntax.

## Needs DSL Work First

- [ ] **Display orchestration** (`core/exec/src/display.rs`) — channel-driven event
loop with timer ticks. Needs reactive/streaming DSL primitives (`observe events`,
`every 80ms`). Rendering IR exists (`Frame`, `FrameRenderer`, `OutputMedium`)
but no DSL construct generates event loops yet.
- [ ] **Testgen dynamic targets** (`gunbc-dag/src/bin/testgen_dag/graph.rs`) — N
upsert chains, one per `DagSpecDef` discovered via inventory. Needs
compile-time metaprogramming or inventory integration in DSL.
- [ ] **Makegen tool registry** — procedural target generation from `#[tool_target]`
inventory. Same metaprogramming gap as testgen.
- [ ] **Loop extra inputs** — `for` loops where body needs non-element context
(e.g., `repo_path`). DSL `for` lowering doesn't model passthrough inputs yet.

## DSL Maturity Snapshot (2026-02-17)

| Layer | Status |
|-------|--------|
| Syntax (types, fn, func, pattern, service, resource, interface, pipeline) | Stable |
| Lowering to GraphIR | Solid — patterns expand, services → triplets, resources → acq nodes |
| Type system (records, sums, interfaces, provider resolution) | Working |
| Pragmatic use (real tools using .dag files) | **0%** — no binary uses DSL yet |

The "Ready Now" items are the highest-ROI migration targets — pragma especially,
since it's 3 identical upsert chains that map directly to a `pattern` invocation.
5 changes: 1 addition & 4 deletions core/cli/src/binary_args.rs
Original file line number Diff line number Diff line change
Expand Up @@ -433,9 +433,6 @@ mod tests {
#[test]
fn test_step_mode_unknown_subcommand_errors() {
let err = parse_step_mode(&argv(&["prog", "deploy"])).unwrap_err();
assert!(matches!(
err,
StepModeParseError::UnknownSubcommand { .. }
));
assert!(matches!(err, StepModeParseError::UnknownSubcommand { .. }));
}
}
7 changes: 6 additions & 1 deletion core/codegen/src/cli_gen.rs
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,12 @@ pub fn generate_cli_with_import(
// ============================================================================

/// Build the import items for the generated CLI.
fn build_cli_imports(tool: &ToolMeta, custom_import: Option<&str>, step_mode: bool, has_entrypoints: bool) -> Vec<Item> {
fn build_cli_imports(
tool: &ToolMeta,
custom_import: Option<&str>,
step_mode: bool,
has_entrypoints: bool,
) -> Vec<Item> {
let crate_module = NamingCase::SnakeCase.apply(&tool.crate_name);

// gunbc_exec imports
Expand Down
7 changes: 7 additions & 0 deletions core/daglang/daglang-cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,16 @@ daglang-syntax = { path = "../daglang-syntax" }
daglang-resolve = { path = "../daglang-resolve" }
daglang-typecheck = { path = "../daglang-typecheck" }
daglang-lower = { path = "../daglang-lower" }
daglang-contract = { path = "../daglang-contract" }
daglang-derive = { path = "../daglang-derive" }
daglang-emit = { path = "../daglang-emit" }
daglang-driver = { path = "../daglang-driver" }
daglang-exec-bridge = { path = "../daglang-exec-bridge" }
gunbc-ir = { path = "../../ir" }
gunbc-exec = { path = "../../exec" }
serde = { workspace = true, features = ["derive"] }
serde_json = { workspace = true }
toml = { workspace = true }

[[bin]]
name = "daglang"
Expand Down
253 changes: 253 additions & 0 deletions core/daglang/daglang-cli/src/commands.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,253 @@
use super::*;

pub(super) fn dispatch(args: &[String], cwd: &std::path::Path) {
match args[1].as_str() {
"viz" => {
let (target, format) = parse_viz_args(args).unwrap_or_else(|usage| exit_usage(&usage));
match target {
VizTarget::SelfDag => {
let dag = build_pipeline_dag();
let rendered = match format {
VizFormat::Ascii => dag.to_ascii("daglang-compiler-pipeline"),
VizFormat::Mermaid => dag.to_mermaid("daglang-compiler-pipeline"),
};
println!("{rendered}");
}
VizTarget::CompiledTarget(path) => {
let output = compile_target_or_exit(cwd, Some(&path));
let rendered = match format {
VizFormat::Ascii => output.lowered_dag.to_ascii("daglang-compiled"),
VizFormat::Mermaid => output.lowered_dag.to_mermaid("daglang-compiled"),
};
println!("{rendered}");
}
}
}
"expand" => {
let parsed = parse_compile_command_args(
"expand",
args,
"expand <file.dag> [--emit-collection-nodes]",
true,
)
.unwrap_or_else(|usage| exit_usage(&usage));
let input = parsed
.input
.expect("expand parser should require input target");
let output = compile_target_or_exit_with_options(
cwd,
Some(&input),
parsed.emit_collection_nodes,
);
println!("{}", render_expand(&output.lowered_dag));
}
"manifest" => {
let parsed =
parse_manifest_command_args(args).unwrap_or_else(|usage| exit_usage(&usage));
let output = compile_target_or_exit_with_options(
cwd,
Some(&parsed.input),
parsed.emit_collection_nodes,
);
println!(
"{}",
render_manifest_with_format(&output.derived, parsed.format)
);
}
"obligations" => {
if args.len() != 3 && args.len() != 5 {
exit_usage("obligations <file.dag> [--format text|json]");
}
let format =
parse_output_format("obligations", args).unwrap_or_else(|usage| exit_usage(&usage));
let output = compile_target_or_exit(cwd, args.get(2));
println!("{}", render_obligations(&output.derived, format));
}
"show-triplets" => {
if args.len() != 3 && args.len() != 5 {
exit_usage("show-triplets <file.dag> [--format text|json]");
}
let format = parse_output_format("show-triplets", args)
.unwrap_or_else(|usage| exit_usage(&usage));
let output = compile_target_or_exit(cwd, args.get(2));
println!("{}", render_triplets(&output.lowered_dag, format));
}
"modules" => {
let (root_arg, format) =
parse_modules_args(args).unwrap_or_else(|usage| exit_usage(&usage));
if let Some(root) = &root_arg {
let normalized = path_utils::normalize_cli_path(cwd, &PathBuf::from(root));
if let Some(error) = path_utils::check_dag_extension_casing(&normalized) {
eprintln!("{error}");
std::process::exit(1);
}
}
let roots = if let Some(root) = root_arg {
vec![resolve_root(cwd, Some(&root))]
} else {
match resolve_configured_roots(cwd) {
Ok(Some(config_roots)) => config_roots,
Ok(None) => vec![resolve_root(cwd, None)],
Err(error) => {
eprintln!("{error}");
std::process::exit(1);
}
}
};
let context = PipelineContext {
roots,
target_file: None,
};
let result = run_pipeline_or_exit(&context, PipelineStop::Report);
match format {
OutputFormat::Text => {
if let Some(report) = result.report() {
println!("{report}");
}
}
OutputFormat::Json => {
println!("{}", render_modules_result_json(&result));
}
}
}
"check" => {
if args.len() > 3 {
exit_usage("check <file.dag|dir>");
}
if let Some(input) = args.get(2) {
let normalized = path_utils::normalize_cli_path(cwd, &PathBuf::from(input));
if let Some(error) = path_utils::check_dag_extension_casing(&normalized) {
eprintln!("{error}");
std::process::exit(1);
}
}
let configured_default_roots = if args.get(2).is_none() {
match resolve_configured_roots(cwd) {
Ok(roots) => roots,
Err(error) => {
eprintln!("{error}");
std::process::exit(1);
}
}
} else {
None
};
let context = build_check_pipeline_context_with_default_roots(
cwd,
args.get(2),
configured_default_roots.as_deref(),
);
let result = run_pipeline_or_exit(&context, PipelineStop::Build);
if !result.diagnostics().is_empty() {
for diagnostic in result.diagnostics() {
eprintln!("{diagnostic}");
}
std::process::exit(1);
}
match check_from_context(&context) {
Ok(output) => {
println!("OK: checked {} file(s)", output.parsed_files);
}
Err(error) => {
eprintln!("{error}");
std::process::exit(1);
}
}
}
"compile" => {
let parsed = parse_compile_command_args(
"compile",
args,
"compile <file.dag|dir> [--emit-collection-nodes]",
false,
)
.unwrap_or_else(|usage| exit_usage(&usage));
let output = compile_target_or_exit_with_options(
cwd,
parsed.input.as_ref(),
parsed.emit_collection_nodes,
);
println!(
"Compiled {} module(s) to {} node(s), {} file(s) emitted.",
output.emitted.summary.module_count,
output.derived.manifest.total_nodes,
output.emitted.files.len()
);
for file in &output.emitted.files {
println!(" - {}", file.path);
}
}
"run" => {
let parsed = parse_run_args(args).unwrap_or_else(|error| {
eprintln!("{error}");
exit_usage(
"run [--output <path>|--output=<path>] [--dry-run|--check-mode] <file.dag>",
);
});
let normalized_output_path =
path_utils::normalize_cli_path(cwd, &PathBuf::from(&parsed.output_path));
let output_path_str = normalized_output_path.to_string_lossy().to_string();
let input_mocks = makegen_entrypoint_mocks(&output_path_str);
let mode = match parsed.mode {
RunMode::Real => ExecutionMode::Real,
RunMode::DryRun => {
ExecutionMode::DryRun(makegen_dry_run_transport_mocks(&output_path_str))
}
RunMode::CheckMode => {
ExecutionMode::DryRun(makegen_check_mode_transport_mocks(&output_path_str))
}
};
let context = build_context(cwd, Some(&parsed.input_path));
let output = match compile_from_context(&context) {
Ok(output) => output,
Err(error) => {
eprintln!("{error}");
std::process::exit(1);
}
};
let resolved = match resolve_lowered_dag(&output.lowered_dag) {
Ok(resolved) => resolved,
Err(error) => {
eprintln!("resolve error: {error}");
std::process::exit(1);
}
};
let log = match execute_resolved_dag(&resolved, mode, Some(&input_mocks)) {
Ok(log) => log,
Err(error) => {
eprintln!("execution error: {error}");
std::process::exit(1);
}
};
let written = log
.get("tools.makegen::makegen")
.and_then(|entry| entry.outputs.get("written"))
.and_then(Value::as_bool)
.unwrap_or(false);
let fresh = log
.get("compare_makegen_content")
.and_then(|entry| entry.outputs.get("fresh"))
.and_then(Value::as_bool);
let mode_label = match parsed.mode {
RunMode::Real => "real",
RunMode::DryRun => "dry-run",
RunMode::CheckMode => "check-mode",
};
if parsed.mode == RunMode::CheckMode && fresh == Some(false) {
eprintln!(
"check-mode failed: output is stale at {}",
normalized_output_path.display()
);
std::process::exit(2);
}
println!(
"OK: run mode={mode_label} output={} written={written}",
normalized_output_path.display()
);
}
cmd => {
eprintln!("Unknown command: {cmd}");
exit_usage("<command> [args...]");
}
}
}
Loading
Loading