mustflow 2.115.11 → 2.115.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/cli/i18n/en.js +3 -3
- package/dist/cli/i18n/es.js +3 -3
- package/dist/cli/i18n/fr.js +3 -3
- package/dist/cli/i18n/hi.js +3 -3
- package/dist/cli/i18n/ko.js +3 -3
- package/dist/cli/i18n/zh.js +3 -3
- package/package.json +2 -1
- package/templates/default/common/.mustflow/config/mustflow.toml +0 -2
- package/templates/default/i18n.toml +15 -3
- package/templates/default/locales/en/.mustflow/skills/INDEX.md +3 -2
- package/templates/default/locales/en/.mustflow/skills/hetzner-cloud-change/SKILL.md +316 -0
- package/templates/default/locales/en/.mustflow/skills/routes.toml +12 -0
- package/templates/default/locales/en/.mustflow/skills/state-machine-pattern/SKILL.md +5 -1
- package/templates/default/locales/en/.mustflow/skills/svelte-code-change/SKILL.md +6 -1
- package/templates/default/locales/en/.mustflow/skills/webview2-code-change/SKILL.md +335 -0
- package/templates/default/manifest.toml +15 -1
package/README.md
CHANGED
|
@@ -302,7 +302,7 @@ mf run mustflow_update_apply
|
|
|
302
302
|
| `mf script-pack list` | List bundled script packs, script refs, routing hints, side-effect flags, input/output labels, and JSON schema files. |
|
|
303
303
|
| `mf script-pack suggest --changed --json` | Rank optional read-only helpers for current changed files without running those helpers or granting command authority. |
|
|
304
304
|
| `mf script-pack suggest --path <path> --phase before_change` | Rank helpers for an explicit path and workflow phase before deciding which script to run. |
|
|
305
|
-
| `mf script-pack run code/outline scan <path...> --json` | Scan
|
|
305
|
+
| `mf script-pack run code/outline scan <path...> --json` | Scan TypeScript, JavaScript, Astro, Svelte, Go, Rust, and Python files for symbol headers, line ranges, source anchors, return metadata, and content hashes. |
|
|
306
306
|
| `mf script-pack run code/dependency-graph scan <path...> --json` | Trace bounded relative import, export, require, and dynamic import edges for TypeScript and JavaScript source files. |
|
|
307
307
|
| `mf script-pack run code/module-boundary check <path...> --json` | Check configured module-boundary import rules, import cycles, public entrypoints, feature imports, and shared budgets. |
|
|
308
308
|
| `mf script-pack run code/change-impact analyze --base HEAD --json` | Analyze changed files and return bounded impact candidates, script-pack hints, and verification intent hints. |
|
|
@@ -482,7 +482,7 @@ mf run release_npm_publish
|
|
|
482
482
|
mf run release_npm_published_verify
|
|
483
483
|
```
|
|
484
484
|
|
|
485
|
-
The Bun scripts remain available for human maintainers and release packaging. `test_fast` runs the fast CLI regression baseline, `test_related` selects tests from changed files and falls back to the fast baseline, and both use 8 Node test workers by default. Set `MUSTFLOW_TEST_CONCURRENCY=1`, `2`, or another positive integer to tune those workers on local machines. `test_release` keeps package metadata and packaging checks out of routine local edits. `test_coverage` runs the fast CLI baseline through Node's built-in coverage report with no enforced threshold; set `MUSTFLOW_TEST_COVERAGE_CONCURRENCY=1`, `2`, or another positive integer to adjust its worker count. `lint` and test-audit are configured as narrow repository-local gates. `docs_validate_fast` checks documentation navigation and localized content links without building the entire static site; `docs_validate` performs the full static documentation build, search index, and sitemap gate for release-sensitive changes.
|
|
485
|
+
The Bun scripts remain available for human maintainers and release packaging. `test_fast` runs the fast CLI regression baseline, `test_related` selects tests from changed files and falls back to the fast baseline, and both use 8 Node test workers by default. Skill-body changes select only their owning authoring shard plus the lightweight install-surface contract, and `test_skill_contracts` exposes that seconds-scale contract path directly. Set `MUSTFLOW_TEST_CONCURRENCY=1`, `2`, or another positive integer to tune those workers on local machines. `test_release` keeps package metadata and packaging checks out of routine local edits. `test_coverage` runs the fast CLI baseline through Node's built-in coverage report with no enforced threshold; set `MUSTFLOW_TEST_COVERAGE_CONCURRENCY=1`, `2`, or another positive integer to adjust its worker count. `lint` and test-audit are configured as narrow repository-local gates. `docs_validate_fast` checks documentation navigation and localized content links without building the entire static site; `docs_validate` performs the full static documentation build, search index, and sitemap gate for release-sensitive changes.
|
|
486
486
|
|
|
487
487
|
`dist/` is a generated build output and is not committed. `npm pack` and `npm publish` run `npm run build` via `prepack`, so the npm package contains the built CLI.
|
|
488
488
|
|
package/dist/cli/i18n/en.js
CHANGED
|
@@ -797,7 +797,7 @@ Read these files before working:
|
|
|
797
797
|
"scriptPack.pack.docs.summary": "Documentation reference utility scripts",
|
|
798
798
|
"scriptPack.pack.test.summary": "Test evidence and performance utility scripts",
|
|
799
799
|
"scriptPack.pack.repo.summary": "Repository-boundary utility scripts",
|
|
800
|
-
"scriptPack.script.codeOutline.summary": "Scan TypeScript and
|
|
800
|
+
"scriptPack.script.codeOutline.summary": "Scan TypeScript, JavaScript, Astro, Svelte, Go, Rust, and Python files for symbol headers and line ranges",
|
|
801
801
|
"scriptPack.script.codeDependencyGraph.summary": "Trace relative TypeScript and JavaScript dependency graph edges",
|
|
802
802
|
"scriptPack.script.codeImportCycle.summary": "Detect relative TypeScript and JavaScript import cycles with line evidence",
|
|
803
803
|
"scriptPack.script.codeModuleBoundary.summary": "Check configured module boundary import rules and shared budgets",
|
|
@@ -825,7 +825,7 @@ Read these files before working:
|
|
|
825
825
|
"scriptPack.error.unknownScript": "Unknown script-pack script: {script}",
|
|
826
826
|
"scriptPack.error.missingSuggestInput": "Provide at least one suggestion input: --path <path>, --changed, --phase <phase>, or --skill <skill>",
|
|
827
827
|
"scriptPack.error.unknownPhase": "Unknown script-pack phase: {phase}",
|
|
828
|
-
"codeOutline.help.summary": "Scan TypeScript and
|
|
828
|
+
"codeOutline.help.summary": "Scan TypeScript, JavaScript, Astro, Svelte, Go, Rust, and Python source files for declaration headers, line ranges, export flags, and content hashes.",
|
|
829
829
|
"codeOutline.help.option.maxFiles": "Maximum number of source files to scan. Default: 200",
|
|
830
830
|
"codeOutline.help.option.maxFileBytes": "Maximum bytes to read from each source file. Default: 1048576",
|
|
831
831
|
"codeOutline.help.exit.ok": "The code outline was scanned without findings",
|
|
@@ -842,7 +842,7 @@ Read these files before working:
|
|
|
842
842
|
"codeOutline.error.missingPath": "Provide at least one source file or directory to scan",
|
|
843
843
|
"codeOutline.error.invalidPositiveInteger": "{option} must be a positive safe integer: {value}",
|
|
844
844
|
"codeOutline.error.invalidNonNegativeInteger": "{option} must be a non-negative safe integer: {value}",
|
|
845
|
-
"codeSymbolRead.help.summary": "Read a bounded
|
|
845
|
+
"codeSymbolRead.help.summary": "Read a bounded supported-source snippet from a source anchor, symbol line, or explicit line range.",
|
|
846
846
|
"codeSymbolRead.help.option.anchor": "Source anchor id to resolve to its target symbol",
|
|
847
847
|
"codeSymbolRead.help.option.startLine": "1-based source line to resolve to a symbol or range",
|
|
848
848
|
"codeSymbolRead.help.option.endLine": "Optional explicit 1-based end line; when omitted, the containing outline symbol is read",
|
package/dist/cli/i18n/es.js
CHANGED
|
@@ -797,7 +797,7 @@ Lee estos archivos antes de trabajar:
|
|
|
797
797
|
"scriptPack.pack.docs.summary": "Documentation reference utility scripts",
|
|
798
798
|
"scriptPack.pack.test.summary": "Test evidence and performance utility scripts",
|
|
799
799
|
"scriptPack.pack.repo.summary": "Repository-boundary utility scripts",
|
|
800
|
-
"scriptPack.script.codeOutline.summary": "Scan TypeScript and
|
|
800
|
+
"scriptPack.script.codeOutline.summary": "Scan TypeScript, JavaScript, Astro, Svelte, Go, Rust, and Python files for symbol headers and line ranges",
|
|
801
801
|
"scriptPack.script.codeDependencyGraph.summary": "Trace relative TypeScript and JavaScript dependency graph edges",
|
|
802
802
|
"scriptPack.script.codeImportCycle.summary": "Detect relative TypeScript and JavaScript import cycles with line evidence",
|
|
803
803
|
"scriptPack.script.codeModuleBoundary.summary": "Check configured module boundary import rules and shared budgets",
|
|
@@ -825,7 +825,7 @@ Lee estos archivos antes de trabajar:
|
|
|
825
825
|
"scriptPack.error.unknownScript": "Unknown script-pack script: {script}",
|
|
826
826
|
"scriptPack.error.missingSuggestInput": "Provide at least one suggestion input: --path <path>, --changed, --phase <phase>, or --skill <skill>",
|
|
827
827
|
"scriptPack.error.unknownPhase": "Unknown script-pack phase: {phase}",
|
|
828
|
-
"codeOutline.help.summary": "Scan TypeScript and
|
|
828
|
+
"codeOutline.help.summary": "Scan TypeScript, JavaScript, Astro, Svelte, Go, Rust, and Python source files for declaration headers, line ranges, export flags, and content hashes.",
|
|
829
829
|
"codeOutline.help.option.maxFiles": "Maximum number of source files to scan. Default: 200",
|
|
830
830
|
"codeOutline.help.option.maxFileBytes": "Maximum bytes to read from each source file. Default: 1048576",
|
|
831
831
|
"codeOutline.help.exit.ok": "The code outline was scanned without findings",
|
|
@@ -842,7 +842,7 @@ Lee estos archivos antes de trabajar:
|
|
|
842
842
|
"codeOutline.error.missingPath": "Provide at least one source file or directory to scan",
|
|
843
843
|
"codeOutline.error.invalidPositiveInteger": "{option} must be a positive safe integer: {value}",
|
|
844
844
|
"codeOutline.error.invalidNonNegativeInteger": "{option} must be a non-negative safe integer: {value}",
|
|
845
|
-
"codeSymbolRead.help.summary": "Read a bounded
|
|
845
|
+
"codeSymbolRead.help.summary": "Read a bounded supported-source snippet from a source anchor, symbol line, or explicit line range.",
|
|
846
846
|
"codeSymbolRead.help.option.anchor": "Source anchor id to resolve to its target symbol",
|
|
847
847
|
"codeSymbolRead.help.option.startLine": "1-based source line to resolve to a symbol or range",
|
|
848
848
|
"codeSymbolRead.help.option.endLine": "Optional explicit 1-based end line; when omitted, the containing outline symbol is read",
|
package/dist/cli/i18n/fr.js
CHANGED
|
@@ -797,7 +797,7 @@ Lisez ces fichiers avant de travailler :
|
|
|
797
797
|
"scriptPack.pack.docs.summary": "Documentation reference utility scripts",
|
|
798
798
|
"scriptPack.pack.test.summary": "Test evidence and performance utility scripts",
|
|
799
799
|
"scriptPack.pack.repo.summary": "Repository-boundary utility scripts",
|
|
800
|
-
"scriptPack.script.codeOutline.summary": "Scan TypeScript and
|
|
800
|
+
"scriptPack.script.codeOutline.summary": "Scan TypeScript, JavaScript, Astro, Svelte, Go, Rust, and Python files for symbol headers and line ranges",
|
|
801
801
|
"scriptPack.script.codeDependencyGraph.summary": "Trace relative TypeScript and JavaScript dependency graph edges",
|
|
802
802
|
"scriptPack.script.codeImportCycle.summary": "Detect relative TypeScript and JavaScript import cycles with line evidence",
|
|
803
803
|
"scriptPack.script.codeModuleBoundary.summary": "Check configured module boundary import rules and shared budgets",
|
|
@@ -825,7 +825,7 @@ Lisez ces fichiers avant de travailler :
|
|
|
825
825
|
"scriptPack.error.unknownScript": "Unknown script-pack script: {script}",
|
|
826
826
|
"scriptPack.error.missingSuggestInput": "Provide at least one suggestion input: --path <path>, --changed, --phase <phase>, or --skill <skill>",
|
|
827
827
|
"scriptPack.error.unknownPhase": "Unknown script-pack phase: {phase}",
|
|
828
|
-
"codeOutline.help.summary": "Scan TypeScript and
|
|
828
|
+
"codeOutline.help.summary": "Scan TypeScript, JavaScript, Astro, Svelte, Go, Rust, and Python source files for declaration headers, line ranges, export flags, and content hashes.",
|
|
829
829
|
"codeOutline.help.option.maxFiles": "Maximum number of source files to scan. Default: 200",
|
|
830
830
|
"codeOutline.help.option.maxFileBytes": "Maximum bytes to read from each source file. Default: 1048576",
|
|
831
831
|
"codeOutline.help.exit.ok": "The code outline was scanned without findings",
|
|
@@ -842,7 +842,7 @@ Lisez ces fichiers avant de travailler :
|
|
|
842
842
|
"codeOutline.error.missingPath": "Provide at least one source file or directory to scan",
|
|
843
843
|
"codeOutline.error.invalidPositiveInteger": "{option} must be a positive safe integer: {value}",
|
|
844
844
|
"codeOutline.error.invalidNonNegativeInteger": "{option} must be a non-negative safe integer: {value}",
|
|
845
|
-
"codeSymbolRead.help.summary": "Read a bounded
|
|
845
|
+
"codeSymbolRead.help.summary": "Read a bounded supported-source snippet from a source anchor, symbol line, or explicit line range.",
|
|
846
846
|
"codeSymbolRead.help.option.anchor": "Source anchor id to resolve to its target symbol",
|
|
847
847
|
"codeSymbolRead.help.option.startLine": "1-based source line to resolve to a symbol or range",
|
|
848
848
|
"codeSymbolRead.help.option.endLine": "Optional explicit 1-based end line; when omitted, the containing outline symbol is read",
|
package/dist/cli/i18n/hi.js
CHANGED
|
@@ -797,7 +797,7 @@ export const hiMessages = {
|
|
|
797
797
|
"scriptPack.pack.docs.summary": "Documentation reference utility scripts",
|
|
798
798
|
"scriptPack.pack.test.summary": "Test evidence and performance utility scripts",
|
|
799
799
|
"scriptPack.pack.repo.summary": "Repository-boundary utility scripts",
|
|
800
|
-
"scriptPack.script.codeOutline.summary": "Scan TypeScript and
|
|
800
|
+
"scriptPack.script.codeOutline.summary": "Scan TypeScript, JavaScript, Astro, Svelte, Go, Rust, and Python files for symbol headers and line ranges",
|
|
801
801
|
"scriptPack.script.codeDependencyGraph.summary": "Trace relative TypeScript and JavaScript dependency graph edges",
|
|
802
802
|
"scriptPack.script.codeImportCycle.summary": "Detect relative TypeScript and JavaScript import cycles with line evidence",
|
|
803
803
|
"scriptPack.script.codeModuleBoundary.summary": "Check configured module boundary import rules and shared budgets",
|
|
@@ -825,7 +825,7 @@ export const hiMessages = {
|
|
|
825
825
|
"scriptPack.error.unknownScript": "Unknown script-pack script: {script}",
|
|
826
826
|
"scriptPack.error.missingSuggestInput": "Provide at least one suggestion input: --path <path>, --changed, --phase <phase>, or --skill <skill>",
|
|
827
827
|
"scriptPack.error.unknownPhase": "Unknown script-pack phase: {phase}",
|
|
828
|
-
"codeOutline.help.summary": "Scan TypeScript and
|
|
828
|
+
"codeOutline.help.summary": "Scan TypeScript, JavaScript, Astro, Svelte, Go, Rust, and Python source files for declaration headers, line ranges, export flags, and content hashes.",
|
|
829
829
|
"codeOutline.help.option.maxFiles": "Maximum number of source files to scan. Default: 200",
|
|
830
830
|
"codeOutline.help.option.maxFileBytes": "Maximum bytes to read from each source file. Default: 1048576",
|
|
831
831
|
"codeOutline.help.exit.ok": "The code outline was scanned without findings",
|
|
@@ -842,7 +842,7 @@ export const hiMessages = {
|
|
|
842
842
|
"codeOutline.error.missingPath": "Provide at least one source file or directory to scan",
|
|
843
843
|
"codeOutline.error.invalidPositiveInteger": "{option} must be a positive safe integer: {value}",
|
|
844
844
|
"codeOutline.error.invalidNonNegativeInteger": "{option} must be a non-negative safe integer: {value}",
|
|
845
|
-
"codeSymbolRead.help.summary": "Read a bounded
|
|
845
|
+
"codeSymbolRead.help.summary": "Read a bounded supported-source snippet from a source anchor, symbol line, or explicit line range.",
|
|
846
846
|
"codeSymbolRead.help.option.anchor": "Source anchor id to resolve to its target symbol",
|
|
847
847
|
"codeSymbolRead.help.option.startLine": "1-based source line to resolve to a symbol or range",
|
|
848
848
|
"codeSymbolRead.help.option.endLine": "Optional explicit 1-based end line; when omitted, the containing outline symbol is read",
|
package/dist/cli/i18n/ko.js
CHANGED
|
@@ -797,7 +797,7 @@ export const koMessages = {
|
|
|
797
797
|
"scriptPack.pack.docs.summary": "Documentation reference utility scripts",
|
|
798
798
|
"scriptPack.pack.test.summary": "Test evidence and performance utility scripts",
|
|
799
799
|
"scriptPack.pack.repo.summary": "Repository-boundary utility scripts",
|
|
800
|
-
"scriptPack.script.codeOutline.summary": "TypeScript
|
|
800
|
+
"scriptPack.script.codeOutline.summary": "TypeScript, JavaScript, Astro, Svelte, Go, Rust, Python 파일에서 symbol header와 라인 범위를 스캔합니다",
|
|
801
801
|
"scriptPack.script.codeDependencyGraph.summary": "Trace relative TypeScript and JavaScript dependency graph edges",
|
|
802
802
|
"scriptPack.script.codeImportCycle.summary": "Detect relative TypeScript and JavaScript import cycles with line evidence",
|
|
803
803
|
"scriptPack.script.codeModuleBoundary.summary": "Check configured module boundary import rules and shared budgets",
|
|
@@ -825,7 +825,7 @@ export const koMessages = {
|
|
|
825
825
|
"scriptPack.error.unknownScript": "알 수 없는 script-pack script: {script}",
|
|
826
826
|
"scriptPack.error.missingSuggestInput": "추천 입력을 하나 이상 제공하세요: --path <path>, --changed, --phase <phase>, 또는 --skill <skill>",
|
|
827
827
|
"scriptPack.error.unknownPhase": "알 수 없는 script-pack phase: {phase}",
|
|
828
|
-
"codeOutline.help.summary": "TypeScript
|
|
828
|
+
"codeOutline.help.summary": "TypeScript, JavaScript, Astro, Svelte, Go, Rust, Python 소스 파일에서 declaration header, 라인 범위, export flag, content hash를 스캔합니다.",
|
|
829
829
|
"codeOutline.help.option.maxFiles": "스캔할 최대 소스 파일 수입니다. 기본값: 200",
|
|
830
830
|
"codeOutline.help.option.maxFileBytes": "각 소스 파일에서 읽을 최대 바이트입니다. 기본값: 1048576",
|
|
831
831
|
"codeOutline.help.exit.ok": "code outline을 finding 없이 스캔했습니다",
|
|
@@ -842,7 +842,7 @@ export const koMessages = {
|
|
|
842
842
|
"codeOutline.error.missingPath": "스캔할 소스 파일이나 디렉터리를 하나 이상 제공하세요",
|
|
843
843
|
"codeOutline.error.invalidPositiveInteger": "{option}은 양의 safe integer여야 합니다: {value}",
|
|
844
844
|
"codeOutline.error.invalidNonNegativeInteger": "{option}은 0 이상의 safe integer여야 합니다: {value}",
|
|
845
|
-
"codeSymbolRead.help.summary": "source anchor, symbol 라인, 또는 명시 라인 범위에서
|
|
845
|
+
"codeSymbolRead.help.summary": "source anchor, symbol 라인, 또는 명시 라인 범위에서 지원되는 소스의 제한된 snippet을 읽습니다.",
|
|
846
846
|
"codeSymbolRead.help.option.anchor": "target symbol로 해석할 source anchor id입니다",
|
|
847
847
|
"codeSymbolRead.help.option.startLine": "symbol 또는 범위로 해석할 1-based source line입니다",
|
|
848
848
|
"codeSymbolRead.help.option.endLine": "선택적 1-based end line입니다. 생략하면 포함하는 outline symbol을 읽습니다",
|
package/dist/cli/i18n/zh.js
CHANGED
|
@@ -797,7 +797,7 @@ export const zhMessages = {
|
|
|
797
797
|
"scriptPack.pack.docs.summary": "Documentation reference utility scripts",
|
|
798
798
|
"scriptPack.pack.test.summary": "Test evidence and performance utility scripts",
|
|
799
799
|
"scriptPack.pack.repo.summary": "Repository-boundary utility scripts",
|
|
800
|
-
"scriptPack.script.codeOutline.summary": "Scan TypeScript and
|
|
800
|
+
"scriptPack.script.codeOutline.summary": "Scan TypeScript, JavaScript, Astro, Svelte, Go, Rust, and Python files for symbol headers and line ranges",
|
|
801
801
|
"scriptPack.script.codeDependencyGraph.summary": "Trace relative TypeScript and JavaScript dependency graph edges",
|
|
802
802
|
"scriptPack.script.codeImportCycle.summary": "Detect relative TypeScript and JavaScript import cycles with line evidence",
|
|
803
803
|
"scriptPack.script.codeModuleBoundary.summary": "Check configured module boundary import rules and shared budgets",
|
|
@@ -825,7 +825,7 @@ export const zhMessages = {
|
|
|
825
825
|
"scriptPack.error.unknownScript": "Unknown script-pack script: {script}",
|
|
826
826
|
"scriptPack.error.missingSuggestInput": "Provide at least one suggestion input: --path <path>, --changed, --phase <phase>, or --skill <skill>",
|
|
827
827
|
"scriptPack.error.unknownPhase": "Unknown script-pack phase: {phase}",
|
|
828
|
-
"codeOutline.help.summary": "Scan TypeScript and
|
|
828
|
+
"codeOutline.help.summary": "Scan TypeScript, JavaScript, Astro, Svelte, Go, Rust, and Python source files for declaration headers, line ranges, export flags, and content hashes.",
|
|
829
829
|
"codeOutline.help.option.maxFiles": "Maximum number of source files to scan. Default: 200",
|
|
830
830
|
"codeOutline.help.option.maxFileBytes": "Maximum bytes to read from each source file. Default: 1048576",
|
|
831
831
|
"codeOutline.help.exit.ok": "The code outline was scanned without findings",
|
|
@@ -842,7 +842,7 @@ export const zhMessages = {
|
|
|
842
842
|
"codeOutline.error.missingPath": "Provide at least one source file or directory to scan",
|
|
843
843
|
"codeOutline.error.invalidPositiveInteger": "{option} must be a positive safe integer: {value}",
|
|
844
844
|
"codeOutline.error.invalidNonNegativeInteger": "{option} must be a non-negative safe integer: {value}",
|
|
845
|
-
"codeSymbolRead.help.summary": "Read a bounded
|
|
845
|
+
"codeSymbolRead.help.summary": "Read a bounded supported-source snippet from a source anchor, symbol line, or explicit line range.",
|
|
846
846
|
"codeSymbolRead.help.option.anchor": "Source anchor id to resolve to its target symbol",
|
|
847
847
|
"codeSymbolRead.help.option.startLine": "1-based source line to resolve to a symbol or range",
|
|
848
848
|
"codeSymbolRead.help.option.endLine": "Optional explicit 1-based end line; when omitted, the containing outline symbol is read",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mustflow",
|
|
3
|
-
"version": "2.115.
|
|
3
|
+
"version": "2.115.14",
|
|
4
4
|
"description": "Agent workflow documents and CLI for mustflow repository roots.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT-0",
|
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
"test:related": "node scripts/run-cli-tests.mjs --build=auto related",
|
|
33
33
|
"test:related:cached": "node scripts/run-cli-tests.mjs related-cached",
|
|
34
34
|
"test:related:profile": "node scripts/run-cli-tests.mjs --build related-profile",
|
|
35
|
+
"test:skill-contracts": "node scripts/run-cli-tests.mjs skill-contracts",
|
|
35
36
|
"test:cli": "node scripts/run-cli-tests.mjs --build cli",
|
|
36
37
|
"test:coverage": "node scripts/run-cli-tests.mjs --build coverage",
|
|
37
38
|
"test:audit": "node scripts/audit-tests.mjs --json",
|
|
@@ -62,7 +62,7 @@ translations = {}
|
|
|
62
62
|
[documents."skills.index"]
|
|
63
63
|
source = "locales/en/.mustflow/skills/INDEX.md"
|
|
64
64
|
source_locale = "en"
|
|
65
|
-
revision =
|
|
65
|
+
revision = 242
|
|
66
66
|
translations = {}
|
|
67
67
|
|
|
68
68
|
[documents."skill.ada-code-change"]
|
|
@@ -889,7 +889,7 @@ translations = {}
|
|
|
889
889
|
[documents."skill.svelte-code-change"]
|
|
890
890
|
source = "locales/en/.mustflow/skills/svelte-code-change/SKILL.md"
|
|
891
891
|
source_locale = "en"
|
|
892
|
-
revision =
|
|
892
|
+
revision = 5
|
|
893
893
|
translations = {}
|
|
894
894
|
|
|
895
895
|
[documents."skill.tailwind-code-change"]
|
|
@@ -910,6 +910,18 @@ source_locale = "en"
|
|
|
910
910
|
revision = 2
|
|
911
911
|
translations = {}
|
|
912
912
|
|
|
913
|
+
[documents."skill.webview2-code-change"]
|
|
914
|
+
source = "locales/en/.mustflow/skills/webview2-code-change/SKILL.md"
|
|
915
|
+
source_locale = "en"
|
|
916
|
+
revision = 2
|
|
917
|
+
translations = {}
|
|
918
|
+
|
|
919
|
+
[documents."skill.hetzner-cloud-change"]
|
|
920
|
+
source = "locales/en/.mustflow/skills/hetzner-cloud-change/SKILL.md"
|
|
921
|
+
source_locale = "en"
|
|
922
|
+
revision = 2
|
|
923
|
+
translations = {}
|
|
924
|
+
|
|
913
925
|
[documents."skill.typescript-code-change"]
|
|
914
926
|
source = "locales/en/.mustflow/skills/typescript-code-change/SKILL.md"
|
|
915
927
|
source_locale = "en"
|
|
@@ -1146,7 +1158,7 @@ translations = {}
|
|
|
1146
1158
|
[documents."skill.state-machine-pattern"]
|
|
1147
1159
|
source = "locales/en/.mustflow/skills/state-machine-pattern/SKILL.md"
|
|
1148
1160
|
source_locale = "en"
|
|
1149
|
-
revision =
|
|
1161
|
+
revision = 5
|
|
1150
1162
|
translations = {}
|
|
1151
1163
|
|
|
1152
1164
|
[documents."skill.strategy-pattern"]
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
mustflow_doc: skills.index
|
|
3
3
|
locale: en
|
|
4
4
|
canonical: true
|
|
5
|
-
revision:
|
|
5
|
+
revision: 242
|
|
6
6
|
authority: router
|
|
7
7
|
lifecycle: mustflow-owned
|
|
8
8
|
---
|
|
@@ -685,6 +685,8 @@ routes. Event routes stay inactive until their event occurs.
|
|
|
685
685
|
| Third-party SDK or external API integration, review, debugging, upgrade, webhook handling, auth scope change, sandbox or production setup, provider SDK version change, API version migration, rate-limit handling, retry policy, idempotency key usage, pagination, provider error mapping, request id logging, changelog review, deprecation response, or provider operational-readiness test needs production integration review | `.mustflow/skills/third-party-api-integration-review/SKILL.md` | Provider and SDK/API ledger, source-of-truth docs, auth and scope ledger, operation and side-effect ledger, webhook ledger, error and observability ledger, changelog or migration evidence, existing fakes or sandbox tests, and configured command intents | Provider adapters, wrappers, typed request and response models, error mappers, timeout and retry policies, rate-limit handling, idempotency key handling, pagination handling, webhook signature verification and dedupe, redacted observability, sandbox tests, fixtures, runbooks, migration notes, and directly synchronized docs or templates | demo-only integration, stale provider docs, SDK/API drift, sandbox-production mixup, hardcoded secret, overbroad scope, token refresh gap, missing timeout, infinite retry, retrying permanent errors, mutating retry without idempotency, per-attempt idempotency key, 429 retry storm, ignored Retry-After, offset pagination assumption, raw provider error leak, string-only provider error, missing request id, trusted webhook payload, JSON-parsed signature breakage, duplicate webhook side effect, event-order assumption, success redirect as proof, unhandled unknown provider outcome, dashboard-only setting, untested SDK upgrade, or happy-path-only sandbox test | `changes_status`, `changes_diff_summary`, `lint`, `build`, `test_related`, `test`, `test_audit`, `docs_validate_fast`, `test_release`, `mustflow_check` | Third-party integration reviewed, provider source-of-truth and SDK/API version evidence, auth/environment/scope decisions, timeout/retry/rate-limit/idempotency/pagination decisions, webhook delivery and dedupe checks, error and observability mapping, tests or missing evidence, verification, and remaining provider operational risk |
|
|
686
686
|
| Tauri frontend invokes, Rust commands, capabilities, permissions, scopes, plugins, filesystem, dialog, shell, opener, updater, sidecar, mobile native permissions, Tauri bundling targets, release package formats, or native desktop CI build matrices are created or changed | `.mustflow/skills/tauri-code-change/SKILL.md` | Frontend call sites, Tauri config, Rust commands, capability and permission files, plugin config, bundle targets, release matrix evidence, changed files, and command contract entries | Tauri frontend, Rust commands, capabilities, permissions, scopes, plugins, bundle target narrowing, package target notes, tests, and docs | broad native permission, untrusted IPC input, filesystem escape, shell or updater risk, WebView/native boundary drift, all-target bundling surprise, cold Cargo cache cost, duplicated macOS packaging jobs, or long-retention CI artifacts posing as release assets | `changes_status`, `changes_diff_summary`, `lint`, `build`, `test_related`, `test`, `docs_validate_fast`, `mustflow_check` | IPC, permission, scope, filesystem, shell, updater, native boundary, bundle target, release matrix, artifact retention, verification, and remaining Tauri risk |
|
|
687
687
|
| Wails v3 applications, Go services, generated bindings, TypeScript runtime calls, windows, menus, system tray, dialogs, events, frontend bridge payloads, WebView platform behavior, Taskfile or build config, signing, packaging, platform targets, native desktop CI build matrices, custom protocols, file associations, server builds, or Wails-related tests are created, changed, reviewed, or upgraded | `.mustflow/skills/wails-code-change/SKILL.md` | Wails version track, Go module and frontend package metadata, generated bindings, app entry point, service/window/event/menu/tray/dialog/build/package evidence, platform target and release matrix evidence, changed files, and command contract entries | Wails app assembly, Go services, frontend bridge calls, generated bindings, windows, events, menus, tray, dialogs, WebView platform behavior, platform packaging, target narrowing, tests, and docs | Electron or Wails v2 migration drift, accidental exported RPC, binding or runtime version drift, shared-service race, unsafe frontend input, oversized bridge payload, event leak or broadcast, WebView platform mismatch, packaging/signing drift, all-platform PR packaging, duplicated macOS packaging jobs, or long-retention CI artifacts posing as release assets | `changes_status`, `changes_diff_summary`, `lint`, `build`, `test_related`, `test`, `docs_validate_fast`, `mustflow_check` | Wails version/app/service/bridge/binding/window/event/menu/tray/dialog/platform packaging, release matrix, artifact retention notes, verification, and remaining Wails risk |
|
|
688
|
+
| Microsoft Edge WebView2 SDK or Runtime selection, `CoreWebView2Environment`, custom initialization, UDFs, profiles, web messages, host objects, document or frame trust, navigation, popups, downloads, permissions, process failures, memory, performance, Evergreen or Fixed Version deployment, WPF, WinForms, WinUI, or Win32 behavior is created, changed, reviewed, debugged, or upgraded | `.mustflow/skills/webview2-code-change/SKILL.md` | Host/Runtime, environment/UDF/profile, trust/bridge/navigation, lifecycle, failure, and performance ledgers; official source evidence; changed files; and command contract entries | Initialization, environment registry, UDF/profile policy, bridge handlers, navigation/frame policy, popup/download/permission lifecycle, process recovery, memory/performance diagnostics, Runtime update, packaging, tests, and docs | implicit `Source` initialization, UDF deletion retry, SDK/Runtime confusion, untrusted native RPC, prefix origin check, broad host object, stale navigation result, leaked event/deferral/child/download, recovery loop, process-count theater, timing misdiagnosis, Evergreen update not adopted, or unowned Fixed Runtime patching | `changes_status`, `changes_diff_summary`, `lint`, `build`, `test_related`, `test`, `docs_validate_fast`, `mustflow_check` | Host/SDK/Runtime/distribution decision, environment/UDF/profile/process/document ownership, bridge/navigation/lifecycle/security/memory/performance findings, verification, and remaining WebView2 risk |
|
|
689
|
+
| Hetzner Cloud or Dedicated infrastructure, hcloud or API integrations, Terraform provider resources, servers, networks, load balancers, firewalls, IPs, placement groups, volumes, backups, Object Storage, Storage Box, cloud-init, Docker or Coolify hosting, Kubernetes CCM or CSI integration, monitoring, recovery, capacity, cost, or Hetzner-related deployment tests are created, changed, reviewed, debugged, migrated, or upgraded | `.mustflow/skills/hetzner-cloud-change/SKILL.md` | Target repository and environment, Hetzner project or account boundary, infrastructure source and state owner, resource and credential ledger, failure domains, traffic and storage model, container data paths, guest network owner, CCM/CSI compatibility, RPO/RTO, workload and capacity evidence, current official provider facts, changed files, and command contract entries | Hetzner IaC, provider integrations, bootstrap config, images, guest networking, container mounts, orchestration drivers, application resilience code, health checks, monitoring, tests, fixtures, runbooks, architecture docs, cost guardrails, and directly synchronized templates | Placement Group treated as an availability zone, Firewall allowlists treated as overrides, outbound or existing-session semantics ignored, label selection treated as applied state, private Network treated as encrypted or filtered, L3 Network treated as VLAN, competing DHCP owners, load balancer or Floating IP treated as automatic location failover, DDoS filtering treated as WAF or origin authentication, Docker named volume treated as Hetzner Volume, missing mount creating fresh state, Object Storage treated as POSIX, unpinned CCM/CSI compatibility, replicated storage or server Backup treated as independent backup, provider-only monitoring or recovery control, unfenced IP move, untested private-only recovery, irreversible rescale, architecture mismatch, arbitrary performance thresholds, destructive raw-device benchmark, powered-off resource assumed free, stale price or limit, autonomous cleanup, or local validation claimed as live provider state | `changes_status`, `changes_diff_summary`, `lint`, `build`, `test_related`, `test`, `docs_validate_fast`, `test_release`, `mustflow_check` | Hetzner boundary and resource ledger, refreshed provider facts and integration versions, failure-domain/network/firewall/credential/storage/mount/backup/restore decisions, compute/performance/capacity/cost evidence, state layers verified, files changed, command intents run, manual provider checks, and remaining Hetzner risk |
|
|
688
690
|
| File path handling, cross-platform path behavior, path helpers, safe filesystem wrappers, clone or checkout destinations, scaffold roots, temp or cache paths, atomic writes, locks, archive extraction, uploads, downloads, scanners, CLI/API/schema path contracts, snapshots, generated outputs, or package artifact paths are created, changed, reviewed, or reported | `.mustflow/skills/file-path-cross-platform-change/SKILL.md` | Path ledger, trust classes, accepted path representation, base root, path helpers, safe filesystem wrappers, clone/checkout/scaffold/install/extract outputs, staging and promotion policy, temp/cache helpers, lock policy, archive policy, upload/download policy, scanner policy, CLI/API/schema/snapshot/generated/package surfaces, platform expectations, failure taxonomy, and command contract entries | Path validators, helpers, wrappers, schemas, CLI/API parsing, snapshots, fixtures, docs, tests, generated-output paths, package artifact paths, clone or scaffold destinations, archive extraction, scanner bounds, temp/cache handling, locks, and cleanup code | path traversal, base containment bypass, drive-relative path bug, reserved-name bug, case-collision bug, Unicode-collision bug, Git checkout path-length failure misreported as network or auth, unsafe archive extraction, non-atomic write claim, stale lock, scanner loop, partial-output cleanup data loss, user-selected destination deletion, path contract drift, or package artifact path drift | `changes_status`, `changes_diff_summary`, `lint`, `build`, `test_related`, `test`, `docs_validate_fast`, `test_release`, `mustflow_check` | Path contract, path ledger, trust classes, root policy, preflight/staging/promotion decisions, Windows/macOS/Linux/archive/upload/download/scanner/lock/temp/cache/atomic/cleanup decisions, failure taxonomy, synchronized contract surfaces, verification, and remaining path risk |
|
|
689
691
|
| File paths, directories, symlinks, real paths, traversal, NTFS alternate data streams, Windows 8.3 short names, Windows namespace prefixes, atomic writes, file copies, generated outputs, temporary files, clone or checkout materialization, cleanup, or Windows/POSIX filesystem behavior are created, changed, reviewed, or reported | `.mustflow/skills/cross-platform-filesystem-safety/SKILL.md` | Path inputs, base directory, trust boundary, symlink policy, write or cleanup strategy, clone/checkout/scaffold/install/extract path budget, app-owned staging boundary, platform expectations, ADS and short-name behavior, failure taxonomy, and command contract entries | Path validation, file helpers, copy/update/delete code, clone/scaffold/archive cleanup code, scan bounds, dev-server or file-serving deny checks, fixtures, tests, docs, and templates | path traversal, symlink escape, unsafe overwrite, Windows ADS bypass, 8.3 short-name bypass, namespace-prefix bypass, platform-only behavior, stale output, path-length or filename-length misclassification, watcher/resource misclassification, or cleanup data loss | `changes_status`, `changes_diff_summary`, `test_related`, `docs_validate_fast`, `test_release`, `mustflow_check` | Path trust classes, root boundary, symlink/write/delete/scan decisions, ADS and short-name handling, preflight and staging boundaries, clone/scaffold/extract classification, platform assumptions, verification, and remaining filesystem risk |
|
|
690
692
|
| Child processes, shell or argv execution, built-in command reruns, Git/package-manager/scaffolder failures, timeouts, process trees, output limits, streaming, environment policy, command eligibility, failure classification, command-line length limits, or execution receipts are created, changed, reviewed, or reported | `.mustflow/skills/process-execution-safety/SKILL.md` | Execution path, timeout, output limit, stdin, argv and shell command-length budget, environment, cwd, process tree behavior, failure taxonomy, receipt and write-tracking expectations, and command contract entries | Process execution code, process-tree helpers, output buffers, environment creation, eligibility checks, failure classifiers, receipts, tests, and docs | runaway process, unbounded output, leaked environment, argv-too-long failure, shell-command-too-long failure, inconsistent JSON/text execution, false cleanup claim, Git checkout path failure misreported as network or auth, blind retry, diagnostic loss, or unreliable receipt | `changes_status`, `changes_diff_summary`, `test_related`, `test_release`, `mustflow_check` | Execution surface, timeout/output/environment/process-tree boundaries, argv and shell length handling, failure classification, diagnostic preservation, receipt consistency, tests, verification, and remaining process risk |
|
|
@@ -778,7 +780,6 @@ routes. Event routes stay inactive until their event occurs.
|
|
|
778
780
|
| Skill procedures or routes are created or maintained, or their conditional, exception-bearing, authority-sensitive, universal, completion, or cross-repository verification claims need logical review | `.mustflow/skills/skill-authoring/SKILL.md` | Repeated task evidence, selected repository boundary, explicit parent dependencies, nearby rules, positive cases, boundary cases, and counterexamples | `.mustflow/skills/**` | overlap, command drift, cross-root verification inheritance, converse inference, unbounded quantifier, contradictory branch, flat authority ranking, unreachable stop state, or unobservable postcondition | `mustflow_check`, `docs_validate` | Skill route and procedure changes, logical consistency and repository-boundary result, counterexamples checked, and claims narrowed |
|
|
779
781
|
| Agent A designs and Agent B implements from a versioned handoff, private `.agent` planning files, local-only ignored design state, manifest/plan/state ledgers, startup gates, allowed-path gates, blocker/deviation ledgers, or completion gates | `.mustflow/skills/design-implementation-handoff/SKILL.md` | Target repository, Agent A and Agent B surfaces, privacy mode, public behavior source, private handoff paths, ownership, allowed and forbidden paths, task dependencies, verification expectations, and remote-agent transfer boundary | `AGENTS.md`, public spec files, private `.agent` handoff files, ignore or exclude guidance, handoff templates, instruction artifacts, tests, docs, and directly synchronized workflow surfaces | hidden-only product contract, private-file leak, remote agent missing local context, plan/state version drift, Agent B editing Agent A-owned files, overly broad allowed paths, unbacked ignored files, or false completion evidence | `changes_status`, `changes_diff_summary`, `docs_validate_fast`, `mustflow_check` | Handoff mode, public versus private file split, Agent A/B ownership, startup and task gates, ignore or exclude decision, remote-agent limitation, verification gates, and remaining privacy or handoff risk |
|
|
780
782
|
| Work instructions for coding agents, Codex tasks, work orders, issues, PR requests, automations, implementation briefs, reviews, proofs, cleanup tasks, or operational-readiness tasks are drafted, reviewed, or improved | `.mustflow/skills/task-instruction-authoring/SKILL.md` | Target agent surface, task family, goal, scope, constraints, durable rules, risk class, verification expectations, and required output | Instruction artifacts, work-order bodies, issue bodies, templates, docs, skills, checklists, and directly synchronized workflow surfaces | vague goal, delegated product decision, missing acceptance evidence, unsafe raw command, proof theater, review blade drift, overlong one-off policy, or operational-readiness gap | `changes_status`, `changes_diff_summary`, `docs_validate_fast`, `mustflow_check` | Instruction family, missing decisions, final instruction or rubric, durable guidance decision, verification expectations, and remaining ambiguity or operational risk |
|
|
781
|
-
|
|
782
783
|
When introducing a new skill, link it here and define the specific trigger and route fields.
|
|
783
784
|
Avoid including raw shell commands in skill documents; instead, reference the command intent
|
|
784
785
|
names as defined in `.mustflow/config/commands.toml`.
|
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
---
|
|
2
|
+
mustflow_doc: skill.hetzner-cloud-change
|
|
3
|
+
locale: en
|
|
4
|
+
canonical: true
|
|
5
|
+
revision: 2
|
|
6
|
+
lifecycle: mustflow-owned
|
|
7
|
+
authority: procedure
|
|
8
|
+
name: hetzner-cloud-change
|
|
9
|
+
description: Apply this skill when Hetzner Cloud or Dedicated infrastructure, hcloud or API integrations, Terraform provider resources, servers, networks, load balancers, firewalls, IPs, placement groups, volumes, backups, Object Storage, Storage Box, cloud-init, Docker or Coolify hosting, Kubernetes CCM or CSI integration, monitoring, recovery, capacity, cost, or Hetzner-related deployment tests are created, changed, reviewed, debugged, migrated, or upgraded.
|
|
10
|
+
metadata:
|
|
11
|
+
mustflow_schema: "1"
|
|
12
|
+
mustflow_kind: procedure
|
|
13
|
+
pack_id: mustflow.core
|
|
14
|
+
skill_id: mustflow.core.hetzner-cloud-change
|
|
15
|
+
command_intents:
|
|
16
|
+
- changes_status
|
|
17
|
+
- changes_diff_summary
|
|
18
|
+
- lint
|
|
19
|
+
- build
|
|
20
|
+
- test_related
|
|
21
|
+
- test
|
|
22
|
+
- docs_validate_fast
|
|
23
|
+
- test_release
|
|
24
|
+
- mustflow_check
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
# Hetzner Cloud Change
|
|
28
|
+
|
|
29
|
+
<!-- mustflow-section: purpose -->
|
|
30
|
+
## Purpose
|
|
31
|
+
|
|
32
|
+
Change or review Hetzner infrastructure without confusing one resilience mechanism with a complete
|
|
33
|
+
availability, backup, recovery, security, performance, or cost design.
|
|
34
|
+
|
|
35
|
+
Treat Hetzner as a provider with distinct compute, network, storage, control-plane, account, and
|
|
36
|
+
location failure domains. Prove the current provider contract from official documentation instead
|
|
37
|
+
of carrying old prices, limits, product availability, or console behavior into a durable design.
|
|
38
|
+
|
|
39
|
+
<!-- mustflow-section: use-when -->
|
|
40
|
+
## Use When
|
|
41
|
+
|
|
42
|
+
- A task changes Hetzner Cloud, Dedicated, Robot, hcloud, API, Terraform, Pulumi, Ansible, cloud-init,
|
|
43
|
+
image, server, server type, architecture, location, network zone, private Network, Load Balancer,
|
|
44
|
+
Firewall, Primary IP, Floating IP, Placement Group, Volume, Backup, Snapshot, Object Storage,
|
|
45
|
+
Storage Box, DNS failover, monitoring, capacity, restore, or disaster-recovery behavior.
|
|
46
|
+
- A review claims that a Hetzner design is highly available, private, encrypted, backed up,
|
|
47
|
+
recoverable, scalable, cost-effective, or production-ready.
|
|
48
|
+
- A Hetzner incident or performance investigation may lead to infrastructure, application,
|
|
49
|
+
runbook, test, monitoring, or capacity changes.
|
|
50
|
+
- Docker, Coolify, Kubernetes, a cloud-controller manager, CSI driver, CNI, ingress, egress gateway,
|
|
51
|
+
container registry, or orchestration platform depends on Hetzner networking, storage, metadata,
|
|
52
|
+
load-balancer, image, architecture, or API behavior.
|
|
53
|
+
|
|
54
|
+
<!-- mustflow-section: do-not-use-when -->
|
|
55
|
+
## Do Not Use When
|
|
56
|
+
|
|
57
|
+
- The task is provider-neutral cost review only; use `cloud-cost-guardrail-review`.
|
|
58
|
+
- The task is provider-neutral rollout, canary, drain, probe, or rollback review only; use
|
|
59
|
+
`deployment-rollout-safety-review`.
|
|
60
|
+
- The task only changes Docker build or runtime behavior without a Hetzner boundary; use
|
|
61
|
+
`docker-code-change` or `docker-runtime-triage`.
|
|
62
|
+
- The task only diagnoses application code, database queries, Linux performance, or networking
|
|
63
|
+
after evidence has excluded Hetzner resources and provider behavior.
|
|
64
|
+
- The user asks for a live production mutation, deletion, failover, restore, rescale, or provider
|
|
65
|
+
purchase that no configured command intent authorizes.
|
|
66
|
+
|
|
67
|
+
<!-- mustflow-section: required-inputs -->
|
|
68
|
+
## Required Inputs
|
|
69
|
+
|
|
70
|
+
- Target repository, environment, Hetzner project or account boundary, infrastructure source of
|
|
71
|
+
truth, state owner, changed files, and configured command intents.
|
|
72
|
+
- Resource ledger: Cloud or Dedicated servers, architecture and server types, images, locations,
|
|
73
|
+
network zones, Placement Groups, Networks, routes, Load Balancers, Firewalls, Primary and Floating
|
|
74
|
+
IPs, Volumes, Backups, Snapshots, buckets, Storage Boxes, DNS, certificates, metadata endpoints,
|
|
75
|
+
guest network-config owners, container data paths, orchestration drivers, monitoring, and tokens.
|
|
76
|
+
- Failure-domain and recovery model: host, rack or unknown facility boundary, location, network zone,
|
|
77
|
+
provider control plane, DNS, account, credential, operator error, data corruption, and dependency
|
|
78
|
+
failure; required RPO, RTO, restore evidence, and traffic or data failover path.
|
|
79
|
+
- Runtime and traffic model: ingress, egress, east-west traffic, health checks, TLS termination,
|
|
80
|
+
connection draining, long-lived connections, retries, idempotency, queue leases, replication,
|
|
81
|
+
storage consistency, and peak connection or throughput demand.
|
|
82
|
+
- Capacity and cost model: actual workload measurements, architecture compatibility, quota, current
|
|
83
|
+
SKU and location availability, current provider prices, retention, egress, IP, storage, backup,
|
|
84
|
+
and idle-resource costs.
|
|
85
|
+
- Current official Hetzner documentation for every date-sensitive price, limit, availability,
|
|
86
|
+
billing, networking, backup, restore, or product-capability claim used in the decision.
|
|
87
|
+
|
|
88
|
+
<!-- mustflow-section: preconditions -->
|
|
89
|
+
## Preconditions
|
|
90
|
+
|
|
91
|
+
- Read the actual IaC, config, code, tests, runbooks, state boundaries, and current official Hetzner
|
|
92
|
+
documentation before recommending or changing provider behavior.
|
|
93
|
+
- Separate declared configuration, provider-accepted configuration, and observed runtime state.
|
|
94
|
+
One layer does not prove the next.
|
|
95
|
+
- Treat attached reports, old docs, console screenshots, blogs, and AI summaries as leads to verify,
|
|
96
|
+
not as current provider authority.
|
|
97
|
+
- Keep provider credentials, state files, private addresses, customer data, and recovery secrets out
|
|
98
|
+
of repository output and test fixtures.
|
|
99
|
+
- Provider CLI, API, console, apply, import, state mutation, purchase, deletion, failover, and restore
|
|
100
|
+
actions remain manual-only unless a configured oneshot command intent explicitly permits them.
|
|
101
|
+
|
|
102
|
+
<!-- mustflow-section: allowed-edits -->
|
|
103
|
+
## Allowed Edits
|
|
104
|
+
|
|
105
|
+
- Update Hetzner IaC, provider integrations, bootstrap configuration, images, application resilience
|
|
106
|
+
code, health checks, monitoring, tests, fixtures, runbooks, architecture docs, cost guardrails, and
|
|
107
|
+
directly synchronized templates within the user-requested scope.
|
|
108
|
+
- Add validation for immutable-image or reproducible bootstrap paths, multi-architecture artifacts,
|
|
109
|
+
resource labels, deletion protection, bounded scaling, restore evidence, and declared-versus-applied
|
|
110
|
+
state when the repository owns those surfaces.
|
|
111
|
+
- Do not add live credentials, broad provider command wrappers, autonomous cleanup, production
|
|
112
|
+
failover, unbounded autoscaling, or destructive recovery automation outside the command contract.
|
|
113
|
+
- Do not rewrite provider-neutral deployment, cost, database, security, or performance policy inside
|
|
114
|
+
this skill when the matching adjunct skill already owns it.
|
|
115
|
+
|
|
116
|
+
<!-- mustflow-section: procedure -->
|
|
117
|
+
## Procedure
|
|
118
|
+
|
|
119
|
+
1. Classify the provider boundary.
|
|
120
|
+
Record Cloud versus Dedicated, project or account, environment, location, network zone,
|
|
121
|
+
architecture, OS, image, ownership, IaC state, and whether the task changes desired state,
|
|
122
|
+
provider state, guest state, application behavior, or only documentation.
|
|
123
|
+
|
|
124
|
+
2. Build the resource and credential ledger.
|
|
125
|
+
Map each server, IP, Network, route, Load Balancer, target, Firewall, Placement Group, Volume,
|
|
126
|
+
Backup, Snapshot, bucket, Storage Box, DNS record, certificate, token, monitoring path, and state
|
|
127
|
+
store to its owner, lifecycle, protection, cost, and dependent resources. Use projects and token
|
|
128
|
+
scope as blast-radius boundaries; keep read-only monitoring credentials separate from mutation
|
|
129
|
+
credentials and keep break-glass material outside the affected provider boundary.
|
|
130
|
+
|
|
131
|
+
3. Model failures by mechanism instead of by product label.
|
|
132
|
+
For host, location, network-zone, provider-control-plane, DNS, account, credential, operator,
|
|
133
|
+
corruption, and dependency failures, record detection, surviving components, fencing, traffic or
|
|
134
|
+
data transition, and recovery evidence. A spread Placement Group reduces same-host concentration;
|
|
135
|
+
it does not prove location isolation. A Load Balancer, replicated Volume, server Backup, Snapshot,
|
|
136
|
+
and off-provider backup each cover different failures.
|
|
137
|
+
|
|
138
|
+
4. Verify current provider facts.
|
|
139
|
+
Refresh exact prices, quotas, server types, architectures, locations, limits, billing rules,
|
|
140
|
+
supported protocols, IP behavior, MTU, firewall scope, backup contents, restore compatibility,
|
|
141
|
+
Object Lock behavior, metadata endpoints, guest auto-configuration ownership, CCM and CSI
|
|
142
|
+
compatibility, and product availability from official Hetzner sources and maintained provider
|
|
143
|
+
repositories. Record the access date, component version, or digest. Keep time-sensitive values in
|
|
144
|
+
config or evidence, not as timeless prose; never treat a mutable `latest` tag as compatibility proof.
|
|
145
|
+
|
|
146
|
+
5. Review network and recovery reachability together.
|
|
147
|
+
Map ingress, egress, east-west traffic, DNS, TLS, routes, MTU and overlay overhead, allowlists,
|
|
148
|
+
private-address behavior, Firewall coverage, bastion or console access, package and API egress,
|
|
149
|
+
and rescue or rebuild paths. Private does not prove encrypted or filtered. Before removing a
|
|
150
|
+
public path, prove a tested replacement for administration, egress, recovery, and credential
|
|
151
|
+
rotation under the same failure being handled. Treat Cloud Firewall, host firewall, container
|
|
152
|
+
firewall, service identity, and application authorization as separate layers. Verify these
|
|
153
|
+
provider-Firewall semantics from current docs and applied state:
|
|
154
|
+
- assigned allowlists combine; attaching another Firewall does not override an existing broad allow;
|
|
155
|
+
- no outbound rules means allow-all, while adding outbound rules creates an implicit-deny remainder;
|
|
156
|
+
- rule changes do not terminate connections that were already established;
|
|
157
|
+
- label selection is desired scope, not proof that every intended resource was actually attached;
|
|
158
|
+
- private Network traffic and Load Balancer interfaces require their own controls when provider
|
|
159
|
+
Firewall coverage is absent.
|
|
160
|
+
Model the Network as routed L3, not a VLAN or security zone. Verify source-address and route
|
|
161
|
+
constraints for VPN, NAT, custom-router, alias-IP, and failover designs. Give each private NIC one
|
|
162
|
+
configuration owner: provider image automation or explicit guest config, not competing DHCP
|
|
163
|
+
clients. Validate routes, DNS, MTU, large transfers, and recovery after a cold boot.
|
|
164
|
+
|
|
165
|
+
6. Review Load Balancer and IP transitions.
|
|
166
|
+
Separate liveness from readiness; keep readiness bounded to dependencies required to accept new
|
|
167
|
+
work. Verify TLS termination, target protocol, Proxy Protocol compatibility, health-check timing,
|
|
168
|
+
connection and bandwidth budget, drain order, long-lived connection recovery, and independent
|
|
169
|
+
DNS entry points when location-level failover is required. Treat Floating IP movement as an
|
|
170
|
+
explicit fenced transition: isolate the old writer before reassignment and prove the guest-side
|
|
171
|
+
address and routing state. Do not call it automatic failover. Inspect actual public IPv4, public
|
|
172
|
+
IPv6, and private interface state rather than inferring exposure from DNS. Keep DDoS filtering,
|
|
173
|
+
WAF behavior, application abuse control, and origin authentication distinct; hiding a DNS record
|
|
174
|
+
does not prove that an old or direct origin address is unreachable.
|
|
175
|
+
|
|
176
|
+
7. Select compute from workload evidence.
|
|
177
|
+
Compare Cloud and Dedicated ownership burden, shared and dedicated CPU behavior, x86 and Arm
|
|
178
|
+
compatibility, memory duplication, local-disk dependence, replacement speed, and tail latency.
|
|
179
|
+
Correlate application throughput, error rate, queue age, p95 or p99 latency, run queue, CPU PSI,
|
|
180
|
+
steal, `MemAvailable`, swap I/O, memory PSI, storage latency, queue depth, I/O PSI, and fsync
|
|
181
|
+
latency. Do not promote an arbitrary utilization or PSI percentage to a universal threshold.
|
|
182
|
+
Reproduce candidates with identical workload, location, image, and application version when safe.
|
|
183
|
+
|
|
184
|
+
8. Preserve replacement and scaling options.
|
|
185
|
+
Check architecture and image compatibility, root-disk resize irreversibility, local-state loss,
|
|
186
|
+
SKU and location scarcity, quotas, drain behavior, maximum scale, and fallback types before
|
|
187
|
+
rescale or autoscaling changes. Keep state out of disposable compute where practical. Define
|
|
188
|
+
bounded fallback behavior when a preferred type or location cannot be allocated.
|
|
189
|
+
|
|
190
|
+
9. Classify storage by durability and access pattern.
|
|
191
|
+
Distinguish replaceable local storage, block Volume state, object storage, backup archives, and
|
|
192
|
+
Storage Box data. Verify current performance and durability claims rather than copying fixed IOPS
|
|
193
|
+
or throughput values. Replication is availability, not history. Test storage with disposable files
|
|
194
|
+
and realistic I/O shapes; never benchmark a production raw block device destructively.
|
|
195
|
+
Trace the actual byte path from application or container to filesystem, mount, block device, or
|
|
196
|
+
object key. A Docker named volume is not a Hetzner Volume. For required block storage, make mount
|
|
197
|
+
identity and readiness a startup precondition, order consumers after the mount, and fail closed on
|
|
198
|
+
a missing or wrong mount so an empty local directory cannot become a second database. Treat Volume
|
|
199
|
+
attachment, location, growth, and filesystem expansion as explicit operations, not automatic HA.
|
|
200
|
+
Treat Object Storage as an object API, not POSIX, shared block storage, or a database filesystem;
|
|
201
|
+
review overwrite, rename, locking, append, small-object, request, connection, bucket, and source-IP
|
|
202
|
+
limits, including NAT aggregation. For Kubernetes, verify the pinned CCM and CSI versions or
|
|
203
|
+
digests, topology, access modes, attachment behavior, immutable provider fields, and current
|
|
204
|
+
snapshot or migration support before accepting a StatefulSet or LoadBalancer design.
|
|
205
|
+
|
|
206
|
+
10. Build the backup and restore chain.
|
|
207
|
+
Start from application-consistent backup and point-in-time requirements. Record whether root disk,
|
|
208
|
+
attached Volumes, databases, objects, secrets, DNS, certificates, queues, cron, and external state
|
|
209
|
+
are included. Keep an encrypted independently administered copy outside the failure and account
|
|
210
|
+
boundary being protected. Decide Object Lock at bucket creation when required, separate write from
|
|
211
|
+
retention or deletion authority, and test restoration into an isolated target including login,
|
|
212
|
+
reads, writes, workers, schedules, policies, and cutover. Measure achieved data-loss window and
|
|
213
|
+
service restoration time; do not infer RPO or RTO from backup-job success. Design versioning,
|
|
214
|
+
retention lock, lifecycle deletion, encryption, and credential scope as separate controls; prove
|
|
215
|
+
that lifecycle rules cannot delete an application backup chain earlier than the restore contract.
|
|
216
|
+
|
|
217
|
+
11. Keep monitoring and recovery control independent.
|
|
218
|
+
Use guest, application, database, storage, network, backup-age, and synthetic-user signals in
|
|
219
|
+
addition to provider graphs. Place at least one detection and coordination path outside the
|
|
220
|
+
provider failure domain when that failure is in scope. Preserve timestamps, request or job IDs,
|
|
221
|
+
path evidence, provider inventory drift, access and audit events, and bidirectional network
|
|
222
|
+
evidence before replacement or restart hides the fault. Send security-relevant logs to a sink
|
|
223
|
+
whose ingestion identity cannot rewrite or delete retained evidence.
|
|
224
|
+
|
|
225
|
+
12. Prepare rebuild-first incident recovery.
|
|
226
|
+
Separate prevention from containment: a provider Firewall change can block new connections while
|
|
227
|
+
old sessions, application tokens, database sessions, and compromised processes remain active.
|
|
228
|
+
Define clean administrator access, account and token containment, exposure removal, session
|
|
229
|
+
termination, evidence preservation, isolated analysis, clean-image rebuild, validated data
|
|
230
|
+
restoration, and rotation of every secret the compromised workload could read. Do not return a
|
|
231
|
+
patched compromised server or attached forensic disk to the production trust boundary.
|
|
232
|
+
|
|
233
|
+
13. Treat bootstrap as reproducible initialization.
|
|
234
|
+
Keep cloud-init or user data small, versioned, secret-safe, observable, and limited to bootstrap.
|
|
235
|
+
Move substantial configuration into an idempotent, rerunnable, pinned, and testable mechanism.
|
|
236
|
+
Prove failure reporting and rebuild from a clean server; do not rely on a one-shot script whose
|
|
237
|
+
partial completion cannot be distinguished from success. Verify the current metadata API contract,
|
|
238
|
+
deprecated paths, image-specific network auto-configuration owner, and first-boot identity reset.
|
|
239
|
+
|
|
240
|
+
14. Build a live cost and lifecycle ledger.
|
|
241
|
+
Refresh billing rules and prices, then account for active and powered-off compute, IPs, Load
|
|
242
|
+
Balancers, Volumes, Backups, Snapshots, buckets, retained versions, Storage Boxes, egress, and
|
|
243
|
+
Dedicated commitments. Label owner, environment, purpose, protection, and expiry. Cleanup must
|
|
244
|
+
inventory dependencies and protections first and use a configured intent; never turn a cost
|
|
245
|
+
observation into an automatic delete.
|
|
246
|
+
|
|
247
|
+
15. Verify the complete change matrix.
|
|
248
|
+
Cover declared config, parser or schema, plan or diff, focused tests, architecture compatibility,
|
|
249
|
+
bootstrap, health checks, failover fencing, restore, monitoring, cost, docs, and rollback or
|
|
250
|
+
replacement. Run only configured intents. Report provider-side checks that remain manual rather
|
|
251
|
+
than claiming production state from local validation.
|
|
252
|
+
|
|
253
|
+
<!-- mustflow-section: postconditions -->
|
|
254
|
+
## Postconditions
|
|
255
|
+
|
|
256
|
+
- Hetzner resources, owners, failure domains, credentials, network paths, storage classes, recovery
|
|
257
|
+
chain, current provider assumptions, capacity evidence, and cost lifecycle are explicit.
|
|
258
|
+
- Availability, replication, backup, restore, and off-provider recovery claims are kept distinct.
|
|
259
|
+
- Declared, provider-applied, guest-observed, and externally observed states are not conflated.
|
|
260
|
+
- Every changed operational claim has named evidence or is reported as an unverified manual check.
|
|
261
|
+
|
|
262
|
+
<!-- mustflow-section: verification -->
|
|
263
|
+
## Verification
|
|
264
|
+
|
|
265
|
+
Use configured oneshot command intents when available:
|
|
266
|
+
|
|
267
|
+
- `changes_status`
|
|
268
|
+
- `changes_diff_summary`
|
|
269
|
+
- `lint`
|
|
270
|
+
- `build`
|
|
271
|
+
- `test_related`
|
|
272
|
+
- `test`
|
|
273
|
+
- `docs_validate_fast`
|
|
274
|
+
- `test_release`
|
|
275
|
+
- `mustflow_check`
|
|
276
|
+
|
|
277
|
+
Prefer narrower configured IaC validation, provider-mock, network, architecture, bootstrap, restore,
|
|
278
|
+
performance, cost, and runbook checks. Local success does not prove live Hetzner state.
|
|
279
|
+
|
|
280
|
+
<!-- mustflow-section: failure-handling -->
|
|
281
|
+
## Failure Handling
|
|
282
|
+
|
|
283
|
+
- If current official documentation disagrees with an attachment, old runbook, test fixture, or
|
|
284
|
+
remembered provider behavior, use the current contract and report the compatibility impact.
|
|
285
|
+
- If provider state cannot be inspected safely, stop at declared-state verification and name the
|
|
286
|
+
missing provider and runtime checks.
|
|
287
|
+
- If a change removes public reachability, enlarges a root disk, crosses architecture, moves a
|
|
288
|
+
Floating IP, deletes a resource, changes retention, or alters backup custody without a proven
|
|
289
|
+
recovery path, do not proceed with the mutation.
|
|
290
|
+
- If failover lacks fencing, idempotency, bounded retry, quorum, or independent coordination, report
|
|
291
|
+
the split-brain or duplicate-work risk before adding automation.
|
|
292
|
+
- If an isolation change relies only on a new Cloud Firewall while old sessions remain active,
|
|
293
|
+
require a separate connection, process, credential, and evidence-containment plan.
|
|
294
|
+
- If required state storage is missing, mounted at the wrong path, attached in the wrong location, or
|
|
295
|
+
replaced by an empty local directory, fail startup instead of creating fresh state.
|
|
296
|
+
- If an application requires POSIX locks, atomic rename, append, mmap, or low-latency random I/O,
|
|
297
|
+
reject Object Storage as a transparent mounted filesystem.
|
|
298
|
+
- If a provider integration relies on a mutable image tag, removed API field, undocumented metadata
|
|
299
|
+
path, or unverified CSI or CCM feature, pin a compatible version or stop with the compatibility gap.
|
|
300
|
+
- If a cost optimization removes recovery, observability, capacity, architecture compatibility, or
|
|
301
|
+
failure isolation, reject the optimization or add the missing guardrail first.
|
|
302
|
+
- If the needed provider command intent is absent, report it instead of embedding a raw hcloud,
|
|
303
|
+
Terraform, API, SSH, benchmark, delete, rescale, restore, or failover command.
|
|
304
|
+
|
|
305
|
+
<!-- mustflow-section: output-format -->
|
|
306
|
+
## Output Format
|
|
307
|
+
|
|
308
|
+
- Hetzner boundary and resource ledger
|
|
309
|
+
- Current official provider facts refreshed and access date
|
|
310
|
+
- Failure-domain, network, credential, storage, backup, restore, and control-plane decisions
|
|
311
|
+
- Compute, architecture, performance, capacity, cost, and lifecycle evidence
|
|
312
|
+
- Declared, provider, guest, and external state verified
|
|
313
|
+
- Files changed
|
|
314
|
+
- Command intents run
|
|
315
|
+
- Manual or skipped provider checks and reasons
|
|
316
|
+
- Remaining Hetzner availability, recovery, security, performance, and cost risk
|
|
@@ -918,6 +918,18 @@ route_type = "primary"
|
|
|
918
918
|
priority = 90
|
|
919
919
|
applies_to_reasons = ["code_change", "behavior_change", "ui_change", "security_change", "privacy_change", "data_change", "public_api_change", "package_metadata_change", "release_risk"]
|
|
920
920
|
|
|
921
|
+
[routes."webview2-code-change"]
|
|
922
|
+
category = "data_external"
|
|
923
|
+
route_type = "primary"
|
|
924
|
+
priority = 90
|
|
925
|
+
applies_to_reasons = ["code_change", "behavior_change", "ui_change", "security_change", "privacy_change", "data_change", "public_api_change", "package_metadata_change", "performance_change", "release_risk"]
|
|
926
|
+
|
|
927
|
+
[routes."hetzner-cloud-change"]
|
|
928
|
+
category = "data_external"
|
|
929
|
+
route_type = "primary"
|
|
930
|
+
priority = 90
|
|
931
|
+
applies_to_reasons = ["unknown_change", "code_change", "behavior_change", "test_change", "security_change", "privacy_change", "data_change", "migration_change", "docs_change", "workflow_change", "package_metadata_change", "performance_change", "release_risk"]
|
|
932
|
+
|
|
921
933
|
[routes."process-execution-safety"]
|
|
922
934
|
category = "data_external"
|
|
923
935
|
route_type = "primary"
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
mustflow_doc: skill.state-machine-pattern
|
|
3
3
|
locale: en
|
|
4
4
|
canonical: true
|
|
5
|
-
revision:
|
|
5
|
+
revision: 5
|
|
6
6
|
lifecycle: mustflow-owned
|
|
7
7
|
authority: procedure
|
|
8
8
|
name: state-machine-pattern
|
|
@@ -66,6 +66,7 @@ Two states can still require this skill when the lifecycle is meaningful, such a
|
|
|
66
66
|
## Required Inputs
|
|
67
67
|
|
|
68
68
|
- The entity and state field under change.
|
|
69
|
+
- The intended initial state, the user-visible entry state, and the first event or command that should leave it.
|
|
69
70
|
- Complete state list and which states are terminal.
|
|
70
71
|
- Complete event list and the facts each event carries.
|
|
71
72
|
- Current places that change state, validate actions, check state, or render available actions.
|
|
@@ -118,6 +119,8 @@ Two states can still require this skill when the lifecycle is meaningful, such a
|
|
|
118
119
|
5. Write the transition table first.
|
|
119
120
|
- Include every source state, allowed event, guard name, target state, and effect description.
|
|
120
121
|
- Include terminal states explicitly with no outgoing transitions when they are truly terminal.
|
|
122
|
+
- Declare the initial state explicitly and verify it matches the real entry experience. Do not initialize directly into an active state such as `PLAYING`, `RUNNING`, or `PROCESSING` when the user must first see a menu, confirmation, setup, or start action.
|
|
123
|
+
- Model the first user or system action as a real transition. Test that the expected entry action leaves the initial state and that missing runtime prerequisites produce a visible failure or unavailable action instead of a silent no-op.
|
|
121
124
|
- Do not hide transition rules inside handler branches, repository filters, database queries, adapter code, or UI code.
|
|
122
125
|
- Do not let direct `deleted_at` assignment bypass allowed archive, soft-delete, restore, purge, anonymize, or redirect transitions when deletion is a meaningful lifecycle.
|
|
123
126
|
6. Keep guards pure.
|
|
@@ -167,6 +170,7 @@ Two states can still require this skill when the lifecycle is meaningful, such a
|
|
|
167
170
|
- For important domains, document state list, event list, transition table, terminal states, guards, effects, concurrency method, duplicate-event handling, and any cross-machine invariants.
|
|
168
171
|
- Diagrams are secondary. The code transition table is the source of truth.
|
|
169
172
|
17. Test from the transition table.
|
|
173
|
+
- Test the declared initial state and the first permitted transition before testing later lifecycle branches.
|
|
170
174
|
- Test every valid transition.
|
|
171
175
|
- Test representative invalid transitions, especially terminal states and dangerous skipped states.
|
|
172
176
|
- Test guard success and guard failure separately.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
mustflow_doc: skill.svelte-code-change
|
|
3
3
|
locale: en
|
|
4
4
|
canonical: true
|
|
5
|
-
revision:
|
|
5
|
+
revision: 5
|
|
6
6
|
lifecycle: mustflow-owned
|
|
7
7
|
authority: procedure
|
|
8
8
|
name: svelte-code-change
|
|
@@ -98,6 +98,10 @@ Preserve Svelte component reactivity, SvelteKit SSR/server/client execution mode
|
|
|
98
98
|
20. Keep `$effect` dependencies narrow and synchronous. Read dependencies before `await`, `setTimeout`, or callbacks; use `untrack` for incidental logging, snapshots, or non-dependency reads.
|
|
99
99
|
21. Return cleanup from effects that create subscriptions, intervals, observers, sockets, editors, charts, canvas loops, or external library instances.
|
|
100
100
|
22. Treat props as parent-owned. Use callback props for changes and `$bindable` only for narrow form-control-like two-way APIs. Preserve wrapper binding chains or convert them to explicit callbacks.
|
|
101
|
+
- In Svelte 5 runes mode, do not expose local `$state` through an `export { local as prop }` alias and expect a parent `bind:` directive to update. Declare a bindable prop through `$props()` and `$bindable()` when two-way binding is the intended public contract.
|
|
102
|
+
- Do not remove a child component merely to hide a broken DOM-reference handoff. Prefer keeping canvas, editor, chart, media, or other imperative resource creation and cleanup in the component that owns the DOM node. When a parent must coordinate initialization, expose an explicit ready callback carrying the node or initialized handle after the child has mounted.
|
|
103
|
+
- Treat `bind:this` values as unavailable before mount and possibly unavailable again after conditional unmount. Do not assume a parent `onMount` runs after a child-provided reference has propagated through an invalid or indirect binding chain.
|
|
104
|
+
- Do not silently return from required imperative initialization when the DOM node is unexpectedly absent. Distinguish an expected conditional absence from a broken ownership or binding contract, expose the failure during development, and provide a bounded reinitialization path when the node can appear later.
|
|
101
105
|
23. In Svelte 5, treat DOM event handlers as props. When spreading rest props through wrappers, intentionally compose external handlers with internal policy instead of relying on spread order.
|
|
102
106
|
24. Treat snippets as typed render callbacks. Require optional snippet guards, pass row or slot-like data as parameters, and avoid hidden parent-state capture in reusable library components.
|
|
103
107
|
25. In the official-source snapshot checked on 2026-07-11, SvelteKit remote functions were
|
|
@@ -141,6 +145,7 @@ Preserve Svelte component reactivity, SvelteKit SSR/server/client execution mode
|
|
|
141
145
|
- Use `$state.snapshot` before sending proxy state to serializers, workers, chart libraries, equality tools, or external APIs that should see plain data.
|
|
142
146
|
- Use `$derived` for calculations from props, route data, page state, URL state, or local state.
|
|
143
147
|
- Use `$effect` only for browser-side effects, subscriptions, DOM, canvas, analytics, timers, third-party browser libraries, and cleanup.
|
|
148
|
+
- Keep imperative DOM resources in the component that owns the bound node when practical. If ownership must cross a component boundary, use an explicit `$bindable` prop or ready callback and test the handoff instead of exporting local rune state by alias.
|
|
144
149
|
- Use stores for external streams or manual subscribe/unsubscribe interop, not ordinary component state.
|
|
145
150
|
- Use context for parent-owned values shared down the component tree, especially request-scoped layout data.
|
|
146
151
|
- Do not reassign reactive context objects after placing them in context; update their properties or pass getter functions when needed.
|
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
---
|
|
2
|
+
mustflow_doc: skill.webview2-code-change
|
|
3
|
+
locale: en
|
|
4
|
+
canonical: true
|
|
5
|
+
revision: 2
|
|
6
|
+
lifecycle: mustflow-owned
|
|
7
|
+
authority: procedure
|
|
8
|
+
name: webview2-code-change
|
|
9
|
+
description: Apply this skill when Microsoft Edge WebView2 code, SDK or Runtime selection, CoreWebView2Environment initialization, user data folders, profiles, web messages, host objects, document or frame trust, navigation, popups, downloads, permissions, process failures, memory or performance behavior, Evergreen or Fixed Version deployment, WPF, WinForms, WinUI, or Win32 WebView2 tests are created, changed, reviewed, debugged, or upgraded.
|
|
10
|
+
metadata:
|
|
11
|
+
mustflow_schema: "1"
|
|
12
|
+
mustflow_kind: procedure
|
|
13
|
+
pack_id: mustflow.core
|
|
14
|
+
skill_id: mustflow.core.webview2-code-change
|
|
15
|
+
command_intents:
|
|
16
|
+
- changes_status
|
|
17
|
+
- changes_diff_summary
|
|
18
|
+
- lint
|
|
19
|
+
- build
|
|
20
|
+
- test_related
|
|
21
|
+
- test
|
|
22
|
+
- docs_validate_fast
|
|
23
|
+
- mustflow_check
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
# WebView2 Code Change
|
|
27
|
+
|
|
28
|
+
<!-- mustflow-section: purpose -->
|
|
29
|
+
## Purpose
|
|
30
|
+
|
|
31
|
+
Preserve WebView2's runtime, process, storage, initialization, native-bridge, navigation, threading,
|
|
32
|
+
lifecycle, security, performance, update, and deployment boundaries across WPF, WinForms, WinUI,
|
|
33
|
+
and Win32 hosts.
|
|
34
|
+
|
|
35
|
+
Treat WebView2 as a Chromium process group, a persistent browser profile, and a native RPC boundary,
|
|
36
|
+
not as a browser-shaped UI control whose lifetime ends when a window disappears.
|
|
37
|
+
|
|
38
|
+
<!-- mustflow-section: use-when -->
|
|
39
|
+
## Use When
|
|
40
|
+
|
|
41
|
+
- `Microsoft.Web.WebView2`, `CoreWebView2*`, `ICoreWebView2*`, `EnsureCoreWebView2Async`,
|
|
42
|
+
`CreationProperties`, `WebMessageReceived`, `PostWebMessageAsJson`, host objects, virtual host
|
|
43
|
+
mappings, document or frame origins, navigation events, popups, downloads, permissions, process
|
|
44
|
+
events, profiles, or user data folders change.
|
|
45
|
+
- A WPF, WinForms, WinUI, or Win32 application creates, disposes, recycles, packages, diagnoses, or
|
|
46
|
+
tests WebView2 controls or environments.
|
|
47
|
+
- The task chooses or changes Evergreen versus Fixed Version Runtime distribution, feature
|
|
48
|
+
detection, prerelease SDK usage, runtime update adoption, or enterprise update policy.
|
|
49
|
+
- The task investigates initialization failures, incompatible environment options, UDF locks,
|
|
50
|
+
bridge authorization, stale document responses, Runtime update adoption, process-failure
|
|
51
|
+
classification, memory retention, process growth, shutdown delay, rendering stalls, GPU behavior,
|
|
52
|
+
popup or download bugs, or packaged Runtime availability.
|
|
53
|
+
- Durable guidance makes exact claims about current WebView2 SDKs, Runtimes, preview channels,
|
|
54
|
+
release cadence, API stability, platform support, or distribution requirements.
|
|
55
|
+
|
|
56
|
+
<!-- mustflow-section: do-not-use-when -->
|
|
57
|
+
## Do Not Use When
|
|
58
|
+
|
|
59
|
+
- The task is ordinary frontend code with no WebView2 host, native bridge, profile, runtime, or
|
|
60
|
+
packaged behavior; use the matching frontend skill.
|
|
61
|
+
- The task changes a Tauri or Wails application without direct WebView2 APIs or Windows-specific
|
|
62
|
+
runtime behavior; use `tauri-code-change` or `wails-code-change`.
|
|
63
|
+
- The task is only generic desktop memory analysis with no WebView2-specific lifecycle or process
|
|
64
|
+
boundary; use `desktop-memory-footprint-review`.
|
|
65
|
+
- The task only refreshes an external version statement and does not change WebView2 procedure;
|
|
66
|
+
use `source-freshness-check` or `version-freshness-check`.
|
|
67
|
+
|
|
68
|
+
<!-- mustflow-section: required-inputs -->
|
|
69
|
+
## Required Inputs
|
|
70
|
+
|
|
71
|
+
- Host stack and target: WPF, WinForms, WinUI, or Win32; packaged or unpackaged; architecture;
|
|
72
|
+
minimum Windows version; installed SDK package; Runtime distribution mode; and target channels.
|
|
73
|
+
- Environment ledger: Runtime executable folder, normalized user data folder, environment options,
|
|
74
|
+
profile name, InPrivate choice, owner, sharing boundary, initialization call sites, and first
|
|
75
|
+
navigation trigger.
|
|
76
|
+
- Trust ledger: top-level origins, frame origins, virtual host mappings, remote content, injected
|
|
77
|
+
scripts, web-message commands, host objects, native capabilities, navigation and redirect policy,
|
|
78
|
+
popups, downloads, permissions, external schemes, and document-generation rules.
|
|
79
|
+
- Ownership ledger: control, controller, environment, profile, process group, document generation,
|
|
80
|
+
frame, navigation, child window, download, deferral, event subscription, pending bridge request,
|
|
81
|
+
disposal, update, and restart owners.
|
|
82
|
+
- Failure evidence: exception or HRESULT, effective environment options, actual UDF path, Runtime
|
|
83
|
+
and SDK versions, process kind, source origin, crash reason, packaged or unpackaged state, and
|
|
84
|
+
reproduction sequence.
|
|
85
|
+
- Performance evidence: browser, renderer, GPU, or helper process identity; WebView and window
|
|
86
|
+
count; navigation id; page and host timestamps; bridge request ids; memory metric; DevTools or OS
|
|
87
|
+
trace; hidden or suspended state; and before-open, steady-state, after-close, and repeated-cycle
|
|
88
|
+
observations.
|
|
89
|
+
- Current official Microsoft documentation before preserving exact version, release-date,
|
|
90
|
+
stable-versus-prerelease, API phase, runtime cadence, or deployment claims.
|
|
91
|
+
- Configured verification intents for host builds, focused tests, packaged startup, runtime
|
|
92
|
+
detection, initialization, UDF/profile behavior, bridge security, navigation, lifecycle, memory,
|
|
93
|
+
performance, update adoption, and docs.
|
|
94
|
+
|
|
95
|
+
<!-- mustflow-section: preconditions -->
|
|
96
|
+
## Preconditions
|
|
97
|
+
|
|
98
|
+
- Identify the host framework and actual WebView2 SDK and Runtime evidence before changing API
|
|
99
|
+
calls. Do not infer Runtime capability from the NuGet version alone.
|
|
100
|
+
- Distinguish stable APIs, prerelease or experimental APIs, Runtime-only fixes, and future plans.
|
|
101
|
+
Feature-detect recent APIs where deployed Evergreen clients may lag or enterprise policy may
|
|
102
|
+
block updates.
|
|
103
|
+
- Refresh official release notes and concept documentation before writing date-sensitive claims.
|
|
104
|
+
If freshness cannot be checked, keep the procedure version-agnostic and report the gap.
|
|
105
|
+
- Treat web content, messages, frames, paths, URLs, file objects, permission requests, and host
|
|
106
|
+
object arguments as untrusted even when the HTML is bundled with the app.
|
|
107
|
+
- Keep command execution within the selected repository's configured intents.
|
|
108
|
+
|
|
109
|
+
<!-- mustflow-section: allowed-edits -->
|
|
110
|
+
## Allowed Edits
|
|
111
|
+
|
|
112
|
+
- Update WebView2 host initialization, environment registries, profile and UDF policy, bridge DTOs
|
|
113
|
+
and handlers, document trust and navigation policy, popup/download/permission handlers, lifecycle
|
|
114
|
+
owners, update adoption, process-failure diagnostics, performance instrumentation, packaging,
|
|
115
|
+
tests, and directly synchronized docs or templates.
|
|
116
|
+
- Add narrow state machines, registries, typed message envelopes, origin policies, resource
|
|
117
|
+
filters, cleanup paths, or feature-detection adapters when the existing ownership is implicit.
|
|
118
|
+
- Keep framework-specific UI integration in the established WPF, WinForms, WinUI, or Win32 layer.
|
|
119
|
+
- Do not delete or reset a UDF as a generic initialization retry, weaken origin or permission
|
|
120
|
+
checks to make navigation work, or adopt prerelease APIs as production requirements without an
|
|
121
|
+
explicit compatibility decision.
|
|
122
|
+
|
|
123
|
+
<!-- mustflow-section: procedure -->
|
|
124
|
+
## Procedure
|
|
125
|
+
|
|
126
|
+
1. Read package metadata, target framework files, app startup, control creation, environment
|
|
127
|
+
construction, first navigation, event registration, bridge code, window shutdown, packaging,
|
|
128
|
+
tests, and diagnostic hooks. Record the host framework and Runtime distribution mode.
|
|
129
|
+
2. Build one ownership map for four distinct lifetimes:
|
|
130
|
+
- native control and controller;
|
|
131
|
+
- `CoreWebView2Environment`, UDF, profile, and Chromium process group;
|
|
132
|
+
- top-level document, frames, scripts, and bridge requests;
|
|
133
|
+
- host window, application session, restart, update, and uninstall policy.
|
|
134
|
+
Do not use window visibility or field nulling as proof that the other lifetimes ended.
|
|
135
|
+
3. Centralize environment creation. Key a shared initialization task by the effective Runtime path,
|
|
136
|
+
normalized UDF path, environment options, language, browser arguments, and access policy. Reject
|
|
137
|
+
incompatible options for an already-active UDF instead of racing a second environment into it.
|
|
138
|
+
4. Make initialization an explicit state machine such as `Created -> Initializing -> Ready ->
|
|
139
|
+
Closing -> Closed` with one shared task and a generation or cancellation token. Apply creation
|
|
140
|
+
properties or the explicit environment before `EnsureCoreWebView2Async`; register handlers and
|
|
141
|
+
document-created scripts after successful initialization; navigate last. Do not let XAML or
|
|
142
|
+
constructor `Source` start an implicit default initialization first.
|
|
143
|
+
5. Treat UDF and profile design as storage architecture:
|
|
144
|
+
- use a writable, user-local UDF path and avoid network drives;
|
|
145
|
+
- use multiple profiles inside one UDF for account separation within one trust boundary;
|
|
146
|
+
- use different UDFs only for process, trust, regulatory, or independent-lifecycle isolation;
|
|
147
|
+
- use stable opaque profile identifiers rather than email addresses or display names;
|
|
148
|
+
- distinguish logout, browsing-data clearing, profile deletion, factory reset, and uninstall;
|
|
149
|
+
- wait for all owning WebViews and browser processes to exit before moving or deleting a UDF.
|
|
150
|
+
6. Choose Runtime distribution deliberately. Prefer Evergreen unless exact binary reproducibility
|
|
151
|
+
or a constrained certification contract justifies Fixed Version. For Fixed Version, require an
|
|
152
|
+
owned patch SLA, retained signed artifacts and hashes, architecture-specific packaging, update
|
|
153
|
+
and rollback tests, disk-budget evidence, and required filesystem permissions. For Evergreen,
|
|
154
|
+
handle continuous-running apps by coordinating release of all environments or a state-saving
|
|
155
|
+
restart after `NewBrowserVersionAvailable`.
|
|
156
|
+
7. Bind bridge availability to the current trusted document generation. Issue a new document id or
|
|
157
|
+
generation at navigation start, complete a native-to-web handshake only after an allowed origin
|
|
158
|
+
is ready, reject requests from older generations, and cancel pending work when the document,
|
|
159
|
+
renderer, or control is replaced.
|
|
160
|
+
8. Treat every native bridge as a privileged RPC surface:
|
|
161
|
+
- parse and compare exact normalized scheme, host, and effective port; never use prefix matching;
|
|
162
|
+
- keep top-level and frame origin policies separate;
|
|
163
|
+
- use a finite command allowlist with typed request and response schemas, size and depth limits,
|
|
164
|
+
request ids, timeouts, cancellation, idempotency for side effects, and bounded concurrency;
|
|
165
|
+
- bind pending requests to the current document generation and cancel them on navigation,
|
|
166
|
+
renderer loss, or disposal;
|
|
167
|
+
- send data through JSON message APIs instead of interpolating values into script source;
|
|
168
|
+
- expose small capability objects only when messages cannot meet the requirement, and recheck
|
|
169
|
+
native authorization on every host-object call.
|
|
170
|
+
9. Separate trusted app content from external content when native capabilities differ. Prefer a
|
|
171
|
+
dedicated WebView for external pages. Configure scripts, web messages, host objects, and virtual
|
|
172
|
+
host mappings before first navigation. Map only the resource directory, deny unnecessary
|
|
173
|
+
cross-origin access, and keep sensitive files physically outside mapped trees and reparse-point
|
|
174
|
+
escape paths.
|
|
175
|
+
10. Build navigation state around WebView instance, top-level versus frame scope, and
|
|
176
|
+
`NavigationId`:
|
|
177
|
+
- re-evaluate every redirect rather than trusting the first URL;
|
|
178
|
+
- keep same-document source or history changes separate from a new document generation;
|
|
179
|
+
- reject stale completion events after a newer navigation has started;
|
|
180
|
+
- use `IsSuccess`, `WebErrorStatus`, and HTTP status only for transport evidence, not business
|
|
181
|
+
success;
|
|
182
|
+
- keep request-header inspection separate from mutation and restrict injected headers to the
|
|
183
|
+
exact resource context and origin.
|
|
184
|
+
11. Route every escape from the current document through one native policy engine:
|
|
185
|
+
- top-level and frame navigation;
|
|
186
|
+
- `NewWindowRequested` and opener behavior;
|
|
187
|
+
- `LaunchingExternalUriScheme`;
|
|
188
|
+
- downloads and final save paths;
|
|
189
|
+
- script dialogs and permission requests.
|
|
190
|
+
Treat `IsUserInitiated` as a gesture signal, not authorization. Check the initiating frame and
|
|
191
|
+
destination, default-deny unknown schemes and origins, and keep permission decisions keyed by
|
|
192
|
+
origin and permission kind.
|
|
193
|
+
12. Treat popups and downloads as owned asynchronous state:
|
|
194
|
+
- initialize a child WebView under a deferral before assigning `NewWindow`;
|
|
195
|
+
- dispose half-created children when initialization or the parent lifetime fails;
|
|
196
|
+
- distinguish `DownloadStarting.Handled` from `Cancel`;
|
|
197
|
+
- validate the final absolute save path against an allowed directory and safe filename policy;
|
|
198
|
+
- track `CoreWebView2DownloadOperation.State`, including unknown total length, until terminal
|
|
199
|
+
completion or interruption;
|
|
200
|
+
- unregister per-child and per-download handlers at their terminal state.
|
|
201
|
+
13. Preserve the STA threading contract. Create, initialize, and access WebView2 on the UI STA
|
|
202
|
+
thread with a message pump. Keep one asynchronous initialization owner and do not block its
|
|
203
|
+
callbacks with `.Wait()` or `.Result`. When an event requires asynchronous policy work, acquire
|
|
204
|
+
its deferral, enter `try`, and complete exactly once in `finally`; track outstanding deferrals so
|
|
205
|
+
closing can cancel work and still terminate.
|
|
206
|
+
14. Make shutdown idempotent and ordered: mark closing, reject new navigation, popup, bridge, and
|
|
207
|
+
download work, cancel pending operations, complete deferrals, close children, unregister events
|
|
208
|
+
from long-lived publishers, remove host objects, close or dispose the controller or control,
|
|
209
|
+
clear references, and wait for browser exit only when a Runtime or UDF operation requires it.
|
|
210
|
+
Hidden controls remain alive; choose hide, suspend, low-memory mode, and permanent disposal as
|
|
211
|
+
distinct policies.
|
|
212
|
+
15. Coordinate Runtime update adoption and UDF maintenance at the environment-sharing boundary.
|
|
213
|
+
Stop bridge traffic, dispose every WebView using the UDF, release environment references, wait
|
|
214
|
+
for the owning browser process to exit when deletion or replacement requires it, and then create
|
|
215
|
+
the new environment. Recreating one window while another shares the UDF does not adopt a new
|
|
216
|
+
Runtime or release the profile lock.
|
|
217
|
+
16. Classify `ProcessFailed` by process kind and reason before recovery. Distinguish normal exit,
|
|
218
|
+
abnormal exit, integrity failure, renderer unresponsiveness, launch failure, and whole browser
|
|
219
|
+
process exit when the deployed API exposes them. Use nullable crash details as diagnostics, not
|
|
220
|
+
as a required recovery input. Do not recreate for auto-recoverable GPU or utility exits. Coordinate
|
|
221
|
+
browser-process recovery with `BrowserProcessExited`, deduplicate events across controls, and
|
|
222
|
+
bound recovery by environment generation, retry count, backoff, and one concurrent recovery.
|
|
223
|
+
17. Diagnose memory by ownership, not the total of every `msedgewebview2.exe` process. Separate
|
|
224
|
+
JavaScript heap and detached DOM, renderer memory, shared browser or helper processes, native
|
|
225
|
+
window/ViewModel retention, environment event cycles, host-object graphs, pending deferrals,
|
|
226
|
+
hidden controls, and expected caches. Pair process ids with UDF, kind, associated frames, active
|
|
227
|
+
controls, and repeated open-close evidence before calling growth a leak.
|
|
228
|
+
18. Diagnose performance across page and host boundaries. Correlate page performance marks,
|
|
229
|
+
WebView2 event timestamps, navigation ids, process ids, bridge ids, DevTools/CDP traces, and host
|
|
230
|
+
or WPR/WPA traces. Check broad `WebResourceRequested` interception, synchronous UI-thread work,
|
|
231
|
+
bridge chatter, large payloads, slow or network UDF storage, security software, GPU fallback,
|
|
232
|
+
hidden controls, suspension, and low-memory targets before rewriting frontend code.
|
|
233
|
+
19. Verify the smallest relevant matrix: supported Windows and host framework, installed Runtime
|
|
234
|
+
floor, Evergreen current and preview channel when compatibility matters, Fixed artifact when
|
|
235
|
+
used, packaged and unpackaged startup, first and repeated initialization, navigation and frame
|
|
236
|
+
denial, redirect denial, bridge negative cases, popup and download cancellation, deferral
|
|
237
|
+
completion, permission and external-scheme denial, process-failure recovery, repeated open-close
|
|
238
|
+
memory, planned restart, and UDF cleanup or retention policy.
|
|
239
|
+
|
|
240
|
+
<!-- mustflow-section: hard-bans -->
|
|
241
|
+
## Hard Bans
|
|
242
|
+
|
|
243
|
+
- Do not treat the NuGet SDK version as proof of the installed Runtime version or API availability.
|
|
244
|
+
- Do not set `Source` before custom environment initialization and then attempt to replace the
|
|
245
|
+
environment.
|
|
246
|
+
- Do not delete a UDF because initialization threw an unclassified exception.
|
|
247
|
+
- Do not authorize native work from `Source.StartsWith`, `IsUserInitiated`, a frontend role flag,
|
|
248
|
+
an arbitrary reflected method name, or a path supplied by JavaScript.
|
|
249
|
+
- Do not expose a service container, application object, shell execution, unrestricted filesystem,
|
|
250
|
+
secrets, tokens, or broad host object to web content.
|
|
251
|
+
- Do not leave event subscriptions, host objects, pending bridge requests, document generations,
|
|
252
|
+
environment references, deferrals, child windows, downloads, or profile locks without an explicit
|
|
253
|
+
owner and cleanup path.
|
|
254
|
+
- Do not treat `IsUserInitiated`, `NavigationCompleted`, `DownloadStarting`, process count, or a
|
|
255
|
+
lower working set as proof of a safe destination, business success, completed download, memory
|
|
256
|
+
leak, or reduced live memory.
|
|
257
|
+
- Do not ship prerelease or experimental API assumptions as a stable production contract without
|
|
258
|
+
feature detection, compatibility bounds, and fallback behavior.
|
|
259
|
+
|
|
260
|
+
<!-- mustflow-section: postconditions -->
|
|
261
|
+
## Postconditions
|
|
262
|
+
|
|
263
|
+
- Host, SDK, Runtime, channel, distribution mode, environment, UDF, profile, document, and process
|
|
264
|
+
ownership are explicit.
|
|
265
|
+
- Initialization, navigation, bridge, popup, download, permission, deferral, process failure,
|
|
266
|
+
update adoption, and UDF cleanup paths have bounded states and terminal cleanup.
|
|
267
|
+
- Origin, frame, message schema, native authorization, permission, filesystem, and external-launch
|
|
268
|
+
boundaries are enforced on the native side.
|
|
269
|
+
- Memory and performance claims name the process, metric, scenario, timestamps, and after-close or
|
|
270
|
+
recovery evidence.
|
|
271
|
+
- Missing packaged, Runtime-channel, initialization, security-negative, lifecycle, memory, or
|
|
272
|
+
process diagnostic coverage is reported rather than hidden behind a generic frontend test.
|
|
273
|
+
|
|
274
|
+
<!-- mustflow-section: verification -->
|
|
275
|
+
## Verification
|
|
276
|
+
|
|
277
|
+
Use configured oneshot command intents when available:
|
|
278
|
+
|
|
279
|
+
- `changes_status`
|
|
280
|
+
- `changes_diff_summary`
|
|
281
|
+
- `lint`
|
|
282
|
+
- `build`
|
|
283
|
+
- `test_related`
|
|
284
|
+
- `test`
|
|
285
|
+
- `docs_validate_fast`
|
|
286
|
+
- `mustflow_check`
|
|
287
|
+
|
|
288
|
+
Report missing WebView2-specific intents when relevant: packaged startup smoke, installed Runtime
|
|
289
|
+
detection, SDK/Runtime compatibility, custom-environment initialization, UDF/profile isolation,
|
|
290
|
+
origin and frame denial, malformed or oversized bridge messages, host-object reachability,
|
|
291
|
+
document-generation invalidation, redirect denial, popup initialization, download cancellation and
|
|
292
|
+
path safety, deferral completion, permission and external-scheme denial, process-failure recovery,
|
|
293
|
+
repeated open-close memory, Evergreen restart adoption, Fixed Version packaging, GPU fallback, and
|
|
294
|
+
preview-channel regression.
|
|
295
|
+
|
|
296
|
+
<!-- mustflow-section: failure-handling -->
|
|
297
|
+
## Failure Handling
|
|
298
|
+
|
|
299
|
+
- If initialization fails, classify environment option mismatch, UDF path or permission, Runtime
|
|
300
|
+
discovery, window handle, UI thread, disposed control, policy override, and browser-process exit
|
|
301
|
+
before retrying or touching stored data.
|
|
302
|
+
- If a blank view appears only after packaging, inspect built assets, virtual host mappings, CSP,
|
|
303
|
+
navigation denial, Runtime availability, architecture loaders, and packaged path permissions
|
|
304
|
+
before changing application state.
|
|
305
|
+
- If bridge responses are stale or duplicated, add document generations, request correlation,
|
|
306
|
+
cancellation, idempotency, and bounded queues before adding retries.
|
|
307
|
+
- If a UDF remains locked, inspect shared environments, other app instances, active WebViews,
|
|
308
|
+
environment references, and browser-process exit before deleting, moving, or recreating it.
|
|
309
|
+
- If a popup, download, dialog, permission, or external launch hangs, inspect deferral completion,
|
|
310
|
+
parent lifetime, initiating frame, terminal operation state, and event cleanup before adding a
|
|
311
|
+
retry or bypass.
|
|
312
|
+
- If memory or processes remain after close, inspect shared UDF ownership, environment event cycles,
|
|
313
|
+
host objects, child windows, downloads, deferrals, hidden controls, renderer heap, and expected
|
|
314
|
+
caches before forcing termination or trimming working sets.
|
|
315
|
+
- If a performance trace disagrees with page timing, preserve both observations and correlate the
|
|
316
|
+
page, WebView event, process, bridge, and OS timelines before assigning the bottleneck.
|
|
317
|
+
- If exact current release claims cannot be refreshed from official sources, remove the precise
|
|
318
|
+
claim from durable guidance and report the unverified boundary.
|
|
319
|
+
- If repository intents cannot exercise a Windows or packaged path, report the missing platform
|
|
320
|
+
evidence and keep the completion claim limited to the checks actually run.
|
|
321
|
+
|
|
322
|
+
<!-- mustflow-section: output-format -->
|
|
323
|
+
## Output Format
|
|
324
|
+
|
|
325
|
+
- WebView2 boundary checked
|
|
326
|
+
- Host, SDK, Runtime, channel, and distribution mode
|
|
327
|
+
- Environment, UDF, profile, process, document, frame, and lifecycle ownership notes
|
|
328
|
+
- Initialization, UDF/profile, document/frame trust, bridge, and native authorization findings
|
|
329
|
+
- Navigation, redirect, popup, download, permission, external-launch, and deferral findings
|
|
330
|
+
- Runtime distribution, lifecycle, update adoption, process-failure, memory, performance, and
|
|
331
|
+
packaging findings
|
|
332
|
+
- Files changed
|
|
333
|
+
- Command intents run
|
|
334
|
+
- Skipped checks and reasons
|
|
335
|
+
- Remaining WebView2 risk
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
id = "default"
|
|
2
2
|
name = "default"
|
|
3
|
-
version = "2.115.
|
|
3
|
+
version = "2.115.14"
|
|
4
4
|
description = "Minimal workflow for LLM agents to read, edit, and verify their work in a repository."
|
|
5
5
|
common_root = "common"
|
|
6
6
|
locales_root = "locales"
|
|
@@ -132,6 +132,8 @@ creates = [
|
|
|
132
132
|
".mustflow/skills/tailwind-code-change/SKILL.md",
|
|
133
133
|
".mustflow/skills/tauri-code-change/SKILL.md",
|
|
134
134
|
".mustflow/skills/wails-code-change/SKILL.md",
|
|
135
|
+
".mustflow/skills/webview2-code-change/SKILL.md",
|
|
136
|
+
".mustflow/skills/hetzner-cloud-change/SKILL.md",
|
|
135
137
|
".mustflow/skills/typescript-code-change/SKILL.md",
|
|
136
138
|
".mustflow/skills/unocss-code-change/SKILL.md",
|
|
137
139
|
".mustflow/skills/cli-option-contract-review/SKILL.md",
|
|
@@ -373,6 +375,8 @@ minimal = [
|
|
|
373
375
|
"tailwind-code-change",
|
|
374
376
|
"tauri-code-change",
|
|
375
377
|
"wails-code-change",
|
|
378
|
+
"webview2-code-change",
|
|
379
|
+
"hetzner-cloud-change",
|
|
376
380
|
"typescript-code-change",
|
|
377
381
|
"unocss-code-change",
|
|
378
382
|
"command-contract-authoring",
|
|
@@ -550,6 +554,8 @@ patterns = [
|
|
|
550
554
|
"tailwind-code-change",
|
|
551
555
|
"tauri-code-change",
|
|
552
556
|
"wails-code-change",
|
|
557
|
+
"webview2-code-change",
|
|
558
|
+
"hetzner-cloud-change",
|
|
553
559
|
"typescript-code-change",
|
|
554
560
|
"unocss-code-change",
|
|
555
561
|
"command-contract-authoring",
|
|
@@ -738,6 +744,8 @@ oss = [
|
|
|
738
744
|
"tailwind-code-change",
|
|
739
745
|
"tauri-code-change",
|
|
740
746
|
"wails-code-change",
|
|
747
|
+
"webview2-code-change",
|
|
748
|
+
"hetzner-cloud-change",
|
|
741
749
|
"typescript-code-change",
|
|
742
750
|
"unocss-code-change",
|
|
743
751
|
"cli-option-contract-review",
|
|
@@ -945,6 +953,8 @@ team = [
|
|
|
945
953
|
"tailwind-code-change",
|
|
946
954
|
"tauri-code-change",
|
|
947
955
|
"wails-code-change",
|
|
956
|
+
"webview2-code-change",
|
|
957
|
+
"hetzner-cloud-change",
|
|
948
958
|
"typescript-code-change",
|
|
949
959
|
"unocss-code-change",
|
|
950
960
|
"command-contract-authoring",
|
|
@@ -1136,6 +1146,8 @@ product = [
|
|
|
1136
1146
|
"tailwind-code-change",
|
|
1137
1147
|
"tauri-code-change",
|
|
1138
1148
|
"wails-code-change",
|
|
1149
|
+
"webview2-code-change",
|
|
1150
|
+
"hetzner-cloud-change",
|
|
1139
1151
|
"typescript-code-change",
|
|
1140
1152
|
"unocss-code-change",
|
|
1141
1153
|
"command-contract-authoring",
|
|
@@ -1333,6 +1345,8 @@ library = [
|
|
|
1333
1345
|
"tailwind-code-change",
|
|
1334
1346
|
"tauri-code-change",
|
|
1335
1347
|
"wails-code-change",
|
|
1348
|
+
"webview2-code-change",
|
|
1349
|
+
"hetzner-cloud-change",
|
|
1336
1350
|
"typescript-code-change",
|
|
1337
1351
|
"unocss-code-change",
|
|
1338
1352
|
"cli-option-contract-review",
|