Skip to content

Gunbc PM - #1906

Closed
briansrls wants to merge 6 commits into
mainfrom
docs/lens-emission-provenance-brief-2026-05-06
Closed

briansrls wants to merge 6 commits into
mainfrom
docs/lens-emission-provenance-brief-2026-05-06

Conversation

@briansrls

Copy link
Copy Markdown
Contributor

Opened from session-dashboard for session deep-wolf-155.

⚠️ Auto-merge of origin/main failed during this auto-push.
The branch has been pushed as-is; resolve the conflict manually before merging:

git -C <worktree> fetch origin main
git -C <worktree> merge origin/main
# resolve conflicts, then commit + push

Conflicted file(s):

  • docs/briefs/r3-substrate-emission-provenance-lens-worker.md

briansrls and others added 6 commits May 6, 2026 21:22
… under Director ratification

Per Director ratification at gunbc#828 #issuecomment-4392256151
(zesty-bear-812 — "Lens<EmissionProvenance> as another Lens<C>
instance per feedback_lenses_not_passes; Substrate authors instance
carrier; Verification asserts gate") and Brian directive 2026-05-06
chat ("R3 has idle workers under several managers, so we should put
them to work asap").

Brief covers:

- EmissionProvenance C-type with fail-closed discipline
  (at least one of source_span / fold_rule present per emitted line
  per feedback_fail_closed_discipline C-8)
- Lens<EmissionProvenance> instance per existing Lens<C> 6-field shape
  (Director-locked at src/v3/std/lens.dag); shape parity with existing
  T-CostLens-Composition Lens<SymbolicCost> precedent
- Cementing test verifying inverse mapping closes (every emitted line
  has either populated source_span OR fold_rule; both-absent fails
  closed)
- 4 STOP triggers (missing fold-rule names; Lens<C> shape gaps;
  third origin class surface; substrate-state-grep mismatch)
- Cross-lane refs to T-LAS (instance becomes consumable via apply_lens
  post-T-LAS); Grounding (downstream consumer optional, R3 scope is
  instance landing only); T-CostLens-Composition (shape precedent)
- Worker pin candidates: smart-ram-167 OR valiant-ibex-312 (Mgr discretion)
- §1.8 ledger gate #89 emission_provenance_lens_landed (proposed)

Brief is pre-authored per feedback_pre_authored_brief_queue discipline.
Substrate Mgr disposes dispatch readiness at brief-PR-merge time;
adjusts content lightly if substrate state shifts (does not re-author
from scratch).

Forward direction (.dag → diagnostic source-span) already exists
structurally (SourceSpan on every Behavior + Declaration per dag.rs:47-48);
inverse direction (emitted Rust → .dag origin) is implicit in the
fold but not currently exposed as metadata stream. This lens instance
landing exposes it.

PR #1879 (emission-intuition slide) surfaced the gap; visualization
claim benefits from this lens once landed.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Per claude review at sha 3c96212 (PR #1902 #issuecomment-4392308244):

1. Optional<T> canonical shape: PM grep-verified that .dag uses T? suffix
   (e.g., String? at src/v3/std/anthropic_schema.dag:115-119); named
   Optional carriers like OptionalDiagnostic exist at
   src/v3/std/dimensions.dag:41 but generic Optional is T? suffix.
   Updated EmissionProvenance C-type fields:
   - source_span: OptionalSourceSpan -> SourceSpan?
   - fold_rule: OptionalString -> String?
   Added explicit "Optional shape note" with grep references.

2. STOP trigger #1 (missing fold-rule names) reframed as likely
   prerequisite-not-mid-implementation-STOP: claude observed that
   STOP #1 is most likely-to-fire one — really a prerequisite, not
   a stop-condition. PM grep-verified at authoring-time that fold-rule
   names are NOT enumerable in src/v3/compiler/src/ (0 hits for
   RuleName / FoldRule / fn emit_derive). Updated STOP trigger #1
   to surface this as PM-side recommendation: Substrate Mgr disposes
   resolution before worker dispatch (rule-name enumeration substrate
   as separate brief OR confirm grep was incomplete OR re-scope to
   land partial-provenance only). Avoids mid-implementation discovery
   of a hard prerequisite.

Both observations are non-blocking per claude verdict (APPROVE) but
worth applying for downstream worker quality + Substrate Mgr
prerequisite-resolution-before-dispatch.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…brief — status PROPOSAL pending Substrate Mgr canvas

Codex BLOCKING at sha 3c96212 (PR #1902) surfaced 3 substantively valid
findings; all PM grep-verified before applying.

Finding 1 (optional+invariant origin → typed-sum origin) APPLIED:

  type EmissionOrigin =
      SubstrateDeclMirror { span: SourceSpan }
    | FoldRuleAutoEmit { rule_name: String }
  type EmissionProvenance {
    emitted_line: Int
    origin: EmissionOrigin   // REQUIRED
  }

The Disj carrier makes "at least one origin class present" structurally
true; eliminates the prior optional+runtime-invariant structural recovery
pattern. Per feedback_state_space_vs_behavioral_invariants
(type enforcement > API enforcement).

Finding 2 (Lens<C> read shape category mismatch) FLAGGED:

  Lens<C>.read: fn(Dag, Behavior) -> Witness<C>
  per src/v3/std/lens.dag — per-Behavior read.
  Emission provenance is per-emitted-LINE, not per-Behavior.
  Real category mismatch.

Brief reframed to status: PROPOSAL pending Substrate Mgr canvas. Three
reframing paths surfaced for Substrate Mgr disposition:
  (a) per-Behavior framing (Lens<C>-compatible; narrower scope; doesn't
      directly support Brian's slide visualization)
  (b) per-emitted-line instrumentation (NOT a lens; matches Brian's
      visualization; different substrate shape entirely)
  (c) withdraw + canvas first; re-author once shape ratified.
PM recommendation: (c). Substantive reshape needs Substrate Mgr canvas,
not PM tactical pre-authoring.

Finding 3 (§1.8 #89 already taken) APPLIED:

  PM grep-verified §1.8 #89 is `section_ref_substrate_landed` under
  T-Lens-Application-Surface (already declared 2026-05-06). My citation
  was wrong. Brief frontmatter retargeted to "TBD — gate authority
  pending"; cites 3 candidate retarget paths for Substrate Mgr
  disposition: (a) new gate under T-CostLens-Composition cluster
  (#37-#40 analog); (b) new gate under T-LAS; (c) deferred until
  per-Behavior framing ratified.

Brief is now NOT dispatch-ready — explicitly PROPOSAL status until
Substrate Mgr canvas resolves Finding 2 + gate authority.

PM tactical-authority limit acknowledged: emission-provenance is
substantively richer than I initially scoped; Substrate Mgr canvas
is the right next step, not worker dispatch.

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

Per codex BLOCKING inline at brief line 57 (sha 3c96212) — same
finding-class as parent BLOCKING but more pointed: while my prior fix
(commit 0110f73) eliminated the both-absent admittance via typed
Disj, FoldRuleAutoEmit { rule_name: String } still admitted arbitrary
fold-rule strings. P2 illegal-states-unrepresentable requires typed
LangSpec rule ref, not free String.

Fix: FoldRuleAutoEmit { rule: LangSpecRule } where LangSpecRule is a
typed enumeration of LangSpec emission rules. Now both structural
invariants hold by construction:
  - "at least one origin class is present" (typed Disj over the 2 classes)
  - "rule names are well-formed LangSpec identifiers" (typed enumeration)

This reinforces the rule-name-enumeration prerequisite already
cross-relayed to Substrate Mgr at gunbc#1739 #issuecomment-4392435376:
LangSpecRule typed enumeration MUST exist as substrate carrier before
this brief can dispatch. Substrate Mgr disposes: (a) author
LangSpecRule enumeration substrate first; (b) confirm grep was
incomplete and rules ARE enumerable elsewhere; (c) brief dispatched
only after typed-rule prerequisite lands.

Per feedback_state_space_vs_behavioral_invariants — eliminates
structural-recovery pattern by making invariants type-true rather
than runtime-asserted.

Brief stays status: PROPOSAL pending Substrate Mgr canvas on Finding 2
(Lens<C> read-shape category mismatch) + Finding 3 (gate retargeting).

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

Per codex BLOCKING inline at line 73 (sha c375eba): the Lens<C> read
shape mismatch is deeper than initially framed.

Initial frame: "Lens<C> is per-Behavior; goal is per-emitted-line —
category mismatch on granularity."

Deeper frame (PM grep-verified): Lens<C>.read domain is
`Behavior = Value | Transform | Branch` per src/v3/std/substrate.dag:465.
The brief's acceptance surface includes lines from:
  - Declaration-origin (e.g., pub enum Sum<A,B> from .dag type Sum
    declaration; pub struct HttpError from type HttpError declaration)
  - LangSpec auto-emits (e.g., #[derive], impl X { is_left }, impl X { new })

Declarations are at src/v3/std/substrate.dag:235 — structurally separate
from Behaviors. Auto-emits have no .dag source at all. Both are
OUTSIDE Lens<C>.read's domain entirely.

So the mismatch is structural at TWO axes simultaneously:
  - Granularity: per-Behavior (lens) vs per-emitted-line (goal)
  - Domain coverage: Lens<C> can only read Behaviors; brief's acceptance
    includes Declaration-origin + auto-emits which Lens<C> structurally
    cannot see

Reframing paths revised (deeper):
  (a) Per-Behavior, narrow domain — Lens<C>-compatible, EXCLUDES
      Declaration-origin + auto-emit lines entirely; very narrow;
      doesn't support Brian's visualization
  (b) Per-emitted-line instrumentation, NEW substrate — NOT a lens;
      requires substrate-fact-introduction (P1 procedure); matches
      visualization need
  (c) Withdraw + canvas first — stronger PM recommendation given the
      deeper mismatch

PM-side stance: brief stays status: PROPOSAL pending Substrate Mgr
canvas. The Lens<C> framing isn't just narrow; it's structurally
insufficient for the brief's acceptance surface. Substantive reshape
needs Substrate Mgr canvas + Director ratification on the right shape.

Per feedback_corrections_must_grep_verify_source — both axes of the
mismatch grep-verified:
  - Behavior shape at src/v3/std/substrate.dag:465 (3-variant Disj)
  - Declaration shape at src/v3/std/substrate.dag:235 (separate type)
  - Lens<C>.read at src/v3/std/lens.dag (per-Behavior fold)

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

Copy link
Copy Markdown
Contributor Author

Closing — obsolete branch artifact post-#1902 squash-merge

Branch docs/lens-emission-provenance-brief-2026-05-06 had its content squash-merged via PR #1902 at 2026-05-06T21:52:13Z. The 5 commits on this branch (codex BLOCKING fixes, claude observations, deeper F2 reframing) were all captured in that squash.

This PR was dashboard-auto-attached because the branch hasn't been synced with main and shows a divergence (brief file ±49 lines vs squashed version + bootstrap_generated.rs etc. changes that landed on main since). No new work intended on this branch.

Per Substrate Mgr disposition at gunbc#1739 #issuecomment-4392510255:

Closing this PR — not the right place to land more work; branch is obsolete-by-squash + lane is paused pending Mgr canvas.

— sent from deep-wolf-155

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