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
pj
b6a706699b
refactor(spec): installRuntime accepts a lazy root resolver
...
The web bundle imports the runtime before the spec, so the action root
on globalThis.actions only exists after the spec evaluates. Accept a
function form so the goja and web hosts resolve the root per tick.
2026-06-01 16:37:30 +05:30
pj
26e27832a2
test(spec): tolerate legacy bridge fields on builtin nodes
2026-06-01 16:31:37 +05:30
pj
58585b88b2
fix(spec): web runtime walks the spec's globalThis.actions data tree
2026-06-01 16:31:37 +05:30
pj
ee54c474b6
refactor(spec): bridge data-tree nodes to the legacy goja picker tags
2026-06-01 16:31:37 +05:30
pj
c9d8f165b1
test(spec): runtime-entry serializeAction wire-contract round-trip
2026-06-01 16:27:29 +05:30
pj
51200ed829
test(spec): assert data-tree shapes for action factories
2026-06-01 16:27:29 +05:30
pj
804cee70d2
feat(spec): export LongPress/Scroll/longPresses/scrolls factories
2026-06-01 16:27:29 +05:30
pj
e18feff5fe
feat(spec): shared runtime-entry installs next-action over pick.ts
2026-06-01 16:24:24 +05:30
pj
06ae965387
refactor(spec): wire from() sampling through the picker rng
2026-06-01 16:24:24 +05:30
pj
fe3ebd0484
refactor(spec): actions.ts returns pure GeneratorNode data trees
2026-06-01 16:24:20 +05:30
pj
b34f73f3f7
test(spec): picker draw-order and determinism
2026-06-01 16:13:53 +05:30
pj
3e9f0b9367
test(spec): verb matrix and warn-once semantics
2026-06-01 16:13:53 +05:30
pj
d253d68b52
feat(spec): deterministic shared action picker
2026-06-01 16:13:47 +05:30
pj
a4bbd71e04
feat(spec): verb support matrix and warn-once helper
2026-06-01 16:13:47 +05:30
pj
af9dd6c741
feat(spec): action-tree types and Host interface
2026-06-01 16:13:44 +05:30
pj
882c3fb053
feat(spec): shared input corpus and press-key pools
2026-06-01 16:13:44 +05:30
pj
39f2197b2f
test(spec): assert pcg.ts matches the PCG golden fixture
2026-06-01 16:09:02 +05:30
pj
231f96f5a5
feat(spec): bit-exact PCG port of Go math/rand/v2
2026-06-01 16:09:02 +05:30
pj
307213ef45
test(spec): add Go math/rand/v2 PCG oracle and golden fixture
2026-06-01 16:09:02 +05:30
pj
d4ffdce8f9
test: cover web-runtime seeded PRNG, weighted pick, and seed define wiring
2026-06-01 15:10:04 +05:30
pj
6fc1c971c7
feat(testrun): inject seed into web bundle via SANDERLING_SEED define
2026-06-01 15:10:01 +05:30
pj
d7c05181b0
fix(web-runtime): seed PRNG for reproducible runs and align weighted pick
2026-06-01 15:09:58 +05:30
pj
b5e8d9892e
test(ltl): lock implies and bounded-always false-negative regressions
2026-06-01 14:11:26 +05:30
pj
1834019419
fix(ltl): eliminate implies and bounded-always false-negatives
...
Rewrite a -> b to (not a) or b in NNF so a pending temporal antecedent
can no longer defer the whole implication and drop a consequent that was
false at the current step. Carry a pending inner past a bounded-Always
window close instead of dropping it to holds, so a deferred obligation is
resolved by a later step or Finalize.
2026-06-01 14:11:26 +05:30
pj
283bf44920
test(verifier): finalize surfaces unmet eventually with witness
2026-06-01 13:58:45 +05:30
pj
8ac05b458e
test(ltl): lock violation witness reason, IsError, and step
2026-06-01 13:58:45 +05:30
pj
17f4c7e600
feat(runner): thread violation witnesses, finalize, skip marker into trace
2026-06-01 13:57:34 +05:30
pj
3cf668e59a
feat(trace): witnesses map and skipped-verification marker on Step
2026-06-01 13:56:31 +05:30
pj
4dcd01eba9
test(verifier): witness API for thrown predicates
2026-06-01 13:56:15 +05:30
pj
f346864b2f
refactor(verifier): replace predicate err side-channel with violation witness
2026-06-01 13:56:11 +05:30
pj
e6a3852112
feat(ltl): flag thrown-predicate witnesses with IsError
2026-06-01 13:56:08 +05:30
pj
a01e126ff9
test(ltl): migrate thunk call sites to (bool,error)
2026-06-01 13:53:42 +05:30
pj
9be00dff90
feat(ltl): witness violations and (bool,error) predicate thunks
2026-06-01 13:53:38 +05:30
pj
2a57031bb7
feat(inspect): within clause on always residual node
...
A negated bounded eventually serializes as a bounded always; render its
bound instead of dropping it.
2026-06-01 13:49:47 +05:30