Every part of this page is generated. Each now names the facts it is built from, and the checks that hold it on every push.
- gate
- rebuilt from its sources on every push, and refused if it differs from what is committed
- reach
- each of these facts is moved, one at a time, and the page must change with it
- press
- every control here is tapped on a fresh load, at a phone’s width, and must show something new
- engine
- every command named here must be one the pinned release has
- brand
- every colour and face is a brand token, and every text colour reads at 4.5:1 on its ground
- snapshot
- these counts were taken from the pendulum once, at the commit and day they name; each is moved, one at a time, and the page must change with it
from facts/company.json · 30 facts: hero.{eyebrow, headline, headline_end, lede} · forks.{code.{title, tests, main, ships, caption}, drift.{title, start, copies[], caption, sting}, compiled.{title, source, ships, caption}} · demo.assets[].name · nav.{start, how}
from wherefore 0.2.1 · version · commands.json: wherefore gate, wherefore build
held by gate · reach · brand · engine
In development · Wherefore 0.2.1
Your company, compiled.
Your code has one source of truth, and a pipeline that tests every change before it ships. Everything else your company says is a copy of a copy, and every copy drifts.
Every change branches off, is tested, and merges back. There is one main, and it is the truth.
Every copy forks, then forks again, and nothing ever merges back. Each version drifts on its own, for good.
That is how a customer ends up quoting you last year’s price.
Everything else gets what code already has. Change a fact once: your feature pages, docs, deck and demo video follow it, and nothing ships that still says the old thing.
from facts/company.json · 8 facts: pains.{items[].{pain, detail}, heading, answer}
held by gate · reach · brand
Sound familiar?
Every team has a different picture of what is current.
Sales sells last quarter’s plan, support answers from last year’s article, and the truth lives in someone’s head.
A feature ships, and the world never hears about it.
It is built, tested and released. The site, the docs, the deck and the help centre still describe the product before it.
Nobody can say which version is true.
Search finds six copies of the same claim. None of them says which one was decided, or why.
Wherefore makes the source the one current picture. Every asset is built from it, and a check can require each new feature to reach the site, the docs and the deck before the change lands.
from facts/company.json · 41 facts: demo.{heading, assets[].{by_hand, name, says, made}, before, after, stages[], said[], badges.{live, rebuilt, caught, fixed}, label, source, fact, note, checks[]}
from wherefore 0.2.1 · commands.json: wherefore gate, wherefore check retired
held by gate · reach · brand · press · engine
One change. Everywhere it is said.
Change one fact, and watch what follows it
source product.json · names.workspace = "Workspace""Project"
One name, and 7 assets that say it.6 rebuilt from the source. The help article still says “Workspace”, so nothing ships.All 7 agree with the source. Ready to ship.
Feature pageliverebuilt
Every Workspace keeps its own roles and history.Every Project keeps its own roles and history.
generated
Demo video · captionsliverebuilt
Click New Workspace to get started.Click New Project to get started.
generated
Sales deck · slide 4liverebuilt
One Workspace per client, set up in a minute.One Project per client, set up in a minute.
generated
Docsliverebuilt
Create a Workspace from the sidebar.Create a Project from the sidebar.
generated
App buttonliverebuilt
New WorkspaceNew Project
generated for the app
Onboarding emailliverebuilt
Your first Workspace is ready.Your first Project is ready.
generated template
Help articlelivecaughtfixed
Open the Workspace menu to rename it.Open the Project menu to rename it.
written by hand
An illustration: a made-up company's product. The checks behind it are real: wherefore gate and wherefore check retired.
from facts/company.json · 35 facts: demo.{fact, before, after} · why.{asks[].{name, tab, from, because}, ask, built_from, because, heading, word, part, meaning, juliet, rule, pick, note} · inspect.ask
held by gate · reach · brand · press
Why “Wherefore”
wherefore adverb
for what reason; why.
Juliet wasn’t asking where Romeo was. She was asking why he had to be who he was.
In a Wherefore repository every file has to answer her: generated from a source, written by a person for a stated reason, or captured and stamped with what it was made from. A file that cannot answer stops the change.
Wherefore art thou, Project?
- Built from
product.json · names.workspace = “Project”- Because
- Customers kept calling them projects; only we said workspace. The reason was written down with the change, so it ships with it.
Wherefore art thou, demo video?
- Built from
product.json · script.json · captions template- Because
- My script and captions are built from the same names as the app, so I never point at a button the product no longer has.
Wherefore art thou, slide 4?
- Built from
product.json · claims.json · deck template- Because
- I read the same names and claims as the feature pages, so the slide and the site cannot drift apart.
Wherefore art thou, orange?
- Built from
brand.json · accent- Because
- The accent is said once. Every page, slide and social card is built from it, so a rebrand is one line.
Wherefore art thou, “SOC 2 certified”?
- Built from
claims.json · compliance- Because
- I am not allowed yet. Until the audit is signed, the most any page may say is “SOC 2 in progress”, and the check refuses the rest.
The same made-up company. This page can answer for itself:
from facts/company.json · 11 facts: how.{steps[].{label, name, text, command}, heading, note}
from wherefore 0.2.1 · commands.json: wherefore build, wherefore gate
held by gate · reach · brand · engine
It installs in your repo, beside your code.
01 · your sources
Write it once.
Names, features, specs and claims live in one source, each with its reason.
02 ·
wherefore buildCompile everything.
Every asset is generated from the source, the same way every time. Nothing in the build calls a model.
03 ·
wherefore gateRefuse the drift.
On every push, anything stale or unaccounted for stops the change, and the error says why.
A command line, Python's standard library, and one file that says what your corpus is.
from facts/company.json · 27 facts: case.{made[], held[], stats[].{of, what}, as_of, quote, eyebrow, name, heading, text, url, visit, made_heading, held_heading}
from facts/pendulum.json · 5 facts: counts.{proofs, parts, plates, pack.version} · captured.on
held by gate · reach · brand · snapshot
Case study · Chaotic Pendulums
A hardware company, compiled from one spec file.
Chaotic Pendulums is a small hardware company our founder started to test this idea on something with more surface area than software: a desk-sized double pendulum with milled parts, a bronze blade, bearings and a clamp. Wherefore was built alongside it, one rule at a time. If one source can hold machined parts, physics, suppliers and a storefront, it can hold your app, website and docs. One spec file holds the object. Everything a shop, a customer or a printer receives is built from it, and checked on every push.
What it compiles
- Part drawings a machine shop quotes and inspects against, each with its cut file and its solid model
- Print-ready 3D files for a prototype, laid out plate by plate
- A bill of materials, and a quote bundle a shop’s online tool takes in one drag
- The engineering hand-over, frozen at every release so a shop can always find the pack it quoted
- The brand: the mark, the hero and the renders, drawn from the object’s own dimensions
- The website, and the 3D pendulum that swings on it
What holds it
- Load simulations, worked from the real parts’ masses, prove every mount setup holds the pendulum at a torque a hand can give.
- Worst-case tolerance stacks prove every screw clamps and never bottoms, at every extreme of every band.
- A sweep proves the blade turns a full circle and touches nothing.
- The swing on the website is integrated from the physics of the object as it is today, and a check holds every mass and length to the parts.
- Move any dimension, and a probe requires every file a supplier receives to move with it, or the change is refused.
- 49 proofs, each planting the fault a check exists to catch
- 9 parts, each drawn, cut and modelled from the spec
- 5 print plates for a prototype anyone holding the pack can make
Counted at V83 of the pack, on 30 October 2026.
from facts/company.json · 3 facts: rule.{line, end, text}
held by gate · reach · brand
AI writes the rules.
The build never improvises.
Agents write the generators and the checks. The build that runs them is plain code, the same every time, and nothing in it calls a model.
from facts/company.json · 17 facts: start.{install, steps[], closed, ask, heading, text} · status.{items[].{state, text}, labels.{available, next, later}}
from wherefore 0.2.1 · version · commands.json: wherefore init, wherefore build, wherefore hook install
held by gate · reach · brand · engine
Wherefore art thou?
Start with one fact.
Install it beside your code, say one fact once, and let the gate hold everything that states it. Nothing to join, and nobody to call.
wherefore init [DIR]write a wherefore.json that declares nothing yetwherefore buildthe roll: every generator, twice, compared with what is committed, and the results left in placewherefore hook installa pre-push hook: no push leaves the corpus stale
Wherefore is not public yet. The line that installs it appears here when it is.
- Available the engine, its checks, and the skill that teaches your agent the rules, Wherefore 0.2.1
- Next docs compiled from each release
- Later launches that wait until their page, docs and demo agree