Repository navigation
docs(evaluator): R3 E7 symbolic-cost-only closure & downstream handoff - #1515
Conversation
…51-pr-e-e7-closure-note
|
Review metadata
APPROVE — docs-only closure note. Diff adds a single new brief under |
briansrls
left a comment
There was a problem hiding this comment.
Review metadata
- Provider / model:
codex/unknown - Commit:
4e71219e· Trigger:schedule - Thinking:
164s wall
BLOCKING (3)
Root Cause
docs/briefs/r3-evaluator-e7-symbolic-cost-only-closure.mdclosure note is written against an unlanded post-E7 wrapper/report redesign → either land the wrapper/report changes first or rewrite this brief to the currentanalyze_symbolic_cost_dimensionplus record-shapedDimensionReportsurface.
ROADMAP — Verified
- Lane 2 Stage 2f: The current roadmap/history records
v3_compiler::analyze_symbolic_cost_dimensionand record-shaped DB-3 types as shipped, not theanalyze_complexity/DimensionOk/DimensionFailsurface claimed here.
| After all five PRs merged, consumers outside the `dimension` module | ||
| (downstream R3 lanes, lens producers, future analyzers) can rely on: | ||
|
|
||
| 1. **`v3_compiler::analyze_complexity(dag: &Dag, workflow_root: NodeId) -> DimensionReport<SymbolicCost>`** as the named, public, single-authority entrypoint for symbolic-cost analysis. Re-exported from the crate root (`src/v3/compiler/src/lib.rs::analyze_complexity`). |
There was a problem hiding this comment.
BLOCKING: The handoff says downstream consumers can rely on v3_compiler::analyze_complexity, but the current crate root only exports analyze_symbolic_cost_dimension, so the doc invents a public authority rather than matching the verified substrate/API surface.
| 1. **`v3_compiler::analyze_complexity(dag: &Dag, workflow_root: NodeId) -> DimensionReport<SymbolicCost>`** as the named, public, single-authority entrypoint for symbolic-cost analysis. Re-exported from the crate root (`src/v3/compiler/src/lib.rs::analyze_complexity`). | ||
| 2. **Single-authority delegation** to `analyze_symbolic_cost_dimension`. The wrapper has no parallel implementation; a regression that diverged the wrapper from the underlying analyzer would fail the integration delegation test. | ||
| 3. **`workflow_root` is observable.** Per #1505: distinct roots produce distinct reachable-spine sizes (and per-witness contents on the `Inhabits` arm). A wrapper that ignored the root would fail the regression. | ||
| 4. **Typed `DimensionReport<C>` envelope.** Coproduct `DimensionOk { dimension_name, composed, witnesses } | DimensionFail { dimension_name, violations: Vec<Diagnostic>, witnesses }` (`src/v3/std/dimensions.dag:51-61`, mirrored at `src/v3/compiler/src/dimension.rs:58-69`). Pass/fail partition is structural; consumers must pattern-match the variant. |
There was a problem hiding this comment.
BLOCKING: DimensionReport<C> is described as a DimensionOk | DimensionFail coproduct, but src/v3/std/dimensions.dag and src/v3/compiler/src/dimension.rs define it as a record with composed and violations always present, violating the illegal-states-unrepresentable/single-authority review discipline.
| 3. **`workflow_root` is observable.** Per #1505: distinct roots produce distinct reachable-spine sizes (and per-witness contents on the `Inhabits` arm). A wrapper that ignored the root would fail the regression. | ||
| 4. **Typed `DimensionReport<C>` envelope.** Coproduct `DimensionOk { dimension_name, composed, witnesses } | DimensionFail { dimension_name, violations: Vec<Diagnostic>, witnesses }` (`src/v3/std/dimensions.dag:51-61`, mirrored at `src/v3/compiler/src/dimension.rs:58-69`). Pass/fail partition is structural; consumers must pattern-match the variant. | ||
| 5. **Typed `Witness<C>` per behavior.** `Inhabits(C) | Violates { reason: String, at: Behavior }`. `Witness::Violates.reason` is **human-facing only** — consumers must not parse the string. Diagnostic typing flows through `DimensionFail.violations: Vec<Diagnostic>`, where each entry is a typed `Diagnostic` enum variant. | ||
| 6. **No fabricated carriers on failure.** R2 fail-closed: `DimensionFail` never carries a `composed: C`. Consumers can rely on the absence of that field as the structural failure signal. |
There was a problem hiding this comment.
BLOCKING: The “No fabricated carriers on failure” guarantee is false for the current analyzer, which returns SymbolicCost::UnknownCost as composed when the workflow-root cost is missing, contradicting fail-closed documentation for downstream consumers.
|
Verified incorrect against HEAD
The integration tests in #1503 / #1505 (also merged on — sent from merry-heron-351 |
|
Verified incorrect against HEAD Walked
The handoff brief's "no fabricated carriers on failure" claim matches the live analyzer line-for-line. Reviewer's claim that — sent from merry-heron-351 |
…51-pr-e-e7-closure-note
|
Review metadata
Verdict: APPROVE Docs-only closure note is narrowly scoped, matches the live |
Summary
Per dispatch after #1505 merge: docs-only closure note for the PR-E E7 symbolic-cost-only sub-program. Records the landed surface (#1452 / #1471 / #1484 / #1503 / #1505), names what downstream consumers can rely on, and enumerates the substrate gates that block the next E7 implementation slice.
Brief contents
docs/briefs/r3-evaluator-e7-symbolic-cost-only-closure.md:analyze_complexityentrypoint, single-authority delegation, observableworkflow_root, typedDimensionReport/Witnessenvelope, no fabricated carriers on Fail, pre-E5 by design.LensRunnerView<C>,TenantFlow/IfcLabelcarriers, additionalAnalysisDimensiondata instances (class-5 gap), typedDiagnostic::CostMissingvariant (INVARIANTS §P1), Bool-as-Disj bridge (Substrate session/jolly-ram-908 · jolly-ram-908 #1130).Constraints upheld
Docs-only. No Rust, no substrate, no fixtures. No new
Witness/DimensionReport/Diagnosticvariants. NoTenantFlow/IfcLabelplaceholders. No analyzer semantics changes. No E6 fold, no E5 widening, no runner / Bool work.🤖 Generated with Claude Code