Skip to content

docs(audit): reproducibility audit of the Alpöge–Fable Jacobian counterexample package - #2527

Merged
POWERFULMOVES merged 2 commits into
mainfrom
docs/jacobian-counterexample-repro-audit
Aug 18, 2026
Merged

POWERFULMOVES merged 2 commits into
mainfrom
docs/jacobian-counterexample-repro-audit

Conversation

@POWERFULMOVES

Copy link
Copy Markdown
Owner

Read-only audit of Pmoves-3bmalpoge-fable-jacobian-counterexample @ 645eb48b — a frozen verification package for a claimed counterexample to the Jacobian Conjecture in dimension 3.

Doc: pmoves/docs/audit/JACOBIAN_COUNTEREXAMPLE_REPRO_AUDIT_2026-08-10.md

Scope — please read this before the results

This establishes reproducibility only. It says nothing about whether the counterexample is mathematically correct. The Jacobian Conjecture is a famous open problem; settling a dimension-3 counterexample is expert peer review, not a CI run. assert d == -2 passing proves SymPy expanded a determinant to -2 — not that the surrounding argument establishes what the paper says.

The three manifests are unkeyed SHA-256. They prove you hold the author's bytes, not that the author vouched for them. A content hash names which bytes; only a signature names whose. This is stated at the top of the document too, deliberately — it's the same overstatement Codex caught on #2518.

No pushes to the fork, no issues opened upstream. Clones and API reads only.

Q1 — Does it reproduce? Partly.

Step Result
six checks (scripts/run_all_checks.py) PASS — exit 0, ~10 s
sha256sum -c frozen/referee_package-2026-07-20.sha256 PASS — exit 0
sha256sum -c MANIFEST.sha256 FAIL — exit 1, 34/35 OK
sha256sum -c REPOSITORY_MANIFEST.sha256 FAIL — exit 1, 51/52 OK

The checks reproduce; the integrity manifests do not. One stale entry, and it isn't a check: README.md was edited in e33ba19 after the manifests were generated in 04d0115, and neither was regenerated.

The consequence is bigger than the cause. The authors' own CI corroborates it — green at 04aa29c3, red at e33ba199 ("Update README.md"), red at HEAD. The failing step is Verify original frozen files, and because it fails, the step that runs the six checks is skipped:

Upstream CI has not executed the mathematics since 2026-07-20 — three weeks — masked by a stale hash of a README.

The run in this document may be the most recent successful execution of those checks anywhere.

Not a fork artifact: fork HEAD and upstream HEAD are the same commit, zero divergence.

Determinism, offline, dependencies

  • Deterministic — three runs, byte-identical stdout modulo the runner's timing line. The six checks import sympy and nothing else: no RNG, clock, env, file I/O, subprocess, network, and no floating point anywhere.
  • Offline — proven under docker run --network none, not inferred.
  • Unpinned transitive depsympy==1.14.0 is pinned; mpmath is not (resolves 1.3.0). No hash-pinned lockfile, so the dependency install is the only step in the pipeline with no integrity check at all.

Two portability defects, neither mathematical

  1. check_6_galois.py prints (U+2229). On a cp1252 Windows console that raises UnicodeEncodeError after the check's assertions have passed — so the runner reports a failure that isn't one. PYTHONIOENCODING=utf-8 makes the identical run exit 0. Ubuntu-only CI would never see it.
  2. No .gitattributes. A default Windows checkout CRLF-converts every text file, so the manifests fail on all 35/52 entries instead of the one real mismatch. This cost me a second clone to isolate — and it's why the first integrity result I got was wrong.

Q2 — Danger Room fixture? Adopt, as a pair.

Against SKILL_DANGER_ROOM_VERIFICATION_SPARK_2026-08-08.md: deterministic ✅, offline ✅, no GPU ✅ (completes under --memory=256m), ~10 s against a wall_s: 120 budget ✅, addressable ✅. Signed ❌ (unkeyed hashes, would need a CHIT wrapper).

The unusual part is 92 content-hashed artifacts, so a skill.verified.v1 receipt can name which bytes were verified — the T3 property the handoff describes, available without building anything.

But as shipped it's pure happy path, and the handoff is explicit: "a fixture that plants nothing verifies nothing" — acceptance criterion (5), the one its author says he'd cut last. So I tested convertibility rather than asserting it. Perturbing one coefficient (F3's 2*x3*x):

det J_F = 3*x**6*y**4*z + 9*x**5*y**5 + ... - 3*x*y - 3
AssertionError: FAIL: determinant is not the constant -2
exit 1

and the manifest catches the same mutation independently:

./checks/check_1_determinant.py: FAILED

Two independent negative controls — semantic and structural. Few fixtures offer either.

Recommend jacobian-counterexample-repro (expect 0) plus jacobian-counterexample-mutant (expect 1), pinned to 645eb48b, nodes: [any] — a CPU-floor fixture, wasted as SPARK-only, and never to be read as an inference fixture. The -repro suffix does load-bearing work: a receipt reading jacobian-counterexample: pass will be misread as a mathematical claim.

Findings

Six tabled; 1–5 are upstream's and were not reported there per the read-only boundary. Findings 1 and 2 are the ones worth telling the authors — their pipeline has silently not been running their own checks. That's an operator call.

License MIT, clean for PMOVES use.

Gate

python pmoves/tools/validate_command_anchors.py → 435 findings, 435 baselined, 0 new.

Worth noting it earned its keep here: it caught this doc citing the counterexample repo's make targets (make verify, make integrity) as if they were PMOVES's — which a reader could have copied and run in the wrong repo. Rewritten to name the underlying commands, which is also what actually ran.

🤖 Generated with Claude Code

…erexample package

Read-only audit of POWERFULMOVES/Pmoves-3bmalpoge-fable-jacobian-counterexample
@ 645eb48b, a frozen verification package for a claimed counterexample to
the Jacobian Conjecture in dimension 3.

SCOPE, stated at the top of the document and repeated here: this
establishes REPRODUCIBILITY ONLY. It says nothing about whether the
counterexample is mathematically correct — that is expert peer review,
not a CI run. The three manifests are UNKEYED sha256: they prove you hold
the author's bytes, not that the author vouched for them. A content hash
names which bytes; only a signature names whose.

Q1 — does it reproduce? Partly.
  - the six checks: PASS, exit 0, ~10s containerised, all six
  - the integrity manifests: FAIL, exit 1

  The manifest failure is real, upstream's, and three weeks old.
  README.md was edited in e33ba19 after the manifests were generated in
  04d0115 and neither was regenerated. 34/35 and 51/52 entries pass; the
  one mismatch is the README.

  The authors' own CI corroborates it: green at 04aa29c3, red at e33ba199
  ("Update README.md"), red at HEAD. The failing step is "Verify original
  frozen files" — and because it fails, the step that runs the six checks
  is SKIPPED. Upstream CI has not executed the mathematics since
  2026-07-20, masked by a stale hash of a README.

Determinism: three runs, byte-identical stdout modulo the timing line.
The six checks import sympy and nothing else — no RNG, clock, env, file
I/O, subprocess, or network, and no floating point anywhere.

Offline: proven under `docker run --network none`, not inferred.

Unpinned transitive dep: sympy==1.14.0 is pinned, mpmath is not (resolves
1.3.0). No hash-pinned lockfile, so the dependency install is the only
step with no integrity check at all.

Two portability defects found, neither affecting the mathematics:
  - check_6_galois.py prints U+2229; on a cp1252 Windows console this
    raises UnicodeEncodeError AFTER its assertions pass, so the runner
    reports a failure that is not one. Ubuntu-only CI would never see it.
  - no .gitattributes, so a default Windows checkout CRLF-converts every
    text file and the manifests fail on all 35/52 entries instead of the
    one real mismatch. Cost me a clone to isolate.

Q2 — Danger Room fixture? Adopt, as a PAIR, scoped repro-only.

  Deterministic, offline, no GPU, runs under --memory=256m, ~10s against
  a wall_s:120 budget, and unusually: 92 content-hashed artifacts, so a
  skill.verified.v1 receipt can name which bytes were verified.

  But as shipped it is pure happy path, and the handoff is explicit that
  "a fixture that plants nothing verifies nothing" — acceptance (5), the
  criterion its author says he would cut last. So I tested convertibility
  rather than asserting it: perturbing one coefficient (F3's 2*x -> 3*x)
  makes check 1 fail loudly with exit 1, AND the manifest independently
  flags the tampered file. Two independent negative controls.

  Recommend jacobian-counterexample-repro (expect 0) plus
  jacobian-counterexample-mutant (expect 1), pinned to 645eb48b,
  nodes:[any] — it is a CPU-floor fixture, wasted as SPARK-only, and must
  never be read as an inference fixture.

Six findings tabled, 1-5 upstream's. Not reported upstream per the
read-only boundary on this task; findings 1 and 2 are the ones worth
telling the authors about, and that is the operator's call.

License MIT, clean for PMOVES use.

Anchor ratchet: 435 findings, 435 baselined, 0 new — after it correctly
caught this doc citing the counterexample repo's make targets as if they
were PMOVES's. Rewritten to name the underlying commands, which is also
what actually ran.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

@POWERFULMOVES, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 27 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: cbeba168-24db-4957-810f-a3a6cd78e79e

📥 Commits

Reviewing files that changed from the base of the PR and between beeee21 and 068b3f5.

📒 Files selected for processing (1)
  • pmoves/docs/audit/JACOBIAN_COUNTEREXAMPLE_REPRO_AUDIT_2026-08-10.md

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.

@github-actions github-actions Bot added the docs Documentation label Aug 10, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 82d224b7cb

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread pmoves/docs/audit/JACOBIAN_COUNTEREXAMPLE_REPRO_AUDIT_2026-08-10.md Outdated
Comment thread pmoves/docs/audit/JACOBIAN_COUNTEREXAMPLE_REPRO_AUDIT_2026-08-10.md Outdated
…ceptance (2), not (5)

Two review findings, both valid, both places where the summary said more than the
body supported.

The scope paragraph claimed the audit establishes "that the files present hash to
the values the authors published" -- immediately contradicted by the audit's own
headline integrity finding two sections later. README.md reproduces in NEITHER
repository manifest (34 of 35, 51 of 52, that one file the single mismatch in
each); only the frozen referee package verifies clean. The paragraph most readers
carry away now says so, and separates the two halves: the checks reproduce, two of
the three integrity manifests do not.

The fixture recommendation labelled the planted-mutant variant as "the
acceptance-(5) half". It is acceptance (2). The handoff distinguishes them
precisely: (2) is "at least one fixture plants a falsifiable failure"; (5) is "A
deliberately broken SKILL fails ... show me a red artifact". Mutating the workload
proves the packaged assertion detects that mutation. Breaking the skill proves the
harness can say no. A skill that ignored this fixture entirely, or misclassified
its exit code, would pass the clean/mutant pair while failing exactly the property
(5) exists to establish -- so the pair must not be recorded as discharging it.

Neither change touches the scope statement that matters: this remains a
reproducibility audit that says nothing about mathematical correctness, and the
manifests remain unkeyed sha256 that name which bytes, not whose.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@POWERFULMOVES POWERFULMOVES added this to the eview milestone Aug 15, 2026
POWERFULMOVES added a commit that referenced this pull request Aug 15, 2026
Joins the existing audit lane (#2522 ruleset exposure, #2525 CI enforcement,
#2527 reproducibility) rather than opening a new one.

Six checks on B850 reported a confident result that did not match reality — a
0-byte exporter behind 200 OK, a launcher that WARNed and exec'd anyway, a
submodule audit measuring branch NAME instead of membership, a dmesg evicted by a
failing USB keyboard, a health checker that printed 'Health: 0.0%' for a bus it
never contacted, and this auditor reading an AttributeError as an ImportError and
writing it into a Makefile comment as fact.

Two shapes needing different remedies: three are mechanizable (a surface returning
success while the payload is absent/stale/malformed — assert content, not status),
three are not (a wrong question, unrelated noise destroying evidence, a misread).

Deliberately does NOT restate the verification discipline. .claude/agents/verifier.md
already specifies it — 'evidence before assertions ... capture verbatim ... state
UNVERIFIED (environment) rather than approximating' — and predates this session.
The documented gap is INVOCATION: that agent was invoked zero times during a session
in which it would have caught finding #6 immediately.

Records the mechanical traps, which are the genuinely new material: $() strips
trailing newlines (bit four times in one evening), nats-py connect_timeout does not
bound DNS, % and ${} in a systemd ExecStart are expanded by systemd, submodule branch
name != membership and recorded gitlink != working tree.

Notes that #2525's merge-gate finding has already been repaired (pytest_ratchet runs
all 264 test files; the gate exit 1s) — verified before relying on it for merges. The
audit lane is driving fixes ahead of its own PRs merging, which argues for landing it.

Proposes the #2527 package as a calibration fixture: #2525 had to hand-roll a
deliberately failing test to prove a check COULD fail; a frozen, hash-manifested,
network-isolated package with six deterministic checks of known outcome is the
standing form of that — a target whose answer is known, which every instrument in
the table lacked.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
POWERFULMOVES added a commit that referenced this pull request Aug 16, 2026
… wrong — plus the four silent handlers they led to (#2572)

* docs(audit): six instruments that reported confidently and were wrong

Joins the existing audit lane (#2522 ruleset exposure, #2525 CI enforcement,
#2527 reproducibility) rather than opening a new one.

Six checks on B850 reported a confident result that did not match reality — a
0-byte exporter behind 200 OK, a launcher that WARNed and exec'd anyway, a
submodule audit measuring branch NAME instead of membership, a dmesg evicted by a
failing USB keyboard, a health checker that printed 'Health: 0.0%' for a bus it
never contacted, and this auditor reading an AttributeError as an ImportError and
writing it into a Makefile comment as fact.

Two shapes needing different remedies: three are mechanizable (a surface returning
success while the payload is absent/stale/malformed — assert content, not status),
three are not (a wrong question, unrelated noise destroying evidence, a misread).

Deliberately does NOT restate the verification discipline. .claude/agents/verifier.md
already specifies it — 'evidence before assertions ... capture verbatim ... state
UNVERIFIED (environment) rather than approximating' — and predates this session.
The documented gap is INVOCATION: that agent was invoked zero times during a session
in which it would have caught finding #6 immediately.

Records the mechanical traps, which are the genuinely new material: $() strips
trailing newlines (bit four times in one evening), nats-py connect_timeout does not
bound DNS, % and ${} in a systemd ExecStart are expanded by systemd, submodule branch
name != membership and recorded gitlink != working tree.

Notes that #2525's merge-gate finding has already been repaired (pytest_ratchet runs
all 264 test files; the gate exit 1s) — verified before relying on it for merges. The
audit lane is driving fixes ahead of its own PRs merging, which argues for landing it.

Proposes the #2527 package as a calibration fixture: #2525 had to hand-roll a
deliberately failing test to prove a check COULD fail; a frozen, hash-manifested,
network-isolated package with six deterministic checks of known outcome is the
standing form of that — a target whose answer is known, which every instrument in
the table lacked.

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

* fix(instruments): four silent handlers that reported success outward

An AST sweep for finding #7's cause (soft-import + broad except returning a
plausible default) hit 157 sites. That number is itself the finding: torch,
faiss, sentence_transformers, numpy, tqdm, rich and psutil guards are all
CORRECT — the feature degrades and the caller is told. Narrowing to handlers
that are silent (no log, no raise, no warn) gave 60; to those in a path that
reports outward, 4.

The antipattern is not "a broad except on an import". It is a silent handler
in a path that reports outward.

Fixed (logging only — no behaviour or contract change, best-effort delivery
stays best-effort):

  sign_trail.py:77          substituted the whole agent identity in silence;
                            now warns to stderr naming the reason. It already
                            warned about a missing ALTER twenty lines below —
                            it could report a missing persona but not a
                            missing person.
  geometry.py:166,583       dropped every live subscriber and returned
                            {"ok": true}. Eight lines up, the persist logs and
                            raises HTTPException(500). Two disciplines, one
                            function.
  hf-mcp-server:853         hf.model.gguf.converted.v1 never published while
                            the caller was told everything worked.

Left alone deliberately, as counterexamples of correct degradation:
  hf-mcp-server:542         stamps "source":"catalog" vs "registry"
  chit_security.py:13       sets an explicit _CRYPTO_OK = False
  common/__init__.py:41     optional exports fail loudly at the call site

Verified: pmoves/tests/test_sign_trail.py 2 passed; unregistered agent-id now
warns, registered b850-claude still resolves to glyph U+232C / #DC2626 with no
warning; detector re-run shows only the two correct sites remaining.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* fix(geometry-bus-health): report the actual failure, and stop lying in JSON

Running the merged checker on B850 for the first time exposed two gaps in the
NOT MEASURED work itself:

1. The JSON branch still emitted "health_pct": 0.0 when the bus was never
   contacted. The human-readable branch had been fixed to refuse an unmeasured
   percentage; any dashboard consuming --json kept receiving the exact false
   negative. Now null, with an explicit "measured" flag. Fixed the instance,
   not the class — the same error this audit documents.

2. The failure report offered a list of GUESSES and no facts. The real cause
   was 'Authorization Violation' (the server requires credentials; this tool
   deliberately ships no credential-bearing default), but nats-py surfaces that
   through error_cb and keeps retrying, so the only exception reaching the
   caller was TimeoutError. The report therefore said "timed out" — reading as
   a network fault and sending the operator to check host and port, which were
   both already correct. An error_cb now captures what the server actually
   said, and the report leads with it before any guesses.

Verified:
  no creds -> measured=False, health_pct=null,
              error="timed out after 5s connecting to nats://localhost:4222
                     — last server error: Error: nats: 'Authorization Violation'"
  connected -> health_pct=4.2, error=null, no NOT MEASURED banner (synthetic
              BusHealth; success path formatting unchanged)

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* docs(audit): postscript — the fix for #5 was confidently wrong on first contact

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
@POWERFULMOVES
POWERFULMOVES merged commit 36cb986 into main Aug 18, 2026
28 of 30 checks passed
@POWERFULMOVES
POWERFULMOVES deleted the docs/jacobian-counterexample-repro-audit branch August 18, 2026 16:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

docs Documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant