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,547 @@
1
+ export type Value =
2
+ | boolean
3
+ | number
4
+ | string
5
+ | { kind: "model"; name: string }
6
+ | { kind: "set"; members: Value[] }
7
+ | { kind: "interval"; lo: number; hi: number }
8
+ | { kind: "function"; printedAs: "tuple" | "record" | "pairs"; keys: Value[]; values: Value[] };
9
+
10
+ export type Vars = { [name: string]: Value };
11
+
12
+ export type Rule = { kind: "invariant" | "deadlock" | "property"; name: string };
13
+
14
+ type StateBase = { vars: Vars; start: boolean; breaks: Rule[] };
15
+
16
+ export type PastState = StateBase & { ends: Rule[]; past: true; excluded: boolean };
17
+
18
+ export type State =
19
+ | (StateBase & { ends?: Rule[]; past?: undefined; excluded?: undefined })
20
+ | PastState;
21
+
22
+ export type Step = { from: string; to: string; action: string };
23
+
24
+ export type Graph = { states: Map<string, State>; steps: Step[] };
25
+
26
+ export type PathStep = { action: string; state: string; step: Step };
27
+
28
+ export type Output = Iterable<Uint8Array>;
29
+
30
+ export type Lasso = {
31
+ start: string;
32
+ path: PathStep[];
33
+ loop: number | undefined;
34
+ stutters: boolean;
35
+ };
36
+
37
+ export type Mark = { values: Value[]; broken: string[] };
38
+
39
+ export type Past = Map<string, Set<Rule>>;
40
+
41
+ export type TraceState = { action: string; vars: Vars };
42
+
43
+ export type Trace = {
44
+ seq: { action: string; vars: Vars | undefined }[];
45
+ loop: number | undefined;
46
+ };
47
+
48
+ export type Find<Id> = (values: Value[]) => Id | undefined;
49
+
50
+ export type Bug = {
51
+ rule: Rule;
52
+ start: string;
53
+ path: PathStep[];
54
+ loop?: number;
55
+ stutters?: boolean;
56
+ };
57
+
58
+ export type ConfigSection = { key: string; line: number; tokens: string[] };
59
+
60
+ export type Config = {
61
+ sections: ConfigSection[];
62
+ invariants: string[];
63
+ properties: string[];
64
+ constraints: string[];
65
+ actionConstraints: string[];
66
+ checkDeadlock?: boolean;
67
+ init?: string;
68
+ next?: string;
69
+ spec?: string;
70
+ view?: string;
71
+ symmetry?: string;
72
+ type?: string;
73
+ typeConstraint?: string;
74
+ };
75
+
76
+ export type Spec = {
77
+ module: string;
78
+ variables: string[];
79
+ invariants: string[];
80
+ properties: string[];
81
+ deadlock: boolean;
82
+ written: ConfigSection[];
83
+ };
84
+
85
+ export type Message = { code: number; level: number; body: Part[]; beforeMarker?: string };
86
+
87
+ export type Line = string;
88
+
89
+ export type Part = Line | Message;
90
+
91
+ export const EC = {
92
+ TLC_INVARIANT_VIOLATED_INITIAL: 2107,
93
+ TLC_PROPERTY_VIOLATED_INITIAL: 2108,
94
+ TLC_INVARIANT_VIOLATED_BEHAVIOR: 2110,
95
+ TLC_ACTION_PROPERTY_VIOLATED_BEHAVIOR: 2112,
96
+ TLC_DEADLOCK_REACHED: 2114,
97
+ TLC_TEMPORAL_PROPERTY_VIOLATED: 2116,
98
+ TLC_BACK_TO_STATE: 2122,
99
+ TLC_FINISHED: 2186,
100
+ TLC_INIT_GENERATED1: 2190,
101
+ TLC_INIT_GENERATED2: 2191,
102
+ TLC_STATS: 2199,
103
+ TLC_PROGRESS_STATS: 2200,
104
+ TLC_STATE_PRINT2: 2217,
105
+ TLC_STATE_PRINT3: 2218,
106
+ TLC_SANY_END: 2219,
107
+ TLC_SANY_START: 2220,
108
+ } as const;
109
+
110
+ export const LEVEL = { NONE: 0, ERROR: 1, TLCBUG: 2, WARNING: 3, STATE: 4 } as const;
111
+
112
+ export type Outcome = "broken" | "holds" | "not checked";
113
+
114
+ export type Verdict = {
115
+ rule: Rule;
116
+ outcome: Outcome;
117
+ messages: Iterable<Part> | undefined;
118
+ };
119
+
120
+ export type Property = Verdict & { bug: Lasso | undefined; initialOnly: boolean };
121
+
122
+ export type Stop = { status: number | null; message: string };
123
+
124
+ export type CheckResult = {
125
+ spec: Spec & { folder: string };
126
+ graph: Graph;
127
+ paths: Bug[] | undefined;
128
+ rules: Verdict[];
129
+ properties: Property[];
130
+ exit: 0 | 1 | 2;
131
+ stop: Stop | undefined;
132
+ drawing: { status: number | null } | undefined;
133
+ states: { distinct: number; initial: number; complete: boolean; cut: boolean };
134
+ messages: Iterable<Part>;
135
+ };
136
+
137
+ export const RERUN_STATES = 100_000;
138
+
139
+ export const CHART_STATES = 500;
140
+
141
+ export type View = {
142
+ state?: (vars: Vars) => unknown;
143
+ step?: (action: string, from: Vars, to: Vars) => unknown;
144
+ group?: (vars: Vars) => unknown;
145
+ colors?: { [group: string]: string };
146
+ title?: string;
147
+ };
148
+
149
+ export const checked = Symbol("checked");
150
+
151
+ export type CheckedView = View & { readonly [checked]: true };
152
+
153
+ export type Shape = { [region: string]: string[] };
154
+
155
+ export type Walk = {
156
+ ids: string[];
157
+ states: State[];
158
+ index: Map<string, number>;
159
+ nameOf: string[];
160
+ nameRank: Int32Array;
161
+ from: Int32Array;
162
+ to: Int32Array;
163
+ action: Int32Array;
164
+ depth: Int32Array;
165
+ via: Int32Array;
166
+ reached: Int32Array;
167
+ starts: number[];
168
+ };
169
+
170
+ export type Hidden = null;
171
+
172
+ export type Answers = {
173
+ names: string[];
174
+ shapes: Shape[];
175
+ labels: (string | Hidden)[];
176
+ group: (i: number) => unknown;
177
+ };
178
+
179
+ export type Labels = Answers & {
180
+ drawnLabels: string[];
181
+ keys: string[][];
182
+ kinds: Int32Array[];
183
+ sizes: number[];
184
+ sorted: Int32Array;
185
+ pathStepIndex: Map<Step, number>;
186
+ pathSteps: Uint8Array;
187
+ together: Set<string>;
188
+ notes: string[];
189
+ };
190
+
191
+ export type Story = { step?: string; state: Shape }[];
192
+
193
+ export type ChartState = {
194
+ path: string[];
195
+ start: boolean;
196
+ members: number[];
197
+ works: boolean;
198
+ lead: boolean;
199
+ repeats: boolean;
200
+ breaks: { rule: Rule; always: boolean }[];
201
+ group: unknown;
202
+ };
203
+
204
+ export type Condition =
205
+ | { kind: "and" | "or"; otherKeys: Set<string>[] }
206
+ | { kind: "tuples"; otherTuples: Set<string> };
207
+
208
+ export type Arrow = {
209
+ from: string;
210
+ to: string;
211
+ label: string;
212
+ condition: Condition;
213
+ when?: string;
214
+ };
215
+
216
+ export type ChartStep = {
217
+ from: string[];
218
+ to: string[];
219
+ label: string;
220
+ when: string | undefined;
221
+ };
222
+
223
+ export type Region = {
224
+ name: string;
225
+ states: ChartState[];
226
+ steps: ChartStep[];
227
+ arrows: Arrow[];
228
+ };
229
+
230
+ export type Chart = {
231
+ title: string | undefined;
232
+ regions: Region[];
233
+ notes: string[];
234
+ inside: number;
235
+ quiet: number;
236
+ colors: { [group: string]: string };
237
+ paths: string[];
238
+ loops: string[];
239
+ lie?: string;
240
+ };
241
+
242
+ export const isRecord = (v: unknown): v is { [key: string]: unknown } =>
243
+ typeof v === "object" && v !== null && !Array.isArray(v);
244
+
245
+ export const isStrings = (v: unknown): v is string[] =>
246
+ Array.isArray(v) && v.every((s) => typeof s === "string");
247
+
248
+ export const PART = 1 << 24;
249
+
250
+ export const byText = (a: string, b: string) => (a < b ? -1 : a > b ? 1 : 0);
251
+
252
+ export const list = (items: string[], and = "and") =>
253
+ items.length < 2 ? items.join("") : `${items.slice(0, -1).join(", ")} ${and} ${items.at(-1)}`;
254
+
255
+ const ESCAPES: { [c: string]: string } = {
256
+ '"': '\\"',
257
+ "\\": "\\\\",
258
+ "\n": "\\n",
259
+ "\t": "\\t",
260
+ "\r": "\\r",
261
+ "\f": "\\f",
262
+ };
263
+ const quote = (s: string) => `"${s.replace(/["\\\n\t\r\f]/g, (c) => ESCAPES[c])}"`;
264
+
265
+ const joined = (items: Value[], sep: string) => {
266
+ let s = "";
267
+ for (let i = 0; i < items.length; i++) s += (i ? sep : "") + show(items[i]);
268
+ return s;
269
+ };
270
+
271
+ export const show = (v: Value): string => {
272
+ switch (typeof v) {
273
+ case "boolean":
274
+ return v ? "TRUE" : "FALSE";
275
+ case "number":
276
+ return String(v);
277
+ case "string":
278
+ return quote(v);
279
+ }
280
+ switch (v.kind) {
281
+ case "model":
282
+ return v.name;
283
+ case "interval":
284
+ return `${v.lo}..${v.hi}`;
285
+ case "set":
286
+ return `{${joined(v.members, ", ")}}`;
287
+ case "function": {
288
+ if (v.printedAs === "tuple") return `<<${joined(v.values, ", ")}>>`;
289
+ const record = v.printedAs === "record";
290
+ let s = record ? "[" : "(";
291
+ for (let i = 0; i < v.keys.length; i++)
292
+ s += record
293
+ ? `${i ? ", " : ""}${String(v.keys[i])} |-> ${show(v.values[i])}`
294
+ : `${i ? " @@ " : ""}${show(v.keys[i])} :> ${show(v.values[i])}`;
295
+ return s + (record ? "]" : ")");
296
+ }
297
+ }
298
+ };
299
+
300
+ export const must = <K, V>(map: ReadonlyMap<K, V>, key: K): V => {
301
+ const value = map.get(key);
302
+ if (value === undefined) throw new Error(`The chart lost track of ${JSON.stringify(key)}.`);
303
+ return value;
304
+ };
305
+
306
+ export const append = <K, V>(groups: Map<K, V[]>, key: K, item: V) => {
307
+ const group = groups.get(key);
308
+ if (group) group.push(item);
309
+ else groups.set(key, [item]);
310
+ };
311
+
312
+ export const seqOf = (bug: Bug, index: ReadonlyMap<string, number>) => {
313
+ const seq = [must(index, bug.start)];
314
+ for (const p of bug.path) seq.push(must(index, p.state));
315
+ return seq;
316
+ };
317
+
318
+ export const loopOf = (bug: Bug, index: ReadonlyMap<string, number>) =>
319
+ new Set(bug.loop === undefined ? [] : seqOf(bug, index).slice(bug.loop));
320
+
321
+ export const defaultState = (vars: Vars) => {
322
+ const entries = Object.entries(vars);
323
+ if (entries.length === 1) return show(entries[0][1]);
324
+ const parts: string[] = [];
325
+ for (const [k, v] of entries) parts.push(`${k}=${show(v)}`);
326
+ return parts.join(" ");
327
+ };
328
+
329
+ export const stateText = (vars: Vars) => {
330
+ const parts: string[] = [];
331
+ for (const [k, v] of Object.entries(vars)) parts.push(`${k} = ${show(v)}`);
332
+ return parts.join(" /\\ ");
333
+ };
334
+
335
+ export const count = (n: number) => {
336
+ const items = new Int32Array(n);
337
+ for (let i = 0; i < n; i++) items[i] = i;
338
+ return items;
339
+ };
340
+
341
+ export const sortBy = (items: Int32Array, keys: Int32Array[]) => {
342
+ for (let k = keys.length - 1; k >= 0; k--) {
343
+ const key = keys[k];
344
+ let size = 0;
345
+ for (let p = 0; p < items.length; p++) if (key[items[p]] >= size) size = key[items[p]] + 1;
346
+ const start = new Int32Array(size + 1);
347
+ for (let p = 0; p < items.length; p++) start[key[items[p]] + 1]++;
348
+ for (let v = 0; v < size; v++) start[v + 1] += start[v];
349
+ const sorted = new Int32Array(items.length);
350
+ for (let p = 0; p < items.length; p++) sorted[start[key[items[p]]]++] = items[p];
351
+ items = sorted;
352
+ }
353
+ return items;
354
+ };
355
+
356
+ export const tupleKey = (parts: unknown[]) => JSON.stringify(parts);
357
+ export const unkey = (k: string) => {
358
+ const parts: unknown = JSON.parse(k);
359
+ if (!isStrings(parts)) throw new Error(`The chart cannot read the key ${k}.`);
360
+ return parts;
361
+ };
362
+
363
+ export function holds(condition: Condition, others: string[]) {
364
+ switch (condition.kind) {
365
+ case "and":
366
+ for (let j = 0; j < others.length; j++)
367
+ if (!condition.otherKeys[j].has(others[j])) return false;
368
+ return true;
369
+ case "or":
370
+ for (let j = 0; j < others.length; j++)
371
+ if (condition.otherKeys[j].has(others[j])) return true;
372
+ return false;
373
+ case "tuples":
374
+ return condition.otherTuples.has(tupleKey(others));
375
+ }
376
+ }
377
+
378
+ export const ruleKey = (rule: Rule) => tupleKey([rule.kind, rule.name]);
379
+
380
+ export const hasRule = (rules: Rule[], rule: Rule) => {
381
+ for (const r of rules) if (r.kind === rule.kind && r.name === rule.name) return true;
382
+ return false;
383
+ };
384
+
385
+ const ascending = (keys: string[]) => {
386
+ for (let i = 1; i < keys.length; i++) if (keys[i - 1] > keys[i]) return false;
387
+ return true;
388
+ };
389
+
390
+ const span = (lo: number, hi: number) => (hi > lo ? `${lo}..${hi}` : String(lo));
391
+
392
+ const setKey = (members: Value[]) => {
393
+ const ints: number[] = [];
394
+ let others: string[] = [];
395
+ for (const m of members)
396
+ if (typeof m === "number") ints.push(m);
397
+ else others.push(key(m));
398
+ for (let i = 1; i < ints.length; i++)
399
+ if (ints[i - 1] >= ints[i]) {
400
+ ints.sort((a, b) => a - b);
401
+ break;
402
+ }
403
+ if (!ascending(others)) others = others.sort(byText);
404
+ let s = "{";
405
+ for (let i = 0; i < ints.length;) {
406
+ let j = i;
407
+ while (j + 1 < ints.length && ints[j + 1] - ints[j] <= 1) j++;
408
+ s += `${s.length > 1 ? "," : ""}${span(ints[i], ints[j])}`;
409
+ i = j + 1;
410
+ }
411
+ for (let i = 0; i < others.length; i++)
412
+ if (!i || others[i] !== others[i - 1]) s += (s.length > 1 ? "," : "") + others[i];
413
+ return s + "}";
414
+ };
415
+
416
+ const functionKey = ({ keys, values }: { keys: Value[]; values: Value[] }) => {
417
+ const order: number[] = [];
418
+ const keyTexts: string[] = [];
419
+ let ints = 0;
420
+ for (let i = 0; i < keys.length; i++) {
421
+ order.push(i);
422
+ keyTexts.push(key(keys[i]));
423
+ if (typeof keys[i] === "number") ints++;
424
+ }
425
+ const rank = (i: number) => (typeof keys[i] === "number" ? (keys[i] as number) : Infinity);
426
+ order.sort((a, b) => rank(a) - rank(b) || byText(keyTexts[a], keyTexts[b]) || a - b);
427
+ let tuple = ints === keys.length;
428
+ for (let i = 0; tuple && i < order.length; i++) tuple = keys[order[i]] === i + 1;
429
+ let s = tuple ? "<<" : "(";
430
+ for (let i = 0, kept = 0; i < order.length; i++) {
431
+ const k = order[i];
432
+ if (i && keyTexts[k] === keyTexts[order[i - 1]]) continue;
433
+ const v = key(values[k]);
434
+ s += tuple ? `${kept++ ? "," : ""}${v}` : `${kept++ ? "@@" : ""}${keyTexts[k]}:>${v}`;
435
+ }
436
+ return s + (tuple ? ">>" : ")");
437
+ };
438
+
439
+ const keys = new WeakMap<object, string>();
440
+
441
+ export const key = (v: Value): string => {
442
+ switch (typeof v) {
443
+ case "boolean":
444
+ return v ? "TRUE" : "FALSE";
445
+ case "number":
446
+ return String(v);
447
+ case "string":
448
+ return JSON.stringify(v);
449
+ }
450
+ if (v.kind === "model") return v.name;
451
+ let k = keys.get(v);
452
+ if (k === undefined) {
453
+ k =
454
+ v.kind === "interval"
455
+ ? `{${v.lo > v.hi ? "" : span(v.lo, v.hi)}}`
456
+ : v.kind === "set"
457
+ ? setKey(v.members)
458
+ : functionKey(v);
459
+ keys.set(v, k);
460
+ }
461
+ return k;
462
+ };
463
+
464
+ export const stateKey = (values: Value[]) => {
465
+ let k = "";
466
+ for (let i = 0; i < values.length; i++) k += (i ? "," : "") + key(values[i]);
467
+ return k;
468
+ };
469
+
470
+ export const memo = <K, V>(make: (k: K) => V, limit = 1 << 16) => {
471
+ const cache = new Map<K, V>();
472
+ return (k: K) => {
473
+ let v = cache.get(k);
474
+ if (v === undefined) {
475
+ if (cache.size >= limit) cache.clear();
476
+ cache.set(k, (v = make(k)));
477
+ }
478
+ return v;
479
+ };
480
+ };
481
+
482
+ export const valuesOf = (vars: Vars, names: string[]) => {
483
+ const values: Value[] = [];
484
+ for (const n of names) values.push(vars[n]);
485
+ return values;
486
+ };
487
+
488
+ export const findTrace = <Id>(
489
+ counterexample: TraceState[],
490
+ names: string[],
491
+ rule: Rule,
492
+ find: Find<Id>,
493
+ ) => {
494
+ const trace: (TraceState & { values: Value[]; id: Id | undefined })[] = [];
495
+ for (const { action, vars } of counterexample) {
496
+ const values = valuesOf(vars, names);
497
+ trace.push({ action, vars, values, id: find(values) });
498
+ }
499
+ const end = trace.length - 1;
500
+ if (end < 0) throw new Error(`TLC's trace for ${rule.name} has no states.`);
501
+ for (let i = 0; i < end; i++)
502
+ if (trace[i].id === undefined)
503
+ throw new Error(
504
+ `TLC's trace for ${rule.name} has a state before its last that the dump does not list.`,
505
+ );
506
+ return trace;
507
+ };
508
+
509
+ export const findLoop = <Id>({ seq, loop }: Trace, names: string[], find: Find<Id>) => {
510
+ const found: { action: string; id: Id | undefined }[] = [];
511
+ for (const { action, vars } of seq)
512
+ found.push({ action, id: vars && find(valuesOf(vars, names)) });
513
+ return { seq: found, loop };
514
+ };
515
+
516
+ export const pastState = (
517
+ vars: Vars,
518
+ start: boolean,
519
+ marked: Iterable<Rule>,
520
+ excluded: boolean,
521
+ ): PastState => {
522
+ const breaks: Rule[] = [];
523
+ for (const r of marked) if (!hasRule(breaks, r)) breaks.push(r);
524
+ return { vars, start, breaks, ends: [], past: true, excluded };
525
+ };
526
+
527
+ export const CHECK_DEADLOCK = "CHECK_DEADLOCK";
528
+
529
+ const deadlockRule = ({ invariants, properties }: Spec): Rule => ({
530
+ kind: "deadlock",
531
+ name:
532
+ invariants.includes("NoDeadlock") || properties.includes("NoDeadlock")
533
+ ? CHECK_DEADLOCK
534
+ : "NoDeadlock",
535
+ });
536
+
537
+ export const hasSection = ({ written }: Spec, ...keys: string[]) => {
538
+ for (const s of written) if (keys.includes(s.key)) return true;
539
+ return false;
540
+ };
541
+
542
+ export const stateRules = (spec: Spec) => {
543
+ const rules: Rule[] = [];
544
+ for (const name of spec.invariants) rules.push({ kind: "invariant", name });
545
+ if (spec.deadlock) rules.push(deadlockRule(spec));
546
+ return rules;
547
+ };
@@ -0,0 +1,11 @@
1
+ {
2
+ "name": "@cursor-skill/statechart",
3
+ "private": true,
4
+ "type": "module",
5
+ "scripts": {
6
+ "test": "node --disable-warning=ExperimentalWarning --test test/*.test.ts"
7
+ },
8
+ "devDependencies": {
9
+ "fast-check": "4.5.3"
10
+ }
11
+ }
@@ -0,0 +1,128 @@
1
+ import {
2
+ findLoop,
3
+ findTrace,
4
+ type Graph,
5
+ hasRule,
6
+ type Lasso,
7
+ type Mark,
8
+ must,
9
+ type Past,
10
+ pastState,
11
+ type PathStep,
12
+ type Rule,
13
+ stateKey,
14
+ type Step,
15
+ type Trace,
16
+ type TraceState,
17
+ type Value,
18
+ valuesOf,
19
+ } from "../ir.ts";
20
+
21
+ export const finder = (graph: Graph, names: string[]) => {
22
+ let ids: Map<string, string> | undefined;
23
+ const find = (values: Value[]) => {
24
+ if (!ids) {
25
+ ids = new Map();
26
+ for (const [id, s] of graph.states)
27
+ if (!s.excluded) ids.set(stateKey(valuesOf(s.vars, names)), id);
28
+ }
29
+ return ids.get(stateKey(values));
30
+ };
31
+ find.add = (id: string, values: Value[]) => ids?.set(stateKey(values), id);
32
+ return find;
33
+ };
34
+
35
+ export function mark(
36
+ graph: Graph,
37
+ marks: Iterable<Mark>,
38
+ names: string[],
39
+ rules: Rule[],
40
+ find = finder(graph, names),
41
+ ) {
42
+ const byName = new Map<string, Rule>();
43
+ for (const rule of rules) byName.set(rule.name, rule);
44
+ const past: Past = new Map();
45
+ for (const { values, broken } of marks) {
46
+ const id = find(values);
47
+ const state = id === undefined ? undefined : graph.states.get(id);
48
+ for (const name of broken) {
49
+ const rule = must(byName, name);
50
+ if (state) state.breaks.push(rule);
51
+ else past.set(stateKey(values), (past.get(stateKey(values)) ?? new Set()).add(rule));
52
+ }
53
+ }
54
+ return past;
55
+ }
56
+
57
+ export function deadEnds(graph: Graph, rule: Rule) {
58
+ const from = new Set<string>();
59
+ for (const t of graph.steps) from.add(t.from);
60
+ for (const [id, s] of graph.states) if (!s.past && !from.has(id)) s.breaks.push(rule);
61
+ }
62
+
63
+ export function addPast(
64
+ graph: Graph,
65
+ counterexample: TraceState[],
66
+ names: string[],
67
+ rule: Rule,
68
+ past: Past,
69
+ excludes: boolean,
70
+ find = finder(graph, names),
71
+ ) {
72
+ const trace = findTrace(counterexample, names, rule, find);
73
+ const end = trace.length - 1;
74
+ const from = trace[end - 1]?.id;
75
+ const action = trace[end].action;
76
+ const taken = (to: string | undefined) => {
77
+ for (const t of graph.steps)
78
+ if (t.from === from && t.to === to && t.action === action) return true;
79
+ return false;
80
+ };
81
+ let to = trace[end].id;
82
+ const reached = to === undefined ? undefined : graph.states.get(to);
83
+ const excluded = excludes && reached !== undefined && end > 0 && !reached.past && !taken(to);
84
+ if (excluded) to = `past ${to} ${action} ${from}`;
85
+ to ??= `past ${graph.states.size}`;
86
+ let last = graph.states.get(to);
87
+ if (!last) {
88
+ const marked = excluded ? reached.breaks : (past.get(stateKey(trace[end].values)) ?? []);
89
+ last = pastState(trace[end].vars, end === 0, marked, excluded);
90
+ graph.states.set(to, last);
91
+ if (!excluded) find.add(to, trace[end].values);
92
+ }
93
+ if (!hasRule(last.breaks, rule)) last.breaks.push(rule);
94
+ (last.ends ??= []).push(rule);
95
+ if (from !== undefined && last.past && !taken(to)) graph.steps.push({ from, to, action });
96
+ }
97
+
98
+ export function lasso(
99
+ graph: Graph,
100
+ trace: Trace,
101
+ names: string[],
102
+ find = finder(graph, names),
103
+ ): Lasso | undefined {
104
+ const { seq, loop } = findLoop(trace, names, find);
105
+ const start = seq[0]?.id;
106
+ if (start === undefined) return undefined;
107
+ const out = new Map<string | undefined, Step[]>();
108
+ for (const s of seq) out.set(s.id, []);
109
+ for (const t of graph.steps) out.get(t.from)?.push(t);
110
+ const route: PathStep[] = [];
111
+ for (let i = 1; i < seq.length; i++) {
112
+ let step: Step | undefined;
113
+ for (const t of out.get(seq[i - 1].id) ?? [])
114
+ if (t.to === seq[i].id && t.action === seq[i].action) {
115
+ step = t;
116
+ break;
117
+ }
118
+ if (!step) return undefined;
119
+ route.push({ action: step.action, state: step.to, step });
120
+ }
121
+ const stutters = loop === seq.length - 1;
122
+ return {
123
+ start,
124
+ path: route,
125
+ loop,
126
+ stutters,
127
+ };
128
+ }