Skip to content

test(analog): linear mutation test gaps closed, gate passed (Closes #12275) - #12307

Merged
gHashTag merged 2 commits into
masterfrom
lane/analog-mut-linear-12275
Oct 25, 2026
Merged

gHashTag merged 2 commits into
masterfrom
lane/analog-mut-linear-12275

Conversation

@gHashTag

Copy link
Copy Markdown
Collaborator

Closes #12275. Part of epic #10486 (see it, not closing it).

What

specs/analog/linear.t27 gets 12 new tests (14 -> 26) for the 35 test-gap survivors of groups A to F found by the census of #12116, an accepted-mutants file for the mutants no test can or must kill, and a note with the measured numbers. The seal AnalogLinear is re-saved.

Measured

tri mutate spec --accepted on this tree (T27 OS pane, jobs 3, timeout 30, master-built t27c, rebased on master 36c8d6a54f, 13:14:15-13:27:00 +07, 12 min 45 s, 1-minute load 15 at the start): 420 mutants, 351 killed (351 by a failing test, 0 by an invariant), 26 survived, 38 hung, 5 unviable; 64 not killed, 64 accepted, 0 accepted lines now killed; "Gate passed". The census on the unmodified spec was 316 killed / 61 survived / 38 hung / 5 unviable, so the tests turned 35 survivors into kills (316 + 35 = 351).

tri test on the spec: 26/26 pass, 0 vacuous. tri seals changed: seal-save and seal-recheck exit 0, importer seals exit 0 with only .trinity/seals/analog_AnalogLinear.json changed; t27c seal specs/analog/linear.t27 --verify exits 0.

Not claimed

  • The tool names no killing test; "killed by assert N" is read from the asserts, and the gate shows only that the targeted mutants are no longer among the survivors.
  • The 18 equivalent survivors and the 7 dead lines are classified by reading the code, not proved by a tool; the 38 hung mutants are dropped loop steps and x / 2.0 to x * 2.0 in a shrinking loop, which hang by construction.
  • The 5 unviable entries stay in the accepted file: the gate ignores an entry whose mutants were all unviable, and it passed with them present.
  • Line 463 >= has no test (no expected value derived); the dead lines 441 and 442 are not removed.
  • tri coverage --strict was not run locally; CI runs it.

Files: the spec (+286 lines of tests at the end), docs/analog/mutation-accepted-linear.txt, docs/analog/mutation-linear-2026-10-25.md, the seal.

🤖 Generated with Claude Code

gHashTag and others added 2 commits October 25, 2026 13:36
Twelve tests appended at the end of specs/analog/linear.t27 (286 added
lines, no existing line changed) for the 35 test-gap survivors of the
2026-10-25 census, groups A to F: a floating capacitor, three independent
filters and two inductors on one node (stamp), a swap at stage 1, the
cells below a stage-0 swap and two pivot-search ties (eliminate), an exact
tie in tie_gap and ties_clear, negative controls for residual, mismatches
and the run peak, node_count and table_ok refusals, matmul and power_norm
on hand matrices.

Also docs/analog/mutation-accepted-linear.txt (69 entries: 18 equivalent,
7 dead line kept, 1 pending 463 >=, 38 hung, 5 unviable) and the note
docs/analog/mutation-linear-2026-10-25.md.

tri test specs/analog/linear.t27: 26 tests, 26 pass, 0 fail, 0 vacuous
(98 new counted asserts, 243 in all). Every hand value held on the first
run. Not done: the mutation gate has not been run, the AnalogLinear seal is
not re-saved, 463 >= has no test.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…saved, note counts (Refs #12275)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-10-25 07:04:40 UTC

Summary

Status Count
Total Open PRs 50
PRs with Failing Checks 25
PRs with All Checks Green 25
READY 8
FAILING 25
PENDING 0
NO CHECKS YET 0

These columns do not partition: 8 + 25 + 0 + 0 = 33, and there are 50 open PRs. A PR is being counted twice or not at all.

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=55c0f1b1b32d != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

@tri-claw

tri-claw Bot commented Oct 25, 2026

Copy link
Copy Markdown

Summary by t27-bees

Checked by the t27 compiler

t27c parse, parse-complete and typecheck on each changed .t27 file at 9884b79. Nothing was generated, built or run. A pass means the file is well formed, not that it is right.

  • specs/analog/linear.t27: parses and typechecks.

Read by the model

This PR adds 12 new tests to specs/analog/linear.t27 to close 35 mutation test gaps identified in a census, along with an accepted-mutants file documenting the remaining 26 survivors (18 equivalent, 7 dead lines, 1 pending) plus 38 hung and 5 unviable mutants. The mutation gate passes with 351/420 mutants killed.

Worth a look

  • docs/analog/mutation-accepted-linear.txt:78-82 — The 5 ret-default unviable mutants are written as active accepted entries (not comments). The gate currently ignores them because all mutants on those lines were unviable, but if the emitter later lets one run and a test kills it, the entry will become stale and fail the gate. Other accepted files in the repo put unviable mutants in comments only.

  • specs/analog/linear.t27:1177-1178 — Test a_floating_capacitor_stamps_both_of_its_nodes_in_both_blocks asserts mismatches(2, &mn, &fd, &fnv) == 0 where fd and fnv are hardcoded u32 words. If the rounding mode or float-to-word packing ever changes, this test will fail even though the derived values are mathematically correct.

  • specs/analog/linear.t27:1245-1246 — Test a_swap_at_stage_1_exchanges_whole_rows uses assert bm[i] == be[i] (exact equality) on values produced by eliminate. The comment says "every operation is exact" but Gauss-Jordan division of the pivot row could introduce rounding if the pivot isn't a power of two; the hand-built matrix uses 1.0 pivots so this holds today, but the test would silently pass a mutant that changes the pivot choice if the new pivot also divides exactly.

  • docs/analog/mutation-linear-2026-10-25.md:107-108 — The equivalence argument for line 393 (w + y → w - y in bump) rests on IEEE round-to-nearest sign symmetry ("standard, not run, not established"). If the target platform ever uses a different rounding mode, this mutant would become a test gap with no test to kill it.

  • docs/analog/mutation-linear-2026-10-25.md:111-112 — The equivalence argument for line 574 notes that in f64 an input within ~1e-9 of TIE_GAP could flip the verdict ("the width of the band is not established; no table is there"). If such a table is ever constructed, this accepted mutant would be a live equivalent that isn't actually equivalent.


Read: 4 files, +547 -8, the whole diff. Head 9884b79. Model: openai-compatible/nvidia/nemotron-3-ultra-550b-a55b. Commands: @t27-bees review | summary | help | pause | resume. Free for every repository.

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.

analog: linear mutation test gaps - groups A to F (35 survivors) plus accepted-mutants file

1 participant