01
Pipeline-by-impact
RuleLookups and one-line fixes ship directly. Multi-session features touching a frozen contract run the full pipeline: PRD, critic loop with diverse providers and severity thresholds, frozen acceptance criteria, planner, specialist execution, ship.
Failure modeSelf-classifying a change as "this feels multi-session" and pre-emptively spinning up the full pipeline. The orchestrator spends 10× more energy on briefs and permission rituals than on shipping product. S139, 2026-04-30.
In practiceDefault for product-feature work is implement, test in sim, commit, surface the diff. The full pipeline runs only when David explicitly invokes it, or when the change touches a named frozen contract (Postgres CHECK or RLS, edge-function dual-mode auth, Keychain refresh path, dependency bumps with consumer-side override risk).
02
Specialist over serial
RuleWhen two or more independent items each produce more than ~5k tokens of output, dispatch each to a fresh subagent — in parallel where files are disjoint. The hidden cost of in-thread serialization is main-context growth; subagent fanout is 3–5× cheaper above 150k context.
Failure modeSerializing independent work in the orchestrator thread. Context fills, the planner loses precision in the second half of the session, retros come out shallow. S140, 2026-04-30 — three-way parallel fanout closed cleanly with 1821 of 1821 tests passing on the merged tree.
In practiceBriefs pin contracts (acceptance criteria, frozen system prompts, frozen tool schemas, line-citing inputs, precedent files to mirror), not implementations. HEAD-drift adaptations the specialist surfaces are the pattern working as intended.
03
Code like it ships
RuleResult-tuple service functions ({data, error}), structured error types, input validation, timeouts on network calls, code signing — even on "quick" implementations. Test in the simulator or running app, not just curl. Clean up at session end and verify cleanup ops by re-querying the target.
Failure modeLong-lived feature branches, commits ahead of origin/main at session close, retros that claim "shipped to main" when origin froze two weeks ago. S147→S155 git-topology incident — origin/main froze for two weeks at one SHA while 80 commits piled on a feature branch.
In practiceA read-only git-survey verb walks active projects' .git dirs and reports branches ahead of origin/main. The session-start briefing emits a drift stanza at a one-day threshold; the end-session skill refuses to complete while drift exists.
04
Memory is a journal
RuleStore David's unique data — decisions, project state, incidents, procedures, personal facts. Do not store external software versions, API capabilities, or CLI flags. Look those up fresh. Negative claims ("X doesn't exist", "blocked", "not available") require re-verification before acting.
Failure modeClick-by-click instructions delivered from training-data memory. The orchestrator invented an App Store Connect enrollment URL and a "Apple Small Business Program" subtab path; both were fabricated. S139, 2026-04-30.
In practicePositive instructions about third-party UI (App Store Connect, Apple Developer, Stripe, GitHub) ALSO get re-verified against current docs before delivery, with the source cited. Project-registry JSON overrides any prose memory; shelved-project memories override stale task carry-forwards.
05
Confirm before prod writes
RuleShow the plan and wait for explicit approval before deploying, restarting services, running destructive git operations, making external API calls that change state, or deleting files. Auto-merge specialist-authored PRs when CI is green and all acceptance criteria pass and the dispatch was at David's direct instruction.
Failure modeRe-prompting for permission at every intermediate stage of an already-authorized pipeline. The instruction-to-execute already authorized the chain; surfacing every artifact as a "want me to proceed?" prompt is the failure mode, not the safety. S120, 2026-04-26.
In practiceOnce David says "go" on a multi-task batch, the entire pipeline (brief, critic, fix, dispatch, ship) runs without per-stage gates. Re-prompt only on a critic returning a needs-major-rework verdict, a non-zero exit code, or one of the named destructive operation classes.
06
Verify the bytes
RuleA fix is not "cured" until the production data layer confirms the user-facing flow completes end-to-end. Sim verification, grep-HEAD checks, green CI, and merged commits-to-main are all necessary proofs. None of them are sufficient.
Failure modeThe S148→S166 in-app-purchase incident. The retro headline read "subscribe-500 cured at the secrets layer AND hardened on iOS." The caveat — "end-to-end IAP-flow validity still untested" — was buried as a footnote. Seven TestFlight builds shipped on that assumption. A direct database query at S166 (2026-05-07) showed zero rows ever in subscription, auth_events, or telemetry_event. The cure wrote zero bytes for the entire seven-build run.
In practiceEvery fix-claim pairs with a data-layer fact: row count, specific PostgREST query result, webhook event count, subscription state transition. Caveats go at the top of the retro, not the bottom. A separate pitfall catalog ships alongside the rule, with 26 specific traps (BSD grep -Z, xcconfig // URL truncation, SwiftUI NavigationStack inside if/else, PyMuPDF EXIF strip on FlateDecode bitmaps, and similar).
07
Ship before polish
RuleFeatures ship in this order: build, test in simulator, commit, push to TestFlight, then polish App Store Connect (screenshots, metadata, review notes, marketing copy). Never propose ASC chores while features are incomplete or untested.
Failure modeMid-feature, agents stall product work to suggest "let's set up App Store metadata." The framing "we can't ship without screenshots" inverts the value gradient — screenshots are cheap and last-mile; missing functionality is not. S139, 2026-04-30 — David flagged a sustained pattern; this rule was added to break it.
In practiceIf David asks "what's next?" mid-feature, the answer is the next code slice, not a metadata chore. The same shape applies to creative output: spend effort on editorial selection (what mattered, what was load-bearing for the next session), not on hitting word counts or character caps.
08
Instrument before iterating
RuleEscape patch-and-check loops fast. Five sub-rules bound the loop: stop on repeated stack signatures, escalate at iteration two, refute a dismissed hypothesis with a concrete experiment, ship diagnostics before a third behavior patch, and answer "symptom-vs-cause at the same architecture layer?" in every fix retro.
Failure modeS143 onboarding crash (2026-05-02): build 10, 11, and 12 shipped three timing-targeted fixes and crashed at byte-identical stack offsets each time. The architecture council that eventually returned a 4-of-4 consensus in 152 seconds for ~$2 of tokens would have prevented iterations 3 and 4 if invoked at iteration 2. Identical offsets in system frames meant the fix was targeting the wrong architecture layer; the actual cause was a NavigationStack in an if/else branch torn down by a parent re-render mid-mutation.
In practiceOnce a fix has failed once, it is by definition not a one-line fix; it's an open architectural question. The cure is mechanical: instrument with os_signpost on suspect-view lifecycle, render counters, and path-mutation logs in one TestFlight build, then read the ground truth.