Skip to content

audit: record the adversarial mutation-test scan of sol-v0.1.6 - #49

Merged
thedavidmeister merged 1 commit into
mainfrom
2026-08-16-amt-scan-record
Aug 16, 2026
Merged

audit: record the adversarial mutation-test scan of sol-v0.1.6#49
thedavidmeister merged 1 commit into
mainfrom
2026-08-16-amt-scan-record

Conversation

@thedavidmeister

@thedavidmeisterthedavidmeister commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

The committed scan record for the adversarial mutation-test campaign, at the predictable path org health fetches uniformly: audit/mutation-test-scans.json.

It exists so a health check can tell a recently-audited repo from a stale one, and know which release was audited rather than only when.

The one judgement call in it

publishedTag is sol-v0.1.6. The scanned commit c72eb89 is tagged sol-v0.1.6 with 0 commits ahead, but its foundry.toml says version = "0.1.7" and its own subject is "Package Release: soldeer rain-sol-codegen 0.1.7". Soldeer's registry holds 0.1.6, uploaded at the same second as that commit.

So 0.1.7 exists in the manifest and the commit message and nowhere else. Recording it would claim this scan covered a release that does not exist.

Worth knowing separately: this makes [package].version a next-version slot here, the opposite of rain.deploy, where it is documented as the version of the last publish and only a sol-v* tag moves it. Same field, two meanings, two repos.

What the numbers are

161 mutants across the three libraries — LibFs 18, LibHexString 18, LibCodeGen 95 semantic + 30 structural. 157 killed, 1 survived, 3 controls whose survival is the correct verdict.

The survivor is LibFs's vm.removeFile: unobservable through cheatcodes because vm.writeFile truncates, so remove-then-write and write-alone leave identical bytes in every reachable state. Left alive rather than covered by a test asserting a guarantee the code does not make — filed as #41 instead.

The controls are LibHexString's memory-safe annotation removal, whose promise is probed directly by three other mutants that all die.

Suite goes 9 tests to 102 across #36, #37 and #39, which are open, green and disjoint.

Ten findings filed, all labelled audit and adversarial: #38, #40, #41, #42, #43, #44, #45, #46, #47, #48.

QA

  • Discriminating tests: n/a — this PR adds one JSON record and no code. The discriminating work is in Cover LibFs: path structure and what buildFileForContract actually writes #36, LibHexString.bytesToHex gets a test file #37 and LibCodeGen: cover every unprobed function and pin the four wrap decisions #39, whose matrices this record summarises.
  • Mutations applied: n/a for this diff. The campaign it records ran 161: pass A 95/95 killed, pass B 30/30 killed, baseline 14 killed / 81 survived against the pre-existing 9 tests, LibFs 17/18, LibHexString 17/18.
  • Oracle: the file's shape is the skill's specified schema; publishedTag is Soldeer's registry answer for what is actually published, not the manifest's assertion; commit and commitsAheadOfTag are git rev-parse and git rev-list --count at the scanned tree.
  • Category check: the skill asks for timestamp, scanned commit, published tag, scope and summary, landed on the default branch. All present. commitsAheadOfTag included because the scanned commit's relationship to its tag is what makes the tag meaningful.

Summary by CodeRabbit

  • Chores
    • Added mutation-test scan results for release sol-v0.1.6, including test outcomes, coverage details, and scan metadata.

The scan record org health reads to tell a recently-audited repo from a stale
one, and which RELEASE was audited. `publishedTag` is `sol-v0.1.6`, which is
what Soldeer holds — `foundry.toml` says 0.1.7 and so does the commit subject,
but 0.1.7 was never published, so recording it would claim a scan of a release
that does not exist.
161 mutants across the three libraries. 157 killed, 1 survived, 3 controls whose
survival is the correct verdict. The survivor is `LibFs`'s `vm.removeFile`,
unobservable through cheatcodes because `vm.writeFile` truncates — left alive
rather than covered by a test asserting a guarantee the code does not make.
Suite 9 tests to 102 across the three coverage PRs.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@thedavidmeisterthedavidmeister self-assigned this Aug 16, 2026
@coderabbitai

coderabbitaiBot commented Aug 16, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 00ccf37a-12ce-4fc5-9492-c01593091538

📥 Commits

Reviewing files that changed from the base of the PR and between c72eb89 and 9c2104b.

📒 Files selected for processing (1)
  • audit/mutation-test-scans.json

Included review availability: Your plan includes up to 1 review per rolling hour; 0 remain after this review.


Walkthrough

The pull request adds a repository-wide mutation-testing scan record for commit c72eb89b, tagged sol-v0.1.6. The record includes scan metadata, results for 161 mutants, test counts, and linked issues and pull requests.

Changes

Mutation scan audit

Layer / File(s)Summary
Record mutation scan results
audit/mutation-test-scans.json
Adds mutation-testing metadata, outcomes for 161 mutants, test counts, and linked issue and coverage pull requests.

Estimated code review effort: 1 (Trivial) | ~2 minutes

Merge Risk:⚪ Minimal · up to 9c210

This change adds a localized audit record without changing product or runtime behavior; no actionable merge-blocking risk remains beyond normal checks and review.

Possibly related issues

  • rainlanguage/rain.deploy#64 — Requests the mutation-test ledger entry added in audit/mutation-test-scans.json.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the added mutation-test audit record for sol-v0.1.6.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch 2026-08-16-amt-scan-record

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@thedavidmeister

Copy link
Copy Markdown
ContributorAuthor

Reviewed 9c2104b: ready. One new file, audit/mutation-test-scans.json, no code.

It records what was scanned and against which release, so org health can tell a recently-audited repo from a stale one. The scanned commit is c72eb89, scope whole repo, 161 mutants across the three libraries with 157 killed, 1 survivor and 3 controls, suite 9 tests to 102.

The judgement in it is publishedTag. c72eb89 is tagged sol-v0.1.6 with 0 commits ahead, while its foundry.toml says version = "0.1.7" and its own subject reads "Package Release: soldeer rain-sol-codegen 0.1.7". Soldeer's registry holds 0.1.6, uploaded at the same second as that commit. So 0.1.7 exists in the manifest and the commit message and nowhere else, and recording it would claim a scan of a release that does not exist. The record says 0.1.6.

That also documents a divergence worth knowing: [package].version is a next-version slot here and the version of the LAST publish in rain.deploy, where only a sol-v* tag moves it. Same field, opposite meanings, one org.

The single survivor across all 161 is LibFs's vm.removeFile, unobservable through cheatcodes because vm.writeFile truncates — filed as #41 rather than covered by a test asserting a guarantee the code does not make. The three controls are LibHexString's memory-safe annotation, whose promise three other mutants probe directly and all die.

Ten findings filed, every one carrying both audit and adversarial: #38, #40 through #48.

All five checks green, and CodeRabbit actually reviewed this one — Review completed rather than the rate-limit banner on the three coverage PRs — with 0 unresolved threads, checked via GraphQL rather than read off the badge. So here the zero means something.

Sign up for freeto 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

@thedavidmeister