Answer
One record per big technical call, each with its context, the decision, what follows from it and the date, so no session re-decides a settled thing without new facts.
Today
DR-1. A realistic prototype, cut to one flow
- Date: 15 Oct 2026. memory brew-prototype-repo
- Context: the old
feed/repo had grown Do it now, measurement, sending and Arata-as-code. Param: "we are building a realistic prototype". - Decision: a new repo
brew/with one flow, read, Plays, feed, jam, share the brief. Cut: Do it now, writing to accounts, sending to customers, measurement, audit Plays, the free cap. Dummies are tagged in three places. brew/SCOPE.md brew/CLAUDE.md - Consequences:
feed/archived (tagarchive-2026-10-15); old surfaces retired; leftover code from cut features remains (see Tech debt).
DR-2. Read-only connectors, built by us
- Date: 16 Oct 2026. memory brew-real-connectors
- Context: real brand data was the biggest blocker; Composio was proposed.
- Decision: no vendor. Revive our own connectors, read-only scopes only; Brew never writes to an account. brew/SCOPE.md brew/connectors/shopify.js:13
- Consequences: each platform's approval gates us directly (Google verified 21 Oct; Shopify submitted 21 Oct; Meta blocked on business verification). Do not propose vendors again without new facts.
DR-3. Gemini Flash while building, Pro for Plays
- Date: 16 Oct 2026 (Flash), 20 Oct 2026 (Pro for Plays). memory brew-gemini-provider memory brew-pro-switch-and-flush
- Context: Anthropic credit at $0; Google credits about $20,763 of $25,000 left, ending 2028-05-19.
- Decision:
AI_PROVIDER=gemini;gemini-3.5-flashfor everything except Plays, which useGEMINI_MOVES_MODEL=gemini-3.1-pro-preview.AI_PROVIDER=anthropicswitches back. brew/moves-engine.js:17 brew/deploy.sh:39 - Consequences: Plays are shorter and more generic than Opus (20 Oct: median 2,250 vs 5,450 words); the weekly rewrite pot is $40 on Pro, $10 on Flash. The launch model is still open.
DR-4. Deploys never wait
- Date: 16 Oct 2026, commit 522662c. memory brew-pro-switch-and-flush
- Context: a deploy guard waited for background work; Param: "continuous deployment is part of development".
- Decision: remove the guard; SIGTERM stops new work and the next instance resumes. brew/CLAUDE.md
- Consequences: every background run must be resumable and never pay twice; never re-add a wait or gap.
DR-5. Every Play is kept; make each cheaper
- Date: 15 Oct 2026. memory keep-all-moves
- Context: a "planner picks about 10 Plays" option was proposed to save cost.
- Decision: keep all Plays; cut tokens, caching and repeat evidence calls; PDFs only when opened. memory brew-lean-pipeline
- Consequences: cost work targets per-Play spend and the rewrite pot.
DR-6. Sloosh makes finals, quote first
- Date: 16 Oct 2026. memory brew-sloosh-finals
- Decision: drafts stay on Gemini; Sloosh makes go-live finals only behind Make the final, after a quote and a yes; chat never spends; Gemini fallback while the workspace cannot pay. brew/SCOPE.md
- Consequences: finals keys written before paying; production runs with Sloosh off (25 Oct). git 0fc7cfc
DR-7. One version, then Redo it
- Date: 19 Oct 2026. memory brew-one-version
- Decision: never several options to pick from; one version and Redo. A/B decisions and test batches are not options.
- Consequences:
MAKE_N1; saved "3 versions" text heals on read.
DR-8. Plays start on the first feed open
- Date: 22 Oct 2026. memory brew-feed-open-moves
- Decision: a brand's first read writes Plays only after someone opens the feed after onboarding (
feedGate). brew/SCOPE.md - Consequences: corrections made while waiting reach the brief first; two reminder emails.
DR-9. Protected connections
- Date: 22 Oct 2026 (rule), 25 Oct 2026 (in code, rev 00710). memory never-disconnect-arata-meta memory brew-prod-backend
- Context: Arata is the client going live; its Meta account act_2942894532542334 drives the private rewrite of its Plays.
- Decision: never disconnect, re-select or reconnect Arata's Meta or Shopify.
PROTECTED_CONNECTIONS(defaultarata-in) refuses those actions unless a root admin forces it; the vault refuses to drop the token. brew/connectors/protected.js - Consequences: disconnect tests run on Cozy; Arata's vault is shared between staging and production rather than reconnected.
DR-10. Postgres over the bucket
- Date: 16 Oct 2026 (not yet, not Supabase), 25 Oct 2026 (Cloud SQL, approved and live). memory brew-storage memory brew-prod-backend
- Context: whole-file writes to
gs://brew-prototypewere last-write-wins and safe only with exactly one instance. - Decision: Cloud SQL Postgres in asia-south1 on Google credits, not Supabase. First step: every structured object as a row (
objects), big documents in parts (doc_parts), binaries in the bucket; the bucket mirrored as the way back. brew/db/migrations/001_objects.sql brew/db/migrations/004_doc_parts.sql - Consequences: more than one instance became possible; per-domain tables are still to come; the bucket-era tools (
reset-jams.sh,reset-brand.sh) no longer work on Postgres sites; since 26 Octdb/reset-brand.mjsanddb/delete-brand.mjsreplace the brand ones, which now exit 3 unlessSTORAGE=gcsbrew/tools/reset-brand.sh:11-19; brew/db/reset-brand.mjs:1-11.
DR-11. Web and worker roles with one lease holder
- Date: 25 Oct 2026 (Phase 2, rev 00707). memory brew-prod-backend
- Decision:
ROLE=web|worker; one worker holds a Postgres advisory-lock lease and alone runs timers, resumes and paid watchers; web instances ask the worker through a Postgres job queue. brew/roles.js:1-9 brew/jobs.js:1-8 - Consequences: production runs 2 to 10 web instances and exactly 1 worker until per-brand build leases exist.
DR-12. Production on feed.joinsquareup.com, staging on brew
- Date: 25 Oct 2026. memory brew-prod-backend
- Decision: production is
brew-webplusbrew-workeron its own database, bucket and identity; staging isshopos-feed; production is released only by promoting staging's exact image. brew/.wt-prod/docs/production.md - Consequences: two sites to keep in step for sign-in callbacks and Slack; a moved-brand rule decides each brand's home.
DR-13. Nothing dummy or test reaches production
- Date: 25 Oct 2026. memory prod-clean-only
- Decision: production never runs demo, mock, dev sign-in, open-site or simulated connectors; a clean gate in every promote refuses any finding. Four kept exceptions decided one by one. brew/db/prod-clean.mjs:1-6
- Consequences: test brands stay on staging; partner copies exclude testing data.
DR-14. Every partner's home is production
- Date: 25 Oct 2026, 20:40 IST, commit 119dc8a (it reversed deb7d90 from 20:11). git 119dc8a, deb7d90
- Decision: Arata, Nutrova, Mana, PUMA India and Scrubroom onboard on production; staging lists all five in
MOVED_TO_PROD; production'sSTAGING_HOMEis empty. brew/deploy.sh:39 brew/tools/prod-env.sh:9 - Consequences: staging is for testing only; the reverse list stays in code, empty.
DR-15. Retire Jam v2's own screen
- Date: 25 Oct 2026, commit 9ee9d14. git 9ee9d14 memory brew-one-stage
- Context: v2 was locked behind
?v=2on 22 Oct; on 23 Oct Param ruled no v2 jam inside v1; two jams confused people. - Decision: remove
?v=2,window.Jam2andpublic/jam2/jam2.js; every card opens v1's jam, whose Set-up drives thejam2/Studio engine. - Consequences:
jam2.css,scene.jsand the/api/jam2routes stay; v2-only routes remain mounted until shared links are checked.
DR-16. No Gmail scope for briefs
- Date: 23 Oct 2026. memory brew-brief-mode
- Decision: briefs open in Gmail by a compose page with the files downloaded, or as an .eml draft; no
gmail.compose, which is a restricted scope needing a yearly assessment. - Consequences: Google verification stays at two scopes.
DR-17. Brew stays independent of the sister company
- Date: 24 Oct 2026. memory brew-qa-round2-2026-10-24
- Decision: no new ties to the sister company or its studio, Sloosh; existing ones (Send brief to our team, Sloosh finals, the staff domains) stay.
- Consequences: new features never depend on those services.
Tomorrow
| Item | Version | Tag |
|---|---|---|
| A record for every new big call, written the day it is made | v1 | New |
| DR-3 revisited before client launch (launch model) | v1 | Changes |
| DR-11 extended with per-brand build leases | v2 | Changes |
How we do it
- A decision is big if it changes storage, roles, a provider, scope, access or what reaches production.
- Write the record the same day with context, decision, consequences and date, each sourced; add it to
content/company-and-strategy/decisions-log.mdtoo. - A record is replaced only by a newer record that names it; never edited away.
Numbers
Not applicable: decisions are records, not metrics.
Open
- Which model writes Plays at launch? Proposal: Opus with Anthropic credit, after a 5-Play blind test against Pro (about $1).
- Should DR-17 also cover Sloosh finals on production? Proposal: yes, keep finals on Gemini on production until Param says otherwise.