pi-t3-pstack 0.0.0-stage → 0.1.0

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 (598) hide show
  1. package/LICENSE +23 -0
  2. package/index.ts +87 -0
  3. package/package.json +62 -4
  4. package/pstack/.claude-plugin/icon.png +0 -0
  5. package/pstack/.claude-plugin/plugin.json +35 -0
  6. package/pstack/.codex-plugin/plugin.json +50 -0
  7. package/pstack/README.md +26 -0
  8. package/pstack/agents/comment-sicko.md +32 -0
  9. package/pstack/agents/poteto-agent.md +8 -0
  10. package/pstack/agents/thermo-nuclear-code-quality-review-subagent.md +23 -0
  11. package/pstack/agents/thermo-nuclear-review-subagent.md +28 -0
  12. package/pstack/assets/pstack-icon.png +0 -0
  13. package/pstack/assets/pstack-icon.prompt.txt +8 -0
  14. package/pstack/hooks/codex-hooks.json +16 -0
  15. package/pstack/hooks/hooks.json +15 -0
  16. package/pstack/hooks/session-start-context.md +17 -0
  17. package/pstack/hooks/session-start.ps1 +33 -0
  18. package/pstack/hooks/session-start.sh +34 -0
  19. package/pstack/models.json +261 -0
  20. package/pstack/skills/architect/SKILL.md +85 -0
  21. package/pstack/skills/architect/references/design-red-flags.md +57 -0
  22. package/pstack/skills/architect/references/rationale-template.md +35 -0
  23. package/pstack/skills/architect/references/runner-prompt.md +20 -0
  24. package/pstack/skills/arena/SKILL.md +55 -0
  25. package/pstack/skills/automate-me/SKILL.md +104 -0
  26. package/pstack/skills/benchmark-checklist/SKILL.md +39 -0
  27. package/pstack/skills/blast-radius/SKILL.md +50 -0
  28. package/pstack/skills/bro/SKILL.md +7 -0
  29. package/pstack/skills/correct/SKILL.md +32 -0
  30. package/pstack/skills/create-formal-verification-skill/SKILL.md +43 -0
  31. package/pstack/skills/create-verification-skill/SKILL.md +44 -0
  32. package/pstack/skills/create-verification-skill/references/feature-map-example/README.md +47 -0
  33. package/pstack/skills/create-verification-skill/references/feature-map-example/create-note.md +39 -0
  34. package/pstack/skills/create-verification-skill/references/feature-map-example/search.md +45 -0
  35. package/pstack/skills/deslop/SKILL.md +22 -0
  36. package/pstack/skills/figure-it-out/SKILL.md +52 -0
  37. package/pstack/skills/fix-ci/SKILL.md +29 -0
  38. package/pstack/skills/fix-merge-conflicts/SKILL.md +32 -0
  39. package/pstack/skills/get-pr-comments/SKILL.md +23 -0
  40. package/pstack/skills/how/SKILL.md +43 -0
  41. package/pstack/skills/how/references/explainer-prompt.md +55 -0
  42. package/pstack/skills/how/references/explorer-prompt.md +35 -0
  43. package/pstack/skills/in-your-own-words/SKILL.md +7 -0
  44. package/pstack/skills/interrogate/SKILL.md +37 -0
  45. package/pstack/skills/ketchup/SKILL.md +43 -0
  46. package/pstack/skills/ketchup-video/SKILL.md +29 -0
  47. package/pstack/skills/maintain-formal-verification-skill/SKILL.md +58 -0
  48. package/pstack/skills/maintain-verification-skill/SKILL.md +39 -0
  49. package/pstack/skills/make-pr-easy-to-review/SKILL.md +59 -0
  50. package/pstack/skills/no-comments/SKILL.md +24 -0
  51. package/pstack/skills/poteto-help/SKILL.md +162 -0
  52. package/pstack/skills/poteto-help/references/prompting.md +51 -0
  53. package/pstack/skills/poteto-help/references/recipes.md +51 -0
  54. package/pstack/skills/poteto-mode/SKILL.md +186 -0
  55. package/pstack/skills/poteto-mode/brief.md +70 -0
  56. package/pstack/skills/poteto-mode/playbooks/authoring-a-skill.md +12 -0
  57. package/pstack/skills/poteto-mode/playbooks/autonomous-run.md +13 -0
  58. package/pstack/skills/poteto-mode/playbooks/autopilot-full.md +25 -0
  59. package/pstack/skills/poteto-mode/playbooks/autopilot-stack.md +8 -0
  60. package/pstack/skills/poteto-mode/playbooks/babysit.md +23 -0
  61. package/pstack/skills/poteto-mode/playbooks/bug-fix.md +15 -0
  62. package/pstack/skills/poteto-mode/playbooks/eval.md +25 -0
  63. package/pstack/skills/poteto-mode/playbooks/feature.md +21 -0
  64. package/pstack/skills/poteto-mode/playbooks/hillclimb.md +21 -0
  65. package/pstack/skills/poteto-mode/playbooks/investigation.md +14 -0
  66. package/pstack/skills/poteto-mode/playbooks/multi-phase-plan.md +155 -0
  67. package/pstack/skills/poteto-mode/playbooks/opening-a-pr.md +34 -0
  68. package/pstack/skills/poteto-mode/playbooks/orchestrate.md +25 -0
  69. package/pstack/skills/poteto-mode/playbooks/pause-safely.md +10 -0
  70. package/pstack/skills/poteto-mode/playbooks/perf-issue.md +25 -0
  71. package/pstack/skills/poteto-mode/playbooks/prototype.md +14 -0
  72. package/pstack/skills/poteto-mode/playbooks/refactoring.md +16 -0
  73. package/pstack/skills/poteto-mode/playbooks/runtime-forensics.md +11 -0
  74. package/pstack/skills/poteto-mode/playbooks/session-pickup.md +11 -0
  75. package/pstack/skills/poteto-mode/playbooks/shipping.md +12 -0
  76. package/pstack/skills/poteto-mode/playbooks/trace-forensics.md +14 -0
  77. package/pstack/skills/poteto-mode/playbooks/visual-parity.md +11 -0
  78. package/pstack/skills/poteto-mode/playbooks/worktree-cleanup.md +12 -0
  79. package/pstack/skills/poteto-mode/references/bugbot-triage.md +142 -0
  80. package/pstack/skills/poteto-mode/references/licenses/LICENSE +23 -0
  81. package/pstack/skills/poteto-mode/references/licenses/LICENSE-cursor-team-kit +21 -0
  82. package/pstack/skills/poteto-mode/references/licenses/LICENSE-thermos +21 -0
  83. package/pstack/skills/poteto-mode/references/licenses/NOTICE.md +14 -0
  84. package/pstack/skills/poteto-mode/scripts/.prettierrc.json +3 -0
  85. package/pstack/skills/poteto-mode/scripts/bootstrap.ts +62 -0
  86. package/pstack/skills/poteto-mode/scripts/bun.lock +67 -0
  87. package/pstack/skills/poteto-mode/scripts/check-plan.mjs +205 -0
  88. package/pstack/skills/poteto-mode/scripts/check-plan.test.ts +110 -0
  89. package/pstack/skills/poteto-mode/scripts/package.json +12 -0
  90. package/pstack/skills/poteto-mode/scripts/resolve-codex-transcript +4 -0
  91. package/pstack/skills/poteto-mode/scripts/resolve-codex-transcript.ts +314 -0
  92. package/pstack/skills/poteto-mode/scripts/test-utils/node-test.ts +204 -0
  93. package/pstack/skills/poteto-mode/scripts/watch-pr/cli.test.ts +225 -0
  94. package/pstack/skills/poteto-mode/scripts/watch-pr/cli.ts +231 -0
  95. package/pstack/skills/poteto-mode/scripts/watch-pr/fakes.test-helper.ts +142 -0
  96. package/pstack/skills/poteto-mode/scripts/watch-pr/github.test.ts +498 -0
  97. package/pstack/skills/poteto-mode/scripts/watch-pr/github.ts +760 -0
  98. package/pstack/skills/poteto-mode/scripts/watch-pr/policy.test.ts +483 -0
  99. package/pstack/skills/poteto-mode/scripts/watch-pr/policy.ts +1023 -0
  100. package/pstack/skills/poteto-mode/scripts/watch-pr/render.ts +188 -0
  101. package/pstack/skills/poteto-mode/scripts/watch-pr/settle.test.ts +552 -0
  102. package/pstack/skills/poteto-mode/scripts/watch-pr/settle.ts +406 -0
  103. package/pstack/skills/poteto-mode/scripts/watch-pr/tsconfig.json +18 -0
  104. package/pstack/skills/poteto-mode/scripts/watch-pr/types.compile.ts +93 -0
  105. package/pstack/skills/poteto-mode/scripts/watch-pr/types.ts +444 -0
  106. package/pstack/skills/poteto-mode/scripts/watch-pr/verdicts.test.ts +796 -0
  107. package/pstack/skills/poteto-mode/scripts/watch-pr/watch-pr +3 -0
  108. package/pstack/skills/poteto-mode/scripts/worktree-audit.sh +170 -0
  109. package/pstack/skills/principle-attack-the-premise/SKILL.md +21 -0
  110. package/pstack/skills/principle-boundary-discipline/SKILL.md +34 -0
  111. package/pstack/skills/principle-build-the-lever/SKILL.md +23 -0
  112. package/pstack/skills/principle-encode-lessons-in-structure/SKILL.md +11 -0
  113. package/pstack/skills/principle-exhaust-the-design-space/SKILL.md +9 -0
  114. package/pstack/skills/principle-experience-first/SKILL.md +19 -0
  115. package/pstack/skills/principle-explain-the-number/SKILL.md +18 -0
  116. package/pstack/skills/principle-fix-root-causes/SKILL.md +21 -0
  117. package/pstack/skills/principle-foundational-thinking/SKILL.md +21 -0
  118. package/pstack/skills/principle-guard-the-context-window/SKILL.md +12 -0
  119. package/pstack/skills/principle-laziness-protocol/SKILL.md +10 -0
  120. package/pstack/skills/principle-make-operations-idempotent/SKILL.md +22 -0
  121. package/pstack/skills/principle-migrate-callers-then-delete-legacy-apis/SKILL.md +14 -0
  122. package/pstack/skills/principle-minimize-reader-load/SKILL.md +18 -0
  123. package/pstack/skills/principle-model-the-domain/SKILL.md +24 -0
  124. package/pstack/skills/principle-never-block-on-the-human/SKILL.md +15 -0
  125. package/pstack/skills/principle-outcome-oriented-execution/SKILL.md +21 -0
  126. package/pstack/skills/principle-prove-it-works/SKILL.md +22 -0
  127. package/pstack/skills/principle-redesign-from-first-principles/SKILL.md +16 -0
  128. package/pstack/skills/principle-separate-before-serializing-shared-state/SKILL.md +16 -0
  129. package/pstack/skills/principle-sequence-verifiable-units/SKILL.md +17 -0
  130. package/pstack/skills/principle-subtract-before-you-add/SKILL.md +18 -0
  131. package/pstack/skills/principle-test-behavior-not-implementation/SKILL.md +20 -0
  132. package/pstack/skills/principle-type-system-discipline/SKILL.md +13 -0
  133. package/pstack/skills/recall/SKILL.md +35 -0
  134. package/pstack/skills/reflect/SKILL.md +86 -0
  135. package/pstack/skills/reflect/references/divergent-reviewer.md +38 -0
  136. package/pstack/skills/reflect/references/judgment-reviewer.md +37 -0
  137. package/pstack/skills/reflect/references/synthesizer.md +56 -0
  138. package/pstack/skills/reflect/references/tooling-reviewer.md +48 -0
  139. package/pstack/skills/reflect/scripts/find-transcript.mjs +245 -0
  140. package/pstack/skills/setup-pstack/SKILL.md +77 -0
  141. package/pstack/skills/setup-pstack/scripts/read-sheet.sh +14 -0
  142. package/pstack/skills/setup-pstack/scripts/t3-sheet.mjs +169 -0
  143. package/pstack/skills/sharpen/SKILL.md +16 -0
  144. package/pstack/skills/show-me-your-work/SKILL.md +82 -0
  145. package/pstack/skills/show-me-your-work/references/decision-log-template.tsv +1 -0
  146. package/pstack/skills/show-me-your-work/scripts/log.sh +42 -0
  147. package/pstack/skills/statechart/SKILL.md +82 -0
  148. package/pstack/skills/statechart/references/render.md +93 -0
  149. package/pstack/skills/statechart/scripts/backends/cfg.ts +33 -0
  150. package/pstack/skills/statechart/scripts/backends/mermaid.ts +201 -0
  151. package/pstack/skills/statechart/scripts/backends/plain-text.ts +72 -0
  152. package/pstack/skills/statechart/scripts/backends/report.ts +177 -0
  153. package/pstack/skills/statechart/scripts/frontends/config.ts +276 -0
  154. package/pstack/skills/statechart/scripts/frontends/dot.ts +74 -0
  155. package/pstack/skills/statechart/scripts/frontends/marks.ts +93 -0
  156. package/pstack/skills/statechart/scripts/frontends/messages.ts +52 -0
  157. package/pstack/skills/statechart/scripts/frontends/spec.ts +114 -0
  158. package/pstack/skills/statechart/scripts/frontends/trace.ts +24 -0
  159. package/pstack/skills/statechart/scripts/frontends/value.ts +166 -0
  160. package/pstack/skills/statechart/scripts/frontends/verdict.ts +40 -0
  161. package/pstack/skills/statechart/scripts/frontends/view.ts +119 -0
  162. package/pstack/skills/statechart/scripts/ir.ts +547 -0
  163. package/pstack/skills/statechart/scripts/package.json +11 -0
  164. package/pstack/skills/statechart/scripts/passes/annotate.ts +128 -0
  165. package/pstack/skills/statechart/scripts/passes/label.ts +269 -0
  166. package/pstack/skills/statechart/scripts/passes/lift.ts +85 -0
  167. package/pstack/skills/statechart/scripts/passes/loop-check.ts +68 -0
  168. package/pstack/skills/statechart/scripts/passes/paths.ts +60 -0
  169. package/pstack/skills/statechart/scripts/passes/reach.ts +135 -0
  170. package/pstack/skills/statechart/scripts/passes/region-check.ts +97 -0
  171. package/pstack/skills/statechart/scripts/passes/regions.ts +295 -0
  172. package/pstack/skills/statechart/scripts/pipeline.ts +76 -0
  173. package/pstack/skills/statechart/scripts/run.ts +481 -0
  174. package/pstack/skills/statechart/scripts/statechart +29 -0
  175. package/pstack/skills/statechart/scripts/statechart.ts +164 -0
  176. package/pstack/skills/statechart/scripts/test/ConfigOracle.java +63 -0
  177. package/pstack/skills/statechart/scripts/test/chart.test.ts +1210 -0
  178. package/pstack/skills/statechart/scripts/test/charts/Braces.mmd +7 -0
  179. package/pstack/skills/statechart/scripts/test/charts/Escapes.mmd +11 -0
  180. package/pstack/skills/statechart/scripts/test/charts/Phases.mmd +29 -0
  181. package/pstack/skills/statechart/scripts/test/cli.test.ts +1314 -0
  182. package/pstack/skills/statechart/scripts/test/config-fuzz.test.ts +263 -0
  183. package/pstack/skills/statechart/scripts/test/corpus/Counter/ChartRun.out +57 -0
  184. package/pstack/skills/statechart/scripts/test/corpus/Counter/Counter.cfg +3 -0
  185. package/pstack/skills/statechart/scripts/test/corpus/Counter/Counter.tla +10 -0
  186. package/pstack/skills/statechart/scripts/test/corpus/Counter/chart.mmd +9 -0
  187. package/pstack/skills/statechart/scripts/test/corpus/Counter/graph.dot +16 -0
  188. package/pstack/skills/statechart/scripts/test/corpus/Counter/report.md +7 -0
  189. package/pstack/skills/statechart/scripts/test/corpus/Counter/sany.out +2 -0
  190. package/pstack/skills/statechart/scripts/test/corpus/Counter/verdict-1.out +49 -0
  191. package/pstack/skills/statechart/scripts/test/corpus/CounterAction/ChartRun.out +60 -0
  192. package/pstack/skills/statechart/scripts/test/corpus/CounterAction/CounterAction.cfg +4 -0
  193. package/pstack/skills/statechart/scripts/test/corpus/CounterAction/CounterAction.tla +22 -0
  194. package/pstack/skills/statechart/scripts/test/corpus/CounterAction/chart.mmd +26 -0
  195. package/pstack/skills/statechart/scripts/test/corpus/CounterAction/graph.dot +19 -0
  196. package/pstack/skills/statechart/scripts/test/corpus/CounterAction/report.md +20 -0
  197. package/pstack/skills/statechart/scripts/test/corpus/CounterAction/sany.out +2 -0
  198. package/pstack/skills/statechart/scripts/test/corpus/CounterAction/verdict-1.exit +1 -0
  199. package/pstack/skills/statechart/scripts/test/corpus/CounterAction/verdict-1.out +56 -0
  200. package/pstack/skills/statechart/scripts/test/corpus/CounterAction/verdict-2.exit +1 -0
  201. package/pstack/skills/statechart/scripts/test/corpus/CounterAction/verdict-2.out +82 -0
  202. package/pstack/skills/statechart/scripts/test/corpus/CounterAction/verdict-3.out +57 -0
  203. package/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/ChartRun.out +59 -0
  204. package/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/CounterDeadlock.cfg +3 -0
  205. package/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/CounterDeadlock.tla +11 -0
  206. package/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/chart.mmd +22 -0
  207. package/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/graph.dot +16 -0
  208. package/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/report.md +17 -0
  209. package/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/sany.out +2 -0
  210. package/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/verdict-1.exit +1 -0
  211. package/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/verdict-1.out +56 -0
  212. package/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/verdict-2.exit +1 -0
  213. package/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/verdict-2.out +77 -0
  214. package/pstack/skills/statechart/scripts/test/corpus/CounterFan/ChartRun.out +69 -0
  215. package/pstack/skills/statechart/scripts/test/corpus/CounterFan/CounterFan.cfg +2 -0
  216. package/pstack/skills/statechart/scripts/test/corpus/CounterFan/CounterFan.tla +11 -0
  217. package/pstack/skills/statechart/scripts/test/corpus/CounterFan/chart.mmd +85 -0
  218. package/pstack/skills/statechart/scripts/test/corpus/CounterFan/graph.dot +70 -0
  219. package/pstack/skills/statechart/scripts/test/corpus/CounterFan/report.md +12 -0
  220. package/pstack/skills/statechart/scripts/test/corpus/CounterFan/sany.out +2 -0
  221. package/pstack/skills/statechart/scripts/test/corpus/CounterFan/verdict-1.exit +1 -0
  222. package/pstack/skills/statechart/scripts/test/corpus/CounterFan/verdict-1.out +67 -0
  223. package/pstack/skills/statechart/scripts/test/corpus/CounterFan/verdict-2.out +57 -0
  224. package/pstack/skills/statechart/scripts/test/corpus/CounterGuard/ChartRun.exit +1 -0
  225. package/pstack/skills/statechart/scripts/test/corpus/CounterGuard/ChartRun.out +85 -0
  226. package/pstack/skills/statechart/scripts/test/corpus/CounterGuard/CounterGuard.cfg +6 -0
  227. package/pstack/skills/statechart/scripts/test/corpus/CounterGuard/CounterGuard.tla +13 -0
  228. package/pstack/skills/statechart/scripts/test/corpus/CounterGuard/chart.mmd +5 -0
  229. package/pstack/skills/statechart/scripts/test/corpus/CounterGuard/graph.dot +10 -0
  230. package/pstack/skills/statechart/scripts/test/corpus/CounterGuard/report.md +31 -0
  231. package/pstack/skills/statechart/scripts/test/corpus/CounterGuard/sany.out +2 -0
  232. package/pstack/skills/statechart/scripts/test/corpus/CounterGuard/verdict-1.exit +1 -0
  233. package/pstack/skills/statechart/scripts/test/corpus/CounterGuard/verdict-1.out +64 -0
  234. package/pstack/skills/statechart/scripts/test/corpus/CounterGuard/verdict-2.exit +1 -0
  235. package/pstack/skills/statechart/scripts/test/corpus/CounterGuard/verdict-2.out +77 -0
  236. package/pstack/skills/statechart/scripts/test/corpus/CounterInitPast/ChartRun.out +55 -0
  237. package/pstack/skills/statechart/scripts/test/corpus/CounterInitPast/CounterInitPast.cfg +3 -0
  238. package/pstack/skills/statechart/scripts/test/corpus/CounterInitPast/CounterInitPast.tla +10 -0
  239. package/pstack/skills/statechart/scripts/test/corpus/CounterInitPast/chart.mmd +12 -0
  240. package/pstack/skills/statechart/scripts/test/corpus/CounterInitPast/graph.dot +6 -0
  241. package/pstack/skills/statechart/scripts/test/corpus/CounterInitPast/report.md +12 -0
  242. package/pstack/skills/statechart/scripts/test/corpus/CounterInitPast/sany.out +2 -0
  243. package/pstack/skills/statechart/scripts/test/corpus/CounterInitPast/verdict-1.exit +1 -0
  244. package/pstack/skills/statechart/scripts/test/corpus/CounterInitPast/verdict-1.out +33 -0
  245. package/pstack/skills/statechart/scripts/test/corpus/CounterInitPast/verdict-2.out +54 -0
  246. package/pstack/skills/statechart/scripts/test/corpus/CounterInitPastHolds/ChartRun.out +54 -0
  247. package/pstack/skills/statechart/scripts/test/corpus/CounterInitPastHolds/CounterInitPastHolds.cfg +3 -0
  248. package/pstack/skills/statechart/scripts/test/corpus/CounterInitPastHolds/CounterInitPastHolds.tla +10 -0
  249. package/pstack/skills/statechart/scripts/test/corpus/CounterInitPastHolds/chart.mmd +1 -0
  250. package/pstack/skills/statechart/scripts/test/corpus/CounterInitPastHolds/graph.dot +6 -0
  251. package/pstack/skills/statechart/scripts/test/corpus/CounterInitPastHolds/report.md +7 -0
  252. package/pstack/skills/statechart/scripts/test/corpus/CounterInitPastHolds/sany.out +2 -0
  253. package/pstack/skills/statechart/scripts/test/corpus/CounterInitPastHolds/verdict-1.out +46 -0
  254. package/pstack/skills/statechart/scripts/test/corpus/CounterInstance/ChartRun.out +59 -0
  255. package/pstack/skills/statechart/scripts/test/corpus/CounterInstance/CounterInstance.cfg +2 -0
  256. package/pstack/skills/statechart/scripts/test/corpus/CounterInstance/CounterInstance.tla +10 -0
  257. package/pstack/skills/statechart/scripts/test/corpus/CounterInstance/CounterSteps.tla +6 -0
  258. package/pstack/skills/statechart/scripts/test/corpus/CounterInstance/chart.mmd +17 -0
  259. package/pstack/skills/statechart/scripts/test/corpus/CounterInstance/graph.dot +15 -0
  260. package/pstack/skills/statechart/scripts/test/corpus/CounterInstance/report.md +14 -0
  261. package/pstack/skills/statechart/scripts/test/corpus/CounterInstance/sany.out +3 -0
  262. package/pstack/skills/statechart/scripts/test/corpus/CounterInstance/verdict-1.exit +1 -0
  263. package/pstack/skills/statechart/scripts/test/corpus/CounterInstance/verdict-1.out +78 -0
  264. package/pstack/skills/statechart/scripts/test/corpus/CounterJump/ChartRun.out +59 -0
  265. package/pstack/skills/statechart/scripts/test/corpus/CounterJump/CounterJump.cfg +3 -0
  266. package/pstack/skills/statechart/scripts/test/corpus/CounterJump/CounterJump.tla +19 -0
  267. package/pstack/skills/statechart/scripts/test/corpus/CounterJump/chart.mmd +26 -0
  268. package/pstack/skills/statechart/scripts/test/corpus/CounterJump/graph.dot +22 -0
  269. package/pstack/skills/statechart/scripts/test/corpus/CounterJump/report.md +12 -0
  270. package/pstack/skills/statechart/scripts/test/corpus/CounterJump/sany.out +2 -0
  271. package/pstack/skills/statechart/scripts/test/corpus/CounterJump/verdict-1.exit +1 -0
  272. package/pstack/skills/statechart/scripts/test/corpus/CounterJump/verdict-1.out +58 -0
  273. package/pstack/skills/statechart/scripts/test/corpus/CounterJump/verdict-2.out +57 -0
  274. package/pstack/skills/statechart/scripts/test/corpus/CounterLoop/ChartRun.out +57 -0
  275. package/pstack/skills/statechart/scripts/test/corpus/CounterLoop/CounterLoop.cfg +2 -0
  276. package/pstack/skills/statechart/scripts/test/corpus/CounterLoop/CounterLoop.tla +11 -0
  277. package/pstack/skills/statechart/scripts/test/corpus/CounterLoop/chart.mmd +17 -0
  278. package/pstack/skills/statechart/scripts/test/corpus/CounterLoop/graph.dot +15 -0
  279. package/pstack/skills/statechart/scripts/test/corpus/CounterLoop/report.md +14 -0
  280. package/pstack/skills/statechart/scripts/test/corpus/CounterLoop/sany.out +2 -0
  281. package/pstack/skills/statechart/scripts/test/corpus/CounterLoop/verdict-1.exit +1 -0
  282. package/pstack/skills/statechart/scripts/test/corpus/CounterLoop/verdict-1.out +76 -0
  283. package/pstack/skills/statechart/scripts/test/corpus/CounterOrder/ChartRun.out +59 -0
  284. package/pstack/skills/statechart/scripts/test/corpus/CounterOrder/CounterOrder.cfg +3 -0
  285. package/pstack/skills/statechart/scripts/test/corpus/CounterOrder/CounterOrder.tla +11 -0
  286. package/pstack/skills/statechart/scripts/test/corpus/CounterOrder/chart.mmd +19 -0
  287. package/pstack/skills/statechart/scripts/test/corpus/CounterOrder/graph.dot +10 -0
  288. package/pstack/skills/statechart/scripts/test/corpus/CounterOrder/report.md +15 -0
  289. package/pstack/skills/statechart/scripts/test/corpus/CounterOrder/sany.out +2 -0
  290. package/pstack/skills/statechart/scripts/test/corpus/CounterOrder/verdict-1.exit +1 -0
  291. package/pstack/skills/statechart/scripts/test/corpus/CounterOrder/verdict-1.out +56 -0
  292. package/pstack/skills/statechart/scripts/test/corpus/CounterOrder/verdict-2.exit +1 -0
  293. package/pstack/skills/statechart/scripts/test/corpus/CounterOrder/verdict-2.out +67 -0
  294. package/pstack/skills/statechart/scripts/test/corpus/CounterRules/ChartRun.out +62 -0
  295. package/pstack/skills/statechart/scripts/test/corpus/CounterRules/CounterRules.cfg +6 -0
  296. package/pstack/skills/statechart/scripts/test/corpus/CounterRules/CounterRules.tla +24 -0
  297. package/pstack/skills/statechart/scripts/test/corpus/CounterRules/Moves.tla +5 -0
  298. package/pstack/skills/statechart/scripts/test/corpus/CounterRules/chart.mmd +22 -0
  299. package/pstack/skills/statechart/scripts/test/corpus/CounterRules/graph.dot +10 -0
  300. package/pstack/skills/statechart/scripts/test/corpus/CounterRules/report.md +23 -0
  301. package/pstack/skills/statechart/scripts/test/corpus/CounterRules/sany.out +3 -0
  302. package/pstack/skills/statechart/scripts/test/corpus/CounterRules/verdict-1.exit +1 -0
  303. package/pstack/skills/statechart/scripts/test/corpus/CounterRules/verdict-1.out +58 -0
  304. package/pstack/skills/statechart/scripts/test/corpus/CounterRules/verdict-2.exit +1 -0
  305. package/pstack/skills/statechart/scripts/test/corpus/CounterRules/verdict-2.out +66 -0
  306. package/pstack/skills/statechart/scripts/test/corpus/CounterRules/verdict-3.exit +1 -0
  307. package/pstack/skills/statechart/scripts/test/corpus/CounterRules/verdict-3.out +74 -0
  308. package/pstack/skills/statechart/scripts/test/corpus/CounterRules/verdict-4.out +59 -0
  309. package/pstack/skills/statechart/scripts/test/corpus/CounterStart/ChartRun.out +58 -0
  310. package/pstack/skills/statechart/scripts/test/corpus/CounterStart/CounterStart.cfg +3 -0
  311. package/pstack/skills/statechart/scripts/test/corpus/CounterStart/CounterStart.tla +15 -0
  312. package/pstack/skills/statechart/scripts/test/corpus/CounterStart/chart.mmd +18 -0
  313. package/pstack/skills/statechart/scripts/test/corpus/CounterStart/graph.dot +13 -0
  314. package/pstack/skills/statechart/scripts/test/corpus/CounterStart/report.md +11 -0
  315. package/pstack/skills/statechart/scripts/test/corpus/CounterStart/sany.out +2 -0
  316. package/pstack/skills/statechart/scripts/test/corpus/CounterStart/verdict-1.exit +1 -0
  317. package/pstack/skills/statechart/scripts/test/corpus/CounterStart/verdict-1.out +33 -0
  318. package/pstack/skills/statechart/scripts/test/corpus/CounterStart/verdict-2.out +57 -0
  319. package/pstack/skills/statechart/scripts/test/corpus/CounterStop/ChartRun.out +57 -0
  320. package/pstack/skills/statechart/scripts/test/corpus/CounterStop/CounterStop.cfg +3 -0
  321. package/pstack/skills/statechart/scripts/test/corpus/CounterStop/CounterStop.tla +15 -0
  322. package/pstack/skills/statechart/scripts/test/corpus/CounterStop/chart.mmd +7 -0
  323. package/pstack/skills/statechart/scripts/test/corpus/CounterStop/graph.dot +13 -0
  324. package/pstack/skills/statechart/scripts/test/corpus/CounterStop/report.md +6 -0
  325. package/pstack/skills/statechart/scripts/test/corpus/CounterStop/sany.out +2 -0
  326. package/pstack/skills/statechart/scripts/test/corpus/CounterStop/verdict-1.out +49 -0
  327. package/pstack/skills/statechart/scripts/test/corpus/CounterTie/ChartRun.out +61 -0
  328. package/pstack/skills/statechart/scripts/test/corpus/CounterTie/CounterTie.cfg +4 -0
  329. package/pstack/skills/statechart/scripts/test/corpus/CounterTie/CounterTie.tla +14 -0
  330. package/pstack/skills/statechart/scripts/test/corpus/CounterTie/chart.mmd +30 -0
  331. package/pstack/skills/statechart/scripts/test/corpus/CounterTie/graph.dot +19 -0
  332. package/pstack/skills/statechart/scripts/test/corpus/CounterTie/report.md +27 -0
  333. package/pstack/skills/statechart/scripts/test/corpus/CounterTie/sany.out +2 -0
  334. package/pstack/skills/statechart/scripts/test/corpus/CounterTie/verdict-1.exit +1 -0
  335. package/pstack/skills/statechart/scripts/test/corpus/CounterTie/verdict-1.out +56 -0
  336. package/pstack/skills/statechart/scripts/test/corpus/CounterTie/verdict-2.exit +1 -0
  337. package/pstack/skills/statechart/scripts/test/corpus/CounterTie/verdict-2.out +64 -0
  338. package/pstack/skills/statechart/scripts/test/corpus/CounterTie/verdict-3.exit +1 -0
  339. package/pstack/skills/statechart/scripts/test/corpus/CounterTie/verdict-3.out +87 -0
  340. package/pstack/skills/statechart/scripts/test/corpus/CounterTie/verdict-4.out +57 -0
  341. package/pstack/skills/statechart/scripts/test/corpus/CounterTieInGraph/ChartRun.out +60 -0
  342. package/pstack/skills/statechart/scripts/test/corpus/CounterTieInGraph/CounterTieInGraph.cfg +3 -0
  343. package/pstack/skills/statechart/scripts/test/corpus/CounterTieInGraph/CounterTieInGraph.tla +12 -0
  344. package/pstack/skills/statechart/scripts/test/corpus/CounterTieInGraph/chart.mmd +23 -0
  345. package/pstack/skills/statechart/scripts/test/corpus/CounterTieInGraph/graph.dot +19 -0
  346. package/pstack/skills/statechart/scripts/test/corpus/CounterTieInGraph/report.md +11 -0
  347. package/pstack/skills/statechart/scripts/test/corpus/CounterTieInGraph/sany.out +2 -0
  348. package/pstack/skills/statechart/scripts/test/corpus/CounterTieInGraph/verdict-1.exit +1 -0
  349. package/pstack/skills/statechart/scripts/test/corpus/CounterTieInGraph/verdict-1.out +56 -0
  350. package/pstack/skills/statechart/scripts/test/corpus/CounterTieInGraph/verdict-2.out +57 -0
  351. package/pstack/skills/statechart/scripts/test/corpus/CounterView/ChartRun.out +61 -0
  352. package/pstack/skills/statechart/scripts/test/corpus/CounterView/CounterView.cfg +4 -0
  353. package/pstack/skills/statechart/scripts/test/corpus/CounterView/CounterView.tla +14 -0
  354. package/pstack/skills/statechart/scripts/test/corpus/CounterView/chart.mmd +23 -0
  355. package/pstack/skills/statechart/scripts/test/corpus/CounterView/graph.dot +19 -0
  356. package/pstack/skills/statechart/scripts/test/corpus/CounterView/report.md +27 -0
  357. package/pstack/skills/statechart/scripts/test/corpus/CounterView/sany.out +2 -0
  358. package/pstack/skills/statechart/scripts/test/corpus/CounterView/verdict-1.exit +1 -0
  359. package/pstack/skills/statechart/scripts/test/corpus/CounterView/verdict-1.out +56 -0
  360. package/pstack/skills/statechart/scripts/test/corpus/CounterView/verdict-2.exit +1 -0
  361. package/pstack/skills/statechart/scripts/test/corpus/CounterView/verdict-2.out +64 -0
  362. package/pstack/skills/statechart/scripts/test/corpus/CounterView/verdict-3.exit +1 -0
  363. package/pstack/skills/statechart/scripts/test/corpus/CounterView/verdict-3.out +87 -0
  364. package/pstack/skills/statechart/scripts/test/corpus/CounterView/verdict-4.out +57 -0
  365. package/pstack/skills/statechart/scripts/test/corpus/CounterView/view.mjs +1 -0
  366. package/pstack/skills/statechart/scripts/test/corpus/DieHard/ChartRun.out +59 -0
  367. package/pstack/skills/statechart/scripts/test/corpus/DieHard/DieHard.cfg +4 -0
  368. package/pstack/skills/statechart/scripts/test/corpus/DieHard/DieHard.tla +38 -0
  369. package/pstack/skills/statechart/scripts/test/corpus/DieHard/chart.mmd +92 -0
  370. package/pstack/skills/statechart/scripts/test/corpus/DieHard/graph.dot +126 -0
  371. package/pstack/skills/statechart/scripts/test/corpus/DieHard/report.md +17 -0
  372. package/pstack/skills/statechart/scripts/test/corpus/DieHard/sany.out +2 -0
  373. package/pstack/skills/statechart/scripts/test/corpus/DieHard/verdict-1.exit +1 -0
  374. package/pstack/skills/statechart/scripts/test/corpus/DieHard/verdict-1.out +91 -0
  375. package/pstack/skills/statechart/scripts/test/corpus/DieHard/verdict-2.out +57 -0
  376. package/pstack/skills/statechart/scripts/test/corpus/FirstRule/ChartRun.out +61 -0
  377. package/pstack/skills/statechart/scripts/test/corpus/FirstRule/FirstRule.cfg +6 -0
  378. package/pstack/skills/statechart/scripts/test/corpus/FirstRule/FirstRule.tla +11 -0
  379. package/pstack/skills/statechart/scripts/test/corpus/FirstRule/chart.mmd +22 -0
  380. package/pstack/skills/statechart/scripts/test/corpus/FirstRule/graph.dot +16 -0
  381. package/pstack/skills/statechart/scripts/test/corpus/FirstRule/report.md +25 -0
  382. package/pstack/skills/statechart/scripts/test/corpus/FirstRule/sany.out +2 -0
  383. package/pstack/skills/statechart/scripts/test/corpus/FirstRule/verdict-1.exit +1 -0
  384. package/pstack/skills/statechart/scripts/test/corpus/FirstRule/verdict-1.out +56 -0
  385. package/pstack/skills/statechart/scripts/test/corpus/FirstRule/verdict-2.exit +1 -0
  386. package/pstack/skills/statechart/scripts/test/corpus/FirstRule/verdict-2.out +64 -0
  387. package/pstack/skills/statechart/scripts/test/corpus/FirstRule/verdict-3.exit +1 -0
  388. package/pstack/skills/statechart/scripts/test/corpus/FirstRule/verdict-3.out +64 -0
  389. package/pstack/skills/statechart/scripts/test/corpus/FirstRule/verdict-4.exit +1 -0
  390. package/pstack/skills/statechart/scripts/test/corpus/FirstRule/verdict-4.out +77 -0
  391. package/pstack/skills/statechart/scripts/test/corpus/HiddenClock/ChartRun.out +57 -0
  392. package/pstack/skills/statechart/scripts/test/corpus/HiddenClock/HiddenClock.cfg +4 -0
  393. package/pstack/skills/statechart/scripts/test/corpus/HiddenClock/HiddenClock.tla +11 -0
  394. package/pstack/skills/statechart/scripts/test/corpus/HiddenClock/chart.mmd +13 -0
  395. package/pstack/skills/statechart/scripts/test/corpus/HiddenClock/graph.dot +12 -0
  396. package/pstack/skills/statechart/scripts/test/corpus/HiddenClock/report.md +11 -0
  397. package/pstack/skills/statechart/scripts/test/corpus/HiddenClock/sany.out +2 -0
  398. package/pstack/skills/statechart/scripts/test/corpus/HiddenClock/verdict-1.exit +1 -0
  399. package/pstack/skills/statechart/scripts/test/corpus/HiddenClock/verdict-1.out +72 -0
  400. package/pstack/skills/statechart/scripts/test/corpus/Login/ChartRun.out +57 -0
  401. package/pstack/skills/statechart/scripts/test/corpus/Login/Login.cfg +3 -0
  402. package/pstack/skills/statechart/scripts/test/corpus/Login/Login.tla +62 -0
  403. package/pstack/skills/statechart/scripts/test/corpus/Login/chart.mmd +27 -0
  404. package/pstack/skills/statechart/scripts/test/corpus/Login/graph.dot +40 -0
  405. package/pstack/skills/statechart/scripts/test/corpus/Login/report.md +7 -0
  406. package/pstack/skills/statechart/scripts/test/corpus/Login/sany.out +1 -0
  407. package/pstack/skills/statechart/scripts/test/corpus/Login/verdict-1.out +47 -0
  408. package/pstack/skills/statechart/scripts/test/corpus/Login/view.mjs +1 -0
  409. package/pstack/skills/statechart/scripts/test/corpus/LoginGuarded/ChartRun.out +57 -0
  410. package/pstack/skills/statechart/scripts/test/corpus/LoginGuarded/LoginGuarded.cfg +2 -0
  411. package/pstack/skills/statechart/scripts/test/corpus/LoginGuarded/LoginGuarded.tla +64 -0
  412. package/pstack/skills/statechart/scripts/test/corpus/LoginGuarded/chart.mmd +28 -0
  413. package/pstack/skills/statechart/scripts/test/corpus/LoginGuarded/graph.dot +37 -0
  414. package/pstack/skills/statechart/scripts/test/corpus/LoginGuarded/report.md +8 -0
  415. package/pstack/skills/statechart/scripts/test/corpus/LoginGuarded/sany.out +1 -0
  416. package/pstack/skills/statechart/scripts/test/corpus/LoginGuarded/verdict-1.out +47 -0
  417. package/pstack/skills/statechart/scripts/test/corpus/LoginGuarded/view.mjs +1 -0
  418. package/pstack/skills/statechart/scripts/test/corpus/LoginParallel/ChartRun.out +60 -0
  419. package/pstack/skills/statechart/scripts/test/corpus/LoginParallel/LoginParallel.cfg +3 -0
  420. package/pstack/skills/statechart/scripts/test/corpus/LoginParallel/LoginParallel.tla +64 -0
  421. package/pstack/skills/statechart/scripts/test/corpus/LoginParallel/chart.mmd +44 -0
  422. package/pstack/skills/statechart/scripts/test/corpus/LoginParallel/graph.dot +58 -0
  423. package/pstack/skills/statechart/scripts/test/corpus/LoginParallel/report.md +17 -0
  424. package/pstack/skills/statechart/scripts/test/corpus/LoginParallel/sany.out +1 -0
  425. package/pstack/skills/statechart/scripts/test/corpus/LoginParallel/verdict-1.exit +1 -0
  426. package/pstack/skills/statechart/scripts/test/corpus/LoginParallel/verdict-1.out +83 -0
  427. package/pstack/skills/statechart/scripts/test/corpus/LoginParallel/verdict-2.out +57 -0
  428. package/pstack/skills/statechart/scripts/test/corpus/LoginParallel/view.mjs +1 -0
  429. package/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/ChartRun.out +60 -0
  430. package/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/MediaPlayer.cfg +3 -0
  431. package/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/MediaPlayer.tla +103 -0
  432. package/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/chart.mmd +43 -0
  433. package/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/graph.dot +93 -0
  434. package/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/report.md +14 -0
  435. package/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/sany.out +1 -0
  436. package/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/verdict-1.exit +1 -0
  437. package/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/verdict-1.out +59 -0
  438. package/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/verdict-2.out +72 -0
  439. package/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/view.mjs +3 -0
  440. package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerFixed/ChartRun.out +57 -0
  441. package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerFixed/MediaPlayerFixed.cfg +2 -0
  442. package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerFixed/MediaPlayerFixed.tla +100 -0
  443. package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerFixed/chart.mmd +31 -0
  444. package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerFixed/graph.dot +85 -0
  445. package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerFixed/report.md +9 -0
  446. package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerFixed/sany.out +1 -0
  447. package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerFixed/verdict-1.out +47 -0
  448. package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerFixed/view.mjs +3 -0
  449. package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/ChartRun.out +59 -0
  450. package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/MediaPlayer.tla +103 -0
  451. package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/MediaPlayerProps.cfg +3 -0
  452. package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/MediaPlayerProps.tla +6 -0
  453. package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/chart.mmd +42 -0
  454. package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/graph.dot +93 -0
  455. package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/report.md +19 -0
  456. package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/sany.out +2 -0
  457. package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/verdict-1.exit +1 -0
  458. package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/verdict-1.out +61 -0
  459. package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/verdict-2.out +59 -0
  460. package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/verdict-3.out +61 -0
  461. package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/verdict-4.exit +1 -0
  462. package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/verdict-4.out +66 -0
  463. package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/verdict-5.exit +1 -0
  464. package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/verdict-5.out +58 -0
  465. package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/verdict-6.out +49 -0
  466. package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/view.mjs +3 -0
  467. package/pstack/skills/statechart/scripts/test/corpus/PickWorker/ChartRun.out +57 -0
  468. package/pstack/skills/statechart/scripts/test/corpus/PickWorker/PickWorker.cfg +6 -0
  469. package/pstack/skills/statechart/scripts/test/corpus/PickWorker/PickWorker.tla +11 -0
  470. package/pstack/skills/statechart/scripts/test/corpus/PickWorker/chart.mmd +5 -0
  471. package/pstack/skills/statechart/scripts/test/corpus/PickWorker/graph.dot +11 -0
  472. package/pstack/skills/statechart/scripts/test/corpus/PickWorker/report.md +7 -0
  473. package/pstack/skills/statechart/scripts/test/corpus/PickWorker/sany.out +5 -0
  474. package/pstack/skills/statechart/scripts/test/corpus/PickWorker/verdict-1.out +70 -0
  475. package/pstack/skills/statechart/scripts/test/corpus/Shadow/ChartRun.out +61 -0
  476. package/pstack/skills/statechart/scripts/test/corpus/Shadow/Shadow.cfg +4 -0
  477. package/pstack/skills/statechart/scripts/test/corpus/Shadow/Shadow.tla +11 -0
  478. package/pstack/skills/statechart/scripts/test/corpus/Shadow/ShadowLib.tla +6 -0
  479. package/pstack/skills/statechart/scripts/test/corpus/Shadow/ShadowSub.tla +3 -0
  480. package/pstack/skills/statechart/scripts/test/corpus/Shadow/chart.mmd +9 -0
  481. package/pstack/skills/statechart/scripts/test/corpus/Shadow/graph.dot +16 -0
  482. package/pstack/skills/statechart/scripts/test/corpus/Shadow/report.md +8 -0
  483. package/pstack/skills/statechart/scripts/test/corpus/Shadow/sany.out +4 -0
  484. package/pstack/skills/statechart/scripts/test/corpus/Shadow/verdict-1.out +65 -0
  485. package/pstack/skills/statechart/scripts/test/corpus/SpacedNames/ChartRun.out +59 -0
  486. package/pstack/skills/statechart/scripts/test/corpus/SpacedNames/SpacedNames.cfg +2 -0
  487. package/pstack/skills/statechart/scripts/test/corpus/SpacedNames/SpacedNames.tla +9 -0
  488. package/pstack/skills/statechart/scripts/test/corpus/SpacedNames/chart.mmd +23 -0
  489. package/pstack/skills/statechart/scripts/test/corpus/SpacedNames/graph.dot +17 -0
  490. package/pstack/skills/statechart/scripts/test/corpus/SpacedNames/report.md +15 -0
  491. package/pstack/skills/statechart/scripts/test/corpus/SpacedNames/sany.out +1 -0
  492. package/pstack/skills/statechart/scripts/test/corpus/SpacedNames/verdict-1.exit +1 -0
  493. package/pstack/skills/statechart/scripts/test/corpus/SpacedNames/verdict-1.out +65 -0
  494. package/pstack/skills/statechart/scripts/test/corpus/SpacedNames/verdict-2.exit +1 -0
  495. package/pstack/skills/statechart/scripts/test/corpus/SpacedNames/verdict-2.out +75 -0
  496. package/pstack/skills/statechart/scripts/test/corpus/TwoPhase/ChartRun.out +69 -0
  497. package/pstack/skills/statechart/scripts/test/corpus/TwoPhase/TwoPhase.cfg +3 -0
  498. package/pstack/skills/statechart/scripts/test/corpus/TwoPhase/TwoPhase.tla +75 -0
  499. package/pstack/skills/statechart/scripts/test/corpus/TwoPhase/chart.mmd +60 -0
  500. package/pstack/skills/statechart/scripts/test/corpus/TwoPhase/graph.dot +297 -0
  501. package/pstack/skills/statechart/scripts/test/corpus/TwoPhase/report.md +20 -0
  502. package/pstack/skills/statechart/scripts/test/corpus/TwoPhase/sany.out +1 -0
  503. package/pstack/skills/statechart/scripts/test/corpus/TwoPhase/verdict-1.exit +1 -0
  504. package/pstack/skills/statechart/scripts/test/corpus/TwoPhase/verdict-1.out +95 -0
  505. package/pstack/skills/statechart/scripts/test/corpus/TwoPhase/verdict-2.out +57 -0
  506. package/pstack/skills/statechart/scripts/test/corpus/TwoPhase/view.mjs +1 -0
  507. package/pstack/skills/statechart/scripts/test/corpus/TwoPhaseFixed/ChartRun.out +57 -0
  508. package/pstack/skills/statechart/scripts/test/corpus/TwoPhaseFixed/TwoPhaseFixed.cfg +3 -0
  509. package/pstack/skills/statechart/scripts/test/corpus/TwoPhaseFixed/TwoPhaseFixed.tla +75 -0
  510. package/pstack/skills/statechart/scripts/test/corpus/TwoPhaseFixed/chart.mmd +37 -0
  511. package/pstack/skills/statechart/scripts/test/corpus/TwoPhaseFixed/graph.dot +223 -0
  512. package/pstack/skills/statechart/scripts/test/corpus/TwoPhaseFixed/report.md +11 -0
  513. package/pstack/skills/statechart/scripts/test/corpus/TwoPhaseFixed/sany.out +1 -0
  514. package/pstack/skills/statechart/scripts/test/corpus/TwoPhaseFixed/verdict-1.out +47 -0
  515. package/pstack/skills/statechart/scripts/test/corpus/TwoPhaseFixed/view.mjs +1 -0
  516. package/pstack/skills/statechart/scripts/test/corpus/TypeGuard/ChartRun.exit +1 -0
  517. package/pstack/skills/statechart/scripts/test/corpus/TypeGuard/ChartRun.out +75 -0
  518. package/pstack/skills/statechart/scripts/test/corpus/TypeGuard/TypeGuard.cfg +5 -0
  519. package/pstack/skills/statechart/scripts/test/corpus/TypeGuard/TypeGuard.tla +11 -0
  520. package/pstack/skills/statechart/scripts/test/corpus/TypeGuard/chart.mmd +18 -0
  521. package/pstack/skills/statechart/scripts/test/corpus/TypeGuard/graph.dot +14 -0
  522. package/pstack/skills/statechart/scripts/test/corpus/TypeGuard/report.md +29 -0
  523. package/pstack/skills/statechart/scripts/test/corpus/TypeGuard/sany.out +2 -0
  524. package/pstack/skills/statechart/scripts/test/corpus/TypeGuard/verdict-1.exit +1 -0
  525. package/pstack/skills/statechart/scripts/test/corpus/TypeGuard/verdict-1.out +64 -0
  526. package/pstack/skills/statechart/scripts/test/corpus/TypeGuard/verdict-2.exit +1 -0
  527. package/pstack/skills/statechart/scripts/test/corpus/TypeGuard/verdict-2.out +75 -0
  528. package/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/ChartRun.out +58 -0
  529. package/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/UserNoDeadlock.cfg +2 -0
  530. package/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/UserNoDeadlock.tla +8 -0
  531. package/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/chart.mmd +22 -0
  532. package/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/graph.dot +16 -0
  533. package/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/report.md +15 -0
  534. package/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/sany.out +2 -0
  535. package/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/verdict-1.exit +1 -0
  536. package/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/verdict-1.out +56 -0
  537. package/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/verdict-2.exit +1 -0
  538. package/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/verdict-2.out +77 -0
  539. package/pstack/skills/statechart/scripts/test/corpus.test.ts +403 -0
  540. package/pstack/skills/statechart/scripts/test/differential.test.ts +565 -0
  541. package/pstack/skills/statechart/scripts/test/grid/Grid.cfg +2 -0
  542. package/pstack/skills/statechart/scripts/test/grid/Grid.tla +9 -0
  543. package/pstack/skills/statechart/scripts/test/grid/sany.out +2 -0
  544. package/pstack/skills/statechart/scripts/test/java.ts +63 -0
  545. package/pstack/skills/statechart/scripts/test/labels.ts +643 -0
  546. package/pstack/skills/statechart/scripts/test/messages.test.ts +212 -0
  547. package/pstack/skills/statechart/scripts/test/pipeline.test.ts +270 -0
  548. package/pstack/skills/statechart/scripts/test/plain-tlc.test.ts +255 -0
  549. package/pstack/skills/statechart/scripts/test/render.test.ts +81 -0
  550. package/pstack/skills/statechart/scripts/test/tlc-out.test.ts +90 -0
  551. package/pstack/skills/statechart/scripts/test/tlc.ts +158 -0
  552. package/pstack/skills/statechart/scripts/tsconfig.json +11 -0
  553. package/pstack/skills/statechart/scripts/worker.ts +35 -0
  554. package/pstack/skills/swarm/SKILL.md +47 -0
  555. package/pstack/skills/tdd/SKILL.md +42 -0
  556. package/pstack/skills/teach/SKILL.md +21 -0
  557. package/pstack/skills/technical-writing/SKILL.md +106 -0
  558. package/pstack/skills/thermo-nuclear-code-quality-review/SKILL.md +192 -0
  559. package/pstack/skills/thermo-nuclear-review/SKILL.md +51 -0
  560. package/pstack/skills/thermos/SKILL.md +21 -0
  561. package/pstack/skills/typescript-best-practices/SKILL.md +31 -0
  562. package/pstack/skills/typescript-best-practices/references/patterns.md +328 -0
  563. package/pstack/skills/unslop/SKILL.md +62 -0
  564. package/pstack/skills/what-did-i-get-done/SKILL.md +31 -0
  565. package/pstack/skills/why/SKILL.md +105 -0
  566. package/pstack/skills/why/references/epistemics.md +71 -0
  567. package/pstack/skills/why/references/investigator-prompt.md +84 -0
  568. package/pstack/skills/why/references/source-playbook.md +17 -0
  569. package/pstack/skills/why/references/sources/code-archaeology.md +51 -0
  570. package/pstack/skills/why/references/sources/databricks.md +70 -0
  571. package/pstack/skills/why/references/sources/datadog.md +97 -0
  572. package/pstack/skills/why/references/sources/incident-postmortem.md +5 -0
  573. package/pstack/skills/why/references/sources/linear.md +48 -0
  574. package/pstack/skills/why/references/sources/notion.md +55 -0
  575. package/pstack/skills/why/references/sources/sentry.md +66 -0
  576. package/pstack/skills/why/references/sources/slack.md +17 -0
  577. package/pstack/skills/why/references/synthesizer-prompt.md +129 -0
  578. package/src/accounts.ts +527 -0
  579. package/src/bash-timeout.ts +63 -0
  580. package/src/bridge-trim.ts +109 -0
  581. package/src/brief.ts +280 -0
  582. package/src/cards.ts +65 -0
  583. package/src/child.ts +570 -0
  584. package/src/failures.ts +73 -0
  585. package/src/models.ts +1249 -0
  586. package/src/plan.ts +252 -0
  587. package/src/resources.ts +30 -0
  588. package/src/results.ts +92 -0
  589. package/src/resume.ts +143 -0
  590. package/src/session.ts +70 -0
  591. package/src/state.ts +124 -0
  592. package/src/t3-http.ts +140 -0
  593. package/src/t3-json.ts +50 -0
  594. package/src/t3-mcp.ts +188 -0
  595. package/src/tasks.ts +163 -0
  596. package/src/transcript.ts +17 -0
  597. package/src/usage.ts +145 -0
  598. package/README.md +0 -3
@@ -0,0 +1,212 @@
1
+ import assert from "node:assert/strict";
2
+ import { test } from "node:test";
3
+ import { plainText, runtime } from "../backends/plain-text.ts";
4
+ import { readMessages } from "../frontends/messages.ts";
5
+
6
+ const tool = (code: number, level: number, ...lines: string[]) =>
7
+ [`@!@!@STARTMSG ${code}:${level} @!@!@`, ...lines, `@!@!@ENDMSG ${code} @!@!@`].join("\n");
8
+
9
+ const plain = (text: string) => [...plainText(readMessages(text))].join("");
10
+
11
+ test("TLC's -tool output prints as plain TLC prints it", () => {
12
+ const text = [
13
+ tool(2262, 0, "TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802)"),
14
+ tool(2401, 3, "Please run the Java VM with a throughput optimized garbage collector."),
15
+ tool(2220, 0, "Starting SANY..."),
16
+ "Parsing file /tmp/Spec.tla",
17
+ "<<",
18
+ '"chart",',
19
+ ">>",
20
+ tool(2219, 0, "SANY finished."),
21
+ tool(2154, 3, "The spec has no TypeOK."),
22
+ tool(2200, 0, "Progress(1) at 2026-10-25 12:58:36: 3 states generated."),
23
+ tool(2116, 1, "Temporal properties were violated.", ""),
24
+ tool(2217, 4, "1: <Initial predicate>", "/\\ x = 0", ""),
25
+ tool(2217, 4, "2: <Next line 5, col 9 to line 5, col 20 of module Spec>", "/\\ x = 1", ""),
26
+ tool(2122, 4, "1: Back to state: <Back line 6, col 9 to line 6, col 23 of module Spec>", ""),
27
+ tool(2218, 4, "3: Stuttering"),
28
+ tool(1000, 2, "This was a bug."),
29
+ tool(2200, 0, "Progress(2) at 2026-10-25 12:58:37: 3 states generated."),
30
+ tool(2199, 0, "3 states generated."),
31
+ tool(2186, 0, "Finished in 61000ms at (2026-10-25 12:58:37)"),
32
+ "",
33
+ ].join("\n");
34
+ assert.equal(
35
+ plain(text),
36
+ [
37
+ "TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802)",
38
+ "Warning: Please run the Java VM with a throughput optimized garbage collector.",
39
+ "(Use the -nowarning option to disable this warning.)",
40
+ "Parsing file /tmp/Spec.tla",
41
+ "<<",
42
+ '"chart",',
43
+ ">>",
44
+ "Warning: The spec has no TypeOK.",
45
+ "Progress(1) at 2026-10-25 12:58:36: 3 states generated.",
46
+ "Error: Temporal properties were violated.",
47
+ "",
48
+ "State 1: <Initial predicate>",
49
+ "/\\ x = 0",
50
+ "",
51
+ "State 2: <Next line 5, col 9 to line 5, col 20 of module Spec>",
52
+ "/\\ x = 1",
53
+ "",
54
+ "Back to state 1: <Back line 6, col 9 to line 6, col 23 of module Spec>",
55
+ "",
56
+ "State 3: Stuttering",
57
+ "TLC Bug: This was a bug.",
58
+ "3 states generated.",
59
+ "Finished in 01min 01s at (2026-10-25 12:58:37)",
60
+ "",
61
+ ].join("\n"),
62
+ );
63
+ });
64
+
65
+ test("a message that TLC prints inside another prints as plain TLC prints it", () => {
66
+ const assertion = "The first argument of Assert evaluated to FALSE; the second argument was:";
67
+ const text = [
68
+ tool(
69
+ 2111,
70
+ 1,
71
+ "Evaluating invariant Bad failed.",
72
+ tool(2179, 0, "The second argument of \\div is 0."),
73
+ ),
74
+ tool(2121, 1, "The behavior up to this point is:"),
75
+ tool(1000, 1, tool(2132, 0, assertion, '"left @!@!@STARTMSG 9999:1 @!@!@ right"')),
76
+ tool(1000, 1, tool(2132, 0, assertion, '"@!@!@ENDMSG 2103 @!@!@"')),
77
+ "",
78
+ ].join("\n");
79
+ assert.equal(
80
+ plain(text),
81
+ [
82
+ "Error: Evaluating invariant Bad failed.",
83
+ "The second argument of \\div is 0.",
84
+ "Error: The behavior up to this point is:",
85
+ `Error: ${assertion}`,
86
+ '"left @!@!@STARTMSG 9999:1 @!@!@ right"',
87
+ `Error: ${assertion}`,
88
+ '"@!@!@ENDMSG 2103 @!@!@"',
89
+ "",
90
+ ].join("\n"),
91
+ );
92
+ });
93
+
94
+ test("an end line closes the innermost message whatever code it names", () => {
95
+ const text = [
96
+ "@!@!@STARTMSG 2111:1 @!@!@",
97
+ "Evaluating invariant Bad failed: @!@!@STARTMSG 2179:0 @!@!@",
98
+ "The second argument of \\div is 0.",
99
+ "@!@!@ENDMSG 2179 @!@!@",
100
+ "@!@!@ENDMSG 2111 @!@!@",
101
+ tool(2186, 0, "Finished in 0ms at (T)"),
102
+ "",
103
+ ].join("\n");
104
+ assert.equal(
105
+ plain(text),
106
+ [
107
+ "Error: Evaluating invariant Bad failed: The second argument of \\div is 0.",
108
+ "Finished in 00s at (T)",
109
+ "",
110
+ ].join("\n"),
111
+ );
112
+ });
113
+
114
+ test("a message that TLC starts at the end of a line of text prints on that line", () => {
115
+ const text = [
116
+ "@!@!@STARTMSG 1000:1 @!@!@",
117
+ "TLC threw an unexpected exception.",
118
+ "This was probably caused by an error in the spec or model.",
119
+ "See the User Output or TLC Console for clues to what happened.",
120
+ "The exception was a java.lang.RuntimeException",
121
+ ": tlc2.tool.EvalException: @!@!@STARTMSG 2179:0 @!@!@",
122
+ "The second argument of \\div is 0.",
123
+ "@!@!@ENDMSG 2179 @!@!@",
124
+ "@!@!@ENDMSG 1000 @!@!@",
125
+ "@!@!@STARTMSG 2103:1 @!@!@",
126
+ "The error occurred when TLC was evaluating the nested",
127
+ "expressions at the following positions:",
128
+ "0. Line 8, column 8 to line 8, column 25 in ConstraintEval",
129
+ "1. Line 8, column 8 to line 8, column 21 in ConstraintEval",
130
+ "",
131
+ "",
132
+ "@!@!@ENDMSG 2103 @!@!@",
133
+ "@!@!@STARTMSG 2200:0 @!@!@",
134
+ "Progress(2) at 2026-10-25 17:45:59: 3 states generated (598 s/min), 2 distinct states found (398 ds/min), 0 states left on queue.",
135
+ "@!@!@ENDMSG 2200 @!@!@",
136
+ "@!@!@STARTMSG 2199:0 @!@!@",
137
+ "3 states generated, 2 distinct states found, 0 states left on queue.",
138
+ "@!@!@ENDMSG 2199 @!@!@",
139
+ "@!@!@STARTMSG 2186:0 @!@!@",
140
+ "Finished in 304ms at (2026-10-25 17:45:59)",
141
+ "@!@!@ENDMSG 2186 @!@!@",
142
+ "",
143
+ ].join("\n");
144
+ assert.equal(
145
+ plain(text),
146
+ [
147
+ "Error: TLC threw an unexpected exception.",
148
+ "This was probably caused by an error in the spec or model.",
149
+ "See the User Output or TLC Console for clues to what happened.",
150
+ "The exception was a java.lang.RuntimeException",
151
+ ": tlc2.tool.EvalException: The second argument of \\div is 0.",
152
+ "Error: The error occurred when TLC was evaluating the nested",
153
+ "expressions at the following positions:",
154
+ "0. Line 8, column 8 to line 8, column 25 in ConstraintEval",
155
+ "1. Line 8, column 8 to line 8, column 21 in ConstraintEval",
156
+ "",
157
+ "",
158
+ "3 states generated, 2 distinct states found, 0 states left on queue.",
159
+ "Finished in 00s at (2026-10-25 17:45:59)",
160
+ "",
161
+ ].join("\n"),
162
+ );
163
+ });
164
+
165
+ test("output that ends where TLC died prints as plain TLC's output cut at the same point", () => {
166
+ const computing = tool(2189, 0, "Computing initial states...");
167
+ const assertion = "The first argument of Assert evaluated to FALSE; the second argument was:";
168
+ const insideEnd = [
169
+ computing,
170
+ "@!@!@STARTMSG 2111:1 @!@!@",
171
+ "Evaluating invariant ChartMark failed.",
172
+ "@!@!@STARTMSG 2132:0 @!@!@",
173
+ assertion,
174
+ '"c went past eleven"',
175
+ "@!@!@ENDMSG 21",
176
+ ].join("\n");
177
+ assert.equal(
178
+ plain(insideEnd),
179
+ [
180
+ "Computing initial states...",
181
+ "Error: Evaluating invariant ChartMark failed.",
182
+ assertion,
183
+ '"c went past eleven"',
184
+ "",
185
+ ].join("\n"),
186
+ );
187
+ const afterStarts = [computing, "@!@!@STARTMSG 1000:1 @!@!@", "@!@!@STARTMSG 2132:0 @!@!@", ""];
188
+ assert.equal(plain(afterStarts.join("\n")), "Computing initial states...\n");
189
+ });
190
+
191
+ test("text outside TLC's messages, such as SANY's output, passes through unchanged", () => {
192
+ for (const text of ["", "\n", "a\n\nb\n", "Semantic errors:\n\n line 1\n"])
193
+ assert.equal(plain(text), text);
194
+ });
195
+
196
+ test("TLC's run time prints as plain TLC prints it, with each field wrapping", () => {
197
+ for (const [ms, printed] of [
198
+ [0, "00s"],
199
+ [394, "00s"],
200
+ [59_999, "59s"],
201
+ [60_000, "00s"],
202
+ [60_001, "01min 00s"],
203
+ [3_599_999, "59min 59s"],
204
+ [3_600_000, "00min 00s"],
205
+ [3_600_001, "01h 00min"],
206
+ [86_400_000, "00h 00min"],
207
+ [86_400_001, "1d 00h"],
208
+ [90_000_000, "1d 01h"],
209
+ [366 * 86_400_000, "1d 00h"],
210
+ ] satisfies [number, string][])
211
+ assert.equal(runtime(ms), printed, String(ms));
212
+ });
@@ -0,0 +1,270 @@
1
+ import assert from "node:assert/strict";
2
+ import { execFileSync } from "node:child_process";
3
+ import fs from "node:fs";
4
+ import path from "node:path";
5
+ import { test } from "node:test";
6
+ import { fileURLToPath, pathToFileURL } from "node:url";
7
+ import { inspect } from "node:util";
8
+ import { checkView } from "../frontends/view.ts";
9
+ import {
10
+ type CheckResult,
11
+ EC,
12
+ LEVEL,
13
+ type Rule,
14
+ type Spec,
15
+ stateRules,
16
+ type Verdict,
17
+ } from "../ir.ts";
18
+ import { compile } from "../pipeline.ts";
19
+
20
+ const scripts = path.join(path.dirname(fileURLToPath(import.meta.url)), "..");
21
+
22
+ const sources = (target: string) => {
23
+ const full = path.join(scripts, target);
24
+ if (!fs.statSync(full).isDirectory()) return [target];
25
+ return fs
26
+ .readdirSync(full, { recursive: true, encoding: "utf8" })
27
+ .map((entry) => path.join(target, entry))
28
+ .filter((file) => fs.statSync(path.join(scripts, file)).isFile());
29
+ };
30
+
31
+ const RECORD = `
32
+ import { registerHooks } from "node:module";
33
+ const edges = [];
34
+ registerHooks({
35
+ resolve(specifier, context, nextResolve) {
36
+ const resolved = nextResolve(specifier, context);
37
+ if (context.parentURL !== import.meta.url) edges.push([context.parentURL, resolved.url]);
38
+ return resolved;
39
+ },
40
+ });
41
+ for (const url of process.argv.slice(1)) await import(url);
42
+ console.log(JSON.stringify(edges));
43
+ `;
44
+ const loads = (...targets: string[]) => {
45
+ const urls = targets.flatMap(sources).map((file) => pathToFileURL(path.join(scripts, file)).href);
46
+ const out = execFileSync(process.execPath, ["--input-type=module", "-e", RECORD, ...urls], {
47
+ encoding: "utf8",
48
+ });
49
+ const name = (url: string) =>
50
+ url.startsWith("file:") ? path.relative(scripts, fileURLToPath(url)) : url;
51
+ return (JSON.parse(out) as string[][]).map(([from, to]) => [name(from), name(to)]);
52
+ };
53
+
54
+ const COMMENT =
55
+ /("(?:[^"\\\n]|\\[\s\S])*"|'(?:[^'\\\n]|\\[\s\S])*'|`(?:[^`\\]|\\[\s\S])*`)|\/\/[^\n]*|\/\*[\s\S]*?\*\//g;
56
+ const codeOf = (file: string) =>
57
+ fs.readFileSync(path.join(scripts, file), "utf8").replace(COMMENT, (_, text) => text ?? " ");
58
+
59
+ const RUNTIME =
60
+ /\b(?:process|require|globalThis|global|Deno|Bun|Buffer|setImmediate|clearImmediate|fetch)\b|\bimport\s*\(/g;
61
+ const TYPE_IMPORT =
62
+ /\b(?:import|export)\s+type\b\s*(?:[\w$]+|\*(?:\s*as\s+[\w$]+)?|\{[^}]*\})\s*from\s*["']([^"']*)["']/g;
63
+ const typeImports = (file: string) =>
64
+ Array.from(codeOf(file).matchAll(TYPE_IMPORT), (m) => path.join(path.dirname(file), m[1]));
65
+
66
+ test("ir.ts imports nothing", () => {
67
+ assert.deepEqual(loads("ir.ts"), []);
68
+ assert.deepEqual(typeImports("ir.ts"), []);
69
+ });
70
+
71
+ test("each pass imports only ir.ts", () => {
72
+ const files = sources("passes");
73
+ assert.deepEqual(
74
+ files.filter((file) => !file.endsWith(".ts")),
75
+ [],
76
+ );
77
+ const found = loads("passes");
78
+ assert.ok(found.length > 0);
79
+ for (const [from, to] of found) assert.equal(to, "ir.ts", `${from} imports ${to}`);
80
+ for (const file of files)
81
+ for (const to of typeImports(file))
82
+ assert.equal(to, "ir.ts", `${file} imports types from ${to}`);
83
+ });
84
+
85
+ test("pipeline.ts reaches no node: module", () => {
86
+ assert.deepEqual(
87
+ loads("pipeline.ts").filter(([, to]) => to.startsWith("node:")),
88
+ [],
89
+ );
90
+ for (const to of typeImports("pipeline.ts"))
91
+ assert.equal(to, "ir.ts", `pipeline.ts imports types from ${to}`);
92
+ });
93
+
94
+ test("ir.ts, the passes, pipeline.ts, the frontends, the backends, and every file they load are .ts files that name no listed runtime global and call no import()", () => {
95
+ const targets = ["ir.ts", "passes", "pipeline.ts", "frontends", "backends"];
96
+ const reached = loads(...targets).flatMap(([, to]) => (to.startsWith("node:") ? [] : [to]));
97
+ const files = [...new Set([...targets.flatMap(sources), ...reached])];
98
+ assert.deepEqual(
99
+ files.filter((file) => !file.endsWith(".ts")),
100
+ [],
101
+ );
102
+ for (const file of files) assert.deepEqual(codeOf(file).match(RUNTIME), null, file);
103
+ });
104
+
105
+ test("no frontend or backend loads a node: module when imported, even through another file", () => {
106
+ for (const folder of ["frontends", "backends"]) {
107
+ const files = fs
108
+ .readdirSync(path.join(scripts, folder), { encoding: "utf8", recursive: true })
109
+ .filter((f) => f.endsWith(".ts"));
110
+ assert.ok(files.length > 0, folder);
111
+ for (const f of files)
112
+ for (const [, to] of loads(path.join(folder, f)))
113
+ assert.ok(!to.startsWith("node:"), `${folder}/${f} reaches ${to}`);
114
+ }
115
+ });
116
+
117
+ const small: Rule = { kind: "invariant", name: "Small" };
118
+
119
+ const noView = checkView({}, inspect);
120
+
121
+ const holding = (spec: Spec) => {
122
+ const verdicts: Verdict[] = [];
123
+ for (const rule of stateRules(spec))
124
+ verdicts.push({ rule, outcome: "holds", messages: undefined });
125
+ return verdicts;
126
+ };
127
+
128
+ const twoStates = (breaks: Rule[], property = "Settles"): CheckResult => ({
129
+ spec: {
130
+ module: "Two",
131
+ variables: ["x"],
132
+ invariants: ["Small"],
133
+ properties: [property],
134
+ deadlock: false,
135
+ written: [],
136
+ folder: "",
137
+ },
138
+ paths: undefined,
139
+ graph: {
140
+ states: new Map([
141
+ ["1", { vars: { x: 0 }, start: true, breaks: [] }],
142
+ ["2", { vars: { x: 1 }, start: false, breaks }],
143
+ ]),
144
+ steps: [{ from: "1", to: "2", action: "Grow" }],
145
+ },
146
+ rules: [{ rule: small, outcome: breaks.length ? "broken" : "holds", messages: undefined }],
147
+ properties: [
148
+ {
149
+ rule: { kind: "property", name: property },
150
+ outcome: breaks.length ? "broken" : "holds",
151
+ messages: [
152
+ {
153
+ code: EC.TLC_STATE_PRINT2,
154
+ level: LEVEL.STATE,
155
+ body: ["1: <Initial predicate>", "x = 0"],
156
+ },
157
+ ],
158
+ bug: undefined,
159
+ initialOnly: false,
160
+ },
161
+ ],
162
+ exit: breaks.length ? 1 : 0,
163
+ stop: undefined,
164
+ drawing: undefined,
165
+ states: { distinct: 2, initial: 1, complete: true, cut: false },
166
+ messages: [{ code: EC.TLC_FINISHED, level: LEVEL.NONE, body: ["Finished in 394ms at (T)"] }],
167
+ });
168
+
169
+ const body = (files: Map<string, Iterable<string | Uint8Array>>, name: string) => {
170
+ let text = "";
171
+ for (const part of files.get(name) ?? [])
172
+ text += typeof part === "string" ? part : new TextDecoder().decode(part);
173
+ return text;
174
+ };
175
+
176
+ test("the pipeline turns a hand-built graph into the out folder's files with no TLC", () => {
177
+ const broken = compile(twoStates([small]), noView);
178
+ assert.equal(broken.exit, 1);
179
+ assert.deepEqual(
180
+ [...broken.files.keys()],
181
+ ["chart.mmd", "report.md", "tlc.out", "tlc-Settles.out"],
182
+ );
183
+ assert.equal(body(broken.files, "report.md"), broken.report);
184
+ assert.equal(body(broken.files, "tlc.out"), "Finished in 00s at (T)\n");
185
+ assert.equal(body(broken.files, "tlc-Settles.out"), "State 1: <Initial predicate>\nx = 0\n");
186
+ assert.equal(
187
+ broken.report,
188
+ [
189
+ "# Two",
190
+ "",
191
+ "TLC reached 2 states and 1 steps. The chart draws 2 states and 1 arrows.",
192
+ "",
193
+ "## Small breaks",
194
+ "The shortest path has 1 step:",
195
+ "0. 0",
196
+ "1. Grow: 1",
197
+ "",
198
+ "## Settles breaks",
199
+ "TLC found a counterexample. It is in tlc-Settles.out.",
200
+ ].join("\n"),
201
+ );
202
+ assert.match(
203
+ body(broken.files, "chart.mmd"),
204
+ /^ {2}(s\d+) --> (s\d+): Grow\n[\s\S]*^ {2}class \2 breaks$/m,
205
+ );
206
+
207
+ const holds = compile(twoStates([]), noView);
208
+ assert.equal(holds.exit, 0);
209
+ assert.deepEqual([...holds.files.keys()], ["chart.mmd", "report.md", "tlc.out"]);
210
+ assert.match(holds.report, /^## Rules that hold\nSmall, Settles$/m);
211
+ assert.doesNotMatch(body(holds.files, "chart.mmd"), /breaks/);
212
+ });
213
+
214
+ test("an invariant and a property with one name stay two rules", () => {
215
+ const reportWithSmallProperty = (breaks: Rule[]) => {
216
+ const result = twoStates(breaks);
217
+ const step = result.graph.steps[0];
218
+ result.spec.properties = ["Small"];
219
+ result.properties = [
220
+ {
221
+ rule: { kind: "property", name: "Small" },
222
+ outcome: "broken",
223
+ messages: [],
224
+ bug: { start: "1", path: [{ action: "Grow", state: "2", step }], loop: 1, stutters: true },
225
+ initialOnly: false,
226
+ },
227
+ ];
228
+ return compile(result, noView).report;
229
+ };
230
+ const both = reportWithSmallProperty([small]);
231
+ assert.match(both, /^## Small breaks\nThe shortest path has 1 step:$/m);
232
+ assert.match(
233
+ both,
234
+ /^## Small breaks\nTLC's counterexample is in tlc-Small\.out\. It has 1 step:$/m,
235
+ );
236
+ assert.match(reportWithSmallProperty([]), /^## Rules that hold\nSmall$/m);
237
+ });
238
+
239
+ test("a PROPERTY that breaks with no path writes TLC's counterexample", () => {
240
+ const result = twoStates([]);
241
+ result.properties[0].outcome = "broken";
242
+ const { report, files } = compile(result, noView);
243
+ assert.match(
244
+ report,
245
+ /^## Settles breaks\nTLC found a counterexample\. It is in tlc-Settles\.out\.$/m,
246
+ );
247
+ assert.equal(body(files, "tlc-Settles.out"), "State 1: <Initial predicate>\nx = 0\n");
248
+ });
249
+
250
+ test("a rule named NoDeadlock leaves the deadlock rule a name of its own", () => {
251
+ const holds = (result: CheckResult) => {
252
+ result.spec.deadlock = true;
253
+ result.rules = holding(result.spec);
254
+ return compile(result, noView).report.match(/^## Rules that hold\n(.*)$/m)?.[1];
255
+ };
256
+ const invariant = twoStates([]);
257
+ invariant.spec.invariants = ["NoDeadlock"];
258
+ assert.equal(holds(invariant), "NoDeadlock, CHECK_DEADLOCK, Settles");
259
+ assert.equal(holds(twoStates([], "NoDeadlock")), "Small, CHECK_DEADLOCK, NoDeadlock");
260
+ assert.equal(holds(twoStates([])), "Small, NoDeadlock, Settles");
261
+ });
262
+
263
+ test("a run that does not check for deadlock never names CHECK_DEADLOCK", () => {
264
+ const invariant = twoStates([]);
265
+ invariant.spec.invariants = ["Small", "NoDeadlock"];
266
+ for (const result of [invariant, twoStates([], "NoDeadlock")]) {
267
+ result.rules = holding(result.spec);
268
+ assert.doesNotMatch(compile(result, noView).report, /CHECK_DEADLOCK/);
269
+ }
270
+ });