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