nhi.sgit.ai / packs / static-publishing

Static Publishing, `sgit vault serve`, and the Publishing Matrix

A vault publishes to a folder: encrypted objects plus a small, declared plaintext surface (loader, cover, manifest, and — only when the vault is deliberately public — the read key). That folder is readable by a browser through the loader and by sgit clone over ordinary GETs, from any HTTP host or a local folder, with no server and no auth. sgit vault serve exists because browsers give local files an opaque origin — the one case everybody tries first, double-clicking index.html, cannot work without it.

Origin. Authored by an Architect-review agent in the SGit-AI__CLI repo (branch claude/sgit-architect-agent-review-3tl5ti), 17 August 2026; revised 18–19 August through maintainer review — three added documents (publish output, API docs, asset origin), the no-target publish decision, and an executed end-to-end tabletop exercise. Status: build spec, ready to implement — Phases 1 and 3 are unblocked. Captured 19 August 2026 at commit 2cedd9a: the raw sources under src/ are byte-identical to that commit's tree — verify with a diff against it. Each document below has a reader page with the same apparatus as the site's documents.

The documents

DocumentRole
00 — The executable dev briefThe brief a developer agent runs from: grounding reads, the six rules, per-phase tasks, definition of done
01 — ArchitectureThe transport seam, publish-as-projection, the published layout, the manifest contract
02 — Commands & UXThe command surface and every CLI / loader mockup — intended user-facing output, word for word
03 — FlowsSequence diagrams: publish → serve → read, the static clone, and the fork round trip
04 — Invariants & testsSix invariants asserted everywhere + fourteen test cells, collapsed from 240 combinations
05 — Implementation phasesP1–P7 (plus P4b, published API docs) with file lists, acceptance criteria and risk; start with P1 + P3
06 — Decisions & evidenceTen open decisions for the maintainer, and the measured evidence that re-scoped the spec
07 — The publish outputRevised 19 Aug: publish takes no target — one fixed folder, target-agnostic, and the override question resolved at deployment
08 — Published API docsAdded 18 Aug from the maintainer's proposal: openapi.json generated from the manifest, and Swagger UI as CDN-pinned or bundled
09 — A first-party asset originAdded 19 Aug from the maintainer's static.sgit.ai proposal: yes to the asset site, no to Pages, and never on the reader's critical path
10 — Tabletop: one repo carrying the key, the files, and the vaultAn executed end-to-end tabletop exercise: the maintainer's scenario run for real with the shipped CLI, producing four live findings

Why it is on this site

Two of this pack's measured findings connect straight to claims this site publishes: custody without access requires a manifest (every filename derives from the read key, so a keyless client cannot name a single file — sharpening the PKI section's custody row), and object ids hash ciphertext with random IVs, so a fork is unlinkable — relevant to the attribution question. The published-folder model is also the substrate the serialised pull request workflow rides on.

The pack README

📄 Pack overview · README.md · rendered from the raw markdown (the source of truth)