docs(causal): accept DESIGN-causal.md — typed causal hypothesis graphs (review-only)#367
Conversation
Promote issue ymm-oss#320's normative content into the accepted design contract for the review-only causal profile, resolving all eight open decisions: 1. canonical syntax: standalone top-level causal block (business-nested sugar not adopted; revisitable only as pure sugar). 2. timebase: closed enum tick|hour|day|week; custom units rejected in v0. 3. persists: adopted as a required claim field (powers observation-window and cadence findings); no quantitative convolution. 4. imports: uses <alias> from "<path>" with alias-qualified two-segment reference paths. 5. undeclared positive-lag cycles: warning, not error; instantaneous loops stay errors. 6. per-property evidence dependency confined to Phase 2 (ymm-oss#322); Phase 1 records references only and never opens artifact files. 7. causal schemas stay under schemas/fslc/causal/ — no Public Kernel v2 merge without a separate accepted design. 8. moderated_by: deferred (reserved future work, no v0 grammar). The design fixes: three-plane architecture, guarantee-boundary vocabulary, scope-token declaration + three-valued containment (subsumes / partial_overlap / disjoint), claim content version + retired lifecycle, discrete time semantics (Minkowski lag sums, unknown propagation, fail-closed clock mapping identical to ymm-oss#323's gates), delayed-feedback polarity sign products with unknown absorption and reinforcing/balancing/unknown loop_class, typed CausalModel IR invariants, causal-check.v0 / finding / causal-graph.v0 JSON shapes, the authority surface (runtime/solver/verifier/Public Kernel v1 untouched), and Phase 1 test obligations. Closes ymm-oss#320 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
rizumita
left a comment
There was a problem hiding this comment.
Ran an independent adversarial design review of the full 734-line docs/DESIGN-causal.md. Phase 1 (check/analyze/diff) is specified well enough that two implementers would converge — good work there. But given this doc is being accepted as the sole normative authority for a 5-phase implementation (PR #369 already ships all 4 phases against it), a few gaps matter enough to request changes before final acceptance:
- Claim-version/retired lifecycle (§4.5/§12) is honor-system. No content-digest pinning is specified, so a claim's content (e.g. polarity) can change without a version bump while old evidence keeps counting as current support.
retiredis never stated to be terminal — a claim could goretired → activeagain with stale evidence silently re-activating. "Re-proposing an already-refuted hypothesis is detectable" names no actual mechanism. - Authority-scope mismatch for Phases 2–5. The evidence schema/lifecycle (#322), support-aggregation table, and observation bridge (#360) are deferred to bare issue references with almost no normative content here. The observation bridge in particular (production replay → evidence feeding
causal_support) looks like exactly the "temporal co-occurrence becoming causal support" the doc's own §11 lists as a non-goal, with no stated constraint distinguishing the two. Similarly, the expectation compiler'sleadsTolowering (§3, real kernel-provable) has no output-shape contract for how aprovedverdict on the lowered form should be labeled relative to the causal claim — exactly the seam where a reader could misattribute validated-causality semantics. confidence: 0.92in the §8 JSON example has no defined semantics, contradicting the doc's own no-probability/fully-deterministic stance.basis: supportedvs. the content-version contract: unclear whether derived support is version-relevant content or presentation-only — implementers could reasonably build either, and one choice is a version-integrity bug.- Feedback-cycle classification with
lag: unknownedges (§5×§6 seam) is undefined for a cycle with all-zero known lags plus an unknown-lag edge — could misclassify an instantaneous (physically impossible) loop as an allowed delayed one, or vice versa. (Note: I found this materialized as an actual bug in PR #369's implementation —rust/fsl-tools/src/causal.rs'svalidate_loopsexcludesLag::Unknownfrom the zero-lag check, contradicting its own doc comment.) - Evidence-side scope-dimension comparison (dimension present on one side, absent on the other) is unspecified.
Recommend either specifying sections for the #322/#360 contracts here, or explicitly scoping this doc's "sole authority" claim to Phase 1, plus tightening 1–4 above. Happy to re-review once addressed.
…e, authority, and lag:unknown Review findings from @rizumita: 1. Claim version/retired lifecycle: content changes without version bumps are now detectable via causal diff; retired is terminal (no retired→active); re-proposal detection via source/target/polarity match with retired claims. 2. Authority scope: §1 now explicitly scopes normative authority per phase and clarifies that observation replay never converts temporal co-occurrence into directed support, and expectation verdicts label the kernel property not the causal claim. 3. confidence field: clarified as deterministic structural score, not a probability or Bayesian posterior. 4. basis: explicitly version-relevant content requiring a version bump. 5. lag:unknown in feedback cycles: documented as treated like lag.min==0 (cannot prove positive delay); all-unknown cycles are instantaneous errors. 6. Missing scope dimensions: specified as unassessable per dimension; empty scope is never silently universal. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
@rizumita レビューありがとうございます。6件すべて対応しました(PR #369のブランチで修正、このPRにマージ時に反映されます)。 1. Claim version/retired lifecycle (§4.5)
2. Authority scope (§1)
3.
|
…e, authority, and lag:unknown Review findings from @rizumita: 1. Claim version/retired lifecycle: content changes without version bumps are now detectable via causal diff; retired is terminal (no retired→active); re-proposal detection via source/target/polarity match with retired claims. 2. Authority scope: §1 now explicitly scopes normative authority per phase and clarifies that observation replay never converts temporal co-occurrence into directed support, and expectation verdicts label the kernel property not the causal claim. 3. confidence field: clarified as deterministic structural score, not a probability or Bayesian posterior. 4. basis: explicitly version-relevant content requiring a version bump. 5. lag:unknown in feedback cycles: documented as treated like lag.min==0 (cannot prove positive delay); all-unknown cycles are instantaneous errors. 6. Missing scope dimensions: specified as unassessable per dimension; empty scope is never silently universal. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
# Conflicts: # CHANGELOG.md
Problem (issue #320)
Phases #321–#323, #360, #364 of the causal profile all cite an accepted
docs/DESIGN-causal.mdas their sole design authority, but the normative content lived only in issue #320's body, with eight open decisions unresolved.Change
Add
docs/DESIGN-causal.mdas the accepted design contract. It preserves #320's normative content — three-plane architecture, guarantee-boundary table, surface syntax + variable/claim field contracts, scope declaration & three-valued containment, claim content version & retired lifecycle, time semantics (lag/persists, Minkowski sums, unknown propagation, fail-closed clock mapping shared verbatim with #323), feedback semantics (instantaneous-loop error, polarity sign products, unknown absorption,loop_classwitnesses, the narrowfeedback_without_damping_storyrule), typedCausalModelIR + invariants, JSON contracts, authority surface, and algorithm constraints — and resolves the eight open decisions (§10):causalblock is final; nested sugar not adoptedtick|hour|day|week; custom units rejected in v0persistsadopted (required claim field); no quantitative convolutionuses <alias> from "<path>"+ alias-qualified 2-segment refscausal_unacknowledged_feedback); instantaneous loop stays errorschemas/fslc/causal/moderated_bydeferred — reserved, no v0 grammarAlso:
docs/README.mddesign map row,CHANGELOG.md[Unreleased]entry.Acceptance criteria mapping
proved/verifiedto a causal claim (§1, §11 non-goals).Notes
Closes #320
🤖 Generated with Claude Code