Quality & security
Action linter —
WR_lint_actionwarns about legacy command names, hard-coded URLs, dangerous scripts, missing tags, duplicate consecutive actions.Migration helper —
python -m je_web_runner --migrate ./actionsrewrites legacy aliases to the preferred names.Hard-coded secrets scanner —
scan_action_filecatches common credential / token patterns.HTTP security headers audit —
audit_urlchecks HSTS / CSP / X-Frame-Options / X-Content-Type-Options / Referrer-Policy / Permissions-Policy.Accessibility audit —
axe-coreinjection helpers; user supplies the source file viaload_axe_source(path).Lighthouse runner — shells out to the official
lighthouseCLI;assert_scoresenforces budgets.Page perf metrics —
selenium_collect_metrics/playwright_collect_metrics(FCP / LCP / CLS / TTFB).Visual regression —
capture_baseline/compare_with_baseline(Pillow soft dependency).Snapshot testing —
match_snapshot/update_snapshot(text / DOM with unified-diff mismatch).Network throttling —
selenium_emulate_network("slow_3g")/playwright_emulate_network("offline")(CDP).Arbitrary-script gate —
executor.set_allow_arbitrary_script(False)blocksWR_execute_script/WR_execute_async_script/WR_pw_evaluate/WR_cdp/WR_pw_cdpfor untrusted action JSON.
Security probes
header_tampering.HeaderTampering()— rule list + Playwrightpage.route()integration to set / remove / append headers.license_scanner.scan_text(bundle_text)— find SPDX identifiers and known license phrases;assert_allowed_licenses(findings, allow=, deny=)for SBOM gates.cookie_consent.ConsentDismisser().dismiss(driver)— auto-click OneTrust / TrustArc / Cookiebot / Didomi / Quantcast accept buttons.
PII scanner & visual review
pii_scanner.scan_text(text)findsemail/phone_e164/ Luhn-checkedcredit_card/ssn_us/ checksum-validatedtaiwan_id/ipv4.assert_no_piiandredact_textare the CI gate / sanitiser.visual_review.VisualReviewServer(baseline_dir, current_dir).start()serves a local web UI with side-by-side images and an Accept current as baseline button (path-traversal guarded).
Form auto-fill / A11y diff
form_autofill.plan_fill_actions(fields, fixture, submit_locator=...)— infers each field’s purpose fromdata-testid/id/name/placeholder/label/typeand emits a runnable action sequence.accessibility.a11y_diff.diff_violations(baseline, current)— buckets axe-core findings intoadded/resolved/persistingkeyed on(rule_id, target);assert_no_regressions(diff)is the CI gate.