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.
- package/LICENSE +23 -0
- package/index.ts +87 -0
- package/package.json +62 -4
- package/pstack/.claude-plugin/icon.png +0 -0
- package/pstack/.claude-plugin/plugin.json +35 -0
- package/pstack/.codex-plugin/plugin.json +50 -0
- package/pstack/README.md +26 -0
- package/pstack/agents/comment-sicko.md +32 -0
- package/pstack/agents/poteto-agent.md +8 -0
- package/pstack/agents/thermo-nuclear-code-quality-review-subagent.md +23 -0
- package/pstack/agents/thermo-nuclear-review-subagent.md +28 -0
- package/pstack/assets/pstack-icon.png +0 -0
- package/pstack/assets/pstack-icon.prompt.txt +8 -0
- package/pstack/hooks/codex-hooks.json +16 -0
- package/pstack/hooks/hooks.json +15 -0
- package/pstack/hooks/session-start-context.md +17 -0
- package/pstack/hooks/session-start.ps1 +33 -0
- package/pstack/hooks/session-start.sh +34 -0
- package/pstack/models.json +261 -0
- package/pstack/skills/architect/SKILL.md +85 -0
- package/pstack/skills/architect/references/design-red-flags.md +57 -0
- package/pstack/skills/architect/references/rationale-template.md +35 -0
- package/pstack/skills/architect/references/runner-prompt.md +20 -0
- package/pstack/skills/arena/SKILL.md +55 -0
- package/pstack/skills/automate-me/SKILL.md +104 -0
- package/pstack/skills/benchmark-checklist/SKILL.md +39 -0
- package/pstack/skills/blast-radius/SKILL.md +50 -0
- package/pstack/skills/bro/SKILL.md +7 -0
- package/pstack/skills/correct/SKILL.md +32 -0
- package/pstack/skills/create-formal-verification-skill/SKILL.md +43 -0
- package/pstack/skills/create-verification-skill/SKILL.md +44 -0
- package/pstack/skills/create-verification-skill/references/feature-map-example/README.md +47 -0
- package/pstack/skills/create-verification-skill/references/feature-map-example/create-note.md +39 -0
- package/pstack/skills/create-verification-skill/references/feature-map-example/search.md +45 -0
- package/pstack/skills/deslop/SKILL.md +22 -0
- package/pstack/skills/figure-it-out/SKILL.md +52 -0
- package/pstack/skills/fix-ci/SKILL.md +29 -0
- package/pstack/skills/fix-merge-conflicts/SKILL.md +32 -0
- package/pstack/skills/get-pr-comments/SKILL.md +23 -0
- package/pstack/skills/how/SKILL.md +43 -0
- package/pstack/skills/how/references/explainer-prompt.md +55 -0
- package/pstack/skills/how/references/explorer-prompt.md +35 -0
- package/pstack/skills/in-your-own-words/SKILL.md +7 -0
- package/pstack/skills/interrogate/SKILL.md +37 -0
- package/pstack/skills/ketchup/SKILL.md +43 -0
- package/pstack/skills/ketchup-video/SKILL.md +29 -0
- package/pstack/skills/maintain-formal-verification-skill/SKILL.md +58 -0
- package/pstack/skills/maintain-verification-skill/SKILL.md +39 -0
- package/pstack/skills/make-pr-easy-to-review/SKILL.md +59 -0
- package/pstack/skills/no-comments/SKILL.md +24 -0
- package/pstack/skills/poteto-help/SKILL.md +162 -0
- package/pstack/skills/poteto-help/references/prompting.md +51 -0
- package/pstack/skills/poteto-help/references/recipes.md +51 -0
- package/pstack/skills/poteto-mode/SKILL.md +186 -0
- package/pstack/skills/poteto-mode/brief.md +70 -0
- package/pstack/skills/poteto-mode/playbooks/authoring-a-skill.md +12 -0
- package/pstack/skills/poteto-mode/playbooks/autonomous-run.md +13 -0
- package/pstack/skills/poteto-mode/playbooks/autopilot-full.md +25 -0
- package/pstack/skills/poteto-mode/playbooks/autopilot-stack.md +8 -0
- package/pstack/skills/poteto-mode/playbooks/babysit.md +23 -0
- package/pstack/skills/poteto-mode/playbooks/bug-fix.md +15 -0
- package/pstack/skills/poteto-mode/playbooks/eval.md +25 -0
- package/pstack/skills/poteto-mode/playbooks/feature.md +21 -0
- package/pstack/skills/poteto-mode/playbooks/hillclimb.md +21 -0
- package/pstack/skills/poteto-mode/playbooks/investigation.md +14 -0
- package/pstack/skills/poteto-mode/playbooks/multi-phase-plan.md +155 -0
- package/pstack/skills/poteto-mode/playbooks/opening-a-pr.md +34 -0
- package/pstack/skills/poteto-mode/playbooks/orchestrate.md +25 -0
- package/pstack/skills/poteto-mode/playbooks/pause-safely.md +10 -0
- package/pstack/skills/poteto-mode/playbooks/perf-issue.md +25 -0
- package/pstack/skills/poteto-mode/playbooks/prototype.md +14 -0
- package/pstack/skills/poteto-mode/playbooks/refactoring.md +16 -0
- package/pstack/skills/poteto-mode/playbooks/runtime-forensics.md +11 -0
- package/pstack/skills/poteto-mode/playbooks/session-pickup.md +11 -0
- package/pstack/skills/poteto-mode/playbooks/shipping.md +12 -0
- package/pstack/skills/poteto-mode/playbooks/trace-forensics.md +14 -0
- package/pstack/skills/poteto-mode/playbooks/visual-parity.md +11 -0
- package/pstack/skills/poteto-mode/playbooks/worktree-cleanup.md +12 -0
- package/pstack/skills/poteto-mode/references/bugbot-triage.md +142 -0
- package/pstack/skills/poteto-mode/references/licenses/LICENSE +23 -0
- package/pstack/skills/poteto-mode/references/licenses/LICENSE-cursor-team-kit +21 -0
- package/pstack/skills/poteto-mode/references/licenses/LICENSE-thermos +21 -0
- package/pstack/skills/poteto-mode/references/licenses/NOTICE.md +14 -0
- package/pstack/skills/poteto-mode/scripts/.prettierrc.json +3 -0
- package/pstack/skills/poteto-mode/scripts/bootstrap.ts +62 -0
- package/pstack/skills/poteto-mode/scripts/bun.lock +67 -0
- package/pstack/skills/poteto-mode/scripts/check-plan.mjs +205 -0
- package/pstack/skills/poteto-mode/scripts/check-plan.test.ts +110 -0
- package/pstack/skills/poteto-mode/scripts/package.json +12 -0
- package/pstack/skills/poteto-mode/scripts/resolve-codex-transcript +4 -0
- package/pstack/skills/poteto-mode/scripts/resolve-codex-transcript.ts +314 -0
- package/pstack/skills/poteto-mode/scripts/test-utils/node-test.ts +204 -0
- package/pstack/skills/poteto-mode/scripts/watch-pr/cli.test.ts +225 -0
- package/pstack/skills/poteto-mode/scripts/watch-pr/cli.ts +231 -0
- package/pstack/skills/poteto-mode/scripts/watch-pr/fakes.test-helper.ts +142 -0
- package/pstack/skills/poteto-mode/scripts/watch-pr/github.test.ts +498 -0
- package/pstack/skills/poteto-mode/scripts/watch-pr/github.ts +760 -0
- package/pstack/skills/poteto-mode/scripts/watch-pr/policy.test.ts +483 -0
- package/pstack/skills/poteto-mode/scripts/watch-pr/policy.ts +1023 -0
- package/pstack/skills/poteto-mode/scripts/watch-pr/render.ts +188 -0
- package/pstack/skills/poteto-mode/scripts/watch-pr/settle.test.ts +552 -0
- package/pstack/skills/poteto-mode/scripts/watch-pr/settle.ts +406 -0
- package/pstack/skills/poteto-mode/scripts/watch-pr/tsconfig.json +18 -0
- package/pstack/skills/poteto-mode/scripts/watch-pr/types.compile.ts +93 -0
- package/pstack/skills/poteto-mode/scripts/watch-pr/types.ts +444 -0
- package/pstack/skills/poteto-mode/scripts/watch-pr/verdicts.test.ts +796 -0
- package/pstack/skills/poteto-mode/scripts/watch-pr/watch-pr +3 -0
- package/pstack/skills/poteto-mode/scripts/worktree-audit.sh +170 -0
- package/pstack/skills/principle-attack-the-premise/SKILL.md +21 -0
- package/pstack/skills/principle-boundary-discipline/SKILL.md +34 -0
- package/pstack/skills/principle-build-the-lever/SKILL.md +23 -0
- package/pstack/skills/principle-encode-lessons-in-structure/SKILL.md +11 -0
- package/pstack/skills/principle-exhaust-the-design-space/SKILL.md +9 -0
- package/pstack/skills/principle-experience-first/SKILL.md +19 -0
- package/pstack/skills/principle-explain-the-number/SKILL.md +18 -0
- package/pstack/skills/principle-fix-root-causes/SKILL.md +21 -0
- package/pstack/skills/principle-foundational-thinking/SKILL.md +21 -0
- package/pstack/skills/principle-guard-the-context-window/SKILL.md +12 -0
- package/pstack/skills/principle-laziness-protocol/SKILL.md +10 -0
- package/pstack/skills/principle-make-operations-idempotent/SKILL.md +22 -0
- package/pstack/skills/principle-migrate-callers-then-delete-legacy-apis/SKILL.md +14 -0
- package/pstack/skills/principle-minimize-reader-load/SKILL.md +18 -0
- package/pstack/skills/principle-model-the-domain/SKILL.md +24 -0
- package/pstack/skills/principle-never-block-on-the-human/SKILL.md +15 -0
- package/pstack/skills/principle-outcome-oriented-execution/SKILL.md +21 -0
- package/pstack/skills/principle-prove-it-works/SKILL.md +22 -0
- package/pstack/skills/principle-redesign-from-first-principles/SKILL.md +16 -0
- package/pstack/skills/principle-separate-before-serializing-shared-state/SKILL.md +16 -0
- package/pstack/skills/principle-sequence-verifiable-units/SKILL.md +17 -0
- package/pstack/skills/principle-subtract-before-you-add/SKILL.md +18 -0
- package/pstack/skills/principle-test-behavior-not-implementation/SKILL.md +20 -0
- package/pstack/skills/principle-type-system-discipline/SKILL.md +13 -0
- package/pstack/skills/recall/SKILL.md +35 -0
- package/pstack/skills/reflect/SKILL.md +86 -0
- package/pstack/skills/reflect/references/divergent-reviewer.md +38 -0
- package/pstack/skills/reflect/references/judgment-reviewer.md +37 -0
- package/pstack/skills/reflect/references/synthesizer.md +56 -0
- package/pstack/skills/reflect/references/tooling-reviewer.md +48 -0
- package/pstack/skills/reflect/scripts/find-transcript.mjs +245 -0
- package/pstack/skills/setup-pstack/SKILL.md +77 -0
- package/pstack/skills/setup-pstack/scripts/read-sheet.sh +14 -0
- package/pstack/skills/setup-pstack/scripts/t3-sheet.mjs +169 -0
- package/pstack/skills/sharpen/SKILL.md +16 -0
- package/pstack/skills/show-me-your-work/SKILL.md +82 -0
- package/pstack/skills/show-me-your-work/references/decision-log-template.tsv +1 -0
- package/pstack/skills/show-me-your-work/scripts/log.sh +42 -0
- package/pstack/skills/statechart/SKILL.md +82 -0
- package/pstack/skills/statechart/references/render.md +93 -0
- package/pstack/skills/statechart/scripts/backends/cfg.ts +33 -0
- package/pstack/skills/statechart/scripts/backends/mermaid.ts +201 -0
- package/pstack/skills/statechart/scripts/backends/plain-text.ts +72 -0
- package/pstack/skills/statechart/scripts/backends/report.ts +177 -0
- package/pstack/skills/statechart/scripts/frontends/config.ts +276 -0
- package/pstack/skills/statechart/scripts/frontends/dot.ts +74 -0
- package/pstack/skills/statechart/scripts/frontends/marks.ts +93 -0
- package/pstack/skills/statechart/scripts/frontends/messages.ts +52 -0
- package/pstack/skills/statechart/scripts/frontends/spec.ts +114 -0
- package/pstack/skills/statechart/scripts/frontends/trace.ts +24 -0
- package/pstack/skills/statechart/scripts/frontends/value.ts +166 -0
- package/pstack/skills/statechart/scripts/frontends/verdict.ts +40 -0
- package/pstack/skills/statechart/scripts/frontends/view.ts +119 -0
- package/pstack/skills/statechart/scripts/ir.ts +547 -0
- package/pstack/skills/statechart/scripts/package.json +11 -0
- package/pstack/skills/statechart/scripts/passes/annotate.ts +128 -0
- package/pstack/skills/statechart/scripts/passes/label.ts +269 -0
- package/pstack/skills/statechart/scripts/passes/lift.ts +85 -0
- package/pstack/skills/statechart/scripts/passes/loop-check.ts +68 -0
- package/pstack/skills/statechart/scripts/passes/paths.ts +60 -0
- package/pstack/skills/statechart/scripts/passes/reach.ts +135 -0
- package/pstack/skills/statechart/scripts/passes/region-check.ts +97 -0
- package/pstack/skills/statechart/scripts/passes/regions.ts +295 -0
- package/pstack/skills/statechart/scripts/pipeline.ts +76 -0
- package/pstack/skills/statechart/scripts/run.ts +481 -0
- package/pstack/skills/statechart/scripts/statechart +29 -0
- package/pstack/skills/statechart/scripts/statechart.ts +164 -0
- package/pstack/skills/statechart/scripts/test/ConfigOracle.java +63 -0
- package/pstack/skills/statechart/scripts/test/chart.test.ts +1210 -0
- package/pstack/skills/statechart/scripts/test/charts/Braces.mmd +7 -0
- package/pstack/skills/statechart/scripts/test/charts/Escapes.mmd +11 -0
- package/pstack/skills/statechart/scripts/test/charts/Phases.mmd +29 -0
- package/pstack/skills/statechart/scripts/test/cli.test.ts +1314 -0
- package/pstack/skills/statechart/scripts/test/config-fuzz.test.ts +263 -0
- package/pstack/skills/statechart/scripts/test/corpus/Counter/ChartRun.out +57 -0
- package/pstack/skills/statechart/scripts/test/corpus/Counter/Counter.cfg +3 -0
- package/pstack/skills/statechart/scripts/test/corpus/Counter/Counter.tla +10 -0
- package/pstack/skills/statechart/scripts/test/corpus/Counter/chart.mmd +9 -0
- package/pstack/skills/statechart/scripts/test/corpus/Counter/graph.dot +16 -0
- package/pstack/skills/statechart/scripts/test/corpus/Counter/report.md +7 -0
- package/pstack/skills/statechart/scripts/test/corpus/Counter/sany.out +2 -0
- package/pstack/skills/statechart/scripts/test/corpus/Counter/verdict-1.out +49 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterAction/ChartRun.out +60 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterAction/CounterAction.cfg +4 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterAction/CounterAction.tla +22 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterAction/chart.mmd +26 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterAction/graph.dot +19 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterAction/report.md +20 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterAction/sany.out +2 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterAction/verdict-1.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterAction/verdict-1.out +56 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterAction/verdict-2.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterAction/verdict-2.out +82 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterAction/verdict-3.out +57 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/ChartRun.out +59 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/CounterDeadlock.cfg +3 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/CounterDeadlock.tla +11 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/chart.mmd +22 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/graph.dot +16 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/report.md +17 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/sany.out +2 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/verdict-1.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/verdict-1.out +56 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/verdict-2.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterDeadlock/verdict-2.out +77 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterFan/ChartRun.out +69 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterFan/CounterFan.cfg +2 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterFan/CounterFan.tla +11 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterFan/chart.mmd +85 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterFan/graph.dot +70 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterFan/report.md +12 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterFan/sany.out +2 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterFan/verdict-1.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterFan/verdict-1.out +67 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterFan/verdict-2.out +57 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterGuard/ChartRun.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterGuard/ChartRun.out +85 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterGuard/CounterGuard.cfg +6 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterGuard/CounterGuard.tla +13 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterGuard/chart.mmd +5 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterGuard/graph.dot +10 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterGuard/report.md +31 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterGuard/sany.out +2 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterGuard/verdict-1.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterGuard/verdict-1.out +64 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterGuard/verdict-2.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterGuard/verdict-2.out +77 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterInitPast/ChartRun.out +55 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterInitPast/CounterInitPast.cfg +3 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterInitPast/CounterInitPast.tla +10 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterInitPast/chart.mmd +12 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterInitPast/graph.dot +6 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterInitPast/report.md +12 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterInitPast/sany.out +2 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterInitPast/verdict-1.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterInitPast/verdict-1.out +33 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterInitPast/verdict-2.out +54 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterInitPastHolds/ChartRun.out +54 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterInitPastHolds/CounterInitPastHolds.cfg +3 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterInitPastHolds/CounterInitPastHolds.tla +10 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterInitPastHolds/chart.mmd +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterInitPastHolds/graph.dot +6 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterInitPastHolds/report.md +7 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterInitPastHolds/sany.out +2 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterInitPastHolds/verdict-1.out +46 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterInstance/ChartRun.out +59 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterInstance/CounterInstance.cfg +2 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterInstance/CounterInstance.tla +10 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterInstance/CounterSteps.tla +6 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterInstance/chart.mmd +17 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterInstance/graph.dot +15 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterInstance/report.md +14 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterInstance/sany.out +3 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterInstance/verdict-1.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterInstance/verdict-1.out +78 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterJump/ChartRun.out +59 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterJump/CounterJump.cfg +3 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterJump/CounterJump.tla +19 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterJump/chart.mmd +26 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterJump/graph.dot +22 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterJump/report.md +12 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterJump/sany.out +2 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterJump/verdict-1.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterJump/verdict-1.out +58 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterJump/verdict-2.out +57 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterLoop/ChartRun.out +57 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterLoop/CounterLoop.cfg +2 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterLoop/CounterLoop.tla +11 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterLoop/chart.mmd +17 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterLoop/graph.dot +15 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterLoop/report.md +14 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterLoop/sany.out +2 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterLoop/verdict-1.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterLoop/verdict-1.out +76 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterOrder/ChartRun.out +59 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterOrder/CounterOrder.cfg +3 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterOrder/CounterOrder.tla +11 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterOrder/chart.mmd +19 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterOrder/graph.dot +10 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterOrder/report.md +15 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterOrder/sany.out +2 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterOrder/verdict-1.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterOrder/verdict-1.out +56 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterOrder/verdict-2.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterOrder/verdict-2.out +67 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterRules/ChartRun.out +62 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterRules/CounterRules.cfg +6 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterRules/CounterRules.tla +24 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterRules/Moves.tla +5 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterRules/chart.mmd +22 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterRules/graph.dot +10 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterRules/report.md +23 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterRules/sany.out +3 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterRules/verdict-1.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterRules/verdict-1.out +58 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterRules/verdict-2.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterRules/verdict-2.out +66 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterRules/verdict-3.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterRules/verdict-3.out +74 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterRules/verdict-4.out +59 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterStart/ChartRun.out +58 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterStart/CounterStart.cfg +3 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterStart/CounterStart.tla +15 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterStart/chart.mmd +18 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterStart/graph.dot +13 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterStart/report.md +11 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterStart/sany.out +2 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterStart/verdict-1.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterStart/verdict-1.out +33 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterStart/verdict-2.out +57 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterStop/ChartRun.out +57 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterStop/CounterStop.cfg +3 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterStop/CounterStop.tla +15 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterStop/chart.mmd +7 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterStop/graph.dot +13 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterStop/report.md +6 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterStop/sany.out +2 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterStop/verdict-1.out +49 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterTie/ChartRun.out +61 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterTie/CounterTie.cfg +4 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterTie/CounterTie.tla +14 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterTie/chart.mmd +30 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterTie/graph.dot +19 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterTie/report.md +27 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterTie/sany.out +2 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterTie/verdict-1.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterTie/verdict-1.out +56 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterTie/verdict-2.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterTie/verdict-2.out +64 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterTie/verdict-3.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterTie/verdict-3.out +87 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterTie/verdict-4.out +57 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterTieInGraph/ChartRun.out +60 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterTieInGraph/CounterTieInGraph.cfg +3 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterTieInGraph/CounterTieInGraph.tla +12 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterTieInGraph/chart.mmd +23 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterTieInGraph/graph.dot +19 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterTieInGraph/report.md +11 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterTieInGraph/sany.out +2 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterTieInGraph/verdict-1.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterTieInGraph/verdict-1.out +56 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterTieInGraph/verdict-2.out +57 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterView/ChartRun.out +61 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterView/CounterView.cfg +4 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterView/CounterView.tla +14 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterView/chart.mmd +23 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterView/graph.dot +19 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterView/report.md +27 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterView/sany.out +2 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterView/verdict-1.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterView/verdict-1.out +56 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterView/verdict-2.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterView/verdict-2.out +64 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterView/verdict-3.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterView/verdict-3.out +87 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterView/verdict-4.out +57 -0
- package/pstack/skills/statechart/scripts/test/corpus/CounterView/view.mjs +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/DieHard/ChartRun.out +59 -0
- package/pstack/skills/statechart/scripts/test/corpus/DieHard/DieHard.cfg +4 -0
- package/pstack/skills/statechart/scripts/test/corpus/DieHard/DieHard.tla +38 -0
- package/pstack/skills/statechart/scripts/test/corpus/DieHard/chart.mmd +92 -0
- package/pstack/skills/statechart/scripts/test/corpus/DieHard/graph.dot +126 -0
- package/pstack/skills/statechart/scripts/test/corpus/DieHard/report.md +17 -0
- package/pstack/skills/statechart/scripts/test/corpus/DieHard/sany.out +2 -0
- package/pstack/skills/statechart/scripts/test/corpus/DieHard/verdict-1.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/DieHard/verdict-1.out +91 -0
- package/pstack/skills/statechart/scripts/test/corpus/DieHard/verdict-2.out +57 -0
- package/pstack/skills/statechart/scripts/test/corpus/FirstRule/ChartRun.out +61 -0
- package/pstack/skills/statechart/scripts/test/corpus/FirstRule/FirstRule.cfg +6 -0
- package/pstack/skills/statechart/scripts/test/corpus/FirstRule/FirstRule.tla +11 -0
- package/pstack/skills/statechart/scripts/test/corpus/FirstRule/chart.mmd +22 -0
- package/pstack/skills/statechart/scripts/test/corpus/FirstRule/graph.dot +16 -0
- package/pstack/skills/statechart/scripts/test/corpus/FirstRule/report.md +25 -0
- package/pstack/skills/statechart/scripts/test/corpus/FirstRule/sany.out +2 -0
- package/pstack/skills/statechart/scripts/test/corpus/FirstRule/verdict-1.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/FirstRule/verdict-1.out +56 -0
- package/pstack/skills/statechart/scripts/test/corpus/FirstRule/verdict-2.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/FirstRule/verdict-2.out +64 -0
- package/pstack/skills/statechart/scripts/test/corpus/FirstRule/verdict-3.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/FirstRule/verdict-3.out +64 -0
- package/pstack/skills/statechart/scripts/test/corpus/FirstRule/verdict-4.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/FirstRule/verdict-4.out +77 -0
- package/pstack/skills/statechart/scripts/test/corpus/HiddenClock/ChartRun.out +57 -0
- package/pstack/skills/statechart/scripts/test/corpus/HiddenClock/HiddenClock.cfg +4 -0
- package/pstack/skills/statechart/scripts/test/corpus/HiddenClock/HiddenClock.tla +11 -0
- package/pstack/skills/statechart/scripts/test/corpus/HiddenClock/chart.mmd +13 -0
- package/pstack/skills/statechart/scripts/test/corpus/HiddenClock/graph.dot +12 -0
- package/pstack/skills/statechart/scripts/test/corpus/HiddenClock/report.md +11 -0
- package/pstack/skills/statechart/scripts/test/corpus/HiddenClock/sany.out +2 -0
- package/pstack/skills/statechart/scripts/test/corpus/HiddenClock/verdict-1.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/HiddenClock/verdict-1.out +72 -0
- package/pstack/skills/statechart/scripts/test/corpus/Login/ChartRun.out +57 -0
- package/pstack/skills/statechart/scripts/test/corpus/Login/Login.cfg +3 -0
- package/pstack/skills/statechart/scripts/test/corpus/Login/Login.tla +62 -0
- package/pstack/skills/statechart/scripts/test/corpus/Login/chart.mmd +27 -0
- package/pstack/skills/statechart/scripts/test/corpus/Login/graph.dot +40 -0
- package/pstack/skills/statechart/scripts/test/corpus/Login/report.md +7 -0
- package/pstack/skills/statechart/scripts/test/corpus/Login/sany.out +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/Login/verdict-1.out +47 -0
- package/pstack/skills/statechart/scripts/test/corpus/Login/view.mjs +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/LoginGuarded/ChartRun.out +57 -0
- package/pstack/skills/statechart/scripts/test/corpus/LoginGuarded/LoginGuarded.cfg +2 -0
- package/pstack/skills/statechart/scripts/test/corpus/LoginGuarded/LoginGuarded.tla +64 -0
- package/pstack/skills/statechart/scripts/test/corpus/LoginGuarded/chart.mmd +28 -0
- package/pstack/skills/statechart/scripts/test/corpus/LoginGuarded/graph.dot +37 -0
- package/pstack/skills/statechart/scripts/test/corpus/LoginGuarded/report.md +8 -0
- package/pstack/skills/statechart/scripts/test/corpus/LoginGuarded/sany.out +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/LoginGuarded/verdict-1.out +47 -0
- package/pstack/skills/statechart/scripts/test/corpus/LoginGuarded/view.mjs +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/LoginParallel/ChartRun.out +60 -0
- package/pstack/skills/statechart/scripts/test/corpus/LoginParallel/LoginParallel.cfg +3 -0
- package/pstack/skills/statechart/scripts/test/corpus/LoginParallel/LoginParallel.tla +64 -0
- package/pstack/skills/statechart/scripts/test/corpus/LoginParallel/chart.mmd +44 -0
- package/pstack/skills/statechart/scripts/test/corpus/LoginParallel/graph.dot +58 -0
- package/pstack/skills/statechart/scripts/test/corpus/LoginParallel/report.md +17 -0
- package/pstack/skills/statechart/scripts/test/corpus/LoginParallel/sany.out +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/LoginParallel/verdict-1.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/LoginParallel/verdict-1.out +83 -0
- package/pstack/skills/statechart/scripts/test/corpus/LoginParallel/verdict-2.out +57 -0
- package/pstack/skills/statechart/scripts/test/corpus/LoginParallel/view.mjs +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/ChartRun.out +60 -0
- package/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/MediaPlayer.cfg +3 -0
- package/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/MediaPlayer.tla +103 -0
- package/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/chart.mmd +43 -0
- package/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/graph.dot +93 -0
- package/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/report.md +14 -0
- package/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/sany.out +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/verdict-1.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/verdict-1.out +59 -0
- package/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/verdict-2.out +72 -0
- package/pstack/skills/statechart/scripts/test/corpus/MediaPlayer/view.mjs +3 -0
- package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerFixed/ChartRun.out +57 -0
- package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerFixed/MediaPlayerFixed.cfg +2 -0
- package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerFixed/MediaPlayerFixed.tla +100 -0
- package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerFixed/chart.mmd +31 -0
- package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerFixed/graph.dot +85 -0
- package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerFixed/report.md +9 -0
- package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerFixed/sany.out +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerFixed/verdict-1.out +47 -0
- package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerFixed/view.mjs +3 -0
- package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/ChartRun.out +59 -0
- package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/MediaPlayer.tla +103 -0
- package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/MediaPlayerProps.cfg +3 -0
- package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/MediaPlayerProps.tla +6 -0
- package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/chart.mmd +42 -0
- package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/graph.dot +93 -0
- package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/report.md +19 -0
- package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/sany.out +2 -0
- package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/verdict-1.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/verdict-1.out +61 -0
- package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/verdict-2.out +59 -0
- package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/verdict-3.out +61 -0
- package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/verdict-4.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/verdict-4.out +66 -0
- package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/verdict-5.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/verdict-5.out +58 -0
- package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/verdict-6.out +49 -0
- package/pstack/skills/statechart/scripts/test/corpus/MediaPlayerProps/view.mjs +3 -0
- package/pstack/skills/statechart/scripts/test/corpus/PickWorker/ChartRun.out +57 -0
- package/pstack/skills/statechart/scripts/test/corpus/PickWorker/PickWorker.cfg +6 -0
- package/pstack/skills/statechart/scripts/test/corpus/PickWorker/PickWorker.tla +11 -0
- package/pstack/skills/statechart/scripts/test/corpus/PickWorker/chart.mmd +5 -0
- package/pstack/skills/statechart/scripts/test/corpus/PickWorker/graph.dot +11 -0
- package/pstack/skills/statechart/scripts/test/corpus/PickWorker/report.md +7 -0
- package/pstack/skills/statechart/scripts/test/corpus/PickWorker/sany.out +5 -0
- package/pstack/skills/statechart/scripts/test/corpus/PickWorker/verdict-1.out +70 -0
- package/pstack/skills/statechart/scripts/test/corpus/Shadow/ChartRun.out +61 -0
- package/pstack/skills/statechart/scripts/test/corpus/Shadow/Shadow.cfg +4 -0
- package/pstack/skills/statechart/scripts/test/corpus/Shadow/Shadow.tla +11 -0
- package/pstack/skills/statechart/scripts/test/corpus/Shadow/ShadowLib.tla +6 -0
- package/pstack/skills/statechart/scripts/test/corpus/Shadow/ShadowSub.tla +3 -0
- package/pstack/skills/statechart/scripts/test/corpus/Shadow/chart.mmd +9 -0
- package/pstack/skills/statechart/scripts/test/corpus/Shadow/graph.dot +16 -0
- package/pstack/skills/statechart/scripts/test/corpus/Shadow/report.md +8 -0
- package/pstack/skills/statechart/scripts/test/corpus/Shadow/sany.out +4 -0
- package/pstack/skills/statechart/scripts/test/corpus/Shadow/verdict-1.out +65 -0
- package/pstack/skills/statechart/scripts/test/corpus/SpacedNames/ChartRun.out +59 -0
- package/pstack/skills/statechart/scripts/test/corpus/SpacedNames/SpacedNames.cfg +2 -0
- package/pstack/skills/statechart/scripts/test/corpus/SpacedNames/SpacedNames.tla +9 -0
- package/pstack/skills/statechart/scripts/test/corpus/SpacedNames/chart.mmd +23 -0
- package/pstack/skills/statechart/scripts/test/corpus/SpacedNames/graph.dot +17 -0
- package/pstack/skills/statechart/scripts/test/corpus/SpacedNames/report.md +15 -0
- package/pstack/skills/statechart/scripts/test/corpus/SpacedNames/sany.out +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/SpacedNames/verdict-1.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/SpacedNames/verdict-1.out +65 -0
- package/pstack/skills/statechart/scripts/test/corpus/SpacedNames/verdict-2.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/SpacedNames/verdict-2.out +75 -0
- package/pstack/skills/statechart/scripts/test/corpus/TwoPhase/ChartRun.out +69 -0
- package/pstack/skills/statechart/scripts/test/corpus/TwoPhase/TwoPhase.cfg +3 -0
- package/pstack/skills/statechart/scripts/test/corpus/TwoPhase/TwoPhase.tla +75 -0
- package/pstack/skills/statechart/scripts/test/corpus/TwoPhase/chart.mmd +60 -0
- package/pstack/skills/statechart/scripts/test/corpus/TwoPhase/graph.dot +297 -0
- package/pstack/skills/statechart/scripts/test/corpus/TwoPhase/report.md +20 -0
- package/pstack/skills/statechart/scripts/test/corpus/TwoPhase/sany.out +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/TwoPhase/verdict-1.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/TwoPhase/verdict-1.out +95 -0
- package/pstack/skills/statechart/scripts/test/corpus/TwoPhase/verdict-2.out +57 -0
- package/pstack/skills/statechart/scripts/test/corpus/TwoPhase/view.mjs +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/TwoPhaseFixed/ChartRun.out +57 -0
- package/pstack/skills/statechart/scripts/test/corpus/TwoPhaseFixed/TwoPhaseFixed.cfg +3 -0
- package/pstack/skills/statechart/scripts/test/corpus/TwoPhaseFixed/TwoPhaseFixed.tla +75 -0
- package/pstack/skills/statechart/scripts/test/corpus/TwoPhaseFixed/chart.mmd +37 -0
- package/pstack/skills/statechart/scripts/test/corpus/TwoPhaseFixed/graph.dot +223 -0
- package/pstack/skills/statechart/scripts/test/corpus/TwoPhaseFixed/report.md +11 -0
- package/pstack/skills/statechart/scripts/test/corpus/TwoPhaseFixed/sany.out +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/TwoPhaseFixed/verdict-1.out +47 -0
- package/pstack/skills/statechart/scripts/test/corpus/TwoPhaseFixed/view.mjs +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/TypeGuard/ChartRun.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/TypeGuard/ChartRun.out +75 -0
- package/pstack/skills/statechart/scripts/test/corpus/TypeGuard/TypeGuard.cfg +5 -0
- package/pstack/skills/statechart/scripts/test/corpus/TypeGuard/TypeGuard.tla +11 -0
- package/pstack/skills/statechart/scripts/test/corpus/TypeGuard/chart.mmd +18 -0
- package/pstack/skills/statechart/scripts/test/corpus/TypeGuard/graph.dot +14 -0
- package/pstack/skills/statechart/scripts/test/corpus/TypeGuard/report.md +29 -0
- package/pstack/skills/statechart/scripts/test/corpus/TypeGuard/sany.out +2 -0
- package/pstack/skills/statechart/scripts/test/corpus/TypeGuard/verdict-1.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/TypeGuard/verdict-1.out +64 -0
- package/pstack/skills/statechart/scripts/test/corpus/TypeGuard/verdict-2.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/TypeGuard/verdict-2.out +75 -0
- package/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/ChartRun.out +58 -0
- package/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/UserNoDeadlock.cfg +2 -0
- package/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/UserNoDeadlock.tla +8 -0
- package/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/chart.mmd +22 -0
- package/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/graph.dot +16 -0
- package/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/report.md +15 -0
- package/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/sany.out +2 -0
- package/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/verdict-1.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/verdict-1.out +56 -0
- package/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/verdict-2.exit +1 -0
- package/pstack/skills/statechart/scripts/test/corpus/UserNoDeadlock/verdict-2.out +77 -0
- package/pstack/skills/statechart/scripts/test/corpus.test.ts +403 -0
- package/pstack/skills/statechart/scripts/test/differential.test.ts +565 -0
- package/pstack/skills/statechart/scripts/test/grid/Grid.cfg +2 -0
- package/pstack/skills/statechart/scripts/test/grid/Grid.tla +9 -0
- package/pstack/skills/statechart/scripts/test/grid/sany.out +2 -0
- package/pstack/skills/statechart/scripts/test/java.ts +63 -0
- package/pstack/skills/statechart/scripts/test/labels.ts +643 -0
- package/pstack/skills/statechart/scripts/test/messages.test.ts +212 -0
- package/pstack/skills/statechart/scripts/test/pipeline.test.ts +270 -0
- package/pstack/skills/statechart/scripts/test/plain-tlc.test.ts +255 -0
- package/pstack/skills/statechart/scripts/test/render.test.ts +81 -0
- package/pstack/skills/statechart/scripts/test/tlc-out.test.ts +90 -0
- package/pstack/skills/statechart/scripts/test/tlc.ts +158 -0
- package/pstack/skills/statechart/scripts/tsconfig.json +11 -0
- package/pstack/skills/statechart/scripts/worker.ts +35 -0
- package/pstack/skills/swarm/SKILL.md +47 -0
- package/pstack/skills/tdd/SKILL.md +42 -0
- package/pstack/skills/teach/SKILL.md +21 -0
- package/pstack/skills/technical-writing/SKILL.md +106 -0
- package/pstack/skills/thermo-nuclear-code-quality-review/SKILL.md +192 -0
- package/pstack/skills/thermo-nuclear-review/SKILL.md +51 -0
- package/pstack/skills/thermos/SKILL.md +21 -0
- package/pstack/skills/typescript-best-practices/SKILL.md +31 -0
- package/pstack/skills/typescript-best-practices/references/patterns.md +328 -0
- package/pstack/skills/unslop/SKILL.md +62 -0
- package/pstack/skills/what-did-i-get-done/SKILL.md +31 -0
- package/pstack/skills/why/SKILL.md +105 -0
- package/pstack/skills/why/references/epistemics.md +71 -0
- package/pstack/skills/why/references/investigator-prompt.md +84 -0
- package/pstack/skills/why/references/source-playbook.md +17 -0
- package/pstack/skills/why/references/sources/code-archaeology.md +51 -0
- package/pstack/skills/why/references/sources/databricks.md +70 -0
- package/pstack/skills/why/references/sources/datadog.md +97 -0
- package/pstack/skills/why/references/sources/incident-postmortem.md +5 -0
- package/pstack/skills/why/references/sources/linear.md +48 -0
- package/pstack/skills/why/references/sources/notion.md +55 -0
- package/pstack/skills/why/references/sources/sentry.md +66 -0
- package/pstack/skills/why/references/sources/slack.md +17 -0
- package/pstack/skills/why/references/synthesizer-prompt.md +129 -0
- package/src/accounts.ts +527 -0
- package/src/bash-timeout.ts +63 -0
- package/src/bridge-trim.ts +109 -0
- package/src/brief.ts +280 -0
- package/src/cards.ts +65 -0
- package/src/child.ts +570 -0
- package/src/failures.ts +73 -0
- package/src/models.ts +1249 -0
- package/src/plan.ts +252 -0
- package/src/resources.ts +30 -0
- package/src/results.ts +92 -0
- package/src/resume.ts +143 -0
- package/src/session.ts +70 -0
- package/src/state.ts +124 -0
- package/src/t3-http.ts +140 -0
- package/src/t3-json.ts +50 -0
- package/src/t3-mcp.ts +188 -0
- package/src/tasks.ts +163 -0
- package/src/transcript.ts +17 -0
- package/src/usage.ts +145 -0
- package/README.md +0 -3
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import { test } from "node:test";
|
|
3
|
+
import { agrees, skip } from "./tlc.ts";
|
|
4
|
+
|
|
5
|
+
const late = [
|
|
6
|
+
"---- MODULE Late ----",
|
|
7
|
+
"EXTENDS Naturals, TLC",
|
|
8
|
+
"CONSTANT Mode",
|
|
9
|
+
"VARIABLES x",
|
|
10
|
+
"f == [i \\in 0..2 |-> 0]",
|
|
11
|
+
"Init == x = 0",
|
|
12
|
+
"Grow == x < 5 /\\ x' = x + 1",
|
|
13
|
+
'Bad == x = 3 /\\ \\/ Mode = "assert" /\\ Assert(FALSE, "late error") /\\ x\' = 0',
|
|
14
|
+
' \\/ Mode = "div" /\\ x\' = 1 \\div 0',
|
|
15
|
+
"Next == Grow \\/ Bad",
|
|
16
|
+
"Small == x < 1",
|
|
17
|
+
"Below == x < 2",
|
|
18
|
+
"InDomain == f[x] = 0",
|
|
19
|
+
"====",
|
|
20
|
+
];
|
|
21
|
+
const lateCfg = (mode: string, rules: string) =>
|
|
22
|
+
`CONSTANT Mode = "${mode}"\nINIT Init\nNEXT Next\nINVARIANTS ${rules}\n`;
|
|
23
|
+
|
|
24
|
+
test(
|
|
25
|
+
"a rule that breaks before another rule fails to evaluate breaks in either order",
|
|
26
|
+
{ skip },
|
|
27
|
+
() => {
|
|
28
|
+
const first = agrees("Late", { Late: late }, lateCfg("none", "Below InDomain"));
|
|
29
|
+
const last = agrees("Late", { Late: late }, lateCfg("none", "InDomain Below"));
|
|
30
|
+
assert.equal(first.status, 1);
|
|
31
|
+
assert.deepEqual(first.breaks, new Map([["Below", 2]]));
|
|
32
|
+
assert.deepEqual(first.holds, []);
|
|
33
|
+
assert.deepEqual(first.unchecked, ["InDomain", "NoDeadlock"]);
|
|
34
|
+
assert.deepEqual(last, first);
|
|
35
|
+
},
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
test("a rule that breaks before a step fails to evaluate breaks", { skip }, () => {
|
|
39
|
+
for (const mode of ["div", "assert"]) {
|
|
40
|
+
const v = agrees("Late", { Late: late }, lateCfg(mode, "Small"));
|
|
41
|
+
assert.equal(v.status, 1);
|
|
42
|
+
assert.deepEqual(v.breaks, new Map([["Small", 1]]));
|
|
43
|
+
assert.deepEqual(v.unchecked, ["NoDeadlock"]);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
const warnPath = (next: string) => [
|
|
48
|
+
"---- MODULE WarnPath ----",
|
|
49
|
+
"EXTENDS Naturals",
|
|
50
|
+
"VARIABLES x",
|
|
51
|
+
"f == [i \\in 0..1 |-> i]",
|
|
52
|
+
"Init == x = 0",
|
|
53
|
+
"One == x < 3 /\\ x' = x + 1",
|
|
54
|
+
"Two == x < 3 /\\ x' = x + 2",
|
|
55
|
+
`Next == ${next}`,
|
|
56
|
+
"Zero == f[x] = 0",
|
|
57
|
+
"====",
|
|
58
|
+
];
|
|
59
|
+
|
|
60
|
+
test("a rule that breaks before it fails to evaluate breaks", { skip }, () => {
|
|
61
|
+
const v = agrees(
|
|
62
|
+
"WarnPath",
|
|
63
|
+
{ WarnPath: warnPath("One \\/ Two") },
|
|
64
|
+
"INIT Init\nNEXT Next\nINVARIANT Zero\n",
|
|
65
|
+
);
|
|
66
|
+
assert.equal(v.status, 1);
|
|
67
|
+
assert.equal(v.breaks.get("Zero"), 1);
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
test("a rule that fails to evaluate before TLC reaches a break exits 2", { skip }, () => {
|
|
71
|
+
for (const deadlock of ["", "CHECK_DEADLOCK FALSE\n"]) {
|
|
72
|
+
const v = agrees(
|
|
73
|
+
"WarnPath",
|
|
74
|
+
{ WarnPath: warnPath("Two \\/ One") },
|
|
75
|
+
`INIT Init\nNEXT Next\nINVARIANT Zero\n${deadlock}`,
|
|
76
|
+
);
|
|
77
|
+
assert.equal(v.status, 2);
|
|
78
|
+
assert.deepEqual(v.holds, []);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
test("a rule that no verdict run checks stays not checked under a SYMMETRY", { skip }, () => {
|
|
83
|
+
const v = agrees(
|
|
84
|
+
"Hide",
|
|
85
|
+
{
|
|
86
|
+
Hide: [
|
|
87
|
+
"---- MODULE Hide ----",
|
|
88
|
+
"EXTENDS Naturals, TLC",
|
|
89
|
+
"CONSTANTS a, b, S",
|
|
90
|
+
"VARIABLES x, n",
|
|
91
|
+
"Perms == Permutations(S)",
|
|
92
|
+
"Init == x \\in S /\\ n = 0",
|
|
93
|
+
"Next == n < 4 /\\ n' = n + 1 /\\ UNCHANGED x",
|
|
94
|
+
"Early == n # 1",
|
|
95
|
+
"Bad == x = a",
|
|
96
|
+
'Boom == n < 3 \\/ Assert(FALSE, "boom")',
|
|
97
|
+
"====",
|
|
98
|
+
],
|
|
99
|
+
},
|
|
100
|
+
"CONSTANTS a = a b = b S = {a, b}\nSYMMETRY Perms\nINIT Init\nNEXT Next\nINVARIANTS Early Boom Bad\n",
|
|
101
|
+
);
|
|
102
|
+
assert.equal(v.status, 1);
|
|
103
|
+
assert.deepEqual(v.breaks, new Map([["Early", 1]]));
|
|
104
|
+
assert.deepEqual(v.holds, []);
|
|
105
|
+
assert.deepEqual(v.unchecked, ["Bad", "Boom", "NoDeadlock"]);
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
test("a deadlock breaks whatever shape the SPECIFICATION has", { skip }, () => {
|
|
109
|
+
const live = agrees(
|
|
110
|
+
"Live",
|
|
111
|
+
{
|
|
112
|
+
Live: [
|
|
113
|
+
"---- MODULE Live ----",
|
|
114
|
+
"EXTENDS Naturals",
|
|
115
|
+
"VARIABLE x",
|
|
116
|
+
"Init == x = 0",
|
|
117
|
+
"Next == x < 2 /\\ x' = x + 1",
|
|
118
|
+
"Spec == Init /\\ [][Next]_x",
|
|
119
|
+
"LiveSpec == Spec /\\ WF_x(Next)",
|
|
120
|
+
"TypeOK == x \\in 0..2",
|
|
121
|
+
"====",
|
|
122
|
+
],
|
|
123
|
+
},
|
|
124
|
+
"SPECIFICATION LiveSpec\nINVARIANT TypeOK\n",
|
|
125
|
+
);
|
|
126
|
+
assert.deepEqual(live.breaks, new Map([["NoDeadlock", 2]]));
|
|
127
|
+
assert.deepEqual(live.holds, ["TypeOK"]);
|
|
128
|
+
for (const next of ["[][Next \\/ Tick]_vars", "[][\\E i \\in 1..2 : Step(i)]_vars"]) {
|
|
129
|
+
const v = agrees(
|
|
130
|
+
"Shape",
|
|
131
|
+
{
|
|
132
|
+
Shape: [
|
|
133
|
+
"---- MODULE Shape ----",
|
|
134
|
+
"EXTENDS Naturals",
|
|
135
|
+
"VARIABLES x, t",
|
|
136
|
+
"vars == <<x, t>>",
|
|
137
|
+
"Init == x = 0 /\\ t = 0",
|
|
138
|
+
"Step(i) == x < 2 /\\ x' = x + i /\\ UNCHANGED t",
|
|
139
|
+
"Next == Step(1)",
|
|
140
|
+
"Tick == t < 1 /\\ t' = 1 /\\ UNCHANGED x",
|
|
141
|
+
`Spec == Init /\\ ${next}`,
|
|
142
|
+
"====",
|
|
143
|
+
],
|
|
144
|
+
},
|
|
145
|
+
"SPECIFICATION Spec\n",
|
|
146
|
+
);
|
|
147
|
+
assert.equal(v.status, 1);
|
|
148
|
+
assert.ok(v.breaks.has("NoDeadlock"));
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
test("a SPECIFICATION from an INSTANCE checks deadlock and finds none", { skip }, () => {
|
|
153
|
+
const v = agrees(
|
|
154
|
+
"Outer",
|
|
155
|
+
{
|
|
156
|
+
Inner: [
|
|
157
|
+
"---- MODULE Inner ----",
|
|
158
|
+
"EXTENDS Naturals",
|
|
159
|
+
"VARIABLE x",
|
|
160
|
+
"Spec == x = 0 /\\ [][x' = (x + 1) % 3]_x",
|
|
161
|
+
"====",
|
|
162
|
+
],
|
|
163
|
+
Outer: [
|
|
164
|
+
"---- MODULE Outer ----",
|
|
165
|
+
"VARIABLE x",
|
|
166
|
+
"I == INSTANCE Inner",
|
|
167
|
+
"Spec == I!Spec",
|
|
168
|
+
"====",
|
|
169
|
+
],
|
|
170
|
+
},
|
|
171
|
+
"SPECIFICATION Spec\n",
|
|
172
|
+
);
|
|
173
|
+
assert.equal(v.status, 0);
|
|
174
|
+
assert.deepEqual(v.holds, ["NoDeadlock"]);
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
test("a state at a CONSTRAINT bound is no deadlock", { skip }, () => {
|
|
178
|
+
const v = agrees(
|
|
179
|
+
"Bound",
|
|
180
|
+
{
|
|
181
|
+
Bound: [
|
|
182
|
+
"---- MODULE Bound ----",
|
|
183
|
+
"EXTENDS Naturals",
|
|
184
|
+
"VARIABLE x",
|
|
185
|
+
"Init == x = 0",
|
|
186
|
+
"Next == x' = x + 1",
|
|
187
|
+
"Small == x < 3",
|
|
188
|
+
"====",
|
|
189
|
+
],
|
|
190
|
+
},
|
|
191
|
+
"INIT Init\nNEXT Next\nCONSTRAINT Small\n",
|
|
192
|
+
);
|
|
193
|
+
assert.equal(v.status, 0);
|
|
194
|
+
assert.deepEqual(v.holds, ["NoDeadlock"]);
|
|
195
|
+
assert.doesNotMatch(v.chart, /^ {2}class s\d+ breaks$/m);
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
test(
|
|
199
|
+
"a model with no initial state passes as it does in TLC, and the report says why",
|
|
200
|
+
{ skip },
|
|
201
|
+
() => {
|
|
202
|
+
const v = agrees(
|
|
203
|
+
"NoInit",
|
|
204
|
+
{
|
|
205
|
+
NoInit: [
|
|
206
|
+
"---- MODULE NoInit ----",
|
|
207
|
+
"EXTENDS Naturals",
|
|
208
|
+
"VARIABLE x",
|
|
209
|
+
"Init == x = 0 /\\ x > 0",
|
|
210
|
+
"Next == x' = x + 1",
|
|
211
|
+
"Small == x < 3",
|
|
212
|
+
"====",
|
|
213
|
+
],
|
|
214
|
+
},
|
|
215
|
+
"INIT Init\nNEXT Next\nINVARIANT Small\n",
|
|
216
|
+
);
|
|
217
|
+
assert.equal(v.status, 0);
|
|
218
|
+
assert.deepEqual(v.holds, ["NoDeadlock", "Small"]);
|
|
219
|
+
assert.match(
|
|
220
|
+
v.report,
|
|
221
|
+
/^TLC found no state that satisfies Init, so no state can break a rule\.$/m,
|
|
222
|
+
);
|
|
223
|
+
},
|
|
224
|
+
);
|
|
225
|
+
|
|
226
|
+
test(
|
|
227
|
+
"a run after a break stops at the state bound and leaves its rules not checked",
|
|
228
|
+
{ skip },
|
|
229
|
+
() => {
|
|
230
|
+
const v = agrees(
|
|
231
|
+
"Cycle",
|
|
232
|
+
{
|
|
233
|
+
Cycle: [
|
|
234
|
+
"---- MODULE Cycle ----",
|
|
235
|
+
"EXTENDS Naturals",
|
|
236
|
+
"VARIABLE x",
|
|
237
|
+
"Next == x' = (x + 1) % 100005",
|
|
238
|
+
"Spec == x = 0 /\\ [][Next]_x /\\ WF_x(Next)",
|
|
239
|
+
"Early == x # 3",
|
|
240
|
+
"Back == []<>(x = 0)",
|
|
241
|
+
"====",
|
|
242
|
+
],
|
|
243
|
+
},
|
|
244
|
+
"SPECIFICATION Spec\nINVARIANT Early\nPROPERTY Back\n",
|
|
245
|
+
);
|
|
246
|
+
assert.equal(v.status, 1);
|
|
247
|
+
assert.deepEqual(v.breaks, new Map([["Early", 3]]));
|
|
248
|
+
assert.deepEqual(v.holds, []);
|
|
249
|
+
assert.deepEqual(v.unchecked, ["Back", "NoDeadlock"]);
|
|
250
|
+
assert.match(
|
|
251
|
+
v.report,
|
|
252
|
+
/^After the first break, each TLC run stops at 100,000 distinct states\./m,
|
|
253
|
+
);
|
|
254
|
+
},
|
|
255
|
+
);
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import { execFileSync } from "node:child_process";
|
|
3
|
+
import fs from "node:fs";
|
|
4
|
+
import { createRequire } from "node:module";
|
|
5
|
+
import os from "node:os";
|
|
6
|
+
import path from "node:path";
|
|
7
|
+
import { before, test } from "node:test";
|
|
8
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
9
|
+
import { fuzz, type Html, type Mermaid, type Render } from "./labels.ts";
|
|
10
|
+
|
|
11
|
+
const here = path.dirname(fileURLToPath(import.meta.url));
|
|
12
|
+
const charts = [];
|
|
13
|
+
for (const f of fs.readdirSync(path.join(here, "charts")))
|
|
14
|
+
charts.push(path.join(here, "charts", f));
|
|
15
|
+
for (const d of fs.readdirSync(path.join(here, "corpus")))
|
|
16
|
+
charts.push(path.join(here, "corpus", d, "chart.mmd"));
|
|
17
|
+
const guide = fs.readFileSync(path.join(here, "../../references/render.md"), "utf8");
|
|
18
|
+
const css = guide.match(/```css\n([\s\S]*?)```/);
|
|
19
|
+
assert.ok(css, "references/render.md has no css block");
|
|
20
|
+
const theme = css[1];
|
|
21
|
+
const cache = path.join(
|
|
22
|
+
process.env.XDG_CACHE_HOME ?? path.join(os.homedir(), ".cache"),
|
|
23
|
+
"statechart",
|
|
24
|
+
);
|
|
25
|
+
const install = (name: string, ...packages: string[]) => {
|
|
26
|
+
const dir = path.join(cache, name);
|
|
27
|
+
execFileSync(
|
|
28
|
+
"npm",
|
|
29
|
+
["install", "--prefix", dir, "--no-audit", "--no-fund", "--save-exact", ...packages],
|
|
30
|
+
{ stdio: ["ignore", "pipe", "pipe"] },
|
|
31
|
+
);
|
|
32
|
+
return createRequire(path.join(dir, "package.json"));
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
let render: Render;
|
|
36
|
+
let mermaid: Mermaid;
|
|
37
|
+
let html: Html;
|
|
38
|
+
before(async () => {
|
|
39
|
+
const pele = install("test-pele-1.9.0", "pele@1.9.0");
|
|
40
|
+
({ render } = await import(pathToFileURL(pele.resolve("pele")).href));
|
|
41
|
+
|
|
42
|
+
const parser = install("test-mermaid-11.16.0", "mermaid@11.16.0", "jsdom@26.1.0");
|
|
43
|
+
const { window } = new (parser("jsdom").JSDOM)("");
|
|
44
|
+
Object.assign(globalThis, { window, document: window.document, DOMParser: window.DOMParser });
|
|
45
|
+
mermaid = (await import(pathToFileURL(parser.resolve("mermaid")).href)).default;
|
|
46
|
+
html = (markup) => {
|
|
47
|
+
const t = window.document.createElement("template");
|
|
48
|
+
t.innerHTML = markup;
|
|
49
|
+
return t.content.textContent ?? "";
|
|
50
|
+
};
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
const classes = new Set<string>();
|
|
54
|
+
for (const chart of charts) {
|
|
55
|
+
const name = path.relative(here, chart);
|
|
56
|
+
const text = fs.readFileSync(chart, "utf8");
|
|
57
|
+
const marks = [...text.matchAll(/^ {2}class (\w+) (\w+)$/gm)];
|
|
58
|
+
for (const [, , mark] of marks) classes.add(mark);
|
|
59
|
+
|
|
60
|
+
test(`${name} renders in Pele 1.9.0 with each class on its node`, () => {
|
|
61
|
+
const { svg } = render(text);
|
|
62
|
+
assert.match(svg, /^<svg /);
|
|
63
|
+
for (const [, id, mark] of marks)
|
|
64
|
+
assert.match(svg, new RegExp(`class="pele-node[^"]* ${mark}\\b[^"]*" data-id="${id}"`), id);
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
test(`${name} parses in mermaid.js, which chat views use`, async () => {
|
|
68
|
+
await mermaid.parse(text);
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
test("random labels and colors keep their text and the chart's shape in Mermaid and Pele", async () => {
|
|
73
|
+
const { drawn, refused, failure } = await fuzz({ seed: 1, charts: 500, render, mermaid, html });
|
|
74
|
+
if (failure) assert.fail(failure);
|
|
75
|
+
assert.ok(drawn > 400 && refused > 20, `${drawn} charts drawn, ${refused} refused`);
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
test("the theme in references/render.md colors each class that the charts use", () => {
|
|
79
|
+
assert.ok(classes.size > 0);
|
|
80
|
+
for (const name of classes) assert.match(theme, new RegExp(`\\.pele \\.${name} rect \\{`), name);
|
|
81
|
+
});
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import { spawn } from "node:child_process";
|
|
3
|
+
import { once } from "node:events";
|
|
4
|
+
import fs from "node:fs";
|
|
5
|
+
import os from "node:os";
|
|
6
|
+
import path from "node:path";
|
|
7
|
+
import { test } from "node:test";
|
|
8
|
+
import { fileURLToPath } from "node:url";
|
|
9
|
+
import { plainText } from "../backends/plain-text.ts";
|
|
10
|
+
import { readMessages } from "../frontends/messages.ts";
|
|
11
|
+
|
|
12
|
+
const here = path.dirname(fileURLToPath(import.meta.url));
|
|
13
|
+
const corpus = path.join(here, "corpus");
|
|
14
|
+
const skip = !process.env.TLA2TOOLS && "set TLA2TOOLS to the path of tla2tools.jar to run TLC";
|
|
15
|
+
const read = (file: string) => fs.readFileSync(file, "utf8");
|
|
16
|
+
const maybe = (file: string) => (fs.existsSync(file) ? read(file) : "");
|
|
17
|
+
const plain = (text: string) => [...plainText(readMessages(text))].join("");
|
|
18
|
+
|
|
19
|
+
const steady = (text: string) =>
|
|
20
|
+
text
|
|
21
|
+
.replace(/"chart-[0-9a-f]{32}"/g, '"chart"')
|
|
22
|
+
.replace(/\bfp \d+ and seed -?\d+/g, "fp _ and seed _")
|
|
23
|
+
.replace(/\[pid: \d+\]/g, "[pid: _]")
|
|
24
|
+
.replace(/\d{4}-\d\d-\d\d \d\d:\d\d:\d\d/g, "_")
|
|
25
|
+
.replace(/ \([\d,]+ d?s\/min\)/g, "")
|
|
26
|
+
.replace(/ in (?:\d+d \d\dh|\d\dh \d\dmin|\d\dmin \d\ds|\d\ds) at /g, " in _ at ");
|
|
27
|
+
|
|
28
|
+
test(
|
|
29
|
+
"each corpus spec's TLC output reads as plain TLC prints it at -workers 1",
|
|
30
|
+
{ skip, concurrency: 4 },
|
|
31
|
+
async (t) => {
|
|
32
|
+
await Promise.all(
|
|
33
|
+
fs.readdirSync(corpus).map((name) =>
|
|
34
|
+
t.test(name, async () => {
|
|
35
|
+
const dir = path.join(corpus, name);
|
|
36
|
+
const tmp = fs.mkdtempSync(path.join(os.tmpdir(), "statechart-plain-"));
|
|
37
|
+
const [tool, twin, out] = ["tool", "plain", "out"].map((f) => path.join(tmp, f));
|
|
38
|
+
fs.mkdirSync(tool);
|
|
39
|
+
fs.mkdirSync(twin);
|
|
40
|
+
const view = path.join(dir, "view.mjs");
|
|
41
|
+
const child = spawn(
|
|
42
|
+
process.execPath,
|
|
43
|
+
[
|
|
44
|
+
path.join(here, "../statechart.ts"),
|
|
45
|
+
path.join(dir, `${name}.tla`),
|
|
46
|
+
...(fs.existsSync(view) ? ["--view", view] : []),
|
|
47
|
+
"--out",
|
|
48
|
+
out,
|
|
49
|
+
],
|
|
50
|
+
{
|
|
51
|
+
env: {
|
|
52
|
+
...process.env,
|
|
53
|
+
JAVA: path.join(here, "java.ts"),
|
|
54
|
+
STATECHART_JAVA: process.env.JAVA ?? "java",
|
|
55
|
+
STATECHART_RECORD: tool,
|
|
56
|
+
STATECHART_PLAIN: twin,
|
|
57
|
+
},
|
|
58
|
+
stdio: ["ignore", "ignore", "pipe"],
|
|
59
|
+
},
|
|
60
|
+
);
|
|
61
|
+
let stderr = "";
|
|
62
|
+
child.stderr.on("data", (chunk: Buffer) => (stderr += chunk));
|
|
63
|
+
await once(child, "close");
|
|
64
|
+
assert.equal(stderr, "");
|
|
65
|
+
const runs = fs.readdirSync(twin).filter((f) => f.endsWith(".out"));
|
|
66
|
+
assert.ok(runs.includes("ChartRun.out"), "the drawing run has a plain twin");
|
|
67
|
+
for (const run of runs) {
|
|
68
|
+
const exit = run.replace(/\.out$/, ".exit");
|
|
69
|
+
assert.equal(maybe(path.join(tool, exit)), maybe(path.join(twin, exit)), exit);
|
|
70
|
+
assert.equal(
|
|
71
|
+
steady(plain(read(path.join(tool, run)))),
|
|
72
|
+
steady(read(path.join(twin, run))),
|
|
73
|
+
run,
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
assert.equal(
|
|
77
|
+
steady(read(path.join(out, "tlc.out"))),
|
|
78
|
+
steady(`${read(path.join(twin, "verdict-1.out"))}\n`),
|
|
79
|
+
);
|
|
80
|
+
const verdicts = new Set<string>();
|
|
81
|
+
for (const run of runs)
|
|
82
|
+
if (run.startsWith("verdict-")) verdicts.add(steady(`${read(path.join(twin, run))}\n`));
|
|
83
|
+
for (const f of fs.readdirSync(out))
|
|
84
|
+
if (/^tlc-\w+\.out$/.test(f))
|
|
85
|
+
assert.ok(verdicts.has(steady(read(path.join(out, f)))), f);
|
|
86
|
+
}),
|
|
87
|
+
),
|
|
88
|
+
);
|
|
89
|
+
},
|
|
90
|
+
);
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import { spawnSync } from "node:child_process";
|
|
3
|
+
import fs from "node:fs";
|
|
4
|
+
import os from "node:os";
|
|
5
|
+
import path from "node:path";
|
|
6
|
+
import { fileURLToPath } from "node:url";
|
|
7
|
+
import { PINNED_FLAGS } from "../run.ts";
|
|
8
|
+
|
|
9
|
+
const here = path.dirname(fileURLToPath(import.meta.url));
|
|
10
|
+
const jar = process.env.TLA2TOOLS;
|
|
11
|
+
export const skip = !jar && "set TLA2TOOLS to the path of tla2tools.jar to run TLC";
|
|
12
|
+
|
|
13
|
+
const RULES = /^(INVARIANTS?|PROPERTY|PROPERTIES|CHECK_DEADLOCK)$/;
|
|
14
|
+
|
|
15
|
+
const exitClass = (status: number | null) =>
|
|
16
|
+
status === 0 ? 0 : status === 11 || status === 12 || status === 13 ? 1 : 2;
|
|
17
|
+
|
|
18
|
+
const stepsIn = (text: string) =>
|
|
19
|
+
Math.max((text.match(/^State \d+: (?!Stuttering$)/gm)?.length ?? 0) - 1, 0) +
|
|
20
|
+
(text.match(/^Back to state \d+: </gm)?.length ?? 0);
|
|
21
|
+
|
|
22
|
+
function properties(cfg: string) {
|
|
23
|
+
const names: string[] = [];
|
|
24
|
+
let section = "";
|
|
25
|
+
for (const line of cfg.split("\n")) {
|
|
26
|
+
section = line.match(/^[A-Z_]+/)?.[0] ?? section;
|
|
27
|
+
if (/^PROPERT(Y|IES)$/.test(section))
|
|
28
|
+
for (const word of line.trim().split(/\s+/)) if (word && word !== section) names.push(word);
|
|
29
|
+
}
|
|
30
|
+
return names;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function tlc(dir: string, module: string, cfg: string) {
|
|
34
|
+
const run = `alone-${fs.readdirSync(dir).length}`;
|
|
35
|
+
const file = path.join(dir, `${run}.cfg`);
|
|
36
|
+
fs.writeFileSync(file, cfg);
|
|
37
|
+
const tmp = path.join(dir, `${run}-tmp`);
|
|
38
|
+
fs.mkdirSync(tmp);
|
|
39
|
+
const r = spawnSync(
|
|
40
|
+
process.env.JAVA ?? "java",
|
|
41
|
+
[
|
|
42
|
+
`-Djava.io.tmpdir=${tmp}`,
|
|
43
|
+
"-cp",
|
|
44
|
+
jar ?? "",
|
|
45
|
+
"tlc2.TLC",
|
|
46
|
+
...PINNED_FLAGS,
|
|
47
|
+
"-config",
|
|
48
|
+
file,
|
|
49
|
+
"-metadir",
|
|
50
|
+
path.join(dir, `${run}-meta`),
|
|
51
|
+
module,
|
|
52
|
+
],
|
|
53
|
+
{ cwd: dir, encoding: "utf8" },
|
|
54
|
+
);
|
|
55
|
+
const out = r.stdout + r.stderr;
|
|
56
|
+
const temporal = properties(cfg);
|
|
57
|
+
const broke =
|
|
58
|
+
out.match(/^Error: (?:Invariant|Action property|Property) (\S+) is violated/m)?.[1] ??
|
|
59
|
+
(/^Error: Deadlock reached\./m.test(out) ? "NoDeadlock" : undefined) ??
|
|
60
|
+
(/^Error: Temporal properties were violated\./m.test(out) && temporal.length === 1
|
|
61
|
+
? temporal[0]
|
|
62
|
+
: undefined);
|
|
63
|
+
return { status: r.status, out, broke, steps: stepsIn(out) };
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function alone(cfg: string, rule: string) {
|
|
67
|
+
const lines: string[] = [];
|
|
68
|
+
let section = "";
|
|
69
|
+
for (const line of cfg.split("\n")) {
|
|
70
|
+
section = line.match(/^[A-Z_]+/)?.[0] ?? section;
|
|
71
|
+
if (!RULES.test(section)) lines.push(line);
|
|
72
|
+
}
|
|
73
|
+
if (rule !== "NoDeadlock")
|
|
74
|
+
lines.push(
|
|
75
|
+
`${properties(cfg).includes(rule) ? "PROPERTY" : "INVARIANT"} ${rule}`,
|
|
76
|
+
"CHECK_DEADLOCK FALSE",
|
|
77
|
+
);
|
|
78
|
+
return `${lines.join("\n")}\n`;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export type Verdict = {
|
|
82
|
+
status: number | null;
|
|
83
|
+
breaks: Map<string, number>;
|
|
84
|
+
holds: string[];
|
|
85
|
+
unchecked: string[];
|
|
86
|
+
chart: string;
|
|
87
|
+
report: string;
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
export function agrees(module: string, files: { [name: string]: string[] }, cfg: string): Verdict {
|
|
91
|
+
const dir = fs.mkdtempSync(path.join(os.tmpdir(), "statechart-plain-"));
|
|
92
|
+
try {
|
|
93
|
+
for (const [name, lines] of Object.entries(files))
|
|
94
|
+
fs.writeFileSync(path.join(dir, `${name}.tla`), `${lines.join("\n")}\n`);
|
|
95
|
+
fs.writeFileSync(path.join(dir, `${module}.cfg`), cfg);
|
|
96
|
+
const out = path.join(dir, "out");
|
|
97
|
+
const cli = spawnSync(
|
|
98
|
+
process.execPath,
|
|
99
|
+
[path.join(here, "../statechart.ts"), path.join(dir, `${module}.tla`), "--out", out],
|
|
100
|
+
{ encoding: "utf8" },
|
|
101
|
+
);
|
|
102
|
+
const plain = tlc(dir, module, cfg);
|
|
103
|
+
const report = fs.existsSync(out) ? fs.readFileSync(path.join(out, "report.md"), "utf8") : "";
|
|
104
|
+
const shown = `${cli.stderr}${report}`;
|
|
105
|
+
assert.equal(
|
|
106
|
+
cli.status,
|
|
107
|
+
exitClass(plain.status),
|
|
108
|
+
`TLC says:\n${plain.out}\nThe command says:\n${shown}`,
|
|
109
|
+
);
|
|
110
|
+
assert.doesNotMatch(shown, /Chart\w*Mark/);
|
|
111
|
+
if (cli.status !== 2) assert.equal(cli.stderr, "");
|
|
112
|
+
if (!report) assert.match(cli.stderr, /TLC could not check/);
|
|
113
|
+
if (cli.status === 2) {
|
|
114
|
+
const error = plain.out.match(/^Error: .*$/m)?.[0];
|
|
115
|
+
assert.ok(
|
|
116
|
+
error && shown.includes(error),
|
|
117
|
+
`TLC says:\n${plain.out}\nThe command says:\n${shown}`,
|
|
118
|
+
);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
const breaks = new Map<string, number>();
|
|
122
|
+
const bounded = new Set<string>();
|
|
123
|
+
for (const [, rule, body] of report.matchAll(/^## (\S+) breaks\n(.*)$/gm)) {
|
|
124
|
+
const said = body.match(/has (\d+) steps?:/)?.[1];
|
|
125
|
+
const file = body.match(/ is in (tlc-\S+\.out)\./)?.[1];
|
|
126
|
+
if (!file) {
|
|
127
|
+
breaks.set(rule, Number(said));
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
const text = fs.readFileSync(path.join(out, file), "utf8");
|
|
131
|
+
if (said) assert.equal(Number(said), stepsIn(text), rule);
|
|
132
|
+
if (/^Semantic processing of module ChartBound$/m.test(text)) bounded.add(rule);
|
|
133
|
+
breaks.set(rule, stepsIn(text));
|
|
134
|
+
}
|
|
135
|
+
const list = (title: string) =>
|
|
136
|
+
report
|
|
137
|
+
.match(new RegExp(`^## ${title}\\n(.*)$`, "m"))?.[1]
|
|
138
|
+
.split(", ")
|
|
139
|
+
.sort() ?? [];
|
|
140
|
+
const holds = list("Rules that hold");
|
|
141
|
+
const unchecked = list("Rules not checked");
|
|
142
|
+
const chartFile = path.join(out, "chart.mmd");
|
|
143
|
+
const chart = fs.existsSync(chartFile) ? fs.readFileSync(chartFile, "utf8") : "";
|
|
144
|
+
if (plain.broke) assert.equal(breaks.get(plain.broke), plain.steps, shown);
|
|
145
|
+
for (const rule of holds) {
|
|
146
|
+
const r = tlc(dir, module, alone(cfg, rule));
|
|
147
|
+
assert.equal(r.status, 0, `${rule} holds in the report, but TLC says:\n${r.out}`);
|
|
148
|
+
}
|
|
149
|
+
for (const [rule, steps] of breaks) {
|
|
150
|
+
const r = tlc(dir, module, alone(cfg, rule));
|
|
151
|
+
assert.equal(r.broke, rule, `${rule} breaks in the report, but TLC says:\n${r.out}`);
|
|
152
|
+
if (!bounded.has(rule)) assert.equal(steps, r.steps, rule);
|
|
153
|
+
}
|
|
154
|
+
return { status: cli.status, breaks, holds, unchecked, chart, report };
|
|
155
|
+
} finally {
|
|
156
|
+
fs.rmSync(dir, { recursive: true, force: true });
|
|
157
|
+
}
|
|
158
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Buffer } from "node:buffer";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { pathToFileURL } from "node:url";
|
|
5
|
+
import { inspect } from "node:util";
|
|
6
|
+
import { checkView } from "./frontends/view.ts";
|
|
7
|
+
import { compile } from "./pipeline.ts";
|
|
8
|
+
import { check, messageOf } from "./run.ts";
|
|
9
|
+
|
|
10
|
+
const [stage, specFile, configFile, viewFile] = process.argv.slice(2);
|
|
11
|
+
|
|
12
|
+
try {
|
|
13
|
+
const view = checkView(
|
|
14
|
+
viewFile ? await import(pathToFileURL(path.resolve(viewFile)).href) : {},
|
|
15
|
+
inspect,
|
|
16
|
+
);
|
|
17
|
+
const { files, exit } = compile(await check(specFile, configFile), view);
|
|
18
|
+
const draft = path.join(stage, "draft");
|
|
19
|
+
fs.mkdirSync(draft);
|
|
20
|
+
for (const [name, parts] of files) {
|
|
21
|
+
const fd = fs.openSync(path.join(draft, name), "wx");
|
|
22
|
+
try {
|
|
23
|
+
for (const part of parts)
|
|
24
|
+
fs.writeSync(fd, typeof part === "string" ? Buffer.from(part) : part);
|
|
25
|
+
fs.writeSync(fd, "\n");
|
|
26
|
+
} finally {
|
|
27
|
+
fs.closeSync(fd);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
fs.renameSync(draft, path.join(stage, "done"));
|
|
31
|
+
process.exit(exit);
|
|
32
|
+
} catch (error) {
|
|
33
|
+
console.error(messageOf(error));
|
|
34
|
+
process.exit(2);
|
|
35
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: swarm
|
|
3
|
+
description: "Fan out N parallel workers, drain them, and return one report. Use for /swarm, 'swarm this', or parallel coverage, races, gauntlets, and exploration."
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Swarm
|
|
8
|
+
|
|
9
|
+
## Start
|
|
10
|
+
|
|
11
|
+
Open a todolist with one entry per phase before launching anything.
|
|
12
|
+
|
|
13
|
+
1. Frame
|
|
14
|
+
2. Fan out
|
|
15
|
+
3. Aggregate
|
|
16
|
+
4. Report
|
|
17
|
+
|
|
18
|
+
## Phase A: Frame
|
|
19
|
+
|
|
20
|
+
1. State the done predicate and the artifact or report the swarm must return.
|
|
21
|
+
2. Choose the shape. Partition into slices, race N workers on identical briefs, or mix both. For a race or mixed shape, declare `first pass`, `rank all`, or `best-of` before spawning.
|
|
22
|
+
3. Get the worker target from `pstack_model` with `swarm workers`. When it returns `inherit-parent`, omit `target` so the workers run on the parent model. For a model race, name each arm's model up front. Pick each subagent's reasoning level and fast or standard speed for the job, per the Subagents section of the **poteto-mode** skill.
|
|
23
|
+
4. Give each worker its own writable output when it writes. When workers verify or measure commits, each brief names the exact SHAs. A measurement brief also names the method (sample count, what one sample is, order). The worker records both in its result.
|
|
24
|
+
|
|
25
|
+
## Phase B: Fan out
|
|
26
|
+
|
|
27
|
+
Spawn all N workers in one response as `delegate_task` calls with `mode: "async"` and the step 3 `target`, left unset for `auto` or `inherit-parent`. Every worker runs on this machine, so a worker that writes gets its own git worktree, named by absolute path in its brief as the only place it writes.
|
|
28
|
+
|
|
29
|
+
When a worker must start from a non-default branch, create its worktree from that branch.
|
|
30
|
+
|
|
31
|
+
Every brief stands alone. Include the goal, scope, exact slice or race arm, how to verify, and what to report. Reports use `PASS`, `ISSUES`, or `BLOCKED` with evidence. A worker that can prove a defect reports `ISSUES` and lists every issue it can prove, not only the first.
|
|
32
|
+
|
|
33
|
+
If a worker drops out, proceed with N-1 and note it.
|
|
34
|
+
|
|
35
|
+
## Phase C: Aggregate
|
|
36
|
+
|
|
37
|
+
Read the terminal results. Drop a result that does not record the SHAs and method its brief names, and respawn that worker once. After a second miss, record a gap. A gap does not count as a pass. For coverage, every required slice needs a result. For a race, apply the selection rule declared up front. Use first pass, rank all, or best-of. Do not paste raw worker dumps.
|
|
38
|
+
|
|
39
|
+
## Phase D: Report
|
|
40
|
+
|
|
41
|
+
Return one consolidated in-chat report with a result table, issue one-liners, gaps or dropouts, and the race rule when used.
|
|
42
|
+
|
|
43
|
+
## Models
|
|
44
|
+
|
|
45
|
+
Get every target from the `pstack_model` tool. Pass the role name plus the job type and size from the routing table in poteto-mode's Subagents section. This skill's spawns are `check` jobs for verification workers and `implement` or `mechanical` jobs for build workers. Write every brief from `<plugin root>/skills/poteto-mode/brief.md`: the extension refuses a `delegate_task` call whose brief is missing its sections or limits. Without a job, pass the complexity: `groundwork` for cheap mechanical work, `bounded` for involved but bounded work, `general` for work that needs substantial judgment. The tool reads the role's line in the model sheet (`~/.config/t3-pstack/models.md`, written by `/setup-pstack`). A line naming a model is used as written, moved to a provider T3 can run right now when needed. A role with no line, or `inherit-parent` or `auto`, is routed by this extension's `models.json`: the parent's model family, sized and reasoned by complexity, and for panels one seat per family. The extension blocks a `delegate_task` call that uses the reserved Fable model or fast mode unless the user named it, reasoning above what `pstack_model` returned, or reasoning above high unless the user's latest message is "allow xhigh". Pass each returned target as `delegate_task`'s `target`. `inherit-parent` means omit `target`. `blocked` means the panel cannot reach two model families on this T3, so record its reason.
|
|
46
|
+
|
|
47
|
+
- swarm workers: one target
|