-A Rust workspace audit that emits a signed, replayable receipt alongside its findings.
+
+
+
+
+
+
+
+
+
+
+### Reproducibility is the product.
+
+**A Rust workspace audit that emits a signed, replayable receipt alongside its findings.**
+Eighteen rules across three tiers, append-only identifiers, and a receipt that pins the
+commit, the manifest hash, the advisory snapshot, the pattern set and the toolchain.
+Nothing is fetched during a run. Verification is offline.
+
+[How it works](#how-it-works) · [The receipt](#what-the-receipt-attests) ·
+[Signing](#signing-whose-receipt-is-it) · [Rule set](#rule-set) · [Docs](#documentation)
+
+[](https://github.com/CueCrux/ProbeCrux/actions/workflows/ci.yml)
+[](https://github.com/CueCrux/ProbeCrux/actions/workflows/manifest-hash.yml)
+[](LICENCE)
+
+
+
**Status: in development, not released.** The library crates exist and are tested. There
is no published binary, no container image on any registry, and no receipt has been
@@ -24,6 +49,19 @@ set version, and the toolchain.
The rules live in [`probecrux.rules.yaml`](probecrux.rules.yaml). That file is the
product; the runner is plumbing.
+## How it works
+
+Every pin is resolved before a single rule runs. A receipt assembled from what a run
+happened to use is a description; one assembled from what a run was told to use is a
+constraint. The three tiers stay in separate sections all the way to the output, because
+a blended total lets an unreproducible finding inherit the credibility of a reproducible
+one.
+
+
+
+More detail: [`docs/architecture.md`](docs/architecture.md).
+
## Aims
**Reproducibility is the product.** Where reproducibility and coverage conflict,
@@ -57,6 +95,9 @@ ProbeCrux reports findings for triage. It does not issue assurance. It is not an
audit in any regulatory sense, it is not a legal opinion, and a passing run is not
evidence that a codebase is safe.
+
+
## Why a receipt at all
Retroactive provenance is not a thing. A report tells you what a tool found; it does
@@ -104,11 +145,11 @@ different answer by whoever controls the network, so ours does not fetch.
## Rule set
-Seventeen rules across three tiers.
+Eighteen rules across three tiers.
| Tier | Count | Reproducible | Ships |
|---|---|---|---|
-| `deterministic` | 14 | Byte-identical on re-run | v1 |
+| `deterministic` | 15 | Byte-identical on re-run | v1 |
| `heuristic` | 2 | Only with thresholds pinned | v2 |
| `advisory` | 1 | No — model-assisted | v2 |
diff --git a/docs/Images/readme/CueCrux-Arc-Loop-White.png b/docs/Images/readme/CueCrux-Arc-Loop-White.png
new file mode 100644
index 0000000..59fce78
Binary files /dev/null and b/docs/Images/readme/CueCrux-Arc-Loop-White.png differ
diff --git a/docs/Images/readme/CueCrux-Arc-Loop.png b/docs/Images/readme/CueCrux-Arc-Loop.png
new file mode 100644
index 0000000..4bcf858
Binary files /dev/null and b/docs/Images/readme/CueCrux-Arc-Loop.png differ
diff --git a/docs/Images/readme/how-it-works.svg b/docs/Images/readme/how-it-works.svg
new file mode 100644
index 0000000..8a9f806
--- /dev/null
+++ b/docs/Images/readme/how-it-works.svg
@@ -0,0 +1,59 @@
+
+
diff --git a/docs/Images/readme/probecrux-dark.svg b/docs/Images/readme/probecrux-dark.svg
new file mode 100644
index 0000000..e1c6328
--- /dev/null
+++ b/docs/Images/readme/probecrux-dark.svg
@@ -0,0 +1,11 @@
+
diff --git a/docs/Images/readme/probecrux-light.svg b/docs/Images/readme/probecrux-light.svg
new file mode 100644
index 0000000..9afdbbf
--- /dev/null
+++ b/docs/Images/readme/probecrux-light.svg
@@ -0,0 +1,11 @@
+
diff --git a/docs/Images/readme/receipt.svg b/docs/Images/readme/receipt.svg
new file mode 100644
index 0000000..28643d3
--- /dev/null
+++ b/docs/Images/readme/receipt.svg
@@ -0,0 +1,34 @@
+
+
diff --git a/docs/architecture.md b/docs/architecture.md
index bc9e23e..7d04436 100644
--- a/docs/architecture.md
+++ b/docs/architecture.md
@@ -111,7 +111,7 @@ the format moves.
## v1 scope
-Fourteen rules are marked `deterministic`. Not all of them ship in the first release —
+Fifteen rules are marked `deterministic`. Not all of them ship in the first release —
they differ by an order of magnitude in implementation cost, and the release is bounded
by what can be built well rather than by what shares a tier.