prismatica 0.2.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 +21 -0
- package/README.md +403 -0
- package/dist/agent-runner.js +656 -0
- package/dist/agent-runner.js.map +1 -0
- package/dist/assurance/mainpush.js +533 -0
- package/dist/assurance/mainpush.js.map +1 -0
- package/dist/assurance/outcome.js +165 -0
- package/dist/assurance/outcome.js.map +1 -0
- package/dist/assurance/passport.js +98 -0
- package/dist/assurance/passport.js.map +1 -0
- package/dist/assurance/proofinputs.js +425 -0
- package/dist/assurance/proofinputs.js.map +1 -0
- package/dist/atlas/diff.js +102 -0
- package/dist/atlas/diff.js.map +1 -0
- package/dist/atlas/evidence.js +31 -0
- package/dist/atlas/evidence.js.map +1 -0
- package/dist/atlas/hygiene.js +288 -0
- package/dist/atlas/hygiene.js.map +1 -0
- package/dist/atlas/impact.js +312 -0
- package/dist/atlas/impact.js.map +1 -0
- package/dist/atlas/labels.js +121 -0
- package/dist/atlas/labels.js.map +1 -0
- package/dist/atlas/next.js +327 -0
- package/dist/atlas/next.js.map +1 -0
- package/dist/atlas/packs.js +169 -0
- package/dist/atlas/packs.js.map +1 -0
- package/dist/atlas/presentation.js +349 -0
- package/dist/atlas/presentation.js.map +1 -0
- package/dist/atlas/render.js +269 -0
- package/dist/atlas/render.js.map +1 -0
- package/dist/atlas/store.js +389 -0
- package/dist/atlas/store.js.map +1 -0
- package/dist/board/html.js +1382 -0
- package/dist/board/html.js.map +1 -0
- package/dist/board/model.js +369 -0
- package/dist/board/model.js.map +1 -0
- package/dist/board/server.js +325 -0
- package/dist/board/server.js.map +1 -0
- package/dist/board/understand.js +128 -0
- package/dist/board/understand.js.map +1 -0
- package/dist/change.js +104 -0
- package/dist/change.js.map +1 -0
- package/dist/checkengine.js +220 -0
- package/dist/checkengine.js.map +1 -0
- package/dist/claudehook.js +189 -0
- package/dist/claudehook.js.map +1 -0
- package/dist/cli.js +1120 -0
- package/dist/cli.js.map +1 -0
- package/dist/clipboard.js +33 -0
- package/dist/clipboard.js.map +1 -0
- package/dist/commands/abandon.js +329 -0
- package/dist/commands/abandon.js.map +1 -0
- package/dist/commands/accept.js +85 -0
- package/dist/commands/accept.js.map +1 -0
- package/dist/commands/amend.js +158 -0
- package/dist/commands/amend.js.map +1 -0
- package/dist/commands/check.js +128 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/close.js +274 -0
- package/dist/commands/close.js.map +1 -0
- package/dist/commands/context.js +46 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/delta.js +192 -0
- package/dist/commands/delta.js.map +1 -0
- package/dist/commands/discover.js +173 -0
- package/dist/commands/discover.js.map +1 -0
- package/dist/commands/doctor.js +384 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/flow.js +929 -0
- package/dist/commands/flow.js.map +1 -0
- package/dist/commands/forget.js +33 -0
- package/dist/commands/forget.js.map +1 -0
- package/dist/commands/frame.js +231 -0
- package/dist/commands/frame.js.map +1 -0
- package/dist/commands/gate.js +48 -0
- package/dist/commands/gate.js.map +1 -0
- package/dist/commands/guide.js +17 -0
- package/dist/commands/guide.js.map +1 -0
- package/dist/commands/init.js +257 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/merge.js +188 -0
- package/dist/commands/merge.js.map +1 -0
- package/dist/commands/next.js +352 -0
- package/dist/commands/next.js.map +1 -0
- package/dist/commands/open.js +255 -0
- package/dist/commands/open.js.map +1 -0
- package/dist/commands/pack.js +165 -0
- package/dist/commands/pack.js.map +1 -0
- package/dist/commands/propose.js +102 -0
- package/dist/commands/propose.js.map +1 -0
- package/dist/commands/ready.js +931 -0
- package/dist/commands/ready.js.map +1 -0
- package/dist/commands/review.js +434 -0
- package/dist/commands/review.js.map +1 -0
- package/dist/commands/rules.js +399 -0
- package/dist/commands/rules.js.map +1 -0
- package/dist/commands/seal.js +52 -0
- package/dist/commands/seal.js.map +1 -0
- package/dist/commands/ship.js +333 -0
- package/dist/commands/ship.js.map +1 -0
- package/dist/commands/start.js +1164 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/stats.js +100 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/commands/view.js +23 -0
- package/dist/commands/view.js.map +1 -0
- package/dist/config.js +46 -0
- package/dist/config.js.map +1 -0
- package/dist/detect.js +495 -0
- package/dist/detect.js.map +1 -0
- package/dist/errors.js +13 -0
- package/dist/errors.js.map +1 -0
- package/dist/evidence.js +20 -0
- package/dist/evidence.js.map +1 -0
- package/dist/executor.js +256 -0
- package/dist/executor.js.map +1 -0
- package/dist/gate.js +109 -0
- package/dist/gate.js.map +1 -0
- package/dist/gh.js +236 -0
- package/dist/gh.js.map +1 -0
- package/dist/git.js +589 -0
- package/dist/git.js.map +1 -0
- package/dist/guide.js +2038 -0
- package/dist/guide.js.map +1 -0
- package/dist/ids.js +60 -0
- package/dist/ids.js.map +1 -0
- package/dist/keys.js +58 -0
- package/dist/keys.js.map +1 -0
- package/dist/ledger.js +197 -0
- package/dist/ledger.js.map +1 -0
- package/dist/paths.js +109 -0
- package/dist/paths.js.map +1 -0
- package/dist/planning/context.js +94 -0
- package/dist/planning/context.js.map +1 -0
- package/dist/planning/materialise.js +210 -0
- package/dist/planning/materialise.js.map +1 -0
- package/dist/planning/pack.js +290 -0
- package/dist/planning/pack.js.map +1 -0
- package/dist/planning/schema.js +296 -0
- package/dist/planning/schema.js.map +1 -0
- package/dist/planning/snapshot.js +308 -0
- package/dist/planning/snapshot.js.map +1 -0
- package/dist/planning/validate.js +417 -0
- package/dist/planning/validate.js.map +1 -0
- package/dist/prepush.js +192 -0
- package/dist/prepush.js.map +1 -0
- package/dist/records/store.js +268 -0
- package/dist/records/store.js.map +1 -0
- package/dist/records/types.js +836 -0
- package/dist/records/types.js.map +1 -0
- package/dist/registry.js +68 -0
- package/dist/registry.js.map +1 -0
- package/dist/render.js +275 -0
- package/dist/render.js.map +1 -0
- package/dist/runtime.js +47 -0
- package/dist/runtime.js.map +1 -0
- package/dist/scope.js +62 -0
- package/dist/scope.js.map +1 -0
- package/dist/secrets.js +24 -0
- package/dist/secrets.js.map +1 -0
- package/dist/selfhost.js +199 -0
- package/dist/selfhost.js.map +1 -0
- package/dist/shellquote.js +5 -0
- package/dist/shellquote.js.map +1 -0
- package/dist/skills.js +398 -0
- package/dist/skills.js.map +1 -0
- package/dist/state.js +62 -0
- package/dist/state.js.map +1 -0
- package/dist/templates.js +264 -0
- package/dist/templates.js.map +1 -0
- package/dist/tier.js +48 -0
- package/dist/tier.js.map +1 -0
- package/dist/ui.js +94 -0
- package/dist/ui.js.map +1 -0
- package/dist/vitestreport.js +59 -0
- package/dist/vitestreport.js.map +1 -0
- package/dist/worktree.js +31 -0
- package/dist/worktree.js.map +1 -0
- package/node_modules/@inquirer/ansi/LICENSE +22 -0
- package/node_modules/@inquirer/ansi/README.md +89 -0
- package/node_modules/@inquirer/ansi/dist/index.d.ts +14 -0
- package/node_modules/@inquirer/ansi/dist/index.js +21 -0
- package/node_modules/@inquirer/ansi/package.json +78 -0
- package/node_modules/@inquirer/checkbox/LICENSE +22 -0
- package/node_modules/@inquirer/checkbox/README.md +195 -0
- package/node_modules/@inquirer/checkbox/dist/index.d.ts +56 -0
- package/node_modules/@inquirer/checkbox/dist/index.js +210 -0
- package/node_modules/@inquirer/checkbox/package.json +92 -0
- package/node_modules/@inquirer/confirm/LICENSE +22 -0
- package/node_modules/@inquirer/confirm/README.md +92 -0
- package/node_modules/@inquirer/confirm/dist/index.d.ts +10 -0
- package/node_modules/@inquirer/confirm/dist/index.js +48 -0
- package/node_modules/@inquirer/confirm/package.json +90 -0
- package/node_modules/@inquirer/core/LICENSE +22 -0
- package/node_modules/@inquirer/core/README.md +386 -0
- package/node_modules/@inquirer/core/dist/index.d.ts +13 -0
- package/node_modules/@inquirer/core/dist/index.js +12 -0
- package/node_modules/@inquirer/core/dist/lib/Separator.d.ts +10 -0
- package/node_modules/@inquirer/core/dist/lib/Separator.js +21 -0
- package/node_modules/@inquirer/core/dist/lib/create-prompt.d.ts +4 -0
- package/node_modules/@inquirer/core/dist/lib/create-prompt.js +165 -0
- package/node_modules/@inquirer/core/dist/lib/errors.d.ts +20 -0
- package/node_modules/@inquirer/core/dist/lib/errors.js +21 -0
- package/node_modules/@inquirer/core/dist/lib/hook-engine.d.ts +23 -0
- package/node_modules/@inquirer/core/dist/lib/hook-engine.js +111 -0
- package/node_modules/@inquirer/core/dist/lib/key.d.ts +15 -0
- package/node_modules/@inquirer/core/dist/lib/key.js +34 -0
- package/node_modules/@inquirer/core/dist/lib/make-theme.d.ts +3 -0
- package/node_modules/@inquirer/core/dist/lib/make-theme.js +32 -0
- package/node_modules/@inquirer/core/dist/lib/pagination/use-pagination.d.ts +16 -0
- package/node_modules/@inquirer/core/dist/lib/pagination/use-pagination.js +121 -0
- package/node_modules/@inquirer/core/dist/lib/promise-polyfill.d.ts +7 -0
- package/node_modules/@inquirer/core/dist/lib/promise-polyfill.js +14 -0
- package/node_modules/@inquirer/core/dist/lib/screen-manager.d.ts +14 -0
- package/node_modules/@inquirer/core/dist/lib/screen-manager.js +84 -0
- package/node_modules/@inquirer/core/dist/lib/theme.d.ts +166 -0
- package/node_modules/@inquirer/core/dist/lib/theme.js +29 -0
- package/node_modules/@inquirer/core/dist/lib/use-effect.d.ts +2 -0
- package/node_modules/@inquirer/core/dist/lib/use-effect.js +11 -0
- package/node_modules/@inquirer/core/dist/lib/use-keypress.d.ts +3 -0
- package/node_modules/@inquirer/core/dist/lib/use-keypress.js +20 -0
- package/node_modules/@inquirer/core/dist/lib/use-memo.d.ts +1 -0
- package/node_modules/@inquirer/core/dist/lib/use-memo.js +14 -0
- package/node_modules/@inquirer/core/dist/lib/use-prefix.d.ts +5 -0
- package/node_modules/@inquirer/core/dist/lib/use-prefix.js +35 -0
- package/node_modules/@inquirer/core/dist/lib/use-ref.d.ts +6 -0
- package/node_modules/@inquirer/core/dist/lib/use-ref.js +4 -0
- package/node_modules/@inquirer/core/dist/lib/use-state.d.ts +4 -0
- package/node_modules/@inquirer/core/dist/lib/use-state.js +23 -0
- package/node_modules/@inquirer/core/dist/lib/utils.d.ts +13 -0
- package/node_modules/@inquirer/core/dist/lib/utils.js +25 -0
- package/node_modules/@inquirer/core/package.json +97 -0
- package/node_modules/@inquirer/editor/LICENSE +22 -0
- package/node_modules/@inquirer/editor/README.md +101 -0
- package/node_modules/@inquirer/editor/dist/index.d.ts +21 -0
- package/node_modules/@inquirer/editor/dist/index.js +73 -0
- package/node_modules/@inquirer/editor/package.json +91 -0
- package/node_modules/@inquirer/expand/LICENSE +22 -0
- package/node_modules/@inquirer/expand/README.md +141 -0
- package/node_modules/@inquirer/expand/dist/index.d.ts +24 -0
- package/node_modules/@inquirer/expand/dist/index.js +110 -0
- package/node_modules/@inquirer/expand/package.json +90 -0
- package/node_modules/@inquirer/external-editor/LICENSE +22 -0
- package/node_modules/@inquirer/external-editor/README.md +154 -0
- package/node_modules/@inquirer/external-editor/dist/errors/CreateFileError.d.ts +10 -0
- package/node_modules/@inquirer/external-editor/dist/errors/CreateFileError.js +13 -0
- package/node_modules/@inquirer/external-editor/dist/errors/LaunchEditorError.d.ts +10 -0
- package/node_modules/@inquirer/external-editor/dist/errors/LaunchEditorError.js +13 -0
- package/node_modules/@inquirer/external-editor/dist/errors/ReadFileError.d.ts +10 -0
- package/node_modules/@inquirer/external-editor/dist/errors/ReadFileError.js +13 -0
- package/node_modules/@inquirer/external-editor/dist/errors/RemoveFileError.d.ts +10 -0
- package/node_modules/@inquirer/external-editor/dist/errors/RemoveFileError.js +13 -0
- package/node_modules/@inquirer/external-editor/dist/errors.d.ts +20 -0
- package/node_modules/@inquirer/external-editor/dist/errors.js +32 -0
- package/node_modules/@inquirer/external-editor/dist/index.d.ts +35 -0
- package/node_modules/@inquirer/external-editor/dist/index.js +146 -0
- package/node_modules/@inquirer/external-editor/dist/parse-editor-command.d.ts +5 -0
- package/node_modules/@inquirer/external-editor/dist/parse-editor-command.js +28 -0
- package/node_modules/@inquirer/external-editor/package.json +97 -0
- package/node_modules/@inquirer/figures/LICENSE +22 -0
- package/node_modules/@inquirer/figures/dist/index.d.ts +275 -0
- package/node_modules/@inquirer/figures/dist/index.js +315 -0
- package/node_modules/@inquirer/figures/package.json +80 -0
- package/node_modules/@inquirer/input/LICENSE +22 -0
- package/node_modules/@inquirer/input/README.md +101 -0
- package/node_modules/@inquirer/input/dist/index.d.ts +20 -0
- package/node_modules/@inquirer/input/dist/index.js +99 -0
- package/node_modules/@inquirer/input/package.json +90 -0
- package/node_modules/@inquirer/number/LICENSE +22 -0
- package/node_modules/@inquirer/number/README.md +95 -0
- package/node_modules/@inquirer/number/dist/index.d.ts +13 -0
- package/node_modules/@inquirer/number/dist/index.js +95 -0
- package/node_modules/@inquirer/number/package.json +90 -0
- package/node_modules/@inquirer/password/LICENSE +22 -0
- package/node_modules/@inquirer/password/README.md +93 -0
- package/node_modules/@inquirer/password/dist/index.d.ts +15 -0
- package/node_modules/@inquirer/password/dist/index.js +60 -0
- package/node_modules/@inquirer/password/package.json +91 -0
- package/node_modules/@inquirer/prompts/LICENSE +22 -0
- package/node_modules/@inquirer/prompts/README.md +543 -0
- package/node_modules/@inquirer/prompts/dist/index.d.ts +10 -0
- package/node_modules/@inquirer/prompts/dist/index.js +10 -0
- package/node_modules/@inquirer/prompts/package.json +101 -0
- package/node_modules/@inquirer/rawlist/LICENSE +22 -0
- package/node_modules/@inquirer/rawlist/README.md +135 -0
- package/node_modules/@inquirer/rawlist/dist/index.d.ts +23 -0
- package/node_modules/@inquirer/rawlist/dist/index.js +145 -0
- package/node_modules/@inquirer/rawlist/package.json +90 -0
- package/node_modules/@inquirer/search/LICENSE +22 -0
- package/node_modules/@inquirer/search/README.md +213 -0
- package/node_modules/@inquirer/search/dist/index.d.ts +33 -0
- package/node_modules/@inquirer/search/dist/index.js +195 -0
- package/node_modules/@inquirer/search/package.json +91 -0
- package/node_modules/@inquirer/select/LICENSE +22 -0
- package/node_modules/@inquirer/select/README.md +188 -0
- package/node_modules/@inquirer/select/dist/index.d.ts +34 -0
- package/node_modules/@inquirer/select/dist/index.js +191 -0
- package/node_modules/@inquirer/select/package.json +92 -0
- package/node_modules/@inquirer/type/LICENSE +22 -0
- package/node_modules/@inquirer/type/dist/index.d.ts +2 -0
- package/node_modules/@inquirer/type/dist/index.js +2 -0
- package/node_modules/@inquirer/type/dist/inquirer.d.ts +35 -0
- package/node_modules/@inquirer/type/dist/inquirer.js +1 -0
- package/node_modules/@inquirer/type/dist/utils.d.ts +29 -0
- package/node_modules/@inquirer/type/dist/utils.js +2 -0
- package/node_modules/@inquirer/type/package.json +87 -0
- package/node_modules/@sec-ant/readable-stream/LICENSE +21 -0
- package/node_modules/@sec-ant/readable-stream/README.md +230 -0
- package/node_modules/@sec-ant/readable-stream/dist/core/asyncIterablePrototype.d.ts +1 -0
- package/node_modules/@sec-ant/readable-stream/dist/core/asyncIterator.d.ts +27 -0
- package/node_modules/@sec-ant/readable-stream/dist/core/fromAnyIterable.d.ts +6 -0
- package/node_modules/@sec-ant/readable-stream/dist/index/asyncIterator.d.ts +2 -0
- package/node_modules/@sec-ant/readable-stream/dist/index/asyncIterator.js +5 -0
- package/node_modules/@sec-ant/readable-stream/dist/index/fromAnyIterable.d.ts +2 -0
- package/node_modules/@sec-ant/readable-stream/dist/index/fromAnyIterable.js +5 -0
- package/node_modules/@sec-ant/readable-stream/dist/index/index.d.ts +2 -0
- package/node_modules/@sec-ant/readable-stream/dist/index/index.js +8 -0
- package/node_modules/@sec-ant/readable-stream/dist/polyfill/asyncIterator.d.ts +1 -0
- package/node_modules/@sec-ant/readable-stream/dist/polyfill/asyncIterator.js +3 -0
- package/node_modules/@sec-ant/readable-stream/dist/polyfill/fromAnyIterable.d.ts +1 -0
- package/node_modules/@sec-ant/readable-stream/dist/polyfill/fromAnyIterable.js +2 -0
- package/node_modules/@sec-ant/readable-stream/dist/polyfill/index.d.ts +2 -0
- package/node_modules/@sec-ant/readable-stream/dist/polyfill/index.js +4 -0
- package/node_modules/@sec-ant/readable-stream/dist/ponyfill/asyncIterator.d.ts +1 -0
- package/node_modules/@sec-ant/readable-stream/dist/ponyfill/asyncIterator.js +89 -0
- package/node_modules/@sec-ant/readable-stream/dist/ponyfill/fromAnyIterable.d.ts +1 -0
- package/node_modules/@sec-ant/readable-stream/dist/ponyfill/fromAnyIterable.js +34 -0
- package/node_modules/@sec-ant/readable-stream/dist/ponyfill/index.d.ts +2 -0
- package/node_modules/@sec-ant/readable-stream/dist/ponyfill/index.js +6 -0
- package/node_modules/@sec-ant/readable-stream/dist/types/async-iterator.d.ts +11 -0
- package/node_modules/@sec-ant/readable-stream/package.json +96 -0
- package/node_modules/@sindresorhus/merge-streams/index.d.ts +44 -0
- package/node_modules/@sindresorhus/merge-streams/index.js +265 -0
- package/node_modules/@sindresorhus/merge-streams/license +9 -0
- package/node_modules/@sindresorhus/merge-streams/package.json +49 -0
- package/node_modules/@sindresorhus/merge-streams/readme.md +53 -0
- package/node_modules/argparse/LICENSE +21 -0
- package/node_modules/argparse/README.md +257 -0
- package/node_modules/argparse/index.js +3 -0
- package/node_modules/argparse/lib/action/append/constant.js +47 -0
- package/node_modules/argparse/lib/action/append.js +53 -0
- package/node_modules/argparse/lib/action/count.js +40 -0
- package/node_modules/argparse/lib/action/help.js +47 -0
- package/node_modules/argparse/lib/action/store/constant.js +43 -0
- package/node_modules/argparse/lib/action/store/false.js +27 -0
- package/node_modules/argparse/lib/action/store/true.js +26 -0
- package/node_modules/argparse/lib/action/store.js +50 -0
- package/node_modules/argparse/lib/action/subparsers.js +149 -0
- package/node_modules/argparse/lib/action/version.js +47 -0
- package/node_modules/argparse/lib/action.js +146 -0
- package/node_modules/argparse/lib/action_container.js +482 -0
- package/node_modules/argparse/lib/argparse.js +14 -0
- package/node_modules/argparse/lib/argument/error.js +50 -0
- package/node_modules/argparse/lib/argument/exclusive.js +54 -0
- package/node_modules/argparse/lib/argument/group.js +75 -0
- package/node_modules/argparse/lib/argument_parser.js +1161 -0
- package/node_modules/argparse/lib/const.js +21 -0
- package/node_modules/argparse/lib/help/added_formatters.js +87 -0
- package/node_modules/argparse/lib/help/formatter.js +795 -0
- package/node_modules/argparse/lib/namespace.js +76 -0
- package/node_modules/argparse/lib/utils.js +57 -0
- package/node_modules/argparse/package.json +34 -0
- package/node_modules/chardet/LICENSE +19 -0
- package/node_modules/chardet/README.md +135 -0
- package/node_modules/chardet/lib/encoding/ascii.d.ts +6 -0
- package/node_modules/chardet/lib/encoding/ascii.js +23 -0
- package/node_modules/chardet/lib/encoding/ascii.js.map +1 -0
- package/node_modules/chardet/lib/encoding/index.d.ts +14 -0
- package/node_modules/chardet/lib/encoding/index.js +3 -0
- package/node_modules/chardet/lib/encoding/index.js.map +1 -0
- package/node_modules/chardet/lib/encoding/iso2022.d.ts +23 -0
- package/node_modules/chardet/lib/encoding/iso2022.js +114 -0
- package/node_modules/chardet/lib/encoding/iso2022.js.map +1 -0
- package/node_modules/chardet/lib/encoding/mbcs.d.ts +50 -0
- package/node_modules/chardet/lib/encoding/mbcs.js +347 -0
- package/node_modules/chardet/lib/encoding/mbcs.js.map +1 -0
- package/node_modules/chardet/lib/encoding/sbcs.d.ts +94 -0
- package/node_modules/chardet/lib/encoding/sbcs.js +935 -0
- package/node_modules/chardet/lib/encoding/sbcs.js.map +1 -0
- package/node_modules/chardet/lib/encoding/unicode.d.ts +27 -0
- package/node_modules/chardet/lib/encoding/unicode.js +109 -0
- package/node_modules/chardet/lib/encoding/unicode.js.map +1 -0
- package/node_modules/chardet/lib/encoding/utf8.d.ts +6 -0
- package/node_modules/chardet/lib/encoding/utf8.js +72 -0
- package/node_modules/chardet/lib/encoding/utf8.js.map +1 -0
- package/node_modules/chardet/lib/fs/browser.d.ts +2 -0
- package/node_modules/chardet/lib/fs/browser.js +6 -0
- package/node_modules/chardet/lib/fs/browser.js.map +1 -0
- package/node_modules/chardet/lib/fs/node.d.ts +2 -0
- package/node_modules/chardet/lib/fs/node.js +11 -0
- package/node_modules/chardet/lib/fs/node.js.map +1 -0
- package/node_modules/chardet/lib/index.d.ts +20 -0
- package/node_modules/chardet/lib/index.js +177 -0
- package/node_modules/chardet/lib/index.js.map +1 -0
- package/node_modules/chardet/lib/match.d.ts +9 -0
- package/node_modules/chardet/lib/match.js +8 -0
- package/node_modules/chardet/lib/match.js.map +1 -0
- package/node_modules/chardet/lib/utils.d.ts +1 -0
- package/node_modules/chardet/lib/utils.js +10 -0
- package/node_modules/chardet/lib/utils.js.map +1 -0
- package/node_modules/chardet/package.json +100 -0
- package/node_modules/cli-width/LICENSE +13 -0
- package/node_modules/cli-width/README.md +71 -0
- package/node_modules/cli-width/index.d.ts +13 -0
- package/node_modules/cli-width/index.js +49 -0
- package/node_modules/cli-width/package.json +40 -0
- package/node_modules/commander/LICENSE +22 -0
- package/node_modules/commander/Readme.md +1172 -0
- package/node_modules/commander/index.js +21 -0
- package/node_modules/commander/lib/argument.js +147 -0
- package/node_modules/commander/lib/command.js +2790 -0
- package/node_modules/commander/lib/error.js +36 -0
- package/node_modules/commander/lib/help.js +731 -0
- package/node_modules/commander/lib/option.js +377 -0
- package/node_modules/commander/lib/suggestSimilar.js +99 -0
- package/node_modules/commander/package-support.json +19 -0
- package/node_modules/commander/package.json +64 -0
- package/node_modules/commander/typings/index.d.ts +1113 -0
- package/node_modules/cross-spawn/LICENSE +21 -0
- package/node_modules/cross-spawn/README.md +89 -0
- package/node_modules/cross-spawn/index.js +39 -0
- package/node_modules/cross-spawn/lib/enoent.js +59 -0
- package/node_modules/cross-spawn/lib/parse.js +91 -0
- package/node_modules/cross-spawn/lib/util/escape.js +47 -0
- package/node_modules/cross-spawn/lib/util/readShebang.js +23 -0
- package/node_modules/cross-spawn/lib/util/resolveCommand.js +52 -0
- package/node_modules/cross-spawn/package.json +73 -0
- package/node_modules/esprima/LICENSE.BSD +21 -0
- package/node_modules/esprima/README.md +46 -0
- package/node_modules/esprima/bin/esparse.js +139 -0
- package/node_modules/esprima/bin/esvalidate.js +236 -0
- package/node_modules/esprima/dist/esprima.js +6709 -0
- package/node_modules/esprima/package.json +112 -0
- package/node_modules/execa/index.d.ts +27 -0
- package/node_modules/execa/index.js +28 -0
- package/node_modules/execa/lib/arguments/command.js +20 -0
- package/node_modules/execa/lib/arguments/cwd.js +39 -0
- package/node_modules/execa/lib/arguments/encoding-option.js +50 -0
- package/node_modules/execa/lib/arguments/escape.js +88 -0
- package/node_modules/execa/lib/arguments/fd-options.js +108 -0
- package/node_modules/execa/lib/arguments/file-url.js +25 -0
- package/node_modules/execa/lib/arguments/options.js +96 -0
- package/node_modules/execa/lib/arguments/shell.js +11 -0
- package/node_modules/execa/lib/arguments/specific.js +111 -0
- package/node_modules/execa/lib/convert/add.js +15 -0
- package/node_modules/execa/lib/convert/concurrent.js +33 -0
- package/node_modules/execa/lib/convert/duplex.js +69 -0
- package/node_modules/execa/lib/convert/iterable.js +34 -0
- package/node_modules/execa/lib/convert/readable.js +113 -0
- package/node_modules/execa/lib/convert/shared.js +46 -0
- package/node_modules/execa/lib/convert/writable.js +90 -0
- package/node_modules/execa/lib/io/contents.js +116 -0
- package/node_modules/execa/lib/io/input-sync.js +44 -0
- package/node_modules/execa/lib/io/iterate.js +110 -0
- package/node_modules/execa/lib/io/max-buffer.js +89 -0
- package/node_modules/execa/lib/io/output-async.js +80 -0
- package/node_modules/execa/lib/io/output-sync.js +135 -0
- package/node_modules/execa/lib/io/pipeline.js +48 -0
- package/node_modules/execa/lib/io/strip-newline.js +12 -0
- package/node_modules/execa/lib/ipc/array.js +4 -0
- package/node_modules/execa/lib/ipc/buffer-messages.js +47 -0
- package/node_modules/execa/lib/ipc/forward.js +56 -0
- package/node_modules/execa/lib/ipc/get-each.js +89 -0
- package/node_modules/execa/lib/ipc/get-one.js +69 -0
- package/node_modules/execa/lib/ipc/graceful.js +72 -0
- package/node_modules/execa/lib/ipc/incoming.js +79 -0
- package/node_modules/execa/lib/ipc/ipc-input.js +44 -0
- package/node_modules/execa/lib/ipc/methods.js +49 -0
- package/node_modules/execa/lib/ipc/outgoing.js +47 -0
- package/node_modules/execa/lib/ipc/reference.js +44 -0
- package/node_modules/execa/lib/ipc/send.js +91 -0
- package/node_modules/execa/lib/ipc/strict.js +113 -0
- package/node_modules/execa/lib/ipc/validation.js +111 -0
- package/node_modules/execa/lib/methods/bind.js +23 -0
- package/node_modules/execa/lib/methods/command.js +43 -0
- package/node_modules/execa/lib/methods/create.js +65 -0
- package/node_modules/execa/lib/methods/main-async.js +194 -0
- package/node_modules/execa/lib/methods/main-sync.js +163 -0
- package/node_modules/execa/lib/methods/node.js +51 -0
- package/node_modules/execa/lib/methods/parameters.js +31 -0
- package/node_modules/execa/lib/methods/promise.js +15 -0
- package/node_modules/execa/lib/methods/script.js +22 -0
- package/node_modules/execa/lib/methods/template.js +153 -0
- package/node_modules/execa/lib/pipe/abort.js +20 -0
- package/node_modules/execa/lib/pipe/pipe-arguments.js +91 -0
- package/node_modules/execa/lib/pipe/sequence.js +24 -0
- package/node_modules/execa/lib/pipe/setup.js +72 -0
- package/node_modules/execa/lib/pipe/streaming.js +51 -0
- package/node_modules/execa/lib/pipe/throw.js +58 -0
- package/node_modules/execa/lib/resolve/all-async.js +46 -0
- package/node_modules/execa/lib/resolve/all-sync.js +33 -0
- package/node_modules/execa/lib/resolve/exit-async.js +54 -0
- package/node_modules/execa/lib/resolve/exit-sync.js +25 -0
- package/node_modules/execa/lib/resolve/stdio.js +47 -0
- package/node_modules/execa/lib/resolve/wait-stream.js +96 -0
- package/node_modules/execa/lib/resolve/wait-subprocess.js +146 -0
- package/node_modules/execa/lib/return/duration.js +8 -0
- package/node_modules/execa/lib/return/early-error.js +60 -0
- package/node_modules/execa/lib/return/final-error.js +40 -0
- package/node_modules/execa/lib/return/message.js +157 -0
- package/node_modules/execa/lib/return/reject.js +13 -0
- package/node_modules/execa/lib/return/result.js +186 -0
- package/node_modules/execa/lib/stdio/direction.js +76 -0
- package/node_modules/execa/lib/stdio/duplicate.js +116 -0
- package/node_modules/execa/lib/stdio/handle-async.js +52 -0
- package/node_modules/execa/lib/stdio/handle-sync.js +57 -0
- package/node_modules/execa/lib/stdio/handle.js +214 -0
- package/node_modules/execa/lib/stdio/input-option.js +50 -0
- package/node_modules/execa/lib/stdio/native.js +106 -0
- package/node_modules/execa/lib/stdio/stdio-option.js +60 -0
- package/node_modules/execa/lib/stdio/type.js +173 -0
- package/node_modules/execa/lib/terminate/cancel.js +20 -0
- package/node_modules/execa/lib/terminate/cleanup.js +16 -0
- package/node_modules/execa/lib/terminate/graceful.js +71 -0
- package/node_modules/execa/lib/terminate/kill.js +93 -0
- package/node_modules/execa/lib/terminate/signal.js +70 -0
- package/node_modules/execa/lib/terminate/timeout.js +21 -0
- package/node_modules/execa/lib/transform/encoding-transform.js +51 -0
- package/node_modules/execa/lib/transform/generator.js +107 -0
- package/node_modules/execa/lib/transform/normalize.js +111 -0
- package/node_modules/execa/lib/transform/object-mode.js +41 -0
- package/node_modules/execa/lib/transform/run-async.js +60 -0
- package/node_modules/execa/lib/transform/run-sync.js +50 -0
- package/node_modules/execa/lib/transform/split.js +110 -0
- package/node_modules/execa/lib/transform/validate.js +43 -0
- package/node_modules/execa/lib/utils/abort-signal.js +8 -0
- package/node_modules/execa/lib/utils/deferred.js +7 -0
- package/node_modules/execa/lib/utils/max-listeners.js +14 -0
- package/node_modules/execa/lib/utils/standard-stream.js +6 -0
- package/node_modules/execa/lib/utils/uint-array.js +69 -0
- package/node_modules/execa/lib/verbose/complete.js +24 -0
- package/node_modules/execa/lib/verbose/custom.js +26 -0
- package/node_modules/execa/lib/verbose/default.js +54 -0
- package/node_modules/execa/lib/verbose/error.js +13 -0
- package/node_modules/execa/lib/verbose/info.js +39 -0
- package/node_modules/execa/lib/verbose/ipc.js +15 -0
- package/node_modules/execa/lib/verbose/log.js +54 -0
- package/node_modules/execa/lib/verbose/output.js +60 -0
- package/node_modules/execa/lib/verbose/start.js +15 -0
- package/node_modules/execa/lib/verbose/values.js +33 -0
- package/node_modules/execa/license +9 -0
- package/node_modules/execa/package.json +105 -0
- package/node_modules/execa/readme.md +461 -0
- package/node_modules/execa/types/arguments/encoding-option.d.ts +19 -0
- package/node_modules/execa/types/arguments/fd-options.d.ts +8 -0
- package/node_modules/execa/types/arguments/options.d.ts +400 -0
- package/node_modules/execa/types/arguments/specific.d.ts +52 -0
- package/node_modules/execa/types/convert.d.ts +58 -0
- package/node_modules/execa/types/ipc.d.ts +156 -0
- package/node_modules/execa/types/methods/command.d.ts +114 -0
- package/node_modules/execa/types/methods/main-async.d.ts +379 -0
- package/node_modules/execa/types/methods/main-sync.d.ts +59 -0
- package/node_modules/execa/types/methods/node.d.ts +62 -0
- package/node_modules/execa/types/methods/script.d.ts +115 -0
- package/node_modules/execa/types/methods/template.d.ts +18 -0
- package/node_modules/execa/types/pipe.d.ts +58 -0
- package/node_modules/execa/types/return/final-error.d.ts +51 -0
- package/node_modules/execa/types/return/ignore.d.ts +26 -0
- package/node_modules/execa/types/return/result-all.d.ts +30 -0
- package/node_modules/execa/types/return/result-ipc.d.ts +27 -0
- package/node_modules/execa/types/return/result-stdio.d.ts +17 -0
- package/node_modules/execa/types/return/result-stdout.d.ts +50 -0
- package/node_modules/execa/types/return/result.d.ts +203 -0
- package/node_modules/execa/types/stdio/array.d.ts +16 -0
- package/node_modules/execa/types/stdio/direction.d.ts +12 -0
- package/node_modules/execa/types/stdio/option.d.ts +40 -0
- package/node_modules/execa/types/stdio/type.d.ts +170 -0
- package/node_modules/execa/types/subprocess/all.d.ts +17 -0
- package/node_modules/execa/types/subprocess/stdio.d.ts +18 -0
- package/node_modules/execa/types/subprocess/stdout.d.ts +22 -0
- package/node_modules/execa/types/subprocess/subprocess.d.ts +117 -0
- package/node_modules/execa/types/transform/normalize.d.ts +57 -0
- package/node_modules/execa/types/transform/object-mode.d.ts +21 -0
- package/node_modules/execa/types/utils.d.ts +13 -0
- package/node_modules/execa/types/verbose.d.ts +98 -0
- package/node_modules/extend-shallow/LICENSE +21 -0
- package/node_modules/extend-shallow/README.md +61 -0
- package/node_modules/extend-shallow/index.js +33 -0
- package/node_modules/extend-shallow/package.json +56 -0
- package/node_modules/fast-string-truncated-width/dist/index.d.ts +4 -0
- package/node_modules/fast-string-truncated-width/dist/index.js +111 -0
- package/node_modules/fast-string-truncated-width/dist/types.d.ts +19 -0
- package/node_modules/fast-string-truncated-width/dist/types.js +2 -0
- package/node_modules/fast-string-truncated-width/dist/utils.d.ts +4 -0
- package/node_modules/fast-string-truncated-width/dist/utils.js +20 -0
- package/node_modules/fast-string-truncated-width/license +21 -0
- package/node_modules/fast-string-truncated-width/package.json +35 -0
- package/node_modules/fast-string-truncated-width/readme.md +59 -0
- package/node_modules/fast-string-width/dist/index.d.ts +4 -0
- package/node_modules/fast-string-width/dist/index.js +14 -0
- package/node_modules/fast-string-width/license +21 -0
- package/node_modules/fast-string-width/package.json +34 -0
- package/node_modules/fast-string-width/readme.md +42 -0
- package/node_modules/fast-wrap-ansi/LICENSE +23 -0
- package/node_modules/fast-wrap-ansi/README.md +26 -0
- package/node_modules/fast-wrap-ansi/lib/main.d.ts +6 -0
- package/node_modules/fast-wrap-ansi/lib/main.js +218 -0
- package/node_modules/fast-wrap-ansi/package.json +51 -0
- package/node_modules/figures/index.d.ts +279 -0
- package/node_modules/figures/index.js +292 -0
- package/node_modules/figures/license +9 -0
- package/node_modules/figures/package.json +49 -0
- package/node_modules/figures/readme.md +337 -0
- package/node_modules/get-stream/license +9 -0
- package/node_modules/get-stream/package.json +60 -0
- package/node_modules/get-stream/readme.md +303 -0
- package/node_modules/get-stream/source/array-buffer.js +84 -0
- package/node_modules/get-stream/source/array.js +32 -0
- package/node_modules/get-stream/source/buffer.js +19 -0
- package/node_modules/get-stream/source/contents.js +121 -0
- package/node_modules/get-stream/source/exports.js +5 -0
- package/node_modules/get-stream/source/index.d.ts +121 -0
- package/node_modules/get-stream/source/index.js +13 -0
- package/node_modules/get-stream/source/stream.js +65 -0
- package/node_modules/get-stream/source/string.js +41 -0
- package/node_modules/get-stream/source/utils.js +11 -0
- package/node_modules/gray-matter/LICENSE +21 -0
- package/node_modules/gray-matter/README.md +565 -0
- package/node_modules/gray-matter/gray-matter.d.ts +114 -0
- package/node_modules/gray-matter/index.js +228 -0
- package/node_modules/gray-matter/lib/defaults.js +18 -0
- package/node_modules/gray-matter/lib/engine.js +30 -0
- package/node_modules/gray-matter/lib/engines.js +54 -0
- package/node_modules/gray-matter/lib/excerpt.js +32 -0
- package/node_modules/gray-matter/lib/parse.js +13 -0
- package/node_modules/gray-matter/lib/stringify.js +56 -0
- package/node_modules/gray-matter/lib/to-file.js +43 -0
- package/node_modules/gray-matter/lib/utils.js +66 -0
- package/node_modules/gray-matter/package.json +127 -0
- package/node_modules/human-signals/LICENSE +201 -0
- package/node_modules/human-signals/README.md +171 -0
- package/node_modules/human-signals/build/src/core.js +273 -0
- package/node_modules/human-signals/build/src/main.d.ts +206 -0
- package/node_modules/human-signals/build/src/main.js +70 -0
- package/node_modules/human-signals/build/src/realtime.js +16 -0
- package/node_modules/human-signals/build/src/signals.js +34 -0
- package/node_modules/human-signals/package.json +66 -0
- package/node_modules/iconv-lite/LICENSE +21 -0
- package/node_modules/iconv-lite/README.md +138 -0
- package/node_modules/iconv-lite/encodings/dbcs-codec.js +532 -0
- package/node_modules/iconv-lite/encodings/dbcs-data.js +185 -0
- package/node_modules/iconv-lite/encodings/index.js +23 -0
- package/node_modules/iconv-lite/encodings/internal.js +218 -0
- package/node_modules/iconv-lite/encodings/sbcs-codec.js +75 -0
- package/node_modules/iconv-lite/encodings/sbcs-data-generated.js +451 -0
- package/node_modules/iconv-lite/encodings/sbcs-data.js +180 -0
- package/node_modules/iconv-lite/encodings/tables/big5-added.json +122 -0
- package/node_modules/iconv-lite/encodings/tables/cp936.json +264 -0
- package/node_modules/iconv-lite/encodings/tables/cp949.json +273 -0
- package/node_modules/iconv-lite/encodings/tables/cp950.json +177 -0
- package/node_modules/iconv-lite/encodings/tables/eucjp.json +182 -0
- package/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json +1 -0
- package/node_modules/iconv-lite/encodings/tables/gbk-added.json +56 -0
- package/node_modules/iconv-lite/encodings/tables/shiftjis.json +125 -0
- package/node_modules/iconv-lite/encodings/utf16.js +187 -0
- package/node_modules/iconv-lite/encodings/utf32.js +314 -0
- package/node_modules/iconv-lite/encodings/utf7.js +283 -0
- package/node_modules/iconv-lite/lib/bom-handling.js +48 -0
- package/node_modules/iconv-lite/lib/helpers/merge-exports.js +13 -0
- package/node_modules/iconv-lite/lib/index.d.ts +129 -0
- package/node_modules/iconv-lite/lib/index.js +182 -0
- package/node_modules/iconv-lite/lib/streams.js +105 -0
- package/node_modules/iconv-lite/package.json +70 -0
- package/node_modules/iconv-lite/types/encodings.d.ts +425 -0
- package/node_modules/is-extendable/LICENSE +21 -0
- package/node_modules/is-extendable/README.md +72 -0
- package/node_modules/is-extendable/index.js +13 -0
- package/node_modules/is-extendable/package.json +51 -0
- package/node_modules/is-plain-obj/index.d.ts +35 -0
- package/node_modules/is-plain-obj/index.js +8 -0
- package/node_modules/is-plain-obj/license +9 -0
- package/node_modules/is-plain-obj/package.json +41 -0
- package/node_modules/is-plain-obj/readme.md +58 -0
- package/node_modules/is-stream/index.d.ts +90 -0
- package/node_modules/is-stream/index.js +37 -0
- package/node_modules/is-stream/license +9 -0
- package/node_modules/is-stream/package.json +48 -0
- package/node_modules/is-stream/readme.md +57 -0
- package/node_modules/is-unicode-supported/index.d.ts +12 -0
- package/node_modules/is-unicode-supported/index.js +21 -0
- package/node_modules/is-unicode-supported/license +9 -0
- package/node_modules/is-unicode-supported/package.json +47 -0
- package/node_modules/is-unicode-supported/readme.md +35 -0
- package/node_modules/isexe/.npmignore +2 -0
- package/node_modules/isexe/LICENSE +15 -0
- package/node_modules/isexe/README.md +51 -0
- package/node_modules/isexe/index.js +57 -0
- package/node_modules/isexe/mode.js +41 -0
- package/node_modules/isexe/package.json +31 -0
- package/node_modules/isexe/test/basic.js +221 -0
- package/node_modules/isexe/windows.js +42 -0
- package/node_modules/js-yaml/LICENSE +21 -0
- package/node_modules/js-yaml/README.md +302 -0
- package/node_modules/js-yaml/bin/js-yaml.js +132 -0
- package/node_modules/js-yaml/dist/js-yaml.js +4011 -0
- package/node_modules/js-yaml/dist/js-yaml.min.js +1 -0
- package/node_modules/js-yaml/index.js +7 -0
- package/node_modules/js-yaml/lib/js-yaml/common.js +59 -0
- package/node_modules/js-yaml/lib/js-yaml/dumper.js +850 -0
- package/node_modules/js-yaml/lib/js-yaml/exception.js +43 -0
- package/node_modules/js-yaml/lib/js-yaml/loader.js +1666 -0
- package/node_modules/js-yaml/lib/js-yaml/mark.js +76 -0
- package/node_modules/js-yaml/lib/js-yaml/schema/core.js +18 -0
- package/node_modules/js-yaml/lib/js-yaml/schema/default_full.js +25 -0
- package/node_modules/js-yaml/lib/js-yaml/schema/default_safe.js +28 -0
- package/node_modules/js-yaml/lib/js-yaml/schema/failsafe.js +17 -0
- package/node_modules/js-yaml/lib/js-yaml/schema/json.js +25 -0
- package/node_modules/js-yaml/lib/js-yaml/schema.js +108 -0
- package/node_modules/js-yaml/lib/js-yaml/type/binary.js +138 -0
- package/node_modules/js-yaml/lib/js-yaml/type/bool.js +35 -0
- package/node_modules/js-yaml/lib/js-yaml/type/float.js +116 -0
- package/node_modules/js-yaml/lib/js-yaml/type/int.js +173 -0
- package/node_modules/js-yaml/lib/js-yaml/type/js/function.js +93 -0
- package/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js +60 -0
- package/node_modules/js-yaml/lib/js-yaml/type/js/undefined.js +28 -0
- package/node_modules/js-yaml/lib/js-yaml/type/map.js +8 -0
- package/node_modules/js-yaml/lib/js-yaml/type/merge.js +12 -0
- package/node_modules/js-yaml/lib/js-yaml/type/null.js +34 -0
- package/node_modules/js-yaml/lib/js-yaml/type/omap.js +44 -0
- package/node_modules/js-yaml/lib/js-yaml/type/pairs.js +53 -0
- package/node_modules/js-yaml/lib/js-yaml/type/seq.js +8 -0
- package/node_modules/js-yaml/lib/js-yaml/type/set.js +29 -0
- package/node_modules/js-yaml/lib/js-yaml/type/str.js +8 -0
- package/node_modules/js-yaml/lib/js-yaml/type/timestamp.js +88 -0
- package/node_modules/js-yaml/lib/js-yaml/type.js +61 -0
- package/node_modules/js-yaml/lib/js-yaml.js +39 -0
- package/node_modules/js-yaml/package.json +52 -0
- package/node_modules/kind-of/LICENSE +21 -0
- package/node_modules/kind-of/README.md +367 -0
- package/node_modules/kind-of/index.js +129 -0
- package/node_modules/kind-of/package.json +88 -0
- package/node_modules/mute-stream/LICENSE +15 -0
- package/node_modules/mute-stream/README.md +68 -0
- package/node_modules/mute-stream/lib/index.js +142 -0
- package/node_modules/mute-stream/package.json +54 -0
- package/node_modules/npm-run-path/index.d.ts +90 -0
- package/node_modules/npm-run-path/index.js +55 -0
- package/node_modules/npm-run-path/license +9 -0
- package/node_modules/npm-run-path/node_modules/path-key/index.d.ts +31 -0
- package/node_modules/npm-run-path/node_modules/path-key/index.js +12 -0
- package/node_modules/npm-run-path/node_modules/path-key/license +9 -0
- package/node_modules/npm-run-path/node_modules/path-key/package.json +41 -0
- package/node_modules/npm-run-path/node_modules/path-key/readme.md +57 -0
- package/node_modules/npm-run-path/package.json +52 -0
- package/node_modules/npm-run-path/readme.md +104 -0
- package/node_modules/parse-ms/index.d.ts +30 -0
- package/node_modules/parse-ms/index.js +45 -0
- package/node_modules/parse-ms/license +9 -0
- package/node_modules/parse-ms/package.json +47 -0
- package/node_modules/parse-ms/readme.md +46 -0
- package/node_modules/path-key/index.d.ts +40 -0
- package/node_modules/path-key/index.js +16 -0
- package/node_modules/path-key/license +9 -0
- package/node_modules/path-key/package.json +39 -0
- package/node_modules/path-key/readme.md +61 -0
- package/node_modules/picomatch/LICENSE +21 -0
- package/node_modules/picomatch/README.md +743 -0
- package/node_modules/picomatch/index.js +17 -0
- package/node_modules/picomatch/lib/constants.js +184 -0
- package/node_modules/picomatch/lib/parse.js +1416 -0
- package/node_modules/picomatch/lib/picomatch.js +361 -0
- package/node_modules/picomatch/lib/scan.js +391 -0
- package/node_modules/picomatch/lib/utils.js +72 -0
- package/node_modules/picomatch/package.json +83 -0
- package/node_modules/picomatch/posix.js +3 -0
- package/node_modules/pretty-ms/index.d.ts +157 -0
- package/node_modules/pretty-ms/index.js +149 -0
- package/node_modules/pretty-ms/license +9 -0
- package/node_modules/pretty-ms/package.json +55 -0
- package/node_modules/pretty-ms/readme.md +179 -0
- package/node_modules/safer-buffer/LICENSE +21 -0
- package/node_modules/safer-buffer/Porting-Buffer.md +268 -0
- package/node_modules/safer-buffer/Readme.md +156 -0
- package/node_modules/safer-buffer/dangerous.js +58 -0
- package/node_modules/safer-buffer/package.json +34 -0
- package/node_modules/safer-buffer/safer.js +77 -0
- package/node_modules/safer-buffer/tests.js +406 -0
- package/node_modules/section-matter/LICENSE +21 -0
- package/node_modules/section-matter/README.md +236 -0
- package/node_modules/section-matter/index.js +136 -0
- package/node_modules/section-matter/package.json +55 -0
- package/node_modules/shebang-command/index.js +19 -0
- package/node_modules/shebang-command/license +9 -0
- package/node_modules/shebang-command/package.json +34 -0
- package/node_modules/shebang-command/readme.md +34 -0
- package/node_modules/shebang-regex/index.d.ts +22 -0
- package/node_modules/shebang-regex/index.js +2 -0
- package/node_modules/shebang-regex/license +9 -0
- package/node_modules/shebang-regex/package.json +35 -0
- package/node_modules/shebang-regex/readme.md +33 -0
- package/node_modules/signal-exit/LICENSE.txt +16 -0
- package/node_modules/signal-exit/README.md +74 -0
- package/node_modules/signal-exit/dist/cjs/browser.d.ts +12 -0
- package/node_modules/signal-exit/dist/cjs/browser.d.ts.map +1 -0
- package/node_modules/signal-exit/dist/cjs/browser.js +10 -0
- package/node_modules/signal-exit/dist/cjs/browser.js.map +1 -0
- package/node_modules/signal-exit/dist/cjs/index.d.ts +48 -0
- package/node_modules/signal-exit/dist/cjs/index.d.ts.map +1 -0
- package/node_modules/signal-exit/dist/cjs/index.js +279 -0
- package/node_modules/signal-exit/dist/cjs/index.js.map +1 -0
- package/node_modules/signal-exit/dist/cjs/package.json +3 -0
- package/node_modules/signal-exit/dist/cjs/signals.d.ts +29 -0
- package/node_modules/signal-exit/dist/cjs/signals.d.ts.map +1 -0
- package/node_modules/signal-exit/dist/cjs/signals.js +42 -0
- package/node_modules/signal-exit/dist/cjs/signals.js.map +1 -0
- package/node_modules/signal-exit/dist/mjs/browser.d.ts +12 -0
- package/node_modules/signal-exit/dist/mjs/browser.d.ts.map +1 -0
- package/node_modules/signal-exit/dist/mjs/browser.js +4 -0
- package/node_modules/signal-exit/dist/mjs/browser.js.map +1 -0
- package/node_modules/signal-exit/dist/mjs/index.d.ts +48 -0
- package/node_modules/signal-exit/dist/mjs/index.d.ts.map +1 -0
- package/node_modules/signal-exit/dist/mjs/index.js +275 -0
- package/node_modules/signal-exit/dist/mjs/index.js.map +1 -0
- package/node_modules/signal-exit/dist/mjs/package.json +3 -0
- package/node_modules/signal-exit/dist/mjs/signals.d.ts +29 -0
- package/node_modules/signal-exit/dist/mjs/signals.d.ts.map +1 -0
- package/node_modules/signal-exit/dist/mjs/signals.js +39 -0
- package/node_modules/signal-exit/dist/mjs/signals.js.map +1 -0
- package/node_modules/signal-exit/package.json +106 -0
- package/node_modules/sprintf-js/.npmignore +1 -0
- package/node_modules/sprintf-js/LICENSE +24 -0
- package/node_modules/sprintf-js/README.md +88 -0
- package/node_modules/sprintf-js/bower.json +14 -0
- package/node_modules/sprintf-js/demo/angular.html +20 -0
- package/node_modules/sprintf-js/dist/angular-sprintf.min.js +4 -0
- package/node_modules/sprintf-js/dist/angular-sprintf.min.js.map +1 -0
- package/node_modules/sprintf-js/dist/angular-sprintf.min.map +1 -0
- package/node_modules/sprintf-js/dist/sprintf.min.js +4 -0
- package/node_modules/sprintf-js/dist/sprintf.min.js.map +1 -0
- package/node_modules/sprintf-js/dist/sprintf.min.map +1 -0
- package/node_modules/sprintf-js/gruntfile.js +36 -0
- package/node_modules/sprintf-js/package.json +22 -0
- package/node_modules/sprintf-js/src/angular-sprintf.js +18 -0
- package/node_modules/sprintf-js/src/sprintf.js +208 -0
- package/node_modules/sprintf-js/test/test.js +82 -0
- package/node_modules/strip-bom-string/LICENSE +21 -0
- package/node_modules/strip-bom-string/README.md +66 -0
- package/node_modules/strip-bom-string/index.js +15 -0
- package/node_modules/strip-bom-string/package.json +60 -0
- package/node_modules/strip-final-newline/index.d.ts +18 -0
- package/node_modules/strip-final-newline/index.js +26 -0
- package/node_modules/strip-final-newline/license +9 -0
- package/node_modules/strip-final-newline/package.json +49 -0
- package/node_modules/strip-final-newline/readme.md +34 -0
- package/node_modules/unicorn-magic/default.d.ts +13 -0
- package/node_modules/unicorn-magic/default.js +14 -0
- package/node_modules/unicorn-magic/license +9 -0
- package/node_modules/unicorn-magic/node.d.ts +125 -0
- package/node_modules/unicorn-magic/node.js +49 -0
- package/node_modules/unicorn-magic/package.json +62 -0
- package/node_modules/unicorn-magic/readme.md +25 -0
- package/node_modules/which/LICENSE +15 -0
- package/node_modules/which/README.md +54 -0
- package/node_modules/which/bin/node-which +52 -0
- package/node_modules/which/package.json +43 -0
- package/node_modules/which/which.js +125 -0
- package/node_modules/yaml/LICENSE +13 -0
- package/node_modules/yaml/README.md +172 -0
- package/node_modules/yaml/bin.mjs +11 -0
- package/node_modules/yaml/browser/dist/compose/compose-collection.js +88 -0
- package/node_modules/yaml/browser/dist/compose/compose-doc.js +43 -0
- package/node_modules/yaml/browser/dist/compose/compose-node.js +109 -0
- package/node_modules/yaml/browser/dist/compose/compose-scalar.js +86 -0
- package/node_modules/yaml/browser/dist/compose/composer.js +219 -0
- package/node_modules/yaml/browser/dist/compose/resolve-block-map.js +115 -0
- package/node_modules/yaml/browser/dist/compose/resolve-block-scalar.js +198 -0
- package/node_modules/yaml/browser/dist/compose/resolve-block-seq.js +49 -0
- package/node_modules/yaml/browser/dist/compose/resolve-end.js +37 -0
- package/node_modules/yaml/browser/dist/compose/resolve-flow-collection.js +207 -0
- package/node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js +225 -0
- package/node_modules/yaml/browser/dist/compose/resolve-props.js +146 -0
- package/node_modules/yaml/browser/dist/compose/util-contains-newline.js +34 -0
- package/node_modules/yaml/browser/dist/compose/util-empty-scalar-position.js +26 -0
- package/node_modules/yaml/browser/dist/compose/util-flow-indent-check.js +15 -0
- package/node_modules/yaml/browser/dist/compose/util-map-includes.js +13 -0
- package/node_modules/yaml/browser/dist/doc/Document.js +335 -0
- package/node_modules/yaml/browser/dist/doc/anchors.js +71 -0
- package/node_modules/yaml/browser/dist/doc/applyReviver.js +55 -0
- package/node_modules/yaml/browser/dist/doc/createNode.js +88 -0
- package/node_modules/yaml/browser/dist/doc/directives.js +176 -0
- package/node_modules/yaml/browser/dist/errors.js +57 -0
- package/node_modules/yaml/browser/dist/index.js +17 -0
- package/node_modules/yaml/browser/dist/log.js +11 -0
- package/node_modules/yaml/browser/dist/nodes/Alias.js +116 -0
- package/node_modules/yaml/browser/dist/nodes/Collection.js +147 -0
- package/node_modules/yaml/browser/dist/nodes/Node.js +38 -0
- package/node_modules/yaml/browser/dist/nodes/Pair.js +36 -0
- package/node_modules/yaml/browser/dist/nodes/Scalar.js +24 -0
- package/node_modules/yaml/browser/dist/nodes/YAMLMap.js +144 -0
- package/node_modules/yaml/browser/dist/nodes/YAMLSeq.js +113 -0
- package/node_modules/yaml/browser/dist/nodes/addPairToJSMap.js +63 -0
- package/node_modules/yaml/browser/dist/nodes/identity.js +36 -0
- package/node_modules/yaml/browser/dist/nodes/toJS.js +37 -0
- package/node_modules/yaml/browser/dist/parse/cst-scalar.js +214 -0
- package/node_modules/yaml/browser/dist/parse/cst-stringify.js +61 -0
- package/node_modules/yaml/browser/dist/parse/cst-visit.js +97 -0
- package/node_modules/yaml/browser/dist/parse/cst.js +98 -0
- package/node_modules/yaml/browser/dist/parse/lexer.js +721 -0
- package/node_modules/yaml/browser/dist/parse/line-counter.js +39 -0
- package/node_modules/yaml/browser/dist/parse/parser.js +975 -0
- package/node_modules/yaml/browser/dist/public-api.js +102 -0
- package/node_modules/yaml/browser/dist/schema/Schema.js +37 -0
- package/node_modules/yaml/browser/dist/schema/common/map.js +17 -0
- package/node_modules/yaml/browser/dist/schema/common/null.js +15 -0
- package/node_modules/yaml/browser/dist/schema/common/seq.js +17 -0
- package/node_modules/yaml/browser/dist/schema/common/string.js +14 -0
- package/node_modules/yaml/browser/dist/schema/core/bool.js +19 -0
- package/node_modules/yaml/browser/dist/schema/core/float.js +43 -0
- package/node_modules/yaml/browser/dist/schema/core/int.js +38 -0
- package/node_modules/yaml/browser/dist/schema/core/schema.js +23 -0
- package/node_modules/yaml/browser/dist/schema/json/schema.js +62 -0
- package/node_modules/yaml/browser/dist/schema/tags.js +96 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/binary.js +58 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/bool.js +26 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/float.js +46 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/int.js +71 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/merge.js +67 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/omap.js +74 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/pairs.js +78 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/schema.js +39 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/set.js +93 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/timestamp.js +101 -0
- package/node_modules/yaml/browser/dist/stringify/foldFlowLines.js +146 -0
- package/node_modules/yaml/browser/dist/stringify/stringify.js +129 -0
- package/node_modules/yaml/browser/dist/stringify/stringifyCollection.js +153 -0
- package/node_modules/yaml/browser/dist/stringify/stringifyComment.js +20 -0
- package/node_modules/yaml/browser/dist/stringify/stringifyDocument.js +85 -0
- package/node_modules/yaml/browser/dist/stringify/stringifyNumber.js +25 -0
- package/node_modules/yaml/browser/dist/stringify/stringifyPair.js +150 -0
- package/node_modules/yaml/browser/dist/stringify/stringifyString.js +336 -0
- package/node_modules/yaml/browser/dist/util.js +11 -0
- package/node_modules/yaml/browser/dist/visit.js +233 -0
- package/node_modules/yaml/browser/index.js +5 -0
- package/node_modules/yaml/browser/package.json +3 -0
- package/node_modules/yaml/dist/cli.d.ts +8 -0
- package/node_modules/yaml/dist/cli.mjs +201 -0
- package/node_modules/yaml/dist/compose/compose-collection.d.ts +11 -0
- package/node_modules/yaml/dist/compose/compose-collection.js +90 -0
- package/node_modules/yaml/dist/compose/compose-doc.d.ts +7 -0
- package/node_modules/yaml/dist/compose/compose-doc.js +45 -0
- package/node_modules/yaml/dist/compose/compose-node.d.ts +29 -0
- package/node_modules/yaml/dist/compose/compose-node.js +112 -0
- package/node_modules/yaml/dist/compose/compose-scalar.d.ts +5 -0
- package/node_modules/yaml/dist/compose/compose-scalar.js +88 -0
- package/node_modules/yaml/dist/compose/composer.d.ts +63 -0
- package/node_modules/yaml/dist/compose/composer.js +224 -0
- package/node_modules/yaml/dist/compose/resolve-block-map.d.ts +6 -0
- package/node_modules/yaml/dist/compose/resolve-block-map.js +117 -0
- package/node_modules/yaml/dist/compose/resolve-block-scalar.d.ts +11 -0
- package/node_modules/yaml/dist/compose/resolve-block-scalar.js +200 -0
- package/node_modules/yaml/dist/compose/resolve-block-seq.d.ts +6 -0
- package/node_modules/yaml/dist/compose/resolve-block-seq.js +51 -0
- package/node_modules/yaml/dist/compose/resolve-end.d.ts +6 -0
- package/node_modules/yaml/dist/compose/resolve-end.js +39 -0
- package/node_modules/yaml/dist/compose/resolve-flow-collection.d.ts +7 -0
- package/node_modules/yaml/dist/compose/resolve-flow-collection.js +209 -0
- package/node_modules/yaml/dist/compose/resolve-flow-scalar.d.ts +10 -0
- package/node_modules/yaml/dist/compose/resolve-flow-scalar.js +227 -0
- package/node_modules/yaml/dist/compose/resolve-props.d.ts +23 -0
- package/node_modules/yaml/dist/compose/resolve-props.js +148 -0
- package/node_modules/yaml/dist/compose/util-contains-newline.d.ts +2 -0
- package/node_modules/yaml/dist/compose/util-contains-newline.js +36 -0
- package/node_modules/yaml/dist/compose/util-empty-scalar-position.d.ts +2 -0
- package/node_modules/yaml/dist/compose/util-empty-scalar-position.js +28 -0
- package/node_modules/yaml/dist/compose/util-flow-indent-check.d.ts +3 -0
- package/node_modules/yaml/dist/compose/util-flow-indent-check.js +17 -0
- package/node_modules/yaml/dist/compose/util-map-includes.d.ts +4 -0
- package/node_modules/yaml/dist/compose/util-map-includes.js +15 -0
- package/node_modules/yaml/dist/doc/Document.d.ts +141 -0
- package/node_modules/yaml/dist/doc/Document.js +337 -0
- package/node_modules/yaml/dist/doc/anchors.d.ts +24 -0
- package/node_modules/yaml/dist/doc/anchors.js +76 -0
- package/node_modules/yaml/dist/doc/applyReviver.d.ts +9 -0
- package/node_modules/yaml/dist/doc/applyReviver.js +57 -0
- package/node_modules/yaml/dist/doc/createNode.d.ts +17 -0
- package/node_modules/yaml/dist/doc/createNode.js +90 -0
- package/node_modules/yaml/dist/doc/directives.d.ts +49 -0
- package/node_modules/yaml/dist/doc/directives.js +178 -0
- package/node_modules/yaml/dist/errors.d.ts +21 -0
- package/node_modules/yaml/dist/errors.js +62 -0
- package/node_modules/yaml/dist/index.d.ts +25 -0
- package/node_modules/yaml/dist/index.js +50 -0
- package/node_modules/yaml/dist/log.d.ts +3 -0
- package/node_modules/yaml/dist/log.js +19 -0
- package/node_modules/yaml/dist/nodes/Alias.d.ts +29 -0
- package/node_modules/yaml/dist/nodes/Alias.js +118 -0
- package/node_modules/yaml/dist/nodes/Collection.d.ts +73 -0
- package/node_modules/yaml/dist/nodes/Collection.js +151 -0
- package/node_modules/yaml/dist/nodes/Node.d.ts +53 -0
- package/node_modules/yaml/dist/nodes/Node.js +40 -0
- package/node_modules/yaml/dist/nodes/Pair.d.ts +22 -0
- package/node_modules/yaml/dist/nodes/Pair.js +39 -0
- package/node_modules/yaml/dist/nodes/Scalar.d.ts +47 -0
- package/node_modules/yaml/dist/nodes/Scalar.js +27 -0
- package/node_modules/yaml/dist/nodes/YAMLMap.d.ts +53 -0
- package/node_modules/yaml/dist/nodes/YAMLMap.js +147 -0
- package/node_modules/yaml/dist/nodes/YAMLSeq.d.ts +60 -0
- package/node_modules/yaml/dist/nodes/YAMLSeq.js +115 -0
- package/node_modules/yaml/dist/nodes/addPairToJSMap.d.ts +4 -0
- package/node_modules/yaml/dist/nodes/addPairToJSMap.js +65 -0
- package/node_modules/yaml/dist/nodes/identity.d.ts +23 -0
- package/node_modules/yaml/dist/nodes/identity.js +53 -0
- package/node_modules/yaml/dist/nodes/toJS.d.ts +29 -0
- package/node_modules/yaml/dist/nodes/toJS.js +39 -0
- package/node_modules/yaml/dist/options.d.ts +350 -0
- package/node_modules/yaml/dist/parse/cst-scalar.d.ts +64 -0
- package/node_modules/yaml/dist/parse/cst-scalar.js +218 -0
- package/node_modules/yaml/dist/parse/cst-stringify.d.ts +8 -0
- package/node_modules/yaml/dist/parse/cst-stringify.js +63 -0
- package/node_modules/yaml/dist/parse/cst-visit.d.ts +39 -0
- package/node_modules/yaml/dist/parse/cst-visit.js +99 -0
- package/node_modules/yaml/dist/parse/cst.d.ts +109 -0
- package/node_modules/yaml/dist/parse/cst.js +112 -0
- package/node_modules/yaml/dist/parse/lexer.d.ts +87 -0
- package/node_modules/yaml/dist/parse/lexer.js +723 -0
- package/node_modules/yaml/dist/parse/line-counter.d.ts +22 -0
- package/node_modules/yaml/dist/parse/line-counter.js +41 -0
- package/node_modules/yaml/dist/parse/parser.d.ts +84 -0
- package/node_modules/yaml/dist/parse/parser.js +980 -0
- package/node_modules/yaml/dist/public-api.d.ts +44 -0
- package/node_modules/yaml/dist/public-api.js +107 -0
- package/node_modules/yaml/dist/schema/Schema.d.ts +17 -0
- package/node_modules/yaml/dist/schema/Schema.js +39 -0
- package/node_modules/yaml/dist/schema/common/map.d.ts +2 -0
- package/node_modules/yaml/dist/schema/common/map.js +19 -0
- package/node_modules/yaml/dist/schema/common/null.d.ts +4 -0
- package/node_modules/yaml/dist/schema/common/null.js +17 -0
- package/node_modules/yaml/dist/schema/common/seq.d.ts +2 -0
- package/node_modules/yaml/dist/schema/common/seq.js +19 -0
- package/node_modules/yaml/dist/schema/common/string.d.ts +2 -0
- package/node_modules/yaml/dist/schema/common/string.js +16 -0
- package/node_modules/yaml/dist/schema/core/bool.d.ts +4 -0
- package/node_modules/yaml/dist/schema/core/bool.js +21 -0
- package/node_modules/yaml/dist/schema/core/float.d.ts +4 -0
- package/node_modules/yaml/dist/schema/core/float.js +47 -0
- package/node_modules/yaml/dist/schema/core/int.d.ts +4 -0
- package/node_modules/yaml/dist/schema/core/int.js +42 -0
- package/node_modules/yaml/dist/schema/core/schema.d.ts +1 -0
- package/node_modules/yaml/dist/schema/core/schema.js +25 -0
- package/node_modules/yaml/dist/schema/json/schema.d.ts +2 -0
- package/node_modules/yaml/dist/schema/json/schema.js +64 -0
- package/node_modules/yaml/dist/schema/json-schema.d.ts +69 -0
- package/node_modules/yaml/dist/schema/tags.d.ts +48 -0
- package/node_modules/yaml/dist/schema/tags.js +99 -0
- package/node_modules/yaml/dist/schema/types.d.ts +92 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/binary.d.ts +2 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/binary.js +70 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/bool.d.ts +7 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/bool.js +29 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/float.d.ts +4 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/float.js +50 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/int.d.ts +5 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/int.js +76 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/merge.d.ts +9 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/merge.js +71 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/omap.d.ts +22 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/omap.js +77 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/pairs.d.ts +10 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/pairs.js +82 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/schema.d.ts +1 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/schema.js +41 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/set.d.ts +28 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/set.js +96 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/timestamp.d.ts +6 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js +105 -0
- package/node_modules/yaml/dist/stringify/foldFlowLines.d.ts +34 -0
- package/node_modules/yaml/dist/stringify/foldFlowLines.js +151 -0
- package/node_modules/yaml/dist/stringify/stringify.d.ts +21 -0
- package/node_modules/yaml/dist/stringify/stringify.js +132 -0
- package/node_modules/yaml/dist/stringify/stringifyCollection.d.ts +17 -0
- package/node_modules/yaml/dist/stringify/stringifyCollection.js +155 -0
- package/node_modules/yaml/dist/stringify/stringifyComment.d.ts +10 -0
- package/node_modules/yaml/dist/stringify/stringifyComment.js +24 -0
- package/node_modules/yaml/dist/stringify/stringifyDocument.d.ts +4 -0
- package/node_modules/yaml/dist/stringify/stringifyDocument.js +87 -0
- package/node_modules/yaml/dist/stringify/stringifyNumber.d.ts +2 -0
- package/node_modules/yaml/dist/stringify/stringifyNumber.js +27 -0
- package/node_modules/yaml/dist/stringify/stringifyPair.d.ts +3 -0
- package/node_modules/yaml/dist/stringify/stringifyPair.js +152 -0
- package/node_modules/yaml/dist/stringify/stringifyString.d.ts +9 -0
- package/node_modules/yaml/dist/stringify/stringifyString.js +338 -0
- package/node_modules/yaml/dist/test-events.d.ts +4 -0
- package/node_modules/yaml/dist/test-events.js +134 -0
- package/node_modules/yaml/dist/util.d.ts +16 -0
- package/node_modules/yaml/dist/util.js +28 -0
- package/node_modules/yaml/dist/visit.d.ts +102 -0
- package/node_modules/yaml/dist/visit.js +236 -0
- package/node_modules/yaml/package.json +97 -0
- package/node_modules/yaml/util.js +2 -0
- package/node_modules/yoctocolors/base.d.ts +47 -0
- package/node_modules/yoctocolors/base.js +94 -0
- package/node_modules/yoctocolors/index.d.ts +2 -0
- package/node_modules/yoctocolors/index.js +2 -0
- package/node_modules/yoctocolors/license +9 -0
- package/node_modules/yoctocolors/package.json +69 -0
- package/node_modules/yoctocolors/readme.md +138 -0
- package/node_modules/zod/LICENSE +21 -0
- package/node_modules/zod/README.md +191 -0
- package/node_modules/zod/index.cjs +33 -0
- package/node_modules/zod/index.d.cts +4 -0
- package/node_modules/zod/index.d.ts +4 -0
- package/node_modules/zod/index.js +4 -0
- package/node_modules/zod/locales/index.cjs +17 -0
- package/node_modules/zod/locales/index.d.cts +1 -0
- package/node_modules/zod/locales/index.d.ts +1 -0
- package/node_modules/zod/locales/index.js +1 -0
- package/node_modules/zod/locales/package.json +7 -0
- package/node_modules/zod/mini/index.cjs +32 -0
- package/node_modules/zod/mini/index.d.cts +3 -0
- package/node_modules/zod/mini/index.d.ts +3 -0
- package/node_modules/zod/mini/index.js +3 -0
- package/node_modules/zod/mini/package.json +7 -0
- package/node_modules/zod/package.json +135 -0
- package/node_modules/zod/src/index.ts +4 -0
- package/node_modules/zod/src/locales/index.ts +1 -0
- package/node_modules/zod/src/mini/index.ts +3 -0
- package/node_modules/zod/src/v3/ZodError.ts +330 -0
- package/node_modules/zod/src/v3/benchmarks/datetime.ts +58 -0
- package/node_modules/zod/src/v3/benchmarks/discriminatedUnion.ts +80 -0
- package/node_modules/zod/src/v3/benchmarks/index.ts +59 -0
- package/node_modules/zod/src/v3/benchmarks/ipv4.ts +57 -0
- package/node_modules/zod/src/v3/benchmarks/object.ts +69 -0
- package/node_modules/zod/src/v3/benchmarks/primitives.ts +162 -0
- package/node_modules/zod/src/v3/benchmarks/realworld.ts +63 -0
- package/node_modules/zod/src/v3/benchmarks/string.ts +55 -0
- package/node_modules/zod/src/v3/benchmarks/union.ts +80 -0
- package/node_modules/zod/src/v3/errors.ts +13 -0
- package/node_modules/zod/src/v3/external.ts +6 -0
- package/node_modules/zod/src/v3/helpers/enumUtil.ts +17 -0
- package/node_modules/zod/src/v3/helpers/errorUtil.ts +8 -0
- package/node_modules/zod/src/v3/helpers/parseUtil.ts +176 -0
- package/node_modules/zod/src/v3/helpers/partialUtil.ts +34 -0
- package/node_modules/zod/src/v3/helpers/typeAliases.ts +2 -0
- package/node_modules/zod/src/v3/helpers/util.ts +224 -0
- package/node_modules/zod/src/v3/index.ts +4 -0
- package/node_modules/zod/src/v3/locales/en.ts +124 -0
- package/node_modules/zod/src/v3/standard-schema.ts +113 -0
- package/node_modules/zod/src/v3/tests/Mocker.ts +54 -0
- package/node_modules/zod/src/v3/tests/all-errors.test.ts +157 -0
- package/node_modules/zod/src/v3/tests/anyunknown.test.ts +28 -0
- package/node_modules/zod/src/v3/tests/array.test.ts +71 -0
- package/node_modules/zod/src/v3/tests/async-parsing.test.ts +388 -0
- package/node_modules/zod/src/v3/tests/async-refinements.test.ts +46 -0
- package/node_modules/zod/src/v3/tests/base.test.ts +29 -0
- package/node_modules/zod/src/v3/tests/bigint.test.ts +55 -0
- package/node_modules/zod/src/v3/tests/branded.test.ts +53 -0
- package/node_modules/zod/src/v3/tests/catch.test.ts +220 -0
- package/node_modules/zod/src/v3/tests/coerce.test.ts +133 -0
- package/node_modules/zod/src/v3/tests/complex.test.ts +70 -0
- package/node_modules/zod/src/v3/tests/custom.test.ts +31 -0
- package/node_modules/zod/src/v3/tests/date.test.ts +32 -0
- package/node_modules/zod/src/v3/tests/deepmasking.test.ts +186 -0
- package/node_modules/zod/src/v3/tests/default.test.ts +112 -0
- package/node_modules/zod/src/v3/tests/description.test.ts +33 -0
- package/node_modules/zod/src/v3/tests/discriminated-unions.test.ts +315 -0
- package/node_modules/zod/src/v3/tests/enum.test.ts +80 -0
- package/node_modules/zod/src/v3/tests/error.test.ts +551 -0
- package/node_modules/zod/src/v3/tests/firstparty.test.ts +87 -0
- package/node_modules/zod/src/v3/tests/firstpartyschematypes.test.ts +21 -0
- package/node_modules/zod/src/v3/tests/function.test.ts +261 -0
- package/node_modules/zod/src/v3/tests/generics.test.ts +48 -0
- package/node_modules/zod/src/v3/tests/instanceof.test.ts +37 -0
- package/node_modules/zod/src/v3/tests/intersection.test.ts +110 -0
- package/node_modules/zod/src/v3/tests/language-server.source.ts +76 -0
- package/node_modules/zod/src/v3/tests/language-server.test.ts +207 -0
- package/node_modules/zod/src/v3/tests/literal.test.ts +36 -0
- package/node_modules/zod/src/v3/tests/map.test.ts +110 -0
- package/node_modules/zod/src/v3/tests/masking.test.ts +4 -0
- package/node_modules/zod/src/v3/tests/mocker.test.ts +19 -0
- package/node_modules/zod/src/v3/tests/nan.test.ts +24 -0
- package/node_modules/zod/src/v3/tests/nativeEnum.test.ts +87 -0
- package/node_modules/zod/src/v3/tests/nullable.test.ts +42 -0
- package/node_modules/zod/src/v3/tests/number.test.ts +176 -0
- package/node_modules/zod/src/v3/tests/object-augmentation.test.ts +29 -0
- package/node_modules/zod/src/v3/tests/object-in-es5-env.test.ts +29 -0
- package/node_modules/zod/src/v3/tests/object.test.ts +434 -0
- package/node_modules/zod/src/v3/tests/optional.test.ts +42 -0
- package/node_modules/zod/src/v3/tests/parseUtil.test.ts +23 -0
- package/node_modules/zod/src/v3/tests/parser.test.ts +41 -0
- package/node_modules/zod/src/v3/tests/partials.test.ts +243 -0
- package/node_modules/zod/src/v3/tests/pickomit.test.ts +111 -0
- package/node_modules/zod/src/v3/tests/pipeline.test.ts +29 -0
- package/node_modules/zod/src/v3/tests/preprocess.test.ts +186 -0
- package/node_modules/zod/src/v3/tests/primitive.test.ts +440 -0
- package/node_modules/zod/src/v3/tests/promise.test.ts +90 -0
- package/node_modules/zod/src/v3/tests/readonly.test.ts +194 -0
- package/node_modules/zod/src/v3/tests/record.test.ts +171 -0
- package/node_modules/zod/src/v3/tests/recursive.test.ts +197 -0
- package/node_modules/zod/src/v3/tests/refine.test.ts +313 -0
- package/node_modules/zod/src/v3/tests/safeparse.test.ts +27 -0
- package/node_modules/zod/src/v3/tests/set.test.ts +142 -0
- package/node_modules/zod/src/v3/tests/standard-schema.test.ts +83 -0
- package/node_modules/zod/src/v3/tests/string.test.ts +916 -0
- package/node_modules/zod/src/v3/tests/transformer.test.ts +233 -0
- package/node_modules/zod/src/v3/tests/tuple.test.ts +90 -0
- package/node_modules/zod/src/v3/tests/unions.test.ts +57 -0
- package/node_modules/zod/src/v3/tests/validations.test.ts +133 -0
- package/node_modules/zod/src/v3/tests/void.test.ts +15 -0
- package/node_modules/zod/src/v3/types.ts +5138 -0
- package/node_modules/zod/src/v4/classic/checks.ts +32 -0
- package/node_modules/zod/src/v4/classic/coerce.ts +27 -0
- package/node_modules/zod/src/v4/classic/compat.ts +70 -0
- package/node_modules/zod/src/v4/classic/errors.ts +82 -0
- package/node_modules/zod/src/v4/classic/external.ts +52 -0
- package/node_modules/zod/src/v4/classic/from-json-schema.ts +659 -0
- package/node_modules/zod/src/v4/classic/index.ts +5 -0
- package/node_modules/zod/src/v4/classic/iso.ts +90 -0
- package/node_modules/zod/src/v4/classic/parse.ts +82 -0
- package/node_modules/zod/src/v4/classic/schemas.ts +2672 -0
- package/node_modules/zod/src/v4/classic/tests/anyunknown.test.ts +26 -0
- package/node_modules/zod/src/v4/classic/tests/apply.test.ts +59 -0
- package/node_modules/zod/src/v4/classic/tests/array.test.ts +264 -0
- package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +216 -0
- package/node_modules/zod/src/v4/classic/tests/async-parsing.test.ts +381 -0
- package/node_modules/zod/src/v4/classic/tests/async-refinements.test.ts +68 -0
- package/node_modules/zod/src/v4/classic/tests/base.test.ts +7 -0
- package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +54 -0
- package/node_modules/zod/src/v4/classic/tests/brand.test.ts +106 -0
- package/node_modules/zod/src/v4/classic/tests/catch.test.ts +326 -0
- package/node_modules/zod/src/v4/classic/tests/coalesce.test.ts +20 -0
- package/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +573 -0
- package/node_modules/zod/src/v4/classic/tests/codec.test.ts +703 -0
- package/node_modules/zod/src/v4/classic/tests/coerce.test.ts +160 -0
- package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +374 -0
- package/node_modules/zod/src/v4/classic/tests/custom.test.ts +40 -0
- package/node_modules/zod/src/v4/classic/tests/date.test.ts +62 -0
- package/node_modules/zod/src/v4/classic/tests/datetime.test.ts +302 -0
- package/node_modules/zod/src/v4/classic/tests/default.test.ts +409 -0
- package/node_modules/zod/src/v4/classic/tests/describe-meta-checks.test.ts +27 -0
- package/node_modules/zod/src/v4/classic/tests/description.test.ts +32 -0
- package/node_modules/zod/src/v4/classic/tests/detached-methods.test.ts +197 -0
- package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +694 -0
- package/node_modules/zod/src/v4/classic/tests/enum.test.ts +285 -0
- package/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +807 -0
- package/node_modules/zod/src/v4/classic/tests/error.test.ts +711 -0
- package/node_modules/zod/src/v4/classic/tests/file.test.ts +96 -0
- package/node_modules/zod/src/v4/classic/tests/firstparty.test.ts +179 -0
- package/node_modules/zod/src/v4/classic/tests/fix-json-issue.test.ts +26 -0
- package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +895 -0
- package/node_modules/zod/src/v4/classic/tests/function.test.ts +360 -0
- package/node_modules/zod/src/v4/classic/tests/generics.test.ts +72 -0
- package/node_modules/zod/src/v4/classic/tests/global-config.test.ts +39 -0
- package/node_modules/zod/src/v4/classic/tests/hash.test.ts +68 -0
- package/node_modules/zod/src/v4/classic/tests/index.test.ts +939 -0
- package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +60 -0
- package/node_modules/zod/src/v4/classic/tests/intersection.test.ts +198 -0
- package/node_modules/zod/src/v4/classic/tests/jitless-allows-eval.test.ts +46 -0
- package/node_modules/zod/src/v4/classic/tests/json.test.ts +109 -0
- package/node_modules/zod/src/v4/classic/tests/lazy.test.ts +227 -0
- package/node_modules/zod/src/v4/classic/tests/literal.test.ts +117 -0
- package/node_modules/zod/src/v4/classic/tests/locales_ka.test.ts +29 -0
- package/node_modules/zod/src/v4/classic/tests/locales_ro.test.ts +24 -0
- package/node_modules/zod/src/v4/classic/tests/map.test.ts +330 -0
- package/node_modules/zod/src/v4/classic/tests/nan.test.ts +21 -0
- package/node_modules/zod/src/v4/classic/tests/nested-refine.test.ts +168 -0
- package/node_modules/zod/src/v4/classic/tests/nonoptional.test.ts +101 -0
- package/node_modules/zod/src/v4/classic/tests/nullable.test.ts +22 -0
- package/node_modules/zod/src/v4/classic/tests/number.test.ts +325 -0
- package/node_modules/zod/src/v4/classic/tests/object.test.ts +717 -0
- package/node_modules/zod/src/v4/classic/tests/optional.test.ts +333 -0
- package/node_modules/zod/src/v4/classic/tests/partial.test.ts +450 -0
- package/node_modules/zod/src/v4/classic/tests/pickomit.test.ts +211 -0
- package/node_modules/zod/src/v4/classic/tests/pipe.test.ts +101 -0
- package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +74 -0
- package/node_modules/zod/src/v4/classic/tests/preprocess-types.test.ts +26 -0
- package/node_modules/zod/src/v4/classic/tests/preprocess.test.ts +351 -0
- package/node_modules/zod/src/v4/classic/tests/primitive.test.ts +175 -0
- package/node_modules/zod/src/v4/classic/tests/promise.test.ts +81 -0
- package/node_modules/zod/src/v4/classic/tests/prototypes.test.ts +23 -0
- package/node_modules/zod/src/v4/classic/tests/readonly.test.ts +252 -0
- package/node_modules/zod/src/v4/classic/tests/record.test.ts +717 -0
- package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +631 -0
- package/node_modules/zod/src/v4/classic/tests/refine.test.ts +633 -0
- package/node_modules/zod/src/v4/classic/tests/registries.test.ts +243 -0
- package/node_modules/zod/src/v4/classic/tests/set.test.ts +181 -0
- package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +134 -0
- package/node_modules/zod/src/v4/classic/tests/string-formats.test.ts +125 -0
- package/node_modules/zod/src/v4/classic/tests/string.test.ts +1224 -0
- package/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +106 -0
- package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +771 -0
- package/node_modules/zod/src/v4/classic/tests/to-json-schema-methods.test.ts +438 -0
- package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +3125 -0
- package/node_modules/zod/src/v4/classic/tests/transform.test.ts +378 -0
- package/node_modules/zod/src/v4/classic/tests/tuple.test.ts +496 -0
- package/node_modules/zod/src/v4/classic/tests/union.test.ts +273 -0
- package/node_modules/zod/src/v4/classic/tests/url.test.ts +13 -0
- package/node_modules/zod/src/v4/classic/tests/validations.test.ts +283 -0
- package/node_modules/zod/src/v4/classic/tests/void.test.ts +12 -0
- package/node_modules/zod/src/v4/core/api.ts +1823 -0
- package/node_modules/zod/src/v4/core/checks.ts +1293 -0
- package/node_modules/zod/src/v4/core/config.ts +15 -0
- package/node_modules/zod/src/v4/core/core.ts +153 -0
- package/node_modules/zod/src/v4/core/doc.ts +44 -0
- package/node_modules/zod/src/v4/core/errors.ts +455 -0
- package/node_modules/zod/src/v4/core/index.ts +16 -0
- package/node_modules/zod/src/v4/core/json-schema-generator.ts +126 -0
- package/node_modules/zod/src/v4/core/json-schema-processors.ts +666 -0
- package/node_modules/zod/src/v4/core/json-schema.ts +147 -0
- package/node_modules/zod/src/v4/core/parse.ts +195 -0
- package/node_modules/zod/src/v4/core/regexes.ts +190 -0
- package/node_modules/zod/src/v4/core/registries.ts +105 -0
- package/node_modules/zod/src/v4/core/schemas.ts +4730 -0
- package/node_modules/zod/src/v4/core/standard-schema.ts +159 -0
- package/node_modules/zod/src/v4/core/tests/extend.test.ts +59 -0
- package/node_modules/zod/src/v4/core/tests/index.test.ts +46 -0
- package/node_modules/zod/src/v4/core/tests/locales/be.test.ts +124 -0
- package/node_modules/zod/src/v4/core/tests/locales/el.test.ts +215 -0
- package/node_modules/zod/src/v4/core/tests/locales/en.test.ts +22 -0
- package/node_modules/zod/src/v4/core/tests/locales/es.test.ts +181 -0
- package/node_modules/zod/src/v4/core/tests/locales/fr.test.ts +72 -0
- package/node_modules/zod/src/v4/core/tests/locales/he.test.ts +379 -0
- package/node_modules/zod/src/v4/core/tests/locales/hr.test.ts +163 -0
- package/node_modules/zod/src/v4/core/tests/locales/nl.test.ts +46 -0
- package/node_modules/zod/src/v4/core/tests/locales/ru.test.ts +128 -0
- package/node_modules/zod/src/v4/core/tests/locales/tr.test.ts +69 -0
- package/node_modules/zod/src/v4/core/tests/locales/uz.test.ts +105 -0
- package/node_modules/zod/src/v4/core/tests/record-constructor.test.ts +125 -0
- package/node_modules/zod/src/v4/core/tests/recursive-tuples.test.ts +45 -0
- package/node_modules/zod/src/v4/core/to-json-schema.ts +622 -0
- package/node_modules/zod/src/v4/core/util.ts +983 -0
- package/node_modules/zod/src/v4/core/versions.ts +5 -0
- package/node_modules/zod/src/v4/core/zsf.ts +323 -0
- package/node_modules/zod/src/v4/index.ts +4 -0
- package/node_modules/zod/src/v4/locales/ar.ts +115 -0
- package/node_modules/zod/src/v4/locales/az.ts +111 -0
- package/node_modules/zod/src/v4/locales/be.ts +176 -0
- package/node_modules/zod/src/v4/locales/bg.ts +128 -0
- package/node_modules/zod/src/v4/locales/ca.ts +116 -0
- package/node_modules/zod/src/v4/locales/cs.ts +118 -0
- package/node_modules/zod/src/v4/locales/da.ts +123 -0
- package/node_modules/zod/src/v4/locales/de.ts +116 -0
- package/node_modules/zod/src/v4/locales/el.ts +121 -0
- package/node_modules/zod/src/v4/locales/en.ts +123 -0
- package/node_modules/zod/src/v4/locales/eo.ts +118 -0
- package/node_modules/zod/src/v4/locales/es.ts +141 -0
- package/node_modules/zod/src/v4/locales/fa.ts +126 -0
- package/node_modules/zod/src/v4/locales/fi.ts +121 -0
- package/node_modules/zod/src/v4/locales/fr-CA.ts +116 -0
- package/node_modules/zod/src/v4/locales/fr.ts +132 -0
- package/node_modules/zod/src/v4/locales/he.ts +246 -0
- package/node_modules/zod/src/v4/locales/hr.ts +131 -0
- package/node_modules/zod/src/v4/locales/hu.ts +117 -0
- package/node_modules/zod/src/v4/locales/hy.ts +164 -0
- package/node_modules/zod/src/v4/locales/id.ts +115 -0
- package/node_modules/zod/src/v4/locales/index.ts +52 -0
- package/node_modules/zod/src/v4/locales/is.ts +119 -0
- package/node_modules/zod/src/v4/locales/it.ts +116 -0
- package/node_modules/zod/src/v4/locales/ja.ts +114 -0
- package/node_modules/zod/src/v4/locales/ka.ts +123 -0
- package/node_modules/zod/src/v4/locales/kh.ts +7 -0
- package/node_modules/zod/src/v4/locales/km.ts +119 -0
- package/node_modules/zod/src/v4/locales/ko.ts +121 -0
- package/node_modules/zod/src/v4/locales/lt.ts +239 -0
- package/node_modules/zod/src/v4/locales/mk.ts +118 -0
- package/node_modules/zod/src/v4/locales/ms.ts +115 -0
- package/node_modules/zod/src/v4/locales/nl.ts +121 -0
- package/node_modules/zod/src/v4/locales/no.ts +116 -0
- package/node_modules/zod/src/v4/locales/ota.ts +117 -0
- package/node_modules/zod/src/v4/locales/pl.ts +118 -0
- package/node_modules/zod/src/v4/locales/ps.ts +126 -0
- package/node_modules/zod/src/v4/locales/pt.ts +116 -0
- package/node_modules/zod/src/v4/locales/ro.ts +129 -0
- package/node_modules/zod/src/v4/locales/ru.ts +176 -0
- package/node_modules/zod/src/v4/locales/sl.ts +118 -0
- package/node_modules/zod/src/v4/locales/sv.ts +119 -0
- package/node_modules/zod/src/v4/locales/ta.ts +118 -0
- package/node_modules/zod/src/v4/locales/th.ts +119 -0
- package/node_modules/zod/src/v4/locales/tr.ts +111 -0
- package/node_modules/zod/src/v4/locales/ua.ts +7 -0
- package/node_modules/zod/src/v4/locales/uk.ts +117 -0
- package/node_modules/zod/src/v4/locales/ur.ts +119 -0
- package/node_modules/zod/src/v4/locales/uz.ts +117 -0
- package/node_modules/zod/src/v4/locales/vi.ts +117 -0
- package/node_modules/zod/src/v4/locales/yo.ts +124 -0
- package/node_modules/zod/src/v4/locales/zh-CN.ts +116 -0
- package/node_modules/zod/src/v4/locales/zh-TW.ts +115 -0
- package/node_modules/zod/src/v4/mini/checks.ts +32 -0
- package/node_modules/zod/src/v4/mini/coerce.ts +27 -0
- package/node_modules/zod/src/v4/mini/external.ts +41 -0
- package/node_modules/zod/src/v4/mini/index.ts +3 -0
- package/node_modules/zod/src/v4/mini/iso.ts +66 -0
- package/node_modules/zod/src/v4/mini/parse.ts +14 -0
- package/node_modules/zod/src/v4/mini/schemas.ts +1947 -0
- package/node_modules/zod/src/v4/mini/tests/apply.test.ts +24 -0
- package/node_modules/zod/src/v4/mini/tests/assignability.test.ts +129 -0
- package/node_modules/zod/src/v4/mini/tests/brand.test.ts +94 -0
- package/node_modules/zod/src/v4/mini/tests/checks.test.ts +144 -0
- package/node_modules/zod/src/v4/mini/tests/codec.test.ts +548 -0
- package/node_modules/zod/src/v4/mini/tests/computed.test.ts +36 -0
- package/node_modules/zod/src/v4/mini/tests/error.test.ts +22 -0
- package/node_modules/zod/src/v4/mini/tests/functions.test.ts +5 -0
- package/node_modules/zod/src/v4/mini/tests/index.test.ts +993 -0
- package/node_modules/zod/src/v4/mini/tests/number.test.ts +95 -0
- package/node_modules/zod/src/v4/mini/tests/object.test.ts +227 -0
- package/node_modules/zod/src/v4/mini/tests/prototypes.test.ts +43 -0
- package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +325 -0
- package/node_modules/zod/src/v4/mini/tests/standard-schema.test.ts +50 -0
- package/node_modules/zod/src/v4/mini/tests/string.test.ts +352 -0
- package/node_modules/zod/src/v4-mini/index.ts +3 -0
- package/node_modules/zod/v3/ZodError.cjs +138 -0
- package/node_modules/zod/v3/ZodError.d.cts +164 -0
- package/node_modules/zod/v3/ZodError.d.ts +164 -0
- package/node_modules/zod/v3/ZodError.js +133 -0
- package/node_modules/zod/v3/errors.cjs +17 -0
- package/node_modules/zod/v3/errors.d.cts +5 -0
- package/node_modules/zod/v3/errors.d.ts +5 -0
- package/node_modules/zod/v3/errors.js +9 -0
- package/node_modules/zod/v3/external.cjs +22 -0
- package/node_modules/zod/v3/external.d.cts +6 -0
- package/node_modules/zod/v3/external.d.ts +6 -0
- package/node_modules/zod/v3/external.js +6 -0
- package/node_modules/zod/v3/helpers/enumUtil.cjs +2 -0
- package/node_modules/zod/v3/helpers/enumUtil.d.cts +8 -0
- package/node_modules/zod/v3/helpers/enumUtil.d.ts +8 -0
- package/node_modules/zod/v3/helpers/enumUtil.js +1 -0
- package/node_modules/zod/v3/helpers/errorUtil.cjs +9 -0
- package/node_modules/zod/v3/helpers/errorUtil.d.cts +9 -0
- package/node_modules/zod/v3/helpers/errorUtil.d.ts +9 -0
- package/node_modules/zod/v3/helpers/errorUtil.js +6 -0
- package/node_modules/zod/v3/helpers/parseUtil.cjs +124 -0
- package/node_modules/zod/v3/helpers/parseUtil.d.cts +78 -0
- package/node_modules/zod/v3/helpers/parseUtil.d.ts +78 -0
- package/node_modules/zod/v3/helpers/parseUtil.js +109 -0
- package/node_modules/zod/v3/helpers/partialUtil.cjs +2 -0
- package/node_modules/zod/v3/helpers/partialUtil.d.cts +8 -0
- package/node_modules/zod/v3/helpers/partialUtil.d.ts +8 -0
- package/node_modules/zod/v3/helpers/partialUtil.js +1 -0
- package/node_modules/zod/v3/helpers/typeAliases.cjs +2 -0
- package/node_modules/zod/v3/helpers/typeAliases.d.cts +2 -0
- package/node_modules/zod/v3/helpers/typeAliases.d.ts +2 -0
- package/node_modules/zod/v3/helpers/typeAliases.js +1 -0
- package/node_modules/zod/v3/helpers/util.cjs +137 -0
- package/node_modules/zod/v3/helpers/util.d.cts +85 -0
- package/node_modules/zod/v3/helpers/util.d.ts +85 -0
- package/node_modules/zod/v3/helpers/util.js +133 -0
- package/node_modules/zod/v3/index.cjs +33 -0
- package/node_modules/zod/v3/index.d.cts +4 -0
- package/node_modules/zod/v3/index.d.ts +4 -0
- package/node_modules/zod/v3/index.js +4 -0
- package/node_modules/zod/v3/locales/en.cjs +112 -0
- package/node_modules/zod/v3/locales/en.d.cts +3 -0
- package/node_modules/zod/v3/locales/en.d.ts +3 -0
- package/node_modules/zod/v3/locales/en.js +109 -0
- package/node_modules/zod/v3/package.json +7 -0
- package/node_modules/zod/v3/standard-schema.cjs +2 -0
- package/node_modules/zod/v3/standard-schema.d.cts +102 -0
- package/node_modules/zod/v3/standard-schema.d.ts +102 -0
- package/node_modules/zod/v3/standard-schema.js +1 -0
- package/node_modules/zod/v3/types.cjs +3777 -0
- package/node_modules/zod/v3/types.d.cts +1034 -0
- package/node_modules/zod/v3/types.d.ts +1034 -0
- package/node_modules/zod/v3/types.js +3695 -0
- package/node_modules/zod/v4/classic/checks.cjs +33 -0
- package/node_modules/zod/v4/classic/checks.d.cts +1 -0
- package/node_modules/zod/v4/classic/checks.d.ts +1 -0
- package/node_modules/zod/v4/classic/checks.js +1 -0
- package/node_modules/zod/v4/classic/coerce.cjs +47 -0
- package/node_modules/zod/v4/classic/coerce.d.cts +17 -0
- package/node_modules/zod/v4/classic/coerce.d.ts +17 -0
- package/node_modules/zod/v4/classic/coerce.js +17 -0
- package/node_modules/zod/v4/classic/compat.cjs +61 -0
- package/node_modules/zod/v4/classic/compat.d.cts +50 -0
- package/node_modules/zod/v4/classic/compat.d.ts +50 -0
- package/node_modules/zod/v4/classic/compat.js +31 -0
- package/node_modules/zod/v4/classic/errors.cjs +74 -0
- package/node_modules/zod/v4/classic/errors.d.cts +30 -0
- package/node_modules/zod/v4/classic/errors.d.ts +30 -0
- package/node_modules/zod/v4/classic/errors.js +48 -0
- package/node_modules/zod/v4/classic/external.cjs +73 -0
- package/node_modules/zod/v4/classic/external.d.cts +16 -0
- package/node_modules/zod/v4/classic/external.d.ts +16 -0
- package/node_modules/zod/v4/classic/external.js +20 -0
- package/node_modules/zod/v4/classic/from-json-schema.cjs +625 -0
- package/node_modules/zod/v4/classic/from-json-schema.d.cts +12 -0
- package/node_modules/zod/v4/classic/from-json-schema.d.ts +12 -0
- package/node_modules/zod/v4/classic/from-json-schema.js +599 -0
- package/node_modules/zod/v4/classic/index.cjs +33 -0
- package/node_modules/zod/v4/classic/index.d.cts +4 -0
- package/node_modules/zod/v4/classic/index.d.ts +4 -0
- package/node_modules/zod/v4/classic/index.js +4 -0
- package/node_modules/zod/v4/classic/iso.cjs +60 -0
- package/node_modules/zod/v4/classic/iso.d.cts +22 -0
- package/node_modules/zod/v4/classic/iso.d.ts +22 -0
- package/node_modules/zod/v4/classic/iso.js +30 -0
- package/node_modules/zod/v4/classic/package.json +7 -0
- package/node_modules/zod/v4/classic/parse.cjs +41 -0
- package/node_modules/zod/v4/classic/parse.d.cts +31 -0
- package/node_modules/zod/v4/classic/parse.d.ts +31 -0
- package/node_modules/zod/v4/classic/parse.js +15 -0
- package/node_modules/zod/v4/classic/schemas.cjs +1511 -0
- package/node_modules/zod/v4/classic/schemas.d.cts +767 -0
- package/node_modules/zod/v4/classic/schemas.d.ts +767 -0
- package/node_modules/zod/v4/classic/schemas.js +1395 -0
- package/node_modules/zod/v4/core/api.cjs +1227 -0
- package/node_modules/zod/v4/core/api.d.cts +325 -0
- package/node_modules/zod/v4/core/api.d.ts +325 -0
- package/node_modules/zod/v4/core/api.js +1087 -0
- package/node_modules/zod/v4/core/checks.cjs +601 -0
- package/node_modules/zod/v4/core/checks.d.cts +278 -0
- package/node_modules/zod/v4/core/checks.d.ts +278 -0
- package/node_modules/zod/v4/core/checks.js +575 -0
- package/node_modules/zod/v4/core/core.cjs +85 -0
- package/node_modules/zod/v4/core/core.d.cts +70 -0
- package/node_modules/zod/v4/core/core.d.ts +70 -0
- package/node_modules/zod/v4/core/core.js +78 -0
- package/node_modules/zod/v4/core/doc.cjs +39 -0
- package/node_modules/zod/v4/core/doc.d.cts +14 -0
- package/node_modules/zod/v4/core/doc.d.ts +14 -0
- package/node_modules/zod/v4/core/doc.js +35 -0
- package/node_modules/zod/v4/core/errors.cjs +216 -0
- package/node_modules/zod/v4/core/errors.d.cts +221 -0
- package/node_modules/zod/v4/core/errors.d.ts +221 -0
- package/node_modules/zod/v4/core/errors.js +185 -0
- package/node_modules/zod/v4/core/index.cjs +47 -0
- package/node_modules/zod/v4/core/index.d.cts +16 -0
- package/node_modules/zod/v4/core/index.d.ts +16 -0
- package/node_modules/zod/v4/core/index.js +16 -0
- package/node_modules/zod/v4/core/json-schema-generator.cjs +99 -0
- package/node_modules/zod/v4/core/json-schema-generator.d.cts +65 -0
- package/node_modules/zod/v4/core/json-schema-generator.d.ts +65 -0
- package/node_modules/zod/v4/core/json-schema-generator.js +95 -0
- package/node_modules/zod/v4/core/json-schema-processors.cjs +644 -0
- package/node_modules/zod/v4/core/json-schema-processors.d.cts +49 -0
- package/node_modules/zod/v4/core/json-schema-processors.d.ts +49 -0
- package/node_modules/zod/v4/core/json-schema-processors.js +601 -0
- package/node_modules/zod/v4/core/json-schema.cjs +2 -0
- package/node_modules/zod/v4/core/json-schema.d.cts +88 -0
- package/node_modules/zod/v4/core/json-schema.d.ts +88 -0
- package/node_modules/zod/v4/core/json-schema.js +1 -0
- package/node_modules/zod/v4/core/package.json +7 -0
- package/node_modules/zod/v4/core/parse.cjs +131 -0
- package/node_modules/zod/v4/core/parse.d.cts +49 -0
- package/node_modules/zod/v4/core/parse.d.ts +49 -0
- package/node_modules/zod/v4/core/parse.js +93 -0
- package/node_modules/zod/v4/core/regexes.cjs +172 -0
- package/node_modules/zod/v4/core/regexes.d.cts +85 -0
- package/node_modules/zod/v4/core/regexes.d.ts +85 -0
- package/node_modules/zod/v4/core/regexes.js +139 -0
- package/node_modules/zod/v4/core/registries.cjs +56 -0
- package/node_modules/zod/v4/core/registries.d.cts +35 -0
- package/node_modules/zod/v4/core/registries.d.ts +35 -0
- package/node_modules/zod/v4/core/registries.js +51 -0
- package/node_modules/zod/v4/core/schemas.cjs +2270 -0
- package/node_modules/zod/v4/core/schemas.d.cts +1184 -0
- package/node_modules/zod/v4/core/schemas.d.ts +1184 -0
- package/node_modules/zod/v4/core/schemas.js +2239 -0
- package/node_modules/zod/v4/core/standard-schema.cjs +2 -0
- package/node_modules/zod/v4/core/standard-schema.d.cts +126 -0
- package/node_modules/zod/v4/core/standard-schema.d.ts +126 -0
- package/node_modules/zod/v4/core/standard-schema.js +1 -0
- package/node_modules/zod/v4/core/to-json-schema.cjs +457 -0
- package/node_modules/zod/v4/core/to-json-schema.d.cts +114 -0
- package/node_modules/zod/v4/core/to-json-schema.d.ts +114 -0
- package/node_modules/zod/v4/core/to-json-schema.js +448 -0
- package/node_modules/zod/v4/core/util.cjs +734 -0
- package/node_modules/zod/v4/core/util.d.cts +200 -0
- package/node_modules/zod/v4/core/util.d.ts +200 -0
- package/node_modules/zod/v4/core/util.js +674 -0
- package/node_modules/zod/v4/core/versions.cjs +8 -0
- package/node_modules/zod/v4/core/versions.d.cts +5 -0
- package/node_modules/zod/v4/core/versions.d.ts +5 -0
- package/node_modules/zod/v4/core/versions.js +5 -0
- package/node_modules/zod/v4/index.cjs +22 -0
- package/node_modules/zod/v4/index.d.cts +3 -0
- package/node_modules/zod/v4/index.d.ts +3 -0
- package/node_modules/zod/v4/index.js +3 -0
- package/node_modules/zod/v4/locales/ar.cjs +133 -0
- package/node_modules/zod/v4/locales/ar.d.cts +5 -0
- package/node_modules/zod/v4/locales/ar.d.ts +4 -0
- package/node_modules/zod/v4/locales/ar.js +106 -0
- package/node_modules/zod/v4/locales/az.cjs +132 -0
- package/node_modules/zod/v4/locales/az.d.cts +5 -0
- package/node_modules/zod/v4/locales/az.d.ts +4 -0
- package/node_modules/zod/v4/locales/az.js +105 -0
- package/node_modules/zod/v4/locales/be.cjs +183 -0
- package/node_modules/zod/v4/locales/be.d.cts +5 -0
- package/node_modules/zod/v4/locales/be.d.ts +4 -0
- package/node_modules/zod/v4/locales/be.js +156 -0
- package/node_modules/zod/v4/locales/bg.cjs +147 -0
- package/node_modules/zod/v4/locales/bg.d.cts +5 -0
- package/node_modules/zod/v4/locales/bg.d.ts +4 -0
- package/node_modules/zod/v4/locales/bg.js +120 -0
- package/node_modules/zod/v4/locales/ca.cjs +134 -0
- package/node_modules/zod/v4/locales/ca.d.cts +5 -0
- package/node_modules/zod/v4/locales/ca.d.ts +4 -0
- package/node_modules/zod/v4/locales/ca.js +107 -0
- package/node_modules/zod/v4/locales/cs.cjs +138 -0
- package/node_modules/zod/v4/locales/cs.d.cts +5 -0
- package/node_modules/zod/v4/locales/cs.d.ts +4 -0
- package/node_modules/zod/v4/locales/cs.js +111 -0
- package/node_modules/zod/v4/locales/da.cjs +142 -0
- package/node_modules/zod/v4/locales/da.d.cts +5 -0
- package/node_modules/zod/v4/locales/da.d.ts +4 -0
- package/node_modules/zod/v4/locales/da.js +115 -0
- package/node_modules/zod/v4/locales/de.cjs +135 -0
- package/node_modules/zod/v4/locales/de.d.cts +5 -0
- package/node_modules/zod/v4/locales/de.d.ts +4 -0
- package/node_modules/zod/v4/locales/de.js +108 -0
- package/node_modules/zod/v4/locales/el.cjs +136 -0
- package/node_modules/zod/v4/locales/el.d.cts +5 -0
- package/node_modules/zod/v4/locales/el.d.ts +4 -0
- package/node_modules/zod/v4/locales/el.js +109 -0
- package/node_modules/zod/v4/locales/en.cjs +140 -0
- package/node_modules/zod/v4/locales/en.d.cts +5 -0
- package/node_modules/zod/v4/locales/en.d.ts +4 -0
- package/node_modules/zod/v4/locales/en.js +113 -0
- package/node_modules/zod/v4/locales/eo.cjs +136 -0
- package/node_modules/zod/v4/locales/eo.d.cts +5 -0
- package/node_modules/zod/v4/locales/eo.d.ts +4 -0
- package/node_modules/zod/v4/locales/eo.js +109 -0
- package/node_modules/zod/v4/locales/es.cjs +159 -0
- package/node_modules/zod/v4/locales/es.d.cts +5 -0
- package/node_modules/zod/v4/locales/es.d.ts +4 -0
- package/node_modules/zod/v4/locales/es.js +132 -0
- package/node_modules/zod/v4/locales/fa.cjs +141 -0
- package/node_modules/zod/v4/locales/fa.d.cts +5 -0
- package/node_modules/zod/v4/locales/fa.d.ts +4 -0
- package/node_modules/zod/v4/locales/fa.js +114 -0
- package/node_modules/zod/v4/locales/fi.cjs +139 -0
- package/node_modules/zod/v4/locales/fi.d.cts +5 -0
- package/node_modules/zod/v4/locales/fi.d.ts +4 -0
- package/node_modules/zod/v4/locales/fi.js +112 -0
- package/node_modules/zod/v4/locales/fr-CA.cjs +134 -0
- package/node_modules/zod/v4/locales/fr-CA.d.cts +5 -0
- package/node_modules/zod/v4/locales/fr-CA.d.ts +4 -0
- package/node_modules/zod/v4/locales/fr-CA.js +107 -0
- package/node_modules/zod/v4/locales/fr.cjs +152 -0
- package/node_modules/zod/v4/locales/fr.d.cts +5 -0
- package/node_modules/zod/v4/locales/fr.d.ts +4 -0
- package/node_modules/zod/v4/locales/fr.js +125 -0
- package/node_modules/zod/v4/locales/he.cjs +241 -0
- package/node_modules/zod/v4/locales/he.d.cts +5 -0
- package/node_modules/zod/v4/locales/he.d.ts +4 -0
- package/node_modules/zod/v4/locales/he.js +214 -0
- package/node_modules/zod/v4/locales/hr.cjs +149 -0
- package/node_modules/zod/v4/locales/hr.d.cts +5 -0
- package/node_modules/zod/v4/locales/hr.d.ts +4 -0
- package/node_modules/zod/v4/locales/hr.js +122 -0
- package/node_modules/zod/v4/locales/hu.cjs +135 -0
- package/node_modules/zod/v4/locales/hu.d.cts +5 -0
- package/node_modules/zod/v4/locales/hu.d.ts +4 -0
- package/node_modules/zod/v4/locales/hu.js +108 -0
- package/node_modules/zod/v4/locales/hy.cjs +174 -0
- package/node_modules/zod/v4/locales/hy.d.cts +5 -0
- package/node_modules/zod/v4/locales/hy.d.ts +4 -0
- package/node_modules/zod/v4/locales/hy.js +147 -0
- package/node_modules/zod/v4/locales/id.cjs +133 -0
- package/node_modules/zod/v4/locales/id.d.cts +5 -0
- package/node_modules/zod/v4/locales/id.d.ts +4 -0
- package/node_modules/zod/v4/locales/id.js +106 -0
- package/node_modules/zod/v4/locales/index.cjs +111 -0
- package/node_modules/zod/v4/locales/index.d.cts +52 -0
- package/node_modules/zod/v4/locales/index.d.ts +52 -0
- package/node_modules/zod/v4/locales/index.js +52 -0
- package/node_modules/zod/v4/locales/is.cjs +136 -0
- package/node_modules/zod/v4/locales/is.d.cts +5 -0
- package/node_modules/zod/v4/locales/is.d.ts +4 -0
- package/node_modules/zod/v4/locales/is.js +109 -0
- package/node_modules/zod/v4/locales/it.cjs +135 -0
- package/node_modules/zod/v4/locales/it.d.cts +5 -0
- package/node_modules/zod/v4/locales/it.d.ts +4 -0
- package/node_modules/zod/v4/locales/it.js +108 -0
- package/node_modules/zod/v4/locales/ja.cjs +134 -0
- package/node_modules/zod/v4/locales/ja.d.cts +5 -0
- package/node_modules/zod/v4/locales/ja.d.ts +4 -0
- package/node_modules/zod/v4/locales/ja.js +107 -0
- package/node_modules/zod/v4/locales/ka.cjs +139 -0
- package/node_modules/zod/v4/locales/ka.d.cts +5 -0
- package/node_modules/zod/v4/locales/ka.d.ts +4 -0
- package/node_modules/zod/v4/locales/ka.js +112 -0
- package/node_modules/zod/v4/locales/kh.cjs +12 -0
- package/node_modules/zod/v4/locales/kh.d.cts +5 -0
- package/node_modules/zod/v4/locales/kh.d.ts +5 -0
- package/node_modules/zod/v4/locales/kh.js +5 -0
- package/node_modules/zod/v4/locales/km.cjs +137 -0
- package/node_modules/zod/v4/locales/km.d.cts +5 -0
- package/node_modules/zod/v4/locales/km.d.ts +4 -0
- package/node_modules/zod/v4/locales/km.js +110 -0
- package/node_modules/zod/v4/locales/ko.cjs +138 -0
- package/node_modules/zod/v4/locales/ko.d.cts +5 -0
- package/node_modules/zod/v4/locales/ko.d.ts +4 -0
- package/node_modules/zod/v4/locales/ko.js +111 -0
- package/node_modules/zod/v4/locales/lt.cjs +230 -0
- package/node_modules/zod/v4/locales/lt.d.cts +5 -0
- package/node_modules/zod/v4/locales/lt.d.ts +4 -0
- package/node_modules/zod/v4/locales/lt.js +203 -0
- package/node_modules/zod/v4/locales/mk.cjs +136 -0
- package/node_modules/zod/v4/locales/mk.d.cts +5 -0
- package/node_modules/zod/v4/locales/mk.d.ts +4 -0
- package/node_modules/zod/v4/locales/mk.js +109 -0
- package/node_modules/zod/v4/locales/ms.cjs +134 -0
- package/node_modules/zod/v4/locales/ms.d.cts +5 -0
- package/node_modules/zod/v4/locales/ms.d.ts +4 -0
- package/node_modules/zod/v4/locales/ms.js +107 -0
- package/node_modules/zod/v4/locales/nl.cjs +137 -0
- package/node_modules/zod/v4/locales/nl.d.cts +5 -0
- package/node_modules/zod/v4/locales/nl.d.ts +4 -0
- package/node_modules/zod/v4/locales/nl.js +110 -0
- package/node_modules/zod/v4/locales/no.cjs +135 -0
- package/node_modules/zod/v4/locales/no.d.cts +5 -0
- package/node_modules/zod/v4/locales/no.d.ts +4 -0
- package/node_modules/zod/v4/locales/no.js +108 -0
- package/node_modules/zod/v4/locales/ota.cjs +136 -0
- package/node_modules/zod/v4/locales/ota.d.cts +5 -0
- package/node_modules/zod/v4/locales/ota.d.ts +4 -0
- package/node_modules/zod/v4/locales/ota.js +109 -0
- package/node_modules/zod/v4/locales/package.json +7 -0
- package/node_modules/zod/v4/locales/pl.cjs +136 -0
- package/node_modules/zod/v4/locales/pl.d.cts +5 -0
- package/node_modules/zod/v4/locales/pl.d.ts +4 -0
- package/node_modules/zod/v4/locales/pl.js +109 -0
- package/node_modules/zod/v4/locales/ps.cjs +141 -0
- package/node_modules/zod/v4/locales/ps.d.cts +5 -0
- package/node_modules/zod/v4/locales/ps.d.ts +4 -0
- package/node_modules/zod/v4/locales/ps.js +114 -0
- package/node_modules/zod/v4/locales/pt.cjs +135 -0
- package/node_modules/zod/v4/locales/pt.d.cts +5 -0
- package/node_modules/zod/v4/locales/pt.d.ts +4 -0
- package/node_modules/zod/v4/locales/pt.js +108 -0
- package/node_modules/zod/v4/locales/ro.cjs +146 -0
- package/node_modules/zod/v4/locales/ro.d.cts +5 -0
- package/node_modules/zod/v4/locales/ro.d.ts +4 -0
- package/node_modules/zod/v4/locales/ro.js +119 -0
- package/node_modules/zod/v4/locales/ru.cjs +183 -0
- package/node_modules/zod/v4/locales/ru.d.cts +5 -0
- package/node_modules/zod/v4/locales/ru.d.ts +4 -0
- package/node_modules/zod/v4/locales/ru.js +156 -0
- package/node_modules/zod/v4/locales/sl.cjs +136 -0
- package/node_modules/zod/v4/locales/sl.d.cts +5 -0
- package/node_modules/zod/v4/locales/sl.d.ts +4 -0
- package/node_modules/zod/v4/locales/sl.js +109 -0
- package/node_modules/zod/v4/locales/sv.cjs +137 -0
- package/node_modules/zod/v4/locales/sv.d.cts +5 -0
- package/node_modules/zod/v4/locales/sv.d.ts +4 -0
- package/node_modules/zod/v4/locales/sv.js +110 -0
- package/node_modules/zod/v4/locales/ta.cjs +137 -0
- package/node_modules/zod/v4/locales/ta.d.cts +5 -0
- package/node_modules/zod/v4/locales/ta.d.ts +4 -0
- package/node_modules/zod/v4/locales/ta.js +110 -0
- package/node_modules/zod/v4/locales/th.cjs +137 -0
- package/node_modules/zod/v4/locales/th.d.cts +5 -0
- package/node_modules/zod/v4/locales/th.d.ts +4 -0
- package/node_modules/zod/v4/locales/th.js +110 -0
- package/node_modules/zod/v4/locales/tr.cjs +132 -0
- package/node_modules/zod/v4/locales/tr.d.cts +5 -0
- package/node_modules/zod/v4/locales/tr.d.ts +4 -0
- package/node_modules/zod/v4/locales/tr.js +105 -0
- package/node_modules/zod/v4/locales/ua.cjs +12 -0
- package/node_modules/zod/v4/locales/ua.d.cts +5 -0
- package/node_modules/zod/v4/locales/ua.d.ts +5 -0
- package/node_modules/zod/v4/locales/ua.js +5 -0
- package/node_modules/zod/v4/locales/uk.cjs +135 -0
- package/node_modules/zod/v4/locales/uk.d.cts +5 -0
- package/node_modules/zod/v4/locales/uk.d.ts +4 -0
- package/node_modules/zod/v4/locales/uk.js +108 -0
- package/node_modules/zod/v4/locales/ur.cjs +137 -0
- package/node_modules/zod/v4/locales/ur.d.cts +5 -0
- package/node_modules/zod/v4/locales/ur.d.ts +4 -0
- package/node_modules/zod/v4/locales/ur.js +110 -0
- package/node_modules/zod/v4/locales/uz.cjs +137 -0
- package/node_modules/zod/v4/locales/uz.d.cts +5 -0
- package/node_modules/zod/v4/locales/uz.d.ts +4 -0
- package/node_modules/zod/v4/locales/uz.js +110 -0
- package/node_modules/zod/v4/locales/vi.cjs +135 -0
- package/node_modules/zod/v4/locales/vi.d.cts +5 -0
- package/node_modules/zod/v4/locales/vi.d.ts +4 -0
- package/node_modules/zod/v4/locales/vi.js +108 -0
- package/node_modules/zod/v4/locales/yo.cjs +134 -0
- package/node_modules/zod/v4/locales/yo.d.cts +5 -0
- package/node_modules/zod/v4/locales/yo.d.ts +4 -0
- package/node_modules/zod/v4/locales/yo.js +107 -0
- package/node_modules/zod/v4/locales/zh-CN.cjs +136 -0
- package/node_modules/zod/v4/locales/zh-CN.d.cts +5 -0
- package/node_modules/zod/v4/locales/zh-CN.d.ts +4 -0
- package/node_modules/zod/v4/locales/zh-CN.js +109 -0
- package/node_modules/zod/v4/locales/zh-TW.cjs +134 -0
- package/node_modules/zod/v4/locales/zh-TW.d.cts +5 -0
- package/node_modules/zod/v4/locales/zh-TW.d.ts +4 -0
- package/node_modules/zod/v4/locales/zh-TW.js +107 -0
- package/node_modules/zod/v4/mini/checks.cjs +34 -0
- package/node_modules/zod/v4/mini/checks.d.cts +1 -0
- package/node_modules/zod/v4/mini/checks.d.ts +1 -0
- package/node_modules/zod/v4/mini/checks.js +1 -0
- package/node_modules/zod/v4/mini/coerce.cjs +52 -0
- package/node_modules/zod/v4/mini/coerce.d.cts +7 -0
- package/node_modules/zod/v4/mini/coerce.d.ts +7 -0
- package/node_modules/zod/v4/mini/coerce.js +22 -0
- package/node_modules/zod/v4/mini/external.cjs +63 -0
- package/node_modules/zod/v4/mini/external.d.cts +13 -0
- package/node_modules/zod/v4/mini/external.d.ts +13 -0
- package/node_modules/zod/v4/mini/external.js +14 -0
- package/node_modules/zod/v4/mini/index.cjs +32 -0
- package/node_modules/zod/v4/mini/index.d.cts +3 -0
- package/node_modules/zod/v4/mini/index.d.ts +3 -0
- package/node_modules/zod/v4/mini/index.js +3 -0
- package/node_modules/zod/v4/mini/iso.cjs +64 -0
- package/node_modules/zod/v4/mini/iso.d.cts +22 -0
- package/node_modules/zod/v4/mini/iso.d.ts +22 -0
- package/node_modules/zod/v4/mini/iso.js +34 -0
- package/node_modules/zod/v4/mini/package.json +7 -0
- package/node_modules/zod/v4/mini/parse.cjs +16 -0
- package/node_modules/zod/v4/mini/parse.d.cts +1 -0
- package/node_modules/zod/v4/mini/parse.d.ts +1 -0
- package/node_modules/zod/v4/mini/parse.js +1 -0
- package/node_modules/zod/v4/mini/schemas.cjs +1083 -0
- package/node_modules/zod/v4/mini/schemas.d.cts +445 -0
- package/node_modules/zod/v4/mini/schemas.d.ts +445 -0
- package/node_modules/zod/v4/mini/schemas.js +961 -0
- package/node_modules/zod/v4/package.json +7 -0
- package/node_modules/zod/v4-mini/index.cjs +32 -0
- package/node_modules/zod/v4-mini/index.d.cts +3 -0
- package/node_modules/zod/v4-mini/index.d.ts +3 -0
- package/node_modules/zod/v4-mini/index.js +3 -0
- package/node_modules/zod/v4-mini/package.json +7 -0
- package/package.json +57 -0
package/dist/guide.js
ADDED
|
@@ -0,0 +1,2038 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The built-in user guide. One source of truth: `prismatica guide [topic]`
|
|
3
|
+
* prints from here, and docs/USER_GUIDE.md is this same content rendered to a
|
|
4
|
+
* file (a test keeps the two identical forever).
|
|
5
|
+
*
|
|
6
|
+
* Written for a non-expert owner: plain words, copy-paste commands, and one
|
|
7
|
+
* line on what each command does and why you are running it.
|
|
8
|
+
*/
|
|
9
|
+
export const GUIDE_TOPICS = [
|
|
10
|
+
{
|
|
11
|
+
id: 'gettingstarted',
|
|
12
|
+
title: 'Getting started',
|
|
13
|
+
body: `Prismatica is a safety layer for software that AI agents write for you.
|
|
14
|
+
The agent builds. Prismatica inspects. Nothing ships until the intent, the
|
|
15
|
+
proof, and you agree.
|
|
16
|
+
|
|
17
|
+
It is not an AI and never talks to one — it trusts only two things: what Git
|
|
18
|
+
says changed, and what your tests prove. Everything it knows is written as
|
|
19
|
+
plain files inside your repo, under \`.prismatica/\`, so you can read every
|
|
20
|
+
record yourself and nothing is locked in.
|
|
21
|
+
|
|
22
|
+
Install the command once (from the Prismatica source folder):
|
|
23
|
+
|
|
24
|
+
npm install && npm run build # build the CLI
|
|
25
|
+
npm link # put "prismatica" on your PATH
|
|
26
|
+
|
|
27
|
+
Now \`prismatica\` works in any repo. (If you edit Prismatica's own source
|
|
28
|
+
later, run \`npm run build\` again.) Set it up once per repo:
|
|
29
|
+
|
|
30
|
+
prismatica init
|
|
31
|
+
# detects the tools your repo already has, writes .prismatica/ and the
|
|
32
|
+
# merge gate, and shows a table of what is Enforced, Checked, or Missing
|
|
33
|
+
|
|
34
|
+
git add .prismatica .github .gitignore && git commit -m "adopt prismatica"
|
|
35
|
+
# the records live in git, versioned with the code they describe
|
|
36
|
+
|
|
37
|
+
The shortest normal workflow is one conversation and one command, and it
|
|
38
|
+
STARTS IN YOUR CODING AGENT rather than here:
|
|
39
|
+
|
|
40
|
+
1. Open the agent you already use and activate Prismatica Start.
|
|
41
|
+
2. Describe what you need, and settle the plan with it in conversation.
|
|
42
|
+
3. It reads your repository and hands you one command.
|
|
43
|
+
4. You run that command, in your own terminal:
|
|
44
|
+
|
|
45
|
+
prismatica start --import <proposal.json>
|
|
46
|
+
# revalidates that plan strictly here against a FRESH reading, shows you
|
|
47
|
+
# the whole plan and the exact GitHub issue it will file, and asks once:
|
|
48
|
+
# "Start this change?" (default No). Nothing at all is
|
|
49
|
+
# created until you say yes to the second one.
|
|
50
|
+
|
|
51
|
+
Neither command takes your description. You and the agent agree the wording
|
|
52
|
+
between you, and the plan carries it back in its \`request\` field — so the
|
|
53
|
+
contract, the issue and the reviewer all quote the same agreed sentence
|
|
54
|
+
instead of a one-liner you happened to type twice.
|
|
55
|
+
|
|
56
|
+
That does by itself what \`frame\` + \`pack\` do by hand, and it works when you
|
|
57
|
+
cannot yet name the files involved. \`frame\` is still there for when you know
|
|
58
|
+
exactly what you want (see "manual frame").
|
|
59
|
+
|
|
60
|
+
Either way the change then follows the same loop, described under "the loop"
|
|
61
|
+
below: start (or frame) → pack → build → check → review → seal → (accept) →
|
|
62
|
+
ship → verify. You do not need to remember any of that, though — whenever
|
|
63
|
+
you're not sure what to run, ask:
|
|
64
|
+
|
|
65
|
+
prismatica next
|
|
66
|
+
# prints the one command to run right now, and why (see "next" below)`,
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
id: 'loop',
|
|
70
|
+
title: 'The loop — one change, start to finish',
|
|
71
|
+
body: `The whole shape, in one line:
|
|
72
|
+
|
|
73
|
+
describe need → your agent plans it → you confirm → start build →
|
|
74
|
+
Builder → fresh reviewer → deterministic gate
|
|
75
|
+
|
|
76
|
+
1. Start it — the usual way. In your coding agent, use Prismatica Start: say
|
|
77
|
+
what you need, settle the plan with it, and it hands you the one command
|
|
78
|
+
below to run yourself:
|
|
79
|
+
|
|
80
|
+
prismatica start --import <proposal.json>
|
|
81
|
+
# strict local revalidation against a FRESH snapshot → your own words,
|
|
82
|
+
# the whole plan and the issue text in full → "Start this change?" →
|
|
83
|
+
# issue, lane, approved intent, Delta or Planned Flow, and the builder
|
|
84
|
+
# brief. Nothing is created before that yes.
|
|
85
|
+
|
|
86
|
+
Steps 2 and 3 below are already done for you at this point — skip to 4.
|
|
87
|
+
|
|
88
|
+
Prefer full manual control, or already know the exact scope? Frame it
|
|
89
|
+
yourself instead (see "manual frame" for every flag spelled out):
|
|
90
|
+
|
|
91
|
+
prismatica frame "Add signup validation" --issue "#12" \\
|
|
92
|
+
--allow "src/signup/**" --check "rejects empty email | signup.test.ts"
|
|
93
|
+
# writes the contract and opens a safe lane (a separate working copy)
|
|
94
|
+
# so the agent cannot touch your main checkout
|
|
95
|
+
|
|
96
|
+
2. Pack it — build the brief you hand to the agent (\`start\` did this):
|
|
97
|
+
|
|
98
|
+
prismatica pack <id>
|
|
99
|
+
# a scoped, self-contained brief; if the contract changes later,
|
|
100
|
+
# this brief goes stale and Prismatica refuses to use it
|
|
101
|
+
|
|
102
|
+
3. Open it — hand the brief over:
|
|
103
|
+
|
|
104
|
+
prismatica open claude <id> # opens Claude Code inside the lane
|
|
105
|
+
prismatica open --copy <id> # or copy the brief for any other agent
|
|
106
|
+
|
|
107
|
+
A known agent is started in the lane with ONE short pointer at the pack and
|
|
108
|
+
the contract, both of which are already on disk there — never the brief
|
|
109
|
+
itself, in argv or anywhere else. \`--copy\` is the exception, and the reason
|
|
110
|
+
for it: a chat agent has no lane to read from, so it gets the full text.
|
|
111
|
+
|
|
112
|
+
4. Check it — after the agent commits its work in the lane:
|
|
113
|
+
|
|
114
|
+
prismatica check
|
|
115
|
+
# runs your own tools (typecheck, lint, tests, build, journeys, secret
|
|
116
|
+
# scan) plus Prismatica's own checks: did the diff stay in scope, does
|
|
117
|
+
# every acceptance check trace to a passing test, were docs updated
|
|
118
|
+
|
|
119
|
+
5. Review and seal it — fresh eyes on the exact diff:
|
|
120
|
+
|
|
121
|
+
prismatica review --agent claude # a review brief bound to the diff,
|
|
122
|
+
# then a fresh READ-ONLY session on
|
|
123
|
+
# it in the lane
|
|
124
|
+
prismatica seal # binds an APPROVE verdict to it; if
|
|
125
|
+
# the code moves later, the seal
|
|
126
|
+
# breaks and review redoes
|
|
127
|
+
prismatica seal --request-changes # the reviewer said no — this stops
|
|
128
|
+
# the change, it does not merely
|
|
129
|
+
# note an opinion
|
|
130
|
+
|
|
131
|
+
6. Accept it (heavy changes only) — your signed decision:
|
|
132
|
+
|
|
133
|
+
prismatica accept
|
|
134
|
+
# signs your approval over this exact diff with your private key;
|
|
135
|
+
# the gate verifies the signature — nobody can fake your sign-off
|
|
136
|
+
|
|
137
|
+
7. Ship it:
|
|
138
|
+
|
|
139
|
+
prismatica ship <id>
|
|
140
|
+
# pushes the exact committed head and opens the pull request; the gate
|
|
141
|
+
# re-runs everything on GitHub and blocks the merge unless every
|
|
142
|
+
# requirement holds — including a signed decision, and the changed
|
|
143
|
+
# files' own risk-tier floor (touching auth/payments/data always needs
|
|
144
|
+
# at least the tier that implies)
|
|
145
|
+
|
|
146
|
+
8. Merge it — once the gate is green:
|
|
147
|
+
|
|
148
|
+
prismatica merge <id>
|
|
149
|
+
# an exact-SHA, owner-guarded merge: refuses a draft, missing, closed,
|
|
150
|
+
# pending, failed, stale, or ambiguous PR, requires a passing
|
|
151
|
+
# prismatica-gate check for this EXACT head, then merges (--merge only
|
|
152
|
+
# — never a silent squash or rebase). Reported as "Checked —
|
|
153
|
+
# owner-guarded": this command is the guard, not a claim that GitHub
|
|
154
|
+
# itself enforces it (GitHub Free private repos don't offer that)
|
|
155
|
+
|
|
156
|
+
9. Close it — remove the lane once GitHub confirms the merge:
|
|
157
|
+
|
|
158
|
+
prismatica close <id>
|
|
159
|
+
# requires the exact registered lane, refuses a dirty one, and only
|
|
160
|
+
# removes the worktree (+ local branch) once GitHub's own record shows
|
|
161
|
+
# a merged PR at exactly this lane's HEAD — never a remote branch,
|
|
162
|
+
# never uncertain, never partial-and-unrecoverable
|
|
163
|
+
|
|
164
|
+
10. Verify it — after the merge deploys:
|
|
165
|
+
|
|
166
|
+
prismatica ship <id> --verify --deploy-result "deployed to prod" \\
|
|
167
|
+
--rollback "revert the PR, redeploy"
|
|
168
|
+
# runs one live smoke journey; only if it passes is the passport
|
|
169
|
+
# written: what shipped, its proof, and a tested way back. This writes
|
|
170
|
+
# onto your main checkout, not the (already-closed) lane
|
|
171
|
+
|
|
172
|
+
Run each command from inside the change's lane and you can leave the <id> off —
|
|
173
|
+
Prismatica works out which change you mean from the branch. Lost? \`prismatica
|
|
174
|
+
next\` always tells you exactly which of these to run next, including while
|
|
175
|
+
waiting on the gate or a merged-but-not-yet-closed PR.
|
|
176
|
+
|
|
177
|
+
**Steps 3 to 5 can be driven for you, up to the point where you decide.** Ask
|
|
178
|
+
your coding agent to get the change ready and it runs build → \`check\` → fresh
|
|
179
|
+
review as a bounded loop of disposable sessions, handing back at your next
|
|
180
|
+
decision — the seal in step 5 included. That is a role any agent can take
|
|
181
|
+
(Prismatica packages it where it can — in Claude Code, \`/prismatica:ready\`),
|
|
182
|
+
and it is a convenience rather than a shortcut: every command above still runs,
|
|
183
|
+
and the gate is unmoved by whether one was typed by you or started for you. See
|
|
184
|
+
"roles" for the one owner-only command a controller may run, and why that one
|
|
185
|
+
cannot advance anything.`,
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
id: 'next',
|
|
189
|
+
title: "next — the one command, when you don't know what to run",
|
|
190
|
+
body: `You do not need to memorise the loop above. From anywhere in the repo:
|
|
191
|
+
|
|
192
|
+
prismatica next
|
|
193
|
+
# prints exactly one command, one reason, and what to run after —
|
|
194
|
+
# never a guess, never a placeholder you have to fill in yourself
|
|
195
|
+
|
|
196
|
+
It reads what is already on record — no Flows yet? it says \`discover\`. A
|
|
197
|
+
draft waiting? \`view\`. An approved delta not yet turned into a change?
|
|
198
|
+
\`frame --from-delta\`. Mid-change? whichever of pack / open / check / review /
|
|
199
|
+
seal / accept / ship / merge / close fits where that change actually is right
|
|
200
|
+
now — never \`git add -A\`, always the exact files that changed. Nothing to
|
|
201
|
+
do? "all quiet."
|
|
202
|
+
|
|
203
|
+
It never runs your checks itself (that would make asking "what's next" as
|
|
204
|
+
slow as a full proof run) — it only reads the record of what already
|
|
205
|
+
happened. The one exception: once you have actually shipped, it makes a
|
|
206
|
+
single read-only check of the PR and its \`prismatica-gate\` check (never
|
|
207
|
+
writes anything back to GitHub) so it can tell "wait for the gate" apart from
|
|
208
|
+
"ready to merge" apart from "merged — go close it". If GitHub cannot be
|
|
209
|
+
reached, it says so honestly and falls back to a safe, retry-able suggestion
|
|
210
|
+
— never a guess dressed up as certainty. Add \`--copy\` to copy the command
|
|
211
|
+
straight to your clipboard.
|
|
212
|
+
|
|
213
|
+
**Every git command it prints names the directory it belongs in.** \`next\` runs
|
|
214
|
+
from anywhere — main, a lane, a subdirectory of either — so a bare \`git add\`
|
|
215
|
+
would stage whichever worktree you happened to be standing in. The advice is
|
|
216
|
+
always \`git -C <the exact lane> …\`, quoted, so a paste does the same thing from
|
|
217
|
+
every directory.
|
|
218
|
+
|
|
219
|
+
**It also tells you when main itself has fallen behind.** That sits second from
|
|
220
|
+
last in the order, below real work in a lane and below stale Flow evidence: a
|
|
221
|
+
behind main is housekeeping, and interrupting the change you asked about to
|
|
222
|
+
report it would bury the answer. It outranks only "all quiet", which is the one
|
|
223
|
+
answer it genuinely contradicts — the next change framed from a stale main
|
|
224
|
+
would take a stale baseline, and \`frame\` refuses outright for that reason.
|
|
225
|
+
|
|
226
|
+
git -C /path/to/repo pull --ff-only origin main
|
|
227
|
+
|
|
228
|
+
Nothing is ever pulled for you, and nothing is fetched to work this out: it
|
|
229
|
+
reports what your last fetch already told this repo. If that cannot be
|
|
230
|
+
established — no remote, no upstream ref — it says nothing at all. "We do not
|
|
231
|
+
know" is never printed as "you are behind".
|
|
232
|
+
|
|
233
|
+
Between \`prismatica view\` (see everything), \`prismatica delta new\` (say what
|
|
234
|
+
should change about a Flow), and \`prismatica next\` (what do I do now), that
|
|
235
|
+
is the whole owner-facing surface — everything else is what those three
|
|
236
|
+
commands walk you through.
|
|
237
|
+
|
|
238
|
+
**Every \`prismatica\` command above is location-independent.** Run it from
|
|
239
|
+
main, from a lane, or from a subdirectory of either, and it resolves which
|
|
240
|
+
change you mean from the record — never from your current directory. A
|
|
241
|
+
manually opened agent is the one exception: when \`prismatica open <agent>
|
|
242
|
+
--no-spawn\` (or \`review --agent <agent> --no-spawn\`) prints a command instead
|
|
243
|
+
of launching one, or after \`open --copy\`/\`review --copy\` hand you a brief or
|
|
244
|
+
pointer to paste, what you run yourself is a plain agent process, and that
|
|
245
|
+
process inherits YOUR shell's current directory, not Prismatica's resolved
|
|
246
|
+
one. That is why the printed command always starts with \`cd <lane> &&\` —
|
|
247
|
+
quoted, so a lane path with a space or a quote in it still reaches \`cd\` as one
|
|
248
|
+
argument — and why it carries \`PRISMATICA_EXECUTOR=agent\`: a spawned launch
|
|
249
|
+
always sets that marker, and a hand-run missing it would look, to Prismatica,
|
|
250
|
+
like you at your own terminal rather than the agent it is. Paste the printed
|
|
251
|
+
line as-is; Prismatica never runs it for you, never changes your shell's own
|
|
252
|
+
directory, and never opens a nested shell to do so.
|
|
253
|
+
|
|
254
|
+
**One special case: Prismatica's own repository — a self-host EXCEPTION, not
|
|
255
|
+
an ordinary application workflow.** If the lane being advised is a checkout of
|
|
256
|
+
Prismatica itself, the \`prismatica\` on your PATH is some other copy, and
|
|
257
|
+
running it would exercise code the lane does not contain. There, \`next\`
|
|
258
|
+
(and \`doctor\`) name the lane's own build instead, in whichever of three
|
|
259
|
+
states that checkout is actually in — never a guess, and never something
|
|
260
|
+
Prismatica installs or builds on your behalf:
|
|
261
|
+
|
|
262
|
+
cd <lane> && npm ci # no node_modules yet — install first
|
|
263
|
+
cd <lane> && npm run build # installed, but dist/cli.js is not built
|
|
264
|
+
cd <lane> && node dist/cli.js … # ready — runs the lane's own build
|
|
265
|
+
|
|
266
|
+
Only the third line is ever \`prismatica\`'s advice rewritten to point at code;
|
|
267
|
+
the first two are the ONE exact recovery for that lane's state, never chained
|
|
268
|
+
onto a command that cannot yet run. \`next\` also prints where both copies
|
|
269
|
+
live, without claiming either is newer, because nothing here can know that.
|
|
270
|
+
This is advice and nothing else: no gate, no checksum, no version handshake,
|
|
271
|
+
and — outside this one narrow exception — \`npm ci\`/\`npm run build\` are never
|
|
272
|
+
part of Prismatica's own advice for an ordinary application repository.
|
|
273
|
+
Ordinary repositories, and every \`git\` or \`gh\` command, are untouched.
|
|
274
|
+
|
|
275
|
+
Every command that acts on a change says the same thing once — one note on
|
|
276
|
+
stderr, the first time, only in Prismatica's own repository and only when you
|
|
277
|
+
are at a terminal. Piped output, CI and every other repository print nothing.
|
|
278
|
+
\`prismatica doctor\` states it plainly too: which checkout holds the build
|
|
279
|
+
that produced the report, and which checkout the report is about. None of it
|
|
280
|
+
changes a single check result.`,
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
id: 'understandapp',
|
|
284
|
+
title: 'Scenario — understand an app you already have',
|
|
285
|
+
body: `You have an app. You want to know what it actually does today, and how much
|
|
286
|
+
of that is genuinely proven rather than assumed. Start here.
|
|
287
|
+
|
|
288
|
+
In your coding agent, use Prismatica Understand: ask it to map this app.
|
|
289
|
+
It reads the real code and describes it as Flows (routes through your app)
|
|
290
|
+
and Rules (things that must stay true), saves a json answer, and hands you:
|
|
291
|
+
|
|
292
|
+
prismatica discover --import <proposal.json>
|
|
293
|
+
# materialises that answer as proposals. It proposes; nothing is
|
|
294
|
+
# accepted automatically.
|
|
295
|
+
|
|
296
|
+
prismatica flow list
|
|
297
|
+
# what the app does, in reading order, grouped by journey when your
|
|
298
|
+
# records say which journey they belong to
|
|
299
|
+
|
|
300
|
+
A Flow is one complete route through your app — "log a practice session",
|
|
301
|
+
start to finish. The list leads with a short title and a one-sentence outcome,
|
|
302
|
+
and it stays quiet unless something needs you: a stale step, an unverified
|
|
303
|
+
flow, a pending update, or an open change that touches it.
|
|
304
|
+
|
|
305
|
+
Read one properly:
|
|
306
|
+
|
|
307
|
+
prismatica flow show log-a-practice-session
|
|
308
|
+
# the story: what it is for, where it starts and ends, what happens in
|
|
309
|
+
# order, and how solid the evidence is
|
|
310
|
+
|
|
311
|
+
Then accept what is right and discard what is not:
|
|
312
|
+
|
|
313
|
+
prismatica flow approve log-a-practice-session
|
|
314
|
+
prismatica flow dismiss guess-at-billing
|
|
315
|
+
|
|
316
|
+
Same for the app-wide guardrails:
|
|
317
|
+
|
|
318
|
+
prismatica rules list # every rule's complete text, wrapped
|
|
319
|
+
prismatica rules list --details # plus which flows cite each one
|
|
320
|
+
prismatica rules approve offline-first
|
|
321
|
+
|
|
322
|
+
Prefer to read in a browser? \`prismatica view\` opens the same Flow Map and
|
|
323
|
+
Storyboards, backed by exactly the same data.`,
|
|
324
|
+
},
|
|
325
|
+
{
|
|
326
|
+
id: 'changeflow',
|
|
327
|
+
title: 'Scenario — change something an existing Flow does',
|
|
328
|
+
body: `The app already does something, and you want it to do something different.
|
|
329
|
+
Say it in Flow language first — before anyone writes code.
|
|
330
|
+
|
|
331
|
+
A Delta is one sentence of intent: which flow, what happens today, what should
|
|
332
|
+
happen instead, and what must not change.
|
|
333
|
+
|
|
334
|
+
prismatica delta new \\
|
|
335
|
+
--flow log-a-practice-session \\
|
|
336
|
+
--today "Saving a session with an empty title succeeds silently" \\
|
|
337
|
+
--instead "An empty title is rejected with an inline message" \\
|
|
338
|
+
--keep "Offline saving still queues and syncs later" \\
|
|
339
|
+
--show-me "A test that saves an empty title and expects a rejection"
|
|
340
|
+
|
|
341
|
+
prismatica delta list # what has been proposed
|
|
342
|
+
prismatica delta approve <id> # this is the change you want
|
|
343
|
+
|
|
344
|
+
Approving a Delta does not touch the Flow — it records the intent. Turn it
|
|
345
|
+
into a contract and a safe lane to build in:
|
|
346
|
+
|
|
347
|
+
prismatica frame --from-delta <id>
|
|
348
|
+
|
|
349
|
+
From there it is the ordinary loop (see "loop"): the agent builds in the lane,
|
|
350
|
+
\`prismatica check\` proves it, \`review\` and \`seal\` bind fresh eyes to the
|
|
351
|
+
exact diff, and the Flow itself only changes when an agent PROPOSES an update
|
|
352
|
+
and you run \`prismatica flow approve\`. No lane can ever write an approved
|
|
353
|
+
Flow directly.
|
|
354
|
+
|
|
355
|
+
While the change is open, every affected Flow says so on the Flow Map and in
|
|
356
|
+
\`flow list\` — "Directly affected by open change …" — so you are never
|
|
357
|
+
reading a map that quietly went out of date.`,
|
|
358
|
+
},
|
|
359
|
+
{
|
|
360
|
+
id: 'newflow',
|
|
361
|
+
title: 'Scenario — define and approve a new Planned Flow',
|
|
362
|
+
body: `Something the app does not do yet, but should. Write it as a Planned Flow so
|
|
363
|
+
it is visible and reviewable before a single line exists.
|
|
364
|
+
|
|
365
|
+
Ask your agent to draft it (a proposal file under
|
|
366
|
+
\`.prismatica/flows/proposals/\`), with \`status: planned\` and a truth block:
|
|
367
|
+
goal, starts when, needs, steps, ends with. A realistic one:
|
|
368
|
+
|
|
369
|
+
id: export-a-practice-log
|
|
370
|
+
status: planned
|
|
371
|
+
truth:
|
|
372
|
+
goal: Export a practice log as a CSV file a coach can open
|
|
373
|
+
startsWhen: The user taps 'Export' on the history screen
|
|
374
|
+
needs:
|
|
375
|
+
- They are signed in
|
|
376
|
+
- At least one session exists
|
|
377
|
+
steps:
|
|
378
|
+
- actor: User
|
|
379
|
+
action: chooses a date range and taps Export
|
|
380
|
+
shows: A progress row while the file is built
|
|
381
|
+
- actor: App
|
|
382
|
+
action: writes the CSV and hands it to the share sheet
|
|
383
|
+
shows: The system share sheet with the file attached
|
|
384
|
+
changes: An export record with the row count and range
|
|
385
|
+
endsWith: The coach receives a CSV that opens cleanly in a spreadsheet
|
|
386
|
+
|
|
387
|
+
Then review and accept it exactly like any other proposal:
|
|
388
|
+
|
|
389
|
+
prismatica flow show export-a-practice-log # read it as a story
|
|
390
|
+
prismatica flow approve export-a-practice-log # sign it as approved truth
|
|
391
|
+
|
|
392
|
+
Approving records a fingerprint of the truth block and, in a governed repo,
|
|
393
|
+
signs it with your key. A Planned Flow shows as "Planned" everywhere until it
|
|
394
|
+
is real; when it is, flip it in one command — no ceremony, because the honest
|
|
395
|
+
guard is the visible evidence, not a lock:
|
|
396
|
+
|
|
397
|
+
prismatica flow status export-a-practice-log works
|
|
398
|
+
prismatica flow verify export-a-practice-log --step 2`,
|
|
399
|
+
},
|
|
400
|
+
{
|
|
401
|
+
id: 'proof',
|
|
402
|
+
title: 'Scenario — inspect the proof, and the code behind it',
|
|
403
|
+
body: `The default story is deliberately short. When you want to interrogate it, open
|
|
404
|
+
one layer at a time — the flags compose, and nothing is hidden that you cannot
|
|
405
|
+
ask for.
|
|
406
|
+
|
|
407
|
+
prismatica flow show prove-a-change-with-check
|
|
408
|
+
# the owner story: outcome, start/end, steps in order, evidence summary
|
|
409
|
+
|
|
410
|
+
prismatica flow show prove-a-change-with-check --proof
|
|
411
|
+
# how EVERY step was verified: manually, by test, inferred from the
|
|
412
|
+
# code, or not at all. Evidence attaches to the exact step, never to
|
|
413
|
+
# the whole flow, so one passing test can never read as "it all works".
|
|
414
|
+
|
|
415
|
+
prismatica flow show prove-a-change-with-check --details
|
|
416
|
+
# the assumptions each step relies on. Every guardrail's complete text
|
|
417
|
+
# is already shown, with no flag needed — never clipped to a label
|
|
418
|
+
|
|
419
|
+
prismatica flow show prove-a-change-with-check --code
|
|
420
|
+
# where it lives: touchpoints, routes, components, entities, tests
|
|
421
|
+
|
|
422
|
+
prismatica flow show prove-a-change-with-check --json | jq '.steps[].result'
|
|
423
|
+
# the same view as stable JSON, for scripts
|
|
424
|
+
|
|
425
|
+
"Stale" is the word to watch for. A step is stale when the code it depends on
|
|
426
|
+
changed after the last time that step was verified — the record is not wrong,
|
|
427
|
+
it is simply no longer known to be right. Re-confirm it yourself with:
|
|
428
|
+
|
|
429
|
+
prismatica flow verify prove-a-change-with-check --step 3
|
|
430
|
+
|
|
431
|
+
Only real implementation and test changes count. Approving or dismissing a
|
|
432
|
+
Flow/Rule proposal elsewhere in the repo touches files under \`.prismatica/\`,
|
|
433
|
+
and that alone never stales a step's evidence — even for a Flow (like this
|
|
434
|
+
one, or "Map the app with atlas discovery") whose own mechanics legitimately
|
|
435
|
+
live under \`.prismatica/\`. Only a later change to the actual code or test
|
|
436
|
+
files a step is mapped to does.`,
|
|
437
|
+
},
|
|
438
|
+
{
|
|
439
|
+
id: 'mergepath',
|
|
440
|
+
title: 'Scenario — merge on a private repo with no branch protection',
|
|
441
|
+
body: `GitHub Free does not offer required status checks on private repositories.
|
|
442
|
+
Prismatica does not pretend otherwise: it gives you an owner-guarded merge
|
|
443
|
+
path and describes it honestly as "Checked — owner-guarded", never as
|
|
444
|
+
"enforced by GitHub".
|
|
445
|
+
|
|
446
|
+
prismatica ship 20260728-add-signup-validation-a1b2
|
|
447
|
+
# pre-flights the gate locally, requires an exact clean lane HEAD,
|
|
448
|
+
# pushes that exact commit, and opens (or reuses) the pull request
|
|
449
|
+
|
|
450
|
+
The gate then runs on GitHub for that push, in a clean checkout: scope, tests,
|
|
451
|
+
docs, the sealed review, your signature where the risk tier demands one.
|
|
452
|
+
|
|
453
|
+
prismatica merge 20260728-add-signup-validation-a1b2
|
|
454
|
+
# the guard. It refuses a draft, missing, closed, pending, failed,
|
|
455
|
+
# stale, or ambiguous PR, and requires a PASSING prismatica-gate check
|
|
456
|
+
# for this exact head commit before calling gh pr merge --merge —
|
|
457
|
+
# never a silent squash or rebase, never a merge of a different SHA
|
|
458
|
+
# than the one that was proven
|
|
459
|
+
|
|
460
|
+
prismatica doctor
|
|
461
|
+
# tells you plainly which level of assurance you actually have:
|
|
462
|
+
# absent, unexercised, "Checked — owner-guarded", unavailable on this
|
|
463
|
+
# plan, unknown, or genuinely server-enforced
|
|
464
|
+
|
|
465
|
+
Know exactly what that compromise buys you, and what it does not.
|
|
466
|
+
\`prismatica merge\` is exact-head and owner-guarded: it will not merge anything
|
|
467
|
+
but the exact commit a passing prismatica-gate check covers. What it cannot do
|
|
468
|
+
is guard a route it never runs on. Without server-side protection, merging the
|
|
469
|
+
pull request in the GitHub browser UI, or pushing straight to main, is still
|
|
470
|
+
possible — Prismatica is the guard you choose to walk through, not a locked door.
|
|
471
|
+
|
|
472
|
+
On a private GitHub Free repo, doctor says "unavailable on this plan" and
|
|
473
|
+
prints no settings fix, because there is no setting to change. That is not a
|
|
474
|
+
failure of yours, and it does not count against your adoption score.
|
|
475
|
+
|
|
476
|
+
If GitHub cannot be reached, both commands fail closed and say so. An unknown
|
|
477
|
+
state is never treated as a green one — and, just as importantly, it is never
|
|
478
|
+
reported as an absent one. "We could not ask GitHub" reads as "unknown", never
|
|
479
|
+
as "this branch is unprotected".`,
|
|
480
|
+
},
|
|
481
|
+
{
|
|
482
|
+
id: 'verifyclose',
|
|
483
|
+
title: 'Scenario — verify the live deploy, then close the change',
|
|
484
|
+
body: `Merged is not the same as working. Close the loop in that order: merge, close
|
|
485
|
+
the lane, deploy, then prove the deploy.
|
|
486
|
+
|
|
487
|
+
prismatica close 20260728-add-signup-validation-a1b2
|
|
488
|
+
# removes the lane ONLY once GitHub's own record confirms a merged PR
|
|
489
|
+
# at exactly this lane's HEAD. It refuses any real uncommitted work,
|
|
490
|
+
# and refuses ignored local files it cannot prove are disposable — a
|
|
491
|
+
# local .env, a log, an evidence blob, or a hand-edited hook survives.
|
|
492
|
+
# It never deletes the remote branch.
|
|
493
|
+
|
|
494
|
+
A successful \`close\` always ends by telling you to catch main up, because the
|
|
495
|
+
merge happened on GitHub and this checkout has not seen it yet:
|
|
496
|
+
|
|
497
|
+
git -C /path/to/repo pull --ff-only origin main
|
|
498
|
+
|
|
499
|
+
That prints every time, not only when something went wrong — an owner told
|
|
500
|
+
nothing discovers the staleness at the next \`frame\`, which refuses. If the
|
|
501
|
+
local branch could not be deleted (git refuses a \`-d\` while the checkout has
|
|
502
|
+
not seen the merge), the safe delete is printed too, and only AFTER the pull
|
|
503
|
+
that makes it possible. It stays \`-d\`, never \`-D\`: if git still refuses
|
|
504
|
+
afterwards, there really is unmerged work there. Nothing is pulled for you.
|
|
505
|
+
|
|
506
|
+
Deploy however you normally deploy. Then, and only then:
|
|
507
|
+
|
|
508
|
+
prismatica ship 20260728-add-signup-validation-a1b2 --verify \\
|
|
509
|
+
--deploy-result "deployed to production at 14:20 UTC" \\
|
|
510
|
+
--rollback "revert PR #48 and redeploy image v1.9.3"
|
|
511
|
+
# runs one live smoke journey against the real app; the passport is
|
|
512
|
+
# written only if it passes
|
|
513
|
+
|
|
514
|
+
No passport is written for a broken deploy. The rollback route recorded is one
|
|
515
|
+
you actually described, because the only rollback worth having is one somebody
|
|
516
|
+
has thought through.
|
|
517
|
+
|
|
518
|
+
\`--verify\` proves the change against the ONE commit that merged, and it stays
|
|
519
|
+
provable however long you leave it. It requires GitHub to confirm the PR merged,
|
|
520
|
+
into your configured main branch, from this contract's own branch; that the
|
|
521
|
+
merged head produces exactly the patch-id your proof covers (the approved sealed
|
|
522
|
+
review above \`light\` tier, the passing check's own commit at \`light\`); and
|
|
523
|
+
that exactly one \`prismatica-gate\` check ran on that head and passed. Missing,
|
|
524
|
+
pending, failed, ambiguous, or unreadable gate evidence all refuse, before the
|
|
525
|
+
smoke journey and before anything is written.
|
|
526
|
+
|
|
527
|
+
It does NOT re-run the local gate. That question decays: after the merge it
|
|
528
|
+
would compare your baseline against whatever main is today, so every change
|
|
529
|
+
that merged after yours would count as your out-of-scope files. The gate's own
|
|
530
|
+
recorded result on your exact merged head is the honest replacement — and a
|
|
531
|
+
real one, since without GitHub branch protection a PR merged in the browser
|
|
532
|
+
never had to satisfy any check at all.
|
|
533
|
+
|
|
534
|
+
Unsure where you are in that sequence at any point:
|
|
535
|
+
|
|
536
|
+
prismatica next
|
|
537
|
+
# reads the PR and its checks read-only and names the single next
|
|
538
|
+
# command — or says the state is unknown, if GitHub cannot be reached`,
|
|
539
|
+
},
|
|
540
|
+
{
|
|
541
|
+
id: 'abandon',
|
|
542
|
+
title: 'Scenario — stop a change you are not going to finish',
|
|
543
|
+
body: `Not every change should be finished. The requirement evaporated, the approach
|
|
544
|
+
was wrong, or you started two and only want one. Abandoning is a first-class
|
|
545
|
+
ending, not a failure to clean up after.
|
|
546
|
+
|
|
547
|
+
prismatica abandon 20260728-add-signup-validation-a1b2 \\
|
|
548
|
+
--reason "the customer withdrew the request before we started building"
|
|
549
|
+
|
|
550
|
+
The reason is required, because it is the only part of an abandoned change that
|
|
551
|
+
stays useful a year later.
|
|
552
|
+
|
|
553
|
+
What it does, in this order:
|
|
554
|
+
|
|
555
|
+
1. **Settles the pull request first.** If one is open, it is closed on GitHub
|
|
556
|
+
before anything else happens — a lane taken away while its PR still passes
|
|
557
|
+
the gate leaves work anyone can merge, with nobody left who intends to
|
|
558
|
+
review it. If gh cannot tell whether a PR exists, the command stops and
|
|
559
|
+
changes nothing: "there is no PR" and "we could not find out" are different
|
|
560
|
+
facts, and only the first is safe to act on. A PR that already merged is
|
|
561
|
+
refused outright — that change shipped, so \`close\` is the command, not
|
|
562
|
+
this one.
|
|
563
|
+
2. **Closes the linked issue**, best effort. If that fails you are told so,
|
|
564
|
+
with the command to do it yourself. It never fails silently.
|
|
565
|
+
3. **Archives the records to git history** — the contract, the approved plan,
|
|
566
|
+
the brief, the linked delta and a planned Flow proposal, whichever exist.
|
|
567
|
+
This is the one place Prismatica commits for you, and it is deliberate: the
|
|
568
|
+
records of a freshly started change are usually still uncommitted, and
|
|
569
|
+
removing the lane would destroy the only copy of them. Anything else in the
|
|
570
|
+
lane refuses the whole command — your own uncommitted code, a conflict, a
|
|
571
|
+
file that does not parse as the record its name claims, or an ignored local
|
|
572
|
+
file like a \`.env\` that the removal would delete.
|
|
573
|
+
4. **Removes the lane**, and only then.
|
|
574
|
+
|
|
575
|
+
**Nothing is deleted.** The local branch is retained, and any remote branch
|
|
576
|
+
that already existed for it is left untouched — abandon never pushes or
|
|
577
|
+
deletes one. The command ends by printing how to bring the lane back:
|
|
578
|
+
|
|
579
|
+
git -C /path/to/repo worktree add /path/to/repo-lanes/<id> change/<id>
|
|
580
|
+
|
|
581
|
+
Everything is exactly where you left it, plus one commit saying why you
|
|
582
|
+
stopped. Changing your mind is a supported outcome.
|
|
583
|
+
|
|
584
|
+
There is no lifecycle stage for this on purpose: abandoning is leaving the
|
|
585
|
+
sequence, not a step along it.`,
|
|
586
|
+
},
|
|
587
|
+
{
|
|
588
|
+
id: 'startbug',
|
|
589
|
+
title: 'Scenario — something is broken and you do not know where',
|
|
590
|
+
body: `You have a bug. You can describe what you see, but you do not know which
|
|
591
|
+
files are involved, whether it touches a Flow, or how risky it is. That is
|
|
592
|
+
exactly the normal case, and it is what \`start\` is for.
|
|
593
|
+
|
|
594
|
+
Open the agent you are already using, activate Prismatica Start, and describe
|
|
595
|
+
it in your own words — "exporting a session over about 10MB does nothing at
|
|
596
|
+
all, no file, no error". Settle it with them there: that conversation is where
|
|
597
|
+
the questions get asked and answered.
|
|
598
|
+
|
|
599
|
+
The skill then reads your repository for itself. It does that through
|
|
600
|
+
\`prismatica context start\`, which writes ONE json file to a private temporary
|
|
601
|
+
directory — outside your repository, so it never shows up in \`git status\` and
|
|
602
|
+
never blocks a check. It contains a read-only snapshot of your repo (the exact
|
|
603
|
+
commit, every Flow and its truth hash, every Rule, what is already pending,
|
|
604
|
+
what changes are in flight), plain-language instructions, and the exact schema
|
|
605
|
+
the answer must match. You do not normally run that command yourself; see
|
|
606
|
+
"prismatica guide handoff" for when you would.
|
|
607
|
+
|
|
608
|
+
Prismatica does not run that agent. It has no adapter to keep working, no
|
|
609
|
+
provider dialect to translate, and no session to leave behind — which is also
|
|
610
|
+
why there is nothing to fall back to when an agent is missing or a version
|
|
611
|
+
changed. Any agent that can read a file and write JSON can answer.
|
|
612
|
+
|
|
613
|
+
When it saves an answer, you import it:
|
|
614
|
+
|
|
615
|
+
prismatica start --import ~/plan.json
|
|
616
|
+
|
|
617
|
+
The plan carries the wording you both agreed (\`request\`) and who will build it
|
|
618
|
+
(\`builder\`), so neither is retyped here and neither can quietly differ from the
|
|
619
|
+
plan you are about to approve.
|
|
620
|
+
|
|
621
|
+
What happens then, in order:
|
|
622
|
+
|
|
623
|
+
1. Prismatica takes a **fresh** reading of the repository and revalidates the
|
|
624
|
+
plan against it: no unknown fields, no absolute paths, no \`..\`, no secret
|
|
625
|
+
files, every Flow id it cites must really exist, every acceptance check must
|
|
626
|
+
name a real test file or \`manual:OWNER\`, and the risk tier is recomputed
|
|
627
|
+
from the files it proposes to touch. An agent can raise the tier; it can
|
|
628
|
+
never lower it. Nothing the imported document says is ever taken as fact
|
|
629
|
+
about your repo — the document is checked against the repo, not the reverse.
|
|
630
|
+
2. The plan also echoes the whole snapshot it was written against. Prismatica
|
|
631
|
+
recomputes that snapshot's id from its own contents, so an echo nobody
|
|
632
|
+
actually exported is refused; what it is then used for is one thing only —
|
|
633
|
+
telling you what moved in your repo since the agent read it.
|
|
634
|
+
3. It shows you your own request first, then the whole plan — scope, risk
|
|
635
|
+
answers, exclusions, desired rules, the Delta or Planned Flow in full — **and
|
|
636
|
+
the exact GitHub issue it will file**, assembled from that plan rather than
|
|
637
|
+
written by the agent. Then it asks once:
|
|
638
|
+
|
|
639
|
+
Start this change? (default: No)
|
|
640
|
+
|
|
641
|
+
**Nothing is created until you say yes.** No issue, no branch, no lane, no
|
|
642
|
+
record. There is no \`--yes\`: the whole point of the question is that a person
|
|
643
|
+
saw the plan and the issue text before either existed anywhere.
|
|
644
|
+
|
|
645
|
+
4. When you say yes, Prismatica takes a **second** fresh reading and revalidates
|
|
646
|
+
against that one, immediately before the first outward-facing write. A
|
|
647
|
+
confirmation can take minutes, and a plan that was true when it was displayed
|
|
648
|
+
is not thereby true when it is acted on.
|
|
649
|
+
|
|
650
|
+
Then, in this order: the issue is created, the lane is framed, your approved
|
|
651
|
+
intent is written into that lane, the Delta or Planned Flow goes in beside it,
|
|
652
|
+
and the builder brief is generated. If any step fails, whatever already
|
|
653
|
+
succeeded is kept and you get one exact command to carry on from there — a real
|
|
654
|
+
GitHub issue is never silently thrown away.
|
|
655
|
+
|
|
656
|
+
## If something failed after the lane existed
|
|
657
|
+
|
|
658
|
+
prismatica start --import ~/plan.json --resume 20260729-fix-the-silent-export-failure-a1b2
|
|
659
|
+
|
|
660
|
+
\`--resume\` finishes a change whose **lane already exists** — a live lane, on
|
|
661
|
+
that change's own branch; an archived contract sitting on main will not do.
|
|
662
|
+
|
|
663
|
+
It is the same path, not a shortcut past you: it takes the fresh reading,
|
|
664
|
+
revalidates the plan, shows you the whole preview and asks the same default-No
|
|
665
|
+
question before writing anything. What it changes is only what happens after
|
|
666
|
+
the yes. First it checks that the file you are importing really is the plan
|
|
667
|
+
that lane was framed from — title, scope, non-goals, acceptance checks, docs
|
|
668
|
+
delta and builder, every field the contract was built from — and then it writes
|
|
669
|
+
only the records that are genuinely missing. A record that is already there and
|
|
670
|
+
matches is left exactly as it is, timestamp and all; one that is there and
|
|
671
|
+
DIFFERS is a conflict and it refuses, because the version on disk may be the
|
|
672
|
+
one you edited.
|
|
673
|
+
|
|
674
|
+
Running it twice is a no-op. If framing never happened — only the issue was
|
|
675
|
+
created — that is not a resume: run \`start\` again with \`--issue <url>\` so it
|
|
676
|
+
links the issue you already have rather than opening a second one.
|
|
677
|
+
|
|
678
|
+
## Naming the builder
|
|
679
|
+
|
|
680
|
+
Whoever planned the change is not thereby its builder, so nothing infers one:
|
|
681
|
+
the plan states it outright, agreed with you during planning, and it is shown
|
|
682
|
+
in the preview before you confirm. You can change it later — see
|
|
683
|
+
"prismatica guide roles".
|
|
684
|
+
|
|
685
|
+
Then it is the ordinary loop:
|
|
686
|
+
|
|
687
|
+
prismatica open claude 20260729-fix-the-silent-export-failure-a1b2`,
|
|
688
|
+
},
|
|
689
|
+
{
|
|
690
|
+
id: 'starttechnical',
|
|
691
|
+
title: 'Scenario — a technical refactor, with no product Flow invented',
|
|
692
|
+
body: `Not every change is a feature. Splitting a 900-line module, replacing a
|
|
693
|
+
deprecated API, speeding up a build — none of these change what a user can do,
|
|
694
|
+
and inventing a product Flow to make them look like features would be a lie
|
|
695
|
+
your map has to carry forever.
|
|
696
|
+
|
|
697
|
+
In Prismatica Start, tell your agent: "src/report/builder.ts has grown to 900
|
|
698
|
+
lines and three responsibilities — split it without changing behaviour". Settle
|
|
699
|
+
it, and run what it hands you:
|
|
700
|
+
|
|
701
|
+
prismatica start --import ~/plan.json
|
|
702
|
+
|
|
703
|
+
The plan classifies this as \`technical\`. That kind is checked, not merely
|
|
704
|
+
labelled: a technical proposal that also carries a Planned Flow or a Delta is
|
|
705
|
+
**rejected**. So you get an honest contract — scope, non-goals, acceptance
|
|
706
|
+
checks, risk tier — and your Flow map is left exactly as it was.
|
|
707
|
+
|
|
708
|
+
The plan will look roughly like:
|
|
709
|
+
|
|
710
|
+
What technical work (no product Flow)
|
|
711
|
+
Why three responsibilities in one file make every change risky
|
|
712
|
+
Instead one module per responsibility, behaviour identical
|
|
713
|
+
Risk tier normal
|
|
714
|
+
Scope src/report/**
|
|
715
|
+
Done when existing report tests still pass — proven by src/report/builder.test.ts
|
|
716
|
+
the public export surface is unchanged — proven by src/report/api.test.ts
|
|
717
|
+
|
|
718
|
+
Confirm it and the loop is identical to any other change. The
|
|
719
|
+
gate does not care that no Flow moved; it cares that the diff stayed in scope,
|
|
720
|
+
every acceptance check traced to a passing test, and the review sealed an
|
|
721
|
+
explicit approval of your exact diff.`,
|
|
722
|
+
},
|
|
723
|
+
{
|
|
724
|
+
id: 'rediscover',
|
|
725
|
+
title: 'Scenario — the app changed; bring the map back up to date',
|
|
726
|
+
body: `You mapped the app months ago. Since then five changes shipped. The map is not
|
|
727
|
+
wrong so much as behind. There is no separate command for this: mapping an app
|
|
728
|
+
for the first time and reconciling it afterwards are the same job, and the
|
|
729
|
+
snapshot already says which Flows exist.
|
|
730
|
+
|
|
731
|
+
In your coding agent: Prismatica Understand, then run what it hands you:
|
|
732
|
+
|
|
733
|
+
prismatica discover --import ~/answer.json
|
|
734
|
+
|
|
735
|
+
The context the skill reads gives the agent the exact picture: your current git HEAD,
|
|
736
|
+
every Flow's stable id, its title, its goal, its truth hash, every Rule and the
|
|
737
|
+
Rules approval hash, and everything already pending. It must echo the commit it
|
|
738
|
+
read back, or the answer is refused — an answer about a tree that has since
|
|
739
|
+
moved is rejected rather than merged.
|
|
740
|
+
|
|
741
|
+
Four guarantees are worth stating plainly:
|
|
742
|
+
|
|
743
|
+
- **Recognised ids become updates, never duplicates.** If the agent returns a
|
|
744
|
+
Flow whose id you already have, it is written as an update to that Flow — no
|
|
745
|
+
near-duplicate under a new name. Prismatica decides this from what is on
|
|
746
|
+
disk, not from what the agent labelled it.
|
|
747
|
+
- **The whole batch is checked before any of it is written.** One unsafe
|
|
748
|
+
touchpoint fails the import with nothing written, rather than leaving you
|
|
749
|
+
half a map.
|
|
750
|
+
- **Re-running is safe.** If a write failed partway, run the same command
|
|
751
|
+
again: a proposal already on disk that is identical to the one being imported
|
|
752
|
+
is left exactly as it is, keeping its original timestamp, and only the
|
|
753
|
+
missing ones are written. A proposal that DIFFERS is a conflict and the whole
|
|
754
|
+
import refuses — it may be a review you have in progress, and overwriting
|
|
755
|
+
that silently is the one outcome nobody recovers from.
|
|
756
|
+
- **Absence is never deletion.** If the agent cannot find a Flow, it goes in a
|
|
757
|
+
"did not find" list for you to look at. That list is advisory: it causes no
|
|
758
|
+
write of any kind, and it cannot fail the run. The code may simply have
|
|
759
|
+
moved, or the agent may have missed it — either way, that is your call.
|
|
760
|
+
|
|
761
|
+
Nothing is archived. A run log is not evidence — no gate, approval, signature or
|
|
762
|
+
patch-id ever read one — and its only real effect was an untracked file sitting
|
|
763
|
+
in front of your next \`git status\`. Rediscovery's output is the proposals.
|
|
764
|
+
Archives written by earlier versions are left exactly where they are; nothing
|
|
765
|
+
deletes them.
|
|
766
|
+
|
|
767
|
+
## Proposing from inside a change
|
|
768
|
+
|
|
769
|
+
If you notice, while BUILDING, that a Flow's truth no longer matches what the
|
|
770
|
+
code will do, that proposal belongs on the change's own branch rather than on
|
|
771
|
+
main:
|
|
772
|
+
|
|
773
|
+
prismatica propose --import ~/answer.json
|
|
774
|
+
|
|
775
|
+
Same document, same checks, different destination — it writes into the lane, so
|
|
776
|
+
the proposal rides the same pull request as the code that motivated it. Which
|
|
777
|
+
command you run decides where the records land; the document never does.
|
|
778
|
+
|
|
779
|
+
Then review what came back, and see the next scenario for approving it.`,
|
|
780
|
+
},
|
|
781
|
+
{
|
|
782
|
+
id: 'approvebatch',
|
|
783
|
+
title: 'Scenario — review and approve a batch safely',
|
|
784
|
+
body: `Rediscovery can return a dozen proposals at once. Approving them one command at
|
|
785
|
+
a time invites you to stop reading around item four, so there is a batch form —
|
|
786
|
+
and it is deliberately **not** a way to skip reading.
|
|
787
|
+
|
|
788
|
+
prismatica flow list
|
|
789
|
+
# read them first — this is the point
|
|
790
|
+
|
|
791
|
+
prismatica flow approve --all --by ehsan
|
|
792
|
+
|
|
793
|
+
\`--all\` means **one reviewed confirmation, not blind approval**. Before it
|
|
794
|
+
asks anything, it prints every pending item and marks each one NEW or UPDATE —
|
|
795
|
+
decided from what is actually on disk, not from the proposal's own label — and
|
|
796
|
+
it prevalidates the entire batch. If any single item is inconsistent, nothing is
|
|
797
|
+
written and you are told which.
|
|
798
|
+
|
|
799
|
+
Each item is printed **in full**: the complete truth of a new flow, and for an
|
|
800
|
+
update the complete diff against the flow you already approved, field by field
|
|
801
|
+
and step by step. A one-line summary would make your signature consent to
|
|
802
|
+
something you never read. Only then does it ask once:
|
|
803
|
+
|
|
804
|
+
Approve all 7?
|
|
805
|
+
|
|
806
|
+
There is no \`--yes\`, and \`--all\` refuses to run without a terminal. Owner
|
|
807
|
+
approval is the thing this system exists to make real; a flag that skipped the
|
|
808
|
+
human would hollow out the record it produces.
|
|
809
|
+
|
|
810
|
+
Rules work the same way, with one difference that matters:
|
|
811
|
+
|
|
812
|
+
prismatica rules approve --all --by ehsan
|
|
813
|
+
|
|
814
|
+
All rules live in one signed file with one approval hash, so a batch of ten
|
|
815
|
+
produces **one** final signed file — not ten chained signatures over
|
|
816
|
+
intermediate states you never actually approved.
|
|
817
|
+
|
|
818
|
+
If a filesystem error interrupts a batch partway, you are told exactly which
|
|
819
|
+
items completed and which remain, and re-running is safe. Canonical records are
|
|
820
|
+
always written before the proposal is removed, so nothing is lost in between —
|
|
821
|
+
and if the removal is what failed, the next run recognises that canonical truth
|
|
822
|
+
already matches the leftover draft. It lists that item as **already applied**,
|
|
823
|
+
clears the leftover, and signs nothing. Nothing is ever deleted just because it
|
|
824
|
+
was absent from the batch.
|
|
825
|
+
|
|
826
|
+
One thing a batch will refuse: if a pending proposal is rewritten between the
|
|
827
|
+
preview you read and your confirmation, the whole batch stops and nothing is
|
|
828
|
+
written. Your approval is consent to sign the exact records you were shown, so
|
|
829
|
+
a record that changed after you read it is not one you approved.`,
|
|
830
|
+
},
|
|
831
|
+
{
|
|
832
|
+
id: 'handoff',
|
|
833
|
+
title: 'The hand-off — how Prismatica talks to your agent',
|
|
834
|
+
body: `Prismatica runs no agent for planning or mapping. It exports a document, the
|
|
835
|
+
agent you are already using reads it, and you import what it wrote back. That
|
|
836
|
+
is the whole seam, and it has exactly two commands:
|
|
837
|
+
|
|
838
|
+
prismatica context start # → a plan
|
|
839
|
+
prismatica context discover # → Flow/Rule proposals
|
|
840
|
+
|
|
841
|
+
**You do not normally run either.** They are MACHINE-FACING: in the ordinary
|
|
842
|
+
journey the Prismatica Start and Understand skills run them mid-conversation,
|
|
843
|
+
read the file, and hand you back the one import command that is yours. What you
|
|
844
|
+
see is:
|
|
845
|
+
|
|
846
|
+
1. Open your coding agent and use Prismatica Start (or Understand).
|
|
847
|
+
2. Describe what you need and settle it in conversation.
|
|
848
|
+
3. Run the one \`--import\` command it gives you, and confirm.
|
|
849
|
+
|
|
850
|
+
They stay published for two real cases: an agent with no Prismatica plugin,
|
|
851
|
+
which you hand the printed file to by hand; and wanting to see exactly what a
|
|
852
|
+
skill was given. Both work — the seam is the same either way, and the import
|
|
853
|
+
validates identically.
|
|
854
|
+
|
|
855
|
+
Neither takes an argument, and neither takes a destination. What you want is
|
|
856
|
+
settled in the conversation you are already having, and comes back inside the
|
|
857
|
+
answer; the file always lands in a private temporary directory created by your
|
|
858
|
+
operating system — never in your repository, and never at a path a caller
|
|
859
|
+
chooses. A hand-off is scaffolding, not a record: it is read once and is
|
|
860
|
+
meaningless the moment the tree moves. Putting it under \`.prismatica/\` would
|
|
861
|
+
leave untracked scaffolding in front of every \`git status\` the proof path
|
|
862
|
+
reads, and \`check\` refuses an uncommitted file it does not recognise — so a
|
|
863
|
+
repo-local hand-off would block the very change it was written to plan.
|
|
864
|
+
|
|
865
|
+
## What is in the file
|
|
866
|
+
|
|
867
|
+
- \`format\` — the protocol this hand-off speaks, as one literal. There are
|
|
868
|
+
three: \`prismatica/start@1\`, \`prismatica/discover@1\` and
|
|
869
|
+
\`prismatica/propose@1\`. The answer carries it back, and each import command
|
|
870
|
+
accepts only its own. A document from a future version, a discovery answer
|
|
871
|
+
handed to \`start\`, or a lane proposal pasted into \`discover\` all fail the
|
|
872
|
+
same strict parse that refuses a misspelled field.
|
|
873
|
+
- \`answerFormats\` — which of those literals an answer to THIS file may carry.
|
|
874
|
+
One for \`start\`; two for \`discover\`, because the same reading of the app is
|
|
875
|
+
imported by \`discover --import\` (→ main) or \`propose --import\` (→ the lane
|
|
876
|
+
you are building in), and the document has to say which it was written for.
|
|
877
|
+
- \`snapshot\` — the read-only picture: the exact commit, every Flow with its
|
|
878
|
+
truth hash and touchpoints, every Rule, everything pending, every change in
|
|
879
|
+
flight, and which proof tools this repo actually has.
|
|
880
|
+
- \`instructions\` — plain language: what to read, what to decide, what to
|
|
881
|
+
return. Identical for every agent. There is no per-provider dialect.
|
|
882
|
+
- \`answerSchema\` — the JSON Schema for the answer, **derived from the same
|
|
883
|
+
strict definition that validates it on the way back in**. What Prismatica asks
|
|
884
|
+
for and what it accepts cannot drift apart, because they are one thing.
|
|
885
|
+
- \`importCommands\` — the exact commands you run afterwards, so the agent can
|
|
886
|
+
hand them to you rather than reconstruct them. You run them in your own
|
|
887
|
+
terminal, not inside the agent's session.
|
|
888
|
+
|
|
889
|
+
## What importing checks
|
|
890
|
+
|
|
891
|
+
Everything, and against your repository rather than against the document. Which
|
|
892
|
+
Flows exist, which ids are taken, the tier rules, the default tier — all of it
|
|
893
|
+
is read from a reading taken fresh at import time.
|
|
894
|
+
|
|
895
|
+
The answer echoes the whole snapshot it was written against, and that echo is a
|
|
896
|
+
**staleness detector and nothing else**. Prismatica recomputes its id from its
|
|
897
|
+
own contents, so an echo that was never exported is refused outright; what a
|
|
898
|
+
genuine one then produces is a list of what moved since — shown to you, not
|
|
899
|
+
used to decide anything. The document supplies no facts about your repo.
|
|
900
|
+
|
|
901
|
+
Prose, a missing field, an extra field, an absolute path, a \`..\`, a secret
|
|
902
|
+
glob, a Flow id that does not exist, an acceptance check with no test behind it,
|
|
903
|
+
a wrong \`format\`, a fabricated snapshot, and (for Flow/Rule proposals) an
|
|
904
|
+
answer about a different commit are all refused, with nothing written.
|
|
905
|
+
|
|
906
|
+
## Why an agent may run these itself
|
|
907
|
+
|
|
908
|
+
\`context start\` and \`context discover\` are on no owner-only list — which is
|
|
909
|
+
exactly what lets a skill run them for you, mid-conversation, without asking.
|
|
910
|
+
They write
|
|
911
|
+
nothing into the repository, reach nowhere, and hand back only what
|
|
912
|
+
\`flow list\` and \`git status\` already show. \`discover --import\` and
|
|
913
|
+
\`propose --import\` are agent-allowed too: writing PROPOSALS is explicitly the
|
|
914
|
+
agent's half of the rule that reserves canonical Flows and Rules to you.
|
|
915
|
+
|
|
916
|
+
\`start\` is not, and never will be. It invents a contract's scope, files a real
|
|
917
|
+
issue on GitHub, and asks a question only you can answer.
|
|
918
|
+
|
|
919
|
+
## Choosing the model, and how hard it thinks
|
|
920
|
+
|
|
921
|
+
\`open\` and \`review\` still take the same two options, because they still start
|
|
922
|
+
a real session:
|
|
923
|
+
|
|
924
|
+
prismatica open claude <id> --effort high
|
|
925
|
+
prismatica review <id> --agent claude --effort max
|
|
926
|
+
|
|
927
|
+
Prismatica hard-codes no model names. When either option is present, before
|
|
928
|
+
\`open\` or \`review --agent\` writes the lane it runs the installed provider once
|
|
929
|
+
in an empty OS temporary directory and asks it to print its **own usage** — and
|
|
930
|
+
requires two things of it. The usage must document the exact flags this
|
|
931
|
+
selection will travel through: a flag where the provider has one, and for
|
|
932
|
+
Codex's reasoning effort, its strict configuration form. And it must **name the
|
|
933
|
+
value you chose** among the values it lists for that dial.
|
|
934
|
+
|
|
935
|
+
A value the provider's own usage lists nowhere is **refused**, before the
|
|
936
|
+
routing change or the draft review. It is not quietly accepted, not swapped for
|
|
937
|
+
a default, and not passed through and hoped for: a check that cannot be made is
|
|
938
|
+
reported as one that was not made.
|
|
939
|
+
|
|
940
|
+
Today that means a model name is refused for both providers — neither
|
|
941
|
+
enumerates its models, so \`prismatica open claude <id> --model <model>\` stops
|
|
942
|
+
there and tells you why — and \`--effort\` is refused for Codex, whose reasoning
|
|
943
|
+
effort travels as a configuration key with no value list. Claude Code
|
|
944
|
+
enumerates its effort levels in its usage, so that is the one selection this
|
|
945
|
+
probe can confirm. Run a specific model in the session **you** start yourself,
|
|
946
|
+
where the provider answers for the name directly.
|
|
947
|
+
|
|
948
|
+
That probe asks the provider to describe itself and nothing more. **Prismatica
|
|
949
|
+
never sends a prompt and never calls a model** — not to check a launch, not
|
|
950
|
+
anywhere — and it holds no model catalogue. Those are the only two ways a model
|
|
951
|
+
NAME could be checked here, and both are refused on purpose: a catalogue is
|
|
952
|
+
stale the week it is written, and a prompt is a model call. Nor can any help
|
|
953
|
+
output tell you whether you are signed in. An agent Prismatica has no adapter
|
|
954
|
+
for is refused these options outright rather than receiving guessed flags.
|
|
955
|
+
|
|
956
|
+
\`context\`, \`start\`, \`discover\` and \`propose\` take none of them, and there is
|
|
957
|
+
no time budget to set either. They start no session — the model, the effort and
|
|
958
|
+
how long it may take belong to the session **you** are running.`,
|
|
959
|
+
},
|
|
960
|
+
{
|
|
961
|
+
id: 'roles',
|
|
962
|
+
title: 'Scenario — who does what: Planner, Builder, Fresh Reviewer, Controller',
|
|
963
|
+
body: `Four different jobs, deliberately kept apart. All four can be AI agents; none
|
|
964
|
+
of them decides anything.
|
|
965
|
+
|
|
966
|
+
**Planner** — turns your plain-language need into a scoped, checkable proposal.
|
|
967
|
+
It is a ROLE, not a process Prismatica starts: you hand the exported context to
|
|
968
|
+
the agent you are already using. Whatever it writes is a document you confirm or
|
|
969
|
+
throw away, and it cannot edit a file, create an issue, start a branch, approve
|
|
970
|
+
truth, or lower a risk tier — not because it is sandboxed, but because nothing
|
|
971
|
+
it returns is acted on until you import it and say yes.
|
|
972
|
+
|
|
973
|
+
In your coding agent: Prismatica Start, then run what it hands you:
|
|
974
|
+
|
|
975
|
+
prismatica start --import ~/plan.json
|
|
976
|
+
|
|
977
|
+
**Builder** — implements the approved contract inside the lane, and only inside
|
|
978
|
+
it. The scope hook blocks writes outside the contract's globs, and the diff
|
|
979
|
+
check is the backstop that catches every agent equally.
|
|
980
|
+
|
|
981
|
+
prismatica open codex 20260729-fix-offline-session-loss-9c3e
|
|
982
|
+
prismatica check
|
|
983
|
+
|
|
984
|
+
Which agent builds is YOURS to choose, and to change — and nothing infers it
|
|
985
|
+
from whoever planned the change. Settle it during planning and it is stated in
|
|
986
|
+
the plan's \`builder\` field, shown in the preview before you confirm; otherwise
|
|
987
|
+
\`prismatica frame --builder <agent>\`, or just open that agent. \`next\`, \`pack\`
|
|
988
|
+
and \`start\` all name it from then on. Swap it mid-change by opening the other
|
|
989
|
+
agent; nothing needs unwinding, because this is routing, not a permission.
|
|
990
|
+
|
|
991
|
+
**Fresh Reviewer** — reads the finished diff against the sealed brief, with no
|
|
992
|
+
memory of having written it. A Fresh Reviewer is a NEW SESSION that did not
|
|
993
|
+
build the current diff; **the same provider is fine**. What must not be reused
|
|
994
|
+
is the session that wrote the code, because it already believes the diff is
|
|
995
|
+
right. Both Claude and Codex map this role to a real reviewer skill, and
|
|
996
|
+
neither is named in the BUILDER's brief — recommending the reviewer role to the
|
|
997
|
+
agent about to write the code would be asking it to review itself. Who reviews
|
|
998
|
+
is yours to choose and to swap; the gate never checks it.
|
|
999
|
+
|
|
1000
|
+
prismatica review --agent claude
|
|
1001
|
+
# drafts the review, records "claude" as the reviewer, and starts a
|
|
1002
|
+
# fresh session in the lane that cannot change the repository
|
|
1003
|
+
# (--permission-mode plan for Claude, --sandbox read-only for Codex)
|
|
1004
|
+
|
|
1005
|
+
prismatica review --agent codex
|
|
1006
|
+
prismatica review --copy --reviewer "a chat agent"
|
|
1007
|
+
# copies the same short lane pointer, for a reviewer with no CLI
|
|
1008
|
+
|
|
1009
|
+
\`--agent\` accepts \`claude\` or \`codex\` and nothing else: the read-only flag is
|
|
1010
|
+
that CLI's own, and there is no safe generic guess for a provider Prismatica
|
|
1011
|
+
has never been told about. It refuses to be combined with \`--copy\`, or with
|
|
1012
|
+
\`--reviewer\` — the agent already IS the reviewer label, and recording one name
|
|
1013
|
+
while a different session did the work is exactly the confusion the record
|
|
1014
|
+
exists to prevent.
|
|
1015
|
+
|
|
1016
|
+
The reviewer is handed ONE short pointer, not the brief: read the review record
|
|
1017
|
+
first, then the contract, the pack and the exact \`git diff <baseline>..HEAD\`;
|
|
1018
|
+
change nothing; distrust the builder's summary, an earlier review and a green
|
|
1019
|
+
test run alike; and end with exactly \`SAFE TO SEAL\` or \`DO NOT SEAL\`.
|
|
1020
|
+
|
|
1021
|
+
Nothing is parsed from what the reviewer says. Prismatica never reads that
|
|
1022
|
+
session's output, never infers a verdict from it and never seals on its
|
|
1023
|
+
behalf — **you** record the outcome, and there are exactly two:
|
|
1024
|
+
|
|
1025
|
+
prismatica seal <id> # they said SAFE TO SEAL
|
|
1026
|
+
prismatica seal <id> --request-changes # they said DO NOT SEAL
|
|
1027
|
+
|
|
1028
|
+
If the launch fails, the drafted review still stands and still binds this exact
|
|
1029
|
+
diff — start the session by hand, or fall back to \`review <id> --copy\`.
|
|
1030
|
+
|
|
1031
|
+
Add \`--no-spawn\` to either \`open <agent>\` or \`review --agent <agent>\` to get
|
|
1032
|
+
that same manual command printed instead of run — see "next" for why it starts
|
|
1033
|
+
with \`cd <lane> &&\` and carries \`PRISMATICA_EXECUTOR=agent\`: unlike ordinary
|
|
1034
|
+
\`prismatica\` commands, the agent process it names inherits YOUR shell's
|
|
1035
|
+
current directory, not a resolved one.
|
|
1036
|
+
|
|
1037
|
+
**Controller** — runs the loop between the other two, and stops where your
|
|
1038
|
+
authority begins. It builds nothing and judges nothing: it starts a Builder,
|
|
1039
|
+
runs \`check\`, starts a Fresh Reviewer, and hands you back a card. This job is
|
|
1040
|
+
called **Get Change Ready**. The controller remains an agent role, not a process
|
|
1041
|
+
Prismatica starts. The narrow \`prismatica ready\` command only appends or reads
|
|
1042
|
+
strict run bookkeeping; it launches no agent, calls no LLM, parses no chat,
|
|
1043
|
+
infers no verdict and creates no assurance evidence.
|
|
1044
|
+
|
|
1045
|
+
In your coding agent, on a change that already has a lane:
|
|
1046
|
+
ask it to get the change ready — or, where the agent ships Prismatica's
|
|
1047
|
+
packaged capability, invoke that (in Claude Code: /prismatica:ready)
|
|
1048
|
+
|
|
1049
|
+
Which agent controls is yours to choose, exactly as Builder and Fresh Reviewer
|
|
1050
|
+
are. Prismatica packages the discipline for the agents it has a plugin system to
|
|
1051
|
+
package for — today that is Claude Code — and any other agent runs the same loop
|
|
1052
|
+
by being given the same rules. Nothing in the gate knows or asks which one it
|
|
1053
|
+
was, here or anywhere else.
|
|
1054
|
+
|
|
1055
|
+
The run starts with one CLI-generated UUID and boundary in the append-only
|
|
1056
|
+
\`.prismatica/ready.jsonl\`: boundary HEAD, ledger length and prior
|
|
1057
|
+
Check count, plus the resolved builder and reviewer provider, model and effort.
|
|
1058
|
+
|
|
1059
|
+
That is a SEPARATE file from \`.prismatica/ledger.jsonl\`, which keeps Check and
|
|
1060
|
+
gate rows and nothing else. A ready event appended into the ledger after a Check
|
|
1061
|
+
made the ledger unreadable at exactly the position Prismatica fails closed on —
|
|
1062
|
+
so a change would prove itself and then, by its own bookkeeping, become
|
|
1063
|
+
unprovable. Existing repositories are partitioned in place the first time a Get
|
|
1064
|
+
Change Ready command writes: every recorded event moves across in its original
|
|
1065
|
+
order, byte for byte, and nothing is discarded. Commit the move with your next
|
|
1066
|
+
records.
|
|
1067
|
+
Each later ready event names that run and records one exact Check or review
|
|
1068
|
+
attempt, its evidence, checked commit, verdict, findings, stop state and next
|
|
1069
|
+
owner action. A restarted controller begins with \`prismatica ready status\`,
|
|
1070
|
+
reuses the same plan and counters, and needs no transcript. Checks before the
|
|
1071
|
+
boundary remain pre-run history and spend none of the run's three-Check budget;
|
|
1072
|
+
restarting cannot reset that budget or the three-review budget.
|
|
1073
|
+
|
|
1074
|
+
An attempt is spent by the WORK, not by the bookkeeping. A run event is written
|
|
1075
|
+
after its attempt — a record is never written before the thing it records — so a
|
|
1076
|
+
controller can die in between, and counting only its own events would hand the
|
|
1077
|
+
next one a fourth try. The counters are therefore rebuilt from what each attempt
|
|
1078
|
+
itself left behind: the \`check_run\` ledger row \`check\` wrote, and the review
|
|
1079
|
+
record \`review\` drafted, including the ones this run committed. An attempt
|
|
1080
|
+
nobody recorded still spends its place, and \`ready status\` says so plainly.
|
|
1081
|
+
|
|
1082
|
+
**When a run stops, starting another one is yours.** A run that ends at
|
|
1083
|
+
\`check_budget_exhausted\`, \`review_budget_exhausted\`, \`blocked\` or
|
|
1084
|
+
\`awaiting_owner\` is finished: the controller may append nothing more to it, and
|
|
1085
|
+
re-importing its start simply reconstructs it. Deciding that three attempts were
|
|
1086
|
+
not enough is a decision, so it is one you make:
|
|
1087
|
+
|
|
1088
|
+
prismatica ready record <id> --import <start.json> --new-run
|
|
1089
|
+
|
|
1090
|
+
That appends a second boundary bound to today's HEAD and ledger position, with a
|
|
1091
|
+
new run id and its own three Check and three review attempts. It is refused
|
|
1092
|
+
while the run is still running, refused when there is no run at all, and refused
|
|
1093
|
+
for an agent — the controller cannot hand itself a fourth attempt at the diff it
|
|
1094
|
+
just failed three times. Nothing is rewritten: every earlier run and every event
|
|
1095
|
+
it recorded stays exactly where it was, \`ready status\` reconstructs the LATEST
|
|
1096
|
+
run and lists the earlier ones as history, and the previous run's Checks become
|
|
1097
|
+
ordinary pre-run history that spends none of the new budget.
|
|
1098
|
+
|
|
1099
|
+
The new run may also carry a corrected plan, which is the one repair for a run
|
|
1100
|
+
whose recorded provider, model or effort the launch will refuse — a restart must
|
|
1101
|
+
reuse what was recorded, so such a run can otherwise only be stopped. Inside a
|
|
1102
|
+
run nothing about the plan may change, and that is unchanged.
|
|
1103
|
+
|
|
1104
|
+
A second boundary is only ever read as legitimate when it names the run it
|
|
1105
|
+
replaced and that run had genuinely stopped. A line appended any other way is
|
|
1106
|
+
still reported as an ambiguous run and still fails closed, so an extra boundary
|
|
1107
|
+
cannot quietly reset a budget.
|
|
1108
|
+
|
|
1109
|
+
Every real attempt is still a NEW session handed only the contract, pack, Git
|
|
1110
|
+
state and relevant failure or findings. Multiline findings enter through a
|
|
1111
|
+
strict JSON import file and round-trip as content; they never enter argv, shell
|
|
1112
|
+
interpolation, a heredoc or a commit message. Older sealed reviews whose records
|
|
1113
|
+
never contained findings are reported honestly as \`findings not recorded\` and
|
|
1114
|
+
are never backfilled from memory.
|
|
1115
|
+
|
|
1116
|
+
Installed provider help is authoritative. When model or effort is explicit,
|
|
1117
|
+
before real \`open\` or \`review\` changes the lane Prismatica runs that provider
|
|
1118
|
+
once in an empty OS temporary directory to print its own usage, and requires
|
|
1119
|
+
that usage to document the flags the selection needs and to name the selected
|
|
1120
|
+
value among the accepted values it enumerates. Provider
|
|
1121
|
+
defaults run no probe at all. A provider that will not run, that does not
|
|
1122
|
+
document those flags, or that does not name that value, therefore stops the
|
|
1123
|
+
command before a builder routing change or a draft review, never after it, and
|
|
1124
|
+
never silently uses a default.
|
|
1125
|
+
|
|
1126
|
+
The probe is not a conversation: no prompt is sent and no model runs, here or
|
|
1127
|
+
anywhere else in Prismatica. Neither provider enumerates its model names in
|
|
1128
|
+
usage and Prismatica keeps no catalogue, so explicit model names are refused
|
|
1129
|
+
for both providers; Codex effort is refused too, while Claude Code effort is
|
|
1130
|
+
the one explicit selection the probe can confirm. Whether you are signed in
|
|
1131
|
+
remains the provider's answer when the real session starts.
|
|
1132
|
+
|
|
1133
|
+
The controller never invents provider flags. Prismatica prints the exact, correctly
|
|
1134
|
+
quoted launch line for each role — \`prismatica open <provider> <id> --no-spawn\`
|
|
1135
|
+
for a builder, \`prismatica review <id> --agent <provider> --no-spawn\` for a reviewer
|
|
1136
|
+
— and refuses a dial that provider has no transport for rather than silently
|
|
1137
|
+
running its default. Both write something: \`open\` records the builder and
|
|
1138
|
+
advances the stage, so its contract change rides the builder's own checkpoint
|
|
1139
|
+
commit, and \`review\` writes the draft after any requested provider validation.
|
|
1140
|
+
|
|
1141
|
+
After \`DO NOT SEAL\`, the controller first appends the validated ready event
|
|
1142
|
+
with the exact verdict and findings. It then records the blocking seal, inspects
|
|
1143
|
+
dirty paths, stages only the expected review, ledger, Check evidence and
|
|
1144
|
+
forward-stage contract outputs, checks the staged names and commits with an
|
|
1145
|
+
ordinary content-specific subject before rework. It never uses \`git add -A\`, a
|
|
1146
|
+
findings commit message or a fixed heredoc. A later commit containing only the
|
|
1147
|
+
review, ledger or this change's Check evidence is lifecycle output and cannot
|
|
1148
|
+
unlock another reviewer. Code or a substantive Flow or Rule proposal can.
|
|
1149
|
+
|
|
1150
|
+
Exactly one owner-only command is available to it, because that command never
|
|
1151
|
+
advances a change:
|
|
1152
|
+
|
|
1153
|
+
PRISMATICA_EXECUTOR=agent prismatica seal <id> --request-changes
|
|
1154
|
+
|
|
1155
|
+
\`ready record --new-run\` is the mirror of that exception: an ordinary
|
|
1156
|
+
\`ready record\` is the controller's own bookkeeping and stays its to run, while
|
|
1157
|
+
the one form that GRANTS something — a second run, with fresh budgets — is
|
|
1158
|
+
refused for an agent by the same guard, and names that form rather than the
|
|
1159
|
+
command when it refuses.
|
|
1160
|
+
|
|
1161
|
+
Get Change Ready stops before review at \`light\`. Above \`light\`, the rejection
|
|
1162
|
+
blocks the gate and \`accept\`, while \`next\` returns it to a builder. The
|
|
1163
|
+
approving \`prismatica seal\` is the opposite — it is the record the gate accepts
|
|
1164
|
+
— so it stays yours, along with \`accept\`, \`ship\`, \`merge\`, \`amend\` and the
|
|
1165
|
+
rest. Every Prismatica command the controller runs carries that one-command
|
|
1166
|
+
executor marker, so an accidental owner-only command fails closed even when the
|
|
1167
|
+
plugin session was opened manually.
|
|
1168
|
+
|
|
1169
|
+
Ready events are bookkeeping, not proof — nothing in the assurance path even
|
|
1170
|
+
opens \`ready.jsonl\`. Existing Check, gate, stats and
|
|
1171
|
+
passport readers ignore them and continue to use only real \`check_run\` or
|
|
1172
|
+
\`gate_run\` rows. The scope backstop, Check, merge gate, patch-id seal and your
|
|
1173
|
+
signature remain the assurance path with or without a controller.
|
|
1174
|
+
|
|
1175
|
+
Why keep them apart: the Planner's reading of your app is **advisory** and is
|
|
1176
|
+
labelled that way everywhere it appears. Deterministic code can check that a
|
|
1177
|
+
plan is complete, in scope, correctly bound to a snapshot and correctly tiered.
|
|
1178
|
+
It cannot check whether the plan is a good idea, and it does not pretend to.
|
|
1179
|
+
That judgement is yours, which is why \`start\` shows you the whole plan and the
|
|
1180
|
+
exact issue text, asks once with No as the default, and writes nothing at all
|
|
1181
|
+
until you say yes.
|
|
1182
|
+
|
|
1183
|
+
The builder and reviewer packs both carry the complete approved plan and the
|
|
1184
|
+
complete Delta, verbatim — not a summary of them — so no one downstream is
|
|
1185
|
+
working from a paraphrase.`,
|
|
1186
|
+
},
|
|
1187
|
+
{
|
|
1188
|
+
id: 'manualframe',
|
|
1189
|
+
title: 'Scenario — frame a change by hand, with full control',
|
|
1190
|
+
body: `\`start\` is the short path. \`frame\` is the long one, for when you already know
|
|
1191
|
+
exactly what you want and would rather not have anything proposed to you.
|
|
1192
|
+
|
|
1193
|
+
prismatica frame "Reject empty session titles" \\
|
|
1194
|
+
--issue https://github.com/acme/practice-app/issues/214 \\
|
|
1195
|
+
--allow "src/sessions/**" \\
|
|
1196
|
+
--allow "src/validation/title.ts" \\
|
|
1197
|
+
--forbid "src/billing/**" \\
|
|
1198
|
+
--non-goal "Do not change the offline sync queue" \\
|
|
1199
|
+
--non-goal "Do not touch the session id format" \\
|
|
1200
|
+
--check "an empty title is rejected with an inline message | src/sessions/title.test.ts" \\
|
|
1201
|
+
--check "a whitespace-only title is rejected too | src/sessions/title.test.ts" \\
|
|
1202
|
+
--check "existing sessions with empty titles still load | src/sessions/legacy.test.ts" \\
|
|
1203
|
+
--docs docs/SESSIONS.md \\
|
|
1204
|
+
--data
|
|
1205
|
+
|
|
1206
|
+
Every flag, in plain terms:
|
|
1207
|
+
|
|
1208
|
+
- \`--issue\` is required. No contract without an issue; no merge without a
|
|
1209
|
+
contract.
|
|
1210
|
+
- \`--allow\` is the scope, repeatable. The diff must stay inside it.
|
|
1211
|
+
- \`--forbid\` is the explicit never-touch list, repeatable.
|
|
1212
|
+
- \`--non-goal\` records what this change deliberately does not do, repeatable.
|
|
1213
|
+
It travels into the builder brief.
|
|
1214
|
+
- \`--check\` is \`description | test\`, repeatable. Each one is traced to a real
|
|
1215
|
+
passing test at check and gate time, so \`manual:OWNER\` is the honest form
|
|
1216
|
+
for anything a machine cannot verify.
|
|
1217
|
+
- \`--docs\` names a file that must change in this diff, repeatable.
|
|
1218
|
+
- \`--auth\`, \`--payments\`, \`--data\`, \`--copy-only\` set the risk tier. Here
|
|
1219
|
+
\`--data\` forces **heavy**: full checks, a sealed review, a signed decision,
|
|
1220
|
+
and a tested rollback route.
|
|
1221
|
+
|
|
1222
|
+
The path rules in \`config.json\` are applied on top and can only raise the
|
|
1223
|
+
tier, never lower it — so \`--copy-only\` over \`src/auth/**\` still lands on
|
|
1224
|
+
heavy.
|
|
1225
|
+
|
|
1226
|
+
Then:
|
|
1227
|
+
|
|
1228
|
+
prismatica pack 20260729-reject-empty-session-titles-4d81
|
|
1229
|
+
prismatica open claude 20260729-reject-empty-session-titles-4d81`,
|
|
1230
|
+
},
|
|
1231
|
+
{
|
|
1232
|
+
id: 'terms',
|
|
1233
|
+
title: 'Terms — every word in one plain sentence',
|
|
1234
|
+
body: `repo your project's folder, tracked by git, with its full history.
|
|
1235
|
+
branch a parallel line of work inside the repo.
|
|
1236
|
+
main the branch that is the real product; everything else merges into it.
|
|
1237
|
+
worktree a second folder checked out from the same repo — Prismatica calls
|
|
1238
|
+
a change's worktree its "lane".
|
|
1239
|
+
commit a saved snapshot of the work, with a message.
|
|
1240
|
+
PR pull request — a proposal to merge one branch into main.
|
|
1241
|
+
gate the check that runs on every PR; if it fails, GitHub blocks merging.
|
|
1242
|
+
merge taking a branch's commits into main.
|
|
1243
|
+
deploy putting the merged code in front of real users.
|
|
1244
|
+
diff the exact lines added and removed by a change.
|
|
1245
|
+
hash a fingerprint of content — change anything and it no longer matches.
|
|
1246
|
+
contract the agreed record of one change: goal, allowed files, checks, tier.
|
|
1247
|
+
seal the proof that the review looked at this exact diff (patch-id maths).
|
|
1248
|
+
passport the record written after a change ships, verifies live, and has a
|
|
1249
|
+
tested rollback route.
|
|
1250
|
+
|
|
1251
|
+
Two different levels of "the gate is real", never confused in anything
|
|
1252
|
+
Prismatica prints:
|
|
1253
|
+
|
|
1254
|
+
Checked — owner-guarded \`prismatica merge\` verified the PR itself
|
|
1255
|
+
(state, head, a passing gate check) before
|
|
1256
|
+
asking GitHub to merge — the guard is this
|
|
1257
|
+
command, run by you or your CI. A merge done
|
|
1258
|
+
in the GitHub browser UI, or a direct push to
|
|
1259
|
+
main, goes around it.
|
|
1260
|
+
server-enforced GitHub's own branch protection refuses the
|
|
1261
|
+
merge outright, even in its own UI, because
|
|
1262
|
+
"prismatica-gate" is a required status check.
|
|
1263
|
+
Not available on every plan (notably GitHub
|
|
1264
|
+
Free private repos) — never claimed unless
|
|
1265
|
+
\`prismatica doctor\` actually confirms it.
|
|
1266
|
+
|
|
1267
|
+
And two answers that are not levels of assurance at all, because they are not
|
|
1268
|
+
findings about your repo:
|
|
1269
|
+
|
|
1270
|
+
unavailable required status checks are not offered on this
|
|
1271
|
+
repository's plan. No settings fix is printed,
|
|
1272
|
+
because there is none, and it is left out of
|
|
1273
|
+
the adoption score rather than counted against
|
|
1274
|
+
you.
|
|
1275
|
+
unknown the question could not be answered — gh missing
|
|
1276
|
+
or signed out, no GitHub remote, an ambiguous
|
|
1277
|
+
refusal, an outage, or a probe you skipped.
|
|
1278
|
+
Never reported as "unprotected", and also left
|
|
1279
|
+
out of the adoption score. If nothing at all
|
|
1280
|
+
could be measured, \`doctor\` says "insufficient
|
|
1281
|
+
information" rather than 0%.
|
|
1282
|
+
|
|
1283
|
+
"Unprotected" is only ever printed when GitHub says so twice: the protection
|
|
1284
|
+
endpoint finds no rule AND the branch itself reports it is not protected. That
|
|
1285
|
+
second read matters, because the first endpoint needs admin permission on the
|
|
1286
|
+
repo and answers a plain "not found" to several very different questions. So if
|
|
1287
|
+
you are signed in without admin rights, or the branch named in your config does
|
|
1288
|
+
not exist on the remote, you will see "unknown" — never "unprotected". Same if
|
|
1289
|
+
GitHub reports the branch as protected but will not say which checks it
|
|
1290
|
+
requires: that is a repo Prismatica cannot fully read, not a repo with nothing
|
|
1291
|
+
guarding it.`,
|
|
1292
|
+
},
|
|
1293
|
+
{
|
|
1294
|
+
id: 'adopt',
|
|
1295
|
+
title: 'Adopt — putting an existing app under Prismatica',
|
|
1296
|
+
body: `Prismatica governs changes from now on. Your old code needs no contracts,
|
|
1297
|
+
reviews, or passports — nothing is judged retroactively.
|
|
1298
|
+
|
|
1299
|
+
Get the command first. Prismatica is published on npm, and you name the exact
|
|
1300
|
+
version every time:
|
|
1301
|
+
|
|
1302
|
+
npm install -g prismatica@0.2.0
|
|
1303
|
+
# or run it without installing anything:
|
|
1304
|
+
# npx --yes prismatica@0.2.0 doctor
|
|
1305
|
+
|
|
1306
|
+
Always name the version. Bare \`prismatica\` resolves to whatever the registry
|
|
1307
|
+
serves that minute, and the gate is the one choke point — which reader runs it
|
|
1308
|
+
is a decision you make in a diff someone can review, never one a registry makes
|
|
1309
|
+
for you between two pushes. Upgrading is the same command with a different
|
|
1310
|
+
number; nothing here goes looking for a "latest" on your behalf.
|
|
1311
|
+
|
|
1312
|
+
\`npm link\` is NOT part of adopting an app. It is the self-host EXCEPTION for
|
|
1313
|
+
working on Prismatica's own source checkout — see "prismatica guide next".
|
|
1314
|
+
|
|
1315
|
+
cd your-app && prismatica init
|
|
1316
|
+
# detects what you already have (tests? Playwright? CI? docs?) and
|
|
1317
|
+
# enables only the checks that can actually run
|
|
1318
|
+
|
|
1319
|
+
Read the table it prints: Enforced means the gate blocks on it, Checked means
|
|
1320
|
+
it runs, Missing means it cannot run yet — each Missing row shows the exact
|
|
1321
|
+
fix. You do not have to fix everything today. Two rows are not about your repo
|
|
1322
|
+
at all: Unavailable means the capability cannot exist here (a plan that does
|
|
1323
|
+
not offer it), and Unknown means the probe could not establish an answer.
|
|
1324
|
+
Neither prints a fix, and neither is counted in the adoption score — a
|
|
1325
|
+
question nobody could answer is not a mark against you.
|
|
1326
|
+
|
|
1327
|
+
In your coding agent: Prismatica Understand
|
|
1328
|
+
# ask it to map this app. It READS the repo and DRAFTS flows —
|
|
1329
|
+
# structured, reviewable routes through the app — then hands you
|
|
1330
|
+
# "prismatica discover --import <proposal.json>". You review and approve
|
|
1331
|
+
# each one; Prismatica never writes them itself.
|
|
1332
|
+
# See "prismatica guide flows".
|
|
1333
|
+
|
|
1334
|
+
prismatica doctor
|
|
1335
|
+
# repo health, an adoption score over what could actually be measured,
|
|
1336
|
+
# and the single highest-value next fix
|
|
1337
|
+
|
|
1338
|
+
Only want the map, not the gate yet? Use \`prismatica init --map-only\` instead
|
|
1339
|
+
— Flows and Rules with no gate, no hooks, no signing key (see
|
|
1340
|
+
"prismatica guide flows").
|
|
1341
|
+
|
|
1342
|
+
Moving a map-only repo to full governance later works today as a manual
|
|
1343
|
+
procedure (a dedicated \`prismatica upgrade\` command is planned, but this
|
|
1344
|
+
gets you there now — do NOT just re-run \`prismatica init\` without
|
|
1345
|
+
\`--map-only\`; it leaves mode and the owner key half-migrated):
|
|
1346
|
+
|
|
1347
|
+
1. Get an owner signing key. If you've run governed \`prismatica init\` on
|
|
1348
|
+
any other repo on this machine, you already have one — it's one key per
|
|
1349
|
+
machine, at \`~/.config/prismatica/owner.key\` (or \`$PRISMATICA_HOME\`).
|
|
1350
|
+
If not, create one now by running \`prismatica init\` in any throwaway
|
|
1351
|
+
git folder; you only ever do this once.
|
|
1352
|
+
2. Read out its public half (safe, read-only):
|
|
1353
|
+
node -e "console.log(require('crypto').createPublicKey(require('fs').readFileSync(process.env.PRISMATICA_HOME ? process.env.PRISMATICA_HOME + '/owner.key' : require('os').homedir() + '/.config/prismatica/owner.key', 'utf8')).export({type:'spki',format:'pem'}).toString())"
|
|
1354
|
+
3. Edit \`.prismatica/config.json\` by hand: set \`"mode": "govern"\` and
|
|
1355
|
+
\`"owner": { "publicKey": "<paste the PEM from step 2>" }\`.
|
|
1356
|
+
4. Add \`.github/workflows/prismatica-gate.yml\` — copy it from any other
|
|
1357
|
+
governed Prismatica repo (the content only varies by main branch name).
|
|
1358
|
+
5. Re-sign every already-approved Flow and Rule. This is the one required
|
|
1359
|
+
step, not optional: governed mode requires a verifying signature, so an
|
|
1360
|
+
existing map-only approval (hash only, no signature) will show as
|
|
1361
|
+
"tampered" and fail the gate's truth-integrity check until re-signed.
|
|
1362
|
+
For each: copy the canonical file's \`truth:\` (or the rule text) into a
|
|
1363
|
+
new proposal at \`.prismatica/flows/proposals/<id>.md\` (or
|
|
1364
|
+
\`.prismatica/rules/proposals/<id>.md\`) with \`proposalType: update\` and
|
|
1365
|
+
the truth UNCHANGED, then run \`prismatica flow approve <id>\` (or
|
|
1366
|
+
\`rules approve <id>\`) — same hash, now signed.
|
|
1367
|
+
6. Run \`prismatica doctor\` — it tells you what's still missing (hooks,
|
|
1368
|
+
branch protection) and confirms nothing reads as tampered anymore.
|
|
1369
|
+
|
|
1370
|
+
Two one-time settings on GitHub make the gate real:
|
|
1371
|
+
1. push the repo to GitHub (prismatica ship does this per change), and
|
|
1372
|
+
2. Settings → Branches → protect "main" → require the "prismatica-gate" check.
|
|
1373
|
+
After that, nothing merges without passing the gate — not even by accident.
|
|
1374
|
+
|
|
1375
|
+
Which Prismatica does YOUR CI run? \`init\` writes an exact pin:
|
|
1376
|
+
|
|
1377
|
+
- name: prismatica gate
|
|
1378
|
+
run: npx --yes prismatica@0.2.0 gate
|
|
1379
|
+
|
|
1380
|
+
Your app needs no Prismatica dependency of its own — that line fetches one
|
|
1381
|
+
published version straight from the registry. The \`npm ci\` step above it
|
|
1382
|
+
installs YOUR checks (your typechecker, linter, test runner, build), and it is
|
|
1383
|
+
skipped entirely when the repository has no npm lock file at its root, so a
|
|
1384
|
+
Python or Go repo adopts exactly as cleanly as a Node one.
|
|
1385
|
+
|
|
1386
|
+
Adopted before 0.2.0? Your workflow says \`npx prismatica gate\` with no
|
|
1387
|
+
version, so CI runs whatever resolves that minute. \`prismatica doctor\` names
|
|
1388
|
+
it under "Runtime", beside the version you are running locally, so any skew
|
|
1389
|
+
between the two is visible instead of silent. The repair is one line in
|
|
1390
|
+
\`.github/workflows/prismatica-gate.yml\` — change:
|
|
1391
|
+
|
|
1392
|
+
run: npx prismatica gate
|
|
1393
|
+
|
|
1394
|
+
to:
|
|
1395
|
+
|
|
1396
|
+
run: npx --yes prismatica@0.2.0 gate
|
|
1397
|
+
|
|
1398
|
+
\`init\` will never do this for you: it preserves an existing workflow
|
|
1399
|
+
byte-for-byte by design, which is exactly why the pin is yours to move
|
|
1400
|
+
deliberately. Move it BEFORE, or in the same change as, the first time a newer
|
|
1401
|
+
Prismatica writes a record — a newer runtime reads every record an older one
|
|
1402
|
+
wrote, but the promise does not run backwards.`,
|
|
1403
|
+
},
|
|
1404
|
+
{
|
|
1405
|
+
id: 'flows',
|
|
1406
|
+
title: 'Flows — the map of what your app does',
|
|
1407
|
+
body: `A Flow is one complete, real route through your app: where it starts, the
|
|
1408
|
+
steps someone takes, what the app shows and changes along the way, and where
|
|
1409
|
+
it ends. Not a feature list, not a code walkthrough — an outcome someone
|
|
1410
|
+
actually gets, start to finish.
|
|
1411
|
+
|
|
1412
|
+
Every Flow splits into two parts, on purpose:
|
|
1413
|
+
|
|
1414
|
+
- Truth — the goal, the steps, the ending, the rules. This is what the app
|
|
1415
|
+
PROMISES. An agent may only propose a change to it; you approve it.
|
|
1416
|
+
- Mechanics — which files and routes it lives in. This also goes through
|
|
1417
|
+
approval now (the same proposal you review for truth) — a lane can never
|
|
1418
|
+
write the canonical flow file directly, only propose a change to it, so
|
|
1419
|
+
there is exactly one writer of "what's approved": you, via approve.
|
|
1420
|
+
|
|
1421
|
+
Fields, each in one plain word:
|
|
1422
|
+
|
|
1423
|
+
Goal what the user gets done, in a few words
|
|
1424
|
+
Starts when the moment this flow begins
|
|
1425
|
+
Needs first conditions that must already be true (optional)
|
|
1426
|
+
Steps who does what, what the app shows, what data changes
|
|
1427
|
+
Ends with what is true when it finishes well
|
|
1428
|
+
Variations other routes through it (optional — a big one deserves its
|
|
1429
|
+
own flow instead)
|
|
1430
|
+
Rules things that must stay true, no matter what (optional)
|
|
1431
|
+
Status Works now / Planned / Idea / Uncertain
|
|
1432
|
+
|
|
1433
|
+
See a flow, review what is waiting, and decide:
|
|
1434
|
+
|
|
1435
|
+
prismatica flow list # every flow, plus pending drafts
|
|
1436
|
+
prismatica flow show <id> # one flow as a readable story
|
|
1437
|
+
prismatica flow approve <id> # accept a draft or proposed update
|
|
1438
|
+
prismatica flow dismiss <id> # keep what you have; discard it
|
|
1439
|
+
prismatica flow verify <id> # you personally confirm it still works
|
|
1440
|
+
prismatica flow status <id> works # flip status directly — no ceremony
|
|
1441
|
+
|
|
1442
|
+
\`flow show\` is short on purpose: title, outcome, where it starts and ends,
|
|
1443
|
+
the steps in order, and one honest line about the evidence. Ask for more only
|
|
1444
|
+
when you want it — the flags compose, and are covered in "proof":
|
|
1445
|
+
|
|
1446
|
+
--details preconditions each step assumes
|
|
1447
|
+
--proof how every single step was verified
|
|
1448
|
+
--code the files, routes, and tests it lives in
|
|
1449
|
+
--json the same view as stable JSON, for scripts
|
|
1450
|
+
|
|
1451
|
+
A step with nothing visible to show reads "Background step" rather than
|
|
1452
|
+
pretending there is a screen. Variations appear under "Other paths" as
|
|
1453
|
+
alternatives through the WHOLE flow: the record cannot say which step a
|
|
1454
|
+
variation branches from, so nothing claims that it can.
|
|
1455
|
+
|
|
1456
|
+
Presentation is separate from truth. A Flow may optionally carry a short
|
|
1457
|
+
title, a journey name, and a position in that journey — used only for how it
|
|
1458
|
+
is displayed and grouped. It sits outside the truth block, so it is not part
|
|
1459
|
+
of the fingerprint and editing it never invalidates an approval or signature.
|
|
1460
|
+
Records without it are shown with a readable title derived from their id, and
|
|
1461
|
+
nothing is ever backfilled or re-signed on your behalf.
|
|
1462
|
+
|
|
1463
|
+
Approving writes a fingerprint (a hash) of the truth block. If anyone edits an
|
|
1464
|
+
approved flow's truth without going through approve again, that fingerprint no
|
|
1465
|
+
longer matches — \`flow list\` shows it as tampered, immediately. Nothing about
|
|
1466
|
+
truth changes silently. Status and evidence are excluded from that fingerprint
|
|
1467
|
+
on purpose: flipping "planned" to "works now" or marking a step verified
|
|
1468
|
+
should never need a ceremony — the honesty comes from what evidence you can
|
|
1469
|
+
actually see next to each step, not from a lock on the whole record.`,
|
|
1470
|
+
},
|
|
1471
|
+
{
|
|
1472
|
+
id: 'deltas',
|
|
1473
|
+
title: 'Deltas — saying what should change about a Flow',
|
|
1474
|
+
body: `A Delta is how you propose a change, in your own words, without writing a
|
|
1475
|
+
contract yourself: what happens today, what should happen instead, what must
|
|
1476
|
+
not change, and how you will know it worked.
|
|
1477
|
+
|
|
1478
|
+
prismatica delta new --flow <id> \\
|
|
1479
|
+
--today "Minutes can be 0" \\
|
|
1480
|
+
--instead "Minutes must be positive" \\
|
|
1481
|
+
--keep "The offline queue behaviour" \\
|
|
1482
|
+
--show-me "Try saving 0 minutes; it should refuse"
|
|
1483
|
+
# writes a delta record — a plan, not governed truth: no hash, no
|
|
1484
|
+
# signature, because it's your intent, not a fact about the app
|
|
1485
|
+
|
|
1486
|
+
prismatica delta approve <id> # you decide it's worth doing
|
|
1487
|
+
prismatica frame --from-delta <id> # turns it into a contract:
|
|
1488
|
+
# title from Instead, scope suggested from the Flow's mapped files
|
|
1489
|
+
# (override with --allow), Keep becomes non-goals, Show me becomes
|
|
1490
|
+
# the acceptance check an agent's work is judged against
|
|
1491
|
+
|
|
1492
|
+
From there it's the ordinary loop (see "the loop" above) — a Delta is just a
|
|
1493
|
+
faster on-ramp into \`frame\`, never a second product decision or a shortcut
|
|
1494
|
+
around review.
|
|
1495
|
+
|
|
1496
|
+
prismatica delta list # every delta and its status
|
|
1497
|
+
prismatica delta show <id> # one delta, readable
|
|
1498
|
+
prismatica delta reject <id> # not now — discard it`,
|
|
1499
|
+
},
|
|
1500
|
+
{
|
|
1501
|
+
id: 'discover',
|
|
1502
|
+
title: 'Discover — mapping an app you already have',
|
|
1503
|
+
body: `You do not write flows by hand. You ask an agent to read the real code and
|
|
1504
|
+
draft them, then you review.
|
|
1505
|
+
|
|
1506
|
+
In your coding agent: Prismatica Understand
|
|
1507
|
+
# it reads your repo — through "prismatica context discover", which it
|
|
1508
|
+
# runs for itself — and drafts 6-12 flows plus a few candidate app
|
|
1509
|
+
# rules, saves a json answer, and hands you the command below.
|
|
1510
|
+
|
|
1511
|
+
prismatica discover --import ~/answer.json
|
|
1512
|
+
# materialises that answer as files under .prismatica/flows/proposals/
|
|
1513
|
+
# and .prismatica/rules/proposals/ — nothing is accepted automatically.
|
|
1514
|
+
|
|
1515
|
+
An agent that would rather write those proposal files directly still can: the
|
|
1516
|
+
instructions carry both templates, and \`flow list\`, \`rules list\` and the board
|
|
1517
|
+
read them exactly the same way. The import route is the one you can prevalidate,
|
|
1518
|
+
preview and safely retry.
|
|
1519
|
+
|
|
1520
|
+
Then review what it found:
|
|
1521
|
+
|
|
1522
|
+
prismatica flow list # every draft, in one table
|
|
1523
|
+
prismatica view # the same review, visually, in Understand
|
|
1524
|
+
|
|
1525
|
+
For each draft, either:
|
|
1526
|
+
|
|
1527
|
+
prismatica flow approve <id> # this is right — make it the record
|
|
1528
|
+
prismatica flow dismiss <id> # not yet, or not quite — discard it
|
|
1529
|
+
|
|
1530
|
+
The agent is told to be honest: it can only mark a step "code inferred"
|
|
1531
|
+
(it read the code, it did not run it), never "test verified" or "manually
|
|
1532
|
+
verified" — only a passing test or you, running \`prismatica flow verify\`, can
|
|
1533
|
+
say that. Run it again any time; the exported context names the Flows you
|
|
1534
|
+
already have, so the agent proposes what is still missing or has changed rather
|
|
1535
|
+
than re-drafting everything.
|
|
1536
|
+
|
|
1537
|
+
## Seeing what a Flow is entangled with
|
|
1538
|
+
|
|
1539
|
+
prismatica flow show <flow-id> --json
|
|
1540
|
+
|
|
1541
|
+
Alongside the Flow itself, that reports \`possiblyAffected\`: every other
|
|
1542
|
+
canonical Flow sharing a route, component, entity or test with this one. It is
|
|
1543
|
+
the same math \`check\` and the gate use to decide who must answer a Flow Report,
|
|
1544
|
+
and it states a possibility — sharing a component is a reason to look, never
|
|
1545
|
+
evidence that anything broke.`,
|
|
1546
|
+
},
|
|
1547
|
+
{
|
|
1548
|
+
id: 'frame',
|
|
1549
|
+
title: 'Frame — starting a change safely',
|
|
1550
|
+
body: `Framing writes the contract and opens the lane. It refuses to start from a
|
|
1551
|
+
bad base, and tells you exactly how to fix it:
|
|
1552
|
+
|
|
1553
|
+
- dirty base (uncommitted code): save it first —
|
|
1554
|
+
git switch -c rescue/wip && git add -A && git commit -m "wip"
|
|
1555
|
+
- stale base (behind GitHub): catch up first —
|
|
1556
|
+
git switch main && git pull
|
|
1557
|
+
- too many open changes: the WIP limit (default 2) keeps work small; finish
|
|
1558
|
+
or ship something before starting more.
|
|
1559
|
+
|
|
1560
|
+
The tier is set by what the change touches, and decides how much proof is due:
|
|
1561
|
+
- light — copy, colours, spacing: checks and a screenshot.
|
|
1562
|
+
- normal — a feature or bug: full checks plus a sealed review.
|
|
1563
|
+
- heavy — auth, payments, saved data, schema: all of that plus your signed
|
|
1564
|
+
decision and a tested rollback route.
|
|
1565
|
+
|
|
1566
|
+
If the scope turns out to be wrong mid-build, never start over — amend it with
|
|
1567
|
+
a reason that goes in the audit log:
|
|
1568
|
+
|
|
1569
|
+
prismatica amend <id> --reason "also needs the shared validator" \\
|
|
1570
|
+
--allow "src/shared/**"
|
|
1571
|
+
# widens the scope, refreshes the lane's guard, and marks the old brief
|
|
1572
|
+
# stale so the agent re-packs before continuing
|
|
1573
|
+
|
|
1574
|
+
**Some commands are yours, and only yours.** An agent Prismatica launched is
|
|
1575
|
+
refused every command that makes a decision rather than does work:
|
|
1576
|
+
|
|
1577
|
+
init start frame amend accept seal ship merge close view
|
|
1578
|
+
forget flow approve/dismiss rules approve/dismiss
|
|
1579
|
+
delta approve/reject flow verify rules verify flow status
|
|
1580
|
+
|
|
1581
|
+
\`accept\` is the one that matters most — it signs with your Ed25519 key, so an
|
|
1582
|
+
agent that could run it would be approving its own diff. \`seal\` binds a review
|
|
1583
|
+
to an exact diff, and an agent that could both review and seal is not being
|
|
1584
|
+
reviewed by anyone. \`flow verify\`, \`rules verify\` and \`flow status\` are
|
|
1585
|
+
there for a quieter reason: they write "verified manually" or "works now" onto
|
|
1586
|
+
canonical truth, and manually means a person looked. Nothing may mark its own
|
|
1587
|
+
work proven. \`view\` is there because the board is your window only when you
|
|
1588
|
+
opened it — it can accept a change and approve a Flow through a browser form,
|
|
1589
|
+
so starting it is another way to reach every decision above. \`init\` adopts
|
|
1590
|
+
governance: it generates your signing key, writes the CI gate workflow and
|
|
1591
|
+
offers the pre-push hook — how this repo is governed is your call, and CI runs
|
|
1592
|
+
\`gate\`, never \`init\`. \`forget\` clears the board's list of your repos, which
|
|
1593
|
+
lives outside any repo and is not archived anywhere. The rest either invent
|
|
1594
|
+
scope or reach GitHub.
|
|
1595
|
+
|
|
1596
|
+
Everything the agent actually needs stays open to it: \`check\`, \`review\`
|
|
1597
|
+
(a fresh agent reviewing is the design, not a hole), \`pack\`, \`open\`,
|
|
1598
|
+
\`discover\`, \`delta new\`, \`flow report\`, and every command that only reads —
|
|
1599
|
+
\`flow list\`, \`flow show\`, \`next\`, \`doctor\`, \`stats\`, \`guide\`. \`gate\`
|
|
1600
|
+
and \`prepush\` are untouched, because CI and git hooks run them with no
|
|
1601
|
+
terminal at all.
|
|
1602
|
+
|
|
1603
|
+
**\`amend\` gets a second guard on top.** It moves the boundary every other check
|
|
1604
|
+
is measured against, so it refuses to run unless a person is there:
|
|
1605
|
+
|
|
1606
|
+
- it shows you the scope you are about to widen — current paths, added paths,
|
|
1607
|
+
the reason, and how many times this contract has already been amended — and
|
|
1608
|
+
asks once. There is deliberately no \`--yes\`.
|
|
1609
|
+
- with no terminal attached, it refuses outright rather than assuming a yes.
|
|
1610
|
+
- any agent Prismatica launched carries a marker in its environment, and
|
|
1611
|
+
\`amend\` refuses the moment it sees one. An agent that needs more scope must
|
|
1612
|
+
come and ask you for it.
|
|
1613
|
+
|
|
1614
|
+
Be clear-eyed about what those last two are: guards against a well-meaning
|
|
1615
|
+
agent overstepping, not a cage around a hostile one. An agent with a shell
|
|
1616
|
+
could edit the contract file directly and never call \`amend\` at all. What you
|
|
1617
|
+
genuinely keep is that the unattended path fails closed, every amendment is in
|
|
1618
|
+
the audit log with its reason, and amending invalidates the pack and any seal —
|
|
1619
|
+
so a review can never be carried across a scope change.
|
|
1620
|
+
|
|
1621
|
+
Three or more amendments on one change is a smell, and Prismatica says so: the
|
|
1622
|
+
change was probably two changes.`,
|
|
1623
|
+
},
|
|
1624
|
+
{
|
|
1625
|
+
id: 'check',
|
|
1626
|
+
title: 'Check — proving the work',
|
|
1627
|
+
body: ` prismatica check
|
|
1628
|
+
|
|
1629
|
+
runs everything, identically to how the gate will run it later. It never asks
|
|
1630
|
+
the agent whether the work is done — it runs your tools and reads the results:
|
|
1631
|
+
|
|
1632
|
+
- your repo's own proof: typecheck, lint, unit tests, build, browser journeys
|
|
1633
|
+
- secret scan: gitleaks when installed, a built-in fallback otherwise
|
|
1634
|
+
- scope: the real git diff must stay inside the contract's allowed files
|
|
1635
|
+
- traceability: every acceptance check must point at a passing test
|
|
1636
|
+
(or be marked manual:OWNER, which you attest to at accept)
|
|
1637
|
+
- docs delta: the docs the contract promised must actually change
|
|
1638
|
+
|
|
1639
|
+
Every run writes an evidence record and one ledger line. A failed run counts a
|
|
1640
|
+
"rework loop" — prismatica stats shows the median, which tells you how often
|
|
1641
|
+
agents need retries in this repo.
|
|
1642
|
+
|
|
1643
|
+
Failing is normal and cheap here. The whole point is that a change fails at
|
|
1644
|
+
check, on your machine, in minutes — not at the gate, or worse, in front of
|
|
1645
|
+
users.`,
|
|
1646
|
+
},
|
|
1647
|
+
{
|
|
1648
|
+
id: 'review',
|
|
1649
|
+
title: 'Review and seal — fresh eyes, bound by maths',
|
|
1650
|
+
body: `A review is only worth something if it looked at the code that ships. So
|
|
1651
|
+
Prismatica binds every review to the diff's fingerprint (its patch-id):
|
|
1652
|
+
|
|
1653
|
+
prismatica review --agent claude
|
|
1654
|
+
# writes a review brief bound to the current committed diff, records
|
|
1655
|
+
# "claude" as the reviewer, and starts a fresh read-only session in the
|
|
1656
|
+
# lane with one short pointer at the record, the contract, the pack and
|
|
1657
|
+
# the exact baseline..HEAD diff
|
|
1658
|
+
|
|
1659
|
+
prismatica review --copy --reviewer "a chat agent"
|
|
1660
|
+
# copies the same short lane pointer — the path for a reviewer with no
|
|
1661
|
+
# CLI, and the fallback if a launch fails
|
|
1662
|
+
|
|
1663
|
+
prismatica review --reviewer fresh-agent
|
|
1664
|
+
# draft only: names a reviewer, launches nothing
|
|
1665
|
+
|
|
1666
|
+
prismatica seal
|
|
1667
|
+
# recomputes the fingerprint; if the code changed since the review,
|
|
1668
|
+
# the seal fails and the review must be redone
|
|
1669
|
+
|
|
1670
|
+
prismatica seal --request-changes
|
|
1671
|
+
# the reviewer said no — never advances the change; above light it blocks
|
|
1672
|
+
# the gate and accept, and next sends the work back to the builder
|
|
1673
|
+
|
|
1674
|
+
If anything touches the code after sealing — even one line — the gate notices
|
|
1675
|
+
the fingerprints no longer match and blocks the merge. The model thinks; the
|
|
1676
|
+
maths checks.
|
|
1677
|
+
|
|
1678
|
+
**A Fresh Reviewer is a fresh SESSION, not a different vendor.** The same
|
|
1679
|
+
provider is fine; what must not be reused is the session that wrote the code.
|
|
1680
|
+
\`--agent\` accepts \`claude\` or \`codex\` — the flag that stops the session
|
|
1681
|
+
changing the repository is that CLI's own (\`--permission-mode plan\`,
|
|
1682
|
+
\`--sandbox read-only\`) and no flag is ever guessed for a provider Prismatica
|
|
1683
|
+
has not been told about. Both block WRITES; neither claims to stop the session
|
|
1684
|
+
running commands, and the reviewer only needs the first. It refuses to combine with
|
|
1685
|
+
\`--copy\` or with \`--reviewer\`, because the agent already IS the reviewer label.
|
|
1686
|
+
|
|
1687
|
+
**The reviewer recommends; you record.** The brief and the pointer both end the
|
|
1688
|
+
reviewer on exactly \`SAFE TO SEAL\` or \`DO NOT SEAL\`, and neither ever tells
|
|
1689
|
+
them to seal. Prismatica reads none of that session's output, infers no verdict
|
|
1690
|
+
from it and seals nothing on its behalf — the two outcomes are yours to type,
|
|
1691
|
+
and both are printed for you when the review is drafted.
|
|
1692
|
+
|
|
1693
|
+
**The verdict is enforced, not just recorded.** Above \`light\` tier the gate
|
|
1694
|
+
requires a sealed review carrying an explicit \`approve\`. A
|
|
1695
|
+
\`request_changes\` verdict — or a sealed review with no verdict at all — fails
|
|
1696
|
+
closed: the gate refuses, \`accept\` will not sign over it, \`prismatica next\`
|
|
1697
|
+
sends the change back to the builder, and the board shows it as back with the
|
|
1698
|
+
builder rather than waiting on you. "Sealed" has never meant "approved", and
|
|
1699
|
+
now nothing in the tool pretends otherwise.
|
|
1700
|
+
|
|
1701
|
+
**Commit before you check, and before you review.** A fingerprint can only
|
|
1702
|
+
cover committed work, so both \`check\` and \`review\` refuse while anything is
|
|
1703
|
+
uncommitted in the lane and tell you to commit first. Without that refusal a
|
|
1704
|
+
check of work-in-progress would be recorded as proof, and a review of it would
|
|
1705
|
+
be recorded as a review of the empty diff, with the seal agreeing perfectly.
|
|
1706
|
+
|
|
1707
|
+
That includes Prismatica's own records, with narrow exceptions: the ledger line
|
|
1708
|
+
and the evidence files \`check\` writes, and a review record still in DRAFT that
|
|
1709
|
+
a re-run is about to replace. Those are output, not input. A SEALED review is
|
|
1710
|
+
not exempt — a \`request_changes\` verdict must reach Git history before a
|
|
1711
|
+
fresh review displaces it, or the rework it asked for would erase the only
|
|
1712
|
+
trace that anyone said no. The contract, the pack and a flow report are not
|
|
1713
|
+
exempt either: the brief quotes their scope, their acceptance checks and their
|
|
1714
|
+
impact account, so they have to be the ones riding the pull request, not a
|
|
1715
|
+
newer copy sitting in your working tree. (The one thing tolerated on the
|
|
1716
|
+
contract is Prismatica's own stage line moving forward; every other field must
|
|
1717
|
+
match what is committed.)
|
|
1718
|
+
|
|
1719
|
+
**A rejection has to be worked on before it can be reviewed again.** Once a
|
|
1720
|
+
sealed \`request_changes\` is committed, \`review\` refuses a fresh brief until a
|
|
1721
|
+
later commit contains substantive rework. The review record, ledger and this
|
|
1722
|
+
contract's Check evidence are lifecycle output and do not count, so rerunning
|
|
1723
|
+
Check on unchanged work cannot unlock a fresh reviewer. Rework the code, or make
|
|
1724
|
+
a substantive Flow or Rule proposal change — either passes. No later commit or
|
|
1725
|
+
an empty commit does not: each would put the same work in front of a new
|
|
1726
|
+
reviewer, and a change could shop for a yes at no cost. It is deliberately not a fingerprint
|
|
1727
|
+
comparison — the patch-id leaves \`.prismatica/\` out, so records-only rework is
|
|
1728
|
+
invisible to it — but a question asked of committed history since the rejection
|
|
1729
|
+
was written. Commit the rejection and the rework it asked for separately, in that
|
|
1730
|
+
order, for the same reason a sealed review is never replaced in place.
|
|
1731
|
+
|
|
1732
|
+
prismatica review 20260729-fix-offline-session-loss-9c3e --reconsider
|
|
1733
|
+
# you have decided to look at this exact, unchanged work again anyway
|
|
1734
|
+
|
|
1735
|
+
That escape hatch is yours alone: it needs a real terminal, it refuses an agent,
|
|
1736
|
+
and there is deliberately no \`--yes\`. The rejection it steps past stays exactly
|
|
1737
|
+
where it is in Git history — nothing here deletes or rewrites a record.
|
|
1738
|
+
|
|
1739
|
+
**A check expires when the code moves on.** Every check records the exact
|
|
1740
|
+
commit it inspected, and stays current only while the commits since are the
|
|
1741
|
+
change's own records — committing the ledger line and evidence \`check\` just
|
|
1742
|
+
produced is expected and changes nothing. Commit code, contract terms, the
|
|
1743
|
+
pack, a flow report, a delta, a proposal or a canonical record afterwards and
|
|
1744
|
+
the check no longer describes this commit, so \`review\` refuses and \`next\`
|
|
1745
|
+
sends you back to \`check\`. File your flow report BEFORE the check, not after.
|
|
1746
|
+
A check recorded before this binding existed, or a ledger line written after it
|
|
1747
|
+
that cannot be read, both fail closed the same way: run \`check\` again.
|
|
1748
|
+
|
|
1749
|
+
**Filing that flow report is one command, and it will not lie for you.**
|
|
1750
|
+
|
|
1751
|
+
prismatica flow report --auto
|
|
1752
|
+
# writes one entry per Flow your diff provably touched, naming the
|
|
1753
|
+
# touchpoints that matched and the files that matched them
|
|
1754
|
+
|
|
1755
|
+
\`--auto\` records only what a file diff can establish. It never says a test
|
|
1756
|
+
passed — it runs before \`check\`, so nothing has run yet — and it never says
|
|
1757
|
+
behaviour is unchanged, because no list of filenames can establish that. It
|
|
1758
|
+
leaves two things for you, and prints the exact command for each, last, where
|
|
1759
|
+
you cannot miss them: a Flow that merely SHARES a mechanic with one you
|
|
1760
|
+
touched, and a Flow with no mapped touchpoints at all, which no diff can rule
|
|
1761
|
+
in or out. It never overwrites an entry you wrote.
|
|
1762
|
+
|
|
1763
|
+
Then answer the rest in your own words:
|
|
1764
|
+
|
|
1765
|
+
prismatica flow report --flow log-a-session \\
|
|
1766
|
+
--status unchanged --reason "only the internal helper moved; the user
|
|
1767
|
+
sees exactly the same screens in the same order"
|
|
1768
|
+
|
|
1769
|
+
\`unchanged\` on a Flow your diff touched is a real, accepted answer — that is
|
|
1770
|
+
what it is FOR. Prismatica cannot decide whether behaviour changed and does not
|
|
1771
|
+
pretend to; it only decides who has to answer. If that Flow's own mapped test
|
|
1772
|
+
files also changed in your diff, the report records that fact beside your
|
|
1773
|
+
reason so the reviewer weighs both. It is context, never a veto.
|
|
1774
|
+
|
|
1775
|
+
For heavy changes, your signed decision follows the seal:
|
|
1776
|
+
|
|
1777
|
+
prismatica accept
|
|
1778
|
+
# Ed25519 signature over the contract id + the exact diff fingerprint,
|
|
1779
|
+
# verified by the gate against the public key committed in config.json
|
|
1780
|
+
|
|
1781
|
+
**Feeling like too much ceremony for a small change? Use the tier, not a
|
|
1782
|
+
shortcut.** There is deliberately no \`--skip-review\`: a seal you can switch off
|
|
1783
|
+
proves nothing, and the switch would be the first thing a tired evening reaches
|
|
1784
|
+
for. The dial that exists instead is the risk tier, and it is deterministic —
|
|
1785
|
+
\`light\` changes need no sealed review at all (\`gate.ts\` simply does not ask
|
|
1786
|
+
for one), while \`normal\` and \`heavy\` do.
|
|
1787
|
+
|
|
1788
|
+
prismatica frame "Fix the footer spacing" --issue "#31" --copy-only
|
|
1789
|
+
# copy/colours/spacing → light → checks, no sealed review
|
|
1790
|
+
|
|
1791
|
+
That holds all the way through \`ship --verify\`: a light change's passport
|
|
1792
|
+
binds to the exact commit its passing check recorded, not to a review it never
|
|
1793
|
+
had. The exact-commit guarantee is the same one a sealed review gives; only the
|
|
1794
|
+
proof it is drawn from differs by tier.
|
|
1795
|
+
|
|
1796
|
+
If a whole CLASS of change keeps feeling heavier than it deserves — docs,
|
|
1797
|
+
tests, fixtures — say so once, in \`.prismatica/config.json\`:
|
|
1798
|
+
|
|
1799
|
+
"tierRules": [
|
|
1800
|
+
{ "tier": "light", "paths": ["docs/**", "**/*.test.ts"] },
|
|
1801
|
+
{ "tier": "heavy", "paths": ["**/auth/**", "**/payments/**"] }
|
|
1802
|
+
]
|
|
1803
|
+
|
|
1804
|
+
That is a decision recorded in the repo, reviewable in a diff, applied the same
|
|
1805
|
+
way every time — not a flag someone typed once at 11pm. And it cannot be
|
|
1806
|
+
abused: the tier is \`max(what you answered, what the files demand)\`, so an
|
|
1807
|
+
agent can raise a tier and never lower one, and the gate re-derives the floor
|
|
1808
|
+
from the changed files regardless of what the contract claims.`,
|
|
1809
|
+
},
|
|
1810
|
+
{
|
|
1811
|
+
id: 'ship',
|
|
1812
|
+
title: 'Ship, merge, close, verify — out the door, with a way back',
|
|
1813
|
+
body: ` prismatica ship <id>
|
|
1814
|
+
# pre-flights the gate locally (why push something that will bounce?),
|
|
1815
|
+
# requires an exact clean lane HEAD, pushes it, and opens the pull
|
|
1816
|
+
# request via GitHub's gh — never queries or creates a PR after a
|
|
1817
|
+
# failed push, and reuses an already-open PR instead of duplicating it
|
|
1818
|
+
|
|
1819
|
+
The real gate runs on GitHub for every push to the PR. It re-checks everything
|
|
1820
|
+
from scratch in a clean checkout: scope, tests, docs, the sealed review, your
|
|
1821
|
+
signature (heavy), and the risk tier the changed files themselves demand. The
|
|
1822
|
+
gate itself makes zero writes, pass or fail — it only ever reports.
|
|
1823
|
+
|
|
1824
|
+
prismatica merge <id>
|
|
1825
|
+
# once the gate is green: an exact-SHA, owner-guarded merge. Refuses a
|
|
1826
|
+
# draft, missing, closed, pending, failed, stale, or ambiguous PR, and
|
|
1827
|
+
# requires a passing prismatica-gate check for this EXACT head before
|
|
1828
|
+
# calling \`gh pr merge --merge\` — never a silent squash or rebase.
|
|
1829
|
+
# Reported as "Checked — owner-guarded": this command is the guard,
|
|
1830
|
+
# not a claim that GitHub itself enforces it (GitHub Free private
|
|
1831
|
+
# repos don't offer required-status-check protection at all). Without
|
|
1832
|
+
# server-side protection, a merge in the GitHub browser UI or a direct
|
|
1833
|
+
# push to main still bypasses it — see "prismatica guide mergepath"
|
|
1834
|
+
|
|
1835
|
+
prismatica close <id>
|
|
1836
|
+
# removes the lane once GitHub's own record confirms a merged PR at
|
|
1837
|
+
# exactly this lane's HEAD — refuses any real uncommitted work (the
|
|
1838
|
+
# ONE thing it tolerates is ship's own disposable stage-bump, since
|
|
1839
|
+
# ship can never commit for you), refuses any ignored file it can't
|
|
1840
|
+
# prove is disposable (a local .env, log, evidence blob, customized
|
|
1841
|
+
# Claude setting, or hand-edited hook survives; exact generated hook
|
|
1842
|
+
# files and build output don't block it), never a remote branch,
|
|
1843
|
+
# never anything short of certain
|
|
1844
|
+
|
|
1845
|
+
After merge, close, and your deploy is out:
|
|
1846
|
+
|
|
1847
|
+
prismatica ship <id> --verify \\
|
|
1848
|
+
--deploy-result "deployed to production" \\
|
|
1849
|
+
--rollback "revert the PR, redeploy previous image"
|
|
1850
|
+
# runs one live smoke journey against the real app; only when it
|
|
1851
|
+
# passes is the passport written — durably, on your main checkout,
|
|
1852
|
+
# never forcing a new commit into an already-closed lane
|
|
1853
|
+
|
|
1854
|
+
No passport is ever written for a broken deploy or an empty change. \`--deploy-
|
|
1855
|
+
result\` and \`--rollback\` are checked for real content, not just presence:
|
|
1856
|
+
punctuation on its own ("...") and angle-bracket template text copied straight
|
|
1857
|
+
out of a \`--help\` string ("<a rollback route you actually tested>") are both
|
|
1858
|
+
refused before the smoke journey ever runs. A short, real answer ("deployed",
|
|
1859
|
+
"revert PR #48") is never mistaken for a placeholder. The rollback route on
|
|
1860
|
+
the passport is one you actually tested — because the only rollback that
|
|
1861
|
+
counts is one that is known to work.
|
|
1862
|
+
|
|
1863
|
+
Lost mid-flow? \`prismatica next\` reads the PR and its checks (read-only,
|
|
1864
|
+
never network-writing) and tells you exactly which of ship/merge/close/verify
|
|
1865
|
+
comes next — or, if GitHub can't be reached, says so honestly instead of
|
|
1866
|
+
guessing. When a merged contract on main is still missing its passport, the
|
|
1867
|
+
command it hands you is exactly \`prismatica ship <id> --verify\`, with no
|
|
1868
|
+
invented \`--deploy-result\`/\`--rollback\` text tacked on — those are real
|
|
1869
|
+
evidence only you have, and \`ship\` asks for it directly rather than accepting
|
|
1870
|
+
whatever \`next\` printed. A contract created before this repo started
|
|
1871
|
+
tracking release verification (\`releaseTrackingSince\` in config.json, set
|
|
1872
|
+
once by \`init\`) is never queued this way at all — see "prismatica guide
|
|
1873
|
+
releasetracking".`,
|
|
1874
|
+
},
|
|
1875
|
+
{
|
|
1876
|
+
id: 'releasetracking',
|
|
1877
|
+
title: 'Release tracking — why an old contract is never "awaiting verification"',
|
|
1878
|
+
body: `\`ship --verify\` writes a passport once a merged change actually deploys and
|
|
1879
|
+
passes a live check. Until it does, \`next\` and the board both say the
|
|
1880
|
+
contract is "awaiting live verification" — but only for a contract this repo
|
|
1881
|
+
was actually tracking release proof for when it merged.
|
|
1882
|
+
|
|
1883
|
+
\`prismatica init\` writes \`releaseTrackingSince\` into config.json — once, the
|
|
1884
|
+
first time it runs, timestamped to that moment:
|
|
1885
|
+
|
|
1886
|
+
"releaseTrackingSince": "2026-08-06T16:41:25.791Z"
|
|
1887
|
+
|
|
1888
|
+
A contract created BEFORE that timestamp, with no passport, is legacy: nobody
|
|
1889
|
+
was asking it to carry release proof at the time, so \`next\` never queues it
|
|
1890
|
+
for \`ship --verify\`, and neither \`next\` nor the board ever describes it as
|
|
1891
|
+
shipped or verified. It is shown plainly as legacy release proof that was
|
|
1892
|
+
never tracked, distinct from a genuinely pending one.
|
|
1893
|
+
|
|
1894
|
+
The boundary decides what a MISSING passport means, never what a present one
|
|
1895
|
+
means. An old contract that DOES have a passport is a verified release like
|
|
1896
|
+
any other — it merged, deployed and passed a live check, and that record is
|
|
1897
|
+
shown as exactly what it is. Nothing is suppressed for being old.
|
|
1898
|
+
|
|
1899
|
+
A contract created ON OR AFTER the boundary, with no passport yet, is exactly
|
|
1900
|
+
what "awaiting live verification" means — \`next\` surfaces it, and \`ship
|
|
1901
|
+
--verify\` will happily write its passport once you give it real evidence.
|
|
1902
|
+
|
|
1903
|
+
Re-running \`init\` on a repo that adopted Prismatica before this field existed
|
|
1904
|
+
fills the boundary in once, from the moment you re-run it — never earlier,
|
|
1905
|
+
and never moved again on any later run. Nothing is ever backfilled, waived,
|
|
1906
|
+
deleted or overwritten: this only decides who gets ASKED for verification, and
|
|
1907
|
+
a real passport, once written, is never touched by any of this.`,
|
|
1908
|
+
},
|
|
1909
|
+
{
|
|
1910
|
+
id: 'board',
|
|
1911
|
+
title: 'Board — seeing everything at once',
|
|
1912
|
+
body: ` prismatica view
|
|
1913
|
+
# a local page (your machine only) showing every adopted repo
|
|
1914
|
+
|
|
1915
|
+
Four areas, in the order they deserve your attention:
|
|
1916
|
+
|
|
1917
|
+
- Needs you — every decision waiting on you, across all apps, each in one
|
|
1918
|
+
plain sentence. Each card has "Approve and sign" or "Request changes"; both
|
|
1919
|
+
write a signed record into the repo — the gate reads the record, never the
|
|
1920
|
+
board.
|
|
1921
|
+
- Work — every in-flight change as a card in its lifecycle column. Cards move
|
|
1922
|
+
only when records change; there is nothing to drag.
|
|
1923
|
+
- Apps — one row per repo: last shipped, open changes, gate health, red
|
|
1924
|
+
flags, and the folded Enforced/Checked/Missing table. Each row has a "Remove"
|
|
1925
|
+
button that forgets the repo's board pointer (the repo and its records stay).
|
|
1926
|
+
- Releases — three honestly distinct states, never blurred together. Verified
|
|
1927
|
+
releases are passports (what shipped, with proof and a tested rollback).
|
|
1928
|
+
Awaiting live verification is a merged contract with no passport yet, still
|
|
1929
|
+
eligible for \`ship --verify\`. Legacy (release proof not tracked) is a
|
|
1930
|
+
contract created before this repo adopted release tracking — never queued,
|
|
1931
|
+
never called shipped or verified (see "prismatica guide releasetracking").
|
|
1932
|
+
Below that, the plans you confirmed: an Intent is the plan \`prismatica start\`
|
|
1933
|
+
recorded when you confirmed it, its success checks listed as the outcomes it
|
|
1934
|
+
set out to achieve, never as a progress bar. Nothing in Prismatica advances
|
|
1935
|
+
them, so a count would only ever read zero. Whether a change shipped comes
|
|
1936
|
+
from its passport — the one record that means it merged, deployed and passed
|
|
1937
|
+
a live check.
|
|
1938
|
+
|
|
1939
|
+
The board follows your system light/dark theme, with a manual toggle (Auto /
|
|
1940
|
+
Light / Dark) and an optional 10-second auto-refresh, both in the sidebar.
|
|
1941
|
+
|
|
1942
|
+
A fifth sidebar entry, Understand, is a separate view onto what your apps DO
|
|
1943
|
+
rather than what is changing — see the "understand" topic.
|
|
1944
|
+
|
|
1945
|
+
To empty the board from the terminal instead:
|
|
1946
|
+
|
|
1947
|
+
prismatica forget # forget the current repo
|
|
1948
|
+
prismatica forget --gone # forget repos no longer on disk
|
|
1949
|
+
prismatica forget --all # clear the board entirely
|
|
1950
|
+
|
|
1951
|
+
Everything on the board is a record in a repo. If it is not in the repo, it is
|
|
1952
|
+
not on the board. Hover anything to see the real term behind the plain words.`,
|
|
1953
|
+
},
|
|
1954
|
+
{
|
|
1955
|
+
id: 'understand',
|
|
1956
|
+
title: 'Understand — the same Flows and Rules, visually',
|
|
1957
|
+
body: ` prismatica view
|
|
1958
|
+
# then click "Understand" in the sidebar, or go straight to
|
|
1959
|
+
# http://127.0.0.1:<port>/understand
|
|
1960
|
+
|
|
1961
|
+
Understand is where you review what \`prismatica discover --import\` (or
|
|
1962
|
+
\`prismatica propose --import\`, from inside a change) put there, without
|
|
1963
|
+
touching a terminal:
|
|
1964
|
+
|
|
1965
|
+
- Pick an app — each card shows how many Flows and Rules it has, and how many
|
|
1966
|
+
are waiting on you.
|
|
1967
|
+
- Flow Map — one card per Flow: its goal, status (Works now / Planned / Idea
|
|
1968
|
+
/ Uncertain), and how its evidence breaks down (for example "3 steps: 2
|
|
1969
|
+
test verified, 1 code inferred"). New drafts and proposed updates carry a
|
|
1970
|
+
"pending review" badge right on the card. Filter by status.
|
|
1971
|
+
- Storyboard — click a Flow to see it step by step: who does what, what the
|
|
1972
|
+
app shows, what changes, and only-if assumptions — plus, collapsed behind
|
|
1973
|
+
"Where it lives in the code", the files an agent already mapped it to.
|
|
1974
|
+
- App rules sit alongside the map — the short list of things that must stay
|
|
1975
|
+
true no matter which Flow you are in.
|
|
1976
|
+
|
|
1977
|
+
Reviewing a draft or a proposed update shows a side-by-side Current /
|
|
1978
|
+
Proposed comparison, then two buttons:
|
|
1979
|
+
|
|
1980
|
+
Approve # writes it as the app's current truth (or rule)
|
|
1981
|
+
Keep current / dismiss # discards the proposal; nothing changes
|
|
1982
|
+
|
|
1983
|
+
Both buttons call the exact same code as \`prismatica flow approve\` and
|
|
1984
|
+
\`prismatica flow dismiss\` — the board is never a second source of truth, only
|
|
1985
|
+
a second way to reach the one approval path (signed automatically if the app
|
|
1986
|
+
is governed, hash-only if it is map-only).`,
|
|
1987
|
+
},
|
|
1988
|
+
];
|
|
1989
|
+
export function guideTopicIds() {
|
|
1990
|
+
return GUIDE_TOPICS.map((topic) => topic.id);
|
|
1991
|
+
}
|
|
1992
|
+
export function renderGuideTopic(id) {
|
|
1993
|
+
const topic = GUIDE_TOPICS.find((entry) => entry.id === id);
|
|
1994
|
+
if (!topic) {
|
|
1995
|
+
return null;
|
|
1996
|
+
}
|
|
1997
|
+
return `## ${topic.title}\n\n${topic.body}\n`;
|
|
1998
|
+
}
|
|
1999
|
+
/** Topics that answer "I want to do X", listed before the reference material. */
|
|
2000
|
+
export const SCENARIO_TOPIC_IDS = [
|
|
2001
|
+
'startbug',
|
|
2002
|
+
'understandapp',
|
|
2003
|
+
'changeflow',
|
|
2004
|
+
'newflow',
|
|
2005
|
+
'starttechnical',
|
|
2006
|
+
'rediscover',
|
|
2007
|
+
'approvebatch',
|
|
2008
|
+
'handoff',
|
|
2009
|
+
'roles',
|
|
2010
|
+
'proof',
|
|
2011
|
+
'mergepath',
|
|
2012
|
+
'verifyclose',
|
|
2013
|
+
'abandon',
|
|
2014
|
+
'manualframe',
|
|
2015
|
+
];
|
|
2016
|
+
function tocLine(topic) {
|
|
2017
|
+
return `- ${topic.title.toLowerCase().split(' — ')[0]}: prismatica guide ${topic.id}`;
|
|
2018
|
+
}
|
|
2019
|
+
export function renderFullGuide() {
|
|
2020
|
+
const scenarios = GUIDE_TOPICS.filter((topic) => SCENARIO_TOPIC_IDS.includes(topic.id));
|
|
2021
|
+
const reference = GUIDE_TOPICS.filter((topic) => !SCENARIO_TOPIC_IDS.includes(topic.id));
|
|
2022
|
+
return `# The Prismatica guide
|
|
2023
|
+
|
|
2024
|
+
The agent builds. Prismatica inspects. Nothing ships until the intent, the
|
|
2025
|
+
proof, and the owner agree.
|
|
2026
|
+
|
|
2027
|
+
Start from what you are trying to do:
|
|
2028
|
+
|
|
2029
|
+
${scenarios.map(tocLine).join('\n')}
|
|
2030
|
+
|
|
2031
|
+
Then the reference, when you want the detail behind a step:
|
|
2032
|
+
|
|
2033
|
+
${reference.map(tocLine).join('\n')}
|
|
2034
|
+
|
|
2035
|
+
${GUIDE_TOPICS.map((topic) => `## ${topic.title}\n\n${topic.body}`).join('\n\n')}
|
|
2036
|
+
`;
|
|
2037
|
+
}
|
|
2038
|
+
//# sourceMappingURL=guide.js.map
|