dsh-pstack 0.3.0-beta.1 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +122 -76
- package/README.zh.md +116 -70
- package/assets/agent-presets.png +0 -0
- package/assets/plugin-configure.png +0 -0
- package/assets/plugin-recommended.png +0 -0
- package/assets/plugin-roles.png +0 -0
- package/assets/session-preset.png +0 -0
- package/cordis.patch.yml +332 -24
- package/dist/budget.d.mts +82 -0
- package/dist/budget.mjs +293 -0
- package/dist/catalogue-wgVaGeUx.d.mts +27 -0
- package/dist/catalogue.d.mts +2 -0
- package/dist/catalogue.mjs +116 -0
- package/dist/client.js +4072 -0
- package/dist/index.d.mts +2 -87
- package/dist/index.mjs +3 -394
- package/dist/models.d.mts +11 -40
- package/dist/models.mjs +47 -107
- package/dist/paths.d.mts +13 -0
- package/dist/paths.mjs +26 -0
- package/dist/poteto-mode.d.mts +37 -0
- package/dist/poteto-mode.mjs +61 -0
- package/dist/preset-copy.d.mts +12 -0
- package/dist/preset-copy.mjs +64 -0
- package/dist/preset.d.mts +31 -0
- package/dist/preset.mjs +51 -0
- package/dist/pstack/docs/harness/dsh.md +40 -40
- package/dist/pstack/plugin.json +21 -0
- package/dist/pstack/skills/poteto-mode/scripts/bootstrap.ts +62 -0
- package/dist/pstack/skills/poteto-mode/scripts/bun.lock +67 -0
- package/dist/pstack/skills/poteto-mode/scripts/check-plan.mjs +70 -83
- package/dist/pstack/skills/poteto-mode/scripts/{check-plan.test.mjs → check-plan.test.ts} +24 -42
- package/dist/pstack/skills/poteto-mode/scripts/package.json +16 -0
- package/dist/pstack/skills/poteto-mode/scripts/watch-pr/cli.test.ts +224 -0
- package/dist/pstack/skills/poteto-mode/scripts/watch-pr/cli.ts +223 -0
- package/dist/pstack/skills/poteto-mode/scripts/watch-pr/fakes.test-helper.ts +129 -0
- package/dist/pstack/skills/poteto-mode/scripts/watch-pr/github.test.ts +498 -0
- package/dist/pstack/skills/poteto-mode/scripts/watch-pr/github.ts +726 -0
- package/dist/pstack/skills/poteto-mode/scripts/watch-pr/policy.test.ts +482 -0
- package/dist/pstack/skills/poteto-mode/scripts/watch-pr/policy.ts +842 -0
- package/dist/pstack/skills/poteto-mode/scripts/watch-pr/render.ts +169 -0
- package/dist/pstack/skills/poteto-mode/scripts/watch-pr/tsconfig.json +13 -0
- package/dist/pstack/skills/poteto-mode/scripts/watch-pr/types.compile.ts +93 -0
- package/dist/pstack/skills/poteto-mode/scripts/watch-pr/types.ts +414 -0
- package/dist/pstack/skills/poteto-mode/scripts/watch-pr/watch-pr +6 -0
- package/dist/pstack/skills/poteto-mode/scripts/worktree-audit.sh +134 -0
- package/dist/pstack/skills/show-me-your-work/scripts/log.sh +42 -0
- package/dist/pstack/skills/statechart/scripts/backends/cfg.ts +33 -0
- package/dist/pstack/skills/statechart/scripts/backends/mermaid.ts +201 -0
- package/dist/pstack/skills/statechart/scripts/backends/plain-text.ts +72 -0
- package/dist/pstack/skills/statechart/scripts/backends/report.ts +177 -0
- package/dist/pstack/skills/statechart/scripts/frontends/config.ts +276 -0
- package/dist/pstack/skills/statechart/scripts/frontends/dot.ts +74 -0
- package/dist/pstack/skills/statechart/scripts/frontends/marks.ts +93 -0
- package/dist/pstack/skills/statechart/scripts/frontends/messages.ts +52 -0
- package/dist/pstack/skills/statechart/scripts/frontends/spec.ts +114 -0
- package/dist/pstack/skills/statechart/scripts/frontends/trace.ts +24 -0
- package/dist/pstack/skills/statechart/scripts/frontends/value.ts +166 -0
- package/dist/pstack/skills/statechart/scripts/frontends/verdict.ts +40 -0
- package/dist/pstack/skills/statechart/scripts/frontends/view.ts +119 -0
- package/dist/pstack/skills/statechart/scripts/ir.ts +547 -0
- package/dist/pstack/skills/statechart/scripts/package.json +11 -0
- package/dist/pstack/skills/statechart/scripts/passes/annotate.ts +128 -0
- package/dist/pstack/skills/statechart/scripts/passes/label.ts +269 -0
- package/dist/pstack/skills/statechart/scripts/passes/lift.ts +85 -0
- package/dist/pstack/skills/statechart/scripts/passes/loop-check.ts +68 -0
- package/dist/pstack/skills/statechart/scripts/passes/paths.ts +60 -0
- package/dist/pstack/skills/statechart/scripts/passes/reach.ts +135 -0
- package/dist/pstack/skills/statechart/scripts/passes/region-check.ts +97 -0
- package/dist/pstack/skills/statechart/scripts/passes/regions.ts +295 -0
- package/dist/pstack/skills/statechart/scripts/pipeline.ts +76 -0
- package/dist/pstack/skills/statechart/scripts/run.ts +481 -0
- package/dist/pstack/skills/statechart/scripts/statechart +29 -0
- package/dist/pstack/skills/statechart/scripts/statechart.ts +164 -0
- package/dist/pstack/skills/statechart/scripts/test/ConfigOracle.java +63 -0
- package/dist/pstack/skills/statechart/scripts/test/chart.test.ts +1210 -0
- package/dist/pstack/skills/statechart/scripts/test/charts/Braces.mmd +7 -0
- package/dist/pstack/skills/statechart/scripts/test/charts/Escapes.mmd +11 -0
- package/dist/pstack/skills/statechart/scripts/test/charts/Phases.mmd +29 -0
- package/dist/pstack/skills/statechart/scripts/test/cli.test.ts +1314 -0
- package/dist/pstack/skills/statechart/scripts/test/config-fuzz.test.ts +263 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/Counter/ChartRun.out +57 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/Counter/Counter.cfg +3 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/Counter/Counter.tla +10 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/Counter/chart.mmd +9 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/Counter/graph.dot +16 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/Counter/report.md +7 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/Counter/sany.out +2 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/Counter/verdict-1.out +49 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterAction/ChartRun.out +60 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterAction/CounterAction.cfg +4 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterAction/CounterAction.tla +22 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterAction/chart.mmd +26 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterAction/graph.dot +19 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterAction/report.md +20 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterAction/sany.out +2 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterAction/verdict-1.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterAction/verdict-1.out +56 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterAction/verdict-2.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterAction/verdict-2.out +82 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterAction/verdict-3.out +57 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/ChartRun.out +59 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/CounterDeadlock.cfg +3 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/CounterDeadlock.tla +11 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/chart.mmd +22 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/graph.dot +16 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/report.md +17 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/sany.out +2 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/verdict-1.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/verdict-1.out +56 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/verdict-2.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/verdict-2.out +77 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterFan/ChartRun.out +69 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterFan/CounterFan.cfg +2 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterFan/CounterFan.tla +11 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterFan/chart.mmd +85 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterFan/graph.dot +70 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterFan/report.md +12 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterFan/sany.out +2 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterFan/verdict-1.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterFan/verdict-1.out +67 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterFan/verdict-2.out +57 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterGuard/ChartRun.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterGuard/ChartRun.out +85 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterGuard/CounterGuard.cfg +6 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterGuard/CounterGuard.tla +13 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterGuard/chart.mmd +5 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterGuard/graph.dot +10 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterGuard/report.md +31 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterGuard/sany.out +2 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterGuard/verdict-1.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterGuard/verdict-1.out +64 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterGuard/verdict-2.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterGuard/verdict-2.out +77 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterInitPast/ChartRun.out +55 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterInitPast/CounterInitPast.cfg +3 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterInitPast/CounterInitPast.tla +10 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterInitPast/chart.mmd +12 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterInitPast/graph.dot +6 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterInitPast/report.md +12 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterInitPast/sany.out +2 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterInitPast/verdict-1.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterInitPast/verdict-1.out +33 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterInitPast/verdict-2.out +54 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterInitPastHolds/ChartRun.out +54 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterInitPastHolds/CounterInitPastHolds.cfg +3 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterInitPastHolds/CounterInitPastHolds.tla +10 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterInitPastHolds/chart.mmd +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterInitPastHolds/graph.dot +6 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterInitPastHolds/report.md +7 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterInitPastHolds/sany.out +2 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterInitPastHolds/verdict-1.out +46 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterInstance/ChartRun.out +59 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterInstance/CounterInstance.cfg +2 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterInstance/CounterInstance.tla +10 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterInstance/CounterSteps.tla +6 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterInstance/chart.mmd +17 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterInstance/graph.dot +15 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterInstance/report.md +14 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterInstance/sany.out +3 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterInstance/verdict-1.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterInstance/verdict-1.out +78 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterJump/ChartRun.out +59 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterJump/CounterJump.cfg +3 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterJump/CounterJump.tla +19 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterJump/chart.mmd +26 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterJump/graph.dot +22 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterJump/report.md +12 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterJump/sany.out +2 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterJump/verdict-1.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterJump/verdict-1.out +58 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterJump/verdict-2.out +57 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterLoop/ChartRun.out +57 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterLoop/CounterLoop.cfg +2 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterLoop/CounterLoop.tla +11 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterLoop/chart.mmd +17 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterLoop/graph.dot +15 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterLoop/report.md +14 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterLoop/sany.out +2 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterLoop/verdict-1.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterLoop/verdict-1.out +76 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterOrder/ChartRun.out +59 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterOrder/CounterOrder.cfg +3 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterOrder/CounterOrder.tla +11 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterOrder/chart.mmd +19 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterOrder/graph.dot +10 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterOrder/report.md +15 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterOrder/sany.out +2 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterOrder/verdict-1.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterOrder/verdict-1.out +56 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterOrder/verdict-2.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterOrder/verdict-2.out +67 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterRules/ChartRun.out +62 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterRules/CounterRules.cfg +6 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterRules/CounterRules.tla +24 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterRules/Moves.tla +5 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterRules/chart.mmd +22 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterRules/graph.dot +10 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterRules/report.md +23 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterRules/sany.out +3 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterRules/verdict-1.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterRules/verdict-1.out +58 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterRules/verdict-2.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterRules/verdict-2.out +66 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterRules/verdict-3.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterRules/verdict-3.out +74 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterRules/verdict-4.out +59 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterStart/ChartRun.out +58 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterStart/CounterStart.cfg +3 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterStart/CounterStart.tla +15 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterStart/chart.mmd +18 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterStart/graph.dot +13 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterStart/report.md +11 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterStart/sany.out +2 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterStart/verdict-1.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterStart/verdict-1.out +33 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterStart/verdict-2.out +57 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterStop/ChartRun.out +57 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterStop/CounterStop.cfg +3 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterStop/CounterStop.tla +15 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterStop/chart.mmd +7 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterStop/graph.dot +13 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterStop/report.md +6 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterStop/sany.out +2 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterStop/verdict-1.out +49 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterTie/ChartRun.out +61 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterTie/CounterTie.cfg +4 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterTie/CounterTie.tla +14 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterTie/chart.mmd +30 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterTie/graph.dot +19 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterTie/report.md +27 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterTie/sany.out +2 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterTie/verdict-1.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterTie/verdict-1.out +56 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterTie/verdict-2.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterTie/verdict-2.out +64 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterTie/verdict-3.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterTie/verdict-3.out +87 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterTie/verdict-4.out +57 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterTieInGraph/ChartRun.out +60 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterTieInGraph/CounterTieInGraph.cfg +3 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterTieInGraph/CounterTieInGraph.tla +12 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterTieInGraph/chart.mmd +23 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterTieInGraph/graph.dot +19 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterTieInGraph/report.md +11 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterTieInGraph/sany.out +2 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterTieInGraph/verdict-1.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterTieInGraph/verdict-1.out +56 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterTieInGraph/verdict-2.out +57 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterView/ChartRun.out +61 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterView/CounterView.cfg +4 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterView/CounterView.tla +14 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterView/chart.mmd +23 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterView/graph.dot +19 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterView/report.md +27 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterView/sany.out +2 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterView/verdict-1.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterView/verdict-1.out +56 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterView/verdict-2.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterView/verdict-2.out +64 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterView/verdict-3.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterView/verdict-3.out +87 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterView/verdict-4.out +57 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/CounterView/view.mjs +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/DieHard/ChartRun.out +59 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/DieHard/DieHard.cfg +4 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/DieHard/DieHard.tla +38 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/DieHard/chart.mmd +92 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/DieHard/graph.dot +126 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/DieHard/report.md +17 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/DieHard/sany.out +2 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/DieHard/verdict-1.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/DieHard/verdict-1.out +91 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/DieHard/verdict-2.out +57 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/FirstRule/ChartRun.out +61 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/FirstRule/FirstRule.cfg +6 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/FirstRule/FirstRule.tla +11 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/FirstRule/chart.mmd +22 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/FirstRule/graph.dot +16 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/FirstRule/report.md +25 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/FirstRule/sany.out +2 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/FirstRule/verdict-1.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/FirstRule/verdict-1.out +56 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/FirstRule/verdict-2.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/FirstRule/verdict-2.out +64 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/FirstRule/verdict-3.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/FirstRule/verdict-3.out +64 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/FirstRule/verdict-4.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/FirstRule/verdict-4.out +77 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/HiddenClock/ChartRun.out +57 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/HiddenClock/HiddenClock.cfg +4 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/HiddenClock/HiddenClock.tla +11 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/HiddenClock/chart.mmd +13 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/HiddenClock/graph.dot +12 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/HiddenClock/report.md +11 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/HiddenClock/sany.out +2 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/HiddenClock/verdict-1.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/HiddenClock/verdict-1.out +72 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/Login/ChartRun.out +57 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/Login/Login.cfg +3 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/Login/Login.tla +62 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/Login/chart.mmd +27 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/Login/graph.dot +40 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/Login/report.md +7 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/Login/sany.out +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/Login/verdict-1.out +47 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/Login/view.mjs +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/LoginGuarded/ChartRun.out +57 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/LoginGuarded/LoginGuarded.cfg +2 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/LoginGuarded/LoginGuarded.tla +64 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/LoginGuarded/chart.mmd +28 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/LoginGuarded/graph.dot +37 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/LoginGuarded/report.md +8 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/LoginGuarded/sany.out +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/LoginGuarded/verdict-1.out +47 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/LoginGuarded/view.mjs +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/LoginParallel/ChartRun.out +60 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/LoginParallel/LoginParallel.cfg +3 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/LoginParallel/LoginParallel.tla +64 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/LoginParallel/chart.mmd +44 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/LoginParallel/graph.dot +58 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/LoginParallel/report.md +17 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/LoginParallel/sany.out +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/LoginParallel/verdict-1.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/LoginParallel/verdict-1.out +83 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/LoginParallel/verdict-2.out +57 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/LoginParallel/view.mjs +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/ChartRun.out +60 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/MediaPlayer.cfg +3 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/MediaPlayer.tla +103 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/chart.mmd +43 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/graph.dot +93 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/report.md +14 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/sany.out +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/verdict-1.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/verdict-1.out +59 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/verdict-2.out +72 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/view.mjs +3 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/MediaPlayerFixed/ChartRun.out +57 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/MediaPlayerFixed/MediaPlayerFixed.cfg +2 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/MediaPlayerFixed/MediaPlayerFixed.tla +100 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/MediaPlayerFixed/chart.mmd +31 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/MediaPlayerFixed/graph.dot +85 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/MediaPlayerFixed/report.md +9 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/MediaPlayerFixed/sany.out +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/MediaPlayerFixed/verdict-1.out +47 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/MediaPlayerFixed/view.mjs +3 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/ChartRun.out +59 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/MediaPlayer.tla +103 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/MediaPlayerProps.cfg +3 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/MediaPlayerProps.tla +6 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/chart.mmd +42 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/graph.dot +93 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/report.md +19 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/sany.out +2 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/verdict-1.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/verdict-1.out +61 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/verdict-2.out +59 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/verdict-3.out +61 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/verdict-4.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/verdict-4.out +66 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/verdict-5.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/verdict-5.out +58 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/verdict-6.out +49 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/view.mjs +3 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/PickWorker/ChartRun.out +57 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/PickWorker/PickWorker.cfg +6 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/PickWorker/PickWorker.tla +11 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/PickWorker/chart.mmd +5 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/PickWorker/graph.dot +11 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/PickWorker/report.md +7 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/PickWorker/sany.out +5 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/PickWorker/verdict-1.out +70 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/Shadow/ChartRun.out +61 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/Shadow/Shadow.cfg +4 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/Shadow/Shadow.tla +11 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/Shadow/ShadowLib.tla +6 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/Shadow/ShadowSub.tla +3 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/Shadow/chart.mmd +9 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/Shadow/graph.dot +16 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/Shadow/report.md +8 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/Shadow/sany.out +4 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/Shadow/verdict-1.out +65 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/SpacedNames/ChartRun.out +59 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/SpacedNames/SpacedNames.cfg +2 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/SpacedNames/SpacedNames.tla +9 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/SpacedNames/chart.mmd +23 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/SpacedNames/graph.dot +17 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/SpacedNames/report.md +15 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/SpacedNames/sany.out +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/SpacedNames/verdict-1.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/SpacedNames/verdict-1.out +65 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/SpacedNames/verdict-2.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/SpacedNames/verdict-2.out +75 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/TwoPhase/ChartRun.out +69 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/TwoPhase/TwoPhase.cfg +3 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/TwoPhase/TwoPhase.tla +75 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/TwoPhase/chart.mmd +60 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/TwoPhase/graph.dot +297 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/TwoPhase/report.md +20 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/TwoPhase/sany.out +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/TwoPhase/verdict-1.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/TwoPhase/verdict-1.out +95 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/TwoPhase/verdict-2.out +57 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/TwoPhase/view.mjs +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/TwoPhaseFixed/ChartRun.out +57 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/TwoPhaseFixed/TwoPhaseFixed.cfg +3 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/TwoPhaseFixed/TwoPhaseFixed.tla +75 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/TwoPhaseFixed/chart.mmd +37 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/TwoPhaseFixed/graph.dot +223 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/TwoPhaseFixed/report.md +11 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/TwoPhaseFixed/sany.out +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/TwoPhaseFixed/verdict-1.out +47 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/TwoPhaseFixed/view.mjs +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/TypeGuard/ChartRun.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/TypeGuard/ChartRun.out +75 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/TypeGuard/TypeGuard.cfg +5 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/TypeGuard/TypeGuard.tla +11 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/TypeGuard/chart.mmd +18 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/TypeGuard/graph.dot +14 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/TypeGuard/report.md +29 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/TypeGuard/sany.out +2 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/TypeGuard/verdict-1.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/TypeGuard/verdict-1.out +64 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/TypeGuard/verdict-2.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/TypeGuard/verdict-2.out +75 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/ChartRun.out +58 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/UserNoDeadlock.cfg +2 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/UserNoDeadlock.tla +8 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/chart.mmd +22 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/graph.dot +16 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/report.md +15 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/sany.out +2 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/verdict-1.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/verdict-1.out +56 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/verdict-2.exit +1 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/verdict-2.out +77 -0
- package/dist/pstack/skills/statechart/scripts/test/corpus.test.ts +403 -0
- package/dist/pstack/skills/statechart/scripts/test/differential.test.ts +565 -0
- package/dist/pstack/skills/statechart/scripts/test/grid/Grid.cfg +2 -0
- package/dist/pstack/skills/statechart/scripts/test/grid/Grid.tla +9 -0
- package/dist/pstack/skills/statechart/scripts/test/grid/sany.out +2 -0
- package/dist/pstack/skills/statechart/scripts/test/java.ts +63 -0
- package/dist/pstack/skills/statechart/scripts/test/labels.ts +643 -0
- package/dist/pstack/skills/statechart/scripts/test/messages.test.ts +212 -0
- package/dist/pstack/skills/statechart/scripts/test/pipeline.test.ts +270 -0
- package/dist/pstack/skills/statechart/scripts/test/plain-tlc.test.ts +255 -0
- package/dist/pstack/skills/statechart/scripts/test/render.test.ts +81 -0
- package/dist/pstack/skills/statechart/scripts/test/tlc-out.test.ts +90 -0
- package/dist/pstack/skills/statechart/scripts/test/tlc.ts +158 -0
- package/dist/pstack/skills/statechart/scripts/tsconfig.json +11 -0
- package/dist/pstack/skills/statechart/scripts/worker.ts +35 -0
- package/dist/readonly.d.mts +3 -0
- package/dist/readonly.mjs +9 -0
- package/dist/role-catalog.d.mts +11 -24
- package/dist/role-catalog.mjs +17 -32
- package/dist/role-config.d.mts +41 -0
- package/dist/role-config.mjs +112 -0
- package/dist/role-editor.d.mts +25 -0
- package/dist/role-editor.mjs +372 -0
- package/dist/role-file-CIVHnhBg.d.mts +53 -0
- package/dist/role-file.d.mts +2 -0
- package/dist/role-file.mjs +121 -0
- package/dist/{role-manifest-8OERX9-s.d.mts → role-manifest-D1npMjqZ.d.mts} +21 -10
- package/dist/role-manifest.d.mts +2 -0
- package/dist/{role-manifest-79cnFfDM.mjs → role-manifest.mjs} +20 -16
- package/dist/role-remote.d.mts +23 -0
- package/dist/role-remote.mjs +106 -0
- package/dist/{roles.d.mts → role-service.d.mts} +8 -4
- package/dist/role-service.mjs +43 -0
- package/dist/role-wire.d.mts +54 -0
- package/dist/role-wire.mjs +127 -0
- package/dist/route-7SqXDYrL.d.mts +36 -0
- package/dist/route.d.mts +2 -0
- package/dist/route.mjs +78 -0
- package/dist/skill.d.mts +9 -23
- package/dist/skill.mjs +28 -37
- package/dist/skills/authored/docs-drift/SKILL.md +4 -4
- package/dist/skills/authored/docs-drift/SKILL.zh.md +4 -4
- package/dist/skills/vendored/control-cli/SKILL.md +109 -0
- package/dist/skills/vendored/control-ui/SKILL.md +109 -0
- package/dist/skills/vendored/deslop/SKILL.md +22 -0
- package/dist/subagent.d.mts +60 -169
- package/dist/subagent.mjs +344 -587
- package/dist/wire-error-D_r-UW4w.d.mts +5 -0
- package/dist/wire-error.d.mts +2 -0
- package/dist/wire-error.mjs +9 -0
- package/locale/en.json +1 -1
- package/package.json +51 -35
- package/assets/pstack-config-entry.png +0 -0
- package/dist/client.mjs +0 -2482
- package/dist/client.mjs.map +0 -1
- package/dist/host-contract-CUPSpeNk.d.mts +0 -22
- package/dist/paths-yji9SNak.mjs +0 -47
- package/dist/pstack/skills/poteto-mode/scripts/expect.mjs +0 -254
- package/dist/pstack/skills/poteto-mode/scripts/support.mjs +0 -93
- package/dist/pstack/skills/poteto-mode/scripts/watch-pr/cli.mjs +0 -123
- package/dist/pstack/skills/poteto-mode/scripts/watch-pr/cli.test.mjs +0 -217
- package/dist/pstack/skills/poteto-mode/scripts/watch-pr/fakes.test-helper.mjs +0 -119
- package/dist/pstack/skills/poteto-mode/scripts/watch-pr/github.mjs +0 -626
- package/dist/pstack/skills/poteto-mode/scripts/watch-pr/github.test.mjs +0 -521
- package/dist/pstack/skills/poteto-mode/scripts/watch-pr/policy.mjs +0 -657
- package/dist/pstack/skills/poteto-mode/scripts/watch-pr/policy.test.mjs +0 -523
- package/dist/pstack/skills/poteto-mode/scripts/watch-pr/render.mjs +0 -106
- package/dist/pstack/skills/poteto-mode/scripts/watch-pr/types.mjs +0 -9
- package/dist/pstack/skills/poteto-mode/scripts/watch-pr/watch-pr.mjs +0 -5
- package/dist/pstack/skills/poteto-mode/scripts/worktree-audit.mjs +0 -668
- package/dist/pstack/skills/poteto-mode/scripts/worktree-audit.test.mjs +0 -134
- package/dist/pstack/skills/show-me-your-work/scripts/log.mjs +0 -106
- package/dist/pstack/skills/show-me-your-work/scripts/log.test.mjs +0 -56
- package/dist/pstack/skills/statechart/scripts/backends/cfg.mjs +0 -31
- package/dist/pstack/skills/statechart/scripts/backends/mermaid.mjs +0 -186
- package/dist/pstack/skills/statechart/scripts/backends/plain-text.mjs +0 -62
- package/dist/pstack/skills/statechart/scripts/backends/report.mjs +0 -84
- package/dist/pstack/skills/statechart/scripts/frontends/config.mjs +0 -268
- package/dist/pstack/skills/statechart/scripts/frontends/dot.mjs +0 -67
- package/dist/pstack/skills/statechart/scripts/frontends/marks.mjs +0 -94
- package/dist/pstack/skills/statechart/scripts/frontends/messages.mjs +0 -48
- package/dist/pstack/skills/statechart/scripts/frontends/spec.mjs +0 -101
- package/dist/pstack/skills/statechart/scripts/frontends/trace.mjs +0 -39
- package/dist/pstack/skills/statechart/scripts/frontends/value.mjs +0 -180
- package/dist/pstack/skills/statechart/scripts/frontends/verdict.mjs +0 -40
- package/dist/pstack/skills/statechart/scripts/frontends/view.mjs +0 -99
- package/dist/pstack/skills/statechart/scripts/ir.mjs +0 -277
- package/dist/pstack/skills/statechart/scripts/passes/annotate.mjs +0 -92
- package/dist/pstack/skills/statechart/scripts/passes/label.mjs +0 -210
- package/dist/pstack/skills/statechart/scripts/passes/lift.mjs +0 -84
- package/dist/pstack/skills/statechart/scripts/passes/loop-check.mjs +0 -47
- package/dist/pstack/skills/statechart/scripts/passes/paths.mjs +0 -72
- package/dist/pstack/skills/statechart/scripts/passes/reach.mjs +0 -135
- package/dist/pstack/skills/statechart/scripts/passes/region-check.mjs +0 -82
- package/dist/pstack/skills/statechart/scripts/passes/regions.mjs +0 -268
- package/dist/pstack/skills/statechart/scripts/pipeline.mjs +0 -72
- package/dist/pstack/skills/statechart/scripts/run.mjs +0 -440
- package/dist/pstack/skills/statechart/scripts/statechart.mjs +0 -155
- package/dist/pstack/skills/statechart/scripts/statechart.test.mjs +0 -198
- package/dist/pstack/skills/statechart/scripts/worker.mjs +0 -31
- package/dist/remote.d.mts +0 -27
- package/dist/remote.mjs +0 -235
- package/dist/role-config-a4JpVdc-.mjs +0 -379
- package/dist/role-wire-CAJsVA6e.d.mts +0 -54
- package/dist/roles.mjs +0 -293
- package/dist/script.d.mts +0 -91
- package/dist/script.mjs +0 -485
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
import { expect } from "./expect.mjs";
|
|
2
|
-
import "./support.mjs";
|
|
3
|
-
import { ageColumn, bucketFor, dirtyColumn, formatSize, lastChatColumn, mergedColumn, prColumn, remoteColumn, renderTable, sizeColumn, sortRows } from "./worktree-audit.mjs";
|
|
4
|
-
import { mkdirSync, mkdtempSync, rmSync, symlinkSync, writeFileSync } from "node:fs";
|
|
5
|
-
import { tmpdir } from "node:os";
|
|
6
|
-
import { join } from "node:path";
|
|
7
|
-
import { test } from "node:test";
|
|
8
|
-
// runtime/skills/poteto-mode/scripts/worktree-audit.test.ts
|
|
9
|
-
const now = Date.UTC(2026, 9, 28, 12, 0, 0) / 1e3;
|
|
10
|
-
test("renders the documented worktree columns", () => {
|
|
11
|
-
const table = renderTable(sortRows([{
|
|
12
|
-
size: "2.0G",
|
|
13
|
-
age: "1d",
|
|
14
|
-
merged: "YES",
|
|
15
|
-
dirty: "clean",
|
|
16
|
-
remote: "pushed",
|
|
17
|
-
pr: "#12/OPEN",
|
|
18
|
-
lastChat: "2026-10-28",
|
|
19
|
-
bucket: "hold-open-pr",
|
|
20
|
-
worktree: "/repo/wt-a"
|
|
21
|
-
}, {
|
|
22
|
-
size: "10.0M",
|
|
23
|
-
age: "10d",
|
|
24
|
-
merged: "NO",
|
|
25
|
-
dirty: "wip:2",
|
|
26
|
-
remote: "ahead1",
|
|
27
|
-
pr: "-",
|
|
28
|
-
lastChat: "-",
|
|
29
|
-
bucket: "hold-wip",
|
|
30
|
-
worktree: "/repo/wt-b"
|
|
31
|
-
}]), "origin/main");
|
|
32
|
-
expect(table.split("\n")[0]).toBe("# base: origin/main");
|
|
33
|
-
expect(table).toContain("SIZE AGE MERGED DIRTY REMOTE PR LAST_CHAT BUCKET WORKTREE");
|
|
34
|
-
expect(table).toContain("/repo/wt-a");
|
|
35
|
-
expect(table).toContain("/repo/wt-b");
|
|
36
|
-
});
|
|
37
|
-
test("classifies the individual columns", () => {
|
|
38
|
-
expect(formatSize(2 * 1024 ** 3)).toBe("2.0G");
|
|
39
|
-
expect(ageColumn(now - 86400, now)).toBe("1d");
|
|
40
|
-
expect(dirtyColumn("")).toBe("clean");
|
|
41
|
-
expect(dirtyColumn(" M a\n?? b\n")).toBe("wip:1");
|
|
42
|
-
expect(dirtyColumn("?? b\n")).toBe("scratch:1");
|
|
43
|
-
expect(mergedColumn(true)).toBe("YES");
|
|
44
|
-
expect(mergedColumn(false)).toBe("no");
|
|
45
|
-
expect(remoteColumn({
|
|
46
|
-
branch: "feature/x",
|
|
47
|
-
hasRemote: true,
|
|
48
|
-
remoteSha: "abc",
|
|
49
|
-
head: "abc",
|
|
50
|
-
aheadCount: 0
|
|
51
|
-
})).toBe("pushed");
|
|
52
|
-
expect(remoteColumn({
|
|
53
|
-
branch: "feature/x",
|
|
54
|
-
hasRemote: true,
|
|
55
|
-
remoteSha: "abc",
|
|
56
|
-
head: "def",
|
|
57
|
-
aheadCount: 2
|
|
58
|
-
})).toBe("ahead2");
|
|
59
|
-
expect(remoteColumn({
|
|
60
|
-
branch: "feature/x",
|
|
61
|
-
hasRemote: false,
|
|
62
|
-
remoteSha: void 0,
|
|
63
|
-
head: "def",
|
|
64
|
-
aheadCount: 2
|
|
65
|
-
})).toBe("no-remote");
|
|
66
|
-
expect(remoteColumn({
|
|
67
|
-
branch: void 0,
|
|
68
|
-
hasRemote: true,
|
|
69
|
-
remoteSha: "abc",
|
|
70
|
-
head: "abc",
|
|
71
|
-
aheadCount: 0
|
|
72
|
-
})).toBe("detached");
|
|
73
|
-
expect(prColumn("feature/x", [{
|
|
74
|
-
number: 12,
|
|
75
|
-
head: "feature/x",
|
|
76
|
-
state: "OPEN"
|
|
77
|
-
}])).toBe("#12/OPEN");
|
|
78
|
-
expect(lastChatColumn({
|
|
79
|
-
sessionId: "s-1",
|
|
80
|
-
lastEventTime: Date.UTC(2026, 9, 27, 23, 30) / 1e3
|
|
81
|
-
})).toBe("2026-10-27");
|
|
82
|
-
expect(lastChatColumn({ sessionId: "s-1" })).toBe("-");
|
|
83
|
-
expect(lastChatColumn(void 0)).toBe("-");
|
|
84
|
-
});
|
|
85
|
-
test("never marks an unknown usage signal safe", () => {
|
|
86
|
-
expect(bucketFor({
|
|
87
|
-
merged: "YES",
|
|
88
|
-
dirty: "clean",
|
|
89
|
-
pr: "-",
|
|
90
|
-
usageKnown: false,
|
|
91
|
-
usedRecently: false
|
|
92
|
-
})).toBe("unknown-usage");
|
|
93
|
-
expect(bucketFor({
|
|
94
|
-
merged: "YES",
|
|
95
|
-
dirty: "clean",
|
|
96
|
-
pr: "-",
|
|
97
|
-
usageKnown: true,
|
|
98
|
-
usedRecently: true
|
|
99
|
-
})).toBe("verify-recent-chat");
|
|
100
|
-
});
|
|
101
|
-
const sizeInBytes = (text) => {
|
|
102
|
-
const match = /^([\d.]+)([BKMGTP]?)$/.exec(text);
|
|
103
|
-
if (match === null) throw new Error(`cannot read size ${text}`);
|
|
104
|
-
const power = {
|
|
105
|
-
"": 0,
|
|
106
|
-
B: 0,
|
|
107
|
-
K: 1,
|
|
108
|
-
M: 2,
|
|
109
|
-
G: 3,
|
|
110
|
-
T: 4,
|
|
111
|
-
P: 5
|
|
112
|
-
}[match[2]] ?? 0;
|
|
113
|
-
return Number(match[1]) * 1024 ** power;
|
|
114
|
-
};
|
|
115
|
-
test("counts a directory symlink as its own entry and never traverses it", () => {
|
|
116
|
-
const root = mkdtempSync(join(tmpdir(), "worktree-audit-size-"));
|
|
117
|
-
try {
|
|
118
|
-
const external = join(root, "external");
|
|
119
|
-
mkdirSync(external);
|
|
120
|
-
writeFileSync(join(external, "big.bin"), Buffer.alloc(2097152, 1));
|
|
121
|
-
const worktree = join(root, "worktree");
|
|
122
|
-
mkdirSync(worktree);
|
|
123
|
-
writeFileSync(join(worktree, "small.txt"), "small");
|
|
124
|
-
symlinkSync(external, join(worktree, "external-link"), "dir");
|
|
125
|
-
expect(sizeInBytes(sizeColumn(external)) >= 2097152).toBe(true);
|
|
126
|
-
expect(sizeInBytes(sizeColumn(worktree)) < 1048576).toBe(true);
|
|
127
|
-
} finally {
|
|
128
|
-
rmSync(root, {
|
|
129
|
-
recursive: true,
|
|
130
|
-
force: true
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
});
|
|
134
|
-
export {};
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
import { appendFileSync, existsSync, mkdirSync, statSync } from "node:fs";
|
|
2
|
-
import { dirname, resolve } from "node:path";
|
|
3
|
-
import { fileURLToPath } from "node:url";
|
|
4
|
-
// runtime/skills/show-me-your-work/scripts/log.ts
|
|
5
|
-
/**
|
|
6
|
-
* Append one well-formed row to a show-me-your-work decision log (TSV).
|
|
7
|
-
*
|
|
8
|
-
* A Node replacement for the upstream `scripts/log.sh`. The observable rules are
|
|
9
|
-
* the shell script's, because `skills/show-me-your-work/SKILL.md` tells the model
|
|
10
|
-
* to read this file in a spreadsheet:
|
|
11
|
-
*
|
|
12
|
-
* - The header is written once, and only when the file is missing or empty.
|
|
13
|
-
* - Rows are appended, never rewritten. A network mount can make the emptiness
|
|
14
|
-
* test lie for a file that exists, and the cost is one stray header line, not
|
|
15
|
-
* the rows.
|
|
16
|
-
* - Tabs, CRs, and LFs inside a cell become spaces, so a cell always stays on one
|
|
17
|
-
* line and a row always has exactly six columns.
|
|
18
|
-
* - A cell starting with `=`, `+`, `-`, or `@` gets one leading quote. Evidence
|
|
19
|
-
* is attacker-controlled (PR titles, filenames, generated text), and a
|
|
20
|
-
* spreadsheet parses those four characters as a formula.
|
|
21
|
-
* - The row ends with a newline.
|
|
22
|
-
*
|
|
23
|
-
* No shell, no `date` process, and no `tr`/`printf` semantics to reproduce.
|
|
24
|
-
*/
|
|
25
|
-
/** The exact header line, including its trailing newline. */
|
|
26
|
-
const HEADER = "ts phase decision why evidence result\n";
|
|
27
|
-
/**
|
|
28
|
-
* Usage text.
|
|
29
|
-
*
|
|
30
|
-
* The shell script printed `log.sh` here because that was its own name. The
|
|
31
|
-
* shipped file is `log.mjs`, and an error that tells the reader to run a script
|
|
32
|
-
* this package no longer contains is worse than one that names the real path. The
|
|
33
|
-
* exit code and the stream are unchanged.
|
|
34
|
-
*/
|
|
35
|
-
const USAGE = "usage: log.mjs <logfile> <phase> <decision> <why> <evidence> <result>\n";
|
|
36
|
-
/** Formula-leading characters a spreadsheet would evaluate. */
|
|
37
|
-
const FORMULA_PREFIXES = [
|
|
38
|
-
"=",
|
|
39
|
-
"+",
|
|
40
|
-
"-",
|
|
41
|
-
"@"
|
|
42
|
-
];
|
|
43
|
-
/**
|
|
44
|
-
* One cell as the spreadsheet sees it.
|
|
45
|
-
*
|
|
46
|
-
* Exported because the skill's own contract is worth a unit test: the rules are
|
|
47
|
-
* about what lands in a cell, not about how a row is assembled.
|
|
48
|
-
*/
|
|
49
|
-
function cleanCell(value) {
|
|
50
|
-
const flat = value.replaceAll(/[\t\n\r]/g, " ");
|
|
51
|
-
return FORMULA_PREFIXES.some((prefix) => flat.startsWith(prefix)) ? `'${flat}` : flat;
|
|
52
|
-
}
|
|
53
|
-
/** `YYYY-MM-DDTHH:MM:SSZ`, the format `date -u +%Y-%m-%dT%H:%M:%SZ` prints. */
|
|
54
|
-
function timestamp(now = /* @__PURE__ */ new Date()) {
|
|
55
|
-
return now.toISOString().replace(/\.\d{3}Z$/, "Z");
|
|
56
|
-
}
|
|
57
|
-
/** Read whether a file is missing or empty, treating any read failure as empty. */
|
|
58
|
-
function isEmptyOrMissing(logfile) {
|
|
59
|
-
if (!existsSync(logfile)) return true;
|
|
60
|
-
try {
|
|
61
|
-
return statSync(logfile).size === 0;
|
|
62
|
-
} catch {
|
|
63
|
-
return true;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Append one row.
|
|
68
|
-
*
|
|
69
|
-
* @param logfile - target TSV; its parent directories are created as needed.
|
|
70
|
-
* @param cells - exactly five cell values: phase, decision, why, evidence, result.
|
|
71
|
-
* @param now - injectable clock, so the timestamp format is testable.
|
|
72
|
-
* @returns the row written, without re-reading the file.
|
|
73
|
-
* @throws {TypeError} when `cells` does not hold exactly five values.
|
|
74
|
-
*/
|
|
75
|
-
function appendDecisionRow(logfile, cells, now = /* @__PURE__ */ new Date()) {
|
|
76
|
-
if (cells.length !== 5) throw new TypeError(`expected 5 cells after the logfile, received ${cells.length}`);
|
|
77
|
-
const absolute = resolve(logfile);
|
|
78
|
-
const directory = dirname(absolute);
|
|
79
|
-
if (directory !== "" && !existsSync(directory)) mkdirSync(directory, { recursive: true });
|
|
80
|
-
if (isEmptyOrMissing(absolute)) appendFileSync(absolute, HEADER);
|
|
81
|
-
const row = `${[timestamp(now), ...cells.map(cleanCell)].join(" ")}\n`;
|
|
82
|
-
appendFileSync(absolute, row);
|
|
83
|
-
return row;
|
|
84
|
-
}
|
|
85
|
-
/** Run the CLI. Returns the process exit code. */
|
|
86
|
-
function main(argv, io = {
|
|
87
|
-
stdout: (value) => process.stdout.write(value),
|
|
88
|
-
stderr: (value) => process.stderr.write(value)
|
|
89
|
-
}) {
|
|
90
|
-
if (argv.length !== 6) {
|
|
91
|
-
io.stderr(USAGE);
|
|
92
|
-
return 1;
|
|
93
|
-
}
|
|
94
|
-
const [logfile, ...cells] = argv;
|
|
95
|
-
try {
|
|
96
|
-
appendDecisionRow(logfile, cells);
|
|
97
|
-
return 0;
|
|
98
|
-
} catch (error) {
|
|
99
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
100
|
-
io.stderr(`log.mjs: ${message}\n`);
|
|
101
|
-
return 1;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
const entryPoint = process.argv[1];
|
|
105
|
-
if (entryPoint !== void 0 && resolve(entryPoint) === fileURLToPath(import.meta.url)) process.exitCode = main(process.argv.slice(2));
|
|
106
|
-
export { HEADER, USAGE, appendDecisionRow, cleanCell, main, timestamp };
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { expect } from "../../poteto-mode/scripts/expect.mjs";
|
|
2
|
-
import "../../poteto-mode/scripts/support.mjs";
|
|
3
|
-
import { HEADER, appendDecisionRow, cleanCell, main, timestamp } from "./log.mjs";
|
|
4
|
-
import { mkdtempSync, readFileSync, rmSync } from "node:fs";
|
|
5
|
-
import { tmpdir } from "node:os";
|
|
6
|
-
import { join } from "node:path";
|
|
7
|
-
import { test } from "node:test";
|
|
8
|
-
// runtime/skills/show-me-your-work/scripts/log.test.ts
|
|
9
|
-
test("writes the header once and appends a clean row", () => {
|
|
10
|
-
const directory = mkdtempSync(join(tmpdir(), "pstack-log-"));
|
|
11
|
-
const file = join(directory, "nested", "decisions.tsv");
|
|
12
|
-
try {
|
|
13
|
-
appendDecisionRow(file, [
|
|
14
|
-
"build",
|
|
15
|
-
"=cmd",
|
|
16
|
-
"why here",
|
|
17
|
-
"ev\nidence",
|
|
18
|
-
"@result"
|
|
19
|
-
], /* @__PURE__ */ new Date("2026-10-28T10:00:00.123Z"));
|
|
20
|
-
appendDecisionRow(file, [
|
|
21
|
-
"build",
|
|
22
|
-
"second",
|
|
23
|
-
"why",
|
|
24
|
-
"evidence",
|
|
25
|
-
"result"
|
|
26
|
-
], /* @__PURE__ */ new Date("2026-10-28T10:00:01Z"));
|
|
27
|
-
const lines = readFileSync(file, "utf8").split("\n");
|
|
28
|
-
expect(lines[0]).toBe(HEADER.trimEnd());
|
|
29
|
-
expect(lines[1]).toBe("2026-10-28T10:00:00Z build '=cmd why here ev idence '@result");
|
|
30
|
-
expect(lines[2]).toBe("2026-10-28T10:00:01Z build second why evidence result");
|
|
31
|
-
expect(lines.filter((line) => line === HEADER.trimEnd())).toHaveLength(1);
|
|
32
|
-
} finally {
|
|
33
|
-
rmSync(directory, {
|
|
34
|
-
recursive: true,
|
|
35
|
-
force: true
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
test("cleans spreadsheet-sensitive cells and stamps UTC", () => {
|
|
40
|
-
expect(cleanCell("=SUM(A1)")).toBe("'=SUM(A1)");
|
|
41
|
-
expect(cleanCell("+1")).toBe("'+1");
|
|
42
|
-
expect(cleanCell("-1")).toBe("'-1");
|
|
43
|
-
expect(cleanCell("@x")).toBe("'@x");
|
|
44
|
-
expect(cleanCell("plain")).toBe("plain");
|
|
45
|
-
expect(timestamp(/* @__PURE__ */ new Date("2026-10-28T10:00:00.999Z"))).toBe("2026-10-28T10:00:00Z");
|
|
46
|
-
});
|
|
47
|
-
test("usage errors exit 1", () => {
|
|
48
|
-
const errors = [];
|
|
49
|
-
const code = main([], {
|
|
50
|
-
stdout: () => {},
|
|
51
|
-
stderr: (value) => errors.push(value)
|
|
52
|
-
});
|
|
53
|
-
expect(code).toBe(1);
|
|
54
|
-
expect(errors.join("")).toContain("usage: log.mjs");
|
|
55
|
-
});
|
|
56
|
-
export {};
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { RERUN_STATES } from "../ir.mjs";
|
|
2
|
-
// runtime/skills/statechart/scripts/backends/cfg.ts
|
|
3
|
-
function configText(sections, extra) {
|
|
4
|
-
const lines = [];
|
|
5
|
-
for (const s of sections) lines.push(`${s.key} ${s.tokens.join(" ")}`);
|
|
6
|
-
lines.push(...extra);
|
|
7
|
-
return lines.join("\n");
|
|
8
|
-
}
|
|
9
|
-
const boundRun = (module) => [
|
|
10
|
-
`---- MODULE ChartBound ----`,
|
|
11
|
-
`EXTENDS ${module}`,
|
|
12
|
-
`ChartTLC == INSTANCE TLC`,
|
|
13
|
-
`ChartNaturals == INSTANCE Naturals`,
|
|
14
|
-
`ChartBound == ChartNaturals!<(ChartTLC!TLCGet("distinct"), ${RERUN_STATES})`,
|
|
15
|
-
`====`
|
|
16
|
-
].join("\n");
|
|
17
|
-
function chartRun({ module, variables, invariants }, tag) {
|
|
18
|
-
const every = [];
|
|
19
|
-
for (const name of invariants) every.push(`(IF ~${name} THEN {"${name}"} ELSE {}) \\cup `);
|
|
20
|
-
return [
|
|
21
|
-
`---- MODULE ChartRun ----`,
|
|
22
|
-
`EXTENDS ${module}`,
|
|
23
|
-
`ChartTLC == INSTANCE TLC`,
|
|
24
|
-
`ChartNaturals == INSTANCE Naturals`,
|
|
25
|
-
`ChartBudget == ChartNaturals!<=(ChartTLC!TLCGet("distinct"), 500)`,
|
|
26
|
-
`ChartBroken == ${every.join("")}{}`,
|
|
27
|
-
`ChartMark == ChartBroken = {} \\/ ChartTLC!PrintT(<<"${tag}", <<${variables.join(", ")}>>, ChartBroken>>)`,
|
|
28
|
-
`====`
|
|
29
|
-
].join("\n");
|
|
30
|
-
}
|
|
31
|
-
export { boundRun, chartRun, configText };
|
|
@@ -1,186 +0,0 @@
|
|
|
1
|
-
import { append, byText, tupleKey } from "../ir.mjs";
|
|
2
|
-
// runtime/skills/statechart/scripts/backends/mermaid.ts
|
|
3
|
-
const BLANK = /\p{White_Space}/u;
|
|
4
|
-
const SAFE = /^[\p{L}\p{N} !'()+,\-./=?[\]"_|@{}:\\^%<>]$/u;
|
|
5
|
-
const HAZARD = /:(?=:|$|\S*#)|\\(?=n)|%(?=%)|<(?=[\p{L}/!?])|_(?![\p{L}\p{N}])|(?<![\p{L}\p{N}])_/giu;
|
|
6
|
-
const DIRECTION = /(direction)\s+(?=LR|RL|TB|BT)/gi;
|
|
7
|
-
const DOUBLE_BRACKET = /\[(?=\[)/g;
|
|
8
|
-
const C4 = /C4(?=Container|Component|Dynamic|Deployment)/g;
|
|
9
|
-
const UNDRAWN = /[\0\x80-\x9f]/;
|
|
10
|
-
const REWRITTEN = ["fl°", "¶ß"];
|
|
11
|
-
const MARKER = /(?<=marker-end=)"/g;
|
|
12
|
-
const firstOf = /* @__PURE__ */ new Map();
|
|
13
|
-
for (const pair of REWRITTEN) {
|
|
14
|
-
const [first, second] = [...pair].map((c) => c.codePointAt(0) ?? 0);
|
|
15
|
-
firstOf.set(second, first);
|
|
16
|
-
}
|
|
17
|
-
const KEPT = 0;
|
|
18
|
-
const BLANKED = 1;
|
|
19
|
-
const DROPPED = 2;
|
|
20
|
-
const CODED = 3;
|
|
21
|
-
const JOINS = 4;
|
|
22
|
-
const kindOf = (n) => {
|
|
23
|
-
const c = String.fromCodePoint(n);
|
|
24
|
-
const kind = c === " " ? KEPT : BLANK.test(c) ? BLANKED : UNDRAWN.test(c) ? DROPPED : SAFE.test(c) ? KEPT : CODED;
|
|
25
|
-
return firstOf.has(n) ? kind | JOINS : kind;
|
|
26
|
-
};
|
|
27
|
-
const ASCII = Uint8Array.from({ length: 128 }, (_, n) => kindOf(n));
|
|
28
|
-
const wide = /* @__PURE__ */ new Map();
|
|
29
|
-
const kindAt = (n) => {
|
|
30
|
-
if (n < 128) return ASCII[n];
|
|
31
|
-
let kind = wide.get(n);
|
|
32
|
-
if (kind === void 0) wide.set(n, kind = kindOf(n));
|
|
33
|
-
return kind;
|
|
34
|
-
};
|
|
35
|
-
const encode = (s, ref) => {
|
|
36
|
-
let out = "";
|
|
37
|
-
let run = 0;
|
|
38
|
-
let last = -1;
|
|
39
|
-
for (let i = 0; i < s.length;) {
|
|
40
|
-
let n = s.charCodeAt(i);
|
|
41
|
-
let width = 1;
|
|
42
|
-
if (n >= 55296 && n <= 57343) {
|
|
43
|
-
const low = s.charCodeAt(i + 1);
|
|
44
|
-
if (n <= 56319 && low >= 56320 && low <= 57343) {
|
|
45
|
-
n = 65536 + (n - 55296 << 10) + (low - 56320);
|
|
46
|
-
width = 2;
|
|
47
|
-
} else n = 65533;
|
|
48
|
-
}
|
|
49
|
-
let kind = kindAt(n);
|
|
50
|
-
if (kind === DROPPED) {
|
|
51
|
-
out += s.slice(run, i);
|
|
52
|
-
run = i + width;
|
|
53
|
-
} else {
|
|
54
|
-
const joined = kind >= JOINS && firstOf.get(n) === last;
|
|
55
|
-
kind &= -5;
|
|
56
|
-
if (joined || kind !== KEPT) {
|
|
57
|
-
out += s.slice(run, i);
|
|
58
|
-
if (joined) out += ref(8288);
|
|
59
|
-
if (kind === KEPT) run = i;
|
|
60
|
-
else {
|
|
61
|
-
out += kind === BLANKED ? " " : ref(n);
|
|
62
|
-
run = i + width;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
last = n;
|
|
66
|
-
}
|
|
67
|
-
i += width;
|
|
68
|
-
}
|
|
69
|
-
return out + s.slice(run);
|
|
70
|
-
};
|
|
71
|
-
const code = (s, ref) => encode(s, ref).replace(MARKER, `${ref(8288)}"`).replace(HAZARD, (c) => ref(c.charCodeAt(0)));
|
|
72
|
-
const esc = (s, quoted = false) => {
|
|
73
|
-
const plain = code(s, (n) => `#${n};`);
|
|
74
|
-
const out = quoted ? plain.replaceAll("\"", "#34;") : plain;
|
|
75
|
-
if (!out.trim()) return "#32;";
|
|
76
|
-
const turned = out.replace(DIRECTION, "$1#32;");
|
|
77
|
-
const opened = turned.includes("[[") ? turned.replace(DOUBLE_BRACKET, "#91;") : turned;
|
|
78
|
-
return opened.includes("C4") ? opened.replace(C4, "C#52;") : opened;
|
|
79
|
-
};
|
|
80
|
-
const or = (names) => [...names].sort(byText).join(" or ");
|
|
81
|
-
const MARK_STYLES = {
|
|
82
|
-
breaks: "fill:#ffecee,stroke:#e72e3b,stroke-width:2.5px,color:#cd2834",
|
|
83
|
-
mayBreak: "fill:#fff3e6,stroke:#e8730c,stroke-width:2.5px,color:#b85a06"
|
|
84
|
-
};
|
|
85
|
-
function mermaidLines(chart) {
|
|
86
|
-
let next = 0;
|
|
87
|
-
const marks = [];
|
|
88
|
-
const used = /* @__PURE__ */ new Set();
|
|
89
|
-
const rules = {
|
|
90
|
-
breaks: /* @__PURE__ */ new Set(),
|
|
91
|
-
mayBreak: /* @__PURE__ */ new Set()
|
|
92
|
-
};
|
|
93
|
-
const region = (r) => {
|
|
94
|
-
const out = [];
|
|
95
|
-
const topIds = /* @__PURE__ */ new Map();
|
|
96
|
-
const nestedIds = /* @__PURE__ */ new Map();
|
|
97
|
-
const id = (path) => {
|
|
98
|
-
const top = path.length === 1;
|
|
99
|
-
const named = top ? topIds : nestedIds;
|
|
100
|
-
const k = top ? path[0] : tupleKey(path);
|
|
101
|
-
let s = named.get(k);
|
|
102
|
-
if (s === void 0) named.set(k, s = `s${next++}`);
|
|
103
|
-
return s;
|
|
104
|
-
};
|
|
105
|
-
const known = /* @__PURE__ */ new Map();
|
|
106
|
-
const idOf = (path) => {
|
|
107
|
-
let s = known.get(path);
|
|
108
|
-
if (s === void 0) known.set(path, s = id(path));
|
|
109
|
-
return s;
|
|
110
|
-
};
|
|
111
|
-
const tree = (prefix, indent, below) => {
|
|
112
|
-
const heads = /* @__PURE__ */ new Map();
|
|
113
|
-
for (const s of below) append(heads, s.path[prefix.length], s);
|
|
114
|
-
for (const [head, under] of heads) {
|
|
115
|
-
const path = [...prefix, head];
|
|
116
|
-
let leaf;
|
|
117
|
-
const inner = [];
|
|
118
|
-
for (const s of under) if (s.path.length > path.length) inner.push(s);
|
|
119
|
-
else leaf = s;
|
|
120
|
-
if (inner.length) {
|
|
121
|
-
out.push(`${indent}state "${esc(head, true)}" as ${id(path)} {`);
|
|
122
|
-
tree(path, indent + " ", inner);
|
|
123
|
-
out.push(`${indent}}`);
|
|
124
|
-
} else if (leaf) {
|
|
125
|
-
const sid = idOf(leaf.path);
|
|
126
|
-
out.push(`${indent}${sid}: ${esc(head)}`);
|
|
127
|
-
let mark = leaf.breaks.length && !leaf.works ? "mayBreak" : void 0;
|
|
128
|
-
if (mark) {
|
|
129
|
-
for (const b of leaf.breaks) if (b.always) mark = "breaks";
|
|
130
|
-
}
|
|
131
|
-
if (mark) for (const b of leaf.breaks) rules[mark].add(b.rule.name);
|
|
132
|
-
const trail = [leaf.lead && "bugPath", leaf.repeats && "repeats"];
|
|
133
|
-
const color = leaf.group === void 0 ? void 0 : chart.colors[String(leaf.group)];
|
|
134
|
-
for (const cls of [
|
|
135
|
-
color,
|
|
136
|
-
mark,
|
|
137
|
-
...trail
|
|
138
|
-
]) if (cls) {
|
|
139
|
-
used.add(cls);
|
|
140
|
-
marks.push(` class ${sid} ${cls}`);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
};
|
|
145
|
-
tree([], " ", r.states);
|
|
146
|
-
for (const s of r.states) if (s.start) out.push(` [*] --> ${idOf(s.path)}`);
|
|
147
|
-
for (const s of r.steps) out.push(` ${idOf(s.from)} --> ${idOf(s.to)}: ${esc(s.label + (s.when ? ` [${s.when}]` : ""))}`);
|
|
148
|
-
return out;
|
|
149
|
-
};
|
|
150
|
-
let body;
|
|
151
|
-
if (chart.regions.length > 1) {
|
|
152
|
-
body = [` state "At the same time" as all {`];
|
|
153
|
-
for (const [i, r] of chart.regions.entries()) {
|
|
154
|
-
if (i) body.push(" --");
|
|
155
|
-
body.push(` state "${esc(r.name, true)}" as r${i} {`);
|
|
156
|
-
for (const line of region(r)) body.push(` ${line}`);
|
|
157
|
-
body.push(" }");
|
|
158
|
-
}
|
|
159
|
-
body.push(" }");
|
|
160
|
-
} else body = region(chart.regions[0]);
|
|
161
|
-
const legend = [];
|
|
162
|
-
for (const entry of [
|
|
163
|
-
...Object.entries(chart.colors),
|
|
164
|
-
[`Breaks ${or(rules.breaks)}`, "breaks"],
|
|
165
|
-
[`Breaks ${or(rules.mayBreak)} in some cases`, "mayBreak"],
|
|
166
|
-
[`Path to the ${or(chart.paths)} bug`, "bugPath"],
|
|
167
|
-
[`Repeats forever, so ${or(chart.loops)} breaks`, "repeats"]
|
|
168
|
-
]) if (used.has(entry[1])) legend.push(entry);
|
|
169
|
-
const lines = [];
|
|
170
|
-
const title = chart.title && code(chart.title, (n) => `fl°°${n}¶ß`).replaceAll("<", "fl°°60¶ß");
|
|
171
|
-
if (title) lines.push("---", `title: ${JSON.stringify(title)}`, "---");
|
|
172
|
-
lines.push("stateDiagram-v2");
|
|
173
|
-
if (chart.regions.length > 1) lines.push(" direction LR");
|
|
174
|
-
if (legend.length) {
|
|
175
|
-
lines.push(` state "Legend" as legend {`);
|
|
176
|
-
for (const [i, [text]] of legend.entries()) lines.push(` lg${i}: ${esc(text)}`);
|
|
177
|
-
lines.push(" }");
|
|
178
|
-
for (const [i, [, cls]] of legend.entries()) lines.push(` class lg${i} ${cls}`);
|
|
179
|
-
}
|
|
180
|
-
for (const line of body) lines.push(line);
|
|
181
|
-
for (const [cls, style] of Object.entries(MARK_STYLES)) if (used.has(cls)) lines.push(` classDef ${cls} ${style}`);
|
|
182
|
-
for (const line of marks) lines.push(line);
|
|
183
|
-
return lines;
|
|
184
|
-
}
|
|
185
|
-
const mermaid = (chart) => mermaidLines(chart).join("\n");
|
|
186
|
-
export { mermaid, mermaidLines };
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { EC, LEVEL } from "../ir.mjs";
|
|
2
|
-
// runtime/skills/statechart/scripts/backends/plain-text.ts
|
|
3
|
-
const PREFIX = {
|
|
4
|
-
[LEVEL.ERROR]: "Error: ",
|
|
5
|
-
[LEVEL.TLCBUG]: "TLC Bug: ",
|
|
6
|
-
[LEVEL.WARNING]: "Warning: ",
|
|
7
|
-
[LEVEL.STATE]: "State "
|
|
8
|
-
};
|
|
9
|
-
const MINUTE = 6e4;
|
|
10
|
-
const HOUR = 36e5;
|
|
11
|
-
const DAY = 864e5;
|
|
12
|
-
const pad = (n) => String(n).padStart(2, "0");
|
|
13
|
-
function runtime(ms) {
|
|
14
|
-
const t = new Date(ms > DAY ? ms - DAY : ms);
|
|
15
|
-
const [hh, mm, ss] = [
|
|
16
|
-
t.getUTCHours(),
|
|
17
|
-
t.getUTCMinutes(),
|
|
18
|
-
t.getUTCSeconds()
|
|
19
|
-
].map(pad);
|
|
20
|
-
if (ms > DAY) return `${Math.floor((t.getTime() - Date.UTC(t.getUTCFullYear(), 0, 1)) / DAY) + 1}d ${hh}h`;
|
|
21
|
-
if (ms > HOUR) return `${hh}h ${mm}min`;
|
|
22
|
-
if (ms > MINUTE) return `${mm}min ${ss}s`;
|
|
23
|
-
return `${ss}s`;
|
|
24
|
-
}
|
|
25
|
-
const firstLine = ({ code, level }, line) => {
|
|
26
|
-
if (code === EC.TLC_BACK_TO_STATE) return line.replace(/^(\d+): Back to state: /, "Back to state $1: ");
|
|
27
|
-
if (code === EC.TLC_FINISHED) return line.replace(/^Finished in (\d+)ms/, (_, ms) => `Finished in ${runtime(Number(ms))}`);
|
|
28
|
-
return (PREFIX[level] ?? "") + line;
|
|
29
|
-
};
|
|
30
|
-
const render = (m) => (m.beforeMarker ?? "") + firstLine(m, m.body.map((part) => typeof part === "string" ? part : render(part)).join("\n"));
|
|
31
|
-
function* printed(parts) {
|
|
32
|
-
let warned = false;
|
|
33
|
-
let progress;
|
|
34
|
-
for (const part of parts) {
|
|
35
|
-
if (progress?.body.length && (typeof part === "string" || part.code !== EC.TLC_STATS)) yield render(progress);
|
|
36
|
-
progress = void 0;
|
|
37
|
-
if (typeof part === "string") {
|
|
38
|
-
yield part;
|
|
39
|
-
continue;
|
|
40
|
-
}
|
|
41
|
-
if (part.code === EC.TLC_SANY_START || part.code === EC.TLC_SANY_END) continue;
|
|
42
|
-
if (part.code === EC.TLC_PROGRESS_STATS) progress = part;
|
|
43
|
-
else if (part.body.length) yield render(part);
|
|
44
|
-
if (part.level === LEVEL.WARNING && !warned) {
|
|
45
|
-
yield "(Use the -nowarning option to disable this warning.)";
|
|
46
|
-
warned = true;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
if (progress?.body.length) yield render(progress);
|
|
50
|
-
}
|
|
51
|
-
function* plainText(parts) {
|
|
52
|
-
let chunk = "";
|
|
53
|
-
for (const line of printed(parts)) {
|
|
54
|
-
chunk += `${line}\n`;
|
|
55
|
-
if (chunk.length >= 16777216) {
|
|
56
|
-
yield chunk;
|
|
57
|
-
chunk = "";
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
if (chunk) yield chunk;
|
|
61
|
-
}
|
|
62
|
-
export { plainText, runtime };
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import { RERUN_STATES, hasSection, list, must, ruleKey } from "../ir.mjs";
|
|
2
|
-
// runtime/skills/statechart/scripts/backends/report.ts
|
|
3
|
-
const stepsOf = (story) => {
|
|
4
|
-
const path = [];
|
|
5
|
-
for (const { step, state } of story) {
|
|
6
|
-
const parts = [];
|
|
7
|
-
for (const [name, names] of Object.entries(state)) parts.push((name ? `${name} ` : "") + names.join(" / "));
|
|
8
|
-
path.push({
|
|
9
|
-
step,
|
|
10
|
-
state: parts.join(", ")
|
|
11
|
-
});
|
|
12
|
-
}
|
|
13
|
-
return path;
|
|
14
|
-
};
|
|
15
|
-
const forever = (loop, stutters) => {
|
|
16
|
-
const quoted = /* @__PURE__ */ new Set();
|
|
17
|
-
for (const p of loop) quoted.add(`"${p.state}"`);
|
|
18
|
-
const runs = [...quoted];
|
|
19
|
-
if (stutters) return `The run stops in ${runs[0]} forever.`;
|
|
20
|
-
return runs.length === 1 ? `The run stays in ${runs[0]} forever.` : `The run loops through ${list(runs)} forever.`;
|
|
21
|
-
};
|
|
22
|
-
const fenced = (text) => [
|
|
23
|
-
"```",
|
|
24
|
-
text,
|
|
25
|
-
"```"
|
|
26
|
-
].join("\n");
|
|
27
|
-
function report({ spec, graph, paths, rules, properties, stop, drawing, states }, found, chart, stories) {
|
|
28
|
-
let size = 0;
|
|
29
|
-
let arrows = 0;
|
|
30
|
-
for (const r of chart?.regions ?? []) {
|
|
31
|
-
size += r.states.length;
|
|
32
|
-
arrows += r.steps.length;
|
|
33
|
-
}
|
|
34
|
-
let past = 0;
|
|
35
|
-
let pastSteps = 0;
|
|
36
|
-
let excluded = 0;
|
|
37
|
-
for (const s of graph.states.values()) if (s.excluded) excluded++;
|
|
38
|
-
else if (s.past) past++;
|
|
39
|
-
for (const t of graph.steps) if (must(graph.states, t.to).past) pastSteps++;
|
|
40
|
-
const includes = (n) => chart ? `, and the chart includes ${n === 1 ? "it" : "them"}` : "";
|
|
41
|
-
const out = [
|
|
42
|
-
`# ${spec.module}`,
|
|
43
|
-
"",
|
|
44
|
-
paths ? `TLC reached ${states.complete && !states.cut && states.distinct > 500 ? `${states.distinct.toLocaleString("en-US")} states, more than` : "more states than"} the chart budget of 500, so ${chart ? `the chart draws only the bug paths: ${size} states and ${arrows} arrows` : "the command wrote no chart.mmd"}.` : `TLC reached ${graph.states.size - past - excluded} states and ${graph.steps.length - pastSteps} steps. The chart draws ${size} states and ${arrows} arrows.`
|
|
45
|
-
];
|
|
46
|
-
if (drawing) out.push(`TLC stopped the drawing run with exit ${drawing.status}, so the chart draws only the states that it reached before it stopped.`);
|
|
47
|
-
if (!paths && !drawing && graph.states.size === past + excluded) out.push(states.initial ? "Every initial state is outside the constraints, so TLC explores none of them." : "TLC found no state that satisfies Init, so no state can break a rule.");
|
|
48
|
-
if (past) out.push(`${past === 1 ? "1 state outside the constraints ends" : `${past} states outside the constraints each end`} a rule's path${includes(past)}. TLC checks the rules in a state outside the constraints, but it does not explore past it.`);
|
|
49
|
-
if (excluded) out.push(`${excluded === 1 ? "1 step that the constraints exclude ends" : `${excluded} steps that the constraints exclude each end`} a rule's path${includes(excluded)}. TLC checks the rules after such a step, but it does not take the step.`);
|
|
50
|
-
if (chart?.inside) out.push(`The chart does not draw ${chart.inside} steps that stay in one chart state.`);
|
|
51
|
-
if (chart?.quiet) out.push(`The view hides ${chart.quiet} steps, so the chart does not draw them.`);
|
|
52
|
-
for (const { rule, outcome } of rules) if (!paths && rule.kind === "deadlock" && outcome === "broken" && (drawing || hasSection(spec, "CONSTRAINT", "ACTION_CONSTRAINT"))) out.push(drawing ? "The chart marks only the deadlock that TLC reports, because the drawing run stopped before it reached every state." : "The chart marks only the deadlock that TLC reports. Under a CONSTRAINT or an ACTION_CONSTRAINT, a state with no step in the chart can still have steps that the constraints leave out, and TLC does not count it as a deadlock.");
|
|
53
|
-
if (chart?.lie) out.push(`${chart.lie} So the chart draws parent states in place of regions.`);
|
|
54
|
-
out.push(...chart?.notes ?? []);
|
|
55
|
-
const merged = [];
|
|
56
|
-
for (const k of ["VIEW", "SYMMETRY"]) if (hasSection(spec, k)) merged.push(k);
|
|
57
|
-
if (chart && merged.length) out.push(`With ${list(merged)}, TLC keeps one representative for each group of states that it counts as the same. An arrow can lead to the representative rather than to the state that the step reaches.`);
|
|
58
|
-
for (const bug of found) {
|
|
59
|
-
const steps = `${bug.path.length} step${bug.path.length === 1 ? "" : "s"}`;
|
|
60
|
-
out.push("", `## ${bug.rule.name} breaks`);
|
|
61
|
-
out.push(bug.rule.kind === "property" ? `TLC's counterexample is in tlc-${bug.rule.name}.out. It has ${steps}:` : `The shortest path has ${steps}:`);
|
|
62
|
-
const path = stepsOf(must(stories, bug));
|
|
63
|
-
for (const [i, p] of path.entries()) out.push(`${i}. ${p.step ? `${p.step}: ` : ""}${p.state}`);
|
|
64
|
-
if (bug.loop !== void 0) out.push(forever(path.slice(bug.loop), bug.stutters));
|
|
65
|
-
}
|
|
66
|
-
const drawn = /* @__PURE__ */ new Set();
|
|
67
|
-
for (const b of found) drawn.add(ruleKey(b.rule));
|
|
68
|
-
const holds = [];
|
|
69
|
-
const unchecked = [];
|
|
70
|
-
for (const { rule, outcome, messages } of [...rules, ...properties]) if (outcome === "holds") holds.push(rule.name);
|
|
71
|
-
else if (outcome === "not checked") unchecked.push(rule.name);
|
|
72
|
-
else if (messages && !drawn.has(ruleKey(rule))) out.push("", `## ${rule.name} breaks`, `TLC found a counterexample. It is in tlc-${rule.name}.out.`);
|
|
73
|
-
if (holds.length) out.push("", "## Rules that hold", holds.join(", "));
|
|
74
|
-
if (unchecked.length) out.push("", "## Rules not checked", unchecked.join(", "));
|
|
75
|
-
if (unchecked.length && states.cut) out.push(`After the first break, each TLC run stops at ${RERUN_STATES.toLocaleString("en-US")} distinct states. A run reached that bound before it checked ${unchecked.length === 1 ? "this rule" : "these rules"} in every state.`);
|
|
76
|
-
if (stop) out.push(...unchecked.length ? [`TLC stopped with exit ${stop.status} before it checked ${unchecked.length === 1 ? "this rule" : "these rules"}:`] : [
|
|
77
|
-
"",
|
|
78
|
-
"## TLC stopped",
|
|
79
|
-
`TLC stopped with exit ${stop.status}:`
|
|
80
|
-
], fenced(stop.message));
|
|
81
|
-
for (const p of properties) if (p.outcome === "holds" && p.initialOnly) out.push(`TLC checked ${p.rule.name} only in the initial states, because it has no [], <>, or ~>. List it as an INVARIANT to check every state.`);
|
|
82
|
-
return out.join("\n");
|
|
83
|
-
}
|
|
84
|
-
export { report };
|