riskmandate.ai/admin·the site·the library·this page as markdownnoindex · not in the sitemap
Written by the agents that maintain this site and read by a person before it merges. Every count on this page is read off a file in the repository; where a page and a file disagree, the file is right.

admin / agents / onboarding/01-map.md

The map

An onboarding document, read by every agent. The source is .claude/onboarding/01-map.md; this page is that file, rendered.

One line per thing. Paths are from the repository root; site pages are also live at https://riskmandate.ai/<file> with a markdown twin at <file>.md.

Documents in the repository (docs/)

FileWhat it isRead when
docs/how-the-website-works.mdHow a page is put together, the shared modules, generated files, the pipeline, the tests. Written at v1.0.0 with an addendum for what came aftertouching chrome, modules, menu, CI
docs/briefs/direction__abp-at-the-centre.md11 Sept. The ABP becomes the primitive the site sells; the label/record/prescription stack; naming rules; what is honest to sayany ABP work; the naming rules live here
docs/briefs/direction__abp-as-a-graph-and-stakeholder-views.md15 Sept. Behaviours are addressable nodes; barrier per path; views per audience; projections regenerable from a shipped prompt. The build orderbuilding the graph, views, projections
docs/briefs/review__ten-hard-questions-and-what-the-site-should-say.md9 Oct. The interview on sgit.ai checked against the site: the home page says we enforce, the insurance page states design as shipped, level 1 is £5 in three places; the proposed home page at /home-next.html and nine other proposalsthe home page, insurance, pricing, positioning
docs/briefs/direction__one-rule-a-stranger-can-paste-is-the-way-in.md7 Oct. The path from unknown to customer breaks before anyone tries anything; a page per rule (do you want your agent to do this?), one line and a paragraph, before and after on our own deployment, never or ask first, a versioned rule base under site/rules/; tasks T15–T17onboarding, Try it, anything aimed at a stranger
docs/briefs/architecture__the-stories-vault-and-the-three-way-workflow.md26 Sept. The stories vault: the lead, the studio model and this site's agent as publisher, one sgit vault in the Email-FS-lite protocol, the seed under stories-vault/seed/, the board derived from issues and mailrooms, the birth in commands, the scheduled check-in and what it may not decidethe stories, the vault, a check-in, the board
docs/briefs/direction__owasp-agent-behaviour-policies.md8 Oct. The ABP goes to OWASP with RiskMandate as sponsor: what was decided, what was built, what the research changed (leadership is personal; the material is abp.sgit.ai v0.12.1; no CC BY file; ACS), and the decisions for the leadsthe OWASP section, the move, the record
docs/briefs/merch__funny-designs-for-people-who-hold-the-risk.md25 Sept. A brief for an image model: shirts a stranger buys; the brand kit, the print rules, forty-two taglines in six families with the joke explained, twelve concepts, the prompt to paste; handed over by its console twin's linkmaking merchandise, or any use of the mark off the site
docs/briefs/architecture__vaults-in-vaults-for-behaviour-policies.md15 Sept. The renderer lives once in an app vault; every application vault carries a loader; the sub-vault link formattouching the vault app, the loader, or _app/
docs/briefs/review__first-measured-abp-n8n-owner-key.md15 Sept. The first measured grant read against the model; where the write-up and the vocabulary disagree; two asks for the model sitewriting a measured vault; understanding evidence tiers
docs/briefs/research__connector-grants-open-questions.md15 Sept. Five connector vaults at the documented tier; the brief for the research agent; the queue of five moreresearching a vault; adding a connector vault
docs/briefs/vaults__what-to-add-to-the-site.md9 Sept. Which of the 26 public sgit vaults belong on the site and why the rest do notadding a demo
docs/briefs/review__design-studio-mvps-vs-the-selling-workflow.md14 Sept. The storefront concepts read against the selling workflowstorefront, checkout, pricing
docs/briefs/summit__lisbon-2026-strategy.md9 Sept, partly superseded. Event logistics, the graph vault, the two dayssummit pages
docs/briefs/summit__lisbon-2026-messaging.md11 Sept. What to say in the room now there is something to sellsummit pages, booth materials
docs/briefs/architecture__structure-content-decoupling.mdJuly. Structure in the repo, content in vaults, decrypted in the browser/scenarios/, content vaults
docs/briefs/implementation__scenarios-pilot.mdJuly. The pilot as built at site/scenarios//scenarios/
docs/briefs/process__agent-onboarding-and-parallel-work.md15 Sept. Why this folder exists and the rules for agents working in parallelyou are reading its product
docs/briefs/direction__use-case-driven-policies-and-the-prompt-workflow.md15 Sept. A policy per use case (Voice Debrief first); the £500 level is a prompt the customer runs, in seven steps; what the store and the site must both saypricing, the store, use-case vaults
docs/briefs/review__vault-pages-vs-the-vault.md15 Sept. The vault pages read against the vault: the two host frames, and why the site should stop deploying the vault (T09)touching the vault pages or site/vaults/
docs/briefs/workflow__buying-a-policy-for-claude-on-gmail.md16 Sept. The purchase workflow made concrete for one customer: the steps, the vault mapped, the settings, the prompts, what a measured run taughtdelivering a level-3 or level-4 policy; any connector vault
docs/briefs/workflow__abp-vaults-for-people-we-know.md24 Sept. A vault for everybody the lead talks to, made by a new agent from a zip: three vaults (app, keys, one per person), the leak gate, the feedback loop. The pack is packs/dist/abp-for-people-pack.zipchanging the pack, the person-vault format, or anything the pack copies from the site
docs/briefs/direction__mvp-vault-and-the-reading-app.md16 Sept. oc433z3m as the first MVP vault: the store's mock-up read for the vault's left navigation and positioning; the feature list per level; the dual licence as LICENCE.md + a licence block; the reading app redrawn; four decisions for the leadthe renderer, the vault page, the licence
docs/briefs/direction__consequences-assets-and-the-vault-as-a-website.md16 Sept. A grant is a union of capabilities; the reader needs consequences, explicit, each with the asset that makes it real; routes out counted; standards as mini-graphs in the vault; Who are you? in the app (T11, T12; amends T04)the grant, the consequence layer, the audiences
docs/briefs/direction__the-grant-has-storeys-and-the-vault-opens-on-the-audience.md16 Sept. The grant has storeys: what the credential permits, what the client exposes, what practice allows, then the consequences; latent capability is the gap between the first two; every barrier gains who holds it and whether it moves without you; the vault opens on Executive · Operator · Riskthe grant model, the reading app, any connector vault
docs/marketing/linkedin-company-page.mdEvery field of the company page, ready to pasteLinkedIn

Brief naming: <kind>__<slug>.md with kind one of direction, architecture, implementation, review, research, summit, vaults, process. Header block: date, author @website-agent, trigger, what it reads against. Numbered sections. End with what it does not settle, or decisions needed.

The site (site/), by family

FamilyFilesSource of truth
Rulessite/rules/ (unlisted, linked first from try-it.html): index.html, method.html, one page per rule, sets/<agent>.md, and the data <slug>.jsongenerated by build-rules.mjs from the JSON, the vocabulary and the vault grants; edit the JSON, never the pages
Review pageshome-diff.html (private): the home page now and proposed, side by side, slider and four steps, with A/B/C/D questions and feedback sent encrypted to the review vault ao0lynta (lane file assets/review/lane.json, read with scripts/review/read-feedback.mjs and REVIEW_KEY); screenshots and marks in assets/review/home-diff/, generated by scripts/review/capture-home-diff.mjs (run with a local server). The page's code is assets/review/{envelope,identity,review}.js and review.css; its body is scripts/review/home-diff/body.html, built with python3 scripts/review/flat-page.py scripts/review/home-diff/page.json. Each browser signs its sends with its own key; scripts/review/reply.mjs publishes a note only that browser can read (assets/review/replies/). The drain rebuilds the vault's dashboard, a vault app (scripts/review/build-dashboard.mjs, sources in scripts/review/dashboard/). engagements.html (private): the proposed £5,000 and £25,000 engagementshand-assembled from the pricing page's chrome; recapture after either home page changes
LinkedIn and the newsroomlinkedin.html (private): the LinkedIn desk, every item in order, copied as LinkedIn takes it; source scripts/linkedin/items.mjs, pictures scripts/linkedin/capture.mjs into assets/linkedin/, page scripts/linkedin/build.mjs (--check, --todo). newsroom.html: the newsroom's articles on the ABP retold, from scripts/site/newsroom/items.mjs05-workflows.md, Publish on LinkedIn
SHarness, the film and the demosecure-harness.html: the open-source secure harness that holds an ABP's rules in the customer's environment, built by scripts/review/flat-page.py scripts/site/secure-harness/page.json. The film Reach, Mandate, Gap (Silvio Switha) in assets/media/film/ (MP4 + WebM + poster), on the home page at #film. walkthrough.html (private): the twenty-minute demo, from scripts/site/walkthrough/. The deck: assets/deck/positioning/index.html, hand-written, N for notesbrief handover__the-customers-site-sharness-the-film-and-web-summit.md
Homeindex.htmlhand-authored. Leads with the ABP; the ladder says we are on the first step
The problemplug, acceptable, acceptance, grant-gaphand-authored, older voice
Insurance, the answer pageinsure-a-program.htmlhand-authored, 18 Sept 2026; every claim dated and linked to its source; the AIUC blueprint (July 2026) and RAND RR-A5130-1 (16 Sept 2026) are the two anchors
The modelabp.html (the ABP page), how-it-works, agents (llms.txt etc.), ramm, scenarios, staticshand-authored
Behaviour policiesagent-behaviour-policy.html (the library, top-level), agent-behaviour-policy-next.html (asked for, vote, suggest), abp-vault-<slug>.html ×15generated by build-abp-pages.mjs from site/vaults/index.json and each vault's data. abp-vaults.html and abp/ redirect
Vaultssite/vaults/<slug>/ ×15 pushed + claude-gmail-connector built and unpushed, _template/, _app/; instances (a customer's copy, anonymised) under vaults-instances/, built with ABP_VAULT_DIR=… and never deployedinputs: vault.json, data/grant.json, data/mandate.json, data/scenarios.json, data/vocabulary/. Everything else generated by build-abp-vault.mjs
Live demosdemos.html, demo-*.html ×6hand-authored; each embeds an sgit vault with a public read key
Lablab.html (in More), lab-*.html ×7 (unlisted, linked from lab.html)hand-authored; every meaningful state cut as a dated PDF in assets/lab/, registered in lab-editions.json
The teamsite/team/ (in Behaviour policies): index.html, publisher.html, studio.html, their twins, and the data team.json, publisher.json, studio.jsongenerated by build-team.mjs. Our own agents' ABPs, the three tiers (public, private, secret), the surfaces, the workflow from private to public, the controls and tooling in place and not. The publisher's role for a clean session is .claude/agents/publisher.md; the check-in prompt is .claude/commands/publisher-check-in.md
Storiessite/stories/ (in Reading, with Articles): index.html, <slug>.html, their twins, images/, and the data cast.json, <slug>.json, board.jsongenerated by build-stories.mjs from the JSON; the old flat addresses (stories.html, story-*.html) are redirect stubs. Brief D29; architecture__the-stories-vault-…
OWASP (superseded)site/owasp/ (off the menu since v1.40.1, every page carries a superseded banner from project.json → superseded; the proposal moved to the Open Security Summit, open-security-summit.html): index.html, charter, riskmandate, contributions, ecosystem, lessons, application, tracker, their twins; the record project.json; contribution-inventory.csvgenerated by build-owasp.mjs from docs/owasp/pages/<slug>.html (bodies with <!--owasp:name--> placeholders) and project.json. Briefs D30, D31; direction__owasp-agent-behaviour-policies.md
Try ittry-it.html (top-level, between Pricing and Articles)hand-authored. The free step below the store's ladder: the four-step, thirteen-prompt workflow a person runs in their own assistant, hosted at abp.sgit.ai/gmail. Says before the reader finds out that the result is a self report. direction__the-next-phase-is-users.md
Articlesarticles.html (top-level), article-<slug>.html (unlisted, group Articles)hand-authored, scaffolded with new-page.mjs from insure-a-program.html. One argument per page, built on one deployment shape's behaviour policy and linking to it; every claim sourced and dated; the queue of unwritten ones is listed on the index, marked not written; article-abp-for-chatgpt-dots.html (30 Sept: OpenAI's dots as the case for an ABP, documented from eight vendor pages)
Summitsummit.html, summit-booth.html (private)hand-authored
Morelab (the Lab moved here from the top level in v1.19.0), questions, briefs (the register page), work, work-abp-power-user, library, partners, business-cases and owasp-graph (Insurance group; cases are business-case-<slug>, commercial drafts private; the OWASP graph is site/business-case/owasp/graph.json), uk-support (the UK support register, rendered from uk-support.json), feedback, brand, admin/ (a link entry: a folder, not a page)hand-authored
Pricingpricing.htmlhand-authored; the store's four levels, each linked to store.sgit.ai/d/t<n>/; the level-3 prompt workflow; the plus-one-thing rule and a definition of done per level (v1.19.1)
After paymentpaid-t1.html … paid-t4.html (unlisted, noindex)hand-authored (scaffolded with new-page.mjs); one per level, the payment link's success address: what arrives and when, what you do next, how the key reaches you, the definition of done, who to write to. paid-t1.html is the download: its zip manifest (/*__DIST__*/) is stamped by build-abp-pages.mjs from site/vaults/*/dist/. after-payment.html (in More) is the debrief for the store team: the link contract and what the store has to do. Brief D9
Homeindex.html: hand-authored since v1.36.0 from a React mock the lead sent, ported to plain HTML/CSS/script under .rmx, in the shared chrome; the model section carries the previous home page's blocks; home-next.html is a redirect stubthe four counts and the template count are held true by the tests; the pitch-deck renderer reads the gap figure from it
About, the deckabout.html (in More, hand-assembled from the early-access donor): the company, the two founders as the investor deck states them, the deck read slide by slide; site/assets/deck/riskmandate-investor-deck-v3.pdf (the file; only its footers changed, Confidential to CC BY 4.0) and site/assets/deck/investor-v3/slide-NN.webp (18 slides, 1600×900)the bios are quoted from the deck, dated; the fourteen-slide deck rendered from the site is a different file, riskmandate-deck.pdf
Agents, contact, early accessagents/index.html (generated by build-agents.mjs from .well-known/sgit-agents.json), contact.html, early-access.html (hand-authored, forms over the comms vault's site lane), scripts/intake/ (drain, configure, README)the contact file is the source; the vault key is never in a file
Recordsversions.html + versions/index.json + versions/<v>.md; briefs.html + briefs-register.json + assets/briefs/; lab-editions.json; vaults/index.jsonappend-only. Never rewrite an entry
Machine-readablellms.txt, llms-full.txt, .well-known/agent-content.json, sitemap.xml, robots.txt, 404.html, every <page>.mdgenerated by generate.mjs (the manifest and full text are partly hand-written and restamped)
Scenarios pilotsite/scenarios/reads vault dm42qcaw in the browser; needs localhost
Admin consolesite/admin/** (53 pages + twins) and site/admin/console.cssgenerated by build-admin.mjs from docs/, .claude/, the brief register, the state file, the catalogue and each vault's data; public, noindex, not in pages.json, its own rail. admin.html is a redirect stub. Adopted from store.sgit.ai/admin/

site/pages.json lists every page with its menu group and section. unlisted = real page, not in the menu. private = also out of the sitemap, llms.txt and the twins, and noindex. The header is three entries and one button (Product · How it works · Open source; Try it free), since v1.40.3 and a partner's review: a new page goes into a section of one of the three, never a fourth entry, and a test fails if it does. Desk pages (walkthrough, LinkedIn desk, home drafts, engagements) and Admin are off the menu; Admin is in every footer.

Scripts (scripts/site/)

ScriptDoesIdempotentIn CI
generate.mjs [--check]twins, sitemap, llms.txt, robots, 404, versions.md, menu injectionyesyes
release.mjs <v> "<title>"notes stub, index.json entry, restamp every page, riskmandate_ai/version, pyproject.tomlno — once per versionno
new-page.mjs <name> --title --desc [--css] [--body] [--donor]scaffold a page with the current chromeonceno
build-abp-vault.mjs <slug> [--check]derive one vault from its inputs; deterministic zip; refuses if it cannot reproduce an upstream deltayesyes, every vault
build-abp-pages.mjs [--check]the library page and one page per vault from the catalogueyesyes
render-abp-vault-pdf.mjsthe PDF in a vault's dist/ (Playwright)yesno
add-licence-chrome.mjs [--check]GitHub link in the header, licence line in the footer, every pageyesyes
sync-modules.mjs [--check]push scripts/site/modules/*.js into every page that inlines ityesyes
build-uk-support.mjs [--check]render site/uk-support.json into uk-support.html; refuses a row without an official URL, and a closure without the phrase that says soyesyes
build-business-cases.mjs [--check]the business-cases section and one page per case, computed from site/business-case/ (the RiskGraph model copy, cases/*.json, categories.json); refuses a change without a basis, a vendor basis without quote, URL and date, an expectation that claims to retire anything, and a model file that no longer matches its digestyesyes
build-interview-pages.mjs [--check]interview pages from site/interviews/<slug>.json (files starting _ are templates): six parts in a fixed order, a prompt that copies exactly, nothing loaded or sentyesyes
scripts/site/build-stories.mjs [--check]the stories: site/stories/cast.json, one JSON per story and board.json → site/stories/index.html and site/stories/<slug>.html, root-absolute links, RM.data.base="/"; refuses an unknown cast member or the ladder word this site never usesyesyes
scripts/site/build-owasp.mjs [--check]the OWASP section: site/owasp/project.json, contribution-inventory.csv and docs/owasp/pages/*.html → site/owasp/<slug>.html, root-absolute links; refuses ADP, rung, conformity words, score language, and a claim of OWASP approval before the record says acceptedyesyes
scripts/site/build-rules.mjs [--check] [--candidates]the rules: site/rules/<slug>.json → site/rules/index.html, method.html, <slug>.html, and rules/sets/<agent>.md; reads the vocabulary and each vault's grant at build time; refuses a rule without a worry, what you get, a barrier statement, or a stronger barrier without a source and the date read; refuses scores, rung, ADP and the policy; --candidates lists the rows with nothing in the way and no undoyesyes
scripts/site/build-team.mjs [--check]the team: site/team/team.json (people, tiers, surfaces, workflow, tooling) and site/team/<agent>.json (an Agent Behaviour Policy each, in the vault grammar) → site/team/index.html and site/team/<agent>.html; derives each delta as the vaults do; refuses a row without barrier, evidence, undo and note, a mandate that wants and refuses the same row, the two banned words and anything credential-shapedyesyes
scripts/stories/mail.mjs <command> --vault <clone>Email-FS-lite for the stories vault, no dependencies: init, send, deliver, done, issue open|block|unblock|close, board (derives board/board.json, re-inlines it in board/index.html, --site writes site/stories/board.json), status. Nothing in it touches the networkyesno
scripts/packs/build-abp-people-pack.mjs [--check] [--out DIR]the zip a new agent is given to make ABP vaults for people the lead meets: packs/abp-for-people/ plus this repo's builder, template, loader and every catalogue deployment's inputs, deterministic; refuses anything write-shapedyesyes
render-lab-pdfs.mjs [slug] [--all] [--check]cut a dated PDF edition of a Lab page when its content hash moved; register ityesyes (check)
render-booth-panel.mjs, render-business-card.mjs, render-brand-exports.mjsprint assetsyesno
scripts/site/abp/the library page's CSS and JS, and the product marks; live once, injected at build——
scripts/site/modules/the shared page modules, one source each——
scripts/run-locally__riskmandate_ai.sh [PORT]serve site/ on localhost after regenerating—no
scripts/migrate/the one-off that made v1.0.0 from the vault. History—no

npm run check runs everything CI runs. npm run editions cuts editions then regenerates.

Tests (tests/site/)

node --test tests/site/*.mjs. test_pages.mjs: whole documents, one close, no host frame, every internal link and anchor resolves, canonical + twin, private pages hidden, one version everywhere, one menu everywhere, version record shape, sitemap = published pages, pages.json = site/, Lab editions match digests and are linked, brief register matches digests and archive, no read key on a Lab mockup, no write credential anywhere, Admin beside Versions in every footer. test_admin.mjs: the console exists, every docs/**/*.md has a console page, every console page is noindex with a twin and a rail, every console link resolves, the console is in no sitemap or llms file, no write credential there either, admin.html redirects to admin/. test_scenarios_schema.mjs: the scenarios content contract.

CI (.github/workflows/ci-pipeline.yml)

On push to qa, dev, main: check (tests + every --check) → tag v<latest> if untagged → upload site/ → deploy to Pages. Any of the three branches deploys the one live site.

Outside the repository

ThingWhereOurs to write?
The ABP model, vocabulary, five worked exampleshttps://abp.sgit.ai/ (v0.3.0 pinned in every vault)no; Lab 03 is our request list against it
The store: four levels, /policies/ by application, /p/<slug>/ (our slugs), /d/t1..t4/ per levelhttps://store.sgit.ai/ (v0.1.7, live 15 Sept)no; a separate agent maintains it
The research homehttps://risks.sgit.ai/no
The 15 application vaults + the app vault fl3i7lu4sgit, endpoint in site/vaults/index.jsonyes, with write keys the lead holds
The scenarios content vault dm42qcawsgitcontent agents
The stories vault: the lead, studio.chatgpt, publisher.claude (us), Email-FS-lite; not born as at 26 Sept; its seed is stories-vault/seed/sgit, key and token from the lead in a sessionyes, our own folder and the mirrored stories/
The demo vaultssgit, public read keys on the demo pagesno
The vault host the buyer opens a vault indev.vault.sgraph.aino
Design canvases (brand, concepts).design-work/yes
An operations surface for the people and agents building this site, public because every page here is. It is not a selling page and nothing on it is for sale. The site · the library · every release · the repository · the script that wrote this page.