> **QKForce integration:** QKTestAnalytics 0.4.1 is the pinned reporter adapter used by the fixed CWQ profile. Reports must contain test evidence only; package configuration and raw version-locked CSV inputs are excluded by the Client when it produces `results.zip`. # QKTestAnalytics reporting QKForce Framework CWQ integrates the official `@qacg/qk-test-analytics/adapters/wdio-cucumber` adapter through WebdriverIO lifecycle hooks. The adapter emits runner-neutral events and keeps the legacy-compatible report layout only as a portable result format; the template does not call QReport APIs directly. ## Lifecycle and evidence 1. WebdriverIO starts the adapter with its actual session instance. 2. Feature, scenario and step hooks emit ordered QKTestAnalytics events. 3. Failed steps capture a screenshot by default (`capture: 'on-failure'`). 4. Report JSON is stored in `qreport-results/media-bucket/reports/current.json` and evidence is stored by reference under `qreport-results/media-bucket/`. 5. `npm run qkforce:report` creates a portable HTML report; `npm run qkforce:analytics` creates cross-run analytics. The adapter intentionally uses the session passed by WDIO rather than a global browser object. Custom evidence can be attached from a step definition only while a step is active. ## Result-artifact policy Collect `qreport-results/` into the execution `results.zip`. Review evidence before sharing it: screenshots can contain application data. Do not attach passwords, tokens, cookies, authorization headers, raw CSV rows, or other secrets as QKTestAnalytics evidence or logs. No video-generation pipeline is included. This removes the former Python/OpenCV dependency while retaining portable screenshots, report data and HTML reporting.