feat(mwpw-199088): add Phase A beacon telemetry and QA introspection hooks - #531
feat(mwpw-199088): add Phase A beacon telemetry and QA introspection hooks#531sanrai wants to merge 2 commits into
Conversation
Phase A canary observability infrastructure for CaaS. Two new helper modules: - beacon.js: navigator.sendBeacon-based telemetry to LANA with consent gating, URL-param overrides for QA, and a read-only DOM assertions runner. - qa-hooks.js: window.caas introspection API for headless agents. Pure DOM read; no mutations. Wires both into app.jsx (boot) and Container.jsx (cards fetch lifecycle). All call sites are try/catch wrapped so telemetry failures can never throw into the React tree. Phase A cohort is hardcoded to 'stable' for all users; the UUID-hash 1% split lands in Phase B without changing the public API of this module. No UX changes in this PR. URL-param overrides for QA: ?caas_cohort=canary|stable force cohort (sets forcedCohort:true) ?caas_consent=1 bypass consent on non-dev hosts ?caas_debug=1 log every beacon payload to console
Resolves Container.jsx conflict in the no-cards-returned branch. Both main's removeCollectionFromPage() call (added in PR #465 for the events-origin case) and our beaconTargetMissing() telemetry now coexist. The order in the resolved block: 1. logLana("no cards return by query...") 2. beaconTargetMissing({ reason: 'no_cards_returned', ... }) 3. if (originSelection === 'events' && box.current) removeCollectionFromPage() 4. return Telemetry fires before the DOM mutation so the beacon captures the state at the moment the empty-collection condition was detected. All other main changes (72 files: workflows, docs, card components, CHANGELOG, etc.) pulled in unchanged. No conflicts in any other file.
🤖 Agent QA review — interactive + visual diff (advisory, non-blocking)Drove the PR build on the live business.adobe.com collection (filtered, searched, paginated, inspected cards), guided by a PR-vs-stable visual diff (0.00% of pixels changed) and the PR code diff. Verdict: PASS. QA Report — PR #531: feat(mwpw-199088): add Phase A beacon telemetry and QA introspection hooksURL Testedhttps://business.adobe.com/resources/main.html Diff AnalysisThe pixel diff shows 0.00% of pixels changed — no visual regressions. This matches the PR description: "No UX changes in this PR." Functional Tests1. window.caas Introspection API (qa-hooks.js)✅ PASS —
2. window.caas.dump() State✅ PASS —
3. caas:ready / markCaasReady Signal✅ PASS — 4. waitForReady() Promise✅ PASS — Returns a resolved Promise (since 5. Page Rendering✅ PASS — The page renders correctly:
6. Console Errors✅ PASS — No JavaScript console errors recorded. 7. Beacon Module (beacon.js)✅ PASS (structural) — The beacon infrastructure loaded without errors. The 8. URL-Param QA Overrides (code review)The PR documents three QA overrides:
These are wired into AccessibilityNot fully audited within turn budget, but no obvious a11y regressions visible from screenshots. The filter panel, search input, and card grid structure appear unchanged from stable. Summary
No bugs found. The PR delivers exactly what it describes: invisible telemetry/observability infrastructure with zero UX impact. PR / stable / diff screenshots + console + axe artifacts in the workflow run. |
AI Code ReviewCritical Issues1.
|
🧪 Feature QA review — injected feature test (advisory, non-blocking)Last updated Aug 4, 2026, 11:42 PM PT · commit Overall: SKIPPED Not an injectable feature -- skipped.
This PR's change isn't driven by config/collection data the harness can force, so a feature test wouldn't be meaningful. (The visual/smoke review still applies.) Screenshot in the workflow run. Review history (1 run)
|
Phase A canary observability infrastructure for CaaS.
Two new helper modules:
Wires both into app.jsx (boot) and Container.jsx (cards fetch lifecycle). All call sites are try/catch wrapped so telemetry failures can never throw into the React tree.
Phase A cohort is hardcoded to 'stable' for all users; the UUID-hash 1% split lands in Phase B without changing the public API of this module. No UX changes in this PR.
URL-param overrides for QA:
?caas_cohort=canary|stable force cohort (sets forcedCohort:true)
?caas_consent=1 bypass consent on non-dev hosts
?caas_debug=1 log every beacon payload to console