Skip to content

Dependency readiness ​

Verified against the baseline on 2026-09-12 after backend dev fast-forwarded to 9ae45d7. These are readiness classifications for analytics, not issue closures or proof of deployed behavior. “Blocked” names a specific upstream contract; product questions are in decisions.

A01 is merged in backend #78 at f4ba2c3; A02 and A07 pure slices are merged in #79 (40b3263) and #80 (216fd63). This does not make missing observation, review, funding, earning, hold, payout, fraud, group, or RBAC producers ready; #37/#41/#42/#68 remain open and unassigned.

The #37 producer landed in backend #82 at 5f7c88b: an additive MetricObservation table with stable unique ScrapeJob source ID, immutable attribution, required raw views plus nullable raw engagement metrics, source observedAt/recordedAt, global deterministic sequence, raw-platform/source-time provenance, recorded-order correction disposition, and restrictive source foreign keys. It dual-writes normalized raw observations and legacy budget-clamped ViewSnapshot in one reconciliation transaction; bridge-backed initial submissions write in their creation transaction, while legacy/direct initial paths remain partial. Migration precedes the writer, old versions remain compatible, rollback retains facts, and no legacy backfill or fabricated scraped_at is allowed. Focused offline tests, build, schema validation, and diff checks pass; fresh/upgrade disposable PostgreSQL evidence remains required. This prerequisite is outside the 17 analytics PR boundaries; A02 remains incomplete until its reader/API and #41/#42 filters land.

Merge-topology correction: backend dev is d937bfe with #86/#87 landed; frontend dev is e4b5f5c with #31 landed. #88/#89/#90 were merged into stale feature/review-transition-command and are absent from dev. Dev-targeted carry-forward PRs #91 (eaee854, scraper), #92 (9f38877, payout), and #93 (151a80f, history) are open; A07 PR #95 is stacked on #93 and A02 historical status PR #96 is stacked on #95. Disposable PostgreSQL behavioral evidence for transition/history ordering is blocked: no TEST_DATABASE_URL, configured databases are remote/non-test, and local PostgreSQL is down. #41/#42 remain incomplete until the corrected stack merges and database evidence passes.

A02 normalized reader landed in backend #83 at c3568c4, after #82. It reads only normalized facts with a bounded per-submission baseline query, strict caller/scope and asOf checks, and prospective partial coverage; it never unions unkeyed legacy snapshots. Build and focused offline tests pass. Its disposable PostgreSQL behavior test and the #82 migration gates remain unrun, protected routes landed through #85 at 9ae45d7, and #41/#42 still block historical status modes.

The active #41/#42 prerequisite stack is frontend-first and remains open: frontend #31 at 517379e validates expectedStatus, commandId, and denial reason; backend #86/#87 provide the v2 contract and atomic admin transition; dev-targeted carry-forward PRs #91 (eaee854 scraper), #92 (9f38877 payout), and #93 (151a80f history) are OPEN and are not on dev. A07 protected review analytics is in #95 (4a08fe3), stacked on #93: its six review-related suites, build and diff check pass; the route uses bounded canonical event reads, v1/v2 normalization, partial diagnostics, aggregate-before-pagination, and recordedAt ordering. Conflicting campaign attribution is excluded as malformed. It adds no platform filter, current inference, schema or migration, and retains the exact SUBMISSION_MODERATION TODO. A02 historical status is PR #96 (d113a4e), stacked on #95, with frozen cohort scope: per-submission history uses (occurredAt, recordedAt, eventId), no prior event is unknown, and malformed, campaign-conflicting, or discontinuous history makes that submission unknown; historical mode performs no current-accepted query. Its 11 analytics/routes suites, creator-route checks, build and diff check pass; no migration or RBAC map changed. #41/#42 remain incomplete, #68 normalized accountability coverage remains a blocker, and disposable PostgreSQL ordering behavior remains blocked by the missing loopback _test database. The payout-review adapter branch remains an independent sibling; no active Discord review writer exists because the dashboard owns that path.

DependencyClassificationVerified state / smallest prerequisiteResponsible issue / analytics gate
Tracking lifecycleReady and verified in codeCreation-based, moderation-independent expiry/cadence, active-job coalescing, transactional application guard; preserve #71.#24 closed; no rebuild.
Worker operation/recoveryPartially readyThree platform executors, claim leases, stale-owner CAS exist. Lease renewal, aligned outcome taxonomy, supervised deployment/crash smoke unproven.#36; scraper #8 only if shared-host worker isolation applies. Release coverage gate, not blocker to offline analytics contracts.
Metric historyPartially readySnapshots retain views/likes/comments/shares; same tracking job cannot apply twice transactionally. A02 #79 now supplies pure deterministic projection and labelled legacy adaptation. Missing canonical source/job identity, source versus recorded time, correction ordering, atomic initial observation, saves/followers support contract.#37. Complete observed-time reads wait for this producer and historical status filters also require #41/#42.
Precise ratesReady and verifiedImmutable CampaignRateVersion/SubmissionRateVersion, DECIMAL(20,6), exact resolver, backfill, provenance, audited appends. Eleven focused offline tests passed this session.#60/#61 closed; group candidate persistence is separate.
FundingMissingString budget is configuration; no invoice/payment/funding journal or verified allocations. Need exact net credited/allocated facts with unique provider source and timestamps.#31–#33. Required before A03 can report verified funding; invoice UI stays outside analytics.
Funded lifecyclePartially readyLaunch/pause/end/archive routes and flags exist; no atomic funding gate/canonical economic intervals. #34/#35 have a body-defined cycle.#34/#35. Agree pure transition + funding-read interface, then stack launch gate; do not wait on both as black boxes.
Earnings and budgetMissing authoritative factsCPM-aware calculators and a tracking campaign lock exist; no immutable earning/spend journal, unique economic source, or single atomic invariant across writers.#53/#54. A03 blocked on these plus funding/history contracts.
Payout accountingBlockedLegacy Payout/PayoutItem history exists; approval advances cumulative paid counters before send. No durable earning reservations/allocations/provider-operation state machine.#56/#59, then #57/#58. Blocks authoritative paid/held/reserved in A03–A06.
Whop money movementUnclear and requiring a decision / external verificationExisting Whop identity/chat SDK is not payment-recipient proof. Provider capability, sandbox and policy gates lack fresh evidence here.Separate payout owner and Phase 0; does not block fixture/read-interface work. No provider assumptions or requests sent this session.
Group membershipPartially readyCampaign ownership, interval history, archival, locks/indexes exist. Real membership writes hit UUID validation despite CUID storage.#76 is a separate small prerequisite before group mutation/integration fixtures; source-level defect verified. Reported 15 failed integration tests were not rerun here.
Group rates / attributionMissing persistence/integrationResolver accepts time-bounded group candidates, but no group rate model/loader. Membership cohort rules selected in financial contract; no historical identity guessing.#26/#27; #28 delivered through A09/A16 after relevant facts exist.
ReviewPartially readyQueue, current track record and canonical status audit producer exist. A07's pure projection and protected route are in #80 and #95 (4a08fe3), stacked on #93; normalized v1/v2 reads, partial diagnostics, aggregate-before-pagination, malformed conflicting campaign exclusion and recorded-time ordering are covered by six review suites plus build/diff checks. A02 historical status is in #96 (d113a4e), stacked on #95, with exact per-submission unknown behavior and no current-accepted query in historical mode; 11 analytics/routes suites, creator-route checks, build and diff check pass. Frontend A14 is PR #33 (97f7662), open/clean/mergeable on feature/review-analytics-ui → dev; it separates committed-event summaries from queue state and implements UTC exclusive-to/campaign/status filters, aggregate/day buckets, lazy history, stable asOf pagination, explicit partial/unavailable/unknown actor labels, full reasons and invalidation after successful moderation. Reviewer filtering is absent because the backend contract does not expose it. #41/#42/#51/#52/#63/#68 remain OPEN and unassigned (revalidated 2026-09-12); #91/#92/#93/#95/#96/#33 remain open, and disposable PostgreSQL ordering evidence plus DB/manual/browser evidence remain outstanding.#41, #42, #43, coordinated with #68. A07/A02/A14 remain in progress; do not claim completion from branch tests alone.
Fraud / finalityMissing, policy gateHeuristic badges and payout decisions exist; no durable evaluations/holds/resolutions/recovery ledger. Bulk approval does not exclude auto-badges.#55; D-01/D-02/D-03. A08 and payout finalization blocked.
Sponsor reportsReady and verified current feature; financial coverage partialToken grants, bounded signed snapshot timeline, approved metrics, recorded completed gross allocations, privacy controls exist. Not shared with admin detail; legacy allocation coverage can be incomplete.#67 closed. A10 reuses shared reads without recreating link management.
Audit eventsReady and verified foundation; producers partially readyCanonical append-only store/targets, idempotency and transaction-aware recorder; legacy stores retired. Backend #86 requires the v2 event contract without a migration; stacked #87 supplies atomic admin transition, current CPM clamp, notification, and event. Domain-specific payout/funding producers remain.#30 closed; #68 owns contextual/producers, with #41/#53/etc. No generic audit UI rewrite.
RBACPartially ready, separately ownedHybrid capabilities and owner/grant UI landed. Business policies remain pending; old business owner guard defect remains.#75/#77, frontend #29. Foundation analytics proceeds with current guards and explicit TODOs.
Private creator accessMissing enforcement on current campaign reads/api/campaigns routes remain unauthenticated. Existing memberships are enough for access owner to work; analytics must not expose new sensitive data there.#50, outside analytics. Creator finance uses own authenticated endpoints; private-campaign release coordinates this gate.

Contracts to request from upstream owners ​

“Request” means orchestration handoff in this workspace; do not message people or post on GitHub without explicit authorization.

ProducerMinimum stable export neededSafe work while absent
#37Observation ID/source ID, submission/platform, observed/recorded time, nullable metrics, baseline/order/correction disposition; append/replay guarantees.A01 fixtures; A02 pure reader tests with labelled legacy coverage, no invented source time or status history.
#31/#33/#34/#35Exact receipts and campaign allocations, adjustments, verified state/effective time, lifecycle earning intervals; available committed balance.Pure funding DTO/projection tests; no reported funded number from budget text.
#53/#54/#27Exact earning/spend/adjustment entries, creator/campaign/submission/funding provenance, eligible interval, resolved rate and membership source, posting time, source uniqueness.A01 contracts; independent performance work.
#55Hold/evaluation/resolution IDs, affected entry amounts, reason category, rule version, occurrence time and effective finality state; recovery assessments.Risk DTO fixtures; no live hold count from badges.
#56–#59Amount-level reservation/paid/released allocations, stable operation, gross/net/deduction mapping, provider evidence and event times, recovery/offset state.History serialization fixtures; preserve and label recorded legacy gross allocations.
#41/#42/#68One reliable committed transition per command with canonical actor, target, from/to state, reason, time, and ordering; historical coverage boundary. Dev-targeted carry-forwards #91/#92/#93 are open and off dev; A07 #95 is stacked on #93.A07 protected route/tests and A02 historical status branch can proceed as review-ready work, but #41/#42 remain incomplete and current queue stocks remain separately labelled. Rebase as parents land and run disposable PostgreSQL behavioral evidence for transition/history ordering before claiming A07/A02 completion.
#75/#77Reviewed attachment decision at named routes, fail-closed behavior, owner-access release evidence.All analytics contracts/read code behind existing guards; no central-policy edits.

Schema changes for these producers stay in their existing MVP workstreams. Apply migration rules before scheduling their migrations or enabling new writers. Analytics units themselves require no migration by default; add indexes only with measured query evidence and a separate reviewed rollout.