fix(martech): adding customer-golden click-tracking parity harness and improve block's parity - #872
Conversation
Second, customer-authoritative golden (from 161 real prod beacons) plus an un-gameable oracle for validating our EDS rebuild against it: - payloads-to-golden: transform the customer drop into a golden (integrity-locked) - field-policy + oracle-lib: full-field taxonomy (GATED value-match / frozen PRESENCE-only / structural-exception), host + index normalization, MIN-across- axes verdict, golden hash lock - customer-oracle: fast offline gate; stage-parity + stage-sweep: live gates - contract-audit (adds pseudonym_id, link_href, link_href_domain), golden-crosscheck, coverage-matrix parameterized (--golden/--sheet/--out) - wire feature-grid CTAs to the `feature` trail + real-render test Customer payloads/goldens stay local (gitignored under fixtures/local/); the committed surface is counts/field-names only. Pre-existing test failures unchanged. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
Hello, I'm the AEM Code Sync Bot and I will run some actions to deploy your branch and validate page speed.
|
The highlight callout is prod's banner. Its trail is variant-dependent — the `dark` promo banner (e.g. /events "Register now"/"Schedule a demo") reports `rw_banner`; the default/light callout (e.g. blog "Learn more") reports `product_banner`. Wire blocks/highlight/highlight.js with a variant-aware trackAs + BLOCK.product_banner in the gate, guarded by test/highlight-tracking.test.js (real decorate + delegated runtime, both variants). Closes the product_banner component gap (offline oracle 88.9% -> product_banner 100%, all components now >=95%). Confirmed live: stage /events renders these CTAs in the highlight (dark) block. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
Wired the last identified gap: prod's The trail is variant-dependent — both goldens proved it:
Wired variant-aware Offline oracle is at 94.1%, now blocked only by the |
Keep CLICK-TRACKING-COVERAGE-customer.md and CLICK-TRACKING-ORACLE.md local/uncommitted. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Two click-tracking trail gaps surfaced by the customer golden: - cards: the prev/next arrows + dots live in .cards-controls (sibling of .cards-track), so they resolved to rw_cards_container instead of prod's rw_cards_container|carousel. Wire .cards-controls -> carousel. - case-study-header: the share row emitted a flat social_media; prod nests it under the article hero. Make .case-study-copy the qrc_article_hero root and nest .case-study-share -> qrc_article_hero|social_media (eyebrow/byline stay flat; ToC stays TableOfContents). Gate BLOCK trails + real-render tests (cards-tracking, case-study-header-tracking) updated to match. Customer-golden offline oracle now PASSES (100%; only the live-only link_href/ link_href_domain remain, emitted by the injected tracker at click time). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
## What Wire click-tracking on the **blog-template article share row** (`.blog-share`), a follow-up to the merged parity harness (#872). ## Why Live-verifying the case-study social fix on stage revealed that the customer golden's `social` share entries (facebook/twitter/linkedin/youtube on regular blog articles, e.g. `/blog/construction/automation-in-construction`) are rendered by **blog-template's `.blog-share`**, *not* the `case-study-header` block — and `.blog-share` was **completely un-wired** (fired no beacon). The offline oracle had modeled these as `case-study-header` (a synthetic-gate false pass); the live check caught the real gap. ## Fix `.blog-share` now carries a **self-contained** trail so it reports prod's `qrc_article_hero|social_media` and survives the mobile↔desktop relocation of the widget: `qrc_article_hero` on the row, `social_media` on a new `display:contents` `.blog-share-links` span wrapping the links. **No visual change** (tracking attributes only). Guarded by `test/blog-share-tracking.test.js`. The earlier `case-study-header` fix remains correct for `/blog/case-study/*` pages. Note: prod is inconsistent here (double-keys these links as standalone `social_media` on some templates and `qrc_article_hero|social_media` on others) — we match the customer-authoritative nested trail. Test URL: https://claude-golden-tracking-payloads-405475--intuit-erp--aemsites.aem.page/events 🤖 Generated with [Claude Code](https://claude.com/claude-code)
What this is
A second, customer-authoritative click-tracking golden (built from 161 real prod
erp.intuit.combeacons the customer shared) plus an un-gameable oracle to validate ourEDS rebuild reproduces it — and to drive the remaining parity work to ≥95% across the board.
This is harness/tooling (under
scripts/diff/) plus one block wiring change(
blocks/feature-grid/feature-grid.js). Draft — opening to share progress.Why
Our existing
clicktrack-golden.jsonwas reverse-engineered by us. The customer set isground truth, covers 13 net-new pages, and carries the full ~60-field envelope — so it can
validate the whole beacon (not just the 11 DOM-derivable fields) and cross-check our golden.
What's here
2nd golden + transform —
payloads-to-golden.mjsturns the customer drop into a golden(integrity-locked: the oracle re-hashes it and refuses a hand-edited golden).
Un-gameable oracle —
fixtures/field-policy.json(single source of truth: every fieldis
GATEDvalue-match / frozenPRESENCE-only-with-reason / structural-exception; host +index normalization) +
oracle-lib.mjs(MIN-across-axes verdict — overall × event ×component × field × coverage — so a weak component can't be averaged away).
Gates —
customer-oracle.mjs(fast offline loop gate) andstage-parity.mjs+stage-sweep.mjs(live full-envelope gate).Supporting —
contract-audit.mjs(reconciled the backend contract; addspseudonym_id,link_href,link_href_domain),golden-crosscheck.mjs(91.4% agreement vs ourreverse-engineered golden), parameterized
parity-gate/gen-sheet/coverage-matrix.One behavior change —
feature-gridCTAs now emit thefeaturetrail (trackAs),guarded by
test/feature-grid-tracking.test.js(realdecorate+ delegated runtime).Results
product_banner— now identified as ourhighlightblock (dark variant) on/events,currently un-wired for tracking (the one remaining fix).
matches prod (host-normalized
stage→erp,env=prod, consent,site_section,accordion_item_Nindex-tolerant); onlyui_actionopen-vs-close differs (capture artifact).Privacy
Raw payloads + both goldens + sheet stay local (gitignored under
fixtures/local/) — theycarry session/visitor ids and campaign codes. The committed surface is counts/field-names
only (gitleaks-clean).
Notes for review
feature-gridclick-tracking. Featurepreview base:
https://claude-golden-tracking-payloads-405475--intuit-erp--aemsites.aem.page/(branch name may exceed the aem.page DNS-label cap; the change is validated via the scripts +
npm test, not a visual page diff).🤖 Generated with Claude Code