playwriter 0.0.63 → 0.0.89

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 (223) hide show
  1. package/dist/a11y-client.js +18 -8
  2. package/dist/aria-snapshot.d.ts +41 -3
  3. package/dist/aria-snapshot.d.ts.map +1 -1
  4. package/dist/aria-snapshot.js +134 -55
  5. package/dist/aria-snapshot.js.map +1 -1
  6. package/dist/aria-snapshot.test.js +5 -2
  7. package/dist/aria-snapshot.test.js.map +1 -1
  8. package/dist/aria-snapshot.unit.test.js +83 -41
  9. package/dist/aria-snapshot.unit.test.js.map +1 -1
  10. package/dist/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.d.ts +5 -0
  11. package/dist/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.d.ts.map +1 -0
  12. package/dist/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.js +5 -0
  13. package/dist/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.js.map +1 -0
  14. package/dist/bippy.js +1 -1
  15. package/dist/cdp-log.d.ts +1 -1
  16. package/dist/cdp-log.d.ts.map +1 -1
  17. package/dist/cdp-log.js +1 -1
  18. package/dist/cdp-log.js.map +1 -1
  19. package/dist/cdp-relay.d.ts.map +1 -1
  20. package/dist/cdp-relay.js +492 -298
  21. package/dist/cdp-relay.js.map +1 -1
  22. package/dist/cdp-session.d.ts.map +1 -1
  23. package/dist/cdp-session.js.map +1 -1
  24. package/dist/cdp-types.d.ts.map +1 -1
  25. package/dist/cdp-types.js +7 -7
  26. package/dist/cdp-types.js.map +1 -1
  27. package/dist/clean-html.d.ts.map +1 -1
  28. package/dist/clean-html.js +4 -5
  29. package/dist/clean-html.js.map +1 -1
  30. package/dist/cli.js +45 -27
  31. package/dist/cli.js.map +1 -1
  32. package/dist/create-logger.d.ts.map +1 -1
  33. package/dist/create-logger.js +3 -1
  34. package/dist/create-logger.js.map +1 -1
  35. package/dist/debugger-examples-types.d.ts.map +1 -1
  36. package/dist/debugger.d.ts.map +1 -1
  37. package/dist/debugger.js +1 -3
  38. package/dist/debugger.js.map +1 -1
  39. package/dist/diff-utils.d.ts.map +1 -1
  40. package/dist/diff-utils.js +1 -4
  41. package/dist/diff-utils.js.map +1 -1
  42. package/dist/editor-api.md +12 -2
  43. package/dist/editor-examples.d.ts +1 -1
  44. package/dist/editor-examples.d.ts.map +1 -1
  45. package/dist/editor-examples.js +1 -1
  46. package/dist/editor-examples.js.map +1 -1
  47. package/dist/editor.d.ts +1 -1
  48. package/dist/editor.d.ts.map +1 -1
  49. package/dist/editor.js +1 -1
  50. package/dist/editor.js.map +1 -1
  51. package/dist/executor.d.ts +26 -3
  52. package/dist/executor.d.ts.map +1 -1
  53. package/dist/executor.js +297 -64
  54. package/dist/executor.js.map +1 -1
  55. package/dist/executor.unit.test.js +38 -1
  56. package/dist/executor.unit.test.js.map +1 -1
  57. package/dist/extension-connection.test.js +139 -36
  58. package/dist/extension-connection.test.js.map +1 -1
  59. package/dist/ffmpeg.d.ts +148 -0
  60. package/dist/ffmpeg.d.ts.map +1 -0
  61. package/dist/ffmpeg.js +523 -0
  62. package/dist/ffmpeg.js.map +1 -0
  63. package/dist/ghost-browser.d.ts.map +1 -1
  64. package/dist/ghost-browser.js.map +1 -1
  65. package/dist/ghost-cursor-client.js +287 -0
  66. package/dist/ghost-cursor.d.ts +27 -0
  67. package/dist/ghost-cursor.d.ts.map +1 -0
  68. package/dist/ghost-cursor.js +63 -0
  69. package/dist/ghost-cursor.js.map +1 -0
  70. package/dist/htmlrewrite.d.ts.map +1 -1
  71. package/dist/htmlrewrite.js +17 -55
  72. package/dist/htmlrewrite.js.map +1 -1
  73. package/dist/htmlrewrite.test.js.map +1 -1
  74. package/dist/kill-port.d.ts.map +1 -1
  75. package/dist/kill-port.js +1 -3
  76. package/dist/kill-port.js.map +1 -1
  77. package/dist/locator-selector.test.d.ts +2 -0
  78. package/dist/locator-selector.test.d.ts.map +1 -0
  79. package/dist/locator-selector.test.js +96 -0
  80. package/dist/locator-selector.test.js.map +1 -0
  81. package/dist/mcp-client.js.map +1 -1
  82. package/dist/mcp.d.ts.map +1 -1
  83. package/dist/mcp.js +8 -3
  84. package/dist/mcp.js.map +1 -1
  85. package/dist/on-mouse-action.test.d.ts +2 -0
  86. package/dist/on-mouse-action.test.d.ts.map +1 -0
  87. package/dist/on-mouse-action.test.js +155 -0
  88. package/dist/on-mouse-action.test.js.map +1 -0
  89. package/dist/page-markdown.js +4 -4
  90. package/dist/page-markdown.js.map +1 -1
  91. package/dist/prompt.md +450 -377
  92. package/dist/protocol.d.ts +4 -0
  93. package/dist/protocol.d.ts.map +1 -1
  94. package/dist/readability.js +16 -2
  95. package/dist/recording-ghost-cursor.d.ts +41 -0
  96. package/dist/recording-ghost-cursor.d.ts.map +1 -0
  97. package/dist/recording-ghost-cursor.js +79 -0
  98. package/dist/recording-ghost-cursor.js.map +1 -0
  99. package/dist/recording-relay.d.ts.map +1 -1
  100. package/dist/recording-relay.js +8 -8
  101. package/dist/recording-relay.js.map +1 -1
  102. package/dist/relay-client.d.ts +17 -4
  103. package/dist/relay-client.d.ts.map +1 -1
  104. package/dist/relay-client.js +45 -11
  105. package/dist/relay-client.js.map +1 -1
  106. package/dist/relay-core.test.d.ts.map +1 -1
  107. package/dist/relay-core.test.js +515 -26
  108. package/dist/relay-core.test.js.map +1 -1
  109. package/dist/relay-navigation.test.d.ts.map +1 -1
  110. package/dist/relay-navigation.test.js +169 -31
  111. package/dist/relay-navigation.test.js.map +1 -1
  112. package/dist/relay-session.test.d.ts.map +1 -1
  113. package/dist/relay-session.test.js +113 -65
  114. package/dist/relay-session.test.js.map +1 -1
  115. package/dist/relay-state.d.ts +158 -0
  116. package/dist/relay-state.d.ts.map +1 -0
  117. package/dist/relay-state.js +306 -0
  118. package/dist/relay-state.js.map +1 -0
  119. package/dist/relay-state.test.d.ts +2 -0
  120. package/dist/relay-state.test.d.ts.map +1 -0
  121. package/dist/relay-state.test.js +472 -0
  122. package/dist/relay-state.test.js.map +1 -0
  123. package/dist/scoped-fs.d.ts.map +1 -1
  124. package/dist/scoped-fs.js.map +1 -1
  125. package/dist/screen-recording.d.ts +66 -4
  126. package/dist/screen-recording.d.ts.map +1 -1
  127. package/dist/screen-recording.js +150 -13
  128. package/dist/screen-recording.js.map +1 -1
  129. package/dist/screen-recording.test.d.ts +2 -0
  130. package/dist/screen-recording.test.d.ts.map +1 -0
  131. package/dist/screen-recording.test.js +102 -0
  132. package/dist/screen-recording.test.js.map +1 -0
  133. package/dist/selector-generator.js +1 -1
  134. package/dist/snapshot-tools.test.js +71 -28
  135. package/dist/snapshot-tools.test.js.map +1 -1
  136. package/dist/start-relay-server.d.ts +1 -1
  137. package/dist/start-relay-server.d.ts.map +1 -1
  138. package/dist/start-relay-server.js +1 -1
  139. package/dist/start-relay-server.js.map +1 -1
  140. package/dist/styles-api.md +8 -1
  141. package/dist/styles-examples.d.ts +1 -1
  142. package/dist/styles-examples.d.ts.map +1 -1
  143. package/dist/styles-examples.js +1 -1
  144. package/dist/styles-examples.js.map +1 -1
  145. package/dist/styles.d.ts.map +1 -1
  146. package/dist/styles.js +1 -3
  147. package/dist/styles.js.map +1 -1
  148. package/dist/test-declarations.d.ts.map +1 -1
  149. package/dist/test-utils.d.ts +1 -1
  150. package/dist/test-utils.d.ts.map +1 -1
  151. package/dist/test-utils.js +7 -5
  152. package/dist/test-utils.js.map +1 -1
  153. package/dist/utils.d.ts.map +1 -1
  154. package/dist/utils.js.map +1 -1
  155. package/dist/wait-for-page-load.d.ts.map +1 -1
  156. package/dist/wait-for-page-load.js +1 -1
  157. package/dist/wait-for-page-load.js.map +1 -1
  158. package/package.json +4 -3
  159. package/src/a11y-client.ts +5 -4
  160. package/src/aria-snapshot.test.ts +5 -2
  161. package/src/aria-snapshot.ts +306 -117
  162. package/src/aria-snapshot.unit.test.ts +199 -141
  163. package/src/aria-snapshots/github-interactive.txt +2 -0
  164. package/src/aria-snapshots/github-raw.txt +5 -1
  165. package/src/aria-snapshots/hackernews-interactive.txt +238 -241
  166. package/src/aria-snapshots/hackernews-raw.txt +265 -269
  167. package/src/assets/aria-labels-example.png +0 -0
  168. package/src/assets/aria-labels-github.png +0 -0
  169. package/src/assets/aria-labels-hacker-news.png +0 -0
  170. package/src/assets/aria-labels-old-reddit.png +0 -0
  171. package/src/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.ts +5 -0
  172. package/src/assets/cursors/screen-studio/pointer-macos-tahoe.svg +18 -0
  173. package/src/cdp-log.ts +4 -1
  174. package/src/cdp-relay.ts +1059 -737
  175. package/src/cdp-session.ts +12 -3
  176. package/src/cdp-types.ts +51 -51
  177. package/src/clean-html.ts +4 -5
  178. package/src/cli.ts +82 -55
  179. package/src/create-logger.ts +5 -3
  180. package/src/debugger-examples-types.ts +4 -1
  181. package/src/debugger.ts +1 -5
  182. package/src/diff-utils.ts +2 -5
  183. package/src/editor-examples.ts +11 -1
  184. package/src/editor.ts +10 -2
  185. package/src/executor.ts +374 -73
  186. package/src/executor.unit.test.ts +48 -1
  187. package/src/extension-connection.test.ts +612 -488
  188. package/src/ffmpeg.ts +769 -0
  189. package/src/ghost-browser.ts +4 -6
  190. package/src/ghost-cursor-client.ts +369 -0
  191. package/src/ghost-cursor.ts +110 -0
  192. package/src/htmlrewrite.test.ts +6 -2
  193. package/src/htmlrewrite.ts +348 -386
  194. package/src/kill-port.ts +1 -3
  195. package/src/locator-selector.test.ts +115 -0
  196. package/src/mcp-client.ts +1 -1
  197. package/src/mcp.ts +21 -15
  198. package/src/on-mouse-action.test.ts +196 -0
  199. package/src/page-markdown.ts +7 -7
  200. package/src/protocol.ts +73 -57
  201. package/src/recording-ghost-cursor.ts +113 -0
  202. package/src/recording-relay.ts +20 -12
  203. package/src/relay-client.ts +85 -18
  204. package/src/relay-core.test.ts +1117 -578
  205. package/src/relay-navigation.test.ts +648 -483
  206. package/src/relay-session.test.ts +984 -929
  207. package/src/relay-state.test.ts +570 -0
  208. package/src/relay-state.ts +497 -0
  209. package/src/resource.md +21 -49
  210. package/src/scoped-fs.ts +9 -3
  211. package/src/screen-recording.test.ts +111 -0
  212. package/src/screen-recording.ts +256 -31
  213. package/src/skill.md +476 -396
  214. package/src/snapshot-tools.test.ts +580 -528
  215. package/src/snapshots/shadcn-ui-accessibility-full.md +8 -8
  216. package/src/snapshots/shadcn-ui-accessibility-interactive.md +8 -8
  217. package/src/start-relay-server.ts +14 -11
  218. package/src/styles-examples.ts +8 -1
  219. package/src/styles.ts +20 -21
  220. package/src/test-declarations.ts +6 -6
  221. package/src/test-utils.ts +104 -91
  222. package/src/utils.ts +2 -1
  223. package/src/wait-for-page-load.ts +6 -1
@@ -12,452 +12,449 @@
12
12
  - row:
13
13
  - cell "1."
14
14
  - cell:
15
- - link [id="up_47045612"]
16
- - cell "GrapheneOS Break Free from Google and Apple (blog.tomaszdunia.pl)":
17
- - role=link[name="GrapheneOS Break Free from Google and Apple"]
18
- - role=link[name="blog.tomaszdunia.pl"]
15
+ - link [id="up_47351239"]
16
+ - cell "Suburban school district uses license plate readers to verify student residency (nbcchicago.com)":
17
+ - role=link[name="Suburban school district uses license plate readers to verify student residency"]
18
+ - role=link[name="nbcchicago.com"]
19
19
  - row:
20
20
  - cell
21
- - cell "491 points by to3k 4 hours ago | hide | 314 comments":
22
- - role=link[name="to3k"]
23
- - role=link[name="4 hours ago"] >> nth=0
21
+ - cell "37 points by josephcsible 16 minutes ago | hide | 18 comments":
22
+ - role=link[name="josephcsible"]
23
+ - role=link[name="16 minutes ago"]
24
24
  - role=link[name="hide"] >> nth=0
25
- - role=link[name="314 comments"]
25
+ - role=link[name="18 comments"] >> nth=0
26
26
  - row
27
27
  - row:
28
28
  - cell "2."
29
29
  - cell:
30
- - link [id="up_47022270"]
31
- - cell "Four Column ASCII (2017) (garbagecollected.org)":
32
- - role=link[name="Four Column ASCII (2017)"]
33
- - role=link[name="garbagecollected.org"]
30
+ - link [id="up_47349798"]
31
+ - cell "US banks' exposure to private credit hits $300B (2025) (alternativecreditinvestor.com)":
32
+ - role=link[name="US banks' exposure to private credit hits $300B (2025)"]
33
+ - role=link[name="alternativecreditinvestor.com"]
34
34
  - row:
35
35
  - cell
36
- - cell "247 points by tempodox 10 hours ago | hide | 50 comments":
37
- - role=link[name="tempodox"]
38
- - role=link[name="10 hours ago"]
36
+ - cell "85 points by JumpCrisscross 2 hours ago | hide | 45 comments":
37
+ - role=link[name="JumpCrisscross"]
38
+ - role=link[name="2 hours ago"] >> nth=0
39
39
  - role=link[name="hide"] >> nth=1
40
- - role=link[name="50 comments"] >> nth=0
40
+ - role=link[name="45 comments"]
41
41
  - row
42
42
  - row:
43
43
  - cell "3."
44
44
  - cell:
45
- - link [id="up_47038546"]
46
- - cell "14-year-old Miles Wu folded origami pattern that holds 10k times its own weight (smithsonianmag.com)":
47
- - role=link[name="14-year-old Miles Wu folded origami pattern that holds 10k times its own weight"]
48
- - role=link[name="smithsonianmag.com"]
45
+ - link [id="up_47350416"]
46
+ - cell "Show HN: We analyzed 1,573 Claude Code sessions to see how AI agents work (github.com/obsessiondb)":
47
+ - role=link[name="Show HN: We analyzed 1,573 Claude Code sessions to see how AI agents work"]
48
+ - role=link[name="github.com/obsessiondb"]
49
49
  - row:
50
50
  - cell
51
- - cell "787 points by bookofjoe 20 hours ago | hide | 169 comments":
52
- - role=link[name="bookofjoe"]
53
- - role=link[name="20 hours ago"] >> nth=0
51
+ - cell "52 points by keks0r 1 hour ago | hide | 28 comments":
52
+ - role=link[name="keks0r"]
53
+ - role=link[name="1 hour ago"] >> nth=0
54
54
  - role=link[name="hide"] >> nth=2
55
- - role=link[name="169 comments"]
55
+ - role=link[name="28 comments"]
56
56
  - row
57
57
  - row:
58
58
  - cell "4."
59
59
  - cell:
60
- - link [id="up_47006080"]
61
- - cell "Rethinking High-School Science Fairs (asteriskmag.com)":
62
- - role=link[name="Rethinking High-School Science Fairs"]
63
- - role=link[name="asteriskmag.com"]
60
+ - link [id="up_47350424"]
61
+ - cell "Malus Clean Room as a Service (malus.sh)":
62
+ - role=link[name="Malus Clean Room as a Service"]
63
+ - role=link[name="malus.sh"]
64
64
  - row:
65
65
  - cell
66
- - cell "37 points by surprisetalk 4 hours ago | hide | 29 comments":
67
- - role=link[name="surprisetalk"]
68
- - role=link[name="4 hours ago"] >> nth=1
66
+ - cell "37 points by microflash 1 hour ago | hide | 13 comments":
67
+ - role=link[name="microflash"]
68
+ - role=link[name="1 hour ago"] >> nth=1
69
69
  - role=link[name="hide"] >> nth=3
70
- - role=link[name="29 comments"]
70
+ - role=link[name="13 comments"]
71
71
  - row
72
72
  - row:
73
73
  - cell "5."
74
74
  - cell:
75
- - link [id="up_47004629"]
76
- - cell "How teaching molecules to think is revealing what a 'mind' is (newscientist.com)":
77
- - role=link[name="How teaching molecules to think is revealing what a 'mind' is"]
78
- - role=link[name="newscientist.com"]
75
+ - link [id="up_47350516"]
76
+ - cell "Show HN: Axe A 12MB binary that replaces your AI framework (github.com/jrswab)":
77
+ - role=link[name="Show HN: Axe A 12MB binary that replaces your AI framework"]
78
+ - role=link[name="github.com/jrswab"]
79
79
  - row:
80
80
  - cell
81
- - cell "43 points by pella 5 hours ago | hide | 27 comments":
82
- - role=link[name="pella"]
83
- - role=link[name="5 hours ago"] >> nth=0
81
+ - cell "26 points by jrswab 1 hour ago | hide | 16 comments":
82
+ - role=link[name="jrswab"]
83
+ - role=link[name="1 hour ago"] >> nth=2
84
84
  - role=link[name="hide"] >> nth=4
85
- - role=link[name="27 comments"]
85
+ - role=link[name="16 comments"]
86
86
  - row
87
87
  - row:
88
88
  - cell "6."
89
89
  - cell:
90
- - link [id="up_47012895"]
91
- - cell "Rendering the Visible Spectrum (brandonli.net)":
92
- - role=link[name="Rendering the Visible Spectrum"]
93
- - role=link[name="brandonli.net"]
90
+ - link [id="up_47348304"]
91
+ - cell "Dolphin Progress Release 2603 (dolphin-emu.org)":
92
+ - role=link[name="Dolphin Progress Release 2603"]
93
+ - role=link[name="dolphin-emu.org"]
94
94
  - row:
95
95
  - cell
96
- - cell "92 points by signa11 9 hours ago | hide | 13 comments":
97
- - role=link[name="signa11"]
98
- - role=link[name="9 hours ago"] >> nth=0
96
+ - cell "166 points by BitPirate 5 hours ago | hide | 18 comments":
97
+ - role=link[name="BitPirate"]
98
+ - role=link[name="5 hours ago"] >> nth=0
99
99
  - role=link[name="hide"] >> nth=5
100
- - role=link[name="13 comments"]
100
+ - role=link[name="18 comments"] >> nth=1
101
101
  - row
102
102
  - row:
103
103
  - cell "7."
104
- - cell:
105
- - link [id="up_47047443"]
106
- - cell "Undo in Vi and Its Successors (utcc.utoronto.ca)":
107
- - role=link[name="Undo in Vi and Its Successors"]
108
- - role=link[name="utcc.utoronto.ca"]
104
+ - cell
105
+ - cell "Hive (YC S14) is hiring scrappy product managers and product/data engineers (ashbyhq.com)":
106
+ - role=link[name="Hive (YC S14) is hiring scrappy product managers and product/data engineers"]
107
+ - role=link[name="ashbyhq.com"]
109
108
  - row:
110
109
  - cell
111
- - cell "16 points by todsacerdoti 1 hour ago | hide | 15 comments":
112
- - role=link[name="todsacerdoti"] >> nth=0
113
- - role=link[name="1 hour ago"]
110
+ - cell "25 minutes ago | hide":
111
+ - role=link[name="25 minutes ago"]
114
112
  - role=link[name="hide"] >> nth=6
115
- - role=link[name="15 comments"] >> nth=0
116
113
  - row
117
114
  - row:
118
115
  - cell "8."
119
116
  - cell:
120
- - link [id="up_47040524"]
121
- - cell "Rise of the Triforce (dolphin-emu.org)":
122
- - role=link[name="Rise of the Triforce"]
123
- - role=link[name="dolphin-emu.org"]
117
+ - link [id="up_47349277"]
118
+ - cell "Big Data on the Cheapest MacBook (duckdb.org)":
119
+ - role=link[name="Big Data on the Cheapest MacBook"]
120
+ - role=link[name="duckdb.org"]
124
121
  - row:
125
122
  - cell
126
- - cell "341 points by max-m 17 hours ago | hide | 50 comments":
127
- - role=link[name="max-m"]
128
- - role=link[name="17 hours ago"] >> nth=0
123
+ - cell "189 points by bcye 3 hours ago | hide | 157 comments":
124
+ - role=link[name="bcye"]
125
+ - role=link[name="3 hours ago"] >> nth=0
129
126
  - role=link[name="hide"] >> nth=7
130
- - role=link[name="50 comments"] >> nth=1
127
+ - role=link[name="157 comments"]
131
128
  - row
132
129
  - row:
133
130
  - cell "9."
134
131
  - cell:
135
- - link [id="up_47033954"]
136
- - cell "Show HN: Glitchy camera – a circuit-bent camera simulator in the browser (glitchycam.com)":
137
- - role=link[name="Show HN: Glitchy camera – a circuit-bent camera simulator in the browser"]
138
- - role=link[name="glitchycam.com"]
132
+ - link [id="up_47348192"]
133
+ - cell "Avoiding Trigonometry (2013) (iquilezles.org)":
134
+ - role=link[name="Avoiding Trigonometry (2013)"]
135
+ - role=link[name="iquilezles.org"]
139
136
  - row:
140
137
  - cell
141
- - cell "99 points by elayabharath 8 hours ago | hide | 11 comments":
142
- - role=link[name="elayabharath"]
143
- - role=link[name="8 hours ago"] >> nth=0
138
+ - cell "129 points by WithinReason 5 hours ago | hide | 26 comments":
139
+ - role=link[name="WithinReason"]
140
+ - role=link[name="5 hours ago"] >> nth=1
144
141
  - role=link[name="hide"] >> nth=8
145
- - role=link[name="11 comments"]
142
+ - role=link[name="26 comments"]
146
143
  - row
147
144
  - row:
148
145
  - cell "10."
149
146
  - cell:
150
- - link [id="up_47047526"]
151
- - cell "Why I'm Worried About Job Loss and Thoughts on Comparative Advantage (lesswrong.com)":
152
- - role=link[name="Why I'm Worried About Job Loss and Thoughts on Comparative Advantage"]
153
- - role=link[name="lesswrong.com"]
147
+ - link [id="up_47311634"]
148
+ - cell "The purpose of Continuous Integration is to fail (nix-ci.com)":
149
+ - role=link[name="The purpose of Continuous Integration is to fail"]
150
+ - role=link[name="nix-ci.com"]
154
151
  - row:
155
152
  - cell
156
- - cell "19 points by cubefox 51 minutes ago | hide | 15 comments":
157
- - role=link[name="cubefox"]
158
- - role=link[name="51 minutes ago"]
153
+ - cell "16 points by Norfair 2 hours ago | hide | 20 comments":
154
+ - role=link[name="Norfair"]
155
+ - role=link[name="2 hours ago"] >> nth=1
159
156
  - role=link[name="hide"] >> nth=9
160
- - role=link[name="15 comments"] >> nth=1
157
+ - role=link[name="20 comments"]
161
158
  - row
162
159
  - row:
163
160
  - cell "11."
164
161
  - cell:
165
- - link [id="up_47042895"]
166
- - cell "Poor Deming never stood a chance (surfingcomplexity.blog)":
167
- - role=link[name="Poor Deming never stood a chance"]
168
- - role=link[name="surfingcomplexity.blog"]
162
+ - link [id="up_47351371"]
163
+ - cell "ATMs didn't kill bank Teller jobs, but the iPhone did (davidoks.blog)":
164
+ - role=link[name="ATMs didn't kill bank Teller jobs, but the iPhone did"]
165
+ - role=link[name="davidoks.blog"]
169
166
  - row:
170
167
  - cell
171
- - cell "143 points by todsacerdoti 12 hours ago | hide | 71 comments":
172
- - role=link[name="todsacerdoti"] >> nth=1
173
- - role=link[name="12 hours ago"]
168
+ - cell "3 points by colinprince 8 minutes ago | hide | discuss":
169
+ - role=link[name="colinprince"]
170
+ - role=link[name="8 minutes ago"]
174
171
  - role=link[name="hide"] >> nth=10
175
- - role=link[name="71 comments"]
172
+ - role=link[name="discuss"]
176
173
  - row
177
174
  - row:
178
175
  - cell "12."
179
176
  - cell:
180
- - link [id="up_47014002"]
181
- - cell "A deep dive into Apple's .car file format (dbg.re)":
182
- - role=link[name="A deep dive into Apple's .car file format"]
183
- - role=link[name="dbg.re"]
177
+ - link [id="up_47347945"]
178
+ - cell "3D-Knitting: The Ultimate Guide (oliver-charles.com)":
179
+ - role=link[name="3D-Knitting: The Ultimate Guide"]
180
+ - role=link[name="oliver-charles.com"]
184
181
  - row:
185
182
  - cell
186
- - cell "125 points by MrFinch 11 hours ago | hide | 46 comments":
187
- - role=link[name="MrFinch"]
188
- - role=link[name="11 hours ago"]
183
+ - cell "157 points by ChadNauseam 6 hours ago | hide | 57 comments":
184
+ - role=link[name="ChadNauseam"]
185
+ - role=link[name="6 hours ago"] >> nth=0
189
186
  - role=link[name="hide"] >> nth=11
190
- - role=link[name="46 comments"]
187
+ - role=link[name="57 comments"]
191
188
  - row
192
189
  - row:
193
190
  - cell "13."
194
191
  - cell:
195
- - link [id="up_47044179"]
196
- - cell "Xbox UI Portfolio Site (gabrielcabrera.co)":
197
- - role=link[name="Xbox UI Portfolio Site"]
198
- - role=link[name="gabrielcabrera.co"]
192
+ - link [id="up_47350108"]
193
+ - cell "Show HN: Calyx Ghostty-Based macOS Terminal with Liquid Glass UI (github.com/yuuichieguchi)":
194
+ - role=link[name="Show HN: Calyx – Ghostty-Based macOS Terminal with Liquid Glass UI"]
195
+ - role=link[name="github.com/yuuichieguchi"]
199
196
  - row:
200
197
  - cell
201
- - cell "77 points by valgaze 8 hours ago | hide | 25 comments":
202
- - role=link[name="valgaze"]
203
- - role=link[name="8 hours ago"] >> nth=1
198
+ - cell "13 points by yuu1ch13 1 hour ago | hide | 19 comments":
199
+ - role=link[name="yuu1ch13"]
200
+ - role=link[name="1 hour ago"] >> nth=3
204
201
  - role=link[name="hide"] >> nth=12
205
- - role=link[name="25 comments"]
202
+ - role=link[name="19 comments"] >> nth=0
206
203
  - row
207
204
  - row:
208
205
  - cell "14."
209
206
  - cell:
210
- - link [id="up_47035560"]
211
- - cell "What your Bluetooth devices reveal (dmcc.io)":
212
- - role=link[name="What your Bluetooth devices reveal"]
213
- - role=link[name="dmcc.io"]
207
+ - link [id="up_47344548"]
208
+ - cell "Show HN: s@: decentralized social networking over static sites (satproto.org)":
209
+ - role=link[name="Show HN: s@: decentralized social networking over static sites"]
210
+ - role=link[name="satproto.org"]
214
211
  - row:
215
212
  - cell
216
- - cell "474 points by ssgodderidge 1 day ago | hide | 176 comments":
217
- - role=link[name="ssgodderidge"]
218
- - role=link[name="1 day ago"] >> nth=0
213
+ - cell "362 points by remywang 14 hours ago | hide | 161 comments":
214
+ - role=link[name="remywang"]
215
+ - role=link[name="14 hours ago"] >> nth=0
219
216
  - role=link[name="hide"] >> nth=13
220
- - role=link[name="176 comments"]
217
+ - role=link[name="161 comments"] >> nth=0
221
218
  - row
222
219
  - row:
223
220
  - cell "15."
224
221
  - cell:
225
- - link [id="up_47002231"]
226
- - cell "Visual introduction to PyTorch (0byte.io)":
227
- - role=link[name="Visual introduction to PyTorch"]
228
- - role=link[name="0byte.io"]
222
+ - link [id="up_47350931"]
223
+ - cell "Kotlin creator's new language: a formal way to talk to LLMs instead of English (codespeak.dev)":
224
+ - role=link[name="Kotlin creator's new language: a formal way to talk to LLMs instead of English"]
225
+ - role=link[name="codespeak.dev"]
229
226
  - row:
230
227
  - cell
231
- - cell "324 points by 0bytematt 19 hours ago | hide | 22 comments":
232
- - role=link[name="0bytematt"]
233
- - role=link[name="19 hours ago"] >> nth=0
228
+ - cell "7 points by souvlakee 35 minutes ago | hide | 6 comments":
229
+ - role=link[name="souvlakee"]
230
+ - role=link[name="35 minutes ago"]
234
231
  - role=link[name="hide"] >> nth=14
235
- - role=link[name="22 comments"]
232
+ - role=link[name="6 comments"] >> nth=0
236
233
  - row
237
234
  - row:
238
235
  - cell "16."
239
236
  - cell:
240
- - link [id="up_47015342"]
241
- - cell "A Programmer's Loss of Identity (ratfactor.com)":
242
- - role=link[name="A Programmer's Loss of Identity"]
243
- - role=link[name="ratfactor.com"]
237
+ - link [id="up_47347362"]
238
+ - cell "SBCL: A Sanely-Bootstrappable Common Lisp (2008) [pdf] (gold.ac.uk)":
239
+ - role=link[name="SBCL: A Sanely-Bootstrappable Common Lisp (2008) [pdf]"]
240
+ - role=link[name="gold.ac.uk"]
244
241
  - row:
245
242
  - cell
246
- - cell "60 points by zdw 8 hours ago | hide | 21 comments":
247
- - role=link[name="zdw"]
248
- - role=link[name="8 hours ago"] >> nth=2
243
+ - cell "89 points by pabs3 8 hours ago | hide | 47 comments":
244
+ - role=link[name="pabs3"]
245
+ - role=link[name="8 hours ago"] >> nth=0
249
246
  - role=link[name="hide"] >> nth=15
250
- - role=link[name="21 comments"]
247
+ - role=link[name="47 comments"]
251
248
  - row
252
249
  - row:
253
250
  - cell "17."
254
251
  - cell:
255
- - link [id="up_47040375"]
256
- - cell "Show HN: Free alternative to Wispr Flow, Superwhisper, and Monologue (github.com/zachlatta)":
257
- - role=link[name="Show HN: Free alternative to Wispr Flow, Superwhisper, and Monologue"]
258
- - role=link[name="github.com/zachlatta"]
252
+ - link [id="up_47296645"]
253
+ - cell "Printf-Tac-Toe (github.com/carlini)":
254
+ - role=link[name="Printf-Tac-Toe"]
255
+ - role=link[name="github.com/carlini"]
259
256
  - row:
260
257
  - cell
261
- - cell "225 points by zachlatta 17 hours ago | hide | 104 comments":
262
- - role=link[name="zachlatta"]
263
- - role=link[name="17 hours ago"] >> nth=1
258
+ - cell "75 points by carlos-menezes 7 hours ago | hide | 7 comments":
259
+ - role=link[name="carlos-menezes"]
260
+ - role=link[name="7 hours ago"]
264
261
  - role=link[name="hide"] >> nth=16
265
- - role=link[name="104 comments"]
262
+ - role=link[name="7 comments"] >> nth=0
266
263
  - row
267
264
  - row:
268
265
  - cell "18."
269
266
  - cell:
270
- - link [id="up_47038318"]
271
- - cell "\"Token anxiety\", a slot machine by any other name (jkap.io)":
272
- - role=link[name="\"Token anxiety\", a slot machine by any other name"]
273
- - role=link[name="jkap.io"]
267
+ - link [id="up_47349780"]
268
+ - cell "Emacs internals: Tagged pointers vs. C++ std:variant and LLVM (Part 3) (thecloudlet.github.io)":
269
+ - role=link[name="Emacs internals: Tagged pointers vs. C++ std:variant and LLVM (Part 3)"]
270
+ - role=link[name="thecloudlet.github.io"]
274
271
  - row:
275
272
  - cell
276
- - cell "191 points by presbyterian 20 hours ago | hide | 165 comments":
277
- - role=link[name="presbyterian"]
278
- - role=link[name="20 hours ago"] >> nth=1
273
+ - cell "12 points by thecloudlet 2 hours ago | hide | 4 comments":
274
+ - role=link[name="thecloudlet"]
275
+ - role=link[name="2 hours ago"] >> nth=2
279
276
  - role=link[name="hide"] >> nth=17
280
- - role=link[name="165 comments"]
277
+ - role=link[name="4 comments"]
281
278
  - row
282
279
  - row:
283
280
  - cell "19."
284
281
  - cell:
285
- - link [id="up_47011548"]
286
- - cell "Ghidra by NSA (github.com/nationalsecurityagency)":
287
- - role=link[name="Ghidra by NSA"]
288
- - role=link[name="github.com/nationalsecurityagency"]
282
+ - link [id="up_47347064"]
283
+ - cell "Returning to Rails in 2026 (markround.com)":
284
+ - role=link[name="Returning to Rails in 2026"]
285
+ - role=link[name="markround.com"]
289
286
  - row:
290
287
  - cell
291
- - cell "400 points by handfuloflight 1 day ago | hide | 205 comments":
292
- - role=link[name="handfuloflight"]
293
- - role=link[name="1 day ago"] >> nth=1
288
+ - cell "250 points by stanislavb 8 hours ago | hide | 161 comments":
289
+ - role=link[name="stanislavb"]
290
+ - role=link[name="8 hours ago"] >> nth=1
294
291
  - role=link[name="hide"] >> nth=18
295
- - role=link[name="205 comments"]
292
+ - role=link[name="161 comments"] >> nth=1
296
293
  - row
297
294
  - row:
298
295
  - cell "20."
299
296
  - cell:
300
- - link [id="up_47012486"]
301
- - cell "DBASE on the Kaypro II (stonetools.ghost.io)":
302
- - role=link[name="DBASE on the Kaypro II"]
303
- - role=link[name="stonetools.ghost.io"]
297
+ - link [id="up_47350244"]
298
+ - cell "ArcaOS 5.1.2 (based on OS/2 Warp 4.52) now available (arcanoae.com)":
299
+ - role=link[name="ArcaOS 5.1.2 (based on OS/2 Warp 4.52) now available"]
300
+ - role=link[name="arcanoae.com"]
304
301
  - row:
305
302
  - cell
306
- - cell "68 points by TMWNN 14 hours ago | hide | 33 comments":
307
- - role=link[name="TMWNN"]
308
- - role=link[name="14 hours ago"] >> nth=0
303
+ - cell "22 points by speckx 1 hour ago | hide | 7 comments":
304
+ - role=link[name="speckx"] >> nth=0
305
+ - role=link[name="1 hour ago"] >> nth=4
309
306
  - role=link[name="hide"] >> nth=19
310
- - role=link[name="33 comments"] >> nth=0
307
+ - role=link[name="7 comments"] >> nth=1
311
308
  - row
312
309
  - row:
313
310
  - cell "21."
314
311
  - cell:
315
- - link [id="up_47041836"]
316
- - cell "Show HN: Scanned 1927-1945 Daily USFS Work Diary (forestrydiary.com)":
317
- - role=link[name="Show HN: Scanned 1927-1945 Daily USFS Work Diary"]
318
- - role=link[name="forestrydiary.com"]
312
+ - link [id="up_47308190"]
313
+ - cell "High fidelity font synthesis for CJK languages (github.com/kaonashi-tyc)":
314
+ - role=link[name="High fidelity font synthesis for CJK languages"]
315
+ - role=link[name="github.com/kaonashi-tyc"]
319
316
  - row:
320
317
  - cell
321
- - cell "103 points by dogline 15 hours ago | hide | 19 comments":
322
- - role=link[name="dogline"]
323
- - role=link[name="15 hours ago"] >> nth=0
318
+ - cell "19 points by kaonashi-tyc-01 3 hours ago | hide | 2 comments":
319
+ - role=link[name="kaonashi-tyc-01"]
320
+ - role=link[name="3 hours ago"] >> nth=1
324
321
  - role=link[name="hide"] >> nth=20
325
- - role=link[name="19 comments"]
322
+ - role=link[name="2 comments"]
326
323
  - row
327
324
  - row:
328
325
  - cell "22."
329
326
  - cell:
330
- - link [id="up_47000708"]
331
- - cell "Hear the \"Amati King Cello\", the Oldest Known Cello in Existence (openculture.com)":
332
- - role=link[name="Hear the \"Amati King Cello\", the Oldest Known Cello in Existence"]
333
- - role=link[name="openculture.com"]
327
+ - link [id="up_47339164"]
328
+ - cell "I was interviewed by an AI bot for a job (theverge.com)":
329
+ - role=link[name="I was interviewed by an AI bot for a job"]
330
+ - role=link[name="theverge.com"]
334
331
  - row:
335
332
  - cell
336
- - cell "65 points by tesserato 14 hours ago | hide | 31 comments":
337
- - role=link[name="tesserato"]
338
- - role=link[name="14 hours ago"] >> nth=1
333
+ - cell "381 points by speckx 20 hours ago | hide | 385 comments":
334
+ - role=link[name="speckx"] >> nth=1
335
+ - role=link[name="20 hours ago"]
339
336
  - role=link[name="hide"] >> nth=21
340
- - role=link[name="31 comments"]
337
+ - role=link[name="385 comments"]
341
338
  - row
342
339
  - row:
343
340
  - cell "23."
344
341
  - cell:
345
- - link [id="up_47039478"]
346
- - cell "State of Show HN: 2025 (sturdystatistics.com)":
347
- - role=link[name="State of Show HN: 2025"]
348
- - role=link[name="sturdystatistics.com"]
342
+ - link [id="up_47310617"]
343
+ - cell "Datahäxan (0dd.company)":
344
+ - role=link[name="Datahäxan"]
345
+ - role=link[name="0dd.company"]
349
346
  - row:
350
347
  - cell
351
- - cell "115 points by kianN 18 hours ago | hide | 28 comments":
352
- - role=link[name="kianN"]
353
- - role=link[name="18 hours ago"]
348
+ - cell "103 points by akkartik 9 hours ago | hide | 8 comments":
349
+ - role=link[name="akkartik"]
350
+ - role=link[name="9 hours ago"] >> nth=0
354
351
  - role=link[name="hide"] >> nth=22
355
- - role=link[name="28 comments"]
352
+ - role=link[name="8 comments"]
356
353
  - row
357
354
  - row:
358
355
  - cell "24."
359
356
  - cell:
360
- - link [id="up_47041456"]
361
- - cell "Running NanoClaw in a Docker Shell Sandbox (docker.com)":
362
- - role=link[name="Running NanoClaw in a Docker Shell Sandbox"]
363
- - role=link[name="docker.com"]
357
+ - link [id="up_47296568"]
358
+ - cell "Tested: How Many Times Can a DVD±RW Be Rewritten? Methodology and Results (goughlui.com)":
359
+ - role=link[name="Tested: How Many Times Can a DVD±RW Be Rewritten? Methodology and Results"]
360
+ - role=link[name="goughlui.com"]
364
361
  - row:
365
362
  - cell
366
- - cell "136 points by four_fifths 15 hours ago | hide | 66 comments":
367
- - role=link[name="four_fifths"]
368
- - role=link[name="15 hours ago"] >> nth=1
363
+ - cell "198 points by giuliomagnifico 14 hours ago | hide | 65 comments":
364
+ - role=link[name="giuliomagnifico"]
365
+ - role=link[name="14 hours ago"] >> nth=1
369
366
  - role=link[name="hide"] >> nth=23
370
- - role=link[name="66 comments"]
367
+ - role=link[name="65 comments"]
371
368
  - row
372
369
  - row:
373
370
  - cell "25."
374
371
  - cell:
375
- - link [id="up_47011391"]
376
- - cell "Elephant trunk whiskers exhibit material intelligence (mpg.de)":
377
- - role=link[name="Elephant trunk whiskers exhibit material intelligence"]
378
- - role=link[name="mpg.de"]
372
+ - link [id="up_47348440"]
373
+ - cell "1B identity records exposed in ID verification data leak (aol.com)":
374
+ - role=link[name="1B identity records exposed in ID verification data leak"]
375
+ - role=link[name="aol.com"]
379
376
  - row:
380
377
  - cell
381
- - cell "18 points by gmays 5 hours ago | hide | 6 comments":
382
- - role=link[name="gmays"]
383
- - role=link[name="5 hours ago"] >> nth=1
378
+ - cell "147 points by robtherobber 5 hours ago | hide | 33 comments":
379
+ - role=link[name="robtherobber"]
380
+ - role=link[name="5 hours ago"] >> nth=2
384
381
  - role=link[name="hide"] >> nth=24
385
- - role=link[name="6 comments"]
382
+ - role=link[name="33 comments"]
386
383
  - row
387
384
  - row:
388
385
  - cell "26."
389
386
  - cell:
390
- - link [id="up_47038731"]
391
- - cell "Neurons outside the brain (debugyourpain.com)":
392
- - role=link[name="Neurons outside the brain"]
393
- - role=link[name="debugyourpain.com"]
387
+ - link [id="up_47347901"]
388
+ - cell "Reliable Software in the LLM Era (quint-lang.org)":
389
+ - role=link[name="Reliable Software in the LLM Era"]
390
+ - role=link[name="quint-lang.org"]
394
391
  - row:
395
392
  - cell
396
- - cell "116 points by yichab0d 19 hours ago | hide | 52 comments":
397
- - role=link[name="yichab0d"]
398
- - role=link[name="19 hours ago"] >> nth=1
393
+ - cell "44 points by mempirate 6 hours ago | hide | 19 comments":
394
+ - role=link[name="mempirate"]
395
+ - role=link[name="6 hours ago"] >> nth=1
399
396
  - role=link[name="hide"] >> nth=25
400
- - role=link[name="52 comments"]
397
+ - role=link[name="19 comments"] >> nth=1
401
398
  - row
402
399
  - row:
403
400
  - cell "27."
404
401
  - cell:
405
- - link [id="up_47042396"]
406
- - cell "Dark web agent spotted bedroom wall clue to rescue girl from abuse (bbc.com)":
407
- - role=link[name="Dark web agent spotted bedroom wall clue to rescue girl from abuse"]
408
- - role=link[name="bbc.com"]
402
+ - link [id="up_47340079"]
403
+ - cell "Don't post generated/AI-edited comments. HN is for conversation between humans (news.ycombinator.com)":
404
+ - role=link[name="Don't post generated/AI-edited comments. HN is for conversation between humans"]
405
+ - role=link[name="news.ycombinator.com"]
409
406
  - row:
410
407
  - cell
411
- - cell "499 points by colinprince 13 hours ago | hide | 276 comments":
412
- - role=link[name="colinprince"]
413
- - role=link[name="13 hours ago"]
408
+ - cell "3884 points by usefulposter 19 hours ago | hide | 1451 comments":
409
+ - role=link[name="usefulposter"]
410
+ - role=link[name="19 hours ago"]
414
411
  - role=link[name="hide"] >> nth=26
415
- - role=link[name="276 comments"]
412
+ - role=link[name="1451 comments"]
416
413
  - row
417
414
  - row:
418
415
  - cell "28."
419
416
  - cell:
420
- - link [id="up_47031334"]
421
- - cell "Show HN: Jemini Gemini for the Epstein Files (jmail.world)":
422
- - role=link[name="Show HN: Jemini Gemini for the Epstein Files"]
423
- - role=link[name="jmail.world"]
417
+ - link [id="up_47303044"]
418
+ - cell "NASA's DART spacecraft changed an asteroid's orbit around the sun (sciencenews.org)":
419
+ - role=link[name="NASA's DART spacecraft changed an asteroid's orbit around the sun"]
420
+ - role=link[name="sciencenews.org"]
424
421
  - row:
425
422
  - cell
426
- - cell "418 points by dvrp 20 hours ago | hide | 81 comments":
427
- - role=link[name="dvrp"]
428
- - role=link[name="20 hours ago"] >> nth=2
423
+ - cell "61 points by pseudolus 9 hours ago | hide | 36 comments":
424
+ - role=link[name="pseudolus"]
425
+ - role=link[name="9 hours ago"] >> nth=1
429
426
  - role=link[name="hide"] >> nth=27
430
- - role=link[name="81 comments"]
427
+ - role=link[name="36 comments"]
431
428
  - row
432
429
  - row:
433
430
  - cell "29."
434
431
  - cell:
435
- - link [id="up_47006587"]
436
- - cell "Show HN: GitHub \"Lines Viewed\" extension to keep you sane reviewing long AI PRs (chromewebstore.google.com)":
437
- - role=link[name="Show HN: GitHub \"Lines Viewed\" extension to keep you sane reviewing long AI PRs"]
438
- - role=link[name="chromewebstore.google.com"]
432
+ - link [id="up_47348397"]
433
+ - cell "U.S. Navy Turns Down Hormuz Escort Requests Because of High Risk (maritime-executive.com)":
434
+ - role=link[name="U.S. Navy Turns Down Hormuz Escort Requests Because of High Risk"]
435
+ - role=link[name="maritime-executive.com"]
439
436
  - row:
440
437
  - cell
441
- - cell "30 points by somesortofthing 9 hours ago | hide | 33 comments":
442
- - role=link[name="somesortofthing"]
443
- - role=link[name="9 hours ago"] >> nth=1
438
+ - cell "35 points by mytailorisrich 5 hours ago | hide | 6 comments":
439
+ - role=link[name="mytailorisrich"]
440
+ - role=link[name="5 hours ago"] >> nth=3
444
441
  - role=link[name="hide"] >> nth=28
445
- - role=link[name="33 comments"] >> nth=1
442
+ - role=link[name="6 comments"] >> nth=1
446
443
  - row
447
444
  - row:
448
445
  - cell "30."
449
446
  - cell:
450
- - link [id="up_47041973"]
451
- - cell "Building for an audience of one: starting and finishing side projects with AI (codemade.net)":
452
- - role=link[name="Building for an audience of one: starting and finishing side projects with AI"]
453
- - role=link[name="codemade.net"]
447
+ - link [id="up_47308349"]
448
+ - cell "WebPKI and You (brycekerley.net)":
449
+ - role=link[name="WebPKI and You"]
450
+ - role=link[name="brycekerley.net"]
454
451
  - row:
455
452
  - cell
456
- - cell "92 points by lorisdev 14 hours ago | hide | 56 comments":
457
- - role=link[name="lorisdev"]
458
- - role=link[name="14 hours ago"] >> nth=2
453
+ - cell "76 points by aragilar 11 hours ago | hide | 9 comments":
454
+ - role=link[name="aragilar"]
455
+ - role=link[name="11 hours ago"]
459
456
  - role=link[name="hide"] >> nth=29
460
- - role=link[name="56 comments"]
457
+ - role=link[name="9 comments"]
461
458
  - row
462
459
  - row
463
460
  - row: