Skip to content

[test-qa-hourly] test: classify missing canonical jobs as unknown - #435

Merged
i-xtsu-sixyou-ken-mei merged 41 commits into
mainfrom
test-qa/ongoing-coverage-20260909
Sep 10, 2026
Merged

[test-qa-hourly] test: classify missing canonical jobs as unknown#435
i-xtsu-sixyou-ken-mei merged 41 commits into
mainfrom
test-qa/ongoing-coverage-20260909

Conversation

@i-xtsu-sixyou-ken-mei

Copy link
Copy Markdown
Collaborator

QA scope

Adds one focused regression test for waitlist attribution when a persisted social_publish_job_id points to a canonical publish job that no longer exists. The expected behavior is fail-soft classification as direct/unknown while preserving persisted signup totals and emitting no conversion row.

Source-of-truth inspection

  • Recent main commits: latest 57253aeeb7e2ad3fb9f532c3b656191bad309e78 (merge of QA PR [test-qa-hourly] test: preserve legacy waitlist attribution #433), immediately after integration PR Integration/pr 429 432 rollup #434.
  • Open PRs: none at the start of this run, so no reusable Test QA PR existed.
  • CI workflow: reviewed .github/workflows/ci.yml; quick gates remain format repo contracts, quality gates type-check lint deadcode dup, tests test analytics, with E2E/security/deploy gates unchanged.
  • Coverage: reviewed scripts/coverage.sh / coverage search; pnpm coverage summary remains turbo run test:coverage followed by scripts/coverage-summary.ts.
  • Test hygiene search: no test.skip, it.skip, describe.skip, todo, or focused-test matches found.
  • Relevant implementation: reviewed apps/control-center/src/server/services/waitlist-growth.ts; attribution only occurs when the canonical job exists in jobsById, so a dangling job ID is intentionally counted as unknown.
  • Relevant tests: reviewed waitlist-growth-batching.test.ts; batching, pagination, and seven-day boundary are covered, but the dangling canonical-job case was not directly pinned.

Change

  • Added apps/control-center/src/server/services/waitlist-growth-missing-job.test.ts.
  • No production implementation, workflow, docs, ignores, thresholds, or unrelated refactors changed.

Commands / validation

Focused local validation could not be started because the authenticated local DevSpace connector returned We couldn't connect your account; no repository file was modified through that failed path. The change was therefore made directly against GitHub source of truth.

GitHub inspection calls completed successfully for recent commits, open PRs, CI workflow, coverage scripts/search, implementation, and related tests. PR CI is the authoritative validation for this head and will be recorded in the next QA update.

@vercel

vercel Bot commented Sep 9, 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 10, 2026 10:30am UTC

@vercel
vercel Bot temporarily deployed to Preview – zap-engine-control-center September 9, 2026 14:39 Inactive
@vercel
vercel Bot temporarily deployed to Preview – zap-engine-control-center September 9, 2026 14:45 Inactive

Copy link
Copy Markdown
Collaborator Author

Hourly QA update — CI-first repair

Inspection

  • Reused this open QA PR ([test-qa-hourly], test-qa, test-qa/ongoing-coverage-20260909).
  • main is still 57253aeeb7e2ad3fb9f532c3b656191bad309e78; branch compare is ahead 3 / behind 0.
  • Reviewed recent integration merge Integration/pr 429 432 rollup #434, current PR diff, .github/workflows/ci.yml, scripts/coverage.sh, episode-image-pool.ts, the new fallback-relevance regression, and the failing planner pool tests.
  • CI #2456 failed in tests and consequently coverage. The downloaded tests-verify-1 artifact showed analytics passed and exactly three failures in visual-asset-planner.pool.test.ts.

Root cause

#434 intentionally tightened cross-subject image fallback: a donor Brave query must share a concrete term with the borrowing scene query. The new episode-image-pool.fallback-relevance.test.ts explicitly pins that behavior. Three older planner-pool fixtures still used unrelated donor/borrower queries and therefore expected pool-fallback where the current implementation correctly returned reuse / pool-exhausted.

Action

  • 8821c1a2a25553761689a2aac4c5037d1115fbf4 — aligned the three stale fixtures with the relevance contract while preserving the behaviors each test is meant to cover: generic pool borrowing, no unnecessary targeted request for a context scene, and donor-spreading via SUBJECT_REUSE_PENALTY.
  • f0bcf46ee4228c83ab79c4319ed81ec53dcda2f0 — restored pre-existing test comments after reviewing the generated diff, leaving only the intended fixture edits.
  • Final PR scope is test-only: the existing waitlist regression plus 11 additions / 8 deletions in the planner pool test. No production code, workflow, docs, ignores, CI gates, or thresholds changed.

Commands / results

  • unzip -q /mnt/data/tests-verify-1.zip -d /mnt/data/tests-verify-1 && find /mnt/data/tests-verify-1 -maxdepth 3 -type f -print → extracted result.json, logs/test.log, logs/analytics.log.
  • cat /mnt/data/tests-verify-1/result.jsontest failed (exit 1), analytics passed.
  • grep -nE 'Failed Tests|lets a generic scene borrow|buys a targeted request|spreads borrowed images|Test Files|Tests ' /mnt/data/tests-verify-1/logs/test.log → exactly the three stale planner expectations above.
  • Local checkout/clone validation attempts were unavailable: DevSpace returned We couldn't connect your account, and the isolated container could not resolve github.com; no local result is being represented as passing.
  • GitHub CI #2458 is the authoritative validation for latest head f0bcf46ee4228c83ab79c4319ed81ec53dcda2f0 and is currently running.

Auto-merge

Not enabled: repository setting allow_auto_merge=false; no protection bypass attempted.

Copy link
Copy Markdown
Collaborator Author

Hourly QA update — CI-first repair

Inspection

  • Reused this open QA PR ([test-qa-hourly], test-qa, branch test-qa/ongoing-coverage-20260909).
  • main is still 57253aeeb7e2ad3fb9f532c3b656191bad309e78; QA branch is ahead 11 / behind 0.
  • CI #2458 (34365691769) failed. E2E, security, deploy gates and coverage completed; the blockers were quick-gates and code-quality.
  • Downloaded quick-gates-verify-1: repo PASS, contracts PASS, format FAIL. Prettier identified exactly 7 Control Center files.
  • Downloaded code-quality-verify-1: type-check FAIL and dup FAIL. TypeScript errors were CSS-module index-signature access in GrowthJourneyPanel.tsx; jscpd clones were the repeated PostHog funnel event object and repeated podcast pagination error/page block.
  • Reviewed .github/workflows/ci.yml: quick=format repo contracts, quality=type-check lint deadcode dup, tests=test analytics; E2E/security/deploy gates unchanged.
  • Reviewed scripts/coverage.sh: pnpm coverage summary still runs turbo run test:coverage then tsx scripts/coverage-summary.ts.
  • Downloaded the #2458 coverage summary: repository total 92.42% statements / 82.28% branches / 89.68% functions / 93.07% lines; Control Center 83.96% statements / 72.78% branches / 84.11% functions / 84.34% lines.
  • Rechecked open PRs: this remains the only open PR, so there is no active-PR path conflict.

CI repair

Only minimal changes required by the failing gates were made:

  • GrowthJourneyPanel.tsx: CSS-module bracket access required by TS4111; braces on the two touched conditionals; canonical formatting.
  • GrowthJourneyPanel.module.css, ReliabilityClarity.test.tsx, VisualEvidence.decision-trace.test.ts, VisualEvidence.tsx, growth-journey.test.ts: canonical formatting only.
  • operations/posthog.ts: extracted the two identical Funnel EventsNode literals into landingFunnelEvent(); no query semantics changed.
  • podcast-costs.ts: extracted the repeated page error/data normalization into requirePage() for one pagination path; behavior remains throw-on-error + empty-array-on-null.
  • Existing QA regressions remain intact: missing canonical waitlist job and planner relevance fixtures.

Commands / results

  • GitHub Actions run/jobs/artifact inspection for CI #2458: FAIL (quick-gates, code-quality).
  • unzip + inspect quick-gates-verify-1/result.json, format.log, repo.log, contracts.log: format FAIL; repo/contracts PASS.
  • unzip + inspect code-quality-verify-1/result.json, type-check.log, dup.log: type-check FAIL; dup FAIL; root causes listed above.
  • unzip + inspect coverage-summary/summary.json: coverage generated successfully, totals recorded above.
  • GitHub compare main...test-qa/ongoing-coverage-20260909: ahead 11 / behind 0.
  • Local DevSpace workspace attempts: BLOCKED by transient connector authentication (We couldn't connect your account), so no local pnpm result is claimed.
  • Current authoritative validation: CI #2466 (34371814022) on head d4a2a06524aa66e820a0a9a32510fd16995a7db9 is in progress; security and deploy-gates are already PASS while quick/code-quality/tests/E2E continue.

Auto-merge

Not enabled. Repository setting is allow_auto_merge=false; no protection is bypassed.

Next QA target after CI is green

Canonical social_publish_jobs lookup query-error behavior: pin that a provider/read failure makes waitlist telemetry unavailable rather than silently reclassifying all affected signups as direct/unknown.

Copy link
Copy Markdown
Collaborator Author

Hourly QA update — CI-first repair

Inspected the current QA PR, latest main, PR diff/scope, CI #2466 logs, .github/workflows/ci.yml gate contract, and coverage scripts. main remains 57253aeeb7e2ad3fb9f532c3b656191bad309e78; this branch is now ahead 13 / behind 0. PR #435 is the only open PR.

CI #2466 root cause

quick-gates failed only format; repo and contracts passed. The formatter required canonical Prettier wrapping in GrowthJourneyPanel.tsx.

code-quality ran:

bash scripts/verify-jobs.sh type-check lint deadcode dup

Results:

  • type-check: FAILapps/control-center/src/server/services/podcast-costs.ts
    • TS2345 on the three Supabase helper calls because ReturnType<typeof createClient> collapsed to an incompatible generic client type.
    • TS4111 on the internal unit fields removed from a Record<string, unknown> using dot access.
  • lint: PASS (existing warnings only; no errors)
  • deadcode: PASS
  • dup: PASS, 0 clones in Control Center and podcast-pipeline

quick-gates ran:

bash scripts/verify-jobs.sh format repo contracts

Results:

  • format: FAILGrowthJourneyPanel.tsx only
  • repo: PASS
  • contracts: PASS

Fixes on this run

  1. 855f8e54805ded5fd11e768fdd3f0d002408a7d5fix(control-center): restore podcast cost type safety
    • gives the Supabase pagination helpers a concrete broad client alias instead of generic ReturnType<typeof createClient> inference;
    • uses bracket access for internal Record<string, unknown> fields required by noPropertyAccessFromIndexSignature;
    • no behavior or CI-gate change.
  2. 59fa72ddfa07ae34d9f3b49912faea60cfbc37fcfix(control-center): format growth journey panel
    • applies only the Prettier shape reported by quick-gates.

Coverage path remains unchanged: pnpm coverage summaryturbo run test:coveragescripts/coverage-summary.ts; no thresholds or reporters changed.

Local focused validation was attempted through the configured DevSpace connectors, but both returned We couldn't connect your account. No local result is claimed. GitHub CI is therefore the authoritative validation for this head.

New head CI: #2468 / 34377788654 — pending.

Auto-merge remains disabled because the repository setting is allow_auto_merge=false; no protection is bypassed.

Next QA target after green CI: canonical social_publish_jobs lookup query-error fail-closed behavior in waitlist-growth, rather than treating provider failure as direct/unknown attribution.

Copy link
Copy Markdown
Collaborator Author

Hourly QA update — 2026-09-10

CI-first run. Reused this open [test-qa-hourly] PR; branch is still based on current main (57253aeeb7e2ad3fb9f532c3b656191bad309e78) with no behind commits.

Inspection

  • Recent commits: reviewed latest main merges ([test-qa-hourly] test: preserve legacy waitlist attribution #433, Integration/pr 429 432 rollup #434) and the pagination/deployment-gate follow-up.
  • Open PRs: [test-qa-hourly] test: classify missing canonical jobs as unknown #435 is the only open PR.
  • CI #2468 (34377788654): failed only in code-quality. quick-gates, tests, coverage, e2e, security, deploy-gates, and Docker verification passed.
  • Downloaded code-quality-verify-1 artifact and inspected result.json + lint.log:
    • type-check: PASS
    • lint: FAIL
    • deadcode: PASS
    • dup: PASS
    • sole blocking errors: apps/control-center/src/server/services/podcast-costs.ts:79 had three @typescript-eslint/no-explicit-any violations in ReturnType<typeof createClient<any, any, any>>.
  • CI workflow rechecked: quick=format repo contracts, quality=type-check lint deadcode dup, tests=test analytics; no gate weakening.
  • Relevant implementation/test rechecked: podcast-costs.ts pagination helpers and podcast-costs-pagination.test.ts stable-order/full-history regression.
  • Coverage script rechecked: pnpm coverage summary => turbo run test:coverage + scripts/coverage-summary.ts.
  • Coverage artifact from CI #2468 passed: repo total 92.42% statements / 82.28% branches / 89.69% functions / 93.06% lines; Control Center 83.97% / 72.78% / 84.13% / 84.33%.

Action

Minimal CI repair only:

  • 1758b441e3c8fae1ef30f9109b31bb9608f1d818fix(control-center): remove explicit any from podcast cost client
    • changed ReturnType<typeof createClient<any, any, any>> -> ReturnType<typeof createClient>.
  • 53cb80f256034f86f96e416ba91a60775d4ab117fix(control-center): restore podcast cost file ending
    • restored the trailing newline after the GitHub Contents API update.

Commit diff verification shows the functional change is exactly the one type alias line; the second commit is newline-only. No workflow/docs/ignore/threshold changes.

Commands / results

  • GitHub PR/open-PR search: PASS; reused [test-qa-hourly] test: classify missing canonical jobs as unknown #435.
  • Compare main...test-qa/ongoing-coverage-20260909: PASS; branch was ahead 13 / behind 0 before this repair.
  • GitHub Actions CI #2468 job inspection: PASS; isolated code-quality failure.
  • Download/inspect code-quality-verify-1: PASS; lint-only root cause confirmed.
  • Download/inspect coverage-summary: PASS; coverage job itself was green.
  • DevSpace local workspace open: BLOCKED by transient connector auth (We couldn't connect your account), so no local pnpm result is claimed.
  • GitHub commit diff verification for both repair commits: PASS.
  • New CI #2470 (34383704146) on head 53cb80f256034f86f96e416ba91a60775d4ab117: pending and is the authoritative validation for this head.

Auto-merge

Not enabled. Repository setting is allow_auto_merge=false; no protection bypass attempted.

Next QA target

Once CI is green, return to the planned waitlist regression: canonical social_publish_jobs lookup query errors should fail closed as telemetry unavailable rather than silently classifying affected signups as direct/unknown.

Copy link
Copy Markdown
Collaborator Author

Hourly QA update

CI-first run on head 53cb80f256034f86f96e416ba91a60775d4ab117.

Inspection

  • Reused this open Test QA PR; branch test-qa/ongoing-coverage-20260909 is synced with main (ahead 15, behind 0 before this fix).
  • Reviewed recent main commits, active PR diff, .github/workflows/ci.yml gate contract, relevant Control Center implementation/tests, and CI run #2470 logs.
  • CI #2470: tests, coverage, e2e, security, deploy gates, lint, deadcode, and duplication all passed. The only blocking gate was Control Center type-check.
  • Exact failure from bash scripts/verify-jobs.sh type-check lint deadcode dup:
    • podcast-costs.ts(109,61) TS2345
    • podcast-costs.ts(122,48) TS2345
    • podcast-costs.ts(124,11) TS2345
    • root cause: the extracted PodcastCostClient = ReturnType<typeof createClient> alias no longer preserved the call-site Supabase client type used by the existing helper signatures.

Action

  • Commit 23740b960bf94444096fdf41a17918b2f9400f2a (fix(control-center): restore inferred supabase helper types).
  • Removed only the extracted PodcastCostClient alias and restored the three helper parameters to the repository's previous inline ReturnType<typeof createClient> form.
  • Kept the pagination requirePage deduplication helper and the index-signature-safe bracket deletes unchanged.
  • No workflow, CI gate, coverage threshold, docs, ignores, or unrelated refactor changes.

Validation

  • Authoritative previous CI result: #2470 failed only on the three TS2345 errors above; all test/coverage/E2E/security/dup gates passed.
  • Local execution is unavailable in this runtime, so no local command result is claimed.
  • New PR CI for 23740b96... is the authoritative validation and will be inspected on the next run (or later in this run if it becomes available).

Auto-merge remains disabled unless the updated head is fully green and repository policy permits it.

Copy link
Copy Markdown
Collaborator Author

Hourly QA update

CI-first run against GitHub source of truth.

Inspection

  • Reused this open QA PR ([test-qa-hourly], branch test-qa/ongoing-coverage-20260909).
  • main remains 57253aeeb7e2ad3fb9f532c3b656191bad309e78; branch is ahead 17 / behind 0.
  • Reviewed recent main commits, open PRs, this PR diff, .github/workflows/ci.yml, relevant Control Center implementation, prior QA regression coverage, and CI artifacts.
  • CI contract is unchanged: quick=format repo contracts, quality=type-check lint deadcode dup, tests=test analytics, with E2E/security/deploy gates intact.

CI failure investigated

Run #2471 (34390136653) failed only in code-quality. Downloaded code-quality-verify-1 and inspected all logs:

  • type-check: FAIL
  • lint: PASS
  • deadcode: PASS
  • dup: PASS

The only errors were three TS2345 failures in apps/control-center/src/server/services/podcast-costs.ts, where ReturnType<typeof createClient> resolves the generic overloaded factory signature rather than the concrete dynamic-schema client returned by this call site.

Fix

Commit 79c699ce893a20cfbd4a4cb70e893f1e3ec8be30 (fix(control-center): preserve inferred supabase client type):

  • extracted the existing Supabase construction into createPodcastCostClient(...) with identical runtime options;
  • defined PodcastCostClient = ReturnType<typeof createPodcastCostClient> so helper parameters use the concrete inferred client type;
  • changed only the three helper parameter annotations.

No CI gates, workflow behavior, docs, ignores, coverage thresholds, mocks, or unrelated behavior were changed. Commit diff was reviewed after the write.

Commands / results

  • GitHub PR search: open QA PR [test-qa-hourly] test: classify missing canonical jobs as unknown #435 found and reused — PASS.
  • GitHub commit/workflow inspection for head 23740b9...: CI #2471 — FAIL (code-quality).
  • GitHub Actions jobs inspection — only code-quality failed; E2E/security/deploy and other visible jobs passed.
  • Downloaded artifact code-quality-verify-1 and inspected result.json, type-check.log, lint.log, deadcode.log, dup.log — root cause above.
  • Reviewed .github/workflows/ci.yml on main — gates unchanged.
  • Compared main...test-qa/ongoing-coverage-20260909 — ahead 17 / behind 0.
  • Reviewed commit diff 79c699ce... — one implementation file, minimal type-only factory extraction.
  • Local DevSpace validation remains unavailable because the connector returns We couldn't connect your account; no local result is claimed.
  • New authoritative CI: #2472 (34396086573) is queued for 79c699ce....

Auto-merge

Not enabled. Updated-head CI has not passed yet, so enabling it would be premature even if repository policy allowed it.

Next QA target

Once CI is green, return to the planned waitlist regression: make canonical social_publish_jobs lookup query errors fail closed instead of silently classifying affected signups as direct/unknown.

Copy link
Copy Markdown
Collaborator Author

QA run update — 2026-09-10

Inspection

  • Reused this open QA PR ([test-qa-hourly], test-qa, branch test-qa/ongoing-coverage-20260909).
  • main remains 57253aeeb7e2ad3fb9f532c3b656191bad309e78; branch compare before/after this change is ahead 18 / behind 0, so no sync commit was needed.
  • Previous head 79c699ce893a20cfbd4a4cb70e893f1e3ec8be30: CI #2472 completed successfully.
  • Reviewed current PR diff, .github/workflows/ci.yml, scripts/coverage.sh, waitlist-growth.ts, and the existing dangling canonical-job regression.
  • CI gates remain unchanged: quick=format repo contracts, quality=type-check lint deadcode dup, tests=test analytics; E2E/security/deploy gates remain present. Coverage still runs turbo run test:coverage then tsx scripts/coverage-summary.ts.

Change

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

  • a missing canonical row remains fail-soft/direct-or-unknown;
  • a canonical social_publish_jobs query error must instead fail closed and return the unavailable summary, preserving the provider error message.

Commit: 2404c592b433d68c9139c1c52998eadc3d98a0ce (test(control-center): fail closed on canonical job query errors).

No production code, workflow, docs, ignores, thresholds, or unrelated refactors changed in this run.

Commands / results

GitHub-source-of-truth checks performed:

  • workflow runs for prior head → CI #2472: success
  • compare main...test-qa/ongoing-coverage-20260909ahead 18 / behind 0
  • open PR search → only PR [test-qa-hourly] test: classify missing canonical jobs as unknown #435 is open
  • fetched/reviewed PR changed files + patch → QA scope reviewed
  • fetched .github/workflows/ci.yml → gates unchanged
  • fetched scripts/coverage.sh → coverage path unchanged
  • fetched waitlist-growth.ts + relevant regression test → identified uncovered query-error branch

Updated-head validation: CI #2473 (34401959046) is queued and is authoritative for commit 2404c592....

Auto-merge

Not enabled: updated-head required CI has not completed yet. No branch protection or review requirement will be bypassed.

Next QA target

Once this head is green, inspect whether social_post_metrics provider/query errors and canonical job lookup errors expose sufficiently distinct dashboard messages; if already covered, move to the next low-coverage waitlist/pagination invariant rather than adding redundant tests.

Copy link
Copy Markdown
Collaborator Author

Hourly QA update — 2026-09-10 13:33 JST

Inspection

Change

Commit 779acf4783fc8b4b064c4f23a421e6de179b702atest(control-center): guard follower efficiency at zero reach

Strengthened the existing zero-view regression with an exact-YouTube case:

  • a collected 24h observation has views = 0 and followers_gained = 3;
  • exact follower attribution must remain 3;
  • both lane and experiment-arm followersPer1kReach must stay null, not Infinity/0/a fabricated conversion rate;
  • basis remains exact and zero reach still counts as a usable reach sample.

Only apps/control-center/src/server/services/social-growth-zero-view.test.ts changed. No production code, workflow, docs, ignores, mocks, CI gates, or thresholds changed.

Commands / validation

  • GitHub compare main...test-qa/ongoing-coverage-20260909diverged, ahead 26 / behind 1; main-only commit is the automated daily track-record snapshot.
  • GitHub previous-head workflow lookup → CI #2490 success.
  • Local DevSpace open_workspace ~/zapEngine → FAILED: We couldn't connect your account; no local test command could be executed and no local repo files were modified.
  • GitHub source reads / patch inspection → PASS.
  • New-head CI lookup → CI #2491 (34437740013) queued for 779acf4783fc8b4b064c4f23a421e6de179b702a; this is the authoritative focused/broad validation for the new test.

Auto-merge

Not enabled. Updated-head CI is not green yet, PR is currently reported non-mergeable while behind main, and repository allow_auto_merge=false / allow_update_branch=false; no protections will be bypassed.

Next QA target

If CI #2491 is green, inspect estimated (non-YouTube) follower attribution around zero-total-reach and mixed zero/non-zero observations, then move to the next uncovered social-growth.ts aggregation branch rather than duplicating the exact-YouTube boundary.

Copy link
Copy Markdown
Collaborator Author

Test QA run update

CI-first run. Reused this ongoing QA PR and inspected the current head, active diff, workflow run, quick-gate artifact, relevant zero-view regression test, and divergence from main.

CI investigation

  • CI #2491 (34437740013) completed failure.
  • Jobs: tests PASS, deploy-gates PASS, security PASS, e2e PASS; failure was isolated to quick-gates.
  • Downloaded artifact quick-gates-verify-1 (10136809008) and inspected:
    • repo PASS
    • contracts PASS
    • format FAIL
  • format.log showed exactly one Prettier diff in apps/control-center/src/server/services/social-growth-zero-view.test.ts: the YouTube platform lookup needed multiline formatting. No behavior/test assertion failure was present.

Change

  • Commit 8844262801c0976f09c8d0cb1d0a436a1b4d3ed4test(control-center): format zero-reach follower regression
  • Formatting-only change to the existing regression test; no production code, CI/workflow, docs, ignores, mocks, or thresholds changed.

Commands / results

  • GitHub get_pr_info for PR [test-qa-hourly] test: classify missing canonical jobs as unknown #435 — open, non-draft, mergeable before this update.
  • GitHub fetch_commit_workflow_runs for 779acf4783fc8b4b064c4f23a421e6de179b702a — CI #2491 failure.
  • GitHub workflow jobs inspection — isolated failure to quick-gates; tests and other visible gates passed.
  • GitHub artifact listing + download of quick-gates-verify-1 — PASS/PASS/FAIL for repo/contracts/format.
  • Artifact inspection (unzip, grep, sed) — exact Prettier-only diff identified.
  • GitHub fetch_file + update_file — applied only the formatter output on the ongoing QA branch.
  • GitHub compare test-qa/ongoing-coverage-20260909...main — branch diverged; main is ahead by one commit touching only apps/landing-page/public/track-record-meta.json, while QA contains 28 commits not in main. No conflict with this focused test fix.
  • New CI #2492 (34441555105) is queued for head 8844262801c0976f09c8d0cb1d0a436a1b4d3ed4 and is the authoritative validation for this change.

Auto-merge

Not enabled: updated-head CI is not green yet. No protections were bypassed.

Next QA target

Once #2492 is green, inspect estimated (non-YouTube) follower attribution around zero total reach / mixed zero-and-nonzero reach, then choose one uncovered regression-prone aggregation branch only if the existing tests do not already pin it.

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

Copy link
Copy Markdown
Collaborator Author

Hourly Test QA — 2026-09-10 15:33 JST

Inspection

Safe sync with main

  • Pre-sync comparison: branch was ahead 28 / behind 2 from merge base 57253ae....
  • The two main-only commits were generated snapshot refreshes. Their five changed files were inspected and did not overlap the QA PR's changed-file set.
  • Created merge commit 3c40be71f1185043b341ec7ff9a37b2bb7ef3855 with both parents (88442628..., e8f4e379...) and a merged tree that preserves the QA branch plus the latest main snapshot files.
  • PR now reports base e8f4e379... and is mergeable.

QA change

Commit: fa1a58a8e067b167ffd347e2021a6c76432eb8d2test(control-center): guard estimated follower efficiency at zero reach

Added one regression case to social-growth-zero-view.test.ts for non-YouTube estimated attribution:

  • Threads follower snapshots increase 10 -> 12.
  • The only 24h post metric has views = 0 but positive engagement, so attribution can legitimately estimate +2 followers.
  • Assert lane followersGained7d = 2, arm followersAttributed = 2, but both followersPer1kReach = null because total reach is zero.
  • This complements the existing exact-YouTube zero-reach test and directly locks the estimated-attribution path.
  • Test fixture client was extended minimally to return account snapshots; no production code, workflow, docs, ignores, thresholds, or unrelated refactors changed.

Validation / commands and results

No local shell/DevSpace execution is available in this connector session, so PR CI remains the authoritative executable validation.

GitHub-side validation performed:

  • fetch_commit_workflow_runs(88442628...) -> CI #2492 success.
  • compare_commits(main, test-qa/ongoing-coverage-20260909) -> diverged, ahead 28 / behind 2 before sync.
  • compare_commits(57253ae..., main) -> exactly 2 main commits / 5 generated snapshot files.
  • merge-tree + two-parent merge commit -> success (3c40be71...).
  • update_ref(test-qa/ongoing-coverage-20260909 -> 3c40be71...) -> success.
  • test commit fa1a58a8... -> success, diff limited to social-growth-zero-view.test.ts.
  • PR metadata -> open, non-draft, mergeable, head fa1a58a8..., 14 changed files total.
  • CI #2494 (34445987943) for fa1a58a8... -> queued at time of this update.

Auto-merge

Not enabled. Updated-head CI is not green yet, and repository setting allow_auto_merge=false is an independent blocker. No protections were bypassed.

Next QA target

After CI #2494 is green: inspect mixed zero/nonzero reach under estimated attribution, especially whether total-reach aggregation and follower-efficiency stay correct when one attributed post has zero reach and another has positive reach. Only add a test if that behavior is not already directly covered.

Copy link
Copy Markdown
Collaborator Author

Test QA run — 2026-09-10

Inspection

Change

Commit 915d6f6682235cbc223829ab7879796e66b8a0e2test(control-center): cover mixed zero and nonzero reach attribution

Added one regression case to social-growth-zero-view.test.ts for estimated follower attribution when one Threads post has zero reach and another has nonzero reach. The test pins that:

  • both 24h observations remain samples;
  • zero reach participates as 0 in reach aggregates;
  • total follower attribution remains +2;
  • the efficiency denominator is actual total reach (100), yielding followersPer1kReach = 20 at both lane and experiment-arm levels.

No production code, workflow, docs, ignores, thresholds, or unrelated refactors changed.

Commands / validation

  • GitHub CI lookup for previous head → PASS: CI #2494.
  • GitHub compare fa1a58a...main → diverged; 1 main-only commit, only apps/landing-page/src/data/distribution-snapshot.json changed.
  • GitHub source inspection of CI workflow / coverage script / relevant implementation and tests → PASS.
  • Local focused test command could not be run because authenticated DevSpace returned We couldn't connect your account; no local files were modified.
  • New-head CI #2495 (34450661177) for 915d6f66... → queued; this is the authoritative executable validation.

Auto-merge

Not enabled: updated-head CI is not green yet, and the branch is not currently mergeable with main; no protection is bypassed.

Next QA target

After #2495 is green, inspect the attribution split when zero-reach posts have engagement/profile activity versus reach-bearing posts, especially whether per-post estimated shares and aggregate efficiency remain internally consistent without double-counting.

Copy link
Copy Markdown
Collaborator Author

Hourly QA update — 2026-09-10

Inspection

CI-first root cause

Previous head 915d6f6682235cbc223829ab7879796e66b8a0e2 failed CI run #2495 (34450661177). Jobs showed tests failed while quick-gates, E2E, security, and deploy-gates passed. tests-verify-1 shows one failed test out of the Control Center suite:

loadSocialGrowth zero-view metrics > uses only real reach in estimated efficiency when zero and nonzero posts are mixed

The behavior was correct; the new test used exact equality for floating-point estimated attribution. Received values were 1.9999999999999998 and 19.999999999999996 instead of literal 2 and 20.

Action

Commit ef7726b0c9747d4739d1fc9b91c36be9bd630288test(control-center): tolerate estimated attribution float precision

Only the regression test changed. Structural assertions (basis, reach/sample counts) remain exact; estimated follower values now use Vitest toBeCloseTo(..., 10). No production implementation, CI workflow, docs, ignores, thresholds, mocks, or unrelated refactors changed.

Commands / results

  • GitHub fetch_commit_workflow_runs(915d6f6...)FAIL, CI #2495.
  • GitHub workflow jobs inspection — tests FAIL; quick-gates / E2E / security / deploy-gates PASS.
  • Downloaded and inspected tests-verify-1 artifact — 1 failed / 637 passed in the Control Center Vitest portion; failure is exact float equality.
  • GitHub source inspection of social-growth-zero-view.test.tsPASS.
  • GitHub source inspection of .github/workflows/ci.yml and scripts/coverage.shPASS, gates unchanged.
  • New head CI #2496 (34456030501) — in progress; authoritative validation pending.

Auto-merge

Not enabled. Updated-head CI is not green yet, and the branch is currently one automated snapshot commit behind main; no protection is bypassed.

Next QA target

After #2496 is green, inspect the per-post estimated attribution split when a zero-reach post still has engagement/profile activity, looking for double-counting or aggregate/per-post inconsistency before adding any further regression.

Copy link
Copy Markdown
Collaborator Author

Hourly QA update — 2026-09-10

Inspection

  • Reused this open Test QA PR ([test-qa-hourly], branch test-qa/ongoing-coverage-20260909).
  • Previous head ef7726b0c9747d4739d1fc9b91c36be9bd630288: CI #2496 (34456030501) completed success.
  • Reviewed current PR diff and relevant attribution implementation/tests.
  • Reviewed .github/workflows/ci.yml; quick gates remain format repo contracts, quality gates type-check lint deadcode dup, tests test analytics, with E2E/security/deploy gates unchanged.
  • Reviewed scripts/coverage.sh; coverage entrypoint remains turbo run test:coverage then tsx scripts/coverage-summary.ts.
  • Test hygiene search found no skipped/todo/focused test matches.
  • Branch comparison before this change: diverged from main, ahead 32 / behind 1. The QA branch was not force-reset or rewritten.

Change

Added one regression test to apps/control-center/src/server/services/social-attribution.test.ts:

  • verifies that an observation marked collection_status: 'unavailable' is excluded when selecting the activity endpoint;
  • verifies attribution instead uses the latest valid collected endpoint inside the interval;
  • locks the expected deltas (reach +40, engagement +4) so an unavailable/sentinel row cannot inflate follower attribution.

Commit: 1f4d3f635472bb13ec6a3ed39aafef6d910d41d4test(control-center): ignore unavailable attribution endpoints

No production implementation, workflow, docs, CI gates, ignores, mocks, or coverage thresholds changed.

Commands / validation

  • GitHub CI lookup for previous head → PASS: CI #2496.
  • GitHub source inspection: PR metadata/diff, social-attribution.ts, social-attribution.test.ts, social-growth-zero-view.test.ts, experiment-readiness tests, CI workflow, coverage script → PASS.
  • Test hygiene code search (test.skip / it.skip / describe.skip / todo / focused tests) → no matches.
  • Local focused validation attempt via authenticated DevSpace workspace (~/zapEngine) → BLOCKED by connector error: We couldn't connect your account. Please try again. No local repository mutation occurred.
  • New head CI #2497 (34461477180) → queued; this is the authoritative validation for the new regression test.

Auto-merge

Not enabled: updated-head CI has not completed yet. No branch protection is being bypassed.

Next QA target

After #2497 is green, inspect another data-quality boundary in follower attribution: baseline rows marked unavailable / missing endpoint combinations, especially where stale provider rows could otherwise create false deltas.

@vercel
vercel Bot temporarily deployed to Preview – zap-engine-control-center September 10, 2026 10:30 Inactive

Copy link
Copy Markdown
Collaborator Author

Hourly Test QA — 2026-09-10

Inspection

Sync

Safely merged main into the QA branch without force/reset by creating merge commit 7f70fa0bdae35517dea7eed5cecaa36197275ac3, preserving the QA tree plus the single main-only generated snapshot. Post-sync comparison: ahead 35 / behind 0 after this run's test commit.

QA change

Added apps/control-center/src/server/services/social-attribution-unavailable-baseline.test.ts in commit 698f9d99a1f71e1011bade14dc36c4f11127bd85.

The regression pins a separate fail-soft boundary from the prior endpoint test: if the observation exactly at the follower interval boundary is collection_status: 'unavailable', computePostActivity must ignore that terminal row and use the latest earlier collected baseline. Example pinned result: collected baseline views/likes 100/5 -> unavailable boundary 999/99 -> collected endpoint 140/9 must yield deltaReach=40 and deltaEngagement=4, not values derived from the unavailable row.

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

Validation / commands and results

  • Previous authoritative validation: GitHub Actions CI #2497 — PASS.
  • compare main...test-qa/ongoing-coverage-20260909 before sync — diverged, ahead 33 / behind 1.
  • Safe Git-data merge of main snapshot commit — PASS; no force update used.
  • compare main...test-qa/ongoing-coverage-20260909 after change — ahead 35 / behind 0.
  • Coverage summary artifact from CI #2497 downloaded and inspected — PASS; metrics recorded above.
  • No repository shell checkout is available in this connector session, so focused vitest/repo-native local commands could not be executed here. The new PR-head CI is the executable validation rail.
  • New head CI #2499 (34466535164) — pending for 698f9d99a1f71e1011bade14dc36c4f11127bd85.

Auto-merge

Not enabled: the updated-head CI is still pending. Repository setting allow_auto_merge=false is also an explicit blocker; no protections were bypassed.

Next QA target

If #2499 is green, inspect exact YouTube follower attribution for the analogous data-quality edge: a standardized row marked unavailable must not outrank a valid cumulative row merely because its age_hours is larger. Only add a test/fix if current producer + consumer contracts prove that behavior should be excluded.

Copy link
Copy Markdown
Collaborator Author

Hourly Test QA — 2026-09-10 20:31 JST

Inspection

Finding / change

computePostActivity already rejects collection_status='unavailable', but exactYoutubeFollowersByPost did not. social-growth.ts intentionally loads standardized metric rows without filtering collection status and passes them to the exact YouTube helper, so a newer unavailable cumulative row with a larger age_hours could overwrite the last valid collected follower count.

Minimal fix + regression:

  • e2718e33f151ff75541041a0c0704bc2e1925efefix(control-center): ignore unavailable exact YouTube metrics
  • f9ad2f84d05db4f2e47fc24d57f4bbaad33c5254test(control-center): reject unavailable exact YouTube rows
  • New regression proves a valid 24h row (followers_gained=2) wins over a newer 72h unavailable row (followers_gained=99).
  • No workflow/docs/CI-gate/ignore/threshold/refactor changes.

Validation / commands and results

No local shell workspace is available in this connector session, so executable validation is delegated to repository CI rather than fabricating a local result.

GitHub source-of-truth checks performed:

  • fetch_commit_workflow_runs(698f9d99...) → CI #2499 success.
  • compare main...test-qa/ongoing-coverage-20260909ahead 35 / behind 0 before change.
  • Inspected CI workflow → quick format repo contracts; quality type-check lint deadcode dup; tests test analytics; E2E/security/deploy gates unchanged.
  • Inspected coverage aggregator → Istanbul + pytest Cobertura discovery and monorepo summary remain intact.
  • fetch_commit_workflow_runs(f9ad2f84...) → CI #2501 (34471904083) pending; this is authoritative validation for the new head.

Auto-merge

Not enabled: updated-head CI is still pending. I also did not bypass protections or merge while validation is incomplete.

Next QA target

If #2501 is green, inspect exact YouTube selection for malformed/non-finite age_hours and duplicate same-window rows; only add coverage if repository producer semantics show a real ambiguity.

Copy link
Copy Markdown
Collaborator Author

Hourly QA update — 2026-09-10

Inspection:

Change:

  • cc03a77d969f494a348c4708975dcb373df2f193test(control-center): preserve exact zero YouTube growth
  • Strengthened social-attribution-unavailable-exact.test.ts to pin that a collected standardized YouTube row with followers_gained = 0 is still an exact result: the map must contain the post and return 0. This protects against a future truthiness regression (if (!followers_gained)) that would silently erase a valid zero and could cause downstream code to treat exact data as absent.
  • Tests only; no production implementation, workflow, docs, ignores, thresholds, or unrelated refactors changed.

Validation / commands:

  • GitHub fetch_commit_workflow_runs(f9ad2f84...) — PASS: CI #2501 success.
  • GitHub source inspection for recent commits/open PRs/workflow/coverage/implementation/tests/schema — PASS.
  • Local DevSpace open attempt — BLOCKED transiently with We couldn't connect your account; no local repo mutation occurred.
  • Focused local test / broader lint/typecheck/coverage could therefore not be executed locally in this run.
  • New-head PR CI for cc03a77... had not appeared yet at the first post-push check; it is the authoritative executable validation for this commit.

Auto-merge:

  • Not enabled. New-head required checks are not yet proven green, and repository auto-merge policy must still permit it before enabling.

Next QA target after green CI:

  • Verify the consumer path distinguishes exact 0 from missing exact attribution (Map has/nullish semantics). If already covered end-to-end, move to the next uncovered aggregation/data-quality branch rather than duplicating coverage.

Copy link
Copy Markdown
Collaborator Author

Hourly QA update — 2026-09-10

Inspection

Action

Added one regression assertion to social-attribution-unavailable-exact.test.ts proving that a non-YouTube post with a standardized followers_gained value is never admitted into the exact YouTube attribution map. This pins the provider-boundary contract around exactYoutubeFollowersByPost and protects downstream Growth from accidentally treating Threads/X/Rednote follower metrics as exact YouTube subscriber attribution.

Final change commit: 2c6ca28741f97b0a2fb9eb5b045720695dc0aaaatest(control-center): keep exact attribution YouTube-only.

During investigation I also created a temporary probe for unavailable standardized 24h rows, which revealed a separate plausible Growth data-quality target (metrics24hForPostIds currently does not itself reject collection_status='unavailable'). Because the local DevSpace connector is unavailable and landing that behavior safely requires a focused implementation+test edit, the probe was removed before finalizing this run rather than leaving an intentionally failing/noise test. No net probe file remains in the PR diff.

Commands / validation

  • GitHub PR metadata/search/compare — PASS; PR [test-qa-hourly] test: classify missing canonical jobs as unknown #435 reusable, open, non-draft, mergeable at inspection time; branch ahead 38 / behind 0.
  • Previous-head workflow lookup — PASS; CI #2502 = success.
  • Recent main commits lookup — PASS; latest main commit 9c71b974....
  • CI workflow read — PASS; gates unchanged.
  • Coverage script read — PASS; coverage entrypoint unchanged.
  • Relevant implementation/test reads + PR patch inspection — PASS.
  • Local focused validation attempt via DevSpace ~/zapEngineBLOCKED: connector returned We couldn't connect your account. Please try again. No local file mutation occurred.
  • New-head workflow lookup for 2c6ca287... — CI #2505 (34483574527) currently pending; this is the authoritative executable validation for the new head.

Auto-merge

Not enabled: latest-head CI is still pending. Do not bypass repository protections.

Next QA target

After #2505 is green, investigate standardized 24h Growth aggregation with collection_status='unavailable'. The standardized query intentionally keeps those rows for exact YouTube selection, but metrics24hForPostIds() currently filters only by post ID + measurement_window === '24h'; verify with a focused regression test whether unavailable rows can inflate samples24h, reach, or engagement-rate aggregates, then apply only the minimal consumer-side guard if proven.

@i-xtsu-sixyou-ken-mei
i-xtsu-sixyou-ken-mei merged commit 1b72c3e into main Sep 10, 2026
12 checks passed
@i-xtsu-sixyou-ken-mei
i-xtsu-sixyou-ken-mei deleted the test-qa/ongoing-coverage-20260909 branch September 10, 2026 14:09
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