Skip to content

CP-1b/T-8 close bucket B (items 7-10): resolve-stage scaffold dissolution - #3363

Closed
briansrls wants to merge 17 commits into
mainfrom
session/silent-gull-130
Closed

briansrls wants to merge 17 commits into
mainfrom
session/silent-gull-130

Conversation

@briansrls

@briansrls briansrls commented May 19, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Closes DECISIONS.md CP-1b items 7, 8, 9, 10 — the 03_resolve.dag
resolve-stage scaffolds — with substrate-native modeled facts. Scope is
items 7-10 only; the T-28 module-graph / ancestor-Witness portion
is explicitly NOT in this PR (see below).

  • Item 8/9 — ResolveResult / ResolveChildrenResult DISSOLVED. Both
    bespoke success-or-Diagnostic carriers are removed; resolve-stage
    results now carry the canonical Outcome<Node> / Outcome<List<Edge>>
    (std/diagnostic.dag) directly — Produced { value } / Rejected { diagnostic }. MODELING.md M6 (one result pattern, not N).
    Fail-closed diagnostics unchanged. EdgeResolveAcc / BindEdgeAcc now
    carry acc: Outcome<List<Edge>>.
  • Item 7 — Scope DISSOLVED to a product. Both BLOCKING reviews on
    this PR (operator + codex) found an earlier 🟢-terminal classification
    wrong. ScopeRoot { module } | ScopeFrame { locals, outer: Scope } is
    the hand-rolled cons-list encoding of a non-empty lexical-frame stack;
    per P1 / M9 it dissolves to Scope { module: Namespace, frames: List<Map<Symbol, Symbol>> } — the ScopeFrame recursion is List
    (List<T> = FreeMonoid<T>). scope_push_frame appends the innermost
    frame; lookup_chain folds frames with each match overriding the
    accumulator, preserving innermost-wins / frame-shadows-module
    semantics. Receipt in DECISIONS.md item 7.
  • Item 10 — anchor coverage. resolve_compile_anchor.dag gains
    anchor_resolve_wave1_multi_edge_conj_via_canonical_symbols (multi-edge
    Conj) and anchor_resolve_wave1_bind_binder_use (arity-3 Bind). All
    three anchor roots are well-formed Named-edge Conj records —
    Conj carries the LabeledEdges discipline, so positional-edge roots
    would fail node_well_formed and resolve would fail-close before
    exercising the resolver path (codex review fix). The full TestClaim
    promotion is recorded as T-22/AssertKind-blocked, not done:
    std/verification.dag's AssertKind has no resolve-execution kind and
    forbids substrate extension (operator STOP); v2 run on v4
    TestClaims is still T-22-deferred. AssertKind was not extended.
  • A small empty_edge_list() -> List<Edge> helper is added: the generic
    Outcome<T> Produced { value: ... } position does not pin a bare []
    literal under the v2 bootstrap inferencer (rationale in DECISIONS item 9).

NOT in this PR — T-28 module-graph (held for parent ruling)

T-28 (the bundled std/ module-graph carrier + ancestor-relation
Witness consumed by 03_resolve) is deliberately excluded. The
03_resolve consumer of a non-trivial ancestor-Witness call has no
genuine operands today: resolve takes one program tree, there is no
pub(in) visibility check, and Node carries no module-decl node, so
any ModulePath fed in would be a fabricated constant. The T-28 portion
is held for a parent ruling. This PR does not claim T-28 done.

Acceptance criteria

  • v2-compiler compile --source-root src/v4 --target dag — PASS:
    indexed 73 modules, resolved 73 sources, compiled: 1 files emitted, 0 diagnostics (verified on each branch head incl. the
    anchor-well-formedness head b8d05b2a7, via the CI v4:
    bootstrap-viability path).
  • resolve_compile_anchor.dag keeps resolve + the wave-1
    DagLanguageModel on the v2 compile graph; the three anchor fns
    are well-formed Conj-rooted programs exercising resolve_atom, the
    multi-edge resolve_children_homogeneous_scope, and the arity-3
    resolve_bind_node / resolve_bind_edges paths.
  • DECISIONS.md CP-1b items 7/8/9/10 and docs/audit/dissolution-inventory.md
    section 2.3 updated to match.

Known tracked follow-up (non-blocking, not this PR)

anchor_resolve_wave1_bind_binder_use uses a canonical symbol as the
Bind binder, so the slot-2 use can also resolve via the
canonical-symbol fallback. A non-canonical binder would make it a strict
frames-path regression guard once v2 run lands (T-22). Tracked
follow-up per parent ruling — not a head-move on this PR.

🤖 Generated with Claude Code

briansrls and others added 3 commits May 18, 2026 23:24
Update DECISIONS.md CP-1b items 7/8/9/10 and the dissolution-inventory
to match the 03_resolve.dag dissolution: Scope -> 🟢 terminal with the
Practice-4 five-pattern receipt; ResolveResult / ResolveChildrenResult
dissolved to the canonical Outcome carrier (M6); item 10 records the
added Bind / multi-edge compile anchors and that the TestClaim
promotion stays T-22/AssertKind-blocked.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The generic Outcome<T> `Produced { value: … }` position does not pin a
bare `[]` literal (v2: "expected type is not a collection"). Add an
`empty_edge_list() -> List<Edge>` helper so the empty edge-list is
constructed at a concrete return type.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@briansrls briansrls changed the title CP-1b/T-8 close bucket B — resolve scope/results + anchor + module graph CP-1b/T-8 close bucket B (items 7-10): resolve-stage scaffold dissolution May 19, 2026
@briansrls
briansrls marked this pull request as ready for review May 19, 2026 03:31
briansrls and others added 2 commits May 19, 2026 03:36
Replace the multi-line explanatory comments on the empty_edge_list
helper and the two new compile-anchor fns with terse one-line cites to
DECISIONS.md CP-1b items 3/9/10, where the rationale already lives.
Addresses cursor/composer-2 review on PR #3363.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Drop the empty_edge_list helper comment entirely (the typed signature
documents intent mechanically) and reduce the two anchor-fn comments to
bare DECISIONS cites. Move the empty_edge_list rationale into its proper
home, DECISIONS.md CP-1b item 9. Addresses cursor/composer-2 review on
PR #3363.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

@briansrls briansrls left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Review metadata

  • Provider / model: codex / unknown
  • Commit: 812fca35 · Trigger: schedule
  • Thinking: 316s wall

BLOCKING (1)

Root Cause

  • src/v4/compiler/03_resolve.dag Scope is still modeled as a recursive two-arm carrier → dissolve it to a root Namespace plus frame list with canonical lookup/fold accessors, or restore yellow with a named trigger.

⚠️ The Outcome dissolution looks clean, but Scope should not be reclassified terminal without closing the frame-stack algebraic dissolution path.

Comment thread src/v4/DECISIONS.md Outdated
6. **`NormalizeChildrenResult` (`compiler/03_normalize.dag`):** **Classification — 🟡 YELLOW (scaffold).** **Dissolution pattern — success-or-Diagnostic carrier:** `NormalizedChildren` vs `NormalizeChildrenRejected` threads child recursion fail-closed without a second authority. **Named triggers:** `normalize_children`; `normalize_edge` / `normalize_node` folds.

7. **`Scope` (`compiler/03_resolve.dag`):** **Classification — 🟡 YELLOW (scaffold).** **Dissolution pattern — structured lexical environment:** `ScopeRoot` (module `Namespace`) vs `ScopeFrame` (locals + outer) for K-1 use→def binding (B-4; Part 1 **B-4** row). **Named triggers:** `resolve_node`; `resolve_atom`; `resolve_bind_*` family.
7. **`Scope` (`compiler/03_resolve.dag`):** **Classification — 🟢 GREEN terminal (CP-1b/T-8 close, bucket B).** `ScopeRoot { module: Namespace }` vs `ScopeFrame { locals, outer }` is the recursive lexical environment for K-1 use→def binding (B-4; Part 1 **B-4** row). **Practice-4 five-pattern ledger — all dissolution patterns fail:** (1) *fact placement* — the scope chain is read by `lookup_chain` / `scope_root_module` / `resolve_node` / `resolve_atom` / `resolve_bind_*` and is not relocatable to one consumer; (2) *variant-is-data* — the two arms carry heterogeneous payloads (`ScopeRoot` a module `Namespace`; `ScopeFrame` a locals `Map` plus a recursive `outer`), and a flat record would admit a frame with no enclosing scope; (3) *algebraic form* — a lexical environment is not an algebra inhabitance/law fact; (4) *dimensional* — root-vs-frame is not one coordinate of a product; (5) *parameterized family* — the two constructors are not one `F<X>` over identical payloads. It is **not** an `Outcome` clone — it carries no success/diagnostic axis. Terminal recursive carrier; no scaffold dissolution trigger remains. **Named consumers:** `lookup_chain`; `scope_root_module`; `resolve_node`; `resolve_atom`; `resolve_bind_*` family.

This comment was marked as resolved.

briansrls and others added 2 commits May 19, 2026 00:50
Both BLOCKING reviews on PR #3363 (operator briansrls + codex) found the
🟢-terminal classification of `Scope` wrong: `ScopeRoot { module } |
ScopeFrame { locals, outer: Scope }` is the hand-rolled cons-list
encoding of a non-empty lexical-frame stack, so the Practice-4
variant-is-data dissolution had not failed.

Dissolve it to the product `Scope { module: Namespace, frames:
List<Map<Symbol, Symbol>> }` — the `ScopeFrame` recursion is `List`
(std/collection.dag `List<T> = FreeMonoid<T>`). `frames` is ordered
outermost-first; `scope_push_frame` appends the innermost frame;
`lookup_chain` folds the frames with each match overriding the
accumulator (seeded with the module-bindings lookup), preserving the
prior innermost-wins / frame-shadows-module semantics.

Update DECISIONS.md CP-1b item 7 and the dissolution-inventory note.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

@briansrls briansrls left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Review metadata

  • Provider / model: codex / unknown
  • Commit: 75917b96 · Trigger: schedule
  • Thinking: 286s wall

BLOCKING (1)

Root Cause

  • src/v4/test/claim/manual/resolve_compile_anchor.dag anchor fixtures reused the old positional-Conj shape despite std/node.dag declaring Conj as LabeledEdges → make the anchor roots well-formed Named-edge Conj records or use a positional-edge connective before claiming resolver-path coverage

⚠️ One anchor-shape issue blocks the claimed resolver coverage.

kind: TypeNode { connective: Conj },
children: [
Edge {
label: Positional,

This comment was marked as resolved.

briansrls and others added 2 commits May 19, 2026 03:02
codex BLOCKING review on PR #3363: the resolve compile anchors used
positional-edge `Conj` roots, but `Conj` carries the `LabeledEdges`
discipline (std/node.dag), so `node_well_formed` rejected them and
`resolve` fail-closed before exercising the resolver path the anchors
claim to cover.

Make all three anchor roots well-formed Named-edge `Conj` records: add
`anchor_decl_first` / `anchor_decl_second` module-declaration Symbol
mints and label the root edges with them (name-distinct). The `Bind`
node keeps positional edges — a `ComputationNode` has no edge
discipline. Update DECISIONS.md item 10.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

@briansrls briansrls left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Review metadata

  • Provider / model: codex / unknown
  • Commit: b8d05b2a · Trigger: schedule
  • Thinking: 306s wall

Non-blocking — Strengths

  • src/v4/compiler/03_resolve.dag The resolve-stage result carriers now use canonical Outcome, and Scope's recursive carrier dissolves to module plus List-backed frames without dropping resolver facts.

✅ No blocking concerns remain.

@briansrls briansrls left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Review metadata

  • Provider / model: codex / unknown
  • Commit: a9674f3a · Trigger: schedule
  • Thinking: 313s wall

Non-blocking — Strengths

  • src/v4/compiler/03_resolve.dag The bespoke resolve result carriers are replaced with canonical Outcome while Rejected branches continue to preserve typed diagnostics.
  • src/v4/compiler/03_resolve.dag The Scope rewrite preserves lexical shadowing: pushed frames append innermost scope and lookup folds outer-to-inner with later matches overriding earlier ones.

✅ No blocking concerns found.

@briansrls briansrls left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Review metadata

  • Provider / model: codex / unknown
  • Commit: 43724194 · Trigger: schedule
  • Thinking: 216s wall

Non-blocking — Strengths

  • src/v4/compiler/03_resolve.dag ResolveResult and ResolveChildrenResult are cleanly dissolved into canonical Outcome carriers while preserving fail-closed Diagnostic propagation.
  • src/v4/compiler/03_resolve.dag The Scope product preserves the prior shadowing semantics: module bindings seed lookup, frames append outermost-to-innermost, and later frame matches override earlier ones.

✅ No blocking concerns found.

@briansrls briansrls left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Review metadata

  • Provider / model: codex / unknown
  • Commit: eb239214 · Trigger: schedule
  • Thinking: 226s wall

Non-blocking — Strengths

  • src/v4/compiler/03_resolve.dag ResolveResult and ResolveChildrenResult dissolved to Outcome and Outcome<List> while preserving typed diagnostic propagation.
  • src/v4/compiler/03_resolve.dag The Scope product preserves the prior shadowing semantics through outermost-first frames and innermost-wins lookup.

✅ No blocking concerns found in the changed resolve-stage dissolution, anchor coverage, or ledger updates.

@briansrls briansrls left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Review metadata

  • Provider / model: codex / unknown
  • Commit: 11626701 · Trigger: schedule
  • Thinking: 318s wall

Non-blocking — Strengths

  • src/v4/compiler/03_resolve.dag ResolveResult and ResolveChildrenResult are cleanly replaced by canonical Outcome carriers without dropping diagnostic propagation.
  • src/v4/test/claim/manual/resolve_compile_anchor.dag The added anchors keep resolve, multi-edge Conj, and Bind paths present in the v4 compile graph while honestly deferring execution claims to T-22.

✅ No blocking concerns in the changed resolve-stage dissolution, anchor repair, or ledger updates.

briansrls and others added 4 commits May 19, 2026 16:09
…tory.md

The merge of origin/main hit a modify/delete conflict: main deleted
src/v4/DECISIONS.md and docs/audit/dissolution-inventory.md (operator-direct
ledger-doc nuke, #3389), while this branch had modified both with the
CP-1b items 7-10 receipts. Resolve by accepting the deletion — DECISIONS
receipt obligations are retired program-wide; keeping the modified files
would re-add nuked docs on merge.

PR #3363 now touches only the two .dag files (03_resolve.dag,
resolve_compile_anchor.dag). The `// DECISIONS CP-1b item N` one-line
cites in resolve_compile_anchor.dag stay as-is per the nuke directive
(inline comments referencing the ledger remain, no mass churn).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

@briansrls briansrls left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Review metadata

  • Provider / model: codex / unknown
  • Commit: d004004a · Trigger: schedule
  • Thinking: 233s wall

BLOCKING (2)

Root Cause

  • src/v4/compiler/03_resolve.dag unresolved main merge markers were committed into the PR diff → resolve the conflict and leave only the intended Scope product plus Outcome-based resolve carriers.
  • src/v4/test/claim/manual/resolve_compile_anchor.dag the same unresolved merge conflict carried into the anchor file → resolve the header/import/function-name conflict and keep the Named-edge anchors.

⚠️ The intended fixes look directionally right, but the PR diff currently contains unresolved conflict markers in both changed files.

// src/v4/compiler/03_resolve.dag
//
// Scope: Stage 3b — NormalizedTree→ResolvedTree; K-1 Atom use→def.
<<<<<<< HEAD

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

BLOCKING: The added merge-conflict marker leaves the resolve-stage .dag unparsable, so INVARIANTS P3/P5 cannot produce the fail-closed CP-1b dissolution surface.

@@ -1,7 +1,12 @@
// src/v4/test/claim/manual/resolve_compile_anchor.dag
//
<<<<<<< HEAD

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

BLOCKING: The added merge-conflict marker leaves the compile-anchor .dag unparsable, so the structural TestClaim surface promised by THESIS Tier 3 cannot be consumed.

@briansrls

Copy link
Copy Markdown
Contributor Author

Review metadata

  • Provider / model: openai-pro / gpt-5-5-pro
  • Commit: d004004a · Trigger: manual
  • Comparison: main @ 045a8338 ... session/silent-gull-130 @ d004004a
  • Conversation: View conversation

1. Story of the diff

Line numbers below refer to the new-file side of the attached diff.

This PR is trying to close the resolve-stage scaffold by making 03_resolve.dag less locally ad hoc: ScopeRoot | ScopeFrame is intended to dissolve into a product Scope { module, frames }, local ResolveResult / ResolveChildrenResult are intended to dissolve into the shared Outcome<T> carrier, and arrow/bind resolution now pushes frame maps through scope_push_frame rather than constructing nested scope variants. The manual resolve anchor file is expanded to exercise the new wave-1 language-model canonical-symbol path with named root edges, a multi-edge Conj, and a bind-binder-use case.

That intended direction is aligned with CP-1b/T-8: fewer local coproducts, more shared carriers, and more compile anchors over the resolve contract. However, the attached diff still contains unresolved merge-conflict markers in both changed files, and it reintroduces DECISIONS ledger comments after the ledger-doc retirement rule, so the PR is not landable as-is.

2. Invariant categories

  1. LAYER MODEL (substrate vs implementation).

Finding — src/v4/compiler/03_resolve.dag:57 contains <<<<<<< HEAD directly before the Scope declaration, leaving the intended product shape at src/v4/compiler/03_resolve.dag:58-61 and the old coproduct shape at src/v4/compiler/03_resolve.dag:63-79 in the same modeled resolve-stage surface. Principle: single authority / illegal states unrepresentable. This is not implementation-only Rust; Scope is the resolve pass’s model of lookup context, so landing both representations destroys the single authority for scope semantics and the file is syntactically invalid.

  1. INVARIANTS.md + modeling-discipline.md.

Finding — src/v4/test/claim/manual/resolve_compile_anchor.dag:96 and src/v4/test/claim/manual/resolve_compile_anchor.dag:127 add // DECISIONS CP-1b ... comments as in-file ledger/rationale. Principle: Practice 9 no-prose discipline / ledger-doc retirement. docs/modeling-discipline.md:8-18 says src/v4/DECISIONS.md was deleted and non-comment receipts belong in PR review, INVARIANTS.md §P5, src/v4/TASKS.md, or grounding evidence; docs/modeling-discipline.md:520-563 restricts .dag comments to the allowed header/anchor/tag forms. These DECISIONS comments should be removed or replaced with an allowed one-line carrier tag if a live tag is required.

  1. CODING.md.

Finding — raw merge markers remain in code-bearing positions: src/v4/compiler/03_resolve.dag:421 leaves <<<<<<< HEAD above resolve_bind_binder_target, and src/v4/test/claim/manual/resolve_compile_anchor.dag:21 leaves a conflict inside the import list. Principle: clear source / readable control flow / no prose-as-structure. These are not valid .dag tokens and will prevent the changed files from parsing; resolve the conflict completely before merge.

  1. TESTING.md.

Finding — the new manual anchor cannot serve as a compile anchor while it is itself conflicted. src/v4/test/claim/manual/resolve_compile_anchor.dag:21-27 leaves mutually exclusive language-model imports, and src/v4/test/claim/manual/resolve_compile_anchor.dag:44-54 leaves competing first-anchor function names. Principle: behavior-driven regression tests. The intended anchor level is reasonable for “compile-only until T-22,” but the added test fixture must be syntactically single-source and compileable before it can ratchet resolve behavior.

  1. LOCKED DESIGN DECISIONS.

N/A — the diff does not modify a locked design document or introduce a new design divergence. The live-design mismatch I see is the deleted-ledger reintroduction, covered under Practice 9 and PM intent.

  1. TRACKED vs UNTRACKED DEBT.

Compliant — no new TODO/scaffold surface is added beyond the existing T-8/T-22 scaffold status lines, and the intended Scope/Outcome changes reduce local scaffold rather than add it. The DECISIONS comments are not acceptable tracked debt; they are findings above because they point to a retired authority rather than naming a live bounded trigger.

2.5. Top-down PM intent review

Finding — the PM-level direction in docs/modeling-discipline.md:8-18 and reinforced at docs/modeling-discipline.md:92 is that src/v4/DECISIONS.md / ledger-doc authority is deleted, with inline marks plus PR review/commit messages as the process receipt. The diff contradicts that by adding live in-file directions back to DECISIONS at src/v4/test/claim/manual/resolve_compile_anchor.dag:96 and src/v4/test/claim/manual/resolve_compile_anchor.dag:127, and also within the resolve file conflict at src/v4/compiler/03_resolve.dag:422. If a worker followed the file faithfully, they would treat a retired ledger as current authority, which dilutes the ledger-doc dissolution goal.

3. Verdict

REQUEST_CHANGES. The intended resolve-stage dissolution is directionally right, but the PR cannot land with unresolved conflict markers in both changed .dag files. Also remove the reintroduced DECISIONS ledger comments so the PR preserves the ledger-doc retirement intent.

briansrls added a commit that referenced this pull request May 20, 2026
…t markers

Rebuild on main with eager-ferret canonical_symbols accessor, silent-gull
coproduct dissolution + compile anchors, and bucket-C wave-1 LM naming.
Removes accidental <<<<<<< / ======= / >>>>>>> anchors left on origin/pr-3363.

Co-authored-by: Cursor <cursoragent@cursor.com>
briansrls added a commit that referenced this pull request May 20, 2026
…d) (#3436)

* fix(v4 T-8): resolve stuck PRs #3420/#3363/#3381 — drop merge conflict markers

Rebuild on main with eager-ferret canonical_symbols accessor, silent-gull
coproduct dissolution + compile anchors, and bucket-C wave-1 LM naming.
Removes accidental <<<<<<< / ======= / >>>>>>> anchors left on origin/pr-3363.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(ci): v4 bootstrap exit 143 — standard-8 + resolve-posture gate (#3420)

Carry eager-ferret CI mitigations: ubicloud-standard-8 when v4 affected,
scripts/v4-bootstrap-viability.sh accepts SIGTERM after clean resolve on
Actions, 35m step budget. Fixes raw compile step failing at exit 143 post-resolve.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(ci): split v4 bootstrap from resolve-posture bridge (P2/P3)

Address openai-pro REQUEST_CHANGES: full compile gate no longer maps
timeout/SIGTERM to success via log grep. CI runs a separate tracked bridge
step (structured JSON receipt, dissolution header, TASKS T-8 debt line).

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(v4 resolve): dissolve ResolveResult carriers into Outcome<T>

Per openai-pro REQUEST_CHANGES on cd7271f: remove local ResolvedNode/
ResolveRejected and ResolvedChildren coproducts; use canonical
Outcome<Node> and Outcome<List<Edge>> throughout 03_resolve.dag.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
@briansrls

Copy link
Copy Markdown
Contributor Author

Superseded by #3436 (T-8 closeout consolidated PR by eager-bat-439, merged 2026-05-20T06:50:41Z as commit ed7ceffcf). #3436 carried forward the resolve-stage scaffold dissolution + Scope work from this PR, with the substantive v4 compile errors fixed and the Outcome carrier dissolution per openai-pro review applied. Closing as superseded.

— sent from smart-boar-330

@briansrls briansrls closed this May 20, 2026
@briansrls
briansrls deleted the session/silent-gull-130 branch June 1, 2026 18:43
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