diff --git a/.github/workflows/python-wire-runtime.yml b/.github/workflows/python-wire-runtime.yml index 588d744e..cb161457 100644 --- a/.github/workflows/python-wire-runtime.yml +++ b/.github/workflows/python-wire-runtime.yml @@ -32,6 +32,8 @@ on: - "runtime/evidencePlacement.js" - "scripts/evidence-placement.mjs" - "docs/EVIDENCE_PLACEMENT.md" + - "docs/resilience-lab.html" + - "test/resilience-lab.test.js" - "scripts/check-evidence-shards-python.mjs" - "scripts/check-evidence-shards-vector.mjs" - "independent/vectors/shards-v1/**" @@ -84,6 +86,8 @@ on: - "runtime/evidencePlacement.js" - "scripts/evidence-placement.mjs" - "docs/EVIDENCE_PLACEMENT.md" + - "docs/resilience-lab.html" + - "test/resilience-lab.test.js" - "scripts/check-evidence-shards-python.mjs" - "scripts/check-evidence-shards-vector.mjs" - "independent/vectors/shards-v1/**" diff --git a/README.md b/README.md index 29bfd3be..b4eec154 100644 --- a/README.md +++ b/README.md @@ -81,6 +81,7 @@ For the smallest deterministic reproduction, start with: - [Repair a cold storage handoff](docs/EVIDENCE_SHARDS.md) — reconstruct canonical handoff bytes from any two of three separately stored shares, then recheck external trust. - [Rehearse every recovery pair](docs/EVIDENCE_DRILL.md) — get a machine-readable readiness report before a damaged share becomes a loss. - [Simulate storage failures](docs/EVIDENCE_PLACEMENT.md) — reveal declared shared sites, infrastructure, and custodians that can defeat two-of-three recovery. +- [Explore the visual Resilience Lab](https://aruintelligence.github.io/aml-core/resilience-lab.html) — change common dependencies and download a placement manifest for the verified CLI drill. - [Undeniable proof demo](demos/undeniable-proof/) - [Benchmarking protocol](BENCHMARKING.md) - [Interoperability challenge](INTEROPERABILITY.md) diff --git a/docs/EVIDENCE_PLACEMENT.md b/docs/EVIDENCE_PLACEMENT.md index 2d0bac7c..645e7c9c 100644 --- a/docs/EVIDENCE_PLACEMENT.md +++ b/docs/EVIDENCE_PLACEMENT.md @@ -2,6 +2,8 @@ The three-pair [recovery drill](EVIDENCE_DRILL.md) checks the files. It cannot tell whether two copies sit in the same building, rely on the same storage provider, or are controlled by one custodian. `aml-evidence-placement-assessment/1` adds an **operator-declared** failure-domain simulation. It removes every share with a matching label, one domain at a time, and verifies that the remaining shares still recover the same handoff under the separate trust policy. +Try the [visual Resilience Lab](resilience-lab.html) to explore shared dependencies and download a manifest. The browser page runs a topology-only simulation with no share files or policy; use the commands below for the full verified assessment. + Create a local JSON manifest with exactly three indexed entries: ```json diff --git a/docs/index.html b/docs/index.html index c54dbe08..cb0e9851 100644 --- a/docs/index.html +++ b/docs/index.html @@ -26,7 +26,7 @@
@@ -68,7 +68,7 @@

Built for the next interface. And the next.

04 / RECOVERVerify across runtimesOpen a cold archive offline. Python checks capsules, signatures, and witnesses with external trust.
CAPSULE v1 · SHA-256 + SHA-512 · STRICT JSONExplore the preservation contract ↗
-

Read the append-only renewal contract ↗ · Pack an offline archive ↗ · Review versioned handoff ↗ · Repair from two shares ↗

+

Read the append-only renewal contract ↗ · Pack an offline archive ↗ · Review versioned handoff ↗ · Repair from two shares ↗ · Model common storage failures ↗

Integrity alone does not establish truth, independent validation, trusted identity, or a guarantee of long-term cryptographic security.

diff --git a/docs/resilience-lab.html b/docs/resilience-lab.html new file mode 100644 index 00000000..e749d1eb --- /dev/null +++ b/docs/resilience-lab.html @@ -0,0 +1,94 @@ + + + + + + + + ĀML™ Resilience Lab · Design for recovery + + + +
+ +
Cold storage · Three shares · One failure at a time

Design for recovery.

Three files can all be valid and still fail together. Change the declared dependencies below to see what remains when one site, infrastructure system, or custodian becomes unavailable.

Planning simulation only. It assumes all three share files are valid. It does not read or upload your evidence, verify physical placement, or replace the cryptographic recovery drill.
+
TRY A SCENARIO
+
+
00Data share

Use identical labels where the dependency is truly shared.

+
01Data share

A different filename on the same system is still one infrastructure domain.

+
02Parity share

Any two distinct healthy shares reconstruct the handoff.

+
+
Declared topology

All single-domain losses leave two shares

Failure rehearsal

Each row removes every share with the same declared label. A recovery path needs at least two surviving shares.

+

Take the plan to the actual copies

Download this placement manifest, then run the JavaScript or independent Python assessment against three retrieved share files and your separately held trusted policy. The lab alone cannot mark storage ready.

+

The full assessment recomputes the three-pair drill under an external accepted head and tests recovery after each declared loss. Keep the trust policy outside the shares. A passing result remains a project-authored local check, not independent custody proof.

+
ĀML™ · ĀRU Intelligence Inc. · Open-source research prototype. No information is sent from this page.
+
+ + + diff --git a/test/resilience-lab.test.js b/test/resilience-lab.test.js new file mode 100644 index 00000000..952a8cc1 --- /dev/null +++ b/test/resilience-lab.test.js @@ -0,0 +1,37 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import fs from "node:fs"; +import vm from "node:vm"; + +const html = fs.readFileSync(new URL("../docs/resilience-lab.html", import.meta.url), "utf8"); +const script = html.match(/