Jaiva v1: what is done, what is left
15 of 27 release parts work today
slices A to D
- 15 working
- 6 built, switched off
- 6 planned
Release slices
The release proof: La Santa Picá gets ten scheduled posts in a row through this loop, and then a second client gets five. Slice E is in v1 but does not gate the release, so it stays out of the top bar. Open a slice to see its parts. Open a part to see its evidence.
A Generate a post, founder approves in Studio Done. You ran one real post on staging through generate, one pivot, admission and approval on 2026-09-27, and accepted the #979 generation proof. In production, Studio opened for both founders behind Google sign-in on 2026-09-27 (#1263), and it answers at studio.jaiva.cl since the same night (#1294). It is still empty. Since the 2026-09-28 production deploy, generation runs in production. Both provider keys are set (#1268 production provider keys). The two-minute schedule, the verified caption billing and the all-clients scope are live (#1269 production generation). The #1266 production client records form is live too, so any client you authorize there can generate, with no deploy per client. It still needs that first client: La Santa Picá. Since 2026-10-02 the «Preparar propuesta» panel (#1369 dish and proposal screens) is in production too, so you can add the dish and write the proposal in Studio once the kit is active. 12 of 13 working
Studio decision workspace: approve, correct or reject the exact versionworks
- What it does
- The founder sees one post, edits the caption if needed, and approves, corrects or rejects that exact version. Approval records a send intent and a ledger event in one transaction.
- Evidence
platform/src/lib/studio/studioPacket*.ts, from the Studio packet PRs #897 and #929.- Owner doc
- Spec 893 Studio packet contract
Brand kits with versions and pinned reference photosworks
- What it does
- Each client has a brand kit. Each change makes a new version. A founder activates one exact version, and it can pin approved client photos.
- Evidence
studioBrandKit.ts, tableclient_brand_kit_revisions.
Founder photo upload and "can we use it" decisionworks
- What it does
- A founder uploads client photos and marks each one usable or not. Only client-owned photos can be marked usable today.
- Evidence
registerFounderSourceAsset.ts, tablestudio_source_eligibility_decisions.
Studio login behind Cloudflare Accessworks
- State
- Works on staging and in production. Production (#1263 Studio in production) opened on 2026-09-27 with Google Workspace sign-in for the two founders only. Both founders signed in; other accounts are refused. Since the night of 2026-09-27 production Studio also answers at
studio.jaiva.cl, behind the same founder-only sign-in (#1294 Studio hostname). Both founders work there and a non-founder is refused. Packet commands and brand bootstrap are on in production since 2026-09-27 (#1267). Since 2026-09-28 the client records form (#1266) and generation (#1269) are live in production too. The production Studio stays empty until you write the first client (#1265 production Studio map). - Evidence
- #933 Studio login,
studio-auth.ts. - Owner doc
- Spec 933 Studio Cloudflare login
Generation run recordsworks
- What it does
- Stores every generation run and image attempt against the exact proposal version.
- Evidence
- Tables
studio_generation_runsandstudio_generation_attempts.
Image provider adapterworks
- State
- Merged in PR #1000 (#257 provider adapter). Real image calls ran on staging in the #979 generation proof, at $0.19 per image. See the #979 evidence.
- Evidence
platform/src/lib/imagegen/openAIImageProvider.ts
Durable image generation run in the cloudworks
- What it does
- Runs generation as a job that survives crashes: database-time claims, one-shot permissions, bounded storage recovery, tenant isolation.
- State
- Merged in PR #1049 (#258 durable generation). It ran on staging in the #979 generation proof. A database cut after the image call left that attempt marked "uncertain", and the next attempt succeeded. Staging generation is now on through settings kept in the repository (#1269 committed generation flags), so a deploy no longer clears it. Production generation is live since the 2026-09-28 deploy (#1269) and waits for its first client. The new Queue handoff (#1378) is implemented but off in both environments. It can advance one exact image or caption job per delivery while retaining database recovery state. On 2026-10-01 a staging test ran three packets through the Queue, and each got its image and its caption (Queue handoff #1378 evidence). Repeated and invalid messages started no paid call. When the Queue starts cold, it works on one image at a time first, so one packet waited about two minutes for another. Automatic repair (#1379 stranded-run repair) is merged and passed a two-packet staging test on 2026-10-02 (repair #1379 evidence). One packet lost its Queue message at the start, and the other lost its caption step. The next two-minute check finished both, and neither paid for a second image. Since 2026-10-02 the staging Queue flag stays on across deploys (#1489 staging flag durability). The 100-packet target (#1380 generation capacity) is unproven. See the #979 evidence.
- Evidence
studioGeneration.ts,worker.ts, migration 0036.- Owner doc
- Spec 258 durable generation
Caption written from the finished image, with a conflict holdworks
- What it does
- Gemini writes the caption after the image exists. If the caption conflicts with the menu facts, the post is held. A technical failure restarts only the caption and keeps the image and its cost.
- State
- Merged with #258 durable generation. Paid Gemini captions ran on staging in the #979 generation proof. A caption that passed its deadline was restarted from Studio, and the image was kept. The conflict hold has not been tested on staging. A separate staging-only Cloudflare managed caption route (#1378) is built and default off; production and the default remain direct. It retains the same model, request and retry limits and refuses old-route jobs before any new provider spending. On 2026-10-01 it wrote three captions on staging through Cloudflare, each in about 15 seconds. You have not judged their quality yet, and the approved three-packet test is used up.
- Evidence
geminiCaptionProvider.ts, tablestudio_caption_cycles.
Generate from Studio, then keep or decline the image and captionworks
- What it does
- A founder starts generation from Studio. The image and caption enter as one exact pair. A founder can decline a candidate and ask for a new creative direction for the same slot.
- State
- Merged in PR #1148 (#978 pair admission). You generated, pivoted once, admitted and approved on staging in the #979 generation proof. Nothing was sent or published. Production Studio had no screen to add a dish or write a proposal, so Nuevo paquete stayed empty. The «Preparar propuesta» panel (#1369 dish and proposal screens) adds both: you type the dish name and price, then pick the dish, the scheduled delivery and a kit photo. The server works out the rest. It is in production since 2026-10-02.
- Evidence
StudioDecisionWorkspace.tsx,studioPacketAdmission.ts, migration 0038.
Dated menu facts and approval guardsworks
- What it does
- Menu facts carry the date they take effect. A fact change cancels approvals for posts that are not yet published. Generation, admission and approval all check the facts.
- State
- Merged in PR #1039 (#977 menu facts). Generation, admission and approval checked the facts in the #979 generation proof. A fact change that cancels an approval has not been tested on staging.
- Evidence
studioMenuFact.ts, tablesclient_menu_fact_revisionsandstudio_packet_fact_invalidations.
Staging test-photo fixture and crash repairswitched off
- State
- Merged in PR #1001 (#976 fixture repair). Verified with simulated faults. The #979 generation proof used your own photo, so this fixture path did not run.
- Evidence
studioStagingGenerationFixture.ts
Read-only report for each post in a proofworks
- What it does
- Gives a founder one report per post, read from stored records: what ran, what it cost, what failed, what comes next. It never calls a provider or changes data. Missing evidence stays "unknown".
- State
- Merged in PR #1162 (#1160 packet report). The #979 generation proof posted a completed report and an interrupted report. The #985 client approval and #993 publication proofs add their own evidence.
- Evidence
GET /api/internal/studio/packet-report
Staging proof of the whole sliceworks
- What it proves
- A real generation run on staging, one complete and one interrupted, each with its report.
- State
- Done 2026-09-27. You accepted it. Your active time was about 10 minutes, and each image cost $0.19. See the #979 evidence.
- Links
- #979 generation staging proof · Spec 974 cloud packet
B Client approves the exact post on WhatsApp Inbound receipts, the proposal adapter and the bounded send sweep are built and switched off. Since 2026-10-04 a Meta test number reaches staging (#1539 staging WhatsApp line). Left: reply handling and the #985 client approval proof. 1 of 6 working
WhatsApp router: old-style post approvals and supervised repliesworks
- What it does
- Routes each incoming WhatsApp message on the shared number and lets a founder supervise replies. It records old-style post approvals from a button reply. It does not bind the reply to an exact packet version; slice B builds that.
- Safety change
- Live since the 2026-09-25 production deploy (#1195). Every AI draft now waits for León or Juanro; the router no longer auto-sends. No login-code (OTP) code exists, although the map once listed it.
- Staging line
- Since 2026-10-04 a Meta test number delivers to the staging Worker, and a founder text there gets a Gemini draft that waits for a founder (#1539 staging WhatsApp line). On staging the drafts call Gemini through the Cloudflare AI Gateway; production keeps the direct route (#1531 drafts through the AI Gateway). Merged code now records a supervised reply's outcome after the send (#1441, 2026-10-04) and removes the old
/inboxreply route (#1442, 2026-10-02). - Evidence
platform/src/lib/whatsapp/router.ts, ADR-0006.
Durable inbound receipts and crash recoveryswitched off
- What it does
- Stores every signed reply before Meta gets its 200. A recovery job every two minutes uses a recent wake marker to finish work a crash left behind, with bounded retries; hourly maintenance also checks for work. Signed replies, generation commands, send approvals, evidenced retry resolutions and source uploads establish that marker before creating work. Bursts reuse it for up to 30 minutes; an unverified wake refuses new work (#1371). This wiring does not turn on transport or upload recovery. A stored receipt never counts as an approval on its own.
- State
- Merged in PR #1180 (#981 durable inbound). Migration 0039 is on staging. Staging has the recovery flag and the two-minute schedule. It still does nothing until
WHATSAPP_INBOUND_DESTINATIONSis set on purpose. Production has recovery off. - Links
- Spec 980 inbound recovery · test-typing follow-up #1182 mock type fix
Proposal template and media adapterswitched off
- What it does
- Builds the exact image, full-caption, time and button request for Meta, with bounded typed evidence.
- State
- The adapter is composed by #983's Worker behind a default-off, staging/test-phone gate. Verification uses fake HTTP; no live Meta proof or activation is claimed.
- Evidence
packetProposalProvider.ts,metaPacketProposalProvider.tsandpacketProposalProvider.contract.md.- Links
- #982 Meta template and media
Send sweep, send recovery and test-phone gateswitched off
- What it does
- Sends each approved post once. A lost send result stays "uncertain" until evidence resolves it. On staging it sends only to an authorized test phone.
- State
- Merged PR #1198 contains the bounded sweep, private image checks with streaming size and time limits, inbound observation recovery and scheduled wiring. PR #1299 repaired fresh-provision runtime access. Studio shows prior attempts, operation outcomes, retry times, evidence and immutable resolution receipts. A lost response can reload and replay the same resolution without sending again. Since #984 a correction after an accepted send makes a new version inside the client's seven-day window and keeps the send history; an unknown send result still waits for founder reconciliation. Exact-head tests, build and independent review passed; migrations and the repaired grant are on staging. Runtime stays off because the enable flag and authorized test destinations are absent. No customer message or live Meta proof is claimed.
- Links
- #983 send sweep
Client reply: approve, ask for changes, sent correctionswitched off
- What it does
- Only the designated approver can approve, and only the current version. A change request pauses publication. Free text or silence never approves. After seven days without approval the post closes unpublished.
- State
- Built in the #984 pull request: the reply rules, the change pause, the seven-day clock from the first confirmed delivery, the sent correction, the Studio panel "Decisión del cliente" and founder alerts. The
client-packet-decisionjourney proves it end to end against the fake Meta. It stays off because packet sending is off on staging. #991 now admits the publication intent atomically. Publication stays disabled until #992 supplies execution and its final permissions. - Links
- #984 client reply and change pause
Staging proof of the whole slicewaits on you
- What it proves
- The same post from the #979 generation proof reaches a real test phone and a real button reply comes back, with the report extended.
- Left
- #984 client reply is built and switched off. From you: the Meta template and one enrolled founder phone. The staging number secrets are set since 2026-10-04 (#1539 staging WhatsApp line).
- Links
- #985 client approval staging proof
B2 Publish once, at the agreed time Publication intent and publication workflow built, disabled; they run only in the test build. Left: a founder decision on the deploy binding, and the #993 publication proof. 1 of 5 working
Zernio client, publish and reconcile effectsworks
- What it does
- Publishes to Instagram through Zernio and reconciles the result. Proven on staging on 2026-07-04 with the older manual path. The new sweep will use it.
- Evidence
platform/src/lib/zernio/,platform/src/lib/effects/. The separate Jaiva-owned service under Replacement map #1320 now has connection, encrypted token custody, queued publication and dated account snapshots on main (Secure connection #1384, Durable publication #1385, Account snapshots #1386), with 343 controlled tests and real PostgreSQL passing at the reviewed OAuth adapter revision. Replays return the same stored post; an uncertain publish result pauses for reconciliation. Snapshots keep real zeros and leave missing values absent; account totals do not prove one post's performance. The staging service is deployed. Its database and queue are provisioned, secrets installed and rollback exercised. Service-owned OAuth now succeeds with separately verified app-scoped and professional IDs. Account listing proves the selected fixture is active; all three actual permissions and encrypted token custody with future expiry are verified. The founder-approved neutral image is now visible on the staging fixture with the exact caption. Replay returns the same post and media; changed content and conflicting request headers are rejected. One genuine account snapshot for September 30 is stored with four provider-supplied zeros and no unavailable metrics. It is an account observation for the previous day, not performance evidence for the new post. The offline build draft records its scope; the staging run draft plans one post and a snapshot on@jaiva_staging_fixture. B2 and the platform collector use Zernio. The production service now runs onhttps://social.jaiva.clwith its own database, queue and secrets (Production bring-up #1430). It has no connected accounts. Its separate Meta app, Jaiva Social, still needs App Review before any client connects.
Public media copy with a hash checknot wired in
- What it does
- Copies the approved image to a public address and checks it byte for byte. The receipt proves the copy, never the post.
- State
- Merged in PR #1117 (#990 media copy). The #992 publication workflow calls it, in the test build only.
- Evidence
publicPacketMediaCopy.ts, tablestudio_public_media_copy_receipts.
Publication intent and timing guardbuilt, disabled
- What it does
- Client approval records one intent and window at the original time. Late processing pauses for founder review; a second tap changes nothing. The occurrence guard preserves possible or confirmed publication across successors.
- State
- Built in the #991 change. Studio shows original Santiago time, scheduling, guard and next actor. Publication is disabled in both environments, with no scheduler adapter or provider call. #992 adds execution; #993 proves the real loop. A new time and founder release remain #1861.
- Links
- #991 publication intent · Spec 989 publication
Publication workflow and recoverybuilt, disabled
- What it does
- Publishes at the due time, rechecks the change pause last, and never repeats a create call that may have gone through. Unclear results go to a founder in Studio.
- State
- Built in #992. It copies the image and publishes once, each step under its own one-use permission. The client's change pause and the occurrence guard are checked last. Results bind to their own window. Studio and the report show the copy, the provider ids, the observations and the incidents. It runs only in the test build: no deployed Worker has the workflow binding yet, and that waits on a founder decision.
- Links
- #992 publish sweep
Staging proof: one real post, and crash testswaits on you
- What it proves
- One real post on the throwaway Instagram, with outside evidence, and recovery at the dangerous crash points.
- Left
- #992 publish sweep and the #985 client approval proof done. From you: the staging publish target and the real staging bucket URL.
- Links
- #993 publication staging proof
C Client accepts the plan and pays Not started. The spec waits on the La Santa Picá agreement and the Mercado Pago answers. 0 of 1 working
Accept-and-pay link, charge and reconciliationwaits on you
- What it does
- One link where the client accepts Plan Base and saves a card. Jaiva charges once a month on the anniversary through Mercado Pago, and reconciles the charge.
- Left
- Spec not written. From you: the La Santa Picá transitional agreement and the date of its next paid period.
- Links
- #881 acceptance and charge · Spec 836 v1 product
D Midpoint and closing reports Metrics are collected today. The report spec comes after the #993 publication proof. 1 of 2 working
Metric snapshots from Zernioworks
- Evidence
- Table
metric_snapshots, effectcaptureMetricsSnapshots.
Midpoint and closing period reportsplanned
- What it does
- Two reports per service period for the client. Each is written after its window closes, and a founder approves it before it goes out.
- Left
- Spec not written. It follows the #993 publication proof.
E Client Delegate: an agent talks to each client for us Not a release gate. Research, your #1169 decisions and ADR-0030 are done. The #1172 prototype is judged and closed. Left: your decisions on the proactive-message amendments and on the Delegate tool shape, then the phase-1 spec and the Capability Surface. 1 of 6 working
ADR: the Client Delegate pattern and its authority matrixdecided
- What it does
- Records what the Delegate may do for a client, what only the client may do (approve, accept, pay, cancel), and what only founders may do. It retires the "Orchestrator" name.
- State
- Drafted as ADR-0030, ratified 2026-09-24. It records your #1169 authority matrix and send gate decisions: each send waits as a pending intent that either founder approves on an Access page.
- Left
- Nothing. The phase-1 spec builds on it.
Client Capability Surface: an MCP server scoped to each client, on stagingplanned
- What it does
- The one door the Delegate uses to act for a client. It takes the client from the caller's token, never from a tool argument, so one client's message can never reach another client's data. Studio keeps its own routes: your 2026-10-02 decision scopes the Surface to the Delegate only, so founder-only actions such as packet approval and generation are never Delegate tools.
- State
- Inventory done: #1171 capability catalog (merged in PR #1184). It found that no WhatsApp send passes the effect chokepoint today, and that Studio routes take the client id from the caller. A backend audit on 2026-10-02, challenged by two independent reviewers, found the base ready: business rules sit in plain functions with typed results, commands are safe to retry, and the database already accepts Delegate ledger records. The Delegate functions themselves do not exist yet. They will be new code beside Studio, not a rewrite of it.
- Left
- The #1174 MCP server research is done, and ADR-0030 is ratified. Left: the phase-1 spec and tickets. Before them: your decision on the tool shape (#1214) and #1444 a check of the live database role. Done since 2026-10-02: #1445 Delegate kind in the ledger code, #1442 inbox reply sent with no record (the route is gone) and #1441 supervised reply logged as sent before it is sent (fixed 2026-10-04).
Phase 1: founders run the Delegate from their own computersplanned
- What it does
- A founder-guided Claude Code or Codex session answers and follows up with one client. A founder approves every send. Every send is ledgered and gated on the server.
- State
- Research done: #1175 workstation operation and #1176 context, memory and injection defense.
- Left
- The #1172 La Santa Picá week prototype closed on 2026-09-26 with León's verdict. Draft PR #1243 holds the phase-1 staging contract. Unsolicited client text still has no processing path, so the phase-1 spec must give it an owner. Real sends also need the #985 client approval proof.
Proactive messages: trigger catalog and Meta templatesplanned
- What it does
- Heads-ups, follow-ups and suggestions, each tied to an approved template, with a frequency cap and a budget per client.
- State
- The #1170 Meta template and window rules in Chile research is done. Suggestions go only inside an open 24-hour window, v1 has no marketing template, and templates outside the window stay factual. The rule: the client's opt-in must be recorded before the first proactive message.
- Left
- A decision on the ADR-0030 amendment in #1242 proactive recommendations and check-ins (draft PR #1245) and on #1254 shared proactivity accounting. Then the gate in #1255 consent, cadence and budget and #1288 consent capture in onboarding. Nothing records client opt-in today. The price of free-form messages after 2026-10-01 is open in #592 WhatsApp pricing.
Stop the old router auto-replying on the client lineworks
- What changes
- #1195 removed model auto-send from the router and queues every draft for founder approval. It is live in production since the 2026-09-25 deploy.
- Evidence
- #1195 founder approval for every draft,
platform/src/lib/whatsapp/router.ts.
Phase 2: hosted Delegate, still supervisedlater
- What it does
- The Delegate runs hosted and drafts; a founder approves each send. Each message type moves to auto-send only on its own written record.
- Left
- Research opens after phase 1 has run. The founders decided a scoped API-key exception for this agent only.
- Links
- #1168 Client Delegate map
7Waiting on you
packet_proposaltemplate written and sent to MetaUnblocks the #985 client approval proof. Meta review takes days- One founder phone enrolled as the staging approverUnblocks the #985 client approval proof
- Staging publish target set to the throwaway Instagram, and the real staging public bucket URLUnblocks the #993 publication proof
- La Santa Picá transitional Plan Base agreement and next paid period dateUnblocks slice C, accept and pay
- Decide the proactive-message amendments in #1242 and #1254Unblocks slice E: the ADR-0030 amendment and the phase-1 spec
- Decide the Delegate tool shape on #1214Unblocks slice E: the Capability Surface tickets in the #1238 phase-1 spec
- Que Panzza October renegotiation outcomeNeeded before Que Panzza counts toward the release proof
Around the loop
These parts feed or support the loop. They do not count toward the release bar.
Sales WhatsApp with founder approval Planned for the Sales number. Prospect messages, founder decisions and client operations will use separate lines and records. 0 of 1 working
Remember Sales conversations, propose replies and ask a founder before sendingplanned
- What it will do
- Keep an evidence-linked Sales conversation, draft one reply and an optional action, then show the exact proposal to León and Juanro on a separate Control number. An agent reply reaches a prospect only after a current structured founder decision and a final check of conversation freshness and Meta's 24-hour window.
- Number choice
- Prefer the existing Sales number only if official Business App and Cloud API coexistence is proven. If that fails, the existing number stays manual while a separate API-only Sales number is evaluated.
- State
- The architecture and supervised flow are defined in #782 and ADR-0029. The separate inbound transport for Sales and Control is being built switched off under #528 source-isolated transport. As of 2026-10-05 its receipts, recovery and the enabled route are merged. The enable flag is absent everywhere, so none of it runs. Production is still at migration 0051, and the newer migrations wait on your production dispatch. Health checks, Sales and Control configuration, the staging proof, the retention schedule and real number setup are still pending. The client approval line is a separate domain.
Photos, references and prospects Client photos and prospect pages work. The source registry is built and proven on staging with test data. The reference collector is built with collection off; production waits on founder gates. The queue is planned. 1 of 4 working
Pitch pageworks
- Evidence
platform/src/pages/p/[token].astro, ADR-0023. The prospect bootstrap code was never wired in, and #1208 deleted it.
Reference briefplanned
- Evidence
- The migration 0022 tables stay. The first-stage code had no caller, and #1208 deleted it. The matching step is planned.
Account registry, Apify collector and Studio reference queueplanned
- What it does
- Collects public Instagram posts from reference and prospect accounts through Apify, with no Meta login. Founders approve or reject each one in Studio. Authorized photos, actual Reels and captions can enter Brand Kit analysis through customer-isolated custody and temporary run/snapshot/attempt access. Marketing-image generation retains its separate source_assets authorization gate.
- State
- The registry part is built. #1106 source registry closed on 2026-10-05 after PR #1328 and five follow-up PRs. It stores one shared identity per account and separate media per client and per rights class. Captures cannot change class or content after they are stored. The marketing generator refuses captured media before any provider call. The private staging buckets exist (#1479). A staging run with test data proved separate objects per client, a separate prospect bucket, a refused alias and a replay that finalizes once (#1106 closure). Production buckets, bindings and migrations wait on the founder gate. The bounded Apify collector for reference accounts is built, with collection off (#1107, #1110). Its production code is ready behind the founder gates (#1858); the production bucket waits on #1859, and the founder runs the enablement runbook. The Studio queue and the Brand Kit builder reads are not built.
- Links
- #1004 source-account registry · ADR-0028
Ask a photographer for permissionplanned
- What it does
- Ask the author of a third-party photo. Yes: use it and tag them. No answer: look-alike only, no pixels. No: never use it.
- Links
- ADR-0021
Brand Kit builder candidate On 2026-10-02 staging runs made a draft, took a founder edit, activated it, refreshed it, and wrote one post whose caption used the active voice. Staging flags stay on across deploys (#1489). Video analysis is still open. Prospect conversion remains planned. 0 of 3 working
Draft Brand Kit from scoped evidenceoff
- What it does
- The candidate reads authorized photos, video, PDF and text through a private scoped bridge. Missing sources stay as gaps. Studio shows the draft, its evidence and its history. A founder edits fields, and each edit makes a new version that protects the edited field. A founder activates one exact version. Registry PR #1328 (#1106), merged on 2026-10-02, adds producer pins for per-client photos, Reels, PDFs and captions, with temporary reads bound to the exact run, snapshot, attempt and grant. The builder does not read from the registry yet.
- State
- Generation runs through the Worker AI binding, one call per try. On 2026-10-02 one controlled run on a test client made a draft that cites photos, the menu PDF and text. A founder edit, an explicit activation and a refresh followed. The refresh kept the founder's voice text and offered its own text only as a suggestion. The model did not cite the test video, so video analysis is not proven. Execution is on in staging, and the staging deploy keeps it on (#1489). See the staging proof 2026-10-02.
- Links
- #323 Brand Kit builder · Studio contract · HTTP 403 evidence and limits
DESIGN.md rendered from each kit versionoff
- State
- In staging, the DESIGN.md file saved for the active version matched two local renders byte for byte. It is stored under the client's own folder.
- Links
- #264 revision-bound DESIGN.md. Neon stays the source of truth.
Verbal identity: voice rules for posts and messagesoff
- State
- Schema2 voice, audience and direction are implemented. On 2026-10-02 one staging post ran image and caption. Its caption used the active version, its hash and the founder-edited voice. See the caption proof.
Platform foundations The ledger, kill-switch, stand-up reads and the Studio change feed work. Ledger coverage is partial, and the kill-switch covers publishing only. 4 of 4 working
Typed effect chokepoint that writes the ledgerworks
- What it does
- Typed effect functions write the
domain_eventledger in the same transaction as the change. Studio packet commands also ledger in their own transaction. - Gap
- Coverage is partial. Supervised WhatsApp replies write a ledger row after the send (#1441), but only publishing passes the chokepoint and kill-switch. Since #1195 the router sends no AI reply without a founder. Source: #1171 capability catalog.
- Evidence
platform/src/lib/effects/, ADR-0012.
Kill-switchworks
- Evidence
- Effect
killSwitch. Proven on staging on 2026-07-04. - Gap
- It stops publishing only. No WhatsApp send checks it yet.
Stand-up snapshot and source health readsworks
- Evidence
platform/src/lib/standup/. Read only. Staff agents observe and never approve or publish. Version 3, merged on 2026-10-03, also counts each client's ready and planned posts from Jaiva's own schedule, without Zernio (#1429 stand-up runway). It needs migration 0058, which production does not have yet.
Studio change feed for live updatesworks
- What it does
- Keeps one change counter per client. An open Studio checks it every 5 seconds and reloads only what changed. It pauses after 5 minutes without input behind «Pausado · Actualizar» and catches up on the next input.
- State
- Works on staging since 2026-09-28. A change from another tab showed in 2.6 seconds and pipeline steps in about 2 seconds; see the #1283 evidence. Production has the tables since 2026-09-28. Studio images now answer a repeat request with 304 and no image bytes when they did not change; checked on staging on 2026-09-28. Admitting a packet works on staging since 2026-09-29: a new candidate got its caption on the third attempt after two Gemini outage replies. Studio also fetches the next two review images in the background; on a wide screen the small pictures in the list already download them, so the gain shows mainly on a phone.
- Evidence
GET /api/internal/studio/changes, tablesstudio_change_logandstudio_change_cursors.
How agents ship code Automatic review levels are live since #1159 ceremony tiers. Since 2026-10-03 every staging deploy is checked, and a bad one is put back (#1459 staging smoke). 2 of 2 working
Pull request ceremony tier from changed pathsworks
- What it does
- Reads each pull request's changed paths only to choose T0, T1 or T2. T2 paths need a founder merge. No model grades pull requests, no tests are locked and there is no separate verifier. The implementer writes product UI journeys in the same pull request. Production, customer contact and publication stay human-gated at every tier.
- Evidence
- Changed-path rules in
platform/scripts/ci/ceremony-tier.ts. The verifier lock, verifier-first T2 journeys and founder test approval were deleted on 2026-10-09 (#1840, #1841), under #1836 deletions 1–4. Repository policy
Staging check after every deploy, with automatic put-backworks
- What it does
- After each staging deploy, a test account signs in to Studio, makes a post from a fixed test photo and approves it. If any step fails, the deploy is undone and the version from before comes back. It uses one staging test client with no Instagram connection, so nothing is sent or published. Production is never touched.
- Evidence
- On 2026-10-03 a release broken on purpose (PR #1532 restore drill) was caught 1.7 seconds after the deploy and put back 3.4 seconds after it. The next deploy (PR #1537 drill revert) passed all three steps. Publishing joins the check later (#992 publish in the smoke). #1459 staging smoke · runbook
After the release Client dashboard, portal login and self-serve cancellation. 0 of 1 working
After release: client dashboard, portal login, self-serve cancelplanned
- Links
- Spec 836 §3