Commit Graph
100 Commits
Author SHA1 Message Date
pj a23fef3cee fix(chrome): raise DevTools websocket read timeout to 60s
Chrome cold-start on a loaded CI runner can exceed chromedp's 20s
default for reading the DevTools websocket URL, flaking the browser
tests with "websocket url timeout reached". Give launch more headroom.
2026-06-02 09:44:50 +05:30
pj c27d1b3e4a test(defaults): drop stale longPresses re-export assertion
longPresses is opt-in vocabulary, no longer re-exported from
defaults/actions.ts since e0d3b20; its builtin resolution is already
covered by api.test.ts. Trim the defaults test to scrolls, which is an
actual default export.
2026-06-02 09:19:17 +05:30
pj 26a318a8ef fix(build): point sidecar jar ignore and embed paths at sidecarassets 2026-06-02 09:09:17 +05:30
pj e0d3b20f42 feat(defaults): trim scroll action weight wiring 2026-06-02 09:09:17 +05:30
pj bdef4a641a feat(defaults): add scroll and rebalance action weights
Use relative-integer weights (taps/typing co-primary 100, scrolls 50,
swipes 25, doubleTaps 10); the picker normalizes by their total. Adds
scrolls to defaultActions as a first-class reveal behavior.
2026-06-02 09:03:59 +05:30
pj 1ecfc97266 ci(browser): pin stable Chrome for the driver tests
setup-chrome's default latest pulled a dev Chromium (150) whose remote
debugging socket never came up under chromedp, while plain --dump-dom
worked. Pin the stable channel, which the driver is tested against.
2026-06-02 02:21:12 +05:30
pj 96097fb6ea ci(browser): re-enable unprivileged user namespaces for headless Chrome
ubuntu-latest moved to 24.04, whose AppArmor restriction on unprivileged
user namespaces stops headless Chrome from opening its DevTools socket
even with --no-sandbox, surfacing as the driver's 'websocket url timeout'.
Relax the sysctl for the job and add a direct launch check so a future
breakage shows Chrome's own stderr rather than an opaque driver timeout.
2026-06-01 23:20:59 +05:30
pj c41e4d0195 fix(web-runtime): guard global error listeners for non-browser hosts
The module registered window error/unhandledrejection listeners at top
level, which threw under Node (the spec-api test runner) where
globalThis.addEventListener is absent. Register only when the API exists;
the real browser run is unaffected.
2026-06-01 23:11:05 +05:30
pj 95d64d6452 chore(make): run chrome driver tests in the browser job 2026-06-01 23:06:34 +05:30
pj 6da71b5363 test(chrome): gate real-Chrome driver tests behind the browser tag 2026-06-01 23:06:34 +05:30
pj d3665fc7c3 fix(chrome): add disable-dev-shm-usage so Chrome starts in CI 2026-06-01 23:06:34 +05:30
pj 69a9e7eb87 docs(sidecarassets): add package doc for embedded JAR loader 2026-06-01 22:46:50 +05:30
pj 0ba302f9e4 docs: add package docs to trace and verifier 2026-06-01 22:46:50 +05:30
pj 91b00ec9d9 docs: add package docs to runner and testrun pipeline 2026-06-01 22:46:50 +05:30
pj f21028b26e docs(ltl): add package doc to temporal logic evaluator 2026-06-01 22:46:35 +05:30
pj 546f623c04 docs: add package docs to bundler and inspect 2026-06-01 22:46:34 +05:30
pj 09da879709 docs(platform): add package docs to android and ios device prep 2026-06-01 22:46:34 +05:30
pj 72798a76c9 docs(driver): add package docs to mock and sidecar backends 2026-06-01 22:46:21 +05:30
pj 73e41b0dd0 docs(driver): add package docs to driver interface and chrome backend 2026-06-01 22:46:21 +05:30
pj 31caed3e5f docs(cmd): add package docs to CLI and developer tools 2026-06-01 22:46:10 +05:30
pj d154b61d3f test(runner): assert double-tap delegates to driver DoubleTap 2026-06-01 22:45:00 +05:30
pj 3eb08c10b4 refactor(runner): delegate double-tap to driver, drop gesture timing 2026-06-01 22:45:00 +05:30
pj ffa84af591 refactor(mock): record DoubleTap and DoubleTapSelector actions 2026-06-01 22:44:56 +05:30
pj 198c9364fa refactor(chrome): implement DoubleTap as two taps with the gap 2026-06-01 22:44:56 +05:30
pj 902c8f6e90 refactor(sidecar): implement DoubleTap with the sub-100ms inter-tap gap 2026-06-01 22:44:56 +05:30
pj 757a41272a refactor(driver): add DoubleTap and DoubleTapSelector to DeviceDriver 2026-06-01 22:44:52 +05:30
pj e2682b96e1 refactor(driver): scrub backend tool name from comments 2026-06-01 22:44:24 +05:30
pj 19807dc4ab refactor(hierarchy): scrub backend tool name from comments 2026-06-01 22:44:20 +05:30
pj 73fd7b8ee5 docs(action-space): use vendor-neutral native driver wording 2026-06-01 22:44:13 +05:30
pj 9987cc95d4 refactor(bundler): use encoding/json for JS string literals 2026-06-01 22:43:32 +05:30
pj b7bae73aaa refactor(verifier): remove dead __sanderlingIndex compat alias 2026-06-01 22:43:27 +05:30
pj 251680bda3 fix(test): resolve testdata relative to browser_test.go 2026-06-01 22:39:55 +05:30
pj cb2a1cb8d5 refactor(testrun): use sidecarassets package 2026-06-01 22:39:30 +05:30
pj 9d382d0fd2 refactor(doctor): use sidecarassets package 2026-06-01 22:39:30 +05:30
pj b29d80d337 docs(decisions): record internal/permissions deletion 2026-06-01 22:38:56 +05:30
pj 1fa12903d4 chore(make): point test-browser at test/browser 2026-06-01 22:38:49 +05:30
pj fca56bc47e refactor(sidecarassets): rename internal/sidecar to internal/sidecarassets 2026-06-01 22:38:38 +05:30
pj 35255735d9 refactor(test): rename package to browser_test 2026-06-01 22:38:30 +05:30
pj 26293ae3c2 refactor(permissions): delete dead internal/permissions package 2026-06-01 22:38:26 +05:30
pj 51f3a3fc2a refactor(test): relocate browser suite to test/browser 2026-06-01 22:38:21 +05:30
pj 859eae53d4 ci: run the Chrome-driven browser suite in a separate job 2026-06-01 22:01:36 +05:30
pj 87e9719a8a chore(make): add test-browser target for the Chrome-driven suite 2026-06-01 22:01:36 +05:30
pj bafedcbb92 test(integration): drive web fixtures through the real pipeline in headless Chrome 2026-06-01 22:01:36 +05:30
pj a3047a87f4 test(integration): add specs for the web fixtures 2026-06-01 22:01:32 +05:30
pj b8b3c9b8f7 test(integration): add throwing and counter web fixtures 2026-06-01 22:01:32 +05:30
pj f26ede7151 feat(web-runtime): capture uncaught errors into state.exceptions 2026-06-01 22:01:25 +05:30
pj b4ab121fcb test(runner): golden snapshots for trace stream and violation summary 2026-06-01 21:59:55 +05:30
pj e820cff60d refactor(runner): extract RenderSummary for snapshot testing 2026-06-01 21:58:43 +05:30
pj f27e66c152 test(ltl): drop Verdict.String tautology tests 2026-06-01 21:56:12 +05:30
pj 5df421956c test(mock): drop default-field-value assertion test 2026-06-01 21:56:12 +05:30
pj 87506f4b74 test(sidecar): drop stub-mode placeholder tautology tests 2026-06-01 21:56:12 +05:30
pj 19950dffe1 test(driverpb): drop proto getter round-trip tautology 2026-06-01 21:56:08 +05:30
pj 93f1e94098 test(runner): MaxSteps stops after exactly N steps 2026-06-01 21:55:53 +05:30
pj 8001de6728 feat(runner): add MaxSteps bound to Options 2026-06-01 21:55:53 +05:30
pj b6a306286a test(web-runtime): assert uncaught cross-extractor read aborts evaluateExtractors 2026-06-01 21:24:38 +05:30
pj 451d8c6751 test(spec): install fake runtime via defineProperty to survive locked global 2026-06-01 21:24:38 +05:30
pj 80e7e71e7a fix(web-runtime): propagate extractor getter throws and unpoison locked global
Stop swallowing getter errors in evaluateExtractors so the cross-extractor read guard aborts loudly, matching goja's PushSnapshot. Make the __sanderling__ lock configurable (still non-writable) so a shared test process can reinstall a fake.
2026-06-01 21:24:34 +05:30
pj d673e4b785 refactor(folio-web): name extractors so violation witnesses are readable 2026-06-01 21:14:09 +05:30
pj 2c410780fa refactor(folio-web): weight valid generators against edgeCaseText for names/amounts 2026-06-01 21:13:33 +05:30
pj 3aba528c87 fix(folio-web): seed card/txn-type selection via from().generate() for reproducible runs 2026-06-01 21:12:29 +05:30
pj b58023a434 refactor(folio-web): drop manual globalThis trailer (bundler injects it) 2026-06-01 21:12:11 +05:30
pj 04aabbe4c7 refactor(folio): seed txn amounts via integers().between(1,500) 2026-06-01 21:12:03 +05:30
pj b824af967e refactor(folio): drop manual globalThis trailer (bundler injects it) 2026-06-01 21:11:33 +05:30
pj bef9a58743 test(web-runtime): named() and cross-extractor read guard 2026-06-01 21:10:10 +05:30
pj c408580297 test(web-runtime): export runtime and extractors for tests 2026-06-01 21:09:01 +05:30
pj 725b2fe1a8 test(verifier): cross-extractor read guard and named() 2026-06-01 21:08:40 +05:30
pj 973ada4983 feat(verifier): named() and cross-extractor read guard in goja 2026-06-01 21:08:06 +05:30
pj fe86e91aff feat(web-runtime): named() and cross-extractor read guard 2026-06-01 21:06:55 +05:30
pj 159bcb6dce feat(spec): add named() to Extracted handle type 2026-06-01 21:06:23 +05:30
pj 955d0a67ff test(bundler): cover named-export globalThis registration 2026-06-01 21:04:19 +05:30
pj e156fbc5f6 refactor(bundler): reuse registration trailer in web bundler 2026-06-01 21:04:17 +05:30
pj 868ab78c8e refactor(bundler): inject globalThis trailer from spec named exports 2026-06-01 21:04:14 +05:30
pj 9a2cb61561 test(spec): cover fluent value generators determinism and chaining 2026-06-01 21:02:26 +05:30
pj d65c0cd448 feat(spec): add fluent seeded value generators (strings/integers/emails/edgeCaseText) 2026-06-01 21:01:50 +05:30
pj 02d884c9b9 refactor(spec): extract samplerRng into shared sampler-rng module 2026-06-01 21:01:47 +05:30
pj f249581792 docs(spec): rename pressKey generator to pressKeys 2026-06-01 20:59:17 +05:30
pj 3509156ea1 test(spec): update pressKeys generator export name 2026-06-01 20:59:05 +05:30
pj fbab57f722 refactor(spec): update barrel re-exports for pressKeys 2026-06-01 20:58:53 +05:30
pj 4b4aa9f74e refactor(spec): rename pressKey generator export to pressKeys 2026-06-01 20:58:23 +05:30
pj 0526ac4bfa test(verifier): assert goja picker against the same cross-runtime golden
Drop the node-subprocess coupling: the goja side now installs a stub
__sanderlingHost__ with the fixed candidate list and asserts the committed
golden, matching pkg/spec/test/parity.test.ts.
2026-06-01 17:27:18 +05:30
pj e3bb9aeeb2 test(spec): golden-fixture cross-runtime parity gate for the node picker
Replace the env-driven parity harness with a shared scenario module and a
committed golden the node picker asserts independently. The goja side asserts
the same golden, so neither runtime invokes the other at test time.
2026-06-01 17:27:14 +05:30
pj 0fa6968a5a test(runner): summary reports no unsupported verbs on a clean run 2026-06-01 17:20:09 +05:30
pj 58b57d8f3c test(verifier): unsupported verbs collected deduped in first-seen order 2026-06-01 17:20:09 +05:30
pj 65ba5345a3 test(verifier): cross-runtime goja/node parity gate on the shared picker 2026-06-01 17:20:04 +05:30
pj dba182b96f feat(testrun): surface unsupported verbs in run report 2026-06-01 17:14:39 +05:30
pj 1a17734ce0 refactor(runner): collapse WebDriver forks behind ActionSource/ExtractorSource 2026-06-01 17:14:35 +05:30
pj 0436c6094e feat(verifier): collect unsupported verbs for the run report 2026-06-01 17:14:32 +05:30
pj 26f638f021 test(runner): bundle authored specs with the goja runtime entry 2026-06-01 16:59:23 +05:30
pj aee5d8110a test(verifier): author specs through the shared picker path 2026-06-01 16:59:23 +05:30
pj f8e3baf439 refactor(runner): decode V8 actions via the unified DecodeAction; wire goja runtime 2026-06-01 16:59:18 +05:30
pj 411aefe25f refactor(verifier): goja host + shared picker replace the duplicate Go picker 2026-06-01 16:59:12 +05:30
pj 59cb77d29c refactor(verifier): one DecodeAction reads the unified flat wire contract 2026-06-01 16:59:04 +05:30
pj 50cb9e98cb feat(spec): serialize selector-only string targets for the runner to re-resolve 2026-06-01 16:58:59 +05:30
pj 1a9d82711f refactor(spec): drop the legacy goja bridge fields from action factories 2026-06-01 16:58:59 +05:30
pj 76c68b84ac feat(testrun): bundle the goja runtime entry so the verifier runs the shared picker 2026-06-01 16:43:50 +05:30
pj 45366ddde5 feat(bundler): optional RuntimeFile prepends a runtime-entry import via stdin 2026-06-01 16:43:50 +05:30
pj bf89f3b1cf feat(spec): goja runtime entry wires the shared picker over the Go host 2026-06-01 16:42:48 +05:30
pj 7a5fc9aca5 refactor(spec): picker emits native selector + scroll endpoints, setup precedence 2026-06-01 16:42:38 +05:30
pj 6600994ef1 test(spec): cover the WEB Host surface and seed precision
Replace the deleted-picker tests with Host coverage: platform()==web,
seedHi() parsing a 64-bit seed without Number precision loss, seedLo()==0,
reportUnsupported warning, the installed next-action/extractor globals, and
queryCandidates verb routing + per-tick caching over a querySelectorAll stub.
2026-06-01 16:37:42 +05:30
pj b23bd516a8 refactor(spec): web-runtime becomes the WEB Host, delegates to shared picker
Delete the duplicate picker (resolveGenerator/pickWeighted/randomTap/
randomInput/randomSwipe/randomPressKey/pickFromArray, the mulberry32 PRNG,
and the snake_case serializeAction) plus the __sanderling__ action factory
binds. web-runtime now implements Host (platform/seedHi/seedLo from the
injected 64-bit seed via BigInt, queryCandidates over the live DOM with a
per-tick cache, reportUnsupported) and calls installRuntime so both engines
run pick.ts over the same Pcg. Swipe/longPress/scroll follow the verbs.ts
matrix instead of silently returning null. Keeps the DOM helpers (selector
translation, queryElement, elementHandle, buildState, sanitize, extractors)
and the global locking. Net -214 lines (741 -> 527).
2026-06-01 16:37:37 +05:30