We tighten the covenant with three practical instruments:
- Attestation bundles (Merkle) — roll up many attestations into a single root with on‑demand membership proofs.
- Signed CRL with time‑boxed reinstatement — revoke cleanly, forgive deliberately.
- Ticket accumulators — let a witness prove “I used N tickets” without revealing which (private tag → server‑signed count).
✅ Fresh artifacts
- Step 30 wrapper server — Download
SHA‑256:f4029af2c31fb3e82493386fa384092dc579a79e9c54c993ab1feae2d0de9392 - WordPress block (paste‑ready) — Download
Step 30 wraps Step 28 and includes the Step‑29‑style features it needs (CRL + ticket spend), so you don’t get stuck even if Step 29 wasn’t deployed separately. All prior endpoints still work.
What’s new — precisely
1) 🌳 Attestation bundles (Merkle)
Bundle recent quorum attestations (from manual & auto logs) and build a Merkle tree over their canonical digests.
Endpoints
POST /admin/quorum/bundles/roll?token=ADMIN123&since=ISO&until=ISO&limit=500→ persist a bundle file ataudit/quorum_bundles/.
Returns:{"root":"<hex>","count":42,"since":169...,"until":169...,"generated":"...Z", "leaves":["<digest>", "..."], "levels":[["<leaf1>", "..."],["<level1-hash>", "..."]], "signature":{"alg":"Ed25519","kid":"<sha16>","sig":"<b64url>","ts":"...Z"}}GET /quorum/bundles→ list known bundle roots.GET /quorum/bundle?since=...&until=...&limit=...→ ad‑hoc (not persisted) bundle.GET /quorum/bundle/proof?root=<root>&digest=<att_digest>→ membership proof (siblings + sides).
Roots are signed with your active Ed25519 feed key (Step 24 keyring) when available; HS256 fallback if not.
2) 🛑 Signed CRL (revocations) + reinstatement
A first‑class CRL with valid_from, valid_until, and entry list; the whole payload is signed.
Endpoints
GET /quorum/crl— current signed CRL JSON.POST /admin/quorum/attest/revoke?token=ADMIN123&digest=<sha256>&reason=...— add an entry and re‑sign.POST /admin/quorum/attest/reinstate?token=ADMIN123&digest=<sha256>&until=ISO— temporary reinstatement.GET /quorum/attestations?n=100— recent attestations with status:active | revoked | reinstated | expired.
Files
audit/quorum_crl.json— signed CRL.audit/quorum_reinst.json— reinstatement windows.
3) 🎟️ Ticket spend + accumulators (private tags)
We add the spend ledger and a private accumulator:
- Spend a witness ticket (Step 28):
POST /observer/ticket/spendwith{"ticket":{...},"proof":{...},"tag":"<secret>"}
→ verifies proof, atomically marks theticketdigest as spent, logs onlysha256(tag).- Replays return 409.
- Check status:
GET /observer/ticket/status?digest=<sha256(ticket_body)>→{spent, count_total}.
- Accumulate (prove how many, not which):
POST /observer/ticket/accumulatewith{"tag":"<secret>","since":"...","until":"..."}
→ returns a signed certificate:{"cert":{"type":"ticket_accumulator","tag_commit":"<sha256(tag|v1)>", "count":N,"since":169...,"until":169...,"ts":"...Z"}, "proof":{"alg":"Ed25519","kid":"<sha16>","sig":"<b64url>","ts":"...Z"}}- Third parties verify the signature and accept the count without learning which tickets you used.
Files
audit/tickets_spent.jsonl— append‑only spent ledger.
Android / Termux run‑book (Step 30)
python solveforce_phone_thirty.py \
--discovery-dod-enable \
--discovery-dod-source https://directory1.example.com/solveforce/peers.json \
--discovery-dod-jwks https://directory1.example.com/jwks.json \
--quorum-auto-enable \
--quorum-policy-file /sdcard/solveforce/quorum.policies.json \
--quorum-interval-sec 300 \
--attest-enable \
--attest-url https://your-site.tld/wp-json/solveforce/v1/attest \
--attest-header "Authorization: Bearer <WP_TOKEN>" \
--alarm-enable \
--alarm-config-file /sdcard/solveforce/alarms.json \
--host 0.0.0.0 --port 8080 \
--plugins-dir ~/solveforce/plugins \
--auth-mode protected \
--auth-token READER1:reader \
--allow-admin --admin-token ADMIN123 \
--schema-ed25519-secret-file /sdcard/solveforce/schema.ed25519.seed \
--schema-signing-secret-file /sdcard/solveforce/schema.hmac.key \
--audit-dir ./audit \
--mirror-enable \
--mirror-target-url https://your-site.tld/wp-json/solveforce/v1/notary \
--mirror-header "Authorization: Bearer <WP_TOKEN>" \
--allow-query-token --open-ui
“Show me” commands
A) Roll a bundle
SINCE=$(date -u -d '24 hours ago' +%Y-%m-%dT%H:%M:%SZ)
UNTIL=$(date -u +%Y-%m-%dT%H:%M:%SZ)
curl -s -X POST "http://127.0.0.1:8080/admin/quorum/bundles/roll?token=ADMIN123&since=$SINCE&until=$UNTIL&limit=500" | jq .
curl -s 'http://127.0.0.1:8080/quorum/bundles' | jq .
# Get a proof for one attestation digest:
curl -s "http://127.0.0.1:8080/quorum/bundle/proof?root=<ROOT>&digest=<ATT_DIGEST>" | jq .
B) Revoke and reinstate
# Revoke an attestation digest
curl -s -X POST "http://127.0.0.1:8080/admin/quorum/attest/revoke?token=ADMIN123&digest=<DIGEST>&reason=test" | jq .
# List with statuses
curl -s 'http://127.0.0.1:8080/quorum/attestations?n=30' | jq .
# Temporary reinstatement
UNTIL=$(date -u -d '+2 hours' +%Y-%m-%dT%H:%M:%SZ)
curl -s -X POST "http://127.0.0.1:8080/admin/quorum/attest/reinstate?token=ADMIN123&digest=<DIGEST>&until=$UNTIL" | jq .
C) Accumulate (private)
# Spend a ticket with a private tag (get ticket+proof from Step 28 first)
curl -s -X POST 'http://127.0.0.1:8080/observer/ticket/spend' \
-H 'Content-Type: application/json' \
-d '{"ticket":{...},"proof":{...},"tag":"my-secret-bucket"}' | jq .
# Get a signed accumulator for that tag
SINCE=$(date -u -d '7 days ago' +%Y-%m-%dT%H:%M:%SZ)
UNTIL=$(date -u +%Y-%m-%dT%H:%M:%SZ)
curl -s -X POST 'http://127.0.0.1:8080/observer/ticket/accumulate' \
-H 'Content-Type: application/json' \
-d "{\"tag\":\"my-secret-bucket\",\"since\":\"$SINCE\",\"until\":\"$UNTIL\"}" | jq .
WordPress — Step 30 (public page block)
Use step30_wordpress.md.
It documents Bundles (Merkle), CRL + reinstatement, and Ticket Accumulators concisely for your audience.
Logos Codex — recursive temperance
- Many → One → Proof.We bind a chorus of attestations into a single root you can carry.
- Error → Remedy → Record.Revocation is firm; reinstatement is merciful; both are signed.
- Use → Count → Privacy.What matters is how many, not which. The system knows the difference—and so will history.
Say the word when you’re ready for Step Thirty‑One. We can add bundle roll‑ups into weekly/monthly ledgers, key‑pinning on bundles, and cross‑domain accumulator settlement (merge counts from multiple issuers under quorum).
Key terms in plain language
Open a term for a concise explanation of language used on this page.
Broadband
A general term for always-on, high-speed Internet access. Broadband can be delivered over fiber, cable, DSL, fixed wireless, cellular, or satellite networks.
Cloud Computing
Computing resources—such as applications, servers, storage, or databases—delivered from remote infrastructure and scaled as requirements change.
Cybersecurity
The practices and controls used to protect identities, devices, networks, applications, and data from unauthorized access, disruption, or manipulation.
Identity and Access Management (IAM)
The systems and policies that determine who a user is, what resources they may access, and how that access is authenticated and reviewed.
API
An application programming interface is a defined way for software systems to exchange data or request functions from one another.
Artificial Intelligence (AI)
Software designed to perform tasks involving prediction, classification, generation, reasoning, or decision support. Business use still requires clear data, governance, security, and human accountability.