Skip to content

[test-qa-hourly] test: pin social waitlist attribution keys - #423

Merged
i-xtsu-sixyou-ken-mei merged 14 commits into
mainfrom
test-qa/ongoing-coverage-20260908
Sep 9, 2026
Merged

[test-qa-hourly] test: pin social waitlist attribution keys#423
i-xtsu-sixyou-ken-mei merged 14 commits into
mainfrom
test-qa/ongoing-coverage-20260908

Conversation

@i-xtsu-sixyou-ken-mei

Copy link
Copy Markdown
Collaborator

Intent

Continue continuous QA from current main with one small regression-focused test strengthening around the newly merged waitlist acquisition path.

Inspection

Finding

The newly merged waitlist route resolves a social signup to a canonical social_publish_jobs row using the tuple (episode_id, platform, language_code). Existing route coverage asserted the episode filter and final job id, but did not pin the platform/language filters themselves. A regression that accidentally drops either filter could attribute a signup to the wrong language/platform release for the same episode.

QA change

Strengthen the existing canonical social waitlist test to assert all three lookup keys:

  • episode_id = utmCampaign
  • platform = utmSource
  • language_code = utmContent

Test-only change; no implementation, workflow, docs, ignore, threshold, or agent-instruction changes.

Validation / commands and results

  • GitHub authoritative inspection of PR Codex/waitlist demand integration #421 final head — PASS: CI run #2394 succeeded; Supabase migrations run Universal app foundation: fix desktop wiring, add podcast tab, make app-core RN-safe #71 succeeded.
  • Repository source review of apps/account-engine/src/routes/waitlist.ts — PASS: implementation currently applies all three canonical lookup filters.
  • Existing waitlist.spec.ts review — PASS: duplicate normalized-email first-touch behavior is already covered via onConflict: email + ignoreDuplicates: true, so this run avoids duplicating that assertion.
  • .github/workflows/ci.yml inspection — PASS: existing gates unchanged.
  • scripts/coverage.sh inspection — PASS: coverage aggregation path remains available.
  • Focused Vitest / broader test, lint, typecheck, and coverage commands — not executable in this connector-only run. This PR's GitHub Actions are the executable validation gate.

Scope guard

Changed file only:

  • apps/account-engine/test/unit/routes/waitlist.spec.ts

Next QA target

After this PR is green, inspect the waitlist canonical-job resolution failure/error paths and Control Center waitlist-growth aggregation for one product-visible attribution invariant that is not already directly covered.

@vercel

vercel Bot commented Sep 8, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated
zap-engine-control-center Skipped Skipped Sep 8, 2026 4:34pm UTC

Copy link
Copy Markdown
Collaborator Author

QA run update

Inspection and validation for this run:

  • main = c2bfbd150b7669dc0a3c266ac0cf99016418bba5 (merged Codex/waitlist demand integration #421).
  • Codex/waitlist demand integration #421 final head validation — PASS: CI #2394 and Supabase migrations Universal app foundation: fix desktop wiring, add podcast tab, make app-core RN-safe #71 both succeeded.
  • Open PR changed-file inspection — PASS: fix(control-center): make Growth language-first #416 touches Control Center Growth/social only; fix: harden pipeline and ops transient failure recovery #417 touches retry/ops files; test: cover invest execution seam and ratchet coverage floors #422 touches invest-execution coverage configs/tests; none overlaps this waitlist route test.
  • Source inspection — PASS: createWaitlistRoutes() resolves canonical social attribution with episode_id, platform, and language_code.
  • Existing duplicate-email test review — PASS: first-touch insert semantics are already pinned through normalized email + { onConflict: 'email', ignoreDuplicates: true }; no duplicate QA added.
  • Change scope — PASS: compare main...test-qa/ongoing-coverage-20260908 is ahead 1 / behind 0 with exactly one changed file and +2/-0.
  • .github/workflows/ci.yml inspection — PASS: quick=format repo contracts, quality=type-check lint deadcode dup, tests=test analytics; no gate changes.
  • scripts/coverage.sh inspection — PASS: turbo run test:coverage + coverage-summary.ts remains the aggregation path.
  • Focused local Vitest / broader local test/lint/typecheck/coverage — NOT RUN: this execution is GitHub-connector-only and has no repository execution shell.
  • PR CI #2399 — currently running. At this check, security, deploy-gates, quick-gates, and coverage are PASS; E2E and remaining jobs are still in progress/pending.

Auto-merge remains disabled until the updated head has completed all required checks and the PR is confirmed mergeable.

@vercel
vercel Bot temporarily deployed to Preview – zap-engine-control-center September 8, 2026 14:03 Inactive

Copy link
Copy Markdown
Collaborator Author

Hourly QA update — 2026-09-08

Inspection

  • Reused this open QA PR; current main is still c2bfbd150b7669dc0a3c266ac0cf99016418bba5, so no branch sync was required before the change.
  • Previous head 7d67f3f49d01396aa2fe3be6183d55c386fb426d: CI run #2399 (34233173679) completed successfully.
  • Re-read .github/workflows/ci.yml: quick gates remain format repo contracts; code-quality remains type-check lint deadcode dup; tests remain test analytics, with E2E/security/deploy gates unchanged.
  • Re-read scripts/coverage.sh: coverage remains turbo run test:coverage followed by tsx scripts/coverage-summary.ts.
  • Inspected open PR file scopes: fix(control-center): make Growth language-first #416 changes Control Center Growth/social files; fix: harden pipeline and ops transient failure recovery #417 changes pipeline/ops retry and cron files; test: cover invest execution seam and ratchet coverage floors #422 changes app execution coverage/config docs. None overlaps apps/account-engine/test/unit/routes/waitlist.spec.ts.
  • Reviewed apps/account-engine/src/routes/waitlist.ts and existing waitlist tests. The route correctly throws when canonical social_publish_jobs lookup returns an error, but that fail-closed behavior was not directly covered.

QA change

Added one regression test only: a valid social signup whose canonical attribution lookup errors must return failure and must not upsert the waitlist row. This prevents a future swallowed lookup error from silently persisting a social conversion with missing/incorrect canonical attribution.

Commit: 55bcdf64562feb6bd1734228f598a5b02b3ad4ba (test(account-engine): fail closed on attribution lookup errors).

Commands / results

  • GitHub authoritative CI check on previous head — PASS: CI #2399 succeeded.
  • GitHub source inspection of waitlist implementation + tests — PASS: behavior and missing regression identified.
  • GitHub open-PR changed-file inspection (fix(control-center): make Growth language-first #416/fix: harden pipeline and ops transient failure recovery #417/test: cover invest execution seam and ratchet coverage floors #422) — PASS: no overlap.
  • .github/workflows/ci.yml inspection — PASS: gates unchanged.
  • scripts/coverage.sh inspection — PASS: coverage path unchanged.
  • Changed-file scope inspection — PASS: PR still changes only apps/account-engine/test/unit/routes/waitlist.spec.ts.
  • Focused Vitest / broader local test, lint, typecheck, coverage — not run locally because this run has GitHub connector access but no repository execution shell; updated-head GitHub Actions is the executable validation gate.

Next QA target

After this head is green, inspect Control Center waitlist-growth aggregation for a product-visible attribution/counting invariant that is not already directly covered, rather than adding more route micro-cases.

@vercel
vercel Bot temporarily deployed to Preview – zap-engine-control-center September 8, 2026 14:31 Inactive

Copy link
Copy Markdown
Collaborator Author

QA run update — 2026-09-08

Inspection:

QA change:

  • Added a regression test for incomplete/invalid social attribution identity.
  • A request with utm_medium=social but invalid episode UUID / unsupported language must not query from_fed_to_chain.social_publish_jobs, must not invent a canonical social_publish_job_id, and may still persist the raw bounded UTM fields as an unattributed signup.
  • Test-only change; no implementation behavior changed.

Commands / results:

  • GitHub Actions CI on prior head (55bcdf645...) — PASS, run #2400.
  • GitHub branch inspection — PASS: main unchanged at c2bfbd150...; no sync needed.
  • PR [test-qa-hourly] test: pin social waitlist attribution keys #423 patch review — PASS: existing QA scope only touched waitlist.spec.ts.
  • apps/account-engine/src/routes/waitlist.ts source review — PASS: resolver already fail-opens invalid/partial social identity to null before schema lookup.
  • Focused local Vitest / broader test, lint, typecheck, coverage — NOT RUN in this connector-only execution environment; updated-head GitHub Actions is the executable validation gate.

New head: c9b3970f6551716c4e60545c6c30d97cedfed7ae.

Next QA target after green CI: inspect Control Center waitlist-growth snapshot aggregation for a product-visible attribution/count invariant not already covered, especially canonical-job gaps and metric snapshot consistency.

@vercel
vercel Bot temporarily deployed to Preview – zap-engine-control-center September 8, 2026 15:36 Inactive

Copy link
Copy Markdown
Collaborator Author

Continuous QA update

Inspection:

  • Reused this open [test-qa-hourly] PR; latest main is still c2bfbd150b7669dc0a3c266ac0cf99016418bba5.
  • Previous head c9b3970f6551716c4e60545c6c30d97cedfed7ae CI #2401 passed.
  • Branch sync check: main...test-qa/ongoing-coverage-20260908 is ahead 4 / behind 0.
  • Reviewed active PRs fix(control-center): make Growth language-first #416, fix: harden pipeline and ops transient failure recovery #417, test: cover invest execution seam and ratchet coverage floors #422; none overlaps the account-engine waitlist route tests in this QA branch.
  • Re-read apps/account-engine/AGENTS.md: public waitlist persistence must remain normalized-email idempotent and first-touch.
  • Re-read .github/workflows/ci.yml: quick gates remain format repo contracts; code-quality remains type-check lint deadcode dup; existing tests/E2E/security/deploy gates are unchanged.
  • Re-read scripts/coverage.sh: coverage remains turbo run test:coverage followed by scripts/coverage-summary.ts.

Finding / action:

  • The existing duplicate-email unit test asserted { onConflict: 'email', ignoreDuplicates: true }, but did not exercise the first-touch result with two different attributed releases.
  • Added apps/account-engine/test/unit/routes/waitlist-first-touch.spec.ts with a small stateful persistence fake. It sends the same normalized email twice: first from YouTube/en (job-first-touch), then Threads/ja (job-later-touch). The fake honors the exact upsert conflict options and the assertion verifies there is still one stored row containing the first release attribution.
  • Commit: 4e2ce565d270db1f8dc631616d5d501e2ff4cc90 (test(account-engine): preserve first-touch waitlist attribution).
  • Test-only change; no implementation, workflow, docs, ignores, thresholds, or agent instructions changed.

Validation / commands and results:

  • GitHub Actions prior head CI #2401 — PASS.
  • GitHub compare main...test-qa/ongoing-coverage-20260908 — PASS: ahead 4 / behind 0; changed files are only the two account-engine waitlist test files.
  • Source contract review of apps/account-engine/src/routes/waitlist.ts — PASS: normalized email + onConflict: email + ignoreDuplicates: true remains the implementation contract.
  • Focused local Vitest / broader test, lint, typecheck, coverage — NOT RUN in this connector-only execution environment; GitHub Actions is the executable validation gate.
  • Updated-head CI #2402 (34245885446) — IN PROGRESS.

Auto-merge:

  • Not enabled on this run because updated-head CI #2402 has not completed.

Next QA target:

  • After CI is green, inspect Control Center waitlist-growth.ts snapshot consistency and attribution aggregation for one product-visible count/rate invariant rather than adding more route micro-cases.

@vercel
vercel Bot temporarily deployed to Preview – zap-engine-control-center September 8, 2026 16:34 Inactive

i-xtsu-sixyou-ken-mei commented Sep 8, 2026

Copy link
Copy Markdown
Collaborator Author

Continuous QA update — CI-first

Inspection:

  • Reused this open [test-qa-hourly] / test-qa/ongoing-coverage-20260908 PR.
  • Current main remains c2bfbd150b7669dc0a3c266ac0cf99016418bba5; branch is ahead 5 / behind 0, so no sync was required.
  • Previous head 4e2ce565d270db1f8dc631616d5d501e2ff4cc90 CI #2402 (34245885446) failed only in code-quality.
  • Downloaded and inspected the code-quality-verify-1 artifact. lint, deadcode, and dup passed; type-check failed in @zapengine/account-engine with TS4111 at waitlist-first-touch.spec.ts:25: Property 'email' comes from an index signature, so it must be accessed with ['email'].
  • Tests, coverage, quick-gates, E2E, security, deploy-gates, and the account-engine Docker verification all passed on that head.
  • Rechecked active PR scopes surfaced for fix(control-center): make Growth language-first #416, fix: harden pipeline and ops transient failure recovery #417, and test: cover invest execution seam and ratchet coverage floors #422; none overlaps these account-engine waitlist test files.

Action:

  • Applied the minimal test-only CI fix: values.emailvalues['email'] in the stateful first-touch persistence fixture.
  • Commit: d992c85232e6e213dbfb97902fd247f12ad1d24b (test(account-engine): satisfy first-touch fixture typecheck).
  • No implementation, workflow, docs, ignores, thresholds, agent instructions, or unrelated refactors changed.

Commands / results:

  • GitHub Actions CI #2402 job inspection — FAIL isolated to code-quality / type-check.
  • code-quality-verify-1 artifact inspection — PASS for diagnosis: exact TS4111 identified; lint/deadcode/dup all PASS.
  • GitHub branch check — PASS: main unchanged; ahead 5 / behind 0.
  • PR scope check — PASS: only apps/account-engine/test/unit/routes/waitlist-first-touch.spec.ts and waitlist.spec.ts differ from main.
  • Updated-head CI #2403 (34251896070) — IN PROGRESS.

Auto-merge remains disabled until the updated head completes required checks successfully.

Next QA target after green CI: inspect Control Center waitlist-growth aggregation / snapshot consistency for one product-visible count or attribution invariant, rather than adding more waitlist route micro-cases.

Copy link
Copy Markdown
Collaborator Author

QA run update — 2026-09-09

Inspection

  • Reused this existing [test-qa-hourly] PR; it is open, non-draft, mergeable, and still based on current main (c2bfbd150b7669dc0a3c266ac0cf99016418bba5).
  • Prior head d992c85232e6e213dbfb97902fd247f12ad1d24b CI run #2403 (34251896070) — PASS.
  • Re-checked open PRs fix(control-center): make Growth language-first #416, fix: harden pipeline and ops transient failure recovery #417, test: cover invest execution seam and ratchet coverage floors #422; none overlaps the new Control Center waitlist-growth test path.
  • Reviewed apps/control-center/src/server/services/waitlist-growth.ts: it intentionally rejects inconsistent paginated signup snapshots when row count, unique ids, or 7d/30d recomputed counts diverge from the initial exact counts.
  • Reviewed available coverage/test structure; Control Center uses Vitest service tests and the repository CI remains the executable validation gate in this connector-only runtime.

QA change

Added apps/control-center/src/server/services/waitlist-growth.test.ts with a regression test that simulates an internally inconsistent waitlist snapshot (duplicate signup id while exact total remains 2). The test asserts the read model fails closed as status: unavailable with Waitlist snapshot changed during collection and does not continue into downstream social attribution queries.

Commit: b8873c01f2d94c197ac2d5bb63c79af9a6223395test(control-center): reject inconsistent waitlist snapshots

Commands / results

  • GitHub PR metadata inspection — PASS.
  • GitHub workflow inspection for prior head — PASS: CI #2403 succeeded.
  • GitHub main branch inspection — PASS: no new main commit; no sync required.
  • Active PR search / scope inspection — PASS: no overlap with new test path.
  • Source review of waitlist-growth.ts — PASS: snapshot consistency guard is present and product-visible because inconsistent reads return unavailable telemetry instead of misleading exact counts.
  • PR changed-file review after commit — PASS: only QA test files are changed.
  • Focused Vitest / broader test, lint, typecheck, coverage — not executable locally in this connector-only runtime; GitHub Actions is validating the new head.
  • New CI #2404 (34257560767) — queued at time of this update.

Auto-merge

Not enabled yet. Blocker: updated-head CI #2404 has not completed.

Next QA target

If this head is green, inspect waitlist conversion-rate aggregation around 24h metrics, especially stale/multiple metric rows and zero-view semantics, for one regression-prone invariant not already directly covered.

Copy link
Copy Markdown
Collaborator Author

Hourly QA update — CI-first fix

Inspection:

  • Reused this existing [test-qa-hourly] / test-qa/ongoing-* PR.
  • Reviewed current PR metadata/diff and prior head CI #2404 (34257560767).
  • CI #2404 had exactly one failing check: quick-gates; tests, coverage, code-quality, e2e, security, deploy-gates, and account-engine Fly Docker verification all passed.
  • Downloaded and inspected artifact quick-gates-verify-1 (10068530786). repo and contracts passed; format failed.

Root cause:

  • Prettier required canonical multiline formatting for the onfulfilled / onrejected callback types in apps/control-center/src/server/services/waitlist-growth.test.ts.
  • No behavior/test logic failure was found.

Action:

  • Applied the exact formatting diff only.
  • Commit: 54638915e8f3150dbf26f01c6bcf0bf8e50c6e7f (test(control-center): apply canonical formatting to waitlist growth regression).
  • No implementation, workflow, docs, ignores, thresholds, or unrelated refactors changed.

Commands / results:

  • GitHub Actions CI #2404 status inspection — FAIL only on quick-gates.
  • Download quick-gates-verify-1 artifact and inspect result.json / logs — PASS diagnosis: format exit 1; repo + contracts pass.
  • Inspect format.log — PASS diagnosis: only waitlist-growth.test.ts had a Prettier diff.
  • Apply exact Prettier output — DONE.

Auto-merge:

  • Not enabled yet; updated-head CI must pass first.

Next QA target after green:

  • Waitlist conversion-rate aggregation around 24h metric snapshot selection/staleness/zero-view handling, looking for a product-visible invariant rather than another route micro-case.

Copy link
Copy Markdown
Collaborator Author

Hourly QA run — latest 24h conversion metric regression

Inspection

  • Previous head 54638915e8f3150dbf26f01c6bcf0bf8e50c6e7f: CI run #2405 (34263962247) completed successfully.
  • Latest main: c2bfbd150b7669dc0a3c266ac0cf99016418bba5; QA branch was ahead 7 / behind 0 before this change, so no sync was required.
  • Reviewed recent commits and open PRs fix(control-center): make Growth language-first #416, fix: harden pipeline and ops transient failure recovery #417, test: cover invest execution seam and ratchet coverage floors #422. None overlaps apps/control-center/src/server/services/waitlist-growth.test.ts.
  • Re-read .github/workflows/ci.yml: quick gates remain format repo contracts; code-quality remains type-check lint deadcode dup; tests remain test analytics; remaining E2E/security/deploy gates are unchanged.
  • Re-read scripts/coverage.sh: coverage remains turbo run test:coverage followed by tsx scripts/coverage-summary.ts.
  • Reviewed apps/control-center/src/server/services/waitlist-growth.ts: 24h collected metrics are ordered by captured_at then id ascending and folded into a map, so the latest snapshot is intended to win for each social post.

QA change

Added one regression test in apps/control-center/src/server/services/waitlist-growth.test.ts that supplies two collected 24h metric snapshots for the same post (100 then 250 views) and asserts the conversion uses the latest snapshot: views24h = 250, signupRate = 1 / 250.

Commit: 0bb40ccf255b2274bb64d2c1ab18a093846d641a (test(control-center): use latest waitlist conversion metric)

Commands / results

  • GitHub fetch_commit_workflow_runs(54638915...) — PASS: CI #2405 success.
  • GitHub search_commits — PASS: latest main remains c2bfbd15....
  • GitHub compare main...test-qa/ongoing-coverage-20260908 — PASS: ahead 7 / behind 0 before this commit; existing diff only QA test files.
  • GitHub source inspection of waitlist-growth.ts — PASS: latest collected 24h snapshot currently wins by ordered overwrite.
  • GitHub changed-file inspection for PRs fix(control-center): make Growth language-first #416/fix: harden pipeline and ops transient failure recovery #417/test: cover invest execution seam and ratchet coverage floors #422 — PASS: no overlap with this test file.
  • GitHub CI workflow inspection — PASS: no gates weakened.
  • GitHub coverage script inspection — PASS: coverage path unchanged.
  • Focused Vitest / broader test, lint, typecheck, coverage — not executable in this connector-only run; GitHub Actions on this head is the executable validation gate.

Scope guard

Test-only change. No implementation, workflow, docs, ignores, thresholds, secrets, or unrelated refactors changed.

Next QA target

If this head is green, cover the zero-view / unavailable-views boundary so conversion rate cannot accidentally become Infinity, 0, or a misleading percentage when collected telemetry is missing or zero.

Copy link
Copy Markdown
Collaborator Author

Hourly QA update — 2026-09-09

Inspection

QA change

Added one regression case for a product-visible conversion edge:

  • when a collected 24h metrics row exists with views = 0, preserve views24h = 0 but keep signupRate = null.
  • this prevents future regressions from surfacing Infinity, 0%, or another misleading conversion rate when the denominator is zero.

Commit: 36ee4302ff06987a88576c41c8ccc20e411fcbe0 (test(control-center): keep zero-view conversion rate unavailable).

Scope remains test-only: 3 changed QA test files total; no production implementation, workflow, docs, ignores, or CI/coverage thresholds changed.

Validation / commands and results

  • fetch_commit_workflow_runs(0bb40cc...) — PASS: CI #2406 completed successfully.
  • compare main...test-qa/ongoing-coverage-20260908 — PASS: ahead 9 / behind 0; changed files remain only QA tests.
  • Source review apps/control-center/src/server/services/waitlist-growth.ts — PASS: current implementation explicitly returns a rate only when views24h > 0, so this test pins existing intended behavior.
  • .github/workflows/ci.yml inspection — PASS: gates unchanged.
  • scripts/coverage.sh inspection — PASS: coverage path unchanged.
  • Focused Vitest / broader test, lint, typecheck, coverage — not executable in this connector-only runtime; GitHub Actions is the executable validation gate.
  • New head CI: #2407 (34275390873) — queued.

Auto-merge

Not enabled yet: updated-head CI #2407 has not completed.

Next QA target

After CI is green, cover the sibling unavailable-metrics path: a 24h metrics query failure must preserve persisted signup counts while returning views24h/signupRate as unavailable with the explicit telemetry warning message.

Copy link
Copy Markdown
Collaborator Author

QA run — preserve persisted counts on metrics failure

Inspection

  • Reused this open QA PR ([test-qa-hourly], branch test-qa/ongoing-coverage-20260908) and re-applied the test-qa label.
  • Latest main remains c2bfbd150b7669dc0a3c266ac0cf99016418bba5; branch is not behind main, so no sync commit was needed.
  • Prior head 36ee4302ff06987a88576c41c8ccc20e411fcbe0 CI run #2407 (34275390873) completed successfully.
  • Reviewed open PRs fix(control-center): make Growth language-first #416, fix: harden pipeline and ops transient failure recovery #417, test: cover invest execution seam and ratchet coverage floors #422; none overlaps this test file or this waitlist-growth behavior.
  • Reviewed .github/workflows/ci.yml: quick gates still run bash scripts/verify-jobs.sh format repo contracts; code quality still runs type-check lint deadcode dup; tests still run test analytics; no gate weakening.
  • Reviewed scripts/coverage.sh: coverage remains turbo run test:coverage followed by tsx scripts/coverage-summary.ts.
  • Reviewed apps/control-center/src/server/services/waitlist-growth.ts: persisted signup counts are intentionally kept available when readViews() fails, while views/rate are downgraded to unavailable with an explicit message.

QA change

Added one regression test in apps/control-center/src/server/services/waitlist-growth.test.ts:

preserves signup counts when 24h metric collection fails

It simulates a successful waitlist snapshot + canonical job lookup followed by a social_post_metrics error, then asserts:

  • status: ok
  • persisted total, 7d, 30d, attributed and direct/unknown counts remain intact
  • explicit message: 24h views unavailable; persisted signup counts remain available.
  • conversion still contains the persisted signup attribution
  • views24h and signupRate are null

Commit: 9bf2b37bdf328f8f8fdf1a8919740acd4b85a0f7 (test(control-center): preserve signup counts when metrics fail)

Validation / commands and results

  • GitHub main commit inspection — PASS: still c2bfbd150b7669dc0a3c266ac0cf99016418bba5.
  • Prior-head GitHub Actions — PASS: CI #2407 succeeded.
  • PR diff review — PASS: QA PR remains limited to three test files; no implementation/workflow/docs/ignore/threshold changes.
  • Implementation contract review — PASS: current readViews(...).catch(...) preserves persisted counts and marks views unavailable.
  • .github/workflows/ci.yml review — PASS: gates unchanged.
  • scripts/coverage.sh review — PASS: coverage path unchanged.
  • Focused local Vitest / broader test / lint / typecheck / coverage — not executable in this GitHub-connector runtime; GitHub Actions is the executable validation gate for this commit.
  • Updated-head CI — QUEUED: run #2408 (34280970760).

Auto-merge

Not enabled yet. Blocker: updated-head CI #2408 has not completed, so merge safety is not yet proven.

Next QA target

If #2408 is green, inspect how waitlist-growth handles attributed signups whose canonical social_publish_jobs row is missing/deleted; lock down whether those leads must remain counted as direct/unknown rather than silently reducing signups7d consistency.

Copy link
Copy Markdown
Collaborator Author

Test QA run — 2026-09-09

Inspection

  • Reused this open QA PR (test-qa/ongoing-coverage-20260908, label test-qa).
  • Current main is still c2bfbd150b7669dc0a3c266ac0cf99016418bba5; branch was not behind, so no sync commit was needed.
  • Reviewed current PR scope: only 3 QA test files are changed (waitlist-first-touch.spec.ts, waitlist.spec.ts, waitlist-growth.test.ts).
  • Reviewed open PR collection; no newer reusable Test QA PR supersedes [test-qa-hourly] test: pin social waitlist attribution keys #423.
  • Re-read .github/workflows/ci.yml: quick=format repo contracts, quality=type-check lint deadcode dup, tests=test analytics; no gate changes.
  • Re-read scripts/coverage.sh: summary remains turbo run test:coverage followed by tsx scripts/coverage-summary.ts.

CI-first finding

Prior head 9bf2b37bdf328f8f8fdf1a8919740acd4b85a0f7 ran CI #2408 (34280970760) and failed only quick-gates (job 102245367405). tests, coverage, code-quality, e2e, security, deploy-gates, dead-env check, and account-engine Docker verification all passed.

quick-gates command/result from the authoritative job log:

  • bash scripts/verify-jobs.sh format repo contractsFAIL overall
    • formatFAIL: Prettier changed only apps/control-center/src/server/services/waitlist-growth.test.ts
    • repoPASS
    • contractsPASS

Exact required formatting was only the long expected message string being wrapped onto the following line.

Action

Applied exactly that canonical Prettier formatting and nothing else.

Commit: 55c900c5e236cb21563dc96d2bcd70a7bd4577eatest(control-center): apply canonical formatting to metrics failure regression

No behavior, implementation, workflow, docs, ignore, threshold, mock strategy, or unrelated refactor changes.

Validation / commands and results

  • GitHub Actions CI #2408 job inspection — PASS diagnosis: isolated the failure to canonical formatting only.
  • bash scripts/verify-jobs.sh format repo contracts from CI #2408 — format FAIL / repo PASS / contracts PASS before this fix.
  • PR changed-file scope check after fix — PASS: still only the same 3 QA test files.
  • main head check — PASS: unchanged at c2bfbd150b7669dc0a3c266ac0cf99016418bba5; no rebase/sync needed.
  • .github/workflows/ci.yml inspection — PASS: CI gates unchanged.
  • scripts/coverage.sh inspection — PASS: coverage path unchanged.
  • Local focused Vitest / lint / typecheck / coverage — not available in this connector-only run; authoritative GitHub Actions is the executable validation gate.
  • Updated-head CI #2409 (34286594782) — QUEUED on 55c900c5e236cb21563dc96d2bcd70a7bd4577ea.

Auto-merge

Not enabled this run because updated-head CI #2409 has not completed. No protections are bypassed.

Next QA target

Once #2409 is green, inspect the aggregation behavior when a persisted signup still references social_publish_job_id but the canonical social_publish_jobs row is missing/deleted; pin whether that lead remains counted without corrupting attributed vs direct/unknown totals.

Copy link
Copy Markdown
Collaborator Author

Hourly QA run — orphaned attribution boundary

Inspection

QA change

Added one regression test for a persisted signup whose social_publish_job_id points to a canonical job row that no longer exists.

Locked behavior:

  • waitlist totals remain available;
  • the signup is not counted as social-attributed;
  • it is classified as directOrUnknown7d because there is no canonical social release;
  • no synthetic/ghost conversion row is emitted;
  • no downstream metrics lookup runs when no canonical job is present.

Commit: eda70dd992c7e5cd62f9be54662f2be9bb680eb9test(control-center): classify orphaned waitlist attribution safely

Validation / commands and results

  • GitHub Actions on prior head — PASS: CI #2409.
  • main head inspection — PASS: still c2bfbd150b7669dc0a3c266ac0cf99016418bba5.
  • PR scope inspection — PASS: changed files remain test-only:
    • apps/account-engine/test/unit/routes/waitlist-first-touch.spec.ts
    • apps/account-engine/test/unit/routes/waitlist.spec.ts
    • apps/control-center/src/server/services/waitlist-growth.test.ts
  • Focused Vitest / broader test, lint, typecheck, and coverage — not executable in this connector-only run; GitHub Actions is the executable validation gate.
  • Updated-head CI — RUNNING: CI #2411 (34291351988).

Auto-merge

Not enabled yet. Current blocker: updated-head CI #2411 has not completed, so the required safe-to-merge condition is not yet satisfied.

Next QA target

After CI is green, inspect pagination/batching boundaries in canonical job and metrics reads (100 job IDs / 500-row pages), especially avoiding dropped conversions at batch boundaries or repeated pages.

Copy link
Copy Markdown
Collaborator Author

QA run update — 2026-09-09

Inspection

QA change

Added apps/control-center/src/server/services/waitlist-growth-batching.test.ts to lock the 100-ID canonical-job batching boundary. The regression creates 101 distinct attributed signups/jobs and verifies:

  • all 101 remain socially attributed;
  • none falls into direct/unknown;
  • all 101 conversion rows survive;
  • first query receives exactly 100 IDs and second query receives the 101st ID.

Commit: 865b4c1efeb2da527d93cb3caf6fe8753022f22d (test(control-center): preserve attribution across job batches).

Commands / results

  • GitHub Actions inspection for prior head — PASS: CI #2411 succeeded.
  • main recent-commit inspection — PASS: no newer main commit; branch sync unnecessary.
  • PR changed-file review — PASS: four files, all test-only.
  • Open PR overlap review — PASS: no overlap with the new batching test file.
  • waitlist-growth.ts implementation review — PASS: batching invariant exists at 100 IDs and is regression-prone.
  • .github/workflows/ci.yml review — PASS: CI gates unchanged.
  • scripts/coverage.sh review — PASS: coverage path unchanged.
  • Focused Vitest / broader test, lint, typecheck, coverage — not executable in this connector-only environment; GitHub Actions on the updated head is the executable validation gate.

Auto-merge

Not enabled yet: updated-head CI must complete successfully before the PR qualifies.

Next QA target

Exercise the 500-row pagination boundary for waitlist signup collection or social metrics collection, ensuring a full second page is neither skipped nor double-counted.

Copy link
Copy Markdown
Collaborator Author

Hourly QA run — 2026-09-09

Inspection

CI-first finding

CI #2412 failed only in quick-gates; code-quality, coverage, security, and the other surfaced jobs passed. The uploaded quick-gates-verify-1 artifact shows:

  • format — FAIL
  • repo — PASS
  • contracts — PASS

format.log shows Prettier rewrote only apps/control-center/src/server/services/waitlist-growth-batching.test.ts; all surrounding Control Center files were unchanged. The mismatch was the long expect(...map(...)).toEqual(...) assertion layout.

Action

Applied only the canonical Prettier layout to that assertion.

Commit: 4b5692a30bbc135232485a98a6b6bf7a29994e7etest(control-center): apply canonical formatting to batching regression

No implementation, workflow, docs, ignores, mocks, thresholds, or unrelated refactors changed.

Commands / results

  • GitHub fetch_commit_workflow_runs(865b4c1e...) — FAIL confirmed: CI #2412.
  • GitHub Actions jobs inspection for run 34295660940quick-gates FAIL; code-quality/coverage/security PASS.
  • GitHub Actions artifact listing — located quick-gates-verify-1 (10083043097).
  • Downloaded quick-gates-verify-1.zip — PASS.
  • unzip -q /mnt/data/quick-gates-verify-1.zip -d /tmp/qg — PASS.
  • grep -RniE 'fail|error|prettier|format' /tmp/qg — identified format as the failed verification gate.
  • sed -n '960,1225p' /tmp/qg/logs/format.log — confirmed only waitlist-growth-batching.test.ts was rewritten in the relevant package.
  • GitHub source review of waitlist-growth.ts — PASS; batching/pagination constants and logic unchanged.
  • GitHub update of waitlist-growth-batching.test.ts — PASS; formatting-only commit 4b5692a....
  • GitHub fetch_commit_workflow_runs(4b5692a...) — new CI #2416 (34299837176) queued.

Auto-merge

Not enabled. Updated-head CI #2416 has not completed, so the PR does not yet satisfy the safe auto-merge preconditions.

Next QA target

Once CI is green, add a focused regression for the 500-row pagination boundary so signups/metrics spanning page 2 cannot be silently dropped or double-counted.

@i-xtsu-sixyou-ken-mei
i-xtsu-sixyou-ken-mei merged commit de18c6a into main Sep 9, 2026
12 checks passed
@i-xtsu-sixyou-ken-mei
i-xtsu-sixyou-ken-mei deleted the test-qa/ongoing-coverage-20260908 branch September 9, 2026 01:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant