Updates

What changed on sgit and on this site, as it happens — one entry per story rather than per release. The version log is the complete technical record; this is the readable one.

Follow along: RSS · JSON. Every entry links to the release that carries it.

2026-08-27

The directory answers questions now — and the default tier needs no key v0.2.47

chatllmnetworkvaults

Two things: the network directory grew a chat box, and a second conference vault went up.

Ask it which of the nineteen sites is yours. Type "I have to sign off a risk" and it points at risks.sgit.ai — and shows you the words it matched on. It runs in your browser against the catalogue generated from the same files the cards and the table come from, so it cannot drift from the directory underneath it.

One fix worth recording. The matcher first sent "I need to cite a regulation precisely" to wardley-maps, because it only knew each site's own vocabulary — standards.sgit.ai says provision, and the reader typed regulation. Site entries now carry an aliases field holding the words readers actually arrive with. Five real questions, five correct first hits; nonsense still returns nothing rather than a confident wrong answer.

Also live: Scaling Threat Modeling with Semantic Knowledge Graphs — ThreatModCon 2025, Barcelona. Eleven linked threat models from customer to compute instance, so a vulnerability in a line of code traces up to the revenue it risks. 51 nodes, 179 threats, five interactive views and five Wardley walkthroughs, all running offline in the vault. Two of its data files are invalid JSON upstream and are repaired here, with the repair proved rather than asserted: the only differences are four stray brackets removed and one ], added, and the multiset of content lines is unchanged.

2026-08-26

Nineteen sibling sites, and a way to find the one that is yours v0.2.44

networknavigationrefactor

The network was four sites. It is nineteen — seventeen live, two with the repository and subdomain in place but nothing published yet. That is no longer a footnote on this site; it is where most of the writing now lives.

Two sites appear with no screenshot and no link to a live page: skills.sgit.ai and influences.sgit.ai have DNS and a repository but GitHub Pages has not published them. They are listed as not published yet, pointing at their repositories, rather than quietly left out — the same reason a missing tag is preferable to a missing page.

This is the refactor it looks like from the outside. Material that would have made this site sprawl has a better home; this page is the index back into it. Adding the twentieth site is writing one markdown file.

Articles get a place on the homepage, and a band gets its width back v0.2.45

articleshomepagelayout

Three changes, one of them a bug I shipped yesterday.

Also: influences.sgit.ai went live and is now a full entry with its screenshot — "where the thinking came from", an influence map in three tiers with a changelog recording when a source moves between them. That leaves eighteen of nineteen live; skills.sgit.ai still has DNS and a repository and nothing published, and is still listed as such rather than hidden.

A conference keynote as a vault — the deck, its exports, and the research it came from v0.2.46

vaultspresentationprovenance

AI vs. AI — Black Hat Europe 2025 joins the published vaults. It is the twentieth, and the first that is a talk rather than a document set or an app.

The argument is worth the click on its own. It opens by conceding the ground — security's four pillars, all broken — then lands on four publicly documented outages that were not attacks: a timing bug that wiped a global database, a config inconsistency that detonated worldwide, a routine change that halted traffic, and a faulty update that bricked 8.5 million machines. The turn is one line: "These weren't sophisticated attacks — they were minor glitches that cascaded. Now imagine if they were deliberate."

Several of its later slides describe things this site now demonstrates rather than proposes — assume compromise, contain blast radius, version control everything, identity graphs for least privilege. Those threads have their own homes in the network now.

Audited clean before publishing: no sgit credentials, no third-party API keys, no private keys, no emails, no client named. The organisations that appear — AWS, Azure, Cloudflare, CrowdStrike — are cited for public incidents, which is what the slide is about. The deck uses Black Hat Europe's official speaker template because it is a talk that was given there; the page says plainly that it is published as the speaker's own material, not as anything endorsed by or affiliated with the conference.

2026-08-25

Six vaults published, three held back — and the check that nearly missed one v0.2.43

vaultsauditsecurity

Nine vaults were submitted for publication. Six are now live, in the gallery. Three were held, and the third one is the reason this post exists.

Two were held for carrying credentials. One contained two live vault keys in plaintext — including its own write key, which would have turned a published read key into full write access. The other is a private working log that was never meant to be public.

The third is the one worth recording. A vault whose app reads an LLM key from a file scored clean on the first credential pass — and then a screenshot of it showed a chip reading key: vault key.json. The file held a live OpenRouter API key. The scan had looked for vault-key shapes, sgit_ prefixes, private-key blocks and the string api_key; the field was named openrouter_key, so nothing matched.

That is a real gap, not a near miss reframed as a win. The credential tooling here was built to protect sgit credentials and does that well; it had no opinion about third-party API keys, which are just as costly to leak and far more common. A broader sweep — OpenAI, Anthropic, GitHub, AWS, Google, Slack and JWT shapes, with placeholders filtered out — now runs over every candidate, and it found exactly one other hit: a forged alg:none token in the pentest vault, which is the finding it documents.

The lesson is the cheap one to state and the easy one to skip: a scan that has never surprised you is not evidence that you are clean. It was a screenshot, not the scanner, that caught this.

2026-08-22

The ninth published vault — four apps in one tree, and a reader that asked for nothing it did not need v0.2.40

vaultsgraphspermissions

VoiceDebrief joins the published vaults. Four apps in one encrypted vault, lifting meaning out of text — from fictional voice notes to Article 9(2) of the EU AI Act — into typed semantic graphs.

Written up from the vault and the release that published it; the page itself is the primary record.

Ten screenshots, captured by driving the live vault from that published read key — no mock-ups.

It was written and pushed a day before it appeared here: the tag gate had the deploy blocked.

An ordinary commit should not be able to take the site down v0.2.40

cideployrelease

Two good commits landed on dev after v0.2.39 and sgit.ai served neither for a day. Nothing was wrong with either of them. The CI tag gate failed, and the deploy is gated on the tag gate.

The asymmetry is the point, and it is written into the workflow so the next person changing it knows why: a missing tag is a bookkeeping gap, a blocked deploy is an outage.

Checked before shipping rather than after, by extracting the job's own script and running it over five cases in a throwaway clone: the exact commit that failed today now exits 0, a proper release tags, and subject/SITE_VERSION disagreement, a reused version and a skipped minor all still fail — each with a message that names what is actually wrong.

There was a quieter second consequence, and it is the one worth remembering. Those commits went to git only, so the vault remote never received them: sgit status showed all fifteen new files as uncommitted. Both stores are meant to move together, which is exactly why CI does not author commits itself — a CI-written commit would exist on the git side alone. This release carries them across.

2026-08-21

2026-08-20

The audit that stopped a publication — and the vault we built instead v0.2.37

vaultssecuritypublishing

A vault arrived for publication: the EU AI Act as a citable graph — 113 articles, 1,523 nodes, 1,944 edges, every node traced to hash-verified source bytes. Good demo, obvious yes.

It did not ship. The audit step — open every file with the exact credential you are about to publish — found a live vault key in plaintext, inside a handoff document, granting write access to a different vault. Publishing the read key would have handed that away to anyone who read the page.

One rule got verified rather than assumed. The vault's Graph REPL is an LLM chat, and its code looks for an OpenRouter key at /key.json inside the vault before falling back to device storage — so a shipped key would be an open tab on somebody else's budget. There is no key.json, confirmed in the read-key clone. Bring your own key; nothing metered ships.

The rule that caught all of this came from the Risk Graph Explorer vault's own PUBLIC.md, not from us. It has now paid for itself.

A third sibling site — one that says, at the top of every page, that it does not exist v0.2.38

networkedgesecurity

sg-sentinel.sgit.ai joins the network. It is a design for an app-coupled edge guard that replaces rented AWS WAF plus CloudWatch and Firehose with a layer you own — and its status pill reads NOT BUILT where its siblings read MVP DRAFT.

It is the third site here to publish a design before the thing exists — after pki.sgit.ai's four registry rules. Same wager: publishing the design now is cheap, claiming it afterwards is impossible.

Adding it took one markdown file and three screenshots. The renderer gained pipe-table support on the way, since the six-rule core wanted a table and got a paragraph of vertical bars instead.

2026-08-19

The first two sibling sites, with screenshots v0.2.36

networkidentitypki

Two focused sites now run on *.sgit.ai subdomains, and a network section covers both — what each argues, why it is relevant here, and screenshots of the real pages.

Both connect directly to work here. Read keys and append lanes are credentials with a provably bounded closure, which is the nhi problem stated as a mechanism; and an append lane is owner-configured, which is pki's rule 1 already shipped in another corner of the system.

More subdomains are coming. Adding one to this site is now writing a single markdown file and capturing its screenshots — the index, the cards and the page are all derived.

2026-08-18

Verify the fix pack, not just the bug v0.2.34

processpkiaccuracy

The documentation gap above arrived as a well-built fix pack from the SG/API team: a gap analysis, code-verified source material, and a draft of the missing page. The most valuable line in it was its own instruction to check the claims before publishing. Three did not survive.

Two more corrections came from running the CLI rather than reading about it: sgit pki export emits a JSON bundle of two PEM blocks, not the .pem file the draft redirected into — so the draft's sha256sum public-key.pem derivation of a lane address is not well defined — and keygen requires a passphrase, which no draft step mentioned.

The whole exchange, including what we got wrong, is on the briefs page.

The API reference we did not have v0.2.34

apimessagingdocs

An agent was asked how to send an encrypted message between two vaults. It read this site and could not find out. The capability had shipped months earlier.

The diagnosis was uncomfortable and simple: we documented both halves and never wrote the sentence that joins them. The transport was on one page as sg.append, the crypto on another as sgit pki, and neither referenced the other. There was also no HTTP API reference anywhere — awkward for a project whose whole argument is that the API is the surface.

The one step that is not wired end to end is labelled PROPOSED with an interim recipe, rather than quietly documented as working.

2026-08-17

Three walkthroughs, read back as documents v0.2.32

vaultsvideorisk-graph-explorer

A video is invisible to a search engine, to llms-full.txt, and to any agent reading this site as documentation. It is also full of "this guy here" and "look at this" — pointing that a transcript cannot resolve.

So the Risk Graph Explorer walkthroughs now carry the player at the top and the same session read back underneath: fifteen moments, each a timestamp that deep-links into the video, the frame the screen was showing then, and what is actually happening in it.

The seven views page covers the same vault view by view.

Printing stopped costing every reader v0.2.31

printperformance

Save a walkthrough page as a PDF and it used to come out wrong in two ways: the site navigation painted across the middle of page 2, translucent, with the prose showing through it — and any screenshot you had not scrolled past exported as a blank gap.

The first was a sticky header: Chrome paints a sticky box once, wherever it happens to fall in the paginated flow. The second was subtler. Screenshots load lazily, and loading="lazy" defers the decode, not just the download — so an image far below the viewport sat there fetched, at zero width, and printed as nothing.

Also in this release: @page margins, colour preservation so the amber/green distinction survives, break-inside rules so a caption is never stranded on the page after its picture, and per-release cache-busting on assets — because for ten minutes after every release, returning readers were running new HTML against old CSS.

Green does not mean live v0.2.33

cideployprocess

Two consecutive releases pushed cleanly, reported success, and never reached the site. A human noticed on a phone, forty minutes later, because the version badge still showed the old number.

The release script verified that both remotes were in sync — and they were. The failure was in a job neither remote knows about: GitHub Pages could not download actions/configure-pages, got a 429 Too Many Requests, and the deploy died in "Set up job" before running a single step. Validation passed. Tagging passed. The site served a two-release-old page.

There is a longer account of this one in Green does not mean live.