recurring-tasks-toggle — 17 tests, pure module extracted
Privilege-escalation closed in requireOrgAdmin()
AI module deleted (TODO finally honored)
Next session: Emma overhaul — 78 tests passing
vivecoding.talk09 / 16
Slide 10 · The Numbercritical hit
From baseline → vivecoding
6
months
→
1
month
Production. Multi-tenant. 78 tests passing. Two security audits. Speed didn't come from skipping steps. It came from parallelizing the right ones with the right models.
vivecoding.talk10 / 16
Slide 11 · Wow Moment #01warlock · audit
CVE · PRIVILEGE ESCALATION
What looks like a feature is sometimes a CVE.
requireOrgAdmin()
The bug
Any member of an IT Audit Labs org was treated as admin automatically, regardless of their role.
It looked intentional. The pattern was old. Nobody questioned it. It would have lived in production for months.
obs#110
How the party caught it
Warlock ran a security audit, chained it with the code-review skill, and confirmed: this is a real privilege-escalation bug, not by design.
"Looked intentional. After audit, confirmed real CVE."
— Engram, obs#110
vivecoding.talk11 / 16
Slide 12 · Wow Moment #02emma · cross-tenant leak
CVE · CROSS-TENANT DATA LEAK
AI tools need the same guards as your REST endpoints.
emma.tools.get_ticket_detail
The bug
Emma's get_ticket_detail tool fetched any ticket by ID via service account.
No ownership check.
A user in org A could ask Emma for a ticket from org B — and Emma would hand it over.
obs#268
How the party caught it
Caught during the security audit phase of the Emma overhaul — before production. Fix: replicate the access control from the REST endpoint inside the tool.
"Forget this and you leak data cross-tenant. Period."
— Engram, obs#268
vivecoding.talk12 / 16
Slide 13 · The Honest Scarsnat · 1
NAT 1 · WHAT WENT WRONG
If a talk only shows wins, they're selling you something.
scar #1
CF Workers AI (Llama, Kimi) too slow + bad at instructions. Migrated to Anthropic API with fallback.
scar #2
ts-node broke on extensionless ESM imports. One session lost. Fix: switch to tsx.
scar #3
14 Pulse components rendered raw HTML entities. MS Graph returns them encoded. Decoded in every component.
scar #4
client:load hydration mismatch with sessionStorage. Switched Chat to client:only="react".
scar #5 · the lesson
Zendesk POST had no retry. GET had 3-attempt backoff.
SDD didn't catch it. The user did.
The workflow is good. It's not magic. User feedback is still irreplaceable.
vivecoding.talk13 / 16
Slide 14 · Hot Takesfive rules · zero exceptions
Five rules I live by
What the vibecoder gets wrong.
01
Specs before code. Always.
If you can't write the spec, you don't understand the change. Stop typing prompts.
02
One model is never the right answer.
Each model has a strength. The mix is the moat. Plan, build, audit — different agents.
03
Design is code. Merge it.
Architecture decisions belong in version control, next to the code that proves them.
04
“It compiles” ≠ “it works.”
Verify is a phase, not a vibe. Tests, invariants, authz checks. Don't skip the Paladin.
05
The AI is your junior — not your genius.
You wouldn't merge a junior's PR without reading it. Don't merge the AI's either.
vivecoding.talk14 / 16
Slide 15 · Three Takeawaystl;dr
If you remember nothing else
Three things to take home.
01 · The Thesis
Discipline beats vibes.
Specs, design, TDD, verify. The classical SDLC — just executable now.
02 · The Stack
Right model, right job.
Build a party. Each agent carries their class. Engram remembers, Warlock audits, Gentle grounds.
03 · The Math
AI is an amplifier.
It doesn't replace the engineer. It makes a trained one 6× faster.
⚜ vibecoding is roleplay. vivecoding is a campaign with a DM. ⚜
vivecoding.talk15 / 16
Slide 16 · End of Campaignquestions · q&a
NAT 20 · SUCCESSXP awardedRoll for questions
End of session
Thanks.
Now — roll initiative for questions. The party is listening.
Samuel Cala
DM of the Party · IT Audit Labs
@samuelcalaitauditlabs.comSDD skills · open source