Update README.md
Browse files
README.md
CHANGED
|
@@ -18,6 +18,24 @@ It’s designed to be boringly audit-friendly: **canonical JSON hashing**, optio
|
|
| 18 |
|
| 19 |
---
|
| 20 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 21 |
## What this Space does
|
| 22 |
|
| 23 |
### ✅ Records a tamper-evident timeline
|
|
@@ -33,7 +51,6 @@ Each action becomes an **event** (one JSON object per line) written to `flightlo
|
|
| 33 |
- `note`
|
| 34 |
|
| 35 |
Every event includes:
|
| 36 |
-
|
| 37 |
- `seq` (monotonic step number)
|
| 38 |
- `ts_utc` (UTC timestamp)
|
| 39 |
- `prev_event_hash_sha256` (links to previous event)
|
|
@@ -43,17 +60,16 @@ Every event includes:
|
|
| 43 |
If any event is edited, removed, or reordered, verification fails.
|
| 44 |
|
| 45 |
### ✅ Concurrency-safe writes (public Space reality)
|
| 46 |
-
Multiple users can click around at the same time. The log
|
| 47 |
|
| 48 |
### ✅ Refuses writes after finalisation
|
| 49 |
-
Once a session records `session_end`, the recorder **refuses any further writes** to that session. No silent
|
| 50 |
|
| 51 |
### ✅ Verifies sessions end-to-end
|
| 52 |
-
The verifier recomputes hashes and confirms the chain is intact. Optionally, it can require a valid signature on every event
|
| 53 |
|
| 54 |
### ✅ Exports proof bundles
|
| 55 |
Exports `rft_flight_bundle_<session_id>.zip` containing:
|
| 56 |
-
|
| 57 |
- `<session_id>_events.jsonl` (the full session timeline)
|
| 58 |
- `<session_id>_verify_report.txt` (human-readable verification report)
|
| 59 |
|
|
@@ -62,11 +78,10 @@ Upload a bundle and verify it locally. Optionally store PASSed events into your
|
|
| 62 |
|
| 63 |
---
|
| 64 |
|
| 65 |
-
##
|
| 66 |
|
| 67 |
### 1) Generate keys (optional)
|
| 68 |
Go to **Keys** → **Generate Keypair**.
|
| 69 |
-
|
| 70 |
- **Private key** signs events (keep it private).
|
| 71 |
- **Public key** verifies signatures (safe to share).
|
| 72 |
|
|
@@ -95,8 +110,8 @@ Enable **Require signatures** only if you signed every event you expect to verif
|
|
| 95 |
|
| 96 |
### 6) Finalise + Export
|
| 97 |
Go to **Finalise + Export**:
|
| 98 |
-
- **Finalise session** appends `session_end` with a **session anchor
|
| 99 |
-
- **Export session bundle** produces the ZIP proof bundle
|
| 100 |
|
| 101 |
### 7) Import bundle (third-party verification)
|
| 102 |
Go to **Import Bundle**, upload `rft_flight_bundle_*.zip`, and verify.
|
|
@@ -124,6 +139,7 @@ If you want to retain verified sessions, tick **Store imported events** (only st
|
|
| 124 |
Session anchor (what finalisation commits to)
|
| 125 |
|
| 126 |
Finalisation creates an anchor that describes the pre-end chain (so it doesn’t depend on itself):
|
|
|
|
| 127 |
{
|
| 128 |
"spec": "rft-flight-session-root-v0",
|
| 129 |
"session_id": "…",
|
|
@@ -133,6 +149,7 @@ Finalisation creates an anchor that describes the pre-end chain (so it doesn’t
|
|
| 133 |
"root_hash_sha256": "…",
|
| 134 |
"signature_ed25519": "…"
|
| 135 |
}
|
|
|
|
| 136 |
Brutal tests (included)
|
| 137 |
|
| 138 |
This repo includes brutal_test.py with two hard tests:
|
|
@@ -145,6 +162,7 @@ Run locally:
|
|
| 145 |
|
| 146 |
python brutal_test.py
|
| 147 |
|
|
|
|
| 148 |
Expected:
|
| 149 |
|
| 150 |
both tests PASS
|
|
@@ -169,7 +187,5 @@ brutal_test.py — stress + tamper tests
|
|
| 169 |
|
| 170 |
flightlog.jsonl — append-only log (created at runtime)
|
| 171 |
|
| 172 |
-
licence
|
| 173 |
-
|
| 174 |
-
::contentReference[oaicite:0]{index=0}
|
| 175 |
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
|
|
|
| 18 |
|
| 19 |
---
|
| 20 |
|
| 21 |
+
## Quickstart (recommended)
|
| 22 |
+
|
| 23 |
+
If you don’t want to guess what to click:
|
| 24 |
+
|
| 25 |
+
1. Open **Quickstart (1-click)**
|
| 26 |
+
2. (Optional) tick **Sign everything (Ed25519) + generate fresh keys**
|
| 27 |
+
3. Click **Run Quickstart Demo Now**
|
| 28 |
+
|
| 29 |
+
That will automatically:
|
| 30 |
+
- start a session
|
| 31 |
+
- append a realistic event sequence
|
| 32 |
+
- verify the chain
|
| 33 |
+
- finalise the session (creates an anchor)
|
| 34 |
+
- export a ZIP proof bundle
|
| 35 |
+
- fan out the `session_id` into the other tabs so you can immediately inspect Timeline / Verify / Export
|
| 36 |
+
|
| 37 |
+
---
|
| 38 |
+
|
| 39 |
## What this Space does
|
| 40 |
|
| 41 |
### ✅ Records a tamper-evident timeline
|
|
|
|
| 51 |
- `note`
|
| 52 |
|
| 53 |
Every event includes:
|
|
|
|
| 54 |
- `seq` (monotonic step number)
|
| 55 |
- `ts_utc` (UTC timestamp)
|
| 56 |
- `prev_event_hash_sha256` (links to previous event)
|
|
|
|
| 60 |
If any event is edited, removed, or reordered, verification fails.
|
| 61 |
|
| 62 |
### ✅ Concurrency-safe writes (public Space reality)
|
| 63 |
+
Multiple users can click around at the same time. The log uses a **file lock** so “two tabs / two users” don’t corrupt the chain.
|
| 64 |
|
| 65 |
### ✅ Refuses writes after finalisation
|
| 66 |
+
Once a session records `session_end`, the recorder **refuses any further writes** to that session. No silent post-hoc edits.
|
| 67 |
|
| 68 |
### ✅ Verifies sessions end-to-end
|
| 69 |
+
The verifier recomputes hashes and confirms the chain is intact. Optionally, it can require a valid signature on every event.
|
| 70 |
|
| 71 |
### ✅ Exports proof bundles
|
| 72 |
Exports `rft_flight_bundle_<session_id>.zip` containing:
|
|
|
|
| 73 |
- `<session_id>_events.jsonl` (the full session timeline)
|
| 74 |
- `<session_id>_verify_report.txt` (human-readable verification report)
|
| 75 |
|
|
|
|
| 78 |
|
| 79 |
---
|
| 80 |
|
| 81 |
+
## Manual use (step-by-step)
|
| 82 |
|
| 83 |
### 1) Generate keys (optional)
|
| 84 |
Go to **Keys** → **Generate Keypair**.
|
|
|
|
| 85 |
- **Private key** signs events (keep it private).
|
| 86 |
- **Public key** verifies signatures (safe to share).
|
| 87 |
|
|
|
|
| 110 |
|
| 111 |
### 6) Finalise + Export
|
| 112 |
Go to **Finalise + Export**:
|
| 113 |
+
- **Finalise session** appends `session_end` with a **session anchor**
|
| 114 |
+
- **Export session bundle** produces the ZIP proof bundle
|
| 115 |
|
| 116 |
### 7) Import bundle (third-party verification)
|
| 117 |
Go to **Import Bundle**, upload `rft_flight_bundle_*.zip`, and verify.
|
|
|
|
| 139 |
Session anchor (what finalisation commits to)
|
| 140 |
|
| 141 |
Finalisation creates an anchor that describes the pre-end chain (so it doesn’t depend on itself):
|
| 142 |
+
|
| 143 |
{
|
| 144 |
"spec": "rft-flight-session-root-v0",
|
| 145 |
"session_id": "…",
|
|
|
|
| 149 |
"root_hash_sha256": "…",
|
| 150 |
"signature_ed25519": "…"
|
| 151 |
}
|
| 152 |
+
|
| 153 |
Brutal tests (included)
|
| 154 |
|
| 155 |
This repo includes brutal_test.py with two hard tests:
|
|
|
|
| 162 |
|
| 163 |
python brutal_test.py
|
| 164 |
|
| 165 |
+
|
| 166 |
Expected:
|
| 167 |
|
| 168 |
both tests PASS
|
|
|
|
| 187 |
|
| 188 |
flightlog.jsonl — append-only log (created at runtime)
|
| 189 |
|
| 190 |
+
LICENCE — licence file
|
|
|
|
|
|
|
| 191 |
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|