Kıyas Usage Guide
1. When to reach for it
Kıyas is for the moment a line of work stops moving: the obvious experiments are done, the obvious framings are exhausted, and what is left is either “try harder” or “try elsewhere”. It is not a brainstorming toy — it costs more per idea than free association, and that cost is the point.
Reach for it when:
- an experiment line has gone several rounds negative and you want to know whether the next member of that trace is worth running at all;
- two parallel lines have never been forced through the same apparatus;
- you suspect you are seeing a mechanism where there is only a coincidence;
- you want the argument AGAINST your current thesis stated well.
Do not reach for it to fill a slide with ten ideas. It will refuse to fill a quota, and it should.
2. The two modes
Generation. You are stuck. The skill fixes the problem in one sentence, picks at least three different operators, and returns 3–6 candidates in the output contract. Diversity comes from operator choice, not from asking for more analogies.
Distillation. You already have a pile of raw ideas. Each is pushed through the same contract, tiered, flagged, and ordered by criticality × (information value / cost).
3. Hard rules (summary — G1–G15 in the schema)
- Illet non-empty. An idea whose illet cannot be named was not generated.
- Breaking point present before an idea can be a hypothesis candidate.
- A superiority claim without a prior-art search stays speculative, and the strongest relative must be in the comparison set with a discrimination test.
- A test that adds capacity carries a matched-budget control arm, or its positive result cannot be attributed to the targeted mechanism.
- Every threshold proposal names its arbiter — the judge that returns the
verdict (
runtime/instrument/third_party/author/none). Self-judged stays capped; unjudged stays speculative. - The AD1–AD6 sweep is recorded, including explicit “clear”. AD1/AD2/AD4 force a tier; AD5/AD6 require a caveat to travel with the seed.
- The batch records its discards — what was weighed and refused, and why. Required even when empty, in which case the batch says what it considered. A list of survivors alone cannot show that anything was weighed.
- A hypothesis candidate carries the cheapest refutation that would kill it. If no test can be designed, the idea stays speculative.
-
A hypothesis candidate has had its prior art searched. “Not searched” is honest, but it caps the idea at speculative.
- The arbiter block does not contradict itself: a self-judged or unjudged arbiter cannot also be independent of the author.
-
The batch names the refuted-patterns export it consulted. “Not consulted” is honest; silence makes every AD4 line unverifiable.
-
The batch records how it was drawn: the seed (
"fresh"for an unpinned draw), the host, and optionally an inputs digest. A pinned seed does not make a batch reproducible — the generator is a language model. What the record buys is comparability: two batches carrying the same digest were drawn from the same problem and the same refuted-patterns export, so a difference between them is a difference in the draw and not in the question. -
The batch marks every pair of hypothesis candidates: independent, contradicting (then name the experiment that separates them), resting on a shared premise, one depending on the other (say which), or settled by the same test. Every other rule here judges ONE seed, so a property that lives between two of them is invisible by construction — and it is the property that says what the batch is worth. Six seeds on one premise are one bet with six faces. The number that follows is printed with the verdict: N candidates, K independent bets. Batches declaring seed schema 1.5+.
-
The batch may record what it cost (
batch.cost_actual), and if it does, it names the instrument that produced the numbers (“the model estimated it” is not one), the window, the attribution and a baseline kind —noneis honest and forbids presenting the batch as evidence that generating this way is cheaper. The ratio it refuses is cost per seed: that pays for quota filling, and the cheapest way to improve it is to generate more and think less. Divide by seeds that survived testing in a Mizan registry instead — a denominator the generator cannot inflate. Seed schema 1.6+. - A warning the batch accepts (
batch.accepted_warnings) states why: why the warning is right about what it points at, and why the batch is still correct as written. An acceptance with no reason is indistinguishable from silence. The accepted warning is still printed, marked accepted — an exemption that hid what it exempts would be worse than the halt it replaced.
Seven further checks warn without blocking (--strict makes them fail): a
numeric threshold with no judge behind it, a batch where every seed is a
hypothesis candidate, a symmetry check naming no seed, a scale transfer
with no scope caveat, a pinned seed with no inputs digest, a sweep run against
a partial refuted-patterns export (it may say “no match found”, never
“clear”), and an accepted warning that no longer fires (an exemption that
outlived its condition). Each has legitimate exceptions, so the tool says look,
not halt — a single blocking channel teaches you to write around the rules.
4. Reading the tiers
| Tag | Means | What to do with it |
|---|---|---|
[S] |
Speculative | Keep it, do not act on it. Note what is missing. |
[H-aday] |
Hypothesis candidate | Paste into a Mizan registry as a preregistration. |
[NK] |
Notation-suspect | Run the unit/basis/instrument change before anything else. |
[GB] |
Fed-back | A relative of something already refuted. Check kinship deliberately. |
Nothing except [H-aday] should enter a registry.
5. Common mistakes
- Treating the validator as a quality judge. It checks that fields are filled. Filled is not true.
- Threshold theatre. Attaching a precise-looking number to a seed whose arbiter is the author, because the form of rigor is available even when its substance is not. Write “no instrument exists here” instead.
- Silent sweeps. Leaving AD fields blank because a flag feels like an admission of failure. A flagged seed with a stated scope is worth more than a silent one.
- Quota filling. Asking for ten ideas. You will get the ones that pass, and the count is not the deliverable.
- Skipping symmetry. Every candidate flattering the current thesis is a finding about the generation, not about the domain.
6. Wiring it to Mizan
Kıyas stops at the seed. Mizan locks thresholds, runs the audit, promotes or refutes, and exports refuted patterns back. Concretely:
# before generating: know what is already dead
python ../Mizan/tools/mizan_export_refuted.py registry.yaml -o refuted-patterns.yaml
# after generating: check the batch against those constraints
python tools/kiyas_validate.py --refuted refuted-patterns.yaml seeds.yaml
# after the registry decides: record it, wins and losses
python tools/kiyas_ledger.py ledger/kiyas-ledger.yaml
The ledger is where the project’s own claim gets tested. Until it has entries and a control arm, that claim is speculative and the tooling says so.