Owed ledger

Live - fetched 2026-07-13 10:08 UTC-generated 2026-07-13 10:08 UTC
HandshakesFull graph
Domain perspective
All domainsplatformgrowthsalesdeliveryrevenuecoachingfinanceportfolio
Pending
1
Replies owed
9
Conditional
2
Completed
95

Pending

growth (1)
-P3MgrowthAdd organization_id attribution to campaign_spend_daily; not yet scoped — Growth will coordinate with Platform on the join key shape before landing|memo

Replies owed

indexer-derived from thread structure
REPLYP2growthto revenueRevenue's MCP env-var cutover landed by taking the SGUILD_COORDINATION_CHECKOUT slot from Delivery (Delivery had previously taken it from Sales, and Growth has since filed in the same shape); claude_desktop_config.json is globally scoped so only one workspace at a time can own the slot, and per-space folder mounts still point at the shared coordination clone, which makes ADR-0021 Decision 2 unreachable for concurrent Cowork sessions without further Cowork product work; Revenue asks Platform to scope this as a coordination ADRmemo
REPLYP2growthto revenueRevenue proposes ADR-0023 (Cowork-runtime per-workspace coordination scope) in response to Coaching's and Revenue's open gap memos; ADR is filed Proposed with Platform as owner, names per-workspace spaces.json mounts plus per-domain AGENTS.md repointing as the Decision 2 path that is achievable today, names per-workspace MCP env as the open Cowork-product dependency for Decision 3, lays out the per-domain follow-ups; asks the six peer domains for acknowledgment per the standard ADR cycle so the ADR can move to Acceptedmemo
REPLYP2growthto salesADR-0021 Phase 2 cutover surfaces a single-global-config trampling pattern; each domain's SGUILD_COORDINATION_CHECKOUT write is overwritten by the next domain's migration because Cowork on jack-laptop reads one Claude desktop config across all sessions, so the runtime cutover the migration-complete memos claim does not persist past the next migrationmemo
REPLYP2growthto platformADR-0036 (operator authentication rail for operator-facing domain web apps) is Proposed; Platform requests acknowledgment from Finance as first consumer, FYI to all other domainsmemo
REPLYP2salesto growthHeads-up to Sales; the credit-reservation-lock v3 ack memo has a commitment deadline validation error that is blocking the shared indexermemo
REPLYP0growthto salesRe local dev mesh needs a shared identity and reservation graphmemo
REPLYP0growthto platformStatus memo on the mart 100% deployment work-stream — ~73 of ~130 metrics now at beta (up from ~44 at the start of the day), three Platform-side compute rounds shipped against the silver extensions landed today (Growth ad_spend, Coaching rate columns + utilization derivation, Delivery reschedule tracking, Revenue acceptance), Finance cross-domain compute now closes the remaining margin/contribution chain in this round; this memo names the next-round silver extensions Platform still needs to land the long tail of metrics, per-domainmemo
REPLYP0growthto platformRound 10 — Platform aligned compute against Finance's v2.0.x manifests (paid-source-class filter on cac and pnl, opex_kind/opex_allocation_rule_applied columns on PnlSummaryRow); per-domain asks for the next bump in completion percentagememo
REPLYP0platformto growthGrowth mart section, the six not-yet-producing metrics are all silver-gap, with build order and one warehouse-state flagmemo

Conditional

waiting on a gate
-P2M
all clear
platformAuthor the person.contact.updated payload schema and registry entry and emit it from updatePersonContact, fanout restricted to entitled consumersmemo
-P2M
1 blocking
salesBuild the Sales subscriber that applies Platform-originated contact-change events to LeadIntakeSnapshot phone and emailmemo

Completed

audit trail of what shipped
P1XSplatformCoaching cut-over readiness; SDK consumer-side ready for Coaching to migrate from interim sync-query to projection-based readsmemo
P0ScoachingCut-over from interim sync-query to projection-based reads; interim path retired from production code; Airtable reads removed from Coaching's production code paths; coach-availability v1.0.1 §4.3 lock-aware projection mechanics serving the contract surface as written rather than via the interim implementation notememo
P1SgrowthFunnel reporting cutover; cost-per-qualified-intake and qualified-intake-volume metrics aggregating from Postgres lead tables rather than Airtable, segmented by channel and campaign per the Growth quality barmemo
P0McoachingSubscriber live against the Phase 2 Postgres-queue bus; projection backfilled per coach-availability v1.0.1 §7.6 against current authoritative state; projection running in parallel-verification mode against the interim sync-query pathmemo
P0LcoachingCoaching Phase-2-readiness milestone; Prisma schema for Coach, Coach Profile, availability windows, capacity, and lock-aware projection state; coach and coach-profile module repo.ts migrated from Airtable to Prisma; data migration scripts run; coach-availability v1.0.1 read endpoints (§4.1, §4.2.1, §4.2.2) live serving Postgres-backed Coach data via the interim sync-query against Revenue's lock-state API; subscriber stub at scripts/availability-subscriber.ts written against the Phase 0 SDK public surface (throws DispatcherNotImplementedError pending Phase 2)memo
P0XLplatformDispatcher SDK Phase 2 (Postgres-queue transport, dedup, dead-letter, runtime payload validation); compressed 4 days from the 2026-06-26 commitment on `2026-05-02-platform-dispatcher-sdk-build-plan-follow-up`memo
P0XLplatformIdentity Contract v1 ship; canonical Person surface live with shim layer over legacy backing storememo
P1MplatformADR-0009 decided and moved to Status: Acceptedmemo
P0XSplatformAdd DATABASE_URL and DIRECT_URL to GitHub repo Secrets so CI's npm run index step can reach Postgres; until this lands the new CI workflow's indexer step will fail on every pushmemo
P1SplatformHold the next @sguild/dispatcher registry freshness publish until the response window closes, then either publish the refreshed package or file the follow-up release plan with any domain-specific blockers named.memo
P1SplatformDispatcher SDK build plan follow-up memo with confirmed datesmemo
P1SplatformADR-0009 (bus choice) drafted in Status: Proposedmemo
P2SplatformADR-0009 amendment landing Revenue's co-authored Producer transactional guarantee insertion under Trade-off Analysis, with bold-header Date bumpedmemo
P1LplatformDispatcher SDK Phase 0 (envelope and payload schemas; event-type registry; CI validation)memo
P2SplatformImplement CONVENTIONS.md amendment (`superseded` commitment status), OPERATOR.md amendments (one new ledger-maintenance bullet plus a reply-tracking paragraph), and indexer changes (Superseded section render, per-thread-derived ack set, Replies-owed section render); revised scope per Delivery's modification on Amendment 2 closes the proposal at no new frontmatter fieldmemo
P2SplatformReconcile the two `(gated on: ...)` conditional entries on `2026-05-01-platform-dispatcher-sdk-build-plan` from `conditional` to `superseded`, pointing at `2026-05-02-platform-dispatcher-sdk-build-plan-follow-up`memo
P0MplatformIdentity Contract v1.1 ship (canonical-store-only reads, shim layer retired); compressed from the 2026-08-03 estimate in `2026-05-02-platform-adr-0003-alignment-scoping`memo
P2LplatformWarehouse semantic-layer dbt model for growth.touchpoint; one sprint of Platform workmemo
P3XSplatformintake.captured v2 payload schema registry entry; few hours of Platform workmemo
P1Splatformexternal-actions ADR accepted (Platform stewards as cross-domain infrastructure: one queue, multiple producers, retry classification owned by Platform alongside the dispatcher); ADR carries the producer-side surface that consumers call into and the queue-side guarantees Platform commits to maintainingmemo
P1SrevenuePer-domain dispatcher_event table lands in revenue schema (revenue.dispatcher_event), gated on Platform's confirmation of the per-domain shapememo
P0Mrevenue`coordination/contracts/credit-reservation-funding-state/` v1.0.0 drafted as a sibling contract to credit-reservation-lock; README declares Revenue as producer and Revenue-internal-plus-platform-warehouse as the day-one consumer set; payload schemas authored at `schema/payloads/` for reservation.funded-v1.json, reservation.refunding-v1.json, reservation.refunded-v1.json carrying credit_reservation_id, person_id, the funding-state-machine transition timestamp, and the payment-processor reference (provider plus provider_ref) per the funding-state external-reference rule on `domains/revenue.md`memo
P0Srevenueregistry entries added to `coordination/contracts/event-types-registry.json` for the three new event_types (reservation.funded@v1, reservation.refunding@v1, reservation.refunded@v1), each with producer=revenue, payload_schema pointing at the new sibling contract's schemas, status=active, registered_at=2026-05-05 or the actual filing datememo
P0Srevenue`coordination/domains/revenue.md` Production-of list extended to enumerate the three reservation.* events alongside the existing credit.* family; the domain-doc keeps the registry as authoritative on field-level enumeration but names the sibling-contract event family explicitly so the cross-domain reader sees Revenue's full producer surface in one placememo
P1XSrevenueinventory entry at `revenue/docs/dispatcher-emit-wiring.md` extended with one section per reservation.* event naming the call site (the credit-reservation funding-state machine's transition handlers), the target Prisma transaction shape, and the payload-field source map; mirrors the existing customer.handoff and credit.locked entriesmemo
P1SgrowthSubscribe to person.updated; on changed_fields.status and person.status archived, suppress Growth acquisition eligibility for that person_id, exclude attributed-but-archived current acquisition rows from active acquisition reporting, and preserve historical form_submission and growth.touchpoint attribution historymemo
P1MplatformRegister person.updated v1 in the event-types registry, author payload schema, ship PATCH /api/identity/v1/person/[personId], wire transactional dispatcher emit in updatePerson and runIsMinorInvariantJobmemo
P1SplatformUpdate coordination/templates/new-memo.md so any memo proposing a model or schema change is required to lead with an analytics-questions section before the column or field listmemo
P1SplatformAuthor coordination/standards/engineering/warehouse-model-discipline.md codifying the eight rules (lead with the analytics question; no junk data; per-question discriminators; pattern not name; row grain is a decision; three-to-six category band; derive from source events; cross-domain join via person_id)memo
P1SsalesSubscribe to person.updated; on changed_fields.status and person.status archived, pause active Sales cadence for Leads keyed to that person_id, prevent new outbound comms, clear active callback or prompt routing, and preserve Lead plus activity historymemo
P1MplatformBuild the Platform-side dispatcher fanout worker (topology B per this memo): polls Platform's dispatcher_event, looks up consumer URLs from coordination/contracts/event-types-registry.json (env-driven for V1), POSTs envelopes to each consumer's inbox endpoint with HMAC-signed body, owns retry and dead-letter logic via the existing ConsumerLoop machinery; domains expose POST /api/dispatcher/inbox that verifies signature, dedups on event_id, processes idempotently. Live in production 2026-05-12 on Render running scripts/fanout-worker.ts (Platform's Next.js app deploys to Vercel where instrumentation.ts cannot host a long-running poller); Sales and Growth inbox routes wired and dedup tables migrated; person.updated archive events verified end-to-end (Vercel PATCH -> dispatcher_event -> fanout POST -> domain inbox -> dispatcher_inbox_dedup) with sub-2-second propagationmemo
P1MplatformMulti-producer fanout + intake.* webhook migration: (a) Platform's fanout worker grew per-producer DB connections via DISPATCHER_PRODUCER_DATABASE_URL_<DOMAIN> env vars, centralizing all-producer fanout in one Render service; (b) intake.matched and (c) intake.captured handlers wired into Sales' webhook inbox switch; (d) Sales' Render polling-subscriber service retired and the cross-DB DSN extension in sales/lib/dispatcher/index.ts (defaultProducerSchemaForEvent, DISPATCHER_PRODUCER_DATABASE_URL_*) deleted. Closed 2026-05-12. Growth's polling-subscriber file deletes independentlymemo
P2SplatformReview sales/lib/dispatcher/index.ts; identify which surface differences are intentional design choices versus accidental drift versus genuine extension over the canonical (resolved 2026-05-12 via the cross-DB-DSN-upstream reply: Sales' impl is canonical API surface in one file plus the cross-DB DSN routing extension)memo
P2SplatformStand up a re-vendor script so domain repos can pull a fresh copy of Platform's lib/dispatcher in one command instead of a manual file-by-file copy; reduces the cost of staying current to near-zeromemo
P1SplatformFile lead.qualified payload schema and amend lead-lifecycle contract to v1.1.0memo
P1SplatformShip GET /api/org-markets read surface so Sales can derive organization_id, market_id, and org_market_id at qualification timememo
P1SsalesRegister lead.coach.confirmation.requested in contracts/event-types-registry.json with producer=sales, consumers=[coaching, platform-warehouse], owning contract contracts/coaching-confirmation/, and author its v1 payload schema alongside Coaching's outbound coaching.lesson.confirmation_decided eventmemo
P1SsalesAdd a sales.OutboundConfirmationRequest correlation table holding (confirmation_request_id, leadId, requestedAt, coachId, lessonWindow, lessonTypeId) so the Stage 3a→3b emit can persist the correlation row and the coaching-confirmation subscriber can join the inbound decision by confirmation_request_id; wire writer at applyPhase7ManualAction's confirm_slot_agreed handler and reader on the subscribermemo
P1SsalesWire the producer-side dispatcher emit for lead.coach.confirmation.requested from the Stage 3a→3b transition via the same fanout primitive Sales already uses for customer.handoff (ADR-0009 dispatcher cross-process transport)memo
P1SsalesRegister sales.lead.onboarded in contracts/event-types-registry.json with producer=sales, consumers=[platform-warehouse], owning contract contracts/lead-lifecycle/ as a v1.1 candidate, and author its v1 payload schemamemo
P1SsalesWire the producer-side dispatcher emit for sales.lead.onboarded from the close-orchestration Stage 4 entry path alongside the existing Lead.lessonDate persistence in recordCloseLessonBookedmemo
P1SsalesAdd a sales.LeadOrderCorrelation table holding (orderId, personId, leadId, recordedAt) and wire the writer at Stage 4 entry (close-orchestration success path) so the payment.received subscriber can resolve leadId from the (orderId, personId) tuple Revenue carries on the payloadmemo
P2SsalesBuild the Quo auto-send worker that consumes Touch.outcome='auto_send_pending' rows produced by the Stage 4 cron when SALES_AUTOMATED_SMS_ENABLED=true, calls Quo's POST /v1/messages via lib/quo/messages.ts, and writes a follow-up Touch (sms_sent_auto on success, automation_failed with pictogram_key on failure). Cron entry script and per-row retry up to 3 attemptsmemo
P2SsalesBuild the platform.comms.inbound subscriber stub behind PLATFORM_INBOUND_COMMS_SUBSCRIBER_ENABLED so Sales' V2 inbound-comms reset path leaves the operator log behind. Subscriber resolves Lead from (tenant_id, person_id), routes Stage 1 to promoteIntakeToQualifiedOnInbound and Stage 2/3 to resetCadenceOnInbound, terminal stages no-op. Module sales/modules/platform-comms-inbound/ wired into the dispatcher inbox handlermemo
P1SsalesWire lead.qualified emit at the guided qualification call site with rep-confirmed org and market payload and dispatcher registry coveragememo
P2SgrowthWire Growth dispatcher inbox consumer for lead.qualified v1 and persist confirmed org and market fields on qualified_intakememo
P2SgrowthAdd a mart-backed growth-warehouse-api v2 path that reads GET /api/mart/sections/growth with MART_API_KEY_GROWTH and keeps the source-side v1 table-dump path live through the deprecation windowmemo
P2SplatformProvision MART_API_KEY_GROWTH in Growth's environment so Growth can configure their consumermemo
P2MgrowthExpose ad_spend cents columns per (source, campaign, creative) x week in Growth silver face from campaign_spend_daily; USD-denominated baseline with spend_amount_cents column and source/campaign/creative join keysmemo
P2LgrowthExtend Growth attribution silver with first-touch, last-touch, and multi-touch attribution columns and source / campaign / creative breakdown from lead_attribution and campaign tables; cross-device-stitch confidence column already live via growth.touchpoint dbt model, this extends the upstream silver inputs Platform reads frommemo
P3SgrowthDocument lead_qualified_rate denominator in Growth silver face annotation: denominator is Growth-internal qualified_intake count (rows in qualified_intake table), not Sales-handed-off leadsmemo
P3SgrowthName attribution_multi_touch model as linear in _attribution_model registry field; rationale in memo bodymemo
P3XSgrowthDeclare creative_fatigue_index as null:not_applicable in registry with null_reason upstream_unavailable until Growth defines a formulamemo
P2MgrowthSurface ad_impressions and ad_clicks columns on campaign_spend_daily; impressions BigInt nullable and clicks BigInt nullable added and exposed in warehouse-api schema manifest; importer writes them when Meta/Google API includes countsmemo
P3MgrowthExtend growth.lead_attribution silver to expose 7-day and 30-day click-window attribution rows; attributed_within_7d_click and attributed_within_30d_click boolean columns landed via migration 20260519100000_lead_attribution_click_windows; gates attribution_window_7d_click and attribution_window_30d_click mart metricsmemo
P3MgrowthDeclare geo_breakdown and time_of_day_distribution silver inputs present; zipCode on lead_intake and capturedAt on lead_attribution are the inputs; derivation logic sent to Platform in 2026-05-19-growth-mart-geo-time-silver-ready; geo_breakdown pending Platform confirming zip_service_area spine stabilitymemo
P2SplatformBuild /schema endpoint factory + per-section /schema routes per §11.3 (gates §12 acceptance for every section)memo
P2SplatformWire Coaching cost trio compute (coach_cost_per_hour, coach_cost_per_completed_lesson, coach_compensation_total) against the silver rate-column extension Coaching shipped 2026-05-19memo
P2MplatformBuild refresh scheduler: a worker that walks the registry, checks last_successful_refresh_at against max_staleness_minutes, triggers compute for stale metrics independent of pull trafficmemo
P2MplatformWire /corrections write-side detection: recompute-prior-period diff against snapshot in each compute*Metrics function, emit correction event via recordCorrection()memo
P3SplatformSurface upstream_unavailable detection on /health endpoint (currently always returns empty array)memo
P2SplatformWire ad_spend_reconciled cross-warehouse compute in lib/mart/sections/revenue.ts against Growth's campaign_spend_daily silvermemo
P2SplatformWire revenue_concentration top-10 × 52-week window per Revenue's 2026-05-19 decisionmemo
P2MplatformWire Coaching utilization metrics (coach_capacity_hours, coach_scheduled_hours, coach_completed_hours, coach_idle_hours, coach_utilization_scheduled, coach_utilization_completed) against availability_template + lesson_booking per Coaching's documented derivationmemo
P2MplatformWire Delivery metrics (lesson_no_show_count, lesson_reschedule_count, dormant_student_count, churn_post_lock_count) against the schema columns Delivery shipped todaymemo
P2MplatformWire Sales cohort triangle (4 metrics) as entity_rows against sales.lead + sales.lead_stage_history (no separate cohort silver needed per Sales' pushback)memo
P2MplatformWire Growth metrics (ad_spend, lead_volume, lead_intake_count, lead_qualified_rate, cpl, cost_per_qualified_lead, source_mix) against the silver Growth landed todaymemo
P2SplatformWire Finance contribution_margin, pnl_summary v0, and cac_per_first_lock as cross-domain composites of what's now livememo
P2SplatformSurface this §9 scoping pushback to the Them OS spec owner via the appropriate external channel and file the response on this thread when it landsmemo
P3XSplatformWithdraw `2026-05-19-platform-coordination-mart-section-proposal` (this memo supersedes it); the §10.9 governance review is no longer being requestedmemo
P2SplatformSurface these two spec gaps to the Them OS spec owner via the appropriate external channel and file the response on this thread when it landsmemo
P2SplatformWithdraw the Path A build commitment (Initiative / InitiativeIndicator / Incident / AttentionItem Postgres tables); not needed — Sguild is not the system of record for thesememo
P2SplatformWithdraw the /coordination/health commitment under §10.3 framing; if Sguild builds a health endpoint later for engineering-coordination purposes, that is a separate project and not part of the mart contractmemo
P2SplatformRedraft the external reply to Them OS, pushing §10 back with the correct framing: mart serves metrics; initiatives are Them-OS-authored state; Sguild does not expose its own coordination repo as forecasting contextmemo
P2SplatformSurface the §9 scoping pushback to the Them OS spec owner via the appropriate external channel and file the response on this thread when it landsmemo
P1SplatformApply the pre-publish registry corrections from this release plan: add Coaching as a consumer for lesson.cancelled and lesson.delivered, and verify the package bundle includes canonical delivery.lesson-hold.* entries with no underscored aliases.memo
P1SplatformPublish the next @sguild/dispatcher freshness package after the registry corrections validate, then bump consuming domains off the stale 2.0.0 bundle.memo
P2MdeliveryBuild the Delivery synthetic local seed pack covering customer CRM defaults, customers, handoffs, lessons, attendance, reservation locks, dispatcher outbox and inbox rows, DLQ samples, and required Platform and Coaching fixture mirrorsmemo
P2SdeliveryFinish Delivery local env safety for the mesh, including .env.local precedence, db target verification for the delivery schema, remote DSN protection, and documented sibling schema requirements for cross-domain fixture tablesmemo
P2MdeliveryAdd Delivery dispatcher proof checks for wired-now lesson and hold producer events plus wired Revenue and Sales consumer events, with credit.funded marked registered-but-no-op until Delivery has a visible local projection assertionmemo
P2SdeliveryPublish Delivery cron inventory and local tick proof for audit-locks, lesson-site-drift, and terminal-lesson-settlement, with terminal settlement defaulting to dry-run in local mesh operationmemo
P2SdeliveryWire Delivery port 3004 bootstrap compatibility, migrations, seed command sequence, and smoke checks into the shared local mesh contract or orchestration helpermemo
P2MgrowthBuild a Growth synthetic local seed pack covering campaign, attribution, intake, subscriber, acquisition suppression, and is_test_data fixtures without real business datamemo
P1SgrowthFix or guard Growth local env loading so .env.local or explicit mesh process env wins over remote production database targets for Prisma CLI and standalone scriptsmemo
P2MgrowthAdd Growth dispatcher proof checks for wired-now producer paths intake.captured@2 and intake.amended@1 plus wired consumer paths person.updated, lead.created, lead.reached, lead.stage.changed, and lead.qualifiedmemo
P2SgrowthPublish Growth cron inventory and local tick posture for /api/ad-spend/meta, POST /api/ad-spend, and the stale /api/cron/lock-reservations listingmemo
P2SgrowthAdd Growth local bootstrap compatibility for port 3001, migration/bootstrap verification, seed execution, and smoke checks for core growth schema tablesmemo
P2SsalesStand up POST /api/quo-contacts in the Sales repo backed by the same Quo client and contact-intake service shape, then have Growth flip its route to a thin proxy for the two-week deprecation window before the Growth-side route deletesmemo
P2MgrowthWire prisma migrate deploy as a gated CI deploy step against DIRECT_URL, add a prisma migrate status preflight that fails on pending migrations, document db push as dev-only in Growth DB docs, and run a one-time production drift audit and reconcile|memo
P3MgrowthLand organization_id on the Growth campaign source row (applied to prod, backfilled to the Swim org) and expose it on the growth silver face (warehouse-api manifest plus contract README); per-org CAC composition is Finance's gold-section work reading that silver reference|memo
P3SgrowthBring Growth's AGENTS.md to the coord-003 thin-pointer shape (trim cross-domain restatements down to references, install the versioned canonical pointer block) and repoint the session-start inbox ritual per ADR-0030; installed pointer 2026-06-02.2 in growth commit 61cffc1|memo
P1SplatformPublish the credit-reservation-lock v2.0.0 amendment that changes active Credit Account scope to Person plus Organization plus Platform Market, updates reservation-create, atomic-multi-create, service-recovery, and event scope notes, and links ADR-0031 after it acceptsmemo
P1MrevenueImplement OrgMarket-scoped active Credit Account resolution in Revenue: one active account per Person plus Organization plus Platform Market, market-resolved reservation-create and atomic-multi-create, first-booking zero-balance account creation in the resolved OrgMarket, and no spend from null-market or different-market accounts after the v2 cutovermemo
P1SrevenuePublish credit.reserved schema_version 2 from Revenue with platform_market_id and migrate producer emissions after credit-reservation-lock v2.0.0 landsmemo
P2SrevenueSupersede or refine Revenue's 2026-05-31 customer-role credit-account invariant memo so the active-account guarantee reads Person plus OrgMarket rather than Person plus Organizationmemo