Commit Graph
221 Commits
Author SHA1 Message Date
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
pj 898ff72b37 test(ltl): Finalize, bounded eventually, latch, collapse
Property tests for monotonic violation latch and eventually-within
violating iff n consecutive false, plus Finalize and collapse cases.
2026-06-01 13:49:44 +05:30
pj 59113cbf9d test(ltl): property-based NNF laws
Lock double-negation identity, Always/Eventually duality with bound
preservation, leaf pushdown, and not(always true) reaching Violated.
2026-06-01 13:49:41 +05:30
pj c965089825 feat(ltl): NNF in NewEvaluator, bounded-always, Finalize, collapse
Apply nnf on construction, reduce bounded Always symmetric to bounded
Eventually (vacuous holds once the window closes), add Finalize to
resolve undischarged liveness obligations to Violated at run end, and
collapse structurally-identical pending obligations.
2026-06-01 13:49:37 +05:30
pj 88295fc02e feat(ltl): negation normal form pass
nnf/pushNot rewrite a formula so every Not wraps only a Thunk or Error
leaf, dualizing Always<->Eventually and preserving bounds.
2026-06-01 13:49:32 +05:30