
Security News
arXiv Is Rate Limiting Authors Following a Flood of AI Slop Submissions
arXiv now limits authors to two submissions a month as AI slop overwhelms moderators, delays good papers, and sparks debate over applying the limit to everyone.
prooflane-receipts
Advanced tools
Validate create-cmp evidence receipts: inputs-hash recompute, receipt-vs-tree binding, freshness, and execution-plausibility. Dependency-free ESM — the single source of truth vendored into every generated project's qa/lib/ and consumed by the hosted recei
Validate create-cmp evidence receipts. Plain ESM, zero dependencies, Node ≥ 18, fully offline.
When an AI coding agent (or a person) claims a change is verified, that claim
is usually just text. A create-cmp project makes it a checkable artifact: its
verify lane writes qa/evidence/latest.json — the verdict, every step's
PASS/FAIL/SKIP with durations, and an inputs.hash: a sha256 over the
content of every file that could have changed the verdict. The surface is
fixed and public (VERIFIED_SURFACE): the app sources, the specs, the lane
itself, and the Gradle build files.
Binding to content instead of a commit SHA buys two properties at once:
This package is the predicate for that check, published standalone so anything — a CI job, a bot reviewing a PR, a script over a cloned repo — can validate a receipt with the same logic the project itself uses.
npm install prooflane-receipts
Generated projects don't install it: they carry byte-identical vendored
copies of these two modules in qa/lib/, so node qa/receipt-check.mjs runs
air-gapped with no dependencies. This package is the source of truth those
copies are synced from (parity is test-pinned in the create-cmp repo).
import {
readReceipt,
computeInputsHash,
evaluateReceipt,
validateReceiptForTree,
} from "prooflane-receipts";
// The local predicate — what a generated project's Stop hook and CI run:
const receipt = readReceipt(projectRoot); // qa/evidence/latest.json, or null
const result = evaluateReceipt(receipt, () => computeInputsHash(projectRoot));
// { valid: true, reason: "receipt is valid — PASS, attesting profile: local", ... }
// After editing a source file without re-running the lane:
// { valid: false, reason: "source changed since the receipt — re-run the lane (attesting profile: local)" }
// The hosted composite — the same predicate plus service-grade checks, for a
// receipt fetched from somewhere other than your own working tree:
const hosted = validateReceiptForTree({ root: projectRoot });
// hosted.status: "valid" | "invalid" | "missing"
What each layer checks:
evaluateReceipt — binding present, verdict not FAIL, recomputed hash
matches, verdict is PASS. Its reason strings are the exact refusals a
generated project prints. A project checks this and checkDoneEvidence
against itself, never the hosted-only checks below: a receipt you just
generated is definitionally fresh.checkDoneEvidence(receipt, { laneCommand?, legacySkips? }) — the
receipts a project's own done-check refuses as proof of done, each by a named
reason: mode: "fast"; stage or profile nightly; stage or profile
smoke; any step SKIPped with skipKind: "environment". A structure SKIP
is allowed, and so is a SKIP with no skipKind — unless the caller passes a
profile's pre-skipKind fallback, legacySkips: { names, reasons } (step
names, reason substrings). This library holds no stack's vocabulary: a caller
without a profile gets no legacy fallback.validateReceiptForTree runs checkDoneEvidence (check id
done-evidence; pass legacySkips through if you hold them), so a hosted
validator refuses what the Stop hook refuses — except a pre-skipKind
receipt's (0.19.0 and earlier) environmental SKIP, which only a caller
holding the profile's legacySkips can recognise — and adds the
hosted-only checks:
generatedAt within a window (default 30 days;
checkFreshness);checkExecutionPlausibility). A
"PASS" that took 0 ms is the tell for a replayed cache or a hand-written
verdict.status: "missing", distinct from
"invalid" — not carrying the harness is not a failure.listSkippedSteps — every SKIP with its verbatim reason. SKIPs are
surfaced, never hidden and never punished: green-with-gaps must stay
visible.DEFAULT_POLICY ({ maxAgeMs, minExecutedMs }) is overridable per
call: validateReceiptForTree({ root, policy: { maxAgeMs } }).Full export list (also importable from the two submodules,
prooflane-receipts/inputs-hash and prooflane-receipts/receipt-validate):
computeInputsHash, VERIFIED_SURFACE, RECEIPT_REL_PATH, readReceipt,
evaluateReceipt, DEFAULT_POLICY, checkFreshness,
checkExecutionPlausibility, listSkippedSteps, checkDoneEvidence,
DEFAULT_LANE_COMMAND, validateReceiptForTree.
prooflane-harness,
vendored into every generated project as qa/.VERIFIED_SURFACE is create-cmp's
project shape (composeApp/, specs/, qa/, the root Gradle files). This
validates create-cmp receipts specifically.root already on disk
and reads synchronously. Getting the right tree onto disk (say, a PR's head
commit) is the caller's job.The receipt format is open and this validator is MIT so anyone can check any receipt offline. Why binding is by content hash rather than commit SHA: ADR-0005.
FAQs
Validate create-cmp evidence receipts: inputs-hash recompute, receipt-vs-tree binding, freshness, and execution-plausibility. Dependency-free ESM — the single source of truth vendored into every generated project's qa/lib/ and consumed by the hosted recei
We found that prooflane-receipts demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
arXiv now limits authors to two submissions a month as AI slop overwhelms moderators, delays good papers, and sparks debate over applying the limit to everyone.

Research
/Security News
A new GhostAction wave hits hundreds of GitHub repos, expanding CI/CD secret theft to cloud and AI credentials in source code and git history.

Research
/Security News
Tensorlake npm SDK version 0.5.144 was compromised in a ChainDrop / Shai-Hulud attack, delivering credential-stealing malware.