Skip to content

docs(security): freeze external audit handoff - #13

Merged
everest-an merged 2 commits into
mainfrom
security/external-audit-handoff
Aug 3, 2026
Merged

everest-an merged 2 commits into
mainfrom
security/external-audit-handoff

Conversation

@XiaoHai67890

Copy link
Copy Markdown
Collaborator

Status

External audit handoff complete; qualifying independent report still pending.

This PR packages the frozen G4 candidate for an external Solidity reviewer. It does not claim that the external audit or G4 release gate is complete.

Change

  • Adds a single reviewer entry point covering the Registry, threat model, tests, deployment evidence, and residual risks.
  • Adds a machine-readable handoff manifest with 17 SHA-256-pinned evidence files.
  • Adds security:handoff and four adversarial tests for source drift, missing evidence, and legacy-deployment misrepresentation.
  • Integrates handoff validation into the G4 CI workflow and existing security commands.

Frozen target

  • Source: af5a75fb2db532fd5603554083d8895a825c2de2
  • Tree: f8d66277123391ea54de3f53842256e17e2a497e
  • Scope SHA-256: c9db7d27957c86386d8842687a2d009c0ca03bc864307e88cfed0ee25f3ae9bf
  • Risk SHA-256: 307a52eb0bf512aea25565bf604d92fc6b1b2d64eb910595568a5f0c04aa6019
  • In-scope Solidity/deployment files changed by this PR: none

Verification

  • pnpm security:handoff
  • pnpm security:scope
  • 14/14 security gate tests
  • pnpm check
  • 51 Foundry tests, 0 failed; 256 invariant runs / 128,000 calls
  • Clean-checkout conformance passed at afcb2bceee1155ed4ee1958a30b8e1dca6d00108
  • pnpm security:rc correctly remains blocked by the missing independent report

Remaining external requirement

A reviewer-controlled public report, exact report bytes, completed external-review.json, finding dispositions, residual-risk mapping, and full-commit attestation are still required. The duplicate comments on issue #11 are recorded as provisional and are not accepted as completion evidence.

Stacked on #10 so this PR contains only the external-audit handoff task.

@everest-an
everest-an force-pushed the security/g4-security-ready-rc branch from 31f4fbb to 463155c Compare August 2, 2026 22:46
@everest-an
everest-an changed the base branch from security/g4-security-ready-rc to main August 2, 2026 23:11
@everest-an
everest-an force-pushed the security/external-audit-handoff branch from afcb2bc to c8dbcd8 Compare August 3, 2026 02:10
…the checkout

Same correction already applied to the G4 scope gate. verifyPinnedFile and
verifyAnchor each hashed a pinned file twice: once from the working tree and
once from the evidence revision. Only the second is meaningful — that is the
revision a reviewer fetches. Reading the working tree makes the result depend on
the checkout's line-ending normalisation, so on any CRLF checkout every pinned
text file "changed" and `pnpm security:handoff` failed with
"Scope manifest current bytes changed" while git itself reported no difference
at all. Since security:handoff is wired into security:scope, and that into
`pnpm check`, the whole check was red for Windows contributors for a reason that
had nothing to do with the handoff.

verifyAnchor had a second, worse version of the same problem: it asserted the
digest of the committed bytes and then returned `JSON.parse(currentBytes)` — the
working-tree read. It verified one artifact and handed back another. If they ever
diverged, every downstream assertion would be made against bytes whose digest was
never checked. It now parses the bytes it verified.

The path-existence check is kept: a manifest naming a deleted file is a defect,
not drift.

Tests: 15/15 pass. The three that were failing all traced to this one early exit —
two of them were asserting later error messages they never reached.
@everest-an
everest-an force-pushed the security/external-audit-handoff branch from c8dbcd8 to b49781a Compare August 3, 2026 02:34
@everest-an
everest-an merged commit d1a78d0 into main Aug 3, 2026
8 checks passed
@everest-an
everest-an deleted the security/external-audit-handoff branch August 3, 2026 02:52
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.

2 participants