mustflow 2.22.17 → 2.22.47

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/README.md +6 -0
  2. package/dist/cli/commands/api.js +874 -0
  3. package/dist/cli/commands/dashboard.js +51 -4
  4. package/dist/cli/commands/explain.js +3 -2
  5. package/dist/cli/commands/help.js +0 -1
  6. package/dist/cli/commands/run.js +41 -4
  7. package/dist/cli/commands/verify.js +4 -43
  8. package/dist/cli/i18n/en.js +15 -0
  9. package/dist/cli/i18n/es.js +15 -0
  10. package/dist/cli/i18n/fr.js +15 -0
  11. package/dist/cli/i18n/hi.js +15 -0
  12. package/dist/cli/i18n/ko.js +15 -0
  13. package/dist/cli/i18n/zh.js +15 -0
  14. package/dist/cli/index.js +1 -0
  15. package/dist/cli/lib/cli-output.js +1 -1
  16. package/dist/cli/lib/command-registry.js +6 -0
  17. package/dist/cli/lib/dashboard-html/client-script.js +9 -0
  18. package/dist/cli/lib/dashboard-html/styles.js +48 -1
  19. package/dist/cli/lib/doc-review-ledger.js +1 -1
  20. package/dist/cli/lib/local-index/index.js +324 -298
  21. package/dist/cli/lib/repo-map.js +19 -5
  22. package/dist/cli/lib/validation/index.js +6 -2
  23. package/dist/core/active-run-locks.js +36 -8
  24. package/dist/core/atomic-state-write.js +5 -20
  25. package/dist/core/change-verification.js +18 -2
  26. package/dist/core/contract-lint.js +3 -3
  27. package/dist/core/public-json-contracts.js +48 -0
  28. package/dist/core/repeated-failure.js +1 -1
  29. package/dist/core/run-write-drift.js +30 -17
  30. package/dist/core/safe-filesystem.js +54 -5
  31. package/dist/core/skill-route-explanation.js +2 -1
  32. package/dist/core/source-anchors.js +7 -3
  33. package/dist/core/validation-ratchet.js +61 -18
  34. package/dist/core/verification-decision-graph.js +8 -1
  35. package/dist/core/verification-plan-id.js +44 -0
  36. package/package.json +1 -1
  37. package/schemas/README.md +6 -0
  38. package/schemas/command-catalog.schema.json +158 -0
  39. package/schemas/diff-risk.schema.json +74 -0
  40. package/schemas/health.schema.json +45 -0
  41. package/schemas/latest-evidence.schema.json +95 -0
  42. package/schemas/verification-plan.schema.json +245 -0
  43. package/schemas/workspace-summary.schema.json +282 -0
  44. package/templates/default/i18n.toml +139 -1
  45. package/templates/default/locales/en/.mustflow/skills/INDEX.md +24 -1
  46. package/templates/default/locales/en/.mustflow/skills/api-contract-change/SKILL.md +212 -0
  47. package/templates/default/locales/en/.mustflow/skills/astro-code-change/SKILL.md +184 -0
  48. package/templates/default/locales/en/.mustflow/skills/auth-permission-change/SKILL.md +194 -0
  49. package/templates/default/locales/en/.mustflow/skills/config-env-change/SKILL.md +189 -0
  50. package/templates/default/locales/en/.mustflow/skills/css-code-change/SKILL.md +199 -0
  51. package/templates/default/locales/en/.mustflow/skills/dart-code-change/SKILL.md +179 -0
  52. package/templates/default/locales/en/.mustflow/skills/database-migration-change/SKILL.md +178 -0
  53. package/templates/default/locales/en/.mustflow/skills/dependency-upgrade-review/SKILL.md +151 -0
  54. package/templates/default/locales/en/.mustflow/skills/elysia-code-change/SKILL.md +115 -0
  55. package/templates/default/locales/en/.mustflow/skills/file-path-cross-platform-change/SKILL.md +147 -0
  56. package/templates/default/locales/en/.mustflow/skills/flutter-code-change/SKILL.md +116 -0
  57. package/templates/default/locales/en/.mustflow/skills/go-code-change/SKILL.md +156 -0
  58. package/templates/default/locales/en/.mustflow/skills/hono-code-change/SKILL.md +117 -0
  59. package/templates/default/locales/en/.mustflow/skills/html-code-change/SKILL.md +173 -0
  60. package/templates/default/locales/en/.mustflow/skills/javascript-code-change/SKILL.md +149 -0
  61. package/templates/default/locales/en/.mustflow/skills/python-code-change/SKILL.md +154 -0
  62. package/templates/default/locales/en/.mustflow/skills/release-publish-change/SKILL.md +172 -0
  63. package/templates/default/locales/en/.mustflow/skills/routes.toml +138 -0
  64. package/templates/default/locales/en/.mustflow/skills/rust-code-change/SKILL.md +154 -0
  65. package/templates/default/locales/en/.mustflow/skills/svelte-code-change/SKILL.md +186 -0
  66. package/templates/default/locales/en/.mustflow/skills/tailwind-code-change/SKILL.md +164 -0
  67. package/templates/default/locales/en/.mustflow/skills/tauri-code-change/SKILL.md +185 -0
  68. package/templates/default/locales/en/.mustflow/skills/typescript-code-change/SKILL.md +184 -0
  69. package/templates/default/locales/en/.mustflow/skills/unocss-code-change/SKILL.md +186 -0
  70. package/templates/default/manifest.toml +158 -1
@@ -0,0 +1,154 @@
1
+ ---
2
+ mustflow_doc: skill.python-code-change
3
+ locale: en
4
+ canonical: true
5
+ revision: 2
6
+ lifecycle: mustflow-owned
7
+ authority: procedure
8
+ name: python-code-change
9
+ description: Apply this skill when Python source, packaging, runtime version, import layout, type checking, linting, tests, or CLI entry points are created or changed.
10
+ metadata:
11
+ mustflow_schema: "1"
12
+ mustflow_kind: procedure
13
+ pack_id: mustflow.core
14
+ skill_id: mustflow.core.python-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
+ # Python Code Change
27
+
28
+ <!-- mustflow-section: purpose -->
29
+ ## Purpose
30
+
31
+ Preserve Python runtime, packaging, import, async resource, public API, typing, lint, and test boundaries while making a focused change.
32
+
33
+ <!-- mustflow-section: use-when -->
34
+ ## Use When
35
+
36
+ - `.py`, `pyproject.toml`, `setup.py`, `setup.cfg`, requirements files, lockfiles, tox, nox, pytest, mypy, pyright, Ruff, or Python CI config changes.
37
+ - The task touches package layout, CLI entry points, imports, type hints, dependency declarations, virtual environment assumptions, or tests.
38
+
39
+ <!-- mustflow-section: do-not-use-when -->
40
+ ## Do Not Use When
41
+
42
+ - The task only edits generated Python output that should not be maintained manually.
43
+ - The repository does not contain Python behavior and the file is only documentation.
44
+
45
+ <!-- mustflow-section: required-inputs -->
46
+ ## Required Inputs
47
+
48
+ - Python version source: `requires-python`, `.python-version`, tool version files, CI matrix, or container base image.
49
+ - Packaging and dependency files, test config, lint config, and type checker config.
50
+ - Package layout: `src` layout, flat layout, namespace package, distribution name, import package name, package discovery settings, CLI entry points, plugin entry points, and nearby tests.
51
+ - Async ownership and resource cleanup surface when coroutines, tasks, context managers, sessions, clients, pools, files, async generators, subprocesses, or logging change.
52
+ - Public contract surface when imports, signatures, exceptions, return shapes, CLI behavior, config, environment variables, extras, Python version support, or typing stubs change.
53
+ - Configured verification intents.
54
+
55
+ <!-- mustflow-section: preconditions -->
56
+ ## Preconditions
57
+
58
+ - Determine the lowest supported Python version before choosing syntax or typing features.
59
+ - Read package layout and import style before editing imports.
60
+ - Treat global machine Python state as irrelevant unless the project explicitly declares it.
61
+
62
+ <!-- mustflow-section: allowed-edits -->
63
+ ## Allowed Edits
64
+
65
+ - Keep existing packaging tools and layout unless the user explicitly asks for a packaging migration.
66
+ - Add or adjust type hints at public boundaries, complex return values, and external input boundaries.
67
+ - Follow existing test style, fixtures, parametrization, and lint/type strictness.
68
+ - Do not lower Ruff, mypy, pyright, pytest, or packaging strictness to hide a failure.
69
+ - Keep import fixes in package metadata, package discovery, entry points, or test invocation contracts instead of path hacks.
70
+ - Make resource ownership explicit: code closes only the resources it creates.
71
+
72
+ <!-- mustflow-section: procedure -->
73
+ ## Procedure
74
+
75
+ 1. Read project metadata, Python version constraints, dependency files, and test/lint/type configs.
76
+ 2. Identify the boundary touched: runtime version, package API, import root, packaging metadata, CLI entry, test fixture, async resource ownership, external input, or dependency contract.
77
+ 3. For packaging and import changes, separate the distribution name from the import package name. Check package directory mapping, package discovery settings, namespace package behavior, package data, entry points, optional dependencies, and `requires-python` before touching imports.
78
+ 4. Treat `src` layout as an installation contract. Importable code under `src/` should be tested through the supported installed-package path, not by making repository files accidentally importable from the working directory.
79
+ 5. Match existing package layout and import conventions. Do not add `sys.path`, `site.addsitedir`, `PYTHONPATH`, pytest `pythonpath`, ad hoc import loading, or test `conftest.py` import hacks to make package imports pass.
80
+ 6. Do not add `__init__.py` to tests as a blind fix. Add it only when tests are intentionally a package and the import-mode behavior remains explicit.
81
+ 7. For packaging changes, distinguish development and release contracts:
82
+ - editable installs prove the local development path;
83
+ - wheel installs or equivalent built artifacts prove the release path;
84
+ - entry point, dependency, optional dependency, metadata, and package data changes require reinstall-oriented verification when a configured intent exists;
85
+ - installed console scripts or plugin entry points should be smoke-tested through the installed entry point contract, not by directly running a source file.
86
+ 8. Verify import origin when packaging risk is present. The public package should resolve from the installed environment intended by the project, not from accidental repository-root files.
87
+ 9. Validate unknown external data before treating it as typed domain data.
88
+ 10. Preserve async and resource ownership:
89
+ - every coroutine is awaited, returned by contract, or scheduled as an owned and tracked task;
90
+ - raw background task creation is allowed only through the project's owner or spawn helper, a task group, or an equivalent lifecycle mechanism;
91
+ - background tasks keep a strong reference, have a shutdown path, and retrieve failures instead of leaving never-retrieved exceptions;
92
+ - cancellation is control flow, so cleanup uses `finally` and cancellation is re-raised after cleanup unless suppression is the documented behavior;
93
+ - async functions do not call blocking I/O, blocking sleeps, long CPU work, or blocking subprocess waits directly unless the project has an explicit executor or isolation pattern;
94
+ - context managers and async context managers do not suppress exceptions unless suppression is the feature;
95
+ - context-manager helpers that catch exceptions for logging re-raise after logging;
96
+ - early-exit async generators have an explicit close path.
97
+ 11. Preserve traceback evidence. Logging inside exception handlers should retain exception information instead of logging only the exception message.
98
+ 12. Preserve public contracts:
99
+ - treat public imports, public signatures, exceptions, return shapes, CLI behavior, entry points, config keys, environment variables, dependency metadata, extras, Python version support, and typing stubs as compatibility-sensitive;
100
+ - do not change sync functions into async functions, accepted input shapes, nullable behavior, documented exception types, tuple/dict/dataclass return shapes, config precedence, or environment variable semantics without a compatibility review;
101
+ - typed packages should keep runtime and typing surfaces aligned, including `py.typed` and stubs when present.
102
+ 13. Avoid mutable default arguments, broad `except Exception: pass`, broad `BaseException` catches outside process boundaries, global state hidden behind module imports, and path handling that ignores existing `pathlib` or OS conventions.
103
+ 14. Use `# type: ignore[...]` only when tightly scoped, justified, and consistent with local policy.
104
+ 15. If packaging, public API, CLI, config, or typing contracts change, synchronize README examples, entry point tests, build metadata, docs, fixtures, and downstream-style examples that describe installation or usage.
105
+ 16. Choose configured verification intents that cover formatting, lint, type checking, tests, package build, installed-package smoke checks, and CLI smoke risk when available.
106
+
107
+ <!-- mustflow-section: postconditions -->
108
+ ## Postconditions
109
+
110
+ - The code respects the declared Python version and packaging layout.
111
+ - Imports work from the project-supported execution path.
112
+ - Packaging changes distinguish development imports from release artifact imports.
113
+ - Async tasks, context managers, files, clients, pools, subprocesses, and generators have visible ownership and cleanup.
114
+ - Public API, CLI, config, environment, dependency metadata, and typing contract changes are called out.
115
+ - Type and lint strictness are not weakened.
116
+ - Tests or skipped verification are tied to the changed behavior.
117
+
118
+ <!-- mustflow-section: verification -->
119
+ ## Verification
120
+
121
+ Use configured oneshot command intents when available:
122
+
123
+ - `lint`
124
+ - `build`
125
+ - `test_related`
126
+ - `test`
127
+ - `docs_validate_fast`
128
+ - `mustflow_check`
129
+
130
+ Report missing package, type, or test intents rather than inventing raw tool commands.
131
+
132
+ <!-- mustflow-section: failure-handling -->
133
+ ## Failure Handling
134
+
135
+ - If import resolution fails, inspect package metadata and test invocation before adding path hacks.
136
+ - If a test only passes because repository root, `src`, or `tests` is injected into import paths, reject the fix and repair packaging or test layout instead.
137
+ - If packaging correctness matters but only repository-root tests can run, report that wheel or installed-artifact verification is missing.
138
+ - If the supported Python version blocks a syntax choice, rewrite to the supported form.
139
+ - If third-party stubs or package metadata are wrong, document the local workaround and keep it narrow.
140
+ - If a background task lacks owner, shutdown, strong reference, or exception retrieval, do not add it.
141
+ - If cancellation or context-manager behavior is swallowed accidentally, restore propagation or document the intentional suppression contract.
142
+ - If resource cleanup cannot be proven, use the project's context manager, exit stack, fixture, or lifecycle pattern before broadening tests.
143
+ - If public contracts change without compatibility evidence, stop and report the breaking-change or deprecation requirement.
144
+
145
+ <!-- mustflow-section: output-format -->
146
+ ## Output Format
147
+
148
+ - Boundary checked
149
+ - Runtime and packaging assumptions
150
+ - Files changed
151
+ - Type, lint, and import notes
152
+ - Command intents run
153
+ - Skipped checks and reasons
154
+ - Remaining Python risk
@@ -0,0 +1,172 @@
1
+ ---
2
+ mustflow_doc: skill.release-publish-change
3
+ locale: en
4
+ canonical: true
5
+ revision: 1
6
+ lifecycle: mustflow-owned
7
+ authority: procedure
8
+ name: release-publish-change
9
+ description: Apply this skill when release publishing, package registry publication, remote release channels, Git tags, GitHub Releases, release assets, npm, PyPI, crates.io, Go modules, Docker images, Homebrew formulae or casks, app updater metadata, version bump decisions, artifact inspection, post-publish smoke tests, rollback or yanking plans, or user installation paths are created, changed, reviewed, or reported.
10
+ metadata:
11
+ mustflow_schema: "1"
12
+ mustflow_kind: procedure
13
+ pack_id: mustflow.core
14
+ skill_id: mustflow.core.release-publish-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
+ # Release Publish Change
28
+
29
+ <!-- mustflow-section: purpose -->
30
+ ## Purpose
31
+
32
+ Keep release work honest by treating a release as a remote state transition, not as a local code edit.
33
+
34
+ The release is not done when tests pass locally, a version string changes, or a workflow succeeds. It is done only when the intended remote channel contains the expected artifact and a user-facing installation or update path has been smoke-tested through configured command intents or explicitly reported as unverified.
35
+
36
+ <!-- mustflow-section: use-when -->
37
+ ## Use When
38
+
39
+ - A task prepares, changes, reviews, or reports package publication, registry publication, Git tag release, GitHub Release creation, release assets, checksums, signatures, Docker image tags, Homebrew formulae, app updater feeds, appcast files, channel metadata, or installer distribution.
40
+ - A change touches version bump logic, package metadata, release workflows, publish workflows, release assets, package contents, changelog-to-release wiring, post-publish smoke tests, or rollback and yanking guidance.
41
+ - A final report claims that a version was published, released, installable, downloadable, updateable, yanked, deprecated, rolled back, or verified by the user installation path.
42
+ - A release target includes npm, PyPI, crates.io, Go modules, Docker registries, GitHub Releases, Homebrew, Electron auto-update, Sparkle, Tauri updater, mobile stores, desktop installers, or another remote distribution channel.
43
+
44
+ <!-- mustflow-section: do-not-use-when -->
45
+ ## Do Not Use When
46
+
47
+ - The task only drafts release notes or changelog wording without publishing, package metadata, release artifact, or install-path claims. Use `release-notes-authoring` instead.
48
+ - The task only changes dependency versions inside a project and does not publish the project. Use `dependency-upgrade-review`.
49
+ - The task only checks local artifact integrity without changing or reporting release publication. Use `artifact-integrity-check` if available.
50
+ - The task asks for a private experiment that must not affect remote tags, registries, release assets, or update channels.
51
+
52
+ <!-- mustflow-section: required-inputs -->
53
+ ## Required Inputs
54
+
55
+ - Release target, version, channel, package name, module path, image name, tag, artifact names, expected assets, and intended audience.
56
+ - Public contract source for versioning: package metadata, manifest, lock or generated metadata, changelog, release workflow, tag policy, and SemVer or project-specific compatibility rules.
57
+ - Artifact source and inspection method: package file list, archive contents, generated distributions, checksums, signatures, SBOM, provenance, installer contents, image digest, updater metadata, or release asset manifest.
58
+ - Remote publication surface: registry, Git tag, GitHub Release, Docker registry, tap, updater feed, appcast, CDN, package index, or store.
59
+ - Recovery model: unpublish, yank, deprecate, republish with new version, move channel pointer, revoke asset, restore from backup, or forward fix.
60
+ - Configured command intents for build, package inspection, release verification, docs validation, and user installation or updater smoke test. If no such intent exists, report the missing intent instead of inventing a raw command.
61
+
62
+ <!-- mustflow-section: preconditions -->
63
+ ## Preconditions
64
+
65
+ - The task matches the Use When conditions and does not match the Do Not Use When exclusions.
66
+ - Higher-priority instructions, release preferences, and the command contract have been checked for the current scope.
67
+ - The release target and version are known, or the work is explicitly limited to authoring a release procedure skill or checklist.
68
+ - Remote publication, tag creation, push, registry upload, production updater change, and destructive yanking or unpublish actions are not executed unless the repository and host rules explicitly authorize them.
69
+
70
+ <!-- mustflow-section: allowed-edits -->
71
+ ## Allowed Edits
72
+
73
+ - Update version metadata, release workflow files, package manifests, artifact manifests, changelog or release-preparation docs, release validation tests, package fixture expectations, and installed-template metadata directly required by the release contract.
74
+ - Update smoke-test expectations and package tests that encode the release or installation contract.
75
+ - Add conservative release procedure text that describes configured command intents and required evidence.
76
+ - Do not publish, tag, push, yank, delete, unpublish, overwrite assets, or alter remote channels unless explicitly requested and authorized by the active command contract and host rules.
77
+
78
+ <!-- mustflow-section: procedure -->
79
+ ## Procedure
80
+
81
+ 1. Classify the release surface.
82
+ - Package registry: npm, PyPI, crates.io, RubyGems, Maven, NuGet, SwiftPM, or similar.
83
+ - Source tag release: Go module, GitHub Release, generated assets, source archive, or checksum manifest.
84
+ - Container release: image tag, digest, multi-platform manifest, base image, provenance, or registry metadata.
85
+ - Installer or updater release: desktop installer, appcast, update feed, channel metadata, signature, release notes, or updater endpoint.
86
+ - Formula or distribution wrapper: Homebrew formula, cask, tap metadata, checksum, bottle, or livecheck.
87
+ 2. Declare the public API before choosing the version bump.
88
+ - Public API includes CLI output, flags, config schema, package exports, templates, generated artifacts, installer behavior, migration contract, deprecation behavior, update channel behavior, and documented examples.
89
+ - Use SemVer only after naming what this project treats as public API.
90
+ - Treat compatibility-affecting behavior, removed assets, changed binary names, moved module paths, changed updater channels, or stricter parsers as release-contract changes even when source APIs look unchanged.
91
+ 3. Inspect the artifact, not only the repository tree.
92
+ - Check package file lists, archive contents, generated distributions, binary entrypoints, README, LICENSE, metadata, generated schemas, template files, checksums, signatures, SBOM, provenance, image digest, and platform matrix as applicable.
93
+ - Do not claim artifact inspection from the source tree alone.
94
+ - Stale `dist`, build output, generated clients, package caches, or old release assets must be cleaned or reported before publication evidence is trusted.
95
+ 4. Classify channel permanence and recovery.
96
+ - npm name and version pairs, PyPI distribution filenames, crates.io versions, and Go module tags are effectively one-way release identifiers for practical purposes.
97
+ - Docker tags can move in many registries, but digests identify content and should be captured when reporting release evidence.
98
+ - GitHub Releases depend on Git tags, but release assets, checksums, signatures, and release body are separate evidence surfaces.
99
+ - App updater channels depend on metadata and signature state, not only uploaded installers.
100
+ 5. For npm-style package publication, verify package metadata, packed file list, entrypoints, bin links, README, LICENSE, access, provenance or trusted publisher setup, registry target, and exact published version behavior through configured intents.
101
+ 6. For PyPI-style publication, verify source distribution, wheel contents, metadata, Python version constraints, entrypoints, README rendering, filename uniqueness, and install smoke path through configured intents.
102
+ 7. For crates.io-style publication, verify manifest metadata, include and exclude rules, packaged file list, feature combinations, docs expectations, and yank-forward-fix policy.
103
+ 8. For Go modules, treat the Git tag as the release. Verify module path, semantic tag, major-version path rules, tag target commit, proxy/cache implications, and module consumer smoke path. Do not move or delete tags as a casual recovery shortcut.
104
+ 9. For Docker images, verify image digest, tag, platform manifest, labels, exposed ports, entrypoint, user, vulnerability or base-image expectations, and pull-run smoke behavior through configured intents.
105
+ 10. For GitHub Releases, verify tag, release body, generated notes policy, asset list, checksum files, signatures, archives, attached binaries, and download smoke behavior.
106
+ 11. For Homebrew, verify formula or cask URL, version, checksum, livecheck, bottle expectations, test block, audit result, and install smoke path through configured intents.
107
+ 12. For app updaters, verify installer artifact, update metadata, channel, minimum version, signature, release notes, feed URL, staged rollout rules, and updater smoke path from an older installed version when configured.
108
+ 13. Keep release notes and release publication separate.
109
+ - Release notes may say what changed only when evidence supports it.
110
+ - Publication evidence must say what remote artifact exists and how a user reaches it.
111
+ 14. Verify remote state after publication when authorized.
112
+ - Check the registry, tag, release page, asset download, digest, updater feed, tap, or package index that users actually consume.
113
+ - Then run the configured user installation, pull, download, or updater smoke intent.
114
+ - If remote publication was not authorized or not performed, report the release as prepared but not published.
115
+ 15. Report immutable or hard-to-recover mistakes honestly.
116
+ - Bad package version: usually deprecate, yank, or release a new version.
117
+ - Bad Go module tag: do not assume moving the tag fixes proxy/cache consumers.
118
+ - Bad Docker tag: distinguish moved tag from old digest still being referenced.
119
+ - Bad updater metadata: treat as a live channel incident if clients may already have seen it.
120
+ 16. Never call a release complete from local tests alone. The completion evidence must name the remote channel and the user installation or update path, or explicitly say that post-publish verification was skipped.
121
+
122
+ <!-- mustflow-section: postconditions -->
123
+ ## Postconditions
124
+
125
+ - Version bump, release notes, package metadata, manifests, artifacts, workflows, tests, and docs agree.
126
+ - The artifact contents have been inspected through configured evidence, not inferred from the source tree.
127
+ - Remote publication status is classified as not started, prepared, published, verified, failed, yanked, deprecated, superseded, or unknown.
128
+ - User installation, pull, download, or updater smoke test status is known or explicitly reported as skipped.
129
+ - Recovery plan matches the channel's actual permanence and rules.
130
+
131
+ <!-- mustflow-section: verification -->
132
+ ## Verification
133
+
134
+ Use configured oneshot command intents when available:
135
+
136
+ - `changes_status`
137
+ - `changes_diff_summary`
138
+ - `lint`
139
+ - `build`
140
+ - `test_related`
141
+ - `test`
142
+ - `docs_validate_fast`
143
+ - `test_release`
144
+ - `mustflow_check`
145
+
146
+ Prefer configured release, package-inspection, artifact-inspection, install-smoke, updater-smoke, checksum, signature, provenance, or registry-verification intents when the command contract exposes them.
147
+
148
+ Do not infer package manager, registry, Docker, Git, Homebrew, or updater commands from project files. If the needed intent is missing, report the missing command contract instead of writing a raw command into the skill or final release procedure.
149
+
150
+ <!-- mustflow-section: failure-handling -->
151
+ ## Failure Handling
152
+
153
+ - If the artifact contents differ from the intended release, stop release claims and fix the source, generated output, or packaging configuration before publication.
154
+ - If the remote registry already contains the version, do not assume overwrite is possible. Report the channel-specific recovery path.
155
+ - If publication succeeds but install smoke fails, treat the release as published but not verified and recommend channel-appropriate mitigation.
156
+ - If a tag, asset, digest, checksum, signature, updater feed, or release body is missing, do not collapse the issue into "workflow failed"; name the missing remote surface.
157
+ - If release evidence comes only from CI logs, report that no independent user-path smoke test was completed unless the configured CI explicitly performs that path.
158
+ - If unpublish, yank, tag movement, channel rollback, or asset deletion is proposed, check host and repository authorization first and report the permanence risk.
159
+
160
+ <!-- mustflow-section: output-format -->
161
+ ## Output Format
162
+
163
+ - Release target, version, and channel
164
+ - Public API and version bump classification
165
+ - Artifact contents inspected
166
+ - Remote publication state
167
+ - User installation, download, pull, or updater smoke path result
168
+ - Synchronized version, docs, manifest, workflow, and test surfaces
169
+ - Recovery or rollback classification
170
+ - Command intents run
171
+ - Skipped remote, publish, or install checks and reasons
172
+ - Remaining release-publish risk
@@ -108,6 +108,60 @@ route_type = "primary"
108
108
  priority = 20
109
109
  applies_to_reasons = ["unknown_change", "code_change"]
110
110
 
111
+ [routes."api-contract-change"]
112
+ category = "general_code"
113
+ route_type = "primary"
114
+ priority = 82
115
+ applies_to_reasons = ["code_change", "public_api_change", "docs_change", "test_change"]
116
+
117
+ [routes."typescript-code-change"]
118
+ category = "general_code"
119
+ route_type = "primary"
120
+ priority = 85
121
+ applies_to_reasons = ["code_change", "public_api_change", "test_change"]
122
+
123
+ [routes."javascript-code-change"]
124
+ category = "general_code"
125
+ route_type = "primary"
126
+ priority = 85
127
+ applies_to_reasons = ["code_change", "public_api_change", "test_change"]
128
+
129
+ [routes."python-code-change"]
130
+ category = "general_code"
131
+ route_type = "primary"
132
+ priority = 85
133
+ applies_to_reasons = ["code_change", "public_api_change", "test_change"]
134
+
135
+ [routes."go-code-change"]
136
+ category = "general_code"
137
+ route_type = "primary"
138
+ priority = 85
139
+ applies_to_reasons = ["code_change", "public_api_change", "test_change"]
140
+
141
+ [routes."rust-code-change"]
142
+ category = "general_code"
143
+ route_type = "primary"
144
+ priority = 85
145
+ applies_to_reasons = ["code_change", "public_api_change", "test_change"]
146
+
147
+ [routes."dart-code-change"]
148
+ category = "general_code"
149
+ route_type = "primary"
150
+ priority = 85
151
+ applies_to_reasons = ["code_change", "public_api_change", "test_change"]
152
+
153
+ [routes."hono-code-change"]
154
+ category = "general_code"
155
+ route_type = "primary"
156
+ priority = 85
157
+ applies_to_reasons = ["code_change", "public_api_change", "security_change"]
158
+
159
+ [routes."elysia-code-change"]
160
+ category = "general_code"
161
+ route_type = "primary"
162
+ priority = 85
163
+ applies_to_reasons = ["code_change", "public_api_change", "security_change"]
164
+
111
165
  [routes."source-anchor-authoring"]
112
166
  category = "general_code"
113
167
  route_type = "primary"
@@ -156,12 +210,30 @@ route_type = "primary"
156
210
  priority = 55
157
211
  applies_to_reasons = ["code_change", "behavior_change"]
158
212
 
213
+ [routes."database-migration-change"]
214
+ category = "data_external"
215
+ route_type = "primary"
216
+ priority = 82
217
+ applies_to_reasons = ["code_change", "data_change", "migration_change", "public_api_change", "test_change", "docs_change", "security_change"]
218
+
219
+ [routes."dependency-upgrade-review"]
220
+ category = "data_external"
221
+ route_type = "primary"
222
+ priority = 75
223
+ applies_to_reasons = ["code_change", "docs_change", "security_change", "package_metadata_change", "release_risk"]
224
+
159
225
  [routes."dependency-reality-check"]
160
226
  category = "data_external"
161
227
  route_type = "adjunct"
162
228
  priority = 45
163
229
  applies_to_reasons = ["code_change", "docs_change", "security_change"]
164
230
 
231
+ [routes."file-path-cross-platform-change"]
232
+ category = "data_external"
233
+ route_type = "primary"
234
+ priority = 78
235
+ applies_to_reasons = ["code_change", "public_api_change", "test_change", "docs_change", "security_change", "package_metadata_change"]
236
+
165
237
  [routes."cross-platform-filesystem-safety"]
166
238
  category = "data_external"
167
239
  route_type = "adjunct"
@@ -174,6 +246,12 @@ route_type = "primary"
174
246
  priority = 55
175
247
  applies_to_reasons = ["code_change", "behavior_change"]
176
248
 
249
+ [routes."tauri-code-change"]
250
+ category = "data_external"
251
+ route_type = "primary"
252
+ priority = 90
253
+ applies_to_reasons = ["code_change", "security_change", "public_api_change"]
254
+
177
255
  [routes."process-execution-safety"]
178
256
  category = "data_external"
179
257
  route_type = "primary"
@@ -222,6 +300,18 @@ route_type = "primary"
222
300
  priority = 30
223
301
  applies_to_reasons = ["security_change", "privacy_change"]
224
302
 
303
+ [routes."config-env-change"]
304
+ category = "security_privacy"
305
+ route_type = "primary"
306
+ priority = 35
307
+ applies_to_reasons = ["code_change", "docs_change", "security_change", "privacy_change", "package_metadata_change", "mustflow_config_change"]
308
+
309
+ [routes."auth-permission-change"]
310
+ category = "security_privacy"
311
+ route_type = "primary"
312
+ priority = 85
313
+ applies_to_reasons = ["code_change", "security_change", "privacy_change", "public_api_change"]
314
+
225
315
  [routes."security-regression-tests"]
226
316
  category = "security_privacy"
227
317
  route_type = "adjunct"
@@ -264,6 +354,48 @@ route_type = "primary"
264
354
  priority = 50
265
355
  applies_to_reasons = ["ui_change"]
266
356
 
357
+ [routes."html-code-change"]
358
+ category = "ui_assets"
359
+ route_type = "primary"
360
+ priority = 85
361
+ applies_to_reasons = ["ui_change", "docs_change", "code_change"]
362
+
363
+ [routes."css-code-change"]
364
+ category = "ui_assets"
365
+ route_type = "primary"
366
+ priority = 85
367
+ applies_to_reasons = ["ui_change", "docs_change", "code_change"]
368
+
369
+ [routes."tailwind-code-change"]
370
+ category = "ui_assets"
371
+ route_type = "primary"
372
+ priority = 85
373
+ applies_to_reasons = ["ui_change", "docs_change", "code_change"]
374
+
375
+ [routes."unocss-code-change"]
376
+ category = "ui_assets"
377
+ route_type = "primary"
378
+ priority = 85
379
+ applies_to_reasons = ["ui_change", "docs_change", "code_change"]
380
+
381
+ [routes."flutter-code-change"]
382
+ category = "ui_assets"
383
+ route_type = "primary"
384
+ priority = 85
385
+ applies_to_reasons = ["ui_change", "code_change", "public_api_change"]
386
+
387
+ [routes."astro-code-change"]
388
+ category = "ui_assets"
389
+ route_type = "primary"
390
+ priority = 85
391
+ applies_to_reasons = ["ui_change", "docs_change", "code_change"]
392
+
393
+ [routes."svelte-code-change"]
394
+ category = "ui_assets"
395
+ route_type = "primary"
396
+ priority = 85
397
+ applies_to_reasons = ["ui_change", "code_change", "public_api_change"]
398
+
267
399
  [routes."pattern-scout"]
268
400
  category = "architecture_patterns"
269
401
  route_type = "adjunct"
@@ -312,6 +444,12 @@ route_type = "primary"
312
444
  priority = 55
313
445
  applies_to_reasons = ["release_risk", "docs_change"]
314
446
 
447
+ [routes."release-publish-change"]
448
+ category = "docs_release"
449
+ route_type = "primary"
450
+ priority = 58
451
+ applies_to_reasons = ["release_risk", "package_metadata_change", "docs_change", "public_api_change"]
452
+
315
453
  [routes."search-ad-content-authoring"]
316
454
  category = "docs_release"
317
455
  route_type = "primary"