aboutsummaryrefslogtreecommitdiff
path: root/test-suite/notes/runner-spec.md
diff options
context:
space:
mode:
authorTianren Dong <tianrendong.dtr@gmail.com>2026-05-13 07:29:41 -0400
committerTianren Dong <tianrendong.dtr@gmail.com>2026-05-13 07:29:41 -0400
commit4c54b05dc15b81e449dc8ac53da8bae536fa2798 (patch)
treef81c5e627dcc4dd81d2fe2fd3b2b584e72a73eca /test-suite/notes/runner-spec.md
parent5951b3fb04aaf53b875afe265a57a944d6fce641 (diff)
pi-chrome: snapshot pre-migration state
Diffstat (limited to 'test-suite/notes/runner-spec.md')
-rw-r--r--test-suite/notes/runner-spec.md26
1 files changed, 26 insertions, 0 deletions
diff --git a/test-suite/notes/runner-spec.md b/test-suite/notes/runner-spec.md
new file mode 100644
index 0000000..b040cb4
--- /dev/null
+++ b/test-suite/notes/runner-spec.md
@@ -0,0 +1,26 @@
+# Recipe runner spec
+
+Future Node/Pi runner should:
+
+1. Read `manifest.json`.
+2. Probe environment capabilities (`trusted`, `clipboard`, `touch`, `dialogs`, `downloads`, `fileSystem`).
+3. For each entry:
+ - skip if `requires` is unsatisfied and expected is `CONDITIONAL`
+ - navigate to challenge URL
+ - execute `recipe` in order
+ - wait `verdictDelayMs || 500`
+ - evaluate `JSON.stringify({v:window.__verdict,r:window.__reason,d:window.Challenge?.state?.details,e:window.__events?.slice(-20)})`
+ - compare to `expected[mode]`
+4. Output:
+ - Markdown summary
+ - JSON details
+ - JUnit XML for CI
+
+Runner must adapt recipe intent:
+
+- expand `${REPO_ROOT}` path placeholders
+- adapt unsupported shadow/iframe selector notation to snapshot uids or evaluate fallback
+- preserve hook install ordering for console/network capture tests
+- record whether trusted/CDP path was used
+
+Long-horizon task runner should read `task-manifest.json`, replace `$RUN_ID`, solve task, then evaluate task grader expression.