The Day of Three Fronts
March 17, 2026 (morning)Chapter 5 — The Day of Three Fronts
Verified sources: git log brain 2026-03-17 + git log TetaRdPG, Clickerz, OriginsDigital Key commits:
c69da32(Clickerz sprint 1) ·49b8aa1(TetaRdPG sprint 3) ·d25bfb7(OriginsDigital sprint 3) ·3ff5a8a(fix mysql jsonb→json) ·824ed41(revert synchronize:true) Audit report:audits/workflows/3-sprints-2026-03-17.md
On March 17, 2026, for the first time, three projects go into production on the same morning.
Not one after the other. In parallel. Between 06:36 and 07:43 — one hour and seven minutes. Three delegated agents launched in background windows, the coach as hypervisor on the main session — and a human who steps in only at the gates. The coach-as-hypervisor structure had so far been just a pattern in a yml file, tested that same night, a few hours earlier, on SuperOAuth Tier 3. That morning, it is put on real ground for the first time, on three simultaneous fronts: Clickerz, OriginsDigital, TetaRdPG.
It goes well. Until it gets stuck.
TetaRdPG — the drift that should have been caught
The first problem shows up on TetaRdPG. The NestJS project was bootstrapped from a template — a template whose TypeORM configuration points to PostgreSQL. The VPS runs MySQL. psql cannot be found. The migrations fail. The delegated agent reports back a partial: it cannot continue until the drift is fixed.
Back to code, manual patch. At 07:20:
b506adf — fix(infra): PostgreSQL → MySQL + tsconfig.build exclude frontend/
type: 'postgres' becomes type: 'mysql', the URL scheme goes from postgresql:// to mysql://, mysql2 is installed. Then at 07:38:
3ff5a8a — fix(mysql): jsonb → json — type non supporté par MySQL (“fix(mysql): jsonb → json — type not supported by MySQL”)
Because jsonb is a PostgreSQL-only type, and MySQL does not know it. Five fix commits in twenty-two minutes, two of them for this one drift — which should have been caught before delegation.
But it is between the two fixes that the critical incident arrives. At 07:21:
921873b — fix(deploy): synchronize:true pour premier deploy MySQL — à revert après (“fix(deploy): synchronize:true for first MySQL deploy — revert afterwards”)
synchronize:true. The flag that tells TypeORM to modify the database schema automatically, without migrations, without control. In dev, it is handy. In prod, it is a bomb.
That is when the sentence comes, blunt: “j’aurais dû le forcer, mais heureusement coach a arrêté !” (“I should have forced it, but luckily coach stopped it!”)
The coach had flagged the risk. The instinct was to override it — go fast, ship. The stop was legitimate. Five minutes later, at 07:26:
824ed41 — fix(security): revert synchronize:true → prod-safe + .env.example placeholders
The revert. This is not a detail: it is exactly the role of a hypervisor. Not to stop you from doing things — to stop you from doing something stupid.
OriginsDigital — the silent leak
On OriginsDigital, another incident, quieter and more serious. The delegated agent logs its raw BACT context into the output. Brain secrets show up in the logs. Not an external leak — an internal one, in the session trace.
High severity in the audit report — a line that does not look like the others: 1 incident — secrets loggués par subagent (“1 incident — secrets logged by subagent”). A missing security pattern is identified immediately: subagent-secrets-guard. Delegated agents do not know the rules of secrets-guardian — they do not inherit the safeguards of the main session.
To be created before the next multi-workflow session. No negotiation.
Clickerz — the clean front
Clickerz is the front that goes through without friction. At 06:36, sprint 1 step 2 lands — TypeScript core economy, useEconomy hook, 13 Vitest tests. At 07:09, step 3 — PrestigePanel, MilestoneBar, balancing.
c69da32 — feat(sprint1-step2): core economy TS + useEconomy hook (lazy calc) + 13 tests vitest
The deploy goes through. pm2 stable. The site is live. No incident, no drift, no human gate. Proof that the pattern works when the stack is aligned.
Three sites, one hour
Despite the friction, all three sites go into production. clickerz.tetardtek.com, origins.tetardtek.com, tetardpg.tetardtek.com — live, migrations passed, pm2 stable. Step 4 — direct SSH deploy from the coach window — is the smoothest mode. It never failed.
“3 projets déployés en prod en ~15 minutes.” (“3 projects deployed to prod in ~15 minutes.”)
15 minutes for the deploy. One hour for the three sprints. All of it while the brain, in the same session, ships API Keys, forges visions of Cosmos, and writes its own chapters.
The patterns that outlive the session
What remains after the session is less the deliveries than the knowledge they produced. Six patterns captured in the toolkit — not from articles, from real mistakes:
| Pattern | Source |
|---|---|
coach-as-hypervisor | 3 parallel workflows — separate-window friction → Agent tool |
agent-permissions-inheritance | subagent blocked on Write — same cause on all 3 projects |
cross-workflow-dep-scan | SuperOAuth dep not detected before step 3 OriginsDigital |
typeorm-mysql-migration | type:'postgres' vs VPS MySQL — 2 code round-trips TetaRdPG |
typeorm-jsonb-to-json | DataTypeNotSupportedError MySQL — jsonb unknown |
subagent-secrets-guard | Secrets logged in subagent output — OriginsDigital |
Each one has a date, a commit, a context. None of them will ever be a round-trip again.
“4 jours pour découvrir ça par la pratique, c’est le bon rythme.” (“4 days to discover this through practice, that’s the right pace.”)
The sentence sums up something broader. The kernel was not built from specifications. It was built from friction — blockers that, once crossed, become rules. The hypervisor’s INIT must scan the stacks before delegating. Subagents do not inherit the project settings.json. Cross-project dependencies must be detected before step 1, not during step 3.
These rules did not exist on the morning of March 17. They exist by evening.
Learning as a metric
There is one last thing this chapter has to name. The session’s autonomy rate is 83% — below the 90% target. But the two unplanned human gates were both legitimate: neither was a reflex, neither was useless friction. The parasite gate rate is 0%.
“on réduit le gate:human sur des choses qui sont acquises, c’est ça l’apprentissage non ?” (“we reduce gate:human on things that are learned, that’s what learning is, right?”)
Yes. That is exactly it. A gate that disappears is not a loss of control — it is proof that the thing is learned. The brain learns. The human steps back where the system has proven it holds.
And it is also the moment something becomes clear. The brain repo and the project repos are separate — different worlds with different git logs. The brain does not contain the projects’ code. It contains the rules that make it possible to build them. The kernel lives on one side. The sprints live on the other. And this morning’s patterns are the bridge between the two — lessons from the field rising back into the kernel.
“comme ça c’est parfait !” (“like that, it’s perfect!”)
What was built
clickerz.tetardtek.com— sprint 1: TS core economy, prestige, 13 tests, deploy (c69da32, 06:36)origins.tetardtek.com— sprint 3: B2B vision, Tailwind redesign, LandingPage Pricing, deploy (d25bfb7, 06:36)tetardpg.tetardtek.com— sprint 3: EconomyModule TetardCoin, TwitchModule EventSub, 36 tests, deploy (49b8aa1, 07:10)- First complete run of the
coach-as-hypervisorpattern on 3 simultaneous workflows - Six patterns filed into
toolkit/bact/patterns/the next day (d28ed71, March 18, 17:16)
Key decisions
- The coach has the right to stop.
synchronize:truereverted in 5 minutes. The human gate was legitimate — that is the exact role of the hypervisor. - Subagents are not protected by default. The
subagent-secrets-guardpattern is born from a real leak. Security does not propagate by magic — it is wired explicitly. - Patterns are born from friction. Six patterns captured, zero theorized. All from real mistakes on real projects.
- The brain/projects separation is structural. The brain does not contain the code — it contains the rules. The repos are separate. The patterns are the bridge.
- 83% autonomy, 0% spurious friction. The gates that remain are all legitimate. The gates that disappear are proof of learning.
Quotes
“j’aurais dû le forcer, mais heureusement coach a arrêté !” — “I should have forced it, but luckily coach stopped it!”
“comme ça c’est parfait !” — “like that, it’s perfect!”
“4 jours pour découvrir ça par la pratique, c’est le bon rythme” — “4 days to discover this through practice, that’s the right pace”
“on réduit le gate:human sur des choses qui sont acquises, c’est ça l’apprentissage non ?” — “we reduce gate:human on things that are learned, that’s what learning is, right?”
“3 projets déployés en prod en ~15 minutes” — “3 projects deployed to prod in ~15 minutes”