Skip to content

docs(skills): extend coarse weak-point independence check to Pattern 3#723

Open
kunyuan wants to merge 33 commits into
mainfrom
kunyuan/coarse-pattern3
Open

docs(skills): extend coarse weak-point independence check to Pattern 3#723
kunyuan wants to merge 33 commits into
mainfrom
kunyuan/coarse-pattern3

Conversation

@kunyuan

@kunyuan kunyuan commented May 29, 2026

Copy link
Copy Markdown
Contributor

Summary

Coarse's weak-point independence check only handled Pattern 1c (derived-premise path redundancy) and the existing "Shared-factor weak points" rule only covered the same-conclusion case. A new paper-grounded independence audit of the 3 baseline packages found pervasive cross-conclusion Pattern 3 violations:

Paper shared-cause groups leaves involved example shared cause
Patella 2 (high) 4 sample of 21-42 individuals; manual silver-gel allele sizing
QKD 1 (high) 3 correctness of the p_ε construction
γ-Mg(BH4)2 3 (2 high, 1 med) 7 one TGA-MS measurement; Raman interpretation method
total 6 14 of 21 leaves

These leaf weak points are modelled as independent priors, so belief propagation double-counts the shared uncertainty. No other benchmark axis (conclusion F1, conclusion faithfulness, reasoning) catches this — it is a BP-correctness issue in the leaf layer.

Change

Extends the "Shared-factor weak points" section (now subtitled "independence — Pattern 3") to scan the full weak-point set across conclusions, and splits the guidance:

  • same-conclusion shared factor → merge to one weak point (as before).
  • cross-conclusion shared factor → do NOT feed one shared claim into multiple derives (that triggers the deduction fan-out penalty and breaks the weak-point ↔ one-conclusion discipline). Instead keep each weak point on its conclusion, record the shared cause in an independence note, and calibrate priors so the shared risk is not counted at full independent strength per conclusion.

Adds a Phase-Completion gate item. Docs-only; affects gaia-formalize-coarse Phase 3.

Test plan

  • Pre-commit + pre-push gates pass (docs-only)
  • Re-run a baseline package post-merge; confirm the cross-conclusion shared-cause groups are either merged (same-conclusion) or surfaced in an independence note + reflected in calibration (cross-conclusion)

🤖 Generated with Claude Code

LittleBug and others added 22 commits May 29, 2026 23:26
Coarse's independence check was scoped to Pattern 1c (derived-premise
redundancy) and the shared-factor rule only covered same-conclusion weak
points. A paper-grounded independence audit of three baseline packages
found pervasive Pattern 3 violations — 6 shared-cause groups over 14 of
21 leaf premises, all CROSS-conclusion (e.g. a small-sample-size limit
that both caps a diversity estimate and weakens an LD test; three weak
points all driven by one TGA-MS measurement). Those leaves are modelled
as independent priors, so BP double-counts the shared uncertainty.

Extend the "Shared-factor weak points" section to cover the
cross-conclusion case, respecting coarse's constraints: do NOT feed one
shared-factor claim into multiple derives (that triggers the deduction
fan-out penalty and breaks the weak-point ↔ one-conclusion discipline);
instead keep each weak point bound to its conclusion, record the shared
cause in an independence note, and calibrate priors so the shared risk is
not counted at full independent strength per conclusion. Add a
Phase-Completion gate item.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…points

The Pattern 3 scan was framed around weak points alone, but independence
is a property of every evidential factor entering a conclusion's warrant.
Highlights (reasons to credit) share latent causes just as weak points
(reasons to doubt) do. Broaden the scan to the full factor set and add
the two missing sharing kinds: two highlights sharing a cause
double-count credit (state the strength once in the warrant prose); a
weak point and a highlight sharing a cause use one factor to both doubt
and credit (net it out and count it once, coherently). Update the
Phase-Completion gate item to match.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
… same/cross split

The same-conclusion vs cross-conclusion split was a workaround for the
deduction fan-out penalty, which was resolved on 2026-04-13 via directed
implication factors (the conclusion no longer sends a backward
modus-tollens drag to a shared antecedent). With that fixed the
workaround is obsolete and was letting a since-fixed engine artifact
distort the knowledge model.

Replace it with the principled, conclusion-agnostic rule: scan the whole
factor set (weak points AND highlights) globally; near-duplicates merge;
a genuine shared cause is extracted to one claim and premised into every
conclusion it bounds — BP-visible, not bound to one conclusion with the
rest demoted to a working-notes also_threatens note. Update the gating
question, the shared-factor section, the Phase-4 emission rule, the
working-notes schema (conclusion_ids list + shared_cause), and the
completion gate to match.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…, not bare extract

Extracting only the common cause discards what each factor asserts beyond
it. State the operation as a decomposition: pull the shared cause out as
one claim C (one prior, premised into every conclusion it bounds), and
keep each factor's residual — what it asserts given C — as its own
claim, conditionally independent given C and listed only in its own
conclusion. Each conclusion's derive then carries both C and its residual.
The merge case is the degenerate one where a factor has no residual.
Update the shared-factor section, the completion gate, and the Phase-4
emission rule to match.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…shared

Plan B: put the decompose-based shared-factor handling in the canonical
_shared/formalize-independence.md (used by both formalize-coarse and
formalize-fine) and have coarse reference it.

Key correction: do NOT delete or rewrite-away the original premise when
splitting a shared cause — it may be the conclusion of another reasoning
step or a premise of several derivations, and deleting it breaks those
references. Use decompose(original, parts=[shared_cause, residual],
formula=land(...)): the original is kept as the `whole`, the shared cause
and residual become the atomic prior-bearing leaves, and the shared cause
is reused as a part across every original that shares it (correlation
enters once). Both the shared cause and each residual are new standalone
claims and must be rewritten self-contained.

- _shared/formalize-independence.md: add "Decompose, do not delete the
  original" under Pattern 3 (canonical; fine inherits via its Pass 5
  reference).
- coarse phase-2: carve out decompose as the one exception to the
  reduced-DSL "derive only" rule, for the Pattern 3 case.
- coarse phase-3: shared-factor section + completion gate now prescribe
  decompose-preserve + self-contained cause/residual.
- coarse phase-4: add decompose to the primitives table and a dedicated
  emission step; renumber.
- coarse SKILL.md: Pattern 3 exception to "two claim kinds only".

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Per the intended model: a weak point and a highlight are the SAME kind of
leaf premise — both are non-trivial propositions the conclusion's
derivation rests on, both emitted as a claim in the conclusion's given=[]
with a register_prior. The only difference is the prior magnitude (weak
point lower, highlight higher) plus a weak_point / highlight tag. A
highlight is extracted because it is non-trivial and worth making explicit
and reviewable, not to raise belief — as a high-prior premise it is
near-inert in BP, which is fine.

Reverses two prior decisions:
- highlights are no longer "working-notes only / folded into rationale";
  they are leaf-premise claims like weak points (SKILL.md invariant,
  Phase 3 goal + body-writing rule + schema + completion gate, Phase 4
  primitives table + emission + label minting + module example).
- the prior 0.9 cap and the fixed [0.001, 0.9] range are removed; the
  reviewer judges each prior on its merits, bounded only by BP validity
  (~0.001 / ~0.999). Added a 0.90-0.999 band where most highlights land.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…enough

p1 (sufficiency) and p2 (necessity) were reviewer working-notes that BP
never consumes: register_prior(claim, value) takes only the single prior,
and coarse's premise→conclusion link is the deterministic derive
implication, not a soft conditional, so there is nowhere for p1/p2 to
enter inference. They were dead scaffolding.

Remove them from the calibration section, the working-notes schema (weak
points + highlights), the calibration sanity check, the Phase 1b note,
and the completion gate. The reasoning they carried is kept in prose:
necessity in the `failure_mode` field, sufficiency in the derive
`--rationale`. Each leaf premise now carries exactly one number —
`prior_probability` → `register_prior`.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
… artifact

The Phase 1/2/3 "Working Notes Schema" YAML blocks mirrored what the Gaia
DSL already expresses, then Phase 4 re-serialized them to DSL — a
redundant double representation now that Phase 4 emits DSL directly.

Remove all three schema blocks. The analysis phases hold their output in
context (no intermediate YAML/JSON) and Phase 4 emits the package
directly. Reviewer reasoning, the only thing the schema held that the DSL
did not, is folded into the DSL's own prose: weakness_reason +
failure_mode into the register_prior justification, credit + synthesis
narrative into the derive rationale. The justification/rationale strings
ARE the reasoning; there is no separate stored field.

Single source of truth: the Gaia DSL package.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…w fixes

Phase 1b queried LKM during formalization, which is backwards:
formalization is a paper -> package transformation, while LKM is the
downstream graph aggregated from already-formalized packages. Querying it
mid-formalization is circular, non-idempotent, and breaks benchmark
determinism. Remove it entirely — the LKM-driven route is the separate
gaia-lkm-explore client.

- Delete the 122-line "Phase 1b — LKM Reverse-Provenance Trace" section
  from phase-3 and its completion-gate item.
- Strip Phase 1b from SKILL.md: frontmatter, progressive workflow,
  the source-of-truth invariant's exception clause, responsibility
  boundaries (add an explicit "does not query LKM" boundary), reference
  files, and the LKM-CLI sibling-skills bullet. Drop the now-unused
  lkm_id mention.

Whole-skill review fixes alongside:
- "Two claim kinds only" + "One deduction" invariants now say leaf premise
  = weak point OR highlight (was weak-point-only, contradicting the
  unified-leaf-premise invariant).
- phase-2 premise-union likewise.
- drop the stale "(schema below)" pointer (the working-notes schema was
  removed) and the redundant bullet it sat in.
- `--rationale` CLI-isms -> `rationale=` (Phase 4 writes DSL directly);
  stale "Step 4a" cross-reference dropped.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
With Phase 1b gone, coarse is purely paper -> package and has no reason to
point at the LKM-driven route. Remove the gaia-lkm-explore mentions from
the frontmatter, the mission sibling description (now contrasts with
formalize-fine only), and the sibling-skills section (deleted — it held
only that bullet). Keep the "does not query LKM" responsibility boundary
but state it without naming the other tool.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…sions

Per the principle that only premises get priors: a conclusion never
carries a register_prior — its belief propagates through its derive from
the premises. The only case that violated this was the "isolated
conclusion" fallback (a root with no upstream and no leaf premise getting
a direct prior). Forbid it: an isolated conclusion is impossible — every
conclusion rests on something.

- Phase 2: every conclusion's given must include ALL upstream conclusions
  it depends on (per the logic graph); a root with no upstream defers to
  Phase 3 for >=1 leaf premise. Gate item added.
- Phase 3: every conclusion must leave the phase with >=1 premise; a root
  with no weak point gets >=1 supporting highlight. Drop the per-conclusion
  synthesis prior NUMBER (only ever consumed for isolated conclusions);
  keep the synthesis narrative (it feeds the derive rationale). Gate adds a
  "no isolated conclusion" check.
- Phase 4: register_prior for leaf premises and nothing else; one derive
  per conclusion (every conclusion); self-check item 1 verifies no isolated
  conclusion (gaia inquiry review catches orphans at hand-off).
- SKILL.md invariants updated ("one deduction per conclusion; no isolated
  conclusions"; "only leaf premises carry priors").

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…af premises

Make the premise-assembly order explicit (it matches the pass order and
reads naturally, though BP is order-insensitive): build a conclusion's
given=[...] as the upstream conclusions it depends on first (Phase 2
inputs, in topological order), then the weak points and highlights
surfaced while reasoning (Phase 3 additions). Updated the SKILL.md
invariant and the Phase 4 deductions step; the module example already
follows it.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The skill leaned on docs/for-users/*.md paths for the DSL surface (verbs,
body discipline, label rules, layout). Those are docs-tree paths that the
agent may not have at runtime and that can drift from the installed
gaia-lang version. Point at the runtime-accessible, version-matched
source instead:

- `gaia sdk` — the canonical DSL surface (writes a self-contained SDK
  reference + cheat sheet); read it before emitting.
- `gaia pkg scaffold` / `add-module` — package layout (run them).
- `gaia <cmd> --help` — per-command CLI reference.

Updated the Mission, the package-shape responsibility boundary, the
reference-files section (now "Gaia DSL surface and CLI"), and the Phase 4
goal + label-rules pointer. The fuller docs/for-users docs are kept only
as an optional "deeper reference when in the repo" note; the skill relies
on `gaia sdk`.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…workflow

Replace the "analyze in four global phases, dump the package in phase 4"
model with an incremental build, per the intended workflow:

1. suitability gate
2. scaffold the package + one module per section
3. write the conclusions (claims) into their modules + motivation + open
   questions — conclusion claims only at this point
4. organize the logic graph over the written conclusions
5. per conclusion (topological order): emit its weak points + highlights
   (leaf premises) and its derive (given = upstream conclusions then leaf
   premises); compile-check the module
6. finalize: global Pattern-3 decompose, priors.py, references.json, full
   compile, self-check, hand-off

The phase docs keep their methodology bodies but are reframed as
references for the steps (not sequential passes): phase-1 = steps 3-4,
phase-2 = the derive in step 5, phase-3 = weak/highlight in step 5 +
independence in step 6, phase-4 = the emission mechanics across steps
2/3/5/6 (relabelled "Workflow step N" + finalize 6a-6f to avoid colliding
with the workflow step numbers).

Self-review fixes folded in: removed all stale "Phase N" / "four-phase" /
"Phase 4 writes files" language; fixed a contradiction (a shared-factor
bullet still called highlights "working-notes folded into rationale" —
they are leaf premises now, decomposed like weak points); renamed the
phase doc titles and the "Holding Phase N output" sections.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The pre-paper motivation is framing / context with no truth value, so it
maps to note(...), not question(...) — question is for specific
unresolved questions (the per-section open-questions output). Emit one
note(...) in motivation.py summarising the whole-paper motivation, and
emit each section's open questions as question(...) calls in that
section's module. Update the SKILL.md workflow, the phase-4 primitives
table, and the phase-4 step 3 emission rules.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
In Gaia, an "open question" is a driving research question paired with the
conclusion that answers it — the question(...) records the question, the
claim(...) records the paper's answer. That matches both fine's pass-1
("Driving questions for the source") and the legacy paper-extract
pipeline B (select_conclusion.xml had a per-conclusion <problem>: "该
结论对应的子问题").

The current skill conflated "open question" with "future-work / things
the paper leaves unresolved at the paper level" — a misreading. Fix it:

- Each conclusion gets one question(...) in the same module recording
  the research question it answers (atomic conclusion ↔ atomic driving
  question), bound <key>_c<id>_q.
- The motivation note (paper-level framing) remains a single note(...)
  in motivation.py.
- Paper-stated future-work / unanswered next-steps are not modelled by
  the skill — leave them out.

Updated phase-1 Goal item 3, the Open Questions section, the gate, the
SKILL.md workflow step 3, and the phase-4 primitives table + step-3
emission rule.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Walk back the per-conclusion driving-question model from the previous
turn — it was the wrong simplification. The coarse skill emits one
question(...) at the paper level: the paper's overall open problem (the
research question the paper as a whole sets out to answer), placed in
motivation.py alongside the motivation note(...). No per-conclusion
questions in the section modules. This matches the legacy
paper-extract pipeline B's top-level <problem>.

Updates phase-1 Goal item 3 + Open Problem section + gate, SKILL.md
workflow step 3, and the phase-4 primitives table + step-3 emission rule
+ intro paragraph.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…en residual leaves

The per-conclusion step 5 didn't state the conceptual order the agent
should follow inside it. Make it explicit:

  1. Summarise the reasoning chain (becomes derive's rationale).
  2. From the reasoning, identify the upstream conclusions it depends on
     (first entries in given=).
  3. Surface weak points and highlights as the RESIDUAL load-bearing
     factors — what the reasoning rests on beyond what the upstream
     conclusions already capture. A factor already represented by an
     upstream is not duplicated as a leaf premise (would double-count).
  4. Emit the leaf-premise claims and the derive into the module;
     compile-check.

Update SKILL.md workflow step 5 + phase-4 step 5 intro. Add a "residual
relative to upstream conclusions" gating question to both weak-point and
highlight gates in phase-3 (weak-point gate now has six checks, not five).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…experiment)

Building the evidence chain for a conclusion often surfaces a still-
bundled claim that should have been split at extraction — most commonly
a theoretical prediction fused with its experimental measurement (or a
method fused with its produced value). Make the atomicity re-check the
first sub-step of step 5: per _shared/formalize-atomicity.md's "Separate
theory from experiment" and "Separate method from result" rules, split
the bundled claim into atomic claims now (replacing the module's claim,
updating the logic graph), then proceed with each atomic conclusion
separately through the rest of step 5.

The five sub-steps of step 5 are now: atomicity re-check → summarise
reasoning → list upstream conclusions in given= → surface residual weak
points and highlights → emit. Updates SKILL.md step 5 and phase-4 step 5.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…es its nature

After step 5.1's atomicity split, each atomic conclusion gets its own
reasoning chain — the theory atom and the experiment atom never share
one trace. Make the chain's content explicit: a theoretical conclusion
gets its mathematical / logical derivation; an experimental measurement
gets the experimental procedure (setup, instrument, sampling, readout);
a computational result gets the method + parameters + numerical run.

Updates step 5.2 in SKILL.md and phase-4, and the Goal section of phase-2
(Reconstruct the Reasoning Chain).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The 6-step workflow restructure renamed the legacy four-pass language to
workflow steps 1-6, but several "Phase 1/2/3/4" references inside the
reference files still talked about Phase N as a step name. Replace them with
the current step / file / audit referents. Also: the gate summary said "five
gating questions" while the gating sections now list six (the residual check
added when no-isolated-conclusion landed), and SKILL.md still said "four
analytical passes" / "Phases 1-2 load these from _shared/". One scaffold
description placeholder still pointed at "Phase 1 motivation"; now it
points at the motivation note.
The skill never said which claims belong in the root __init__.py's __all__.
Without guidance the agent leaves the scaffold default __all__ = [], which
the engine treats as "export every labeled claim" — so leaf premises (weak
points, highlights) and decompose parts leak into the public IR alongside
real conclusions.

Add a Non-Negotiable Invariant in SKILL.md (conclusions + motivation note +
open-problem question are exported; weak points / highlights / decompose
parts are not). Add a new finalize sub-step 6c in phase-4-emit-package.md
that replaces the scaffold default with the right label list, and a
matching self-check at 6f. 6c–6f shift to 6d–6g.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
LittleBug and others added 6 commits May 31, 2026 19:49
…usions

The previous commit (01f3a45) put export guidance in the SKILL invariant +
phase-4 step 6c finalize, and recommended exporting the motivation note and
open-problem question alongside conclusions. Two problems:

1. Knowing whether a claim is a "main conclusion" is decided at write time
   (step 3), not at finalize. Deferring the __all__ append to step 6 makes
   the agent re-walk the conclusions to figure out what to export.

2. Re-checking the engine: gaia author CLI defaults to --no-export for note
   and to --export for question, but the canonical downstream consumers
   (gaia register, _manifest, _github README rendering, _inquiry, _dot,
   lkm_explorer, starmap, gaia-publish, formalize-fine) all assume the
   exported surface is "the paper's headline conclusions" — neither the
   framing note nor the research question is a contribution.

   The earlier commit also claimed empty __all__ is treated as "export
   every labeled claim" — that's the pkg.exported runtime property's
   fallback, but the IR generator (compile.py:1881) does the opposite and
   records exported=False for everything. The IR is what every downstream
   tool reads, so the runtime property's view is effectively unused.
   Filed engine inconsistency as issue #724.

Rewrite the invariant to "main conclusions are the exported surface" with a
brief pointer to #724 for the engine-wide convention question. Move the
operational mechanics out of phase-4 step 6c (drop that section) into
phase-1 step 3 (a new "Mark each main conclusion in the root __all__"
subsection) and phase-4's Workflow step 3 section (the code shape). Reduce
6f self-check to a one-paragraph verification. Renumber 6d-6g back to 6c-6f.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
… conclusion and premise layers

Per Mendel/Galileo precedent and the v0.4 paper-extract approach, coarse was
too thin: it modelled only derive dependencies between conclusions and treated
weak points / highlights as standalone leaf premises. Real papers also state
direct logical relations the agent should capture — competing hypotheses
that cannot both hold, theoretical predictions that match measurements,
exhaustive binary choices, and judgment-bound associations. Without them the
graph loses real BP structure (a contradict creates strong coupling that a
mere derive cannot).

Add the four relation verbs at two layers:

- **Conclusion-graph layer (step 4 + step 5.1 atomicity split aftermath)**:
  surface equal / contradict / exclusive between conclusion pairs (or
  atomic sub-conclusions); use associate when the strength is reviewer-
  judged. Methodology + decision table + "what NOT to model" guidance in
  phase-1 §Relations between conclusions. Workflow step 4 in SKILL.md
  picks up the new responsibility.

- **Premise layer (step 5.4)**: when sweeping each argument-pattern group
  of premises (measurement / causal / model / …), also check for relations
  between same-pattern premises. Methodology in phase-3 §Cross-premise
  relations within a pattern. SKILL.md step 5.4 picks this up.

Other supporting edits:

- Phase-2 "reduced DSL" statement updated: relations are allowed, no longer
  just decompose as the lone exception.
- Phase-4 step 3 emission section adds the relation code-shape (which module
  hosts the relation, label rule, no-prior, no-__all__).
- Self-check item 7 lists relation labels among the labels that must not
  appear in root __all__.
- SKILL.md "Two claim kinds only" invariant clarifies relation verbs emit
  internal helper claims (engine-managed), not new propositions the agent
  has to write.
- Fixed two stale step numbers in the same invariant (step-1 -> step-3
  conclusion, step-3 -> step-5 leaf premise) while editing through.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Previous commit added equal / contradict / exclusive / associate at the
premise layer but used shorthand signatures (no rationale=…). At the
conclusion layer in phase-1 §Relations the signatures showed rationale=…
in every verb; phase-3 omitted it, making the two layers inconsistent.

Worse, premise-level relations need the rationale MORE than the conclusion
layer does: a conclusion-level relation typically reflects something the
paper itself states, but a premise-level relation is a reviewer assertion
on top of the audit material — without a stated reason, it is unreviewable.

Add rationale=… to every signature in the bullet list, then a three-part
guidance paragraph: name how the reviewer is asserting the relation (not a
restatement of the verb), cite the paper-textual evidence in [@key] form
(no Eq./Fig./Sec. pointers per the existing invariant), and for associate
additionally justify the two conditional probabilities. A relation whose
rationale reduces to "they look related" must be rewritten before emit.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…scape hatch

(A) Suitability Gate now routes Bayesian / statistical model comparison
papers to gaia-formalize-fine. Coarse emits only derive (no infer / observe
/ compute / bayes.compare / bayes.model), so a paper whose core contribution
is "Model A beats Model B by Bayes factor / likelihood ratio" loses its
epistemic structure when coarsened. The gate is the *core contribution*,
not the presence of any statistical method — a paper that runs t-tests in
service of an experimental story stays in coarse.

(B) Phase-3 escape hatch for the "paper supplies no premise" corner case.
The no-isolated-conclusion invariant says every conclusion needs ≥1
premise, but real papers sometimes assert load-bearing assumptions
without justification. The honest representation is a `formal` weak point
whose body names the missing justification ("paper asserts X without
derivation / citation / measurement"); this lets the audit close
without inventing support or skipping the conclusion.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The exported-surface prose referenced an unresolved design question and
the permissive gaia author CLI default. Both are now settled (curated,
per #724) on main, so drop the hedging and stale engine line refs
(compile.py:1881, packaging.py:421) and state the rule plainly: root
__all__ is the single source of truth, filled at step 3, validated at
compile. No change to what coarse puts in __all__ (main conclusions only).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
LittleBug and others added 5 commits June 2, 2026 11:59
… pass

Relation model (premise + conclusion layers): conclusion-level
equal/contradict/exclusive/associate discipline (equal guards double counting
via shared-cause extraction; associate is the exception); premise relations
allowed where genuine (same -> reuse one claim, correlated -> decompose, logical
combination -> premise node C = A | B, cross-conclusion contradict/exclusive ->
add it); only co-premise contradict/exclusive is incoherent.

Package layout: drop the authored/ subpackage (a gaia author CLI artifact) -
write flat modules under src/<import>/ and curate the root __all__ directly;
gaia pkg scaffold stays only for pyproject + uuid.

Clarity/consistency (full section-by-section review): references.json timing;
weak_point/highlight/weak_types are advisory metadata; align phase-1 suitability
gate with SKILL.md; drop opaque "legacy step 4 / paper-extract pipeline B" refs;
fix decompose "only place" wording and a stale section-module __all__ note.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ion relations

Prior rule: register_prior goes on every leaf input a conclusion rests on
(experimental facts, externally-established theory/predictions, and the audit's
weak points/highlights); the paper's own conclusions never carry a prior.

Conclusion relations: the derive logic graph is the only structure among
conclusions — drop the proactive step-4 scan for equal/contradict/exclusive/
associate (established conclusions don't contradict; a derive dependency
re-encoded as a relation double-counts or cycles). The lone exception, an equal
between a theory atom and the experiment atom of the same quantity, comes from
the step-5.1 atomicity split. A general theorem vs a separate experimental
validation has different truth conditions and is not equal'd — they stay two
independent conclusions.

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

A leaf that is the paper's own newly-proposed proposition with no external
support is genuinely 50/50 a priori — set it at maximum entropy (~0.5), not low
(as if doubtful) nor high (as if established). Distinct from the 0.40-0.60
"shaky" band: there the reviewer judges the claim weak; here there is simply no
prior evidence either way yet.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
phase-4 self-check item 7 stated the rule in prose (export only the main
conclusions; never leaves, notes, or questions). An end-to-end smoke had
a formalizer ignore it and export the motivation question, an input leaf,
and four weak-point leaves -- which trips the benchmark's leaf-exported
lint and roughly halves L4 precision.

Replace the eyeball check with a runnable assertion over .gaia/ir.json:
an exported claim carrying a register_prior is a leaf, and a note/question
is never a conclusion, so both fail the check. Engine-level enforcement is
tracked in #738.
@kunyuan kunyuan mentioned this pull request Jun 19, 2026
39 tasks
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.

2 participants