@descryy/mcp 0.6.0 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. package/dist/action-handshake.d.ts +8 -75
  2. package/dist/action-handshake.d.ts.map +1 -1
  3. package/dist/action-handshake.js +9 -79
  4. package/dist/action-handshake.js.map +1 -1
  5. package/dist/bin/descry-mcp.d.ts +4 -15
  6. package/dist/bin/descry-mcp.d.ts.map +1 -1
  7. package/dist/bin/descry-mcp.js +12 -42
  8. package/dist/bin/descry-mcp.js.map +1 -1
  9. package/dist/browser/driver.d.ts +121 -224
  10. package/dist/browser/driver.d.ts.map +1 -1
  11. package/dist/browser/driver.js +9 -55
  12. package/dist/browser/driver.js.map +1 -1
  13. package/dist/browser/evidence.d.ts +10 -43
  14. package/dist/browser/evidence.d.ts.map +1 -1
  15. package/dist/browser/evidence.js +20 -54
  16. package/dist/browser/evidence.js.map +1 -1
  17. package/dist/browser/fake-driver.d.ts +12 -19
  18. package/dist/browser/fake-driver.d.ts.map +1 -1
  19. package/dist/browser/fake-driver.js +31 -26
  20. package/dist/browser/fake-driver.js.map +1 -1
  21. package/dist/browser/graph-write.d.ts +4 -45
  22. package/dist/browser/graph-write.d.ts.map +1 -1
  23. package/dist/browser/graph-write.js +8 -53
  24. package/dist/browser/graph-write.js.map +1 -1
  25. package/dist/browser/playwright-driver.d.ts +7 -91
  26. package/dist/browser/playwright-driver.d.ts.map +1 -1
  27. package/dist/browser/playwright-driver.js +59 -197
  28. package/dist/browser/playwright-driver.js.map +1 -1
  29. package/dist/browser/provider.d.ts +5 -34
  30. package/dist/browser/provider.d.ts.map +1 -1
  31. package/dist/browser/provider.js +4 -24
  32. package/dist/browser/provider.js.map +1 -1
  33. package/dist/browser/registry.d.ts +26 -106
  34. package/dist/browser/registry.d.ts.map +1 -1
  35. package/dist/browser/registry.js +20 -77
  36. package/dist/browser/registry.js.map +1 -1
  37. package/dist/browser/scenario-provenance.d.ts +23 -0
  38. package/dist/browser/scenario-provenance.d.ts.map +1 -0
  39. package/dist/browser/scenario-provenance.js +59 -0
  40. package/dist/browser/scenario-provenance.js.map +1 -0
  41. package/dist/browser/scenario-resolve.d.ts +10 -44
  42. package/dist/browser/scenario-resolve.d.ts.map +1 -1
  43. package/dist/browser/scenario-resolve.js +10 -41
  44. package/dist/browser/scenario-resolve.js.map +1 -1
  45. package/dist/browser/scenario-runner.d.ts +12 -70
  46. package/dist/browser/scenario-runner.d.ts.map +1 -1
  47. package/dist/browser/scenario-runner.js +30 -90
  48. package/dist/browser/scenario-runner.js.map +1 -1
  49. package/dist/browser/stack-parser.d.ts +4 -28
  50. package/dist/browser/stack-parser.d.ts.map +1 -1
  51. package/dist/browser/stack-parser.js +12 -39
  52. package/dist/browser/stack-parser.js.map +1 -1
  53. package/dist/browser/tool-support.d.ts +20 -67
  54. package/dist/browser/tool-support.d.ts.map +1 -1
  55. package/dist/browser/tool-support.js +21 -65
  56. package/dist/browser/tool-support.js.map +1 -1
  57. package/dist/browser/url-scheme.d.ts +14 -0
  58. package/dist/browser/url-scheme.d.ts.map +1 -0
  59. package/dist/browser/url-scheme.js +38 -0
  60. package/dist/browser/url-scheme.js.map +1 -0
  61. package/dist/cancellation.d.ts +11 -46
  62. package/dist/cancellation.d.ts.map +1 -1
  63. package/dist/cancellation.js +11 -46
  64. package/dist/cancellation.js.map +1 -1
  65. package/dist/capped.d.ts +9 -33
  66. package/dist/capped.d.ts.map +1 -1
  67. package/dist/capped.js +7 -27
  68. package/dist/capped.js.map +1 -1
  69. package/dist/disclosure-ledger.d.ts +6 -30
  70. package/dist/disclosure-ledger.d.ts.map +1 -1
  71. package/dist/disclosure-ledger.js +4 -26
  72. package/dist/disclosure-ledger.js.map +1 -1
  73. package/dist/index.d.ts +10 -26
  74. package/dist/index.d.ts.map +1 -1
  75. package/dist/index.js +7 -17
  76. package/dist/index.js.map +1 -1
  77. package/dist/module-trust.d.ts +24 -0
  78. package/dist/module-trust.d.ts.map +1 -0
  79. package/dist/module-trust.js +60 -0
  80. package/dist/module-trust.js.map +1 -0
  81. package/dist/path-confinement.d.ts +31 -0
  82. package/dist/path-confinement.d.ts.map +1 -0
  83. package/dist/path-confinement.js +44 -0
  84. package/dist/path-confinement.js.map +1 -0
  85. package/dist/protocol.d.ts +10 -53
  86. package/dist/protocol.d.ts.map +1 -1
  87. package/dist/protocol.js +14 -60
  88. package/dist/protocol.js.map +1 -1
  89. package/dist/registry.d.ts +37 -58
  90. package/dist/registry.d.ts.map +1 -1
  91. package/dist/registry.js +88 -96
  92. package/dist/registry.js.map +1 -1
  93. package/dist/render.d.ts +89 -13
  94. package/dist/render.d.ts.map +1 -1
  95. package/dist/render.js +111 -16
  96. package/dist/render.js.map +1 -1
  97. package/dist/runtime-registry.d.ts +7 -66
  98. package/dist/runtime-registry.d.ts.map +1 -1
  99. package/dist/runtime-registry.js +39 -114
  100. package/dist/runtime-registry.js.map +1 -1
  101. package/dist/scenarios/index.d.ts +1 -1
  102. package/dist/scenarios/index.d.ts.map +1 -1
  103. package/dist/scenarios/index.js +1 -1
  104. package/dist/scenarios/index.js.map +1 -1
  105. package/dist/scenarios/parse.d.ts +4 -18
  106. package/dist/scenarios/parse.d.ts.map +1 -1
  107. package/dist/scenarios/parse.js +14 -34
  108. package/dist/scenarios/parse.js.map +1 -1
  109. package/dist/scenarios/scenario.d.ts +18 -74
  110. package/dist/scenarios/scenario.d.ts.map +1 -1
  111. package/dist/scenarios/scenario.js +7 -34
  112. package/dist/scenarios/scenario.js.map +1 -1
  113. package/dist/scenarios/storage.d.ts +11 -41
  114. package/dist/scenarios/storage.d.ts.map +1 -1
  115. package/dist/scenarios/storage.js +57 -47
  116. package/dist/scenarios/storage.js.map +1 -1
  117. package/dist/server.d.ts.map +1 -1
  118. package/dist/server.js +69 -19
  119. package/dist/server.js.map +1 -1
  120. package/dist/session.d.ts +90 -259
  121. package/dist/session.d.ts.map +1 -1
  122. package/dist/session.js +136 -250
  123. package/dist/session.js.map +1 -1
  124. package/dist/tools/analyze.d.ts +32 -118
  125. package/dist/tools/analyze.d.ts.map +1 -1
  126. package/dist/tools/analyze.js +65 -186
  127. package/dist/tools/analyze.js.map +1 -1
  128. package/dist/tools/browser-click.d.ts +3 -21
  129. package/dist/tools/browser-click.d.ts.map +1 -1
  130. package/dist/tools/browser-click.js +10 -31
  131. package/dist/tools/browser-click.js.map +1 -1
  132. package/dist/tools/browser-close-session.d.ts +4 -13
  133. package/dist/tools/browser-close-session.d.ts.map +1 -1
  134. package/dist/tools/browser-close-session.js +4 -13
  135. package/dist/tools/browser-close-session.js.map +1 -1
  136. package/dist/tools/browser-fill.d.ts +5 -36
  137. package/dist/tools/browser-fill.d.ts.map +1 -1
  138. package/dist/tools/browser-fill.js +9 -44
  139. package/dist/tools/browser-fill.js.map +1 -1
  140. package/dist/tools/browser-navigate.d.ts +6 -27
  141. package/dist/tools/browser-navigate.d.ts.map +1 -1
  142. package/dist/tools/browser-navigate.js +6 -23
  143. package/dist/tools/browser-navigate.js.map +1 -1
  144. package/dist/tools/browser-run-scenario.d.ts +5 -31
  145. package/dist/tools/browser-run-scenario.d.ts.map +1 -1
  146. package/dist/tools/browser-run-scenario.js +10 -46
  147. package/dist/tools/browser-run-scenario.js.map +1 -1
  148. package/dist/tools/browser-save-scenario.d.ts +3 -28
  149. package/dist/tools/browser-save-scenario.d.ts.map +1 -1
  150. package/dist/tools/browser-save-scenario.js +47 -84
  151. package/dist/tools/browser-save-scenario.js.map +1 -1
  152. package/dist/tools/browser-snapshot.d.ts +6 -39
  153. package/dist/tools/browser-snapshot.d.ts.map +1 -1
  154. package/dist/tools/browser-snapshot.js +4 -31
  155. package/dist/tools/browser-snapshot.js.map +1 -1
  156. package/dist/tools/browser-start-session.d.ts +4 -23
  157. package/dist/tools/browser-start-session.d.ts.map +1 -1
  158. package/dist/tools/browser-start-session.js +145 -56
  159. package/dist/tools/browser-start-session.js.map +1 -1
  160. package/dist/tools/browser-type.d.ts +5 -35
  161. package/dist/tools/browser-type.d.ts.map +1 -1
  162. package/dist/tools/browser-type.js +10 -45
  163. package/dist/tools/browser-type.js.map +1 -1
  164. package/dist/tools/contracts.d.ts +9 -86
  165. package/dist/tools/contracts.d.ts.map +1 -1
  166. package/dist/tools/contracts.js +24 -80
  167. package/dist/tools/contracts.js.map +1 -1
  168. package/dist/tools/cross-pr.d.ts +42 -30
  169. package/dist/tools/cross-pr.d.ts.map +1 -1
  170. package/dist/tools/cross-pr.js +81 -62
  171. package/dist/tools/cross-pr.js.map +1 -1
  172. package/dist/tools/git-diff.d.ts +18 -2
  173. package/dist/tools/git-diff.d.ts.map +1 -1
  174. package/dist/tools/git-diff.js +118 -26
  175. package/dist/tools/git-diff.js.map +1 -1
  176. package/dist/tools/git-history.d.ts +5 -16
  177. package/dist/tools/git-history.d.ts.map +1 -1
  178. package/dist/tools/git-history.js +3 -10
  179. package/dist/tools/git-history.js.map +1 -1
  180. package/dist/tools/history.d.ts +4 -33
  181. package/dist/tools/history.d.ts.map +1 -1
  182. package/dist/tools/history.js +6 -31
  183. package/dist/tools/history.js.map +1 -1
  184. package/dist/tools/impact.d.ts +7 -51
  185. package/dist/tools/impact.d.ts.map +1 -1
  186. package/dist/tools/impact.js +15 -67
  187. package/dist/tools/impact.js.map +1 -1
  188. package/dist/tools/index.d.ts +3 -8
  189. package/dist/tools/index.d.ts.map +1 -1
  190. package/dist/tools/index.js +3 -8
  191. package/dist/tools/index.js.map +1 -1
  192. package/dist/tools/kit.d.ts +66 -113
  193. package/dist/tools/kit.d.ts.map +1 -1
  194. package/dist/tools/kit.js +60 -28
  195. package/dist/tools/kit.js.map +1 -1
  196. package/dist/tools/link-workspace.d.ts +7 -45
  197. package/dist/tools/link-workspace.d.ts.map +1 -1
  198. package/dist/tools/link-workspace.js +10 -48
  199. package/dist/tools/link-workspace.js.map +1 -1
  200. package/dist/tools/lookup.d.ts +4 -14
  201. package/dist/tools/lookup.d.ts.map +1 -1
  202. package/dist/tools/lookup.js +4 -14
  203. package/dist/tools/lookup.js.map +1 -1
  204. package/dist/tools/mark-incident.d.ts +7 -54
  205. package/dist/tools/mark-incident.d.ts.map +1 -1
  206. package/dist/tools/mark-incident.js +15 -68
  207. package/dist/tools/mark-incident.js.map +1 -1
  208. package/dist/tools/observe-runtime.d.ts +27 -210
  209. package/dist/tools/observe-runtime.d.ts.map +1 -1
  210. package/dist/tools/observe-runtime.js +273 -434
  211. package/dist/tools/observe-runtime.js.map +1 -1
  212. package/dist/tools/observe-tests.d.ts +9 -100
  213. package/dist/tools/observe-tests.d.ts.map +1 -1
  214. package/dist/tools/observe-tests.js +74 -152
  215. package/dist/tools/observe-tests.js.map +1 -1
  216. package/dist/tools/pr-analysis.d.ts +18 -2
  217. package/dist/tools/pr-analysis.d.ts.map +1 -1
  218. package/dist/tools/pr-analysis.js +73 -23
  219. package/dist/tools/pr-analysis.js.map +1 -1
  220. package/dist/tools/pre-push.d.ts +74 -16
  221. package/dist/tools/pre-push.d.ts.map +1 -1
  222. package/dist/tools/pre-push.js +152 -51
  223. package/dist/tools/pre-push.js.map +1 -1
  224. package/dist/tools/propagation.d.ts +11 -53
  225. package/dist/tools/propagation.d.ts.map +1 -1
  226. package/dist/tools/propagation.js +17 -58
  227. package/dist/tools/propagation.js.map +1 -1
  228. package/dist/tools/questions.d.ts +13 -63
  229. package/dist/tools/questions.d.ts.map +1 -1
  230. package/dist/tools/questions.js +33 -105
  231. package/dist/tools/questions.js.map +1 -1
  232. package/dist/tools/refusal-fetch.d.ts +4 -40
  233. package/dist/tools/refusal-fetch.d.ts.map +1 -1
  234. package/dist/tools/refusal-fetch.js +4 -40
  235. package/dist/tools/refusal-fetch.js.map +1 -1
  236. package/dist/tools/runtime-incident.d.ts +4 -63
  237. package/dist/tools/runtime-incident.d.ts.map +1 -1
  238. package/dist/tools/runtime-incident.js +10 -87
  239. package/dist/tools/runtime-incident.js.map +1 -1
  240. package/dist/tools/scope.d.ts +7 -25
  241. package/dist/tools/scope.d.ts.map +1 -1
  242. package/dist/tools/scope.js +10 -29
  243. package/dist/tools/scope.js.map +1 -1
  244. package/dist/tools/similar-incidents.d.ts +11 -86
  245. package/dist/tools/similar-incidents.d.ts.map +1 -1
  246. package/dist/tools/similar-incidents.js +7 -71
  247. package/dist/tools/similar-incidents.js.map +1 -1
  248. package/dist/tools/validate.d.ts +29 -70
  249. package/dist/tools/validate.d.ts.map +1 -1
  250. package/dist/tools/validate.js +141 -85
  251. package/dist/tools/validate.js.map +1 -1
  252. package/dist/tools/verification-status.d.ts +9 -64
  253. package/dist/tools/verification-status.d.ts.map +1 -1
  254. package/dist/tools/verification-status.js +9 -62
  255. package/dist/tools/verification-status.js.map +1 -1
  256. package/dist/tools/verify-claim.d.ts +5 -52
  257. package/dist/tools/verify-claim.d.ts.map +1 -1
  258. package/dist/tools/verify-claim.js +6 -56
  259. package/dist/tools/verify-claim.js.map +1 -1
  260. package/dist/transport.d.ts +15 -52
  261. package/dist/transport.d.ts.map +1 -1
  262. package/dist/transport.js +16 -60
  263. package/dist/transport.js.map +1 -1
  264. package/package.json +40 -22
@@ -0,0 +1,59 @@
1
+ /** Provenance matching for `browser_save_scenario` — DEC-NEXT (Part 13 of the UAT audit). A step
2
+ * the session actually performed, in order, was necessarily resolvable at the moment it ran; that
3
+ * is stronger evidence than re-resolving the same step against a LATER static snapshot, which is
4
+ * exactly what fails for a UI that reveals controls progressively (the earlier steps' own targets
5
+ * can mutate — a "Try it out" button that renames itself to "Cancel" — or the later steps' targets
6
+ * can vanish again by the time save() looks, even though every one of them was just performed live,
7
+ * successfully, moments before). This module answers one question only: for each step in a
8
+ * scenario, does it match something this session's own action log says actually happened, in the
9
+ * same relative order? It does not decide what to do with that answer — the caller
10
+ * (`browser-save-scenario.ts`) still runs today's single-snapshot check for anything this says no
11
+ * to, which is the fallback that still catches a fabricated or hand-edited scenario. */
12
+ function targetsEqual(performed, declared) {
13
+ if (performed === null || declared === null)
14
+ return performed === declared;
15
+ return performed.role === declared.role && performed.name === declared.name && performed.selector === declared.selector;
16
+ }
17
+ function stepMatches(step, entry) {
18
+ if (step.action !== entry.action)
19
+ return false;
20
+ switch (step.action) {
21
+ case "navigate":
22
+ return step.url === entry.url;
23
+ case "click":
24
+ return targetsEqual(entry.target, step.target);
25
+ case "type":
26
+ case "fill":
27
+ return targetsEqual(entry.target, step.target) && step.text === entry.text;
28
+ }
29
+ }
30
+ /** For each of `steps`, in order: does it match an entry in `log`, without matching an earlier
31
+ * step to a later log entry than a later step already claimed? A greedy in-order subsequence
32
+ * match — each match consumes the log up to and including itself, so a match can never come
33
+ * from *before* the previous step's own match, even though extra performed actions in between
34
+ * (an explored dead end, a step the scenario doesn't include) are skipped over freely rather
35
+ * than required to appear. `log` from a different or closed session, or a hand-constructed
36
+ * scenario naming something that was never actually performed, matches nothing here — every
37
+ * entry in `result` for it comes back `false`, leaving the fallback snapshot check to run. */
38
+ export function matchByProvenance(steps, log) {
39
+ const result = [];
40
+ let cursor = 0;
41
+ for (const step of steps) {
42
+ let foundAt = -1;
43
+ for (let i = cursor; i < log.length; i += 1) {
44
+ if (stepMatches(step, log[i])) {
45
+ foundAt = i;
46
+ break;
47
+ }
48
+ }
49
+ if (foundAt === -1) {
50
+ result.push(false);
51
+ }
52
+ else {
53
+ result.push(true);
54
+ cursor = foundAt + 1;
55
+ }
56
+ }
57
+ return result;
58
+ }
59
+ //# sourceMappingURL=scenario-provenance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scenario-provenance.js","sourceRoot":"","sources":["../../src/browser/scenario-provenance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;yFAUyF;AAKzF,SAAS,YAAY,CAAC,SAAiC,EAAE,QAAiC;IACxF,IAAI,SAAS,KAAK,IAAI,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,SAAS,KAAK,QAAQ,CAAC;IAC3E,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,IAAI,SAAS,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ,CAAC;AAC1H,CAAC;AAED,SAAS,WAAW,CAAC,IAAkB,EAAE,KAAoB;IAC3D,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC/C,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;QACpB,KAAK,UAAU;YACb,OAAO,IAAI,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC;QAChC,KAAK,OAAO;YACV,OAAO,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACjD,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM;YACT,OAAO,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC;IAC/E,CAAC;AACH,CAAC;AAED;;;;;;;+FAO+F;AAC/F,MAAM,UAAU,iBAAiB,CAAC,KAA8B,EAAE,GAA6B;IAC7F,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC;QACjB,KAAK,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5C,IAAI,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;gBAC/B,OAAO,GAAG,CAAC,CAAC;gBACZ,MAAM;YACR,CAAC;QACH,CAAC;QACD,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC;YACnB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,MAAM,GAAG,OAAO,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,43 +1,14 @@
1
- /**
2
- * Turning a stored target descriptor back into something clickable —
3
- * `DEC-383` §2 and §3.
4
- *
5
- * This is where the anti-rot mechanism actually lives. A stored step carries
6
- * `role` + `name` + `selector` and no `ref`, because a ref is scoped to the
7
- * snapshot that issued it and a replay is always a later session. So every
8
- * step re-resolves against a fresh snapshot, and the resolution is
9
- * **exact-or-refuse**: exactly one element matching all three fields, or stop.
10
- *
11
- * **There is deliberately no fallback chain.** "Try the selector, else
12
- * role+name" is the dangerous option and it is dangerous in a specific way: it
13
- * turns a real disagreement into a quiet substitution, which is how a scenario
14
- * keeps reporting green against a page that changed underneath it. A
15
- * disagreement between the three fields is the highest-value signal this
16
- * format can produce, and a fallback is exactly the code that throws it away.
17
- *
18
- * The refusal messages are load-bearing rather than decorative, per
19
- * `DEC-384`: a stopped push that says "step 3
20
- * failed to resolve" is what developers route around, and one that says "the
21
- * button is still there; its accessible name changed from Delete to Remove" is
22
- * a one-line fix. So every refusal names which step, which descriptor, which
23
- * of the three fields disagreed, and what the page holds now.
24
- *
25
- * Lives beside the port rather than in `scenarios/`, on purpose: the format
26
- * module imports nothing from the driver and is tested without a browser in
27
- * the process, and this function needs a `PageSnapshot`.
28
- */
1
+ /** Turning a stored target descriptor back into something clickable — DEC-383 §2/§3. Stored
2
+ * steps carry role+name+selector, no `ref` (scoped to the issuing snapshot); resolution is
3
+ * exact-or-refuse against a fresh snapshot, deliberately no fallback chain — substituting one
4
+ * matching field for another turns a real disagreement into a quiet one, and the scenario
5
+ * keeps reporting green against a changed page. Refusal messages name the exact disagreement (DEC-384). */
29
6
  import type { TargetDescriptor } from "../scenarios/index.ts";
30
7
  import type { PageSnapshot, SnapshotElement } from "./driver.ts";
31
8
  export type DescriptorField = "role" | "name" | "selector";
32
- /**
33
- * Why a descriptor did not resolve.
34
- *
35
- * Three kinds, kept apart because they send a developer to three different
36
- * places. `zero` — nothing on the page answers to this at all. `ambiguous` —
37
- * several do, and picking one would be reporting on a run nobody chose.
38
- * `partial` — something is still there and one part of the descriptor has
39
- * moved, which is the case worth the most and the reason `disagreed` exists.
40
- */
9
+ /** Why a descriptor failed to resolve. `zero` — nothing matches at all. `ambiguous` —
10
+ * several do, picking one would report on an unchosen run. `partial` — something still
11
+ * matches part of it, the case `disagreed` exists for. */
41
12
  export interface ResolutionFailure {
42
13
  readonly kind: "zero" | "ambiguous" | "partial";
43
14
  /** Which of role/name/selector no longer agree. Empty for `zero` and `ambiguous`, where nothing partial matched to disagree with. */
@@ -51,12 +22,7 @@ export type TargetResolution = {
51
22
  readonly resolved: false;
52
23
  readonly failure: ResolutionFailure;
53
24
  };
54
- /**
55
- * Resolve one stored descriptor against a fresh snapshot.
56
- *
57
- * `where` is the caller's label for the thing being resolved — `"step 0"`,
58
- * `"assertion 2"` — and it is required rather than optional because a refusal
59
- * that does not say *which* step is the version this ruling exists to avoid.
60
- */
25
+ /** Resolves one stored descriptor against a fresh snapshot. `where` labels what's being
26
+ * resolved ("step 0") and is required — a refusal not saying which step is the failure this exists to avoid. */
61
27
  export declare function resolveTarget(where: string, target: TargetDescriptor, snapshot: PageSnapshot): TargetResolution;
62
28
  //# sourceMappingURL=scenario-resolve.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scenario-resolve.d.ts","sourceRoot":"","sources":["../../src/browser/scenario-resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEjE,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;AAE3D;;;;;;;;GAQG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;IAChD,qIAAqI;IACrI,QAAQ,CAAC,SAAS,EAAE,SAAS,eAAe,EAAE,CAAC;IAC/C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,gBAAgB,GACxB;IAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAA;CAAE,GAC9D;IAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAuBtE;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,YAAY,GAAG,gBAAgB,CAgF/G"}
1
+ {"version":3,"file":"scenario-resolve.d.ts","sourceRoot":"","sources":["../../src/browser/scenario-resolve.ts"],"names":[],"mappings":"AAAA;;;;4GAI4G;AAE5G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEjE,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;AAE3D;;2DAE2D;AAC3D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;IAChD,qIAAqI;IACrI,QAAQ,CAAC,SAAS,EAAE,SAAS,eAAe,EAAE,CAAC;IAC/C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,gBAAgB,GACxB;IAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAA;CAAE,GAC9D;IAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAuBtE;iHACiH;AACjH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,YAAY,GAAG,gBAAgB,CA6E/G"}
@@ -1,31 +1,8 @@
1
- /**
2
- * Turning a stored target descriptor back into something clickable —
3
- * `DEC-383` §2 and §3.
4
- *
5
- * This is where the anti-rot mechanism actually lives. A stored step carries
6
- * `role` + `name` + `selector` and no `ref`, because a ref is scoped to the
7
- * snapshot that issued it and a replay is always a later session. So every
8
- * step re-resolves against a fresh snapshot, and the resolution is
9
- * **exact-or-refuse**: exactly one element matching all three fields, or stop.
10
- *
11
- * **There is deliberately no fallback chain.** "Try the selector, else
12
- * role+name" is the dangerous option and it is dangerous in a specific way: it
13
- * turns a real disagreement into a quiet substitution, which is how a scenario
14
- * keeps reporting green against a page that changed underneath it. A
15
- * disagreement between the three fields is the highest-value signal this
16
- * format can produce, and a fallback is exactly the code that throws it away.
17
- *
18
- * The refusal messages are load-bearing rather than decorative, per
19
- * `DEC-384`: a stopped push that says "step 3
20
- * failed to resolve" is what developers route around, and one that says "the
21
- * button is still there; its accessible name changed from Delete to Remove" is
22
- * a one-line fix. So every refusal names which step, which descriptor, which
23
- * of the three fields disagreed, and what the page holds now.
24
- *
25
- * Lives beside the port rather than in `scenarios/`, on purpose: the format
26
- * module imports nothing from the driver and is tested without a browser in
27
- * the process, and this function needs a `PageSnapshot`.
28
- */
1
+ /** Turning a stored target descriptor back into something clickable — DEC-383 §2/§3. Stored
2
+ * steps carry role+name+selector, no `ref` (scoped to the issuing snapshot); resolution is
3
+ * exact-or-refuse against a fresh snapshot, deliberately no fallback chain — substituting one
4
+ * matching field for another turns a real disagreement into a quiet one, and the scenario
5
+ * keeps reporting green against a changed page. Refusal messages name the exact disagreement (DEC-384). */
29
6
  const FIELDS = ["role", "name", "selector"];
30
7
  function describe(target) {
31
8
  return `role "${target.role}", name "${target.name}", selector "${target.selector}"`;
@@ -44,13 +21,8 @@ function pageContents(snapshot, limit = 8) {
44
21
  function disagreementsWith(target, element) {
45
22
  return FIELDS.filter((field) => element[field] !== target[field]);
46
23
  }
47
- /**
48
- * Resolve one stored descriptor against a fresh snapshot.
49
- *
50
- * `where` is the caller's label for the thing being resolved — `"step 0"`,
51
- * `"assertion 2"` — and it is required rather than optional because a refusal
52
- * that does not say *which* step is the version this ruling exists to avoid.
53
- */
24
+ /** Resolves one stored descriptor against a fresh snapshot. `where` labels what's being
25
+ * resolved ("step 0") and is required — a refusal not saying which step is the failure this exists to avoid. */
54
26
  export function resolveTarget(where, target, snapshot) {
55
27
  const exact = snapshot.elements.filter((e) => e.role === target.role && e.name === target.name && e.selector === target.selector);
56
28
  if (exact.length === 1)
@@ -81,10 +53,8 @@ export function resolveTarget(where, target, snapshot) {
81
53
  },
82
54
  };
83
55
  }
84
- // The partial case, and the reason the format stores all three fields. Both
85
- // halves are reported when both matched, because "the selector still points
86
- // at something AND an element with this role and name still exists" is two
87
- // candidates and a person is the one who knows which is theirs.
56
+ // The partial case — why the format stores all three fields. Both halves are reported
57
+ // when both matched, since two candidates exist and only a person knows which is theirs.
88
58
  const parts = [];
89
59
  const disagreed = new Set();
90
60
  if (bySelector.length === 1) {
@@ -114,8 +84,7 @@ export function resolveTarget(where, target, snapshot) {
114
84
  resolved: false,
115
85
  failure: {
116
86
  kind: "partial",
117
- // Ordered the way the descriptor is, so a caller comparing two failures
118
- // is comparing sets rather than orderings.
87
+ // Ordered like the descriptor, so callers compare sets, not orderings.
119
88
  disagreed: FIELDS.filter((field) => disagreed.has(field)),
120
89
  message: `${where}: ${describe(target)} does not match exactly one element on ${snapshot.url}, but part of it ` +
121
90
  `still does — ${parts.join("; ")}. The step is not run: substituting the half that still matches would ` +
@@ -1 +1 @@
1
- {"version":3,"file":"scenario-resolve.js","sourceRoot":"","sources":["../../src/browser/scenario-resolve.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scenario-resolve.js","sourceRoot":"","sources":["../../src/browser/scenario-resolve.ts"],"names":[],"mappings":"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"}
@@ -1,44 +1,7 @@
1
1
  /**
2
- * Replaying a stored scenario — §7's runner half.
3
- *
4
- * ## What this composes, and the four things it must not get wrong
5
- *
6
- * Everything below is composition: the port drives, `scenarios/` is the
7
- * artifact, `scenario-resolve.ts` re-resolves a descriptor, `tool-support.ts`
8
- * drains and correlates. What the runner adds is *order*, and four ordering
9
- * mistakes each fail as flakiness or as a false pass rather than as an error,
10
- * which is why each is named here rather than left to be rediscovered.
11
- *
12
- * 1. **`registry.use()` is called once per step.** It is not a lookup: it is
13
- * asynchronous, it is the crash detector, and it touches the idle clock. A
14
- * runner that resolved the session once and held the entry across N steps
15
- * would be reaped mid-scenario at the five-minute idle timeout, and would
16
- * read as a flaky test rather than as a design error.
17
- * 2. **`drainEvidence()` drains, it does not peek.** Once per step, aggregated
18
- * into the summary. A single read at the end loses every earlier step's
19
- * observations — and would silently pass an assertion anchored at step 0,
20
- * which is the false green this whole feature exists to prevent.
21
- * 3. **A stored step carries no `ref`.** Every step re-resolves against a
22
- * fresh snapshot, exact-or-refuse, with no fallback chain. See
23
- * `scenario-resolve.ts`.
24
- * 4. **Assertions evaluate here, at replay.** An empty assertion list replays
25
- * as `unverified`, never `passed`.
26
- *
27
- * ## The outcome rule
28
- *
29
- * `DEC-384`, implemented rather than restated. A
30
- * failed assertion is the scenario's own claim about the application, written
31
- * down by a person, and it blocks. A console error or a failed request is
32
- * reported and does not block — frequently true of a working page, and a check
33
- * people disable protects nothing. No assertions is `unverified`. An
34
- * unresolvable step is **neither pass nor fail**: Descry cannot tell a
35
- * deliberate rename from a vanished button, and both produce a byte-identical
36
- * unresolvable step, so it claims neither while still stopping the run.
37
- *
38
- * Three counts, **never summed** — `failed`, `unresolved`, `unverified` — and
39
- * only failed assertions join `blockingTotal`, because folding `unresolved`
40
- * into it would re-assert through arithmetic the defect claim the ruling
41
- * refused to make in prose.
2
+ * Replays a stored scenario (§7 runner). DEC-384: failed assertion blocks; console
3
+ * error/failed request doesn't; no assertions is `unverified`; unresolvable step is
4
+ * neither pass nor fail. `registry.use()` and evidence draining run once per step only.
42
5
  */
43
6
  import type { Scenario, ScenarioActionKind, ScenarioAssertionKind } from "../scenarios/index.ts";
44
7
  import type { ToolContext } from "../tools/kit.ts";
@@ -59,18 +22,9 @@ export interface ScenarioAssertionResult {
59
22
  readonly index: number;
60
23
  readonly kind: ScenarioAssertionKind;
61
24
  readonly afterStep: number | null;
62
- /**
63
- * `unevaluable` and `notReached` are deliberately distinct from each other
64
- * and from `failed`.
65
- *
66
- * `unevaluable` is a hole in the stored artifact — a `textEquals` with
67
- * nothing to compare against. `notReached` is an assertion anchored at a
68
- * step the replay never got to. Neither is a defect claim about the
69
- * application, so neither may be reported as `failed`; only `unevaluable`
70
- * joins `unresolved`, because `notReached` is already accounted for by the
71
- * unresolved step that stopped the run and counting it twice would inflate
72
- * a count the ruling requires to stay separate.
73
- */
25
+ /** `unevaluable` = hole in the artifact (e.g. missing comparison value); `notReached`
26
+ * = anchored past where replay stopped. Neither is a defect claim; only
27
+ * `unevaluable` joins `unresolved` (notReached is already counted there). */
74
28
  readonly status: "passed" | "failed" | "unevaluable" | "notReached";
75
29
  readonly detail: string;
76
30
  }
@@ -87,16 +41,9 @@ export interface ScenarioReplay {
87
41
  readonly counts: ScenarioCounts;
88
42
  /** Only failed assertions. See this file's header for why `unresolved` is not folded in. */
89
43
  readonly blockingTotal: number;
90
- /**
91
- * 0 clean, 1 blocking findings, 2 the check could not run — `descry check`'s
92
- * existing vocabulary, computed here rather than in the CLI.
93
- *
94
- * The exit ruling governs the agentless CLI and explicitly does not govern
95
- * MCP replies, so this is data on the reply rather than a verdict in it. It
96
- * is computed in the one place that knows the outcome so the CLI box does
97
- * not become a second implementation of the same rule, drifting from this
98
- * one the first time either changes.
99
- */
44
+ /** 0 clean, 1 blocking findings, 2 could-not-run — `descry check`'s exit vocabulary,
45
+ * computed here (not in the CLI) so the two never drift. Governs the CLI only;
46
+ * this reply carries it as data, not a verdict. */
100
47
  readonly exitCode: 0 | 1 | 2;
101
48
  readonly steps: readonly ScenarioStepResult[];
102
49
  readonly assertions: readonly ScenarioAssertionResult[];
@@ -105,14 +52,9 @@ export interface ScenarioReplay {
105
52
  readonly graph: BrowserGraphWrite;
106
53
  /** Set when the session went away mid-replay — a crash, a reap, a disconnect. Null on a replay that ran to its own end. */
107
54
  readonly sessionEnded: DeadSession | null;
108
- /**
109
- * True when the call's own signal was aborted mid-replay.
110
- *
111
- * Reported rather than folded into `outcome` alone, because "stopped because
112
- * the caller cancelled" and "stopped because a step would not resolve" are
113
- * different facts about the run and only one of them says anything about the
114
- * application.
115
- */
55
+ /** True when the caller's own signal aborted mid-replay — distinct from `outcome`
56
+ * because "caller cancelled" vs "a step wouldn't resolve" are different facts,
57
+ * and only one says anything about the application. */
116
58
  readonly cancelled: boolean;
117
59
  readonly notes: readonly string[];
118
60
  }
@@ -1 +1 @@
1
- {"version":3,"file":"scenario-runner.d.ts","sourceRoot":"","sources":["../../src/browser/scenario-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAqB,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACpH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAE3D,OAAO,EAAkB,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,KAAK,EAAuB,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACjF,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EAAkD,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErG,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IACpC,8KAA8K;IAC9K,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,YAAY,GAAG,SAAS,CAAC;IAClD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI,CAAC;CAC/C;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,aAAa,GAAG,YAAY,CAAC;IACpE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,YAAY,GAAG,YAAY,CAAC;IACpE,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,4FAA4F;IAC5F,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B;;;;;;;;;OASG;IACH,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAC9C,QAAQ,CAAC,UAAU,EAAE,SAAS,uBAAuB,EAAE,CAAC;IACxD,4EAA4E;IAC5E,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;IAClC,2HAA2H;IAC3H,QAAQ,CAAC,YAAY,EAAE,WAAW,GAAG,IAAI,CAAC;IAC1C;;;;;;;OAOG;IACH,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAID,kHAAkH;AAClH,wBAAgB,OAAO,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAEnD;AA4BD,wBAAsB,cAAc,CAClC,GAAG,EAAE,WAAW,EAChB,QAAQ,EAAE,sBAAsB,EAChC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,cAAc,CAAC,CAoOzB"}
1
+ {"version":3,"file":"scenario-runner.d.ts","sourceRoot":"","sources":["../../src/browser/scenario-runner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAqB,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACpH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAE3D,OAAO,EAAkB,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,KAAK,EAAuB,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACjF,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EAAkD,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErG,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IACpC,8KAA8K;IAC9K,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,YAAY,GAAG,SAAS,CAAC;IAClD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI,CAAC;CAC/C;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC;;kFAE8E;IAC9E,QAAQ,CAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,aAAa,GAAG,YAAY,CAAC;IACpE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,YAAY,GAAG,YAAY,CAAC;IACpE,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,4FAA4F;IAC5F,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B;;wDAEoD;IACpD,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAC9C,QAAQ,CAAC,UAAU,EAAE,SAAS,uBAAuB,EAAE,CAAC;IACxD,4EAA4E;IAC5E,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;IAClC,2HAA2H;IAC3H,QAAQ,CAAC,YAAY,EAAE,WAAW,GAAG,IAAI,CAAC;IAC1C;;4DAEwD;IACxD,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAID,kHAAkH;AAClH,wBAAgB,OAAO,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAEnD;AAyBD,wBAAsB,cAAc,CAClC,GAAG,EAAE,WAAW,EAChB,QAAQ,EAAE,sBAAsB,EAChC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,cAAc,CAAC,CAsNzB"}
@@ -1,44 +1,7 @@
1
1
  /**
2
- * Replaying a stored scenario — §7's runner half.
3
- *
4
- * ## What this composes, and the four things it must not get wrong
5
- *
6
- * Everything below is composition: the port drives, `scenarios/` is the
7
- * artifact, `scenario-resolve.ts` re-resolves a descriptor, `tool-support.ts`
8
- * drains and correlates. What the runner adds is *order*, and four ordering
9
- * mistakes each fail as flakiness or as a false pass rather than as an error,
10
- * which is why each is named here rather than left to be rediscovered.
11
- *
12
- * 1. **`registry.use()` is called once per step.** It is not a lookup: it is
13
- * asynchronous, it is the crash detector, and it touches the idle clock. A
14
- * runner that resolved the session once and held the entry across N steps
15
- * would be reaped mid-scenario at the five-minute idle timeout, and would
16
- * read as a flaky test rather than as a design error.
17
- * 2. **`drainEvidence()` drains, it does not peek.** Once per step, aggregated
18
- * into the summary. A single read at the end loses every earlier step's
19
- * observations — and would silently pass an assertion anchored at step 0,
20
- * which is the false green this whole feature exists to prevent.
21
- * 3. **A stored step carries no `ref`.** Every step re-resolves against a
22
- * fresh snapshot, exact-or-refuse, with no fallback chain. See
23
- * `scenario-resolve.ts`.
24
- * 4. **Assertions evaluate here, at replay.** An empty assertion list replays
25
- * as `unverified`, never `passed`.
26
- *
27
- * ## The outcome rule
28
- *
29
- * `DEC-384`, implemented rather than restated. A
30
- * failed assertion is the scenario's own claim about the application, written
31
- * down by a person, and it blocks. A console error or a failed request is
32
- * reported and does not block — frequently true of a working page, and a check
33
- * people disable protects nothing. No assertions is `unverified`. An
34
- * unresolvable step is **neither pass nor fail**: Descry cannot tell a
35
- * deliberate rename from a vanished button, and both produce a byte-identical
36
- * unresolvable step, so it claims neither while still stopping the run.
37
- *
38
- * Three counts, **never summed** — `failed`, `unresolved`, `unverified` — and
39
- * only failed assertions join `blockingTotal`, because folding `unresolved`
40
- * into it would re-assert through arithmetic the defect claim the ruling
41
- * refused to make in prose.
2
+ * Replays a stored scenario (§7 runner). DEC-384: failed assertion blocks; console
3
+ * error/failed request doesn't; no assertions is `unverified`; unresolvable step is
4
+ * neither pass nor fail. `registry.use()` and evidence draining run once per step only.
42
5
  */
43
6
  import { NO_GRAPH_WRITE } from "./graph-write.js";
44
7
  import { resolveTarget } from "./scenario-resolve.js";
@@ -97,13 +60,9 @@ export async function replayScenario(ctx, registry, sessionId, scenario) {
97
60
  function anchoredAt(anchor) {
98
61
  return scenario.assertions.some((assertion, index) => assertion.afterStep === anchor && assertionResults[index] === null);
99
62
  }
100
- /**
101
- * A snapshot is taken only when something is anchored here.
102
- *
103
- * Not a micro-optimisation: a snapshot is a real round trip to a real page,
104
- * and taking one after every step of a twenty-step scenario that asserts
105
- * once at the end would triple the cost of the common case.
106
- */
63
+ /** Snapshots only when something is anchored here — not a micro-optimisation: a
64
+ * snapshot is a real round trip, and snapshotting every step of a 20-step scenario
65
+ * that asserts once at the end would triple the common case's cost. */
107
66
  async function evaluateAnchored(anchor, entry) {
108
67
  if (!anchoredAt(anchor))
109
68
  return;
@@ -115,11 +74,9 @@ export async function replayScenario(ctx, registry, sessionId, scenario) {
115
74
  });
116
75
  }
117
76
  for (const [index, step] of scenario.steps.entries()) {
118
- // Trap 4. Between steps, before anything is driven into the application.
119
- // A cancelled replay that ran to the end would keep clicking through a
120
- // live system on behalf of a caller who has gone — the reply is
121
- // suppressed, the mutations are not. The step in flight when the signal
122
- // fired finishes and its evidence is kept; nothing after it starts.
77
+ // Checked between steps, before driving anything: a cancelled replay must not
78
+ // keep clicking a live system for a caller who's gone. The in-flight step still
79
+ // finishes and its evidence is kept; nothing after it starts.
123
80
  if (ctx.signal.aborted) {
124
81
  cancelled = true;
125
82
  stopped = true;
@@ -128,9 +85,8 @@ export async function replayScenario(ctx, registry, sessionId, scenario) {
128
85
  "to that point is below.");
129
86
  break;
130
87
  }
131
- // Trap 1. Per step, always: `use` is the crash detector and the idle
132
- // clock, and a five-minute scenario that resolved the session once would
133
- // be reaped out from under itself halfway through.
88
+ // `use` is the crash detector and touches the idle clock — resolving the
89
+ // session once per scenario would let a 5-minute run get reaped halfway through.
134
90
  const found = await useSession(registry, sessionId);
135
91
  if (!found.ok) {
136
92
  sessionEnded = found.dead;
@@ -162,7 +118,7 @@ export async function replayScenario(ctx, registry, sessionId, scenario) {
162
118
  await entry.page.navigate(url);
163
119
  }
164
120
  else {
165
- // Trap 3. A fresh snapshot every time, and exact-or-refuse against it.
121
+ // Fresh snapshot every time, exact-or-refuse against it.
166
122
  const snapshot = await entry.page.snapshot();
167
123
  const target = step.target;
168
124
  if (target === null) {
@@ -183,10 +139,8 @@ export async function replayScenario(ctx, registry, sessionId, scenario) {
183
139
  const resolved = resolveTarget(`step ${index}`, target, snapshot);
184
140
  if (!resolved.resolved) {
185
141
  steps[index] = { index, action: step.action, status: "unresolved", url: snapshot.url, resolution: resolved.failure };
186
- // Trap 2 again, on the failure path. Stopping without draining would
187
- // discard whatever the page said before the descriptor stopped
188
- // matching, which is exactly the evidence a person needs to tell a
189
- // rename from a breakage.
142
+ // Stopping without draining would discard the evidence needed to tell a
143
+ // rename from a real breakage.
190
144
  const observed = await observeAndCorrelate(ctx, entry);
191
145
  absorb(observed.evidence);
192
146
  graph = mergeGraph(graph, observed.graph);
@@ -202,9 +156,8 @@ export async function replayScenario(ctx, registry, sessionId, scenario) {
202
156
  else
203
157
  await entry.page.fill(ref, step.text ?? "");
204
158
  }
205
- // Trap 2. Once per step, aggregated. A final read would lose everything
206
- // the earlier steps saw; a peeking read would report each observation
207
- // again on the teardown flush.
159
+ // Drained once per step, aggregated — a final-only read loses earlier steps;
160
+ // peeking double-reports on teardown flush.
208
161
  const observed = await observeAndCorrelate(ctx, entry);
209
162
  absorb(observed.evidence);
210
163
  graph = mergeGraph(graph, observed.graph);
@@ -212,9 +165,8 @@ export async function replayScenario(ctx, registry, sessionId, scenario) {
212
165
  steps[index] = { index, action: step.action, status: "ran", url: entry.page.currentUrl(), resolution: null };
213
166
  await evaluateAnchored(index, entry);
214
167
  }
215
- // End-of-scenario assertions, and only when there are some. A `use` call is
216
- // not free — it is the crash detector and it touches the idle clock — so a
217
- // scenario with nothing anchored at the end does not make one.
168
+ // Only when something is anchored at the end — `use` is not free (crash
169
+ // detector, idle clock), so a scenario with nothing anchored skips the call.
218
170
  if (!stopped && anchoredAt(null)) {
219
171
  const found = await useSession(registry, sessionId);
220
172
  if (found.ok) {
@@ -237,16 +189,13 @@ export async function replayScenario(ctx, registry, sessionId, scenario) {
237
189
  const unevaluable = assertions.filter((a) => a.status === "unevaluable").length;
238
190
  const unresolvedSteps = steps.filter((s) => s.status === "unresolved").length;
239
191
  const unresolved = unresolvedSteps + unevaluable;
240
- // A scenario that claimed nothing verified nothing. One scenario, so this is
241
- // 1 or 0 — the count is a count so the CLI can add scenarios together, never
242
- // so it can add it to the other two.
192
+ // A scenario with no assertions verified nothing — 1 or 0, summable across
193
+ // scenarios but never with the other two counts.
243
194
  const unverified = scenario.assertions.length === 0 ? 1 : 0;
244
195
  const passed = assertions.filter((a) => a.status === "passed").length;
245
- // `cancelled` sits beside `sessionEnded` for a reason that is easy to miss:
246
- // a replay stopped early leaves its assertions `notReached`, and
247
- // `notReached` counts toward neither `failed` nor `unresolved`. Without this
248
- // term a run cancelled after one step of twenty reports exactly the same
249
- // `passed` as a run that verified every one of them.
196
+ // `cancelled` sits beside `sessionEnded`: a stopped replay leaves assertions
197
+ // `notReached`, counted toward neither `failed` nor `unresolved` — without it, a
198
+ // run cancelled after 1 of 20 steps would look identical to one that verified all.
250
199
  const outcome = failed > 0
251
200
  ? "failed"
252
201
  : unresolved > 0 || sessionEnded !== null || cancelled
@@ -271,15 +220,9 @@ export async function replayScenario(ctx, registry, sessionId, scenario) {
271
220
  notes,
272
221
  };
273
222
  }
274
- /**
275
- * Evaluate one assertion against the page as it stands and the evidence
276
- * gathered so far.
277
- *
278
- * The two evidence assertions read *cumulatively* — everything observed since
279
- * the replay began, not only the step just taken. An author anchoring
280
- * `noConsoleErrors` after step 3 is claiming the page got that far cleanly,
281
- * not that step 3 in isolation was quiet.
282
- */
223
+ /** Evaluates one assertion against current page + evidence gathered so far. The two
224
+ * evidence assertions read cumulatively (since replay began, not just the last step) —
225
+ * anchoring `noConsoleErrors` after step 3 claims the page was clean the whole way. */
283
226
  function evaluateAssertion(assertion, index, entry, snapshot, evidence) {
284
227
  const base = { index, kind: assertion.kind, afterStep: assertion.afterStep };
285
228
  const unevaluable = (detail) => ({ ...base, status: "unevaluable", detail });
@@ -293,10 +236,8 @@ function evaluateAssertion(assertion, index, entry, snapshot, evidence) {
293
236
  const found = resolveTarget(`assertion ${index}`, assertion.target, snapshot);
294
237
  if (found.resolved)
295
238
  return passed(`assertion ${index}: the element is on ${snapshot.url}.`);
296
- // Ambiguity is the page being unreadable, not the claim being wrong —
297
- // "which of these two did you mean" is a question, not a defect. Zero
298
- // and partial are the claim failing: the author wrote down that this
299
- // element would be here, and it is not.
239
+ // Ambiguity is the page being unreadable, not the claim being wrong. Zero/partial
240
+ // matches are the claim failing — the author said this element would be here.
300
241
  if (found.failure.kind === "ambiguous")
301
242
  return unevaluable(found.failure.message);
302
243
  return failed(found.failure.message);
@@ -310,9 +251,8 @@ function evaluateAssertion(assertion, index, entry, snapshot, evidence) {
310
251
  if (!found.resolved) {
311
252
  return found.failure.kind === "ambiguous" ? unevaluable(found.failure.message) : failed(found.failure.message);
312
253
  }
313
- // The snapshot carries an accessible name, which is what the port
314
- // exposes; there is no text-content field to compare against and
315
- // inventing one would be a promise the format cannot keep.
254
+ // Compares accessible name only — the port exposes no text-content field, and
255
+ // inventing one would promise something the format can't keep.
316
256
  return found.element.name === assertion.expected
317
257
  ? passed(`assertion ${index}: the element's accessible name is "${assertion.expected}".`)
318
258
  : failed(`assertion ${index}: expected the element's accessible name to be "${assertion.expected}", and it ` +
@@ -1 +1 @@
1
- {"version":3,"file":"scenario-runner.js","sourceRoot":"","sources":["../../src/browser/scenario-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scenario-runner.js","sourceRoot":"","sources":["../../src/browser/scenario-runner.ts"],"names":[],"mappings":"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"}