Case Study, Part 5 of 5: Operation Phase
Where we are: synth-data is built and tested. This is the phase most tutorials skip entirely — because most demos pick a scope that skips it (mvp, poc). We chose feature, so all 7 Operation stages actually run: deploying it, watching it, and closing the loop back to the next round of work.
In plain English: Building something is only half the job — Operation is the other half: actually shipping it to real users, setting up a plan for when something breaks, checking it actually meets the goals we set back in Ideation, and capturing what to improve next. Most tutorials stop right after the code works; this page is what happens after that.
Every prompt we actually type is highlighted like this.
Stage 4.1: Deployment Pipeline (pipeline-deploy agent)
Claude Code: Building on Construction's CI workflow: on a version tag push (
v0.1.0), a release job builds the wheel and sdist, then publishes to PyPI using a repository secret (PYPI_API_TOKEN). Written todeployment-pipeline.mdas.github/workflows/release.yml. Approve
Stage 4.2: Environment Provisioning (aws-platform agent)
Claude Code: No servers to provision — the "environment" here is entirely: the PyPI project name
synth-datareserved,PYPI_API_TOKENadded as a GitHub repo secret, andCHANGELOG.mdstarted so every release has a record. All three done manually, once, outside the CLI. Approve
Stage 4.3: Deployment Execution (pipeline-deploy agent)
Claude Code: Ready to cut the first release: tag
v0.1.0, push it, let the pipeline from Stage 4.1 run.
$ git tag v0.1.0 && git push --tags
▸ Approve execution? [Yes / Request Changes]
You: Approve
release.yml: build ✓ publish to PyPI ✓
$ pip install synth-data (clean venv) → installed, `synth-data --version` → 0.1.0
Stage 4.4: Observability Setup (operations agent)
Claude Code: No telemetry by default — a CLI silently phoning home is exactly the kind of thing this tool's own users would object to. Instead: every error prints the failing schema line and column, not a raw stack trace;
--versionand--verboseflags exist for bug reports; GitHub Issues is the stated feedback channel inREADME.md. Written toobservability-setup.md. Approve
Stage 4.5: Incident Response (operations agent)
Claude Code: A short runbook for the one realistic failure mode — a published version silently produces malformed output for one format. Response: (1) confirm and reproduce against the reported schema, (2) yank the broken version's install eligibility from PyPI (mark it as a pre-release / yanked, which pip refuses by default) while keeping it downloadable for forensics, (3) ship a patch release, (4) note it in
CHANGELOG.md. Written toRUNBOOK.md. Approve
Stage 4.6: Performance Validation (quality agent)
This closes the loop back to the success criteria we gave Claude Code all the way back in Intent Capture (Part 2):
Claude Code: Benchmarked against the MVP success criteria — "10,000 rows in under a few seconds" — on a 7-column schema: 0.8s. Also checked the NFR from Construction: memory stays flat around 40MB at 100,000 rows, confirming the batched-generator design held up under real load, not just in theory. Written to
performance-validation.md. Approve
Stage 4.7: Feedback & Optimization (product agent)
The final stage. A week of real use later:
Claude Code: Two GitHub issues came in: a request for nested/repeated schema blocks, and a request for a
--seedflag for reproducible output. Neither is urgent enough to reopen this intent — they're written up as candidates for the next intent, not squeezed into this one. Written tofeedback-optimization.md.
▸ [Approve — Complete Workflow / Request Changes]
You: Approve
Behind the scenes: A
PHASE_VERIFIEDevent and a verification report land in the intent'sverification/folder — a phase-boundary check that everything Operation was supposed to produce, actually exists. ThenWORKFLOW_COMPLETEDfires. Those two feature requests don't vanish: they're exactly the kind of input that starts the next/aidlcprompt — a new intent, in the same space, that can read this one'scodekb/andmemory/instead of starting from zero.
Workflow Complete
WORKFLOW_COMPLETED
32 of 33 stages ran · 1 skipped (Reverse Engineering — no code existed yet)
aidlc-state.md: every active stage [x]
synth-data exists, tested, published to PyPI, with a runbook and a benchmark on record. The full history — every question, answer, plan, and decision across all five phases — sits under aidlc/spaces/default/intents/260909-synthetic-data-generator/, committed to git like any other project file.
Behind the Scenes: Every Hook That Ran, In One Table
| Hook | Fires on | Does |
|---|---|---|
aidlc-session-start |
Session start/resume | Emits SESSION_STARTED/SESSION_RESUMED, injects live workflow context |
aidlc-record-human-turn |
Every prompt we send | Emits HUMAN_TURN — proof a human, not autopilot, is driving |
aidlc-deliver-stage-rules |
Before a tool call | Hands the active stage's rules deterministically to conductor and subagents alike |
aidlc-run-sensors |
After a Write/Edit | Fires the sensors that stage declares; blocks the gate on a failure |
aidlc-write-audit-log |
After a Write/Edit | Emits ARTIFACT_CREATED/ARTIFACT_UPDATED |
aidlc-plan-approval-guard |
Before Code Generation writes | Refuses to generate code until "Approve Plan" is on record |
aidlc-state-transition-guard |
Before a state-mutating call | Refuses any direct lifecycle edit that bypasses the orchestrator |
aidlc-statusline |
Continuously | Renders the [AIDLC] PHASE > Stage [▓▓░░] n/m line |
The Whole Session, Just the Prompts
- Using AI-DLC, I want to build a synthetic data generator. Please read vision.md and technical-environment.md, then begin the AI-DLC workflow.
- Yes (scope confirmation)
- 1 (Guide Me)
- (answers to whatever it asks, inline)
- We've answered your questions. Please re-read the file and continue. (repeated per questions file)
- Approve (repeated at every gate — roughly 30 times across all 5 phases)
- Approve Plan (once, before Code Generation)
Almost the entire session is five kinds of prompt, repeated across all five phases. The actual work — reading what comes back before typing "Approve" — is where the thinking happens; typing is not.
What's Next
That's the real engine, end to end, all five phases: the same two-button rhythm from Lesson 05's "Working With It, Day to Day," but now backed by real stage files, real hooks, and a real audit trail — including the Operation phase most walkthroughs never show.
‹ Back to: Part 4 — Construction Phase Restart from: Part 1 — Setup & Kickoff