Skip to content

release: v0.18.0 — nothing drives it, so there is no solve - #450

Merged
dc0sk merged 1 commit into
mainfrom
release/v0.18.0
Sep 8, 2026
Merged

release: v0.18.0 — nothing drives it, so there is no solve#450
dc0sk merged 1 commit into
mainfrom
release/v0.18.0

Conversation

@dc0sk

@dc0sk dc0sk commented Sep 8, 2026

Copy link
Copy Markdown
Owner

v0.18.0 — Nothing drives it, so there is no solve

Eighteen changes since v0.17.0: remediation of the 2026-08-28 whole-project audit (#432#442), a documentation-honesty cluster (#443#447), and two solver fixes (#448, #449). Both criticals and every high from that audit are closed. Ledger: 137 findings / 35 open → 149 / 33 open, zero critical, zero high.

workspace 0.17.0 → 0.18.0
fnec_py 0.8.0 → 0.9.0 (Cargo.toml + pyproject.toml)
lockfiles both refreshed
SBOM regenerated, committed, 526 packages

The changelog covered 2 of the 18 PRs

[Unreleased] held entries for #448 and #449 only. The entire audit-remediation cluster — both criticals among it — had merged without a changelog entry. Keep a Changelog's own warning is that a partial record "can be as dangerous as not having a changelog", because it reads as complete.

Entries are now written for all eighteen, and each is verified cited by number:

for n in $(seq 432 449); do grep -q "#$n\b" docs/changelog.md || echo "MISSING #$n"; done
# (no output)

Breaking changes, each with a migration in the release notes

  • A deck with no EX card is refused. stdout now carries nothing — not [] — and exit is 1. A JSON consumer that parsed the empty array was recording a null result where it should have reported an error.
  • A deck with neither EX nor FR likewise moves 0 → 1. A deck with EX but no FR is unchanged (FND-084, open, deliberately untouched).
  • GM decks change geometry. fnec read I2 as a last tag and F7 as a first tag with no NRPT concept, so standard decks lost wires in silence. Re-run any deck with a GM card before trusting a stored result.
  • EX 4 impedances shift. A current source is now the unit-voltage solve rescaled by i0/I_feed — exact for a linear system.

Claims swept — two were wrong and are corrected

  • The plane-wave split/whole agreement was quoted at 8.1e-12; that figure came from a different incidence angle. Re-measured at this commit on the matched pair: 1.1e-12, against the test's 1e-9 gate.
  • "1655 items checked" by the doc-attachment gate was true at fix(gates): make four checkers as strict as the claims they publish #441; it is 1681 today. Both documents now date the figure rather than letting a stale number read as current.

Re-measured at this commit: no-EX exits 1 with 0 bytes in both text and JSON; EX-but-no-FR still exits 0 with 0 bytes; neither exits 1; the oversized RP is refused; corpus 50 cases; 1093 tests; ledger 149/33.

No dependency changed between v0.17.0 and v0.18.0 — 526 packages before and after, only the nine workspace members' own versions moved. Established by set difference over (name, versionInfo) pairs, not by hashing the sets, which is randomised per process and fooled an earlier release.

Removed-feature sweep for the single ### Removed entry: FNEC_ACCEL_STUB_GPU survives only in the retirement records documenting its removal and in a schema note calling it retired. No live advertising.

Gate evidence — disclosed as local

Per the release checklist, gates run locally rather than in CI are sufficient only with explicit disclosure. This ran on the committed tree with a clean working directory, exit code captured directly rather than through a pipe:

scripts/check-all.sh   EXIT=0   — 15/15 gates passed
fmt (both trees) · clippy ×2 · test ×2 · check-changelog-headings ·
check-findings-ledger · check-path-inventory · check-release-tags ·
check-binding-version · docs frontmatter · traceability matrix fresh ·
corpus provenance fresh · check-release-tags self-test · check-doc-attachment

CI's own 8 checks run independently on this PR, and the Mint release tag workflow re-verifies CI green at the exact commit it tags — so the tag does not rest on the local run.

The version-consistency check was sabotage-verified once for this repo (checklist §2): check-binding-version.py passes at 0.9.0/0.9.0, fails naming both files when pyproject.toml alone says 0.9.1, and passes again once restored.

🤖 Generated with Claude Code

https://claude.ai/code/session_018p7FxX7QMWNJVNp9LbaLkB

Eighteen changes since v0.17.0: remediation of the 2026-08-28 whole-project
audit (#432-#442), a documentation-honesty cluster (#443-#447), and two solver
fixes (#448, #449). Both criticals and every high from that audit are closed.
The ledger went 137 findings / 35 open -> 149 / 33 open, zero critical, zero
high; it grew because fixing things found things.

Versions: workspace 0.17.0 -> 0.18.0, fnec_py 0.8.0 -> 0.9.0 in both its
`Cargo.toml` and its `pyproject.toml` (the lockstep every release since v0.14.0
has used). Both lockfiles refreshed, SBOM regenerated and committed.

**The changelog covered 2 of the 18 PRs.** `[Unreleased]` held entries for #448
and #449 only; the entire audit-remediation cluster -- both criticals among it --
had merged without one. Keep a Changelog's own warning is that a partial record
"can be as dangerous as not having a changelog", because it reads as complete.
Entries written for all eighteen and each verified cited by number, which is a
check worth keeping: `for n in 432..449; do grep -q "#$n" docs/changelog.md; done`.

Breaking, and the release notes carry a migration for each: a deck with no `EX`
is refused (stdout now empty rather than `[]`, exit 1 rather than 0); a deck with
neither `EX` nor `FR` likewise; `GM` decks change geometry, because fnec had been
losing wires in silence against NEC-2 semantics; and `EX 4` impedances shift,
since a current source is now the unit-voltage solve rescaled exactly.

Claims swept rather than carried forward. Two were wrong and are corrected:

  - the plane-wave split/whole agreement was quoted at 8.1e-12, which came from
    a different incidence angle; re-measured at this commit on the matched pair
    it is 1.1e-12, against the test's 1e-9 gate;
  - "1655 items checked" by the doc-attachment gate was true at #441 and is 1681
    today, so both documents now date the figure instead of letting a stale
    number read as current.

Re-measured at this commit: no-`EX` exits 1 with 0 bytes on stdout in both text
and JSON; `EX`-but-no-`FR` still exits 0 with 0 bytes (FND-084, open, and
deliberately untouched); neither-`EX`-nor-`FR` exits 1; the oversized `RP` is
refused; corpus 50 cases; 1093 tests; ledger 149/33.

No dependency changed between v0.17.0 and v0.18.0: 526 packages before and after,
and the only entries that moved are the nine workspace members' own versions.
Established by set difference over `(name, versionInfo)` pairs -- not by hashing
the sets, which is randomised per process and fooled an earlier release.

Removed-feature sweep for the one `### Removed` entry: `FNEC_ACCEL_STUB_GPU`
survives only in the retirement records that document its removal and in a schema
note that calls it retired -- no live advertising.

Gate: scripts/check-all.sh, EXIT=0, all 15 gates passed. The version-consistency
check was sabotage-verified once for this repo: `check-binding-version.py` passes
at 0.9.0/0.9.0, fails naming both files when pyproject alone says 0.9.1, and
passes again restored.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018p7FxX7QMWNJVNp9LbaLkB
@dc0sk
dc0sk merged commit cfec6d1 into main Sep 8, 2026
8 checks passed
@dc0sk
dc0sk deleted the release/v0.18.0 branch September 8, 2026 06:00
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.

1 participant