QA Owns the evidence.
QA turns a reported symptom into a falsifiable case another role can act on.
- Reproduce the symptom
- Capture it in a failing test
- Localise the likely file and line
A general-purpose assistant can produce something that looks finished. It has no idea whether the thing is good, who gets to decide that, or what happens when the answer is wrong. So I built the missing part: an operating model that runs the whole product cycle, from first idea to release, and walks me through the research and strategy most people skip. Roles own zones, briefs hand over the criteria and leave the approach open, reviewers never see the reasoning that produced the work, and a cold session resumes from disk knowing what was already decided. Its only user is me, and the products in the cases that follow came out of it.
The Problem
Generating something impressive takes an hour. Keeping it good takes a discipline the model does not bring on its own. These are the failures I hit often enough to design against, and not one of them is fixed by a better prompt.
The prototype is so easy to make that most people skip the work before it. The research that says what is worth building, and the strategy that says why, never happen, so the product stands on guesses.
The first version lands great. Then come the new ideas and the new features, and the model cannot get back to the quality it started with, so it degrades the part that was already right.
Most work happens in one endless conversation. The context fills, the later answers come out worse than the early ones, and every message pays again for the whole pile. Cost climbs while quality falls.
The session that produces the work also judges it, and a maker reviewing itself rationalises instead of catching. It reports done, with no independent check between that claim and you.
It states a fact, a date or a number that does not exist, in the same even tone it uses for everything true. Nothing marks the invented part, so it reads exactly as reliable as the rest.
Most people work without a spec, so the model has nothing to hold onto. By the second week it is quietly contradicting a call everyone already made and moved on from.
My own working baseline, written into the framework's vision document: a focused role session beats a bloated generalist one, even without parallelism. Not an industry statistic, just the number I kept hitting.
I had already faced these failures while growing a design team from seven people to twenty-six. The difficult part was keeping other people’s work good as the team grew. I wrote the competence model and the standard for reviewing the work.
The standard could be written down. Holding it depended on who reviewed, how much context they carried, and how much time they had. Deep review only reached part of the work. That was the gap I wanted this team to close.
None of these failures is new to me. A decade before the model existed, the same ones showed up in a team of people, where the hard part was never the design itself. It was building the conditions in which other people's design came out good, and holding that bar as the team grew.
Between 2013 and 2015 the team went from seven people to twenty-six. Three things carried that.
The first was a competence model: five levels, with measurable proficiency across research, interaction design, and visual design. It told each designer what was expected of them and where the bar sat. And it fed straight into their performance review, so the standard was never abstract.
The second one measured the work itself. It was a scoring methodology: a heuristic evaluation of the artifact against Nielsen Heuristics, answered Yes, No, or N/A. That turned quality from a matter of taste into something comparable across client engagements.
The third was a cadence instead of a process: weekly critiques, design jams, office hours, bug-bashes with engineers before launch. High-touch, low overhead. Heavyweight gates on every handoff would have collapsed at that size, so the only hard gates I kept sat on the milestones that mattered.
All of it worked. Written down, the standard was clear to clients and peers too, not just held in my head. And it drew a clean line between the two halves of the job.
One half is the definition of good, and it scales, because you can write it down. The other half is the act of holding to it, and it runs on things that do not scale: who did the reviewing, how much context they carried, how much time was left before the demo. Deep review was the scarcest thing the team had, so it only ever reached a fraction of the work, and the bar thinned toward the edges. That is not a fault in a team. It is the physics of one.
Almost fifteen years later I have a team again. It has no fatigue, no deadline of its own, and no memory of yesterday unless I write it down. Everything I learned running the first one, I now run on this one.
Explore the hierarchy. Drag sideways to follow a branch.
When one context does everything,
quality belongs to no one.
A focused specialist owns one craft and answers to its standard. I had watched that raise the bar with people. I used the same starting point for the AI organisation.
AI lowered the cost of making screens and code. The management work stayed: deciding what was worth building, assigning ownership and checking the result. I built the operating model around that work.
It runs from the first brief to release. I wrote the role charters, task contracts and quality gates, then used them to ship products. The decisions below explain how I kept control of the work.
The value is controlled delegation: I set the goal,
the system carries the context, and evidence comes back.
The Organisation
Ask a flat pool of helpers for a landing page and every one of them answers. Ask who owns it being good and nobody does. So I wrote the org chart before I wrote a single prompt: who exists, what each one is for, and who hands work to whom.
Select a role to trace its relationships. Drag sideways to explore the organisation.
The one session I talk to.
It staffs the roles and merges what they send back.
Dispatch runs one level down and never skips.
Each box below is a whole role: the skills it can run, what it must know, and the standard.
The first of these is not an agent: it runs before the work starts and refuses to let it begin. The other four spawn fresh at closure, and get artifact paths, never conclusions.
The roles, the levels and every arc are generated from the framework's own charter files. Fourteen roles were designed and eleven are live: two were cut before they shipped.
One was disbanded and its duties redistributed. The repository still carries all three, because I wanted the org's history to survive its current shape.
The Cycle
The chart above names the specialists. This one follows the product as they work: research becomes a brief, models, screens, code and something a person can use. The lines show where roles overlap and where a failed check sends work back.
Conceptual product-cycle map. Product management, brand and content, design, architecture, development and QA overlap around briefs, models, use cases, wireframes, interface designs, code and a shipped application. Independent review gates follow strategy, foundation and specification. A feedback route returns from QA and development to design.
Research notes and a grounded brief
ExploreOpportunity, scope and decisions
ExploreIdentity and voice to work within
ExploreFlows, rules and edge conditions
ExploreLayout before visual detail
ExploreScreen system and build contract
ExploreBuilt, checked and revised
ExploreSomething people can use
See productsRead left to right as the work changes. Eight selected outputs represent the eleven-phase framework. Position shows sequence, not time or effort.
The diamonds mark independent review. Inspect them to see what allows work to continue. This is a conceptual reconstruction; the build-to-product route is illustrative.
Proof
A voice-first iOS party game and a Chrome extension for job applications came out of this operating model. Both reached public stores. The product surfaces below show the work; their cases explain the decisions behind it.
I was the designer on both. The framework carried the work between focused sessions, with written standards and separate checks. The evidence is delivery and recorded corrections. I have no framework adoption or ROI figures to claim.
Shipped on the App Store
For Parlour, I separated prompt generation, evaluation and rewriting. The evaluator needed calibration. I rebuilt its rubric around prompts I had rated myself and kept the final read before content entered the game.
The app reached the App Store with 466 prompts; its case shows how the content reviews and motion checks shaped what shipped.
Read the product caseShipped on the Chrome Web Store
The side panel keeps the job, match assessment and generated documents together. The full case follows the product from discovery through a store rejection and the decisions that changed the application flow.
Read the product case
What held the bar
One task, TEAM-16, failed its first independent review: the rule had been repeated instead of pointing to one source. The task, the reviewer’s verdict and the corrected file preserve that trail.
Open the actual evidence chainWhat changed after a miss
A retrospective found that specified checks were being skipped. It led to enforceable gates. A separate regression fixture catches a missing product-manager step; the old omission now has a permanent test.
Takeaway
Building this team made me write down what I had held in my head as a manager. The ownership boundary. The evidence needed to call something finished. The decision that remained mine.
I thought most of my quality bar was a matter of judgment. Writing it down showed me how much of it could become a shared standard, and where my judgment was still needed.
This is the one page of the system I would hand to a manager who has never touched an agent, because it is the whole difference between delegating and dictating, and it does not change when the workers stop being human.
It is also the rule I break most. By the time a task is framed properly I usually know how I would do it, and writing that down feels like generosity rather than interference. It is neither. Every other rule in this case has a machine behind it: a hook that refuses, a gate that will not open, a judge that will not sign. This one has a sentence in a template, and a sentence has never refused anything.
So the sentence gets typed by hand every time the section appears, and it is always the same move. I write down what I thought, then take its authority away in the next clause. The wording drifts from task to task, and that drift is the tell. A rule being applied reads differently from a macro being pasted.
The cost of getting this wrong is not a worse result. The work comes back. I end up holding the context I split out, and the session I delegated to becomes an expensive way of typing. That failure has a name in the system now, and I gave it one because I kept doing it with a decent reason every time.
[Optional. Reference only — NOT guidance. Alternatives weighed when the task was framed, recorded so the executing session need not re-derive them; the executing session owns the chosen approach. Delete this section if there were none.]
9 of the 101 tasks in the backlog record alternatives at all; the template says to delete the section when there were none. So the field shows up only where there was a real choice to hand over, and in all nine it opens by disarming itself:
tasks/*.mdthe senior model writes the finished output into the brief and the executor merely transcribes — delegation in name only; wastes the tier and re-concentrates work + context upstream.
Eight distinct sentences across nine tasks. The one exact repeat is a pair of siblings from the same epic; everything else drifts. Row 07 is the only one that moved the disarming up into the section heading. Nothing else in this case has so little machinery behind it.
Each session runs in its own worktree and ends at the unit boundary. What survives is what it writes to disk, so that is where the next session starts.
Down is a write. Up is a read. The dark floor is the repository, the only place work crosses between sessions.
Every shared file class has one writer. When two roles need the same file, it becomes a sequential relay. Consolidated ledgers are banned because a file everyone appends to is a collision point.
The reviewer is the edge case: it cannot write at all, so the session that spawned it persists the verdict. Parallel execution is a useful side effect. The structure matters even when sessions run one at a time.
The QA charter makes the rule concrete. QA owns the failing evidence; the developer owns the source change. The diagnosis packet is the document between them.
QA turns a reported symptom into a falsifiable case another role can act on.
The developer owns root cause and the smallest safe edit to production source.
skills/qa/SKILL.md
skills/qa-defect-triage/SKILL.md
docs/orchestration/handoff-contract.md
The changed build comes back to QA for verification on fresh evidence. Specification changes go to the architect; closure goes to a clean-context reviewer.
The reviewer starts in a separate context, with the artifact and acceptance criteria. It receives no argument from the maker. I separated production from judgment so the same session could not defend its own work.
Every team I have run had the same soft spot. Someone says a thing is finished, everyone believes them, and the belief is right often enough that nobody checks. The times it is wrong are expensive and always found late.
Agents make that failure faster and more confident. So "done" stopped being something anyone gets to say. It is a state you can only reach through a gate, and the gate has an iron rule: no completion claim is accepted without fresh evidence captured in this run. Remembering that the tests passed is not evidence. The command output from this session is.
What that comes down to in practice is an address. A criterion is closed by something someone else can open, and the address is what travels: written into the task before the work starts, quoted back by the judge that checked it, and resolving to a line that exists on disk.
Written before the work, by whoever framed the task.
tasks/
- [x] The lead's staffing procedure (charter §2, append-only) carries a proactive rule: when the target session runs a weaker tier than the lead, calibrate the spawn brief … before dispatch.
— assistant-charter.md:45
A separate session, fresh context, reading paths and never conclusions.
docs/
AC1 — PASS. Proactive rule appended at … , tagged [AI, pending confirmation] per the doc's provenance convention; genuinely append-only — author §2 items untouched per diff.
assistant-charter.md:45
What is actually on disk, at the line both of them named.
docs/
45Tier-calibrated brief before dispatch (proactive). [AI, pending confirmation] Most units run on a weaker model tier than the lead …
assistant-charter.md:45
The tripwire in the verify step is aimed squarely at how AI writes. A sentence carrying should, probably, likely or looks correct, with no command output beside it, is a failed verification whatever it meant. The list ends on done, which is the word the whole gate exists to protect.
.claude/hooks/taskcompleted-verdict-gate.shExits non-zero unless a verdict file for this task carries verdict: PASS. Refusals are counted on disk; at three the hook stops refusing and escalates to the lead, so a dead judge cannot trap a task forever.
TEAM-16, a task closed on 2026-07-06, traced through the three real files it touched. It failed the first round: the rule had been restated in each place that used it instead of pointing at one source, and the judge sent it back.
In a team that never gets tired and never pushes back, this is where the friction a good colleague supplies has to come from instead. Nothing on this row is reconstructed.
This is the part I am most attached to, because it is the direct descendant of the scoring methodology I wrote in 2014 and the thing I never managed to make stick with people.
Design quality gets assessed against six dimensions, and before any of them runs there is a brand-fit gate of five go/no-go questions. My favourite is the logo-swap test: if swapping the logo makes no other visual change necessary, the design has no identity. It fails there and the rest of the audit does not run.
The instrument does not produce a score. That was a deliberate call and the rejected alternative is recorded next to it: a graded verdict implies some level of unresolved deficiency is acceptable to ship. It is not. So the validator returns a list of deficiencies, each with a specific fix, and it returns that list again until it is empty.
And the gate is executable. Before any pixel work, the point of view, the interaction stance and the content map have to be locked. If they are not, the tool call that would write to Figma is refused by a hook, with the missing artifacts named. The refusal survives "just a quick mock" and "draft first, lock the POV later", because those two sentences are precisely the failure it exists to prevent. I know, because I am the one who kept saying them.
BLOCKED: pixel-grade Figma write refused
interface-design pre-conditions not met. Missing / unlocked:
- design-pov.md (anti-pattern rejection list absent)
- design-quality-prebuild.md (no pre-build verdict)
Run the missing wave(s) via sdlc-interface-design.
The sixth dimension, technology and implementation, is assessed too and is cut here for length. The block is real output shape, reconstructed with example values: the check greps the pre-build verdict file and exits non-zero when it is missing.
The common complaint about AI design is that it produces averages. It does, and the reason is structural rather than a limitation of the model: asked for options in a single pass, it locks onto one framing early and everything after that orbits it. You get nine variations of one idea and call it exploration.
So divergence is mechanical here. Nine named ideation methods, each run as an isolated sub-session that cannot see what the others produced. Not because the methods are magic, but because isolation is the only thing that reliably prevents convergence.
Then the part I feel strongest about. The system is forbidden from ranking what it generated. The rule is written plainly: do not rank, score or eliminate, that is the human's job. Self-scoring is a named anti-pattern, on the grounds that a model cannot rate its own originality, which is true and rarely admitted.
The bar is enforced by quota rather than by encouragement. Three to five genuinely distinct variants per question, fewer than three being insufficient for a real choice. At least one has to visibly violate a category default. And every variant cites a named precedent, with at least one drawn from outside screens entirely, because "looks like Linear" is not a precedent and a book cover forces a different kind of thinking than a competitor's homepage does.
Rows as accounting entries, weight in the numerals.
Swiss railway timetableAnnotation-led, evidence in the margin.
Tufte, Envisioning InformationColumn rhythm carries hierarchy alone.
Le Monde front pageEach artifact framed like a type specimen.
Letterpress catalogueDense, monospaced, status-first.
Braun ET66An exploration board, stylised. Equal tiles at the same size, because the chosen one is marked and never enlarged: scale would lie about how evenly the options were actually considered. Several of the precedents come from outside screen design, which is the quota doing its job.
I made the evidence come first. Synthesis has to cite what the research wave found, so a plausible strategy cannot pass as a grounded one.
Gather the evidence
Audience, existing demand, jobs to be done and market context are investigated in parallel. Each returns something the next step can inspect.
Research findings
Sources
Assumptions still to test
Make a claim
Positioning, value proposition and success criteria cite the evidence wave. A claim keeps its evidence level attached.
Strategic claims
Evidence references
Open questions
Independent review
A fresh reviewer reads the merged artifact. Changes requested hold the phase open until a new verdict passes.
PASS
or CHANGES REQUESTED
Reconstructed from the strategy skill: an evidence wave, a synthesis wave and an independent review. The output is a document of falsifiable strategic claims, with an evidence index and explicit assumptions.
Every operating model looks good running forwards. The test is what it does when a decision made months earlier turns out to be false, which is the normal condition of product work and the thing most process diagrams quietly omit.
On the job-search extension, the strategy promised that applying would cost zero extra clicks: the tailored CV would attach itself to the application form. It was specified, costed and built.
Implementation revealed the file being attached was HTML wearing a .pdf extension. Most application systems check, reject it, and the ones that accept it store something unreadable. Then the audit found the worse half: the panel never read the result, so it reported success either way. The user believed the CV was attached and submitted an application without one.
The resolution was not a better attach. It was deleting the automation and adding a click, with the reasoning written down where the next person will find it.
What matters structurally is what happened next. The change was classified, its blast radius mapped across every dependent artifact, and the update ordered upstream first. The earlier decision was not edited to look correct. It was marked superseded, with the newer one naming exactly which part of it died.
A predictable manual step beats an unpredictable automatic one.
Auto-attach was a headline capability, specified end to end and costed at no additional user action.
The CV was HTML with a .pdf name. Systems that check the type reject it; systems that do not store something unopenable.
The failure result existed and was never read. The panel showed success regardless, so the user submitted without a CV.
The attach is removed, the permission it needed is revoked, and the manual path becomes the only path.
One reversal, and the documents it moved through. A change that only edits the code and leaves the strategy reading as though it was always right is how a system starts lying about itself.
strategy.mdconcept.mddomain.mdrequirements.mdengineering.mdcontent.mdbehavior.mdqa.mdsettings.mddev-handoff.md
Self-Repair
After a real build, a retrospective runs on what went wrong. One of them found four separate failures and, underneath them, a single cause I recognised immediately because I have watched it happen in every team I have run.
The steps were all specified. They were skipped anyway, because nothing forced them and the conversation had momentum. The lead was running verification-gated work on trust, and under conversational tempo trust is what gives first.
The fix was not a reminder. Each of the four became something mechanical: a citation that must be present, a tag that fires a step which cannot be skipped, a verdict file that must be quoted before a phase can be called finished, a grep whose result defines the scope instead of whatever the lead happened to remember.
The governance runs the other way too, which is the part that keeps the standard honest. A principle that two skills consistently violate without consequence is treated as a signal to revise the principle, not to discipline the skills. I have seen too many design systems where the rule survived and the practice quietly went around it.
Cost gets the same treatment. Two hundred and fifty-eight composed skills had their descriptions removed from the model's context, with execution unchanged because dispatch reads them from disk anyway. The saving I recorded at the time was roughly eighteen thousand tokens a session, about half the listing cost. That figure is my own measurement note rather than an independently verified benchmark, which is exactly the distinction the confidence grammar exists to preserve.
Four unrelated-looking failures in one build: a divergence asserted from memory, a mechanic accepted without exploring alternatives, a phase declared complete unjudged, a cleanup scoped to what was remembered.
One cause. The lead runs verification-gated steps on trust and, under conversational tempo, skips them. Prose rules degrade; nothing marked their absence.
Four gates. Cite both sides or tag it unverified. A pre-chosen mechanic triggers a non-skippable exploration. A phase closes only by quoting its PASS verdict. A grep defines the cleanup scope, then a clean-context pass verifies it.
The same blind spot surfaced again seven weeks later in a different project, which produced the sharpest line the system has about itself: a capability without a caller is a capability that does not fire.
This is the part with no equivalent in a human organisation, and it is the one I am proudest of.
For each kind of work, a manifest declares which roles must participate and in which wave. A run produces a trace of who actually fired. The harness diffs the two and reports what was missing, what fired that should not have, and what ran out of order. It exits non-zero on any finding, so it drops into a pre-commit hook like any other test.
Which means "for this kind of task the right people were involved" stopped being an impression and became a machine-checkable verdict.
The fixture below is a real one. An early version of a scenario ran marketing, then design, then build and test, and looked complete. It was missing the wave where the product manager creates the unit files, and without those files nothing downstream is gated at all. That omission is now a permanent test: the old trace runs against the corrected manifest, and the suite fails if it ever stops reporting the gap.
[PASS] S1-audit-missing-pm 1 required finding(s) present MISSING product-manager (role, wave-0) expected but did not fire note: tasking wave creates one unit file per build unit BEFORE the marketing, design and build waves; without it no wave is gated and the closure gate never engages [PASS] S6-clean clean, no findings [PASS] R1-staffing-gate build wave on an unstaffed unit, caught [PASS] R2-judge-gate foundation phase closed unjudged, caught [PASS] R3-inbox-decision decision reached but never logged, caught 24/24 fixtures passed.
Output shape reconstructed from the harness source and its recorded run; the fixtures, the manifest, the trace and the finding are all real. Sixteen manifests cover the task types and the gate scenarios.
The Task
Most of what a manager is handed is not a task. It is a thought that has not decided what it wants yet, and if you delegate it in that condition you get back something plausible and unusable.
So the system refuses to record one. The test is blunt and I use it on myself as much as on the agents.
Acceptance criteria have to be observable outcomes, and the task-writing skill pushes back if I give it fewer than two. That is a rule I wrote against my own worst habit. One criterion is usually a restatement of the title; the second is where I am forced to say what I actually expect to see. Two is where a title stops standing in for a specification.
A criterion also has to survive contact with the work. When one closes, what was observed goes in on the same line as what was predicted, so the file ends up carrying both halves and neither can be quietly edited to agree with the other. That is the reason I trust the backlog more than my memory of it.
There is a "done" criterion: it is a task. No criterion: it is a thought.
Every task in the backlog that carries an acceptance-criteria section, counted by how many criteria it has. One mark is one task. The rule sets the floor at two.
The rule allows two. In the whole backlog nothing has ever been written with fewer than three, and the floor moved there without me touching the rule.
One task ran to nineteen: TIER-01-brand-prototype
tasks/TEAM-21-model-map-remaining-roles.md:55 · two commits, two days apart
Ninety-eight tasks carry the section, five hundred criteria between them. One older task states its expected result as prose instead, from before the section existed, and it is the only one not counted here.
Git carries two hundred and ninety-five of these transitions across forty-three tasks. The sentence never changes between the two commits. Only its box, and what got written in after it.
Most AI documentation is exhaust: long, undifferentiated, written once and never read. I treated the docs as a product surface instead, with the agents as the primary user, and the rules that fell out of that are the ones a design system would give you.
One decision to one file. Not for tidiness: so that a link leads to a decision rather than to a document where that decision happens to live, and so that editing the colour never pollutes the logo's history.
Granularity has a floor, with a test I can apply without thinking. A decision is the smallest unit worth linking to in full and worth having its own change history. Below that you get four files that are really one decision, and a link that leads nowhere useful.
Knowledge is never copied between documents. It is rewritten each time, shorter. A working folder holds thousands of words, the journal entry a few paragraphs, the state document less than that. And every document opens with the problem it addresses and who it serves, before any internals, because a document that opens with mechanism gets skimmed by exactly the reader who needed it.
All of it is wikilinked from the repository root and carries structured frontmatter, written to Obsidian's conventions so the same files open as a navigable graph rather than a folder of markdown.
The knowledge base as a graph, drawn from the real link counts. Node size is inbound links; the labelled hubs are the five documents the rest of the system actually leans on. Counts are a dated snapshot from July 2026, and the number that matters is not any of them: it is that nothing here is maintained by hand.
Memory
The failure this solves is stated in the standard itself, and it is the one that cost me the most rework: AI treats every documented claim as settled truth, when a great many of them are working hypotheses I fully intended to revisit.
So every claim carries how settled it is, and the level is not decoration. A draft may not ground a downstream decision without explicit permission. A working decision is usable but logs a dependency, so changing it cascades. Validated changes only through a full request. Locked is read-only until I unlock it.
The second ladder answers a completely different question, and keeping them apart was the thing I got wrong first. Confidence is about maturity. Authority is about who wins when two documents disagree.
Authority is ranked, and the rule at the top of it is the one I would put on the wall. Freshness is only a tiebreaker among things I said. It is never a way for the machine to overwrite me by being more recent, a failure the system names outright as freshness worship.
Newer generated content never beats an older user decision.
Here is the difference that took me longest to internalise. For a product team, most decisions are temporary. You pick something to keep moving, everyone understands it is provisional, and you come back to it. For an AI, a written decision is simply true, and it will build ten things on top of it without ever asking whether it was meant to hold.
So the log records the rejected options in the same file as the chosen one, with the reasoning that killed them. A decision not to do something is a full entry too, because a closed direction that is not written down gets reopened every quarter by someone who was not in the room.
Anything parked has to name what unblocks it. Without that, "we will revisit this later" reliably becomes "we forgot about it forever", and I have watched that happen in enough organisations to make it a refusal rather than a guideline.
Then the rule the whole thing rests on. The system may not promote its own recommendation to a decision because I did not object. If I said nothing, I did not decide. It parks the recommendation and waits.
I went further on visual work, where I am slowest to commit. "I like it" means develop this direction further. It is explicitly not approval. Approval is a separate, explicit, terminal state, and nothing may be built on enthusiasm alone.
The asymmetry is the part I would defend hardest. A clean scheduled run opens nothing and says nothing, so the machine's silence is allowed to mean that nothing needs me. Mine is never allowed to mean the same thing back.
A real record, condensed. The reason I chose this one: it rejects a paid shortcut, rejects doing nothing, rejects the tempting invented number, and then changes its own rule out loud instead of pretending the rule always allowed it.
[review: ...] with the comment, then [reviewed].Provenance is deliberately a separate axis from confidence. Who said it and how settled it is are different questions, and collapsing them is how an assumption quietly becomes a fact.
Ambition needs an execution path or it stays a sentence in a brief. A single generator produces one flavour of output no matter how it is asked, so a single mockup here is assembled from several specialists, each doing the one thing it is genuinely best at.
What makes that a system rather than a pile of tools is the same discipline the roles use: every tool's skill states what it does not own and routes to the one that does. I wrote the tool boundaries exactly the way I wrote the charters, and for the same reason.
The other half is provenance. Every generated asset emits a sidecar file recording the verbatim prompt, the model, the parameters, the seed and the reference images. An asset with no provenance cannot be reproduced, which means the next person cannot change it without starting over. That next person is usually me, six weeks later.
Structure, auto-layout, tokens, components. The layout is assembled here.
Not asset generation. A hero or an illustration is produced elsewhere and placed in.
Bespoke imagery: heroes, illustration, texture, empty-state art.
Not vector, and not the UI icon set. Raster only, by design.
True SVG geometry: spot art, emblems, marks that must scale losslessly.
Not the icon set. A coherent set is what a library exists to guarantee.
Compositing, texture and adjustment inside an existing layered file.
Not fresh assets. It edits in canvas; new work starts in a generator.
The rule underneath all four is library-first: the interface icon set comes from one vetted library, chosen early and locked, and a bespoke glyph is drawn only when the library genuinely lacks it, in that library's own grid and stroke. The set belongs to the library.
The interface phase is the one I designed most carefully, because it is the one I would otherwise do myself and therefore the one where I would be most tempted to skip the process.
It opens on a point of view: brand promise, audience priority, explicit yes and no principles, at least three named precedents, and a list of the genres this product is rejecting. Then an interaction stance, where three structurally different options are explored and exactly one is recommended with its risk and a counter-argument attached. Only after both are locked does anything become a picture.
The collaboration is ordinary and that is the point. The designer agent needs an illustration it cannot draw, so it commissions one from the image pipeline and gets back the asset plus a sidecar recording the verbatim prompt, the model, the parameters, the seed and the reference images. Six weeks later I can change that asset without guessing how it was made.
Between structure and pixels sits the design gate, and it is the reason this phase has a shape at all. The wave cannot proceed until the pre-build verdict exists.
Fourteen artifacts come out of this phase. Assets arrive from a second agent with a manifest attached, which is what makes them reproducible by whoever comes next.