Walkthroughs¶
Operator click-paths for the PFC console and config SPA. Screenshots are
captured by scripts/capture_ui.py (Playwright) against a local admin
with PFC_REQUIRE_AUTH=1.
This is not a HIPAA/SOC 2/ISO certificate.
Vocabulary: passthrough means destination in the clear, body ciphertext; lookup_id is the sender handle; NATS is the untrusted broker; inspect officers are share names, not Google accounts.
Console login (separate from Peergos Drive)¶
Capability. Create a console session. Drive login cannot unwrap cubes.
Steps.
Open https://pfc.georgelambert.org — username, password, TOTP.
First account becomes admin. Sign up, then enroll TOTP (authenticator URL).
Confirm a 6-digit code. Session cookie
pfc_sess.
Why. PFC_REQUIRE_AUTH=1. HIPAA APIs require totp_ok.
Outcome. Nav: Cubes, Catalog, Users, Inspect, Audit.
Storage. PFC_DATA UserStore JSON. Not Peergos cryptree.
Cubes, catalog, copy+stamp¶
Capability. Workspace cube <user>-ws holds library cards (Client,
Author, Subject, Title). Identity-preserving copy keeps original timestamp
and SHA-256.
Steps.
Create cube (hipaa lab stub or internal). Author must not be an inspect officer.
Append text or drop a file. Catalog prompt: keep cube defaults or edit this item.
Copy object into dest cube; stamp scope hash/public/sealed/files.
Comments/memos/links append the cube chain; unregistered hashes flush to
verae.ts.batchabout every 15s.
Why. First registered SHA-256 wins. Known hashes are not restamped.
Outcome. Object chips; workspace catalog search.
Storage. cubes/<id>/ chain JSONL, catalog/card.json, hash registry.
Pin via verae.storage.pin; replicate via verae.storage.replicate.
Users¶
Capability. Admin creates officer accounts for k-of-n inspect.
Steps. Add username/password/role. Officers enroll their own TOTP.
Why. Two-officer presence. Author is not an officer.
Storage. UserStore under PFC_DATA.
Inspect (k-of-n)¶
Capability. Viewer-only reveal after k officers present. Log-before-reveal.
Steps.
Officer A Start inspect → join code (no session yet).
Officer B Join with the code →
session_id.View object by sha256. Close ends the session.
Why. Shamir shares; Google SSO does not decrypt cubes.
Outcome. Audit events. HIPAA file bytes stay gated without a session.
Storage. Pending inspect JSON + audit log on the cube.
Audit¶
Capability. List access events for a cube (no payload bodies).
Steps. Enter cube id, Load.
Storage. Audit JSONL on the cube.
Config SPA (unsigned preview only)¶
Capability. Build a pfc.json preview. Load requires an Ed25519
signed wrapper. Admin POST /v1/admin/config signs and appends
admin-history (prev + new + diff).
Steps. Fill host / leaf hub / NATS URL / profile / min_ok. Preview JSON.
Download. Sign via console or secure_messaging.signed_config.sign.
Why. Unsigned files are rejected.
Secure message success vs failure¶
Success. verae.sm.send with to + ciphertext → ack
accepted=true + lookup_id. Sender cannot reopen ct.
Failure. Missing to or empty ct → SM-MISSING-TO /
SM-EMPTY-CT. Publishes verae.sm.log.summary (codes only),
verae.sm.error (Network Error Bundle), verae.sm.dead.
ct_sender is sender-only; ct_system is the ops bounce report.