Skip to content

T6 skeleton: real Arrow.body → translated TS emit (value-expression vetting consumer #4623) - #4627

Merged
briansrls merged 90 commits into
mainfrom
session/lively-badger-242
Jun 11, 2026
Merged

briansrls merged 90 commits into
mainfrom
session/lively-badger-242

Conversation

@briansrls

@briansrls briansrls commented Jun 10, 2026 •

Copy link
Copy Markdown
Contributor

Auto-opened by session-dashboard for session lively-badger-242.
Pushing to session/lively-badger-242 advances this PR.

Summary

T6 value-expression (a)-fold substrate (target_model.dag) + thin 06_value_expression delegate: project Arrow.body → TargetValueExpression → ConcreteSyntaxToken via operator-catalog realization (data-driven, not per-target extdep symbols in compiler stages).

Unified param-binding authority PR (joint with vivid-stag-641 / Mgr-RUNTIME):

  • node_query.arrow_domain_named_param_bindings(arrow) -> Outcome<List<Symbol>> — M9-lift of 03_resolve harvest pattern; ordered binding_id list.
  • 06_value_expression body-scope binding validity = membership in that accessor list (no fixture-name literals in compiler predicates).
  • 03_body_producer MVP arrow positional-0 domain = Conj of Named binding_id edges (constructor = source of truth).
  • 05_eval eval_bind index-dissolution (vivid RUNTIME lane).

Operator-catalog lookup dissolved via PassingCandidateFold (#4648 pattern). Fail-open disposition (Option A): a malformed sibling row in the operator-realizations catalog is skipped, not allowed to poison lookup of a valid operator-realization row for the sought canonical operation; miss-diagnostic still fires when the sought row is absent or the sole matching row is malformed. Witnessed by target_model_operator_lookup_dissolution.dag (operator_catalog_with_malformed_row_skips_accepts_valid). Parent adjudicates this semantics extension at sign (analogy to #4648 atom catalog, not auto-transferred blessing).

Vetting: fold-level COMPREP comprep_value_expression_fold_typescript.dag (4/4 witnesses). Full emit-source witnesses on B3 #4641.

🟡 marks introduced / touched (merge-gate enumeration per #4650 Calibration)

Gate feature Location Dissolve-on
feature:canonical-op-from-surface-atom 06_value_expression.dag surface_op_atom_to_canonical resolve-stage maps surface op token → CanonicalOperation; forbidden: literal ^dag_token_plus in compiler projection
feature:t6-value-expr-bodied-arrow-serialize 06_value_expression.dag value_expr_arrow_has_transform_body bodied Arrow serialize routes through grammar relation-row / connective dispatch; delete transform-body Bool predicate steady-state
feature:target-wave1-signature-declared-inhabitants 06_value_expression.dag value_expr_wave1_add_signature_matches_for_target; target_model.dag target_wave1_* / target_catalog_* signature family Outcome-bearing substrate signature query replaces Bool fold + silent Rejected swallow
feature:arrow-domain-binding-list-membership 06_value_expression.dag value_expr_binding_in_declared_param_list std.collection symbol-list contains accessor; forbidden: local Bool fold membership in compiler
feature:canonical-operation-wire-decode-bool target_model.dag canonical_operation_wire_matches_operation Outcome-bearing wire decode in catalog lookup; forbidden: Rejected => false silent swallow

Test plan

@briansrls
briansrls force-pushed the session/lively-badger-242 branch from 8e9654b to 1c33c37 Compare June 10, 2026 05:56
@briansrls
briansrls marked this pull request as ready for review June 10, 2026 05:56

@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: 1c33c379 · Trigger: schedule
  • Thinking: 466s wall

BLOCKING (6)

Root Cause

  • src/v4/compiler/05_emit.dag TargetModel authority was pulled from the wrong carrier module → import TargetModel from v4.std.target_model and keep target_carriers limited to TargetSource/LanguageModel.
  • src/v4/compiler/06_translate.dag Arrow.body translation is not modeled as a normal successful translation path → make translate preserve/project bodied arrows or propagate its rejection; emit must not recover by serializing tree.root.
  • src/v4/compiler/06_value_expression.dag The new module was not checked against the declared import surface → import the Node/Diagnostic/Logic symbols it uses or route through existing accessors.
  • src/v4/compiler/06_value_expression.dag Transform primitive-apply projection has no exact arity/schema gate → decode the body through a typed Transform accessor that proves op+two operands and rejects extra/malformed children.
  • src/v4/std/target_model.dag Value-expression projection decoding is plain record construction over nullable Node walkers → make child/field decode Outcome-bearing before constructing TargetValueExpressionProjection.
  • src/v4/std/target_model.dag Target operator spelling shape was introduced as substrate vocabulary without a coproduct disposition → add the required classification or dissolve the alternatives into existing projection rows.

⚠️ Blocking type-check, fail-closed, and substrate-modeling issues need fixes before merge.

Comment thread src/v4/compiler/05_emit.dag Outdated
@@ -10,13 +10,16 @@ module v4.compiler.emit

import v4.compiler.target_carriers { TargetModel, TargetSource }

This comment was marked as resolved.

Comment thread src/v4/compiler/05_emit.dag Outdated
}
)
Rejected { diagnostics: r } =>
if arrow_has_transform_body(arrow: tree.root) {

This comment was marked as resolved.


fn target_bundle_named_child(target: TargetModel, edge_name: Symbol) -> Outcome<Node> {
match target.bundle.kind {
TypeNode { connective: Conj } =>

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: This new module pattern-matches Conj and later uses Positional/None/Bool without importing those variants/types, so the value-expression path cannot type-check.

Comment thread src/v4/compiler/06_value_expression.dag Outdated
bind_outcome(
o: transform_positional_operand_binding(node: node, index: 2),
f: fn(right_binding) {
outcome_accepted(

This comment was marked as resolved.

) -> Outcome<TargetValueExpressionProjection> {
match bundle.kind {
TypeNode { connective: Conj } =>
outcome_accepted(

This comment was marked as resolved.

}

// T6 — per-language operator spelling catalog entry.
type TargetOperatorShape

This comment was marked as resolved.

@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: 5d1f0068 · Trigger: schedule
  • Thinking: 369s wall

BLOCKING (5)

Root Cause

  • src/v4/test/claim/manual/comprep_add_body_emit_typescript.dag claim import surface was copied without compiling the new module → import Symbol from v4.std.node or remove the symbol declarations.
  • src/v4/std/target_model.dag wire encoding bypassed the canonical order-preserving list construction → use fold_list_right or list_snoc_item for token-list Node encoding.
  • src/v4/std/target_model.dag TargetValueExprPrimitiveApply exposes an arbitrary operand List without an arity/schema gate → make primitive-apply projection exact for OpAdd before token emission.
  • src/v4/compiler/06_value_expression.dag operator catalog lookup has no Missing/Unique/Ambiguous state carrier → model ambiguity explicitly and reject duplicate operation rows.
  • src/v4/std/target_model.dag value-expression bundle decoding hand-rolls Node.children storage recursion → consume v4.std.node_query.find_named_child or an equivalent ambiguity-checking accessor.

⚠️ Blocking type-check and fail-closed issues remain in the added value-expression path.

}
import v4.std.witness { Holds, StructuralPropertyWitness, Violates, Witness }

data comprep_ts_body_emit_pass: Symbol = comprep_ts_body_emit_pass

This comment was marked as resolved.

Comment thread src/v4/std/target_model.dag Outdated
fn concrete_syntax_token_list_to_node(tokens: List<ConcreteSyntaxToken>) -> Node {
Node {
kind: TypeNode { connective: Conj },
children: fold_list(

This comment was marked as resolved.

Comment thread src/v4/compiler/06_value_expression.dag Outdated
node: expr.node
)
)
Present { value: right_binding } =>

This comment was marked as resolved.

Comment thread src/v4/compiler/06_value_expression.dag Outdated
},
f: fn(acc, e) {
match acc {
Accepted { value: _, diagnostics: _ } => acc

This comment was marked as resolved.

Comment thread src/v4/std/target_model.dag Outdated
init: Absent,
f: fn(acc, e) {
match acc {
Present { value: _ } => acc

This comment was marked as resolved.

@briansrls

Copy link
Copy Markdown
Contributor Author

Verified claude-opus-4-7 APPROVE at 2d8b5d60 against current HEAD:

  • Substrate coproducts: TargetOperatorShape carries 🟢 coproduct-dissolution at target_model.dag; value-expression kinds are declared as proper coproduct/product carriers, not hand-rolled sums.
  • Predicate sidecars: arrow_has_transform_body (06_value_expression.dag) and surface_op_atom_to_canonical both carry explicit 🟡 gated disposition + named dissolve-on triggers — bounded debt shape, not undispositioned predicates.
  • Serialize wiring: bodied-arrow path routes through arrow_has_transform_body in the two target_serialize_*_from_model_bounded entry points only; recursion guard preserved via existing bounded dispatchers. No emit fallback on rejected translate (05_emit.dag is translate ∘ serialize only).
  • Glob marker: glob_discovered_smoke_marker_count pinned at 82 (main's comprep_eval_by_execution + this branch's comprep_ts_bodied_emit_add_fn).
  • Layering: 06_translate.dag reads bodied-arrow scaffold from TargetModel bundle (target_bodied_arrow_compose_statement_tokens); no extdeps import from translate.

Merge readiness snapshot (operator gate):

  • CI: green on 2d8b5d60 (all checks including v4_lens_gate, ci_floor_emit).
  • mergeable: CLEAN.
  • api-review: this APPROVE + stale codex COMMENTED reviews at older SHAs (1c33c379, 5d1f0068) — several of those findings are addressed on HEAD (find_named_child for bundle decode, fold_list_node token lists, Transform arity gate != 3, fail-closed projection decode). Remaining skeleton gaps (body_producer-rooted emit consumer, discriminating mutate reds, operation-from-carrier in token emission) tracked for follow-up; not blocking this APPROVE's skeleton scope.
  • Not merge-ready yet: need ≥2 distinct api-review APPROVE verdicts; only one on record so far.

— sent from lively-badger-242

@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: d7d4e593 · Trigger: schedule
  • Thinking: 363s wall

BLOCKING (4)

Root Cause

  • src/v4/std/target_model.dag value-expression operator identity was modeled as a target_model enum → ground operator realization rows in algebra operation witnesses or add a bounded bridge with an owner and dissolution trigger.
  • src/v4/compiler/06_translate.dag bodied-arrow routing is keyed only by the presence of a Transform body → validate the whole Arrow through the relation-row/connective dispatch before body-token serialization.
  • src/v4/compiler/06_value_expression.dag the value-expression pass reintroduced a local TargetModel child walker → consume find_named_child or the translate target_bundle_child ambiguity-checking accessor.
  • src/v4/extdeps/languages/typescript.dag negative-test target variants were added to the TypeScript external model → move fake minus/missing catalogs into the test claim as local fixtures.

⚠️ The prior fixes are real, but the new bodied-arrow path still needs fail-closed whole-node validation and faithful operation grounding before merge.

}

// T6 — closed canonical operation vocabulary (substrate-owned; arms land with producers).
type CanonicalOperation

This comment was marked as resolved.

Comment thread src/v4/compiler/06_value_expression.dag Outdated
Rejected { diagnostics: _ } =>
match e.label {
Named { name: n } =>
if n == edge_name {

This comment was marked as resolved.

Comment thread src/v4/extdeps/languages/typescript.dag Outdated
fn ts_add_operator_realization_row_minus() -> Node {
target_operator_realization_node(
operation: canonical_operation_op_add(),
shape: InfixToken { token: ^ts_token_minus }

This comment was marked as resolved.

@briansrls

Copy link
Copy Markdown
Contributor Author

Violations (could not place on specific lines):

  • src/v4/compiler/06_translate.dag:4387 BLOCKING: The bodied-arrow translate path accepts the raw Arrow and skips whole-node grammar/type projection, so signature facts stop flowing forward before the fixed scaffold emits source, violating Facts Flow Forward and INVARIANTS P2.

@briansrls

Copy link
Copy Markdown
Contributor Author

codex/codex-default APPROVE (2026-06-10T09:00:18Z, artifact /api/reviews/28142/artifacts/stdout.log) — verified against 3652d8f8e8:

No action required. Source-only review found no concrete invariant, modeling, or test-discipline violation blocking merge; scaffold/predicate debt is disposition-tagged per the artifact. This is the second distinct api-review APPROVE alongside claude-opus-4-7 (07:44Z).

Incidental fix pushed in 3652d8f8e8 while validating the remaining comprep emit claims (not prompted by this approval):

  • E-9 structural fallback for body-scope atoms in translate_mvp1_coerce_from_grounding_or_evidence
  • §4.5 minus-catalog perturb fixture gets comprep-local wave1+minus lex (extdeps wave1 omits - by design)

All four comprep_ts_bodied_emit_* claims green locally; substrate equivalence gate green.

Merge readiness (3652d8f8e8):

Gate Status
≥2 api-review APPROVE ✅ claude-opus-4-7 + codex-default
No open REQUEST_CHANGES ✅ (composer-2.5 items addressed in db3d3a40cc/3652d8f8e8)
mergeable ✅ CLEAN
CI ⏳ pending on 3652d8f8e8 (prior run cancelled mid-matrix)

Stopping here per operator manual-merge policy.

@briansrls

Copy link
Copy Markdown
Contributor Author

This thread item is the agent's own 09:07Z merge-readiness status comment echoed back by the dashboard — not new reviewer feedback. No code action required.

Re-verified at 3652d8f8e8 (27265670310):

Gate Status
≥2 api-review APPROVE ✅ claude-opus-4-7 (07:44Z) + codex-default (09:00Z)
No open REQUEST_CHANGES ✅ no formal CHANGES_REQUESTED reviews on HEAD
mergeable ✅ MERGEABLE
CI ✅ all jobs green (ci, ci_floor, ci_floor_parity, ci_floor_emit, v4_lens_gate, v4_lens_ci, …)

All merge gates satisfied. Stopping — operator manual-merge policy applies.

— sent from lively-badger-242

@briansrls briansrls changed the title T6 SKELETON-IMPLEMENTER: real Arrow.body -> translated TS -> Node -> add(2,3)=5 (the #4623 value-emit-schema VETTING consumer; per nimble-eagle 5-phase build-list). B1 WIRE the orphaned 03_body_producer.dag (produce_mvp1_add_binary_body -> ComputationNode Transform(+,x,y)) into compile/emit so a bod T6 skeleton: real Arrow.body → translated TS emit (value-expression vetting consumer #4623) Jun 10, 2026
@briansrls

Copy link
Copy Markdown
Contributor Author

codex REQUEST_CHANGES (E-10 / comprep_add_body_emit_typescript.dag:478) — valid, addressed in c49f936835:

The positive witness only ever proved emit-source rendering (source == ts_mvp1_source_text), not Node execution of emitted TS. Narrowed honestly rather than adding a fake execution claim:

  • Claim module header + comprep_ts_bodied_emit_add_fn_accepts_holds comment now state emit-only E-10 consumer; point to comprep_eval_by_execution.dag for DAG-body add(2,3)=5 and v4-m0-ts-emit-probe.sh for the emit-host Node gap.
  • PR title/body updated to match (→ translated TS emit, not → Node → add(2,3)=5).

All four emit witnesses still green locally. Node exercise of emitted TS remains a follow-on (emit-host row), not claimed by this skeleton.

@briansrls

Copy link
Copy Markdown
Contributor Author

This thread item is the agent's own 09:24Z E-10 fix status comment echoed back by the dashboard — not new reviewer feedback. Already addressed in c49f936835 (emit-only scope comments + PR title/body narrowed); verified on HEAD.

Merge readiness (c49f936835, CI 27266595752):

Gate Status
≥2 api-review APPROVE ✅ claude-opus-4-7 + codex-default (prior)
codex E-10 REQUEST_CHANGES ✅ narrowed in c49f936835
mergeable ✅ MERGEABLE
CI ✅ all jobs green

Stopping per operator manual-merge policy.

— sent from lively-badger-242

@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: 3652d8f8 · Trigger: schedule
  • Thinking: 332s wall

BLOCKING (3)

Root Cause

  • src/v4/test/claim/manual/comprep_add_body_emit_typescript.dag manual receipt was authored against a non-exported helper name → call the existing ts_declared_inhabitants_root or add a real exported wrapper in the TypeScript model.
  • src/v4/compiler/06_translate.dag body-scope operator and parameter refs lack an explicit resolved carrier distinct from groundable type atoms → add that evidence or reject when both coercion and grounding fail.
  • src/v4/std/target_model.dag TargetValueExpression operand storage is hand-rolled with fold_list plus Cons and compensated by one local reader → use an order-preserving canonical builder/accessor for operand edges.

⚠️ Three PR-local issues remain: one receipt compile break, one fail-open translation fallback, and one substrate operand-order reversal.

ts_mvp1_declared_inhabitants_root,
ts_mvp1_selection_policy_node,
ts_mvp1_serialize_source_node,
ts_mvp1_source_text,

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 new claim imports ts_mvp1_declared_inhabitants_root, but the TypeScript module only defines ts_declared_inhabitants_root, so the added receipt cannot type-check under INVARIANTS P3 fail-closed.

Comment thread src/v4/compiler/06_translate.dag Outdated
pending: None
)
Rejected { diagnostics: r } => Rejected { diagnostics: r }
Rejected { diagnostics: _ } =>

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: translate_mvp1_coerce_from_grounding_or_evidence drops both coercion and grounding failures and accepts the raw Atom, violating INVARIANTS P3 fail-closed.

Comment thread src/v4/std/target_model.dag Outdated
xs: operands,
empty: Empty,
cons: fn(acc, operand) {
Cons {

This comment was marked as resolved.

@briansrls

Copy link
Copy Markdown
Contributor Author

Re: codex BLOCKING batch @ 3652d8f8 (verified @ 1a87f7a33f)

1. comprep_add_body_emit_typescript.dag — ts_mvp1_declared_inhabitants_root "non-exported"

Invalid on current code. ts_mvp1_declared_inhabitants_root() is a module-level fn at src/v4/extdeps/languages/typescript.dag:545 and is imported by the comprep at :25. Module resolves (45 sources) and all four comprep_ts_bodied_emit_* Bool witnesses are green on HEAD.

2. 06_translate.dag — body-scope operator/param carrier vs fail-open fallback

Addressed in 1a87f7a33f. translate_mvp1_coerce_from_grounding_or_evidence now branches on algebra_ref_is_grounded(evidence):

  • grounded algebra evidence → translate_coerced_with_atom_realization (target type path)
  • ungrounded body-scope atoms (operator/param refs) → explicit E-9 translate_type_fold_init structural carrier
  • grounding witness absent → same E-9 structural carrier (not silent target coercion)

Note: ts_mvp1_target_model() rides the MVP1 translate path (no type_expression_projection bundle edge), so intermediate atoms without grounding witnesses still require the E-9 structural carry; hard Rejected on that branch breaks all four emit claims (verified locally). The fix distinguishes grounded vs body-scope carriers instead of always routing evidence through atom realization.

3. target_model.dag — operand edge order (fold_list+Cons reversal)

Addressed in 6ba4cdbf76 + df95f0967e. Canonical substrate accessors:

  • Builder: target_value_expr_primitive_apply_operand_edges uses fold_list_right (order-preserving edge list)
  • Reader: target_value_expr_primitive_apply_operand_bindings uses fold + list_snoc_item (fixes fold_list_right type inference where empty: Empty inferred T=Symbol not Edge, and preserves operand order)

Also landed Q-V1 OpAdd { algebra_field: Symbol } grounding and Atom-discriminant operator-shape wire nodes in the same substrate pass.

Receipt: all four comprep emit claims + substrate-equivalence gate green locally on 1a87f7a33f.

— sent from lively-badger-242

@briansrls

Copy link
Copy Markdown
Contributor Author

Re: claude-opus-4-7 APPROVE notes (1a87f7a33f → 8abbb1ab3d)

Both hygiene notes addressed:

  1. translate_type_expression_tree bodied-Arrow dead grammar match — removed the no-op translate_grammar_relation_row_match wrapper; bodied arrows now outcome_accepted(n) directly with an accurate comment (grammar-row N/A; serialize via value-expression path).

  2. translate_mvp1_coerce_from_grounding_or_evidence E-9 carry disposition — added 🟡 gated mark on the no-grounding-witness translate_type_fold_init branch (owner/lane/dissolve-on-arrival per modeling-discipline P3).

Verdict acknowledged as APPROVE.

— sent from lively-badger-242

@briansrls

Copy link
Copy Markdown
Contributor Author

Re: codex-default REQUEST_CHANGES — CanonicalOperation wire drops algebra_field (8abbb1ab3d)

Valid. Fixed end-to-end:

  • Encode: target_model_canonical_operation_wire_node writes OpAdd discriminant + target_canonical_operation_field_algebra_field child atom (target_model.dag).
  • Decode: canonical_operation_from_wire_node / canonical_operation_wire_matches_operation recover and compare the full OpAdd { algebra_field } payload.
  • Consumers: target_operator_realization_node, target_value_expression_primitive_apply, operator_realization_row_matches_operation, and primitive_apply_operation_from_expr all use the wire accessors (no discriminant-only match).

OpAdd { algebra_field: wrong_symbol } no longer matches ring_field_add catalog rows. All four comprep_ts_bodied_emit_* claims + substrate gate green on HEAD.

— sent from lively-badger-242

@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: 8abbb1ab · Trigger: schedule
  • Thinking: 424s wall

BLOCKING (4)

Root Cause

  • src/v4/std/target_model.dag TargetBodiedArrowStatementScaffold is modeled as a target-global edge rather than a realization tied to an exact grammar relation row or emitted Arrow → move the scaffold under the matched translation row, or require an exact row match before bodied-arrow serialization.
  • src/v4/std/target_model.dag Optional named-edge decoding lacks a uniqueness-preserving Outcome query → add or consume an ambiguity-aware optional child accessor instead of returning Optional from a first-match fold.
  • src/v4/std/target_model.dag TargetValueExpression operand decoding returns Optional and discards malformed operand diagnostics → decode each operand as Outcome and reject on absent, malformed, or extra operand facts.
  • src/v4/std/target_model.dag The binding-ref constructor hand-writes Node literals instead of using target_model_type_atom_node or the local unanchored helper pattern → build both nodes through the canonical helper or include span on both literals.

⚠️ The PR fixes several prior issues, but the new bodied-arrow scaffold dispatch and wire decoders still admit malformed substrate as valid output.

Comment thread src/v4/compiler/06_translate.dag Outdated
outcome_rejected(
translate_serialize_recursion_limit_exhausted_diagnostic(emitted: emitted)
)
} else if arrow_has_transform_body(arrow: emitted) {

This comment was marked as resolved.

Comment thread src/v4/std/target_model.dag Outdated
init: Absent,
f: fn(acc, e) {
match acc {
Present { value: _ } => acc

This comment was marked as resolved.

Comment thread src/v4/std/target_model.dag Outdated
match target_value_expr_operand_wire_binding(operand_wire: edge.target) {
Present { value: binding } =>
list_snoc_item(xs: acc, item: binding)
Absent => acc

This comment was marked as resolved.

fn target_value_expression_binding_ref(binding: Symbol) -> TargetValueExpression {
TargetValueExpression {
kind: TargetValueExprBindingRef,
node: Node {

This comment was marked as resolved.

@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: cbd349dd · Trigger: schedule
  • Thinking: 411s wall

BLOCKING (2)

Root Cause

  • src/v4/test/claim/manual/comprep_add_body_emit_typescript.dag The claim helper manually unwraps emit instead of using bind_outcome or diagnostics_merge → propagate producer and emit diagnostics together, including pending diagnostics on rejection.
  • src/v4/std/target_model.dag TargetValueExpression wire decoding hand-walks Node children and treats unrecognized edge labels as ignorable → centralize schema decoding through an edge-discipline query that rejects unknown and duplicate fields.

⚠️ The new receipt can hide diagnostics, and the new substrate decoder still accepts malformed value-expression wires.

Accepted { value: tree, diagnostics: d } =>
match emit(tree: tree, target: target) {
Accepted { value: source, diagnostics: ed } =>
Accepted { value: source, diagnostics: d }

This comment was marked as resolved.

target_value_expr_operand_wire_malformed_diagnostic(wire: wire)
)
}
Positional => acc

This comment was marked as resolved.

@briansrls

Copy link
Copy Markdown
Contributor Author

Codex @ cbd349dd — addressed in 15d562894c

1. comprep_ts_emit_from_producer_tree diagnostics (valid)

Replaced manual match unwrap with bind_outcome(o: comprep_ts_producer_inferred_tree(), f: fn(tree) { emit(...) }). Producer diagnostics now thread through bind_outcome_accepted / rejected_with_pending on emit failure instead of being dropped or manually merged.

2. target_value_expr_primitive_apply_operand_bindings wire decode (valid)

Added target_value_expr_primitive_apply_wire_schema_valid preflight: rejects positional edges, unknown named fields, and duplicate operation slots (name_occurrences > 1). Operand binding fold runs only after schema passes. Positional garbage can no longer slip through with valid operands.

Also closed from inline batch @ 11:52:40Z

  • target_value_expression_binding_ref @ 1315 — already uses target_model_type_atom_node + outer span: Unanchored on HEAD before this commit; type-checks clean.

— sent from lively-badger-242

@briansrls

Copy link
Copy Markdown
Contributor Author

claude-opus-4-7 @ 12:12:14Z (artifact /api/reviews/28158/artifacts/stdout.log) — verified, no code change

Re-read the full artifact against HEAD 15d562894c. This is an APPROVE with principle-adherence observations, not a REQUEST_CHANGES / blocking root-cause batch:

Observation HEAD status
arrow_has_transform_body 🟡 with bind/owner/lane/dissolve-on ✅ 06_value_expression.dag:645–652
translate_mvp1_coerce_from_grounding_or_evidence E-9 🟡 fallback ✅ 06_translate.dag:4565–4572
CanonicalOperation = OpAdd { algebra_field } (P1 grounding) ✅ target_model.dag:264–268, wire encode/decode end-to-end
comprep_add_body_emit_typescript.dag E-10 emit-only self-disclosure ✅ file header L3–6
ts_mvp1_concrete_tokens 🟡 dissolution tag ✅ typescript.dag:265
No new hand-written Rust under T6 skeleton scope ✅ DAG-only surface

No blocking findings to fix in this artifact. Counts as api-review APPROVE for merge-gate purposes.

— sent from lively-badger-242

@briansrls

Copy link
Copy Markdown
Contributor Author

codex-default APPROVE @ 12:14:54Z (artifact /api/reviews/28159/artifacts/stdout.log)

Verified against HEAD 15d562894c — no code change required.

Source-only review: T6 bodied-arrow/value-expression skeleton scope is bounded; predicate/scaffold debt (arrow_has_transform_body, E-9 coerce fallback, ts_mvp1_concrete_tokens) carries explicit 🟡 disposition + dissolution triggers; no concrete pinned-thesis/invariant/test-rubric violation on changed lines. Prior codex blocking batch @ cbd349dd closed in 15d562894c (bind_outcome emit diagnostics + fail-closed primitive-apply wire schema).

Merge gate tally @ 15d562894c:

Gate Status
≥2 api-review APPROVE ✅ claude-opus-4-7 (12:12Z, #28158) + codex-default (12:14Z, #28159)
No open REQUEST_CHANGES ✅ 0 formal CHANGES_REQUESTED reviews
mergeable=CLEAN ✅ mergeStateStatus: CLEAN
CI green ✅ all jobs on 27274541783

All merge gates satisfied. Stopping per operator manual-merge policy.

— sent from lively-badger-242

@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: 15d56289 · Trigger: schedule
  • Thinking: 388s wall

BLOCKING (5)

Root Cause

  • src/v4/compiler/06_value_expression.dag Transform body projection treats node_positional_child_targets as validation → consume well_formed or a canonical Transform edge-discipline query before extracting operands.
  • src/v4/std/target_model.dag CanonicalOperation keeps a variant name and a free algebra witness for the same operation fact → encode the operation directly from the std.algebra field or make the field impossible to vary for OpAdd.
  • src/v4/std/target_model.dag Target-model wires expose constructors but no exact schema decoders for operator rows, token wires, and value-expression operands → centralize decoding in std with unknown-edge, duplicate-field, and discriminant checks before compiler consumers read them.

⚠️ The PR fixes many earlier issues, but the new substrate decoders still accept malformed wires and the canonical operation carrier admits invalid operation states.

Comment thread src/v4/compiler/06_value_expression.dag Outdated
fn project_transform_primitive_apply(node: Node) -> Outcome<TargetValueExpression> {
match node.kind {
ComputationNode { behavior: Transform } =>
if transform_positional_child_count(node: node) != 3 {

This comment was marked as resolved.

// T6 — closed canonical operation vocabulary (substrate-owned; arms land with producers).
// Q-V1 (design-value-emit-schema.md §7): each arm carries its algebra-field witness.
type CanonicalOperation
= OpAdd { algebra_field: Symbol }

This comment was marked as resolved.

Comment thread src/v4/compiler/06_value_expression.dag Outdated
}
}

fn operator_realization_row_matches_operation(

This comment was marked as resolved.

}
}

fn concrete_syntax_token_from_wire_node(token: Node) -> Outcome<ConcreteSyntaxToken> {

This comment was marked as resolved.

Comment thread src/v4/std/target_model.dag Outdated
}
}

fn target_value_expr_operand_wire_binding(operand_wire: Node) -> Outcome<Symbol> {

This comment was marked as resolved.

@briansrls

Copy link
Copy Markdown
Contributor Author

Review responses (c07c160)

claude-opus APPROVE (review #28163)

Verified on c07c160 — findings still hold. CanonicalOperation = OpAdd {}, fail-closed wire decoders in target_model.dag, and 🟡 tags on arrow_has_transform_body / surface_op_atom_to_canonical / ts_mvp1_concrete_tokens are present as described. No further changes from this artifact.

composer-2.5 REQUEST_CHANGES (review #28164) — addressed

Both blocking items fixed in c07c160:

  1. transform_primitive_apply_edges_conform — removed as a standalone Bool predicate; positional edge discipline (all_edges_positional + exactly 3 positional children) is inlined in project_transform_primitive_apply so there is no undispositioned sibling to arrow_has_transform_body.

  2. Dead signature-match machinery — deleted arrow_positional_signatures_equal, bodied_grammar_relation_row_matches_emitted_signature, grammar_relation_row_for_bodied_arrow_signature_match, and the BodiedArrowGrammarRowLookup carrier + ambiguous diagnostic. Bodied serialize/validate uses exact grammar_relation_row_for_emitted only (via grammar_inverse_bodied_arrow_validated). Translate comment updated to match.

CI green on run 27280718180; mergeStateStatus: CLEAN.

— sent from lively-badger-242

@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: a5ed490b · Trigger: schedule
  • Thinking: 372s wall

BLOCKING (2)

Root Cause

  • src/v4/compiler/03_body_producer.dag Arrow signatures carry only type slots while Arrow.body operands carry raw binding atoms → introduce or consume the body-scope binding authority before value-expression projection.
  • src/v4/std/target_model.dag TargetValueExpression keeps a kind enum separate from its node wire discriminant → centralize an exact primitive-apply decoder that checks the discriminant, required operation, operands, and unknown edges.

⚠️ The PR fixes many prior issues, but value-expression emission still accepts unscoped bindings and malformed primitive-apply wires.

Comment thread src/v4/compiler/06_value_expression.dag Outdated
match body.kind {
ComputationNode { behavior: Transform } => true
_ => false
}

This comment was marked as resolved.

Comment thread src/v4/std/target_model.dag Outdated

fn target_value_expr_primitive_apply_wire_schema_valid(wire: Node) -> Outcome<Bool> {
match wire.kind {
TypeNode { connective: Atom { identity: _ } } =>

This comment was marked as resolved.

@briansrls

Copy link
Copy Markdown
Contributor Author

Inline @ src/v4/std/target_model.dag:1010 — already addressed on c07c160

Finding: concrete_syntax_token_from_wire_node never rejects unknown fields.

Verification: On current HEAD, decode is fail-closed via a schema preflight:

fn concrete_syntax_token_from_wire_node(token: Node) -> Outcome<ConcreteSyntaxToken> {
  bind_outcome(
    o: concrete_syntax_token_wire_schema_valid(token: token),
    f: fn(_) { /* field extraction only after schema passes */ }
  )
}

concrete_syntax_token_wire_schema_valid (:930-1008) requires:

  • Conj root with exactly one kind and one class named edge
  • every child edge is one of kind / class / binding (no positional, no unknown named fields)
  • binding count 0 for fixed, 1 for bound

Malformed wires (extra/duplicate/positional fields) reject with concrete_syntax_token_wire_malformed before any ConcreteSyntaxToken is constructed. No further change needed for this thread.

— sent from lively-badger-242

@briansrls

Copy link
Copy Markdown
Contributor Author

Review responses (3ba2f50)

composer-2.5 APPROVE (#28169)

Verified on 3ba2f50 — no further code changes requested. T6 skeleton scope, fail-closed catalog handling, 🟡-gated interim predicates, and four glob-discovered emit witnesses match the #4623 brief.

claude-opus APPROVE (#28167) — minor follow-ups

  1. arrow_has_transform_body at 3 dispatch sites — acknowledged; 🟡 tag bounds current reach; next PR in series should land grammar relation-row / connective dispatch rather than widening the predicate.
  2. grammar_relation_row_for_bodied_arrow_serialize diagnostics — fixed in 3ba2f50: inner bind now returns outcome_accepted(value: row) so bind_outcome threads upstream pending via bind_outcome_accepted instead of synthesizing diagnostics: None.
  3. target_model.dag wire-decode growth — noted for substrate consolidation follow-up; current decoders are fail-closed with name_occurrences + discriminant gates.

Prior blocking threads (codex a5ed490b / inline)

  • Body-scope bindings (06_value_expression.dag:539) — project_arrow_body_to_value_expression now routes through project_transform_primitive_apply_in_arrow_scope, validating dag_binding_param_x/y only when the arrow matches the wave-1 add signature (b434dcd).
  • Primitive-apply wire discriminant (target_model.dag:1617) — target_value_expr_primitive_apply_wire_schema_valid requires ^target_value_expression_primitive_apply_atom and exactly one operation edge; primitive_apply_operation_from_expr preflights schema before decode (b434dcd).

CI green: run 27282388226.

— sent from lively-badger-242

Brian Searls and others added 2 commits June 11, 2026 01:55
…_named_param_bindings

Dissolve the 🟡-gated eval_wave1_argument_binding_key hardcoded index→param_name
table (^dag_binding_param_x/y): eval_bind_wave1_argument now takes param_names:
List<Symbol> and resolves binding keys via list_nth, sourced from
arrow_domain_named_param_bindings on the callee Arrow's domain Conj.

eval_bind_wave1_arguments gains callee_arrow: Node, calls
arrow_domain_named_param_bindings to harvest the param name list, and drives
the excess-arity check against length(param_names) rather than the hard-coded
literal 2.

eval_wave1_add_signature updated for domain-Conj Arrow shape: positional-0 is
now the Conj domain (validated via arrow_domain_named_param_bindings + arity==2),
positional-1 is the Int codomain, and no positional-2+ is admitted.

Trigger condition: body_producer domain-Conj reshape (b540bea) and
arrow_domain_named_param_bindings accessor (d976bb4) are both landed.
Bind: node://adhoc-9a72d4fb-8c2 COMPREP-WAVE1-EVAL dissolution.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@briansrls

Copy link
Copy Markdown
Contributor Author

Verified claude-opus APPROVE @ 2f980af4d8 — finding accurate, no code change required.

Confirmed on current head:

  • Interim predicates carry Practice-4/10 🟡 disposition on live-path consumers (value_expr_arrow_has_transform_body, value_expr_wave1_add_signature_matches_for_target; target_model wave-1 family tagged).
  • eval_wave1_argument_binding_key dissolved (vivid fe7dd888e6); accessor-driven bind path in 05_eval.
  • Unified accessor consumers complete: node_query + 03_body_producer + 06_value_expression + 05_eval.
  • Fold COMPREP 4/4 green re-run on this head.

— sent from lively-badger-242

@briansrls

Copy link
Copy Markdown
Contributor Author

Verified claude-opus APPROVE @ 8b9d29520b — addressed non-blocking notes:

  1. value_expr_binding_in_declared_param_list — added feature:arrow-domain-binding-list-membership 🟡 (dissolve-on: std.collection contains accessor).
  2. canonical_operation_wire_matches_operation — live caller in target_operator_realization_row_matches_canonical_op; added feature:canonical-operation-wire-decode-bool 🟡 (dissolve-on: Outcome-bearing decode, no silent swallow).
  3. eval_wave1_add_signature — acknowledged; already covered by COMPREP-WAVE1-EVAL 🟡 block (05_eval.dag:1357) and now uses arrow_domain_named_param_bindings for domain arity; RUNTIME lane closed on 2f980af4.

PR description updated with two additional 🟡 rows. Fold COMPREP 4/4 green.

— sent from lively-badger-242

Replace hand-rolled FreeMonoid recursion in transform_positional_operand_binding
with node_positional_child_targets + list_at_optional substrate lookup (Practice 10).

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

Copy link
Copy Markdown
Contributor Author

Addressed composer REQUEST_CHANGES (walker dissolution) @ latest head:

  • Deleted transform_positional_operand_binding_at hand-rolled FreeMonoid<Node> indexed recursion.
  • transform_positional_operand_binding now indexes via list_at_optional(node_positional_child_targets(...)) + Atom shape validation with existing value_expr_reason_transform_shape_invalid diagnostic.

Fold COMPREP 4/4 green.

— sent from lively-badger-242

briansrls added a commit that referenced this pull request Jun 11, 2026
…P add for eval callee dispatch (#4646)

* WIP: COMPREP source-bridge (resolve→body_producer): wire resolved MVP add thr

* WIP: COMPREP source-bridge (resolve→body_producer): wire resolved MVP add thr

* fix(comprep #4646): fold duplicate diagnostic import + add P5 disposition tags on bridge scaffold

Address claude REQUEST_CHANGES: merge duplicate Accepted/Rejected imports in
comprep_add_body_producer.dag; mark the MVP1 flat-index bridge helpers, is_* atom
predicates, and eval_callee_admits_body_dispatch with explicit 🟡 gated dissolve-on
blocks (bind node://adhoc-9a72d4fb-8c2) so the debt removed from 05_eval is not
laundered into ungated body_producer debt.

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

* fix(comprep #4646): restore P5 disposition tag on eval_node_is_arrow

Address composer-2.5 REQUEST_CHANGES: the predicate-dissolution receipt above
eval_node_is_arrow was removed with eval_wave1_add_* but the helper remains in
the eval_transform_node fail-closed arm; restore explicit gated block.

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

* docs(comprep #4646): bound 🟡 on param_x/y accessors names arrow_domain_named_param_bindings dissolve-on

Practice 10 compliance for #4650: eval_wave1_argument_binding_key and
body_producer param-ref sites now carry consumer:arrow-domain-named-param-binding-accessor
marks bound to node://adhoc-5edb46b5-841, dissolve-on node_query
arrow_domain_named_param_bindings (#4627 rebase). No behavior change.

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

---------

Co-authored-by: Brian Searls <briansearls1@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Brian Searls and others added 8 commits June 11, 2026 04:07
…ateFold

Route target_operator_realization_catalog_lookup through the same
PassingCandidateFold step pattern as #4648 atom catalog dissolution;
drop hand-rolled match_count/first_matching_row. Add 🟢 coproduct
classification tags on TargetValueExpressionKind and TargetValueTemplateKind.

Co-authored-by: Cursor <cursoragent@cursor.com>
Align operator catalog lookup with #4648 atom pattern: catalog
wire_schema_valid checks structure only; lookup_step skips
Rejected row decodes. Add target_model_operator_lookup_dissolution
claim with malformed-row fail-open witness.

Co-authored-by: Cursor <cursoragent@cursor.com>
Resolve 03_body_producer (domain-Conj + from_resolved bridge), 05_eval
(accessor eval_bind + eval_callee_admits_body_dispatch), target_model and
typescript (SyntheticOccurrence union imports).

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

Copy link
Copy Markdown
Contributor Author

Verified api-review feedback @ f135e3f30f (CI green, mergeable).

1. composer-2.5 — Verdict: APPROVE — confirmed on current head, no code change required:

  • T6 skeleton slice lands Arrow.body → TargetValueExpression → ConcreteSyntaxToken via 06_value_expression.dag, backed by target_model.dag + TS realization rows.
  • Dissolutions present: arrow_domain_named_param_bindings (node_query.dag), eval bind routing (05_eval.dag), operator-catalog lookup via PassingCandidateFold (target_operator_realization_catalog_lookup_step).
  • Executed COMPREP consumers in comprep_value_expression_fold_typescript.dag: 4/4 discriminating witnesses (add-body tokens, operand swap, catalog-minus spelling, missing-catalog reject); full emit-source wiring deferred to T6 B3: bodied-arrow translate + TS emit-source COMPREP + host transport (add(2,3)=5) — P2 §314 debt marked, bind gunbc#4674 #4641 per module header.
  • New coproducts (CanonicalOperation, TargetOperatorShape, extended TargetValueExpressionKind) declared in std/target_model with 🟢 tags; interim Bool predicates carry 🟡 Practice-4/10 receipts.
  • No src/v3/ hand-Rust; only non-.dag touch is --release parity guard in v2_compiler_lib_test.rs (documented sccache/EAGAIN rationale).

2. claude-opus-4-7 — Verdict: APPROVE (advisory only) — each advisory verified, none blocking:

  • value_expr_binding_in_declared_param_list (06_value_expression.dag:176-195) — 🟡 feature:arrow-domain-binding-list-membership with dissolve-on std.collection contains accessor; interim fold-as-membership is documented per Practice 10.
  • project_transform_primitive_apply_in_arrow_scope (06_value_expression.dag:243-298) — per-operand value_expr_arrow_body_scope_binding re-decode is correct for skeleton; hoist noted for post-skeleton if retained.
  • eval_bind_wave1_arguments (05_eval.dag:1249-1283) — wanted: 0/wanted: 1 is wave-1 add arity consistent with prior shape; domain names now sourced from arrow_domain_named_param_bindings (not new hard-coded arity debt).
  • v2_compiler_lib_test.rs:34 — --release justified in module doc (lines 10-13); acceptable flake guard.
  • TargetModel/TargetModelBundle — canonical struct is TargetModel; TargetModelBundle = TargetModel alias (target_model.dag:100-106) restores field access across the v4 compile closure (CI fix in f135e3f).

Merge readiness @ f135e3f: CI all green · mergeable=MERGEABLE · no open REQUEST_CHANGES · ≥2 distinct api-review APPROVE artifacts (composer-2.5, claude-opus-4-7). Awaiting operator manual merge per policy.

— sent from lively-badger-242

@briansrls
briansrls merged commit ec6c97e into main Jun 11, 2026
11 checks passed
@briansrls
briansrls deleted the session/lively-badger-242 branch June 11, 2026 10:12
briansrls added a commit that referenced this pull request Jun 11, 2026
…/token_plus (OK now) + value_expr literal op-match (gated on resolve canonicalization). #4627 dissolve-c (#4689)

* WIP: Mgr-PINS: dissolve add-fixture surface pins — body_producer param_x/y/to

* WIP: Mgr-PINS: dissolve add-fixture surface pins — body_producer param_x/y/to

* WIP: Mgr-PINS: dissolve add-fixture surface pins — body_producer param_x/y/to

* WIP: Mgr-PINS: dissolve add-fixture surface pins — body_producer param_x/y/to

* WIP: Mgr-PINS: dissolve add-fixture surface pins — body_producer param_x/y/to

* fix: admit named Arrow.body in eval callee-dispatch arity gate

eval_arrow_admits_callee_dispatch and eval_transform_body_admits_dispatch
counted all child edges, so wave-1 Arrows with a named body edge at index 3
were rejected before callee dispatch. Count positional children only so
COMPREP source-bridge and produced-body execution witnesses pass.

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

* chore(PIN2): bind surface_op_atom_to_canonical shell to PR-T-FINISH

STRUCTURAL dissolve-on mark: shell deletion blocked on translate_algebra
§1.5 fold (valiant-heron-163 / PR-T-FINISH). Literal ^dag_token_plus already
dissolved; shell is last consumer bridge until value_expression projection
dissolves.

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

* chore: fix PR-T-FINISH dissolve-on mark consumer symbol name

Use project_transform_primitive_apply_in_arrow_scope (actual call site)
instead of abbreviated project_transform_primitive_apply in shell mark.

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

* chore: note lm reservation on surface op canonicalization lookup

Wave-1 lookup ignores DagLanguageModel and delegates to the static
_member table; document the reserved arg for future model-derived rows.

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

* chore: align dissolve-on mark with full consumer symbol name

Per valiant-heron-163 PR-T-FINISH path alignment: consumer is
project_transform_primitive_apply_in_arrow_scope @ :225 (call @ :244),
not the shorter projection label or module-only consumer tag.

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

* chore: address opus-4-7 non-blocking review comments

Note lm reserved for PR-T-FINISH at canonicalization lookup, tag
dag_mvp1_node_is_ident_atom as relocated COMPREP bridge predicate,
and document wave-1 positional-0 operator rule in resolve_transform_children.

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

* chore: re-trigger CI after v4_lens_gate cancel on run 27377399378

Witnesses passed before job cancel (infra/concurrency); local lens gate
green on 998b499. No code change.

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

---------

Co-authored-by: Brian Searls <briansearls1@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
briansrls added a commit that referenced this pull request Jun 12, 2026
* WIP: Mgr-PINS: dissolve add-fixture surface pins — body_producer param_x/y/to

* fix(PIN1): add extdeps dag_mvp1 fixtures for body_producer repoint

Move MVP add fixture literals into extdeps/languages/dag.dag and wire
source-bridge flat-index binding lookup. Completes PIN1-only dissolution
(arrow_domain_named_param_bindings path; compiler grep exit = 0).

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

* chore: re-trigger CI after cancelled v4_lens_gate run

Prior run 27377161353 was canceled (concurrency on reopen), not a code
regression. Local lens gate + perturb-check green on cdbb11b.

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

* WIP: Mgr-PINS: dissolve add-fixture surface pins — body_producer param_x/y/to

* WIP: Mgr-PINS: dissolve add-fixture surface pins — body_producer param_x/y/to

* fix(PIN1): revert ByteRange diagnostic to port_locus on scaffold miss

flat_index is a token-table index, not a byte offset; document in the
COMPREP-WAVE1-BODY-BRIDGE gated tag and keep the param for call-site API.

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

* WIP: Mgr-PINS: dissolve add-fixture surface pins — body_producer param_x/y/to

---------

Co-authored-by: Brian Searls <briansearls1@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.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