mustflow 2.18.7 → 2.18.21

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 (32) hide show
  1. package/README.md +4 -0
  2. package/dist/cli/commands/dashboard.js +68 -12
  3. package/dist/cli/commands/init.js +20 -20
  4. package/dist/cli/commands/run.js +1 -8
  5. package/dist/cli/commands/update.js +6 -11
  6. package/dist/cli/commands/verify.js +45 -15
  7. package/dist/cli/lib/dashboard-preferences.js +8 -6
  8. package/dist/cli/lib/filesystem.js +11 -1
  9. package/dist/cli/lib/git-changes.js +7 -1
  10. package/dist/cli/lib/local-index/index.js +31 -31
  11. package/dist/cli/lib/manifest-lock.js +38 -12
  12. package/dist/core/change-classification.js +24 -2
  13. package/dist/core/command-classification.js +0 -16
  14. package/dist/core/command-contract-rules.js +23 -3
  15. package/dist/core/run-write-drift.js +4 -0
  16. package/package.json +1 -1
  17. package/templates/default/i18n.toml +42 -6
  18. package/templates/default/locales/en/.mustflow/skills/INDEX.md +11 -5
  19. package/templates/default/locales/en/.mustflow/skills/cli-output-contract-review/SKILL.md +146 -0
  20. package/templates/default/locales/en/.mustflow/skills/command-contract-authoring/SKILL.md +121 -0
  21. package/templates/default/locales/en/.mustflow/skills/cross-platform-filesystem-safety/SKILL.md +137 -0
  22. package/templates/default/locales/en/.mustflow/skills/dependency-reality-check/SKILL.md +19 -6
  23. package/templates/default/locales/en/.mustflow/skills/external-prompt-injection-defense/SKILL.md +26 -10
  24. package/templates/default/locales/en/.mustflow/skills/llm-service-ux-review/SKILL.md +139 -0
  25. package/templates/default/locales/en/.mustflow/skills/process-execution-safety/SKILL.md +120 -0
  26. package/templates/default/locales/en/.mustflow/skills/routes.toml +38 -2
  27. package/templates/default/locales/en/.mustflow/skills/search-ad-content-authoring/SKILL.md +148 -0
  28. package/templates/default/locales/en/.mustflow/skills/security-privacy-review/SKILL.md +46 -12
  29. package/templates/default/locales/en/.mustflow/skills/security-regression-tests/SKILL.md +43 -12
  30. package/templates/default/locales/en/.mustflow/skills/ui-quality-gate/SKILL.md +34 -14
  31. package/templates/default/manifest.toml +23 -1
  32. package/dist/cli/commands/run/builtin-dispatch.js +0 -92
@@ -2,7 +2,7 @@
2
2
  mustflow_doc: skill.security-regression-tests
3
3
  locale: en
4
4
  canonical: true
5
- revision: 6
5
+ revision: 9
6
6
  lifecycle: mustflow-owned
7
7
  authority: procedure
8
8
  name: security-regression-tests
@@ -32,6 +32,9 @@ Convert security-sensitive behavior changes into safe negative tests that preser
32
32
 
33
33
  - Authentication, authorization, session, CSRF, rate-limit, admin, payment, credit, subscription, personal-data, or tenant-boundary behavior changes.
34
34
  - Input validation, output encoding, file upload, path handling, webhook callback, redirect, or external URL handling changes.
35
+ - Cookie, JWT, OAuth callback, reset token, invite token, logout, reauthentication, file download, upload processing, business-rule, entitlement, pricing, inventory, database query, ORM bulk operation, or deployment-configuration behavior changes.
36
+ - AI-generated or vibe-coded routes, data access, external fetchers, admin screens, or database rules need denied-case coverage beyond a happy-path test.
37
+ - Cryptography, password hashing, secure randomness, HTTPS/TLS, certificate validation, scanner-gate, or security-invariant behavior changes.
35
38
  - Command construction, command recommendation, executable resolution, command-contract linting, or copy-to-clipboard command behavior changes.
36
39
  - Filesystem containment, symlink handling, package publishing, build pipeline, or release automation behavior changes.
37
40
  - A bug fix closes an abuse case and the fix needs a regression test to prevent reintroduction.
@@ -81,16 +84,31 @@ Convert security-sensitive behavior changes into safe negative tests that preser
81
84
  1. Identify the protected boundary: actor, resource, operation, trust boundary, and expected defensive outcome.
82
85
  2. Classify the abuse case using project-specific facts, not broad labels alone:
83
86
  - unauthorized actor or cross-tenant access
87
+ - BOLA/IDOR-style object access where the resource identifier is valid but belongs to another actor or tenant
84
88
  - invalid ownership or privilege escalation
89
+ - UI-only admin gating without server-side role, owner, or capability enforcement
90
+ - authentication-only checks that omit owner, tenant, workspace, organization, team, or capability constraints
91
+ - unsafe session or token handling such as decode-only JWT checks, missing expiry, missing issuer or audience validation, missing logout revocation, or missing reauthentication before sensitive changes
85
92
  - unsafe input shape, size, encoding, path, or MIME mismatch
93
+ - unsafe sort, redirect, pagination, parser, Markdown, XML, YAML, or template input that reaches a query, file path, HTML, or command boundary
86
94
  - unsafe output rendering or serialization
95
+ - file upload or download authorization, content-type, signature, size, filename, metadata, web-root, or conversion resource-limit failure
87
96
  - unsafe external URL, callback, redirect, or server-side request target
97
+ - SSRF-style private network, localhost, link-local metadata, redirect, or DNS re-resolution target
98
+ - missing webhook signature validation or unsafe retry behavior for external callbacks
99
+ - CSRF-style state change that relies on browser credentials without an origin, token, or same-site boundary
100
+ - missing rate limit or lockout on login, signup, token reset, invitation, webhook, or expensive generation endpoints
101
+ - client-supplied price, discount, role, owner, entitlement, plan, inventory, seat, refund, coupon, or usage value trusted by the server
102
+ - ORM mass assignment, unscoped `findMany`, `updateMany`, `deleteMany`, unsafe migration default, or missing database policy enforcement
88
103
  - unsafe shell command construction, command name interpolation, clipboard command output, or executable lookup
89
104
  - filesystem escape through symlinks, path traversal, archive entries, generated state, or package contents
90
105
  - mismatch between two validators, linters, dashboards, schemas, or release gates that claim the same policy
91
106
  - release or package-publishing pipeline code execution before artifact publication
92
107
  - incomplete escaping, quoting, encoding, or sanitization where the safe behavior can be asserted without invoking a real shell or network target
93
108
  - stack trace or internal error exposure through a user-visible API, report, dashboard, or command output
109
+ - insecure password storage, custom cryptography, weak hash use, insecure randomness, or predictable reset or invite tokens
110
+ - disabled certificate validation, insecure HTTP downgrade, or missing HTTPS enforcement for sensitive traffic
111
+ - architecture drift where a refactor preserves the happy path but drops a security invariant across a layer boundary
94
112
  - workflow permission drift, mutable action references, wrong pinned-action object type, dependency scan overreach, or artifact credential leakage that can be checked through repository-local workflow tests or linters
95
113
  - payment, credit, coupon, subscription, refund, or entitlement abuse
96
114
  - personal-data or admin-only access leakage
@@ -98,19 +116,32 @@ Convert security-sensitive behavior changes into safe negative tests that preser
98
116
  - missing capability or scoped permission object where a sensitive operation depends on broad user, role, or global authorization state
99
117
  - missing invariant policy where a sensitive state change could violate a non-negotiable rule such as last-owner, entitlement, paid-order, refund, or retention constraints
100
118
  - missing idempotency key, action ledger, or outbox/inbox record where repeated execution of a side effect could charge, refund, notify, grant, revoke, publish, or delete more than once
119
+ - exposed debug, admin, metrics, storage, GraphQL, development console, root container user, default credential, or fork pull-request secret path that can be checked locally
101
120
  3. Search for existing tests that already cover the same boundary. Strengthen the existing test when that gives clearer coverage than adding a new one.
102
121
  4. Build the smallest safe negative test data: at least one allowed control case when useful, and one denied case that proves the boundary rejects the abuse condition.
103
- 5. For parser, validator, serializer, path, command, or workflow boundaries, consider a bounded property-based or fuzz-style regression when the invariant is clearer than a list of hand-written examples. Keep generators local, deterministic under the test runner, size-limited, and focused on the defensive invariant.
104
- 6. When adding a fuzzing or property-based testing dependency, keep dependency metadata, lockfiles, test selection rules, and package tests synchronized. Prefer an existing project dependency when it can express the invariant cleanly.
105
- 7. Use mocks or local fakes for external requests, uploads, redirects, webhooks, payment providers, file systems, shell commands, package registries, and CI workflows. Do not contact live suspicious endpoints or publish real artifacts.
106
- 8. Name the test after the defensive expectation, such as `cannot_read_other_users_invoice` or `rejects_private_network_callback_url`.
107
- 9. Keep assertions tied to observable behavior: status code, returned error shape, unchanged database state, missing side effect, sanitized output, rejected job, or invariant preserved for all generated cases.
108
- 10. Avoid dumping long exploit strings into the test. Use minimal representative inputs or generated values that prove the validation or boundary rule without becoming an offensive payload corpus.
109
- 11. For command and filesystem boundaries, assert the denied side effect directly: no injected command appears in a runnable recommendation, no repository-local shim is executed, no background shell pattern is counted runnable, no symlink target outside the root is read or written.
110
- 12. For plan/apply, capability, invariant, time, and idempotency boundaries, assert the safety contract directly: planning produces no side effect, commit rejects stale or unauthorized capability, invalid transitions preserve state, injected time controls expiry, and repeated side-effect keys do not repeat the effect.
111
- 13. For workflow scanner fixes, prefer repository-local assertions for durable contracts: action references are pinned to commit SHAs or digest-pinned containers, privileged permissions are job-scoped, deployment or scanner jobs can be manually rerun when useful, and dependency scans exclude fixture-only manifests unless intentionally included.
112
- 14. For scanner-driven fixes, include a regression only when the rule reflects a durable project contract. Do not add brittle tests that merely assert the scanner's current wording, line number, or severity.
113
- 15. If the project lacks enough context to write a deterministic test, output a concrete test proposal instead of inventing fixtures or behavior.
122
+ 5. For ownership and tenant boundaries, use two actors and two resources. Prove that the valid owner succeeds and the non-owner fails for the same resource identifier shape.
123
+ 6. For SSRF and redirect boundaries, use local fake resolvers or request adapters and assert that private, loopback, link-local, metadata, unsupported protocol, and redirect-to-denied targets are rejected without making live network calls.
124
+ 7. For CSRF and browser-credential state changes, assert that the mutating operation rejects missing or mismatched token, origin, or same-site evidence according to the project framework.
125
+ 8. For rate limits and lockouts, use injected time, local stores, or fake counters to prove repeated attempts are bounded without slowing the suite.
126
+ 9. For session, JWT, OAuth, reset, invite, logout, or reauthentication boundaries, assert the denied condition directly: invalid signature, expired token, wrong issuer, wrong audience, missing state, revoked token, reused token, or missing recent authentication.
127
+ 10. For upload and download boundaries, use local fixture files and fake storage. Assert authorization, content signature, MIME, size, filename, path, metadata stripping, and conversion resource-limit behavior without using live user files.
128
+ 11. For business-rule boundaries, use server-side fixtures that try manipulated price, discount, role, owner, entitlement, plan, inventory, seat, refund, coupon, or usage fields. Assert that state remains unchanged or is recalculated from trusted server data.
129
+ 12. For database and ORM boundaries, assert scoped queries or policies through observable behavior: cross-tenant rows stay invisible, bulk update or delete affects only owned rows, mass-assigned privileged fields are ignored, and unsafe migration defaults cannot create elevated access.
130
+ 13. For cryptography and token-generation boundaries, assert behavior through the project-owned API rather than hard-coding private implementation details: password verifiers reject plaintext or fast-hash storage, token generation uses injected secure randomness or a deterministic test double, and custom cryptography shortcuts are absent where the project exposes that decision.
131
+ 14. For transport-security boundaries, assert configuration rejects disabled certificate validation or insecure HTTP for sensitive endpoints when the project owns that configuration.
132
+ 15. For architecture-drift boundaries, write the test around the security invariant, not the refactor shape: unauthorized access stays denied, sensitive output stays omitted, and side effects remain scoped after the generated structure changes.
133
+ 16. For parser, validator, serializer, path, command, or workflow boundaries, consider a bounded property-based or fuzz-style regression when the invariant is clearer than a list of hand-written examples. Keep generators local, deterministic under the test runner, size-limited, and focused on the defensive invariant.
134
+ 17. When adding a fuzzing or property-based testing dependency, keep dependency metadata, lockfiles, test selection rules, and package tests synchronized. Prefer an existing project dependency when it can express the invariant cleanly.
135
+ 18. Use mocks or local fakes for external requests, uploads, redirects, webhooks, payment providers, file systems, shell commands, package registries, and CI workflows. Do not contact live suspicious endpoints or publish real artifacts.
136
+ 19. Name the test after the defensive expectation, such as `cannot_read_other_users_invoice` or `rejects_private_network_callback_url`.
137
+ 20. Keep assertions tied to observable behavior: status code, returned error shape, unchanged database state, missing side effect, sanitized output, rejected job, or invariant preserved for all generated cases.
138
+ 21. Avoid dumping long exploit strings into the test. Use minimal representative inputs or generated values that prove the validation or boundary rule without becoming an offensive payload corpus.
139
+ 22. For command and filesystem boundaries, assert the denied side effect directly: no injected command appears in a runnable recommendation, no repository-local shim is executed, no background shell pattern is counted runnable, no symlink target outside the root is read or written.
140
+ 23. For plan/apply, capability, invariant, time, and idempotency boundaries, assert the safety contract directly: planning produces no side effect, commit rejects stale or unauthorized capability, invalid transitions preserve state, injected time controls expiry, and repeated side-effect keys do not repeat the effect.
141
+ 24. For workflow scanner fixes, prefer repository-local assertions for durable contracts: action references are pinned to commit SHAs or digest-pinned containers, privileged permissions are job-scoped, fork pull requests do not receive secrets, deployment or scanner jobs can be manually rerun when useful, and dependency scans exclude fixture-only manifests unless intentionally included.
142
+ 25. For deployment and configuration fixes, prefer local config assertions: debug flags are off for production, sample credentials are absent, public admin or metrics endpoints are not enabled by default, storage is not public, containers do not run as root when the project controls that setting, and HTTPS requirements are preserved.
143
+ 26. For scanner-driven fixes, include a regression only when the rule reflects a durable project contract. Do not add brittle tests that merely assert the scanner's current wording, line number, or severity.
144
+ 27. If the project lacks enough context to write a deterministic test, output a concrete test proposal instead of inventing fixtures or behavior.
114
145
 
115
146
  <!-- mustflow-section: postconditions -->
116
147
  ## Postconditions
@@ -2,7 +2,7 @@
2
2
  mustflow_doc: skill.ui-quality-gate
3
3
  locale: en
4
4
  canonical: true
5
- revision: 3
5
+ revision: 6
6
6
  lifecycle: mustflow-owned
7
7
  authority: procedure
8
8
  name: ui-quality-gate
@@ -34,11 +34,14 @@ Keep user-facing interfaces usable, minimal, accessible, responsive, localizatio
34
34
  - A task asks for UI polish, layout, responsive behavior, accessibility, visual states, language switching, labels, or interaction feedback.
35
35
  - A report claims that UI text fits, controls are understandable, language updates apply, or a page renders correctly.
36
36
  - A change could add explanatory, marketing-like, decorative, duplicate, invented, or non-actionable UI content.
37
+ - AI-generated or vibe-coded UI needs review for predictable conventions, visual hierarchy, mobile usability, touch targets, component boundaries, and interaction feedback.
38
+ - A repeated AI-editing loop may have introduced style drift, duplicated state, missing edge cases, undeclared UI dependencies, or oversized components.
37
39
 
38
40
  <!-- mustflow-section: do-not-use-when -->
39
41
  ## Do Not Use When
40
42
 
41
43
  - The task changes only backend logic, CLI output, metadata, or documentation with no user-facing UI surface.
44
+ - The task is specifically about conversational AI, chat, copilot, prompt, multimodal input, streaming generation, citations, feedback, or conversation history; use `llm-service-ux-review`.
42
45
  - The task is only image asset conversion; use `web-asset-optimization` for that part.
43
46
  - The UI change cannot be rendered or inspected in the current environment; report the inspection gap instead of claiming visual verification.
44
47
 
@@ -48,6 +51,9 @@ Keep user-facing interfaces usable, minimal, accessible, responsive, localizatio
48
51
  - The changed UI surface, user task, and expected interaction path.
49
52
  - Existing design patterns, task-essential controls, labels, states, accessibility conventions, and localization rules in the same area.
50
53
  - Viewports, themes, languages, and state combinations that need inspection.
54
+ - The target devices and interaction style, including mobile-first behavior, pointer or touch input, expected keyboard use, and any project breakpoint or design-token conventions.
55
+ - Existing design-token, component, data, state, dependency, and accessibility contracts that the changed UI must preserve.
56
+ - Any high-risk widget involved, such as toast notifications, tree views, editable grids, drag-and-drop, custom selects, comboboxes, dialogs, or virtualized lists.
51
57
  - Performance, asset-size, animation, or network constraints that affect the changed surface.
52
58
  - Relevant command-intent contract entries for status, diff, docs, build, release, or mustflow validation.
53
59
 
@@ -64,7 +70,10 @@ Keep user-facing interfaces usable, minimal, accessible, responsive, localizatio
64
70
  - Add, remove, or refine UI controls, labels, states, layout constraints, localization hooks, and accessibility attributes when they support the user's real task.
65
71
  - Remove decorative, explanatory, invented, or marketing-like UI content that does not help the user act on real data.
66
72
  - Prefer existing component patterns and stable dimensions over new visual systems.
73
+ - Add subtle interaction feedback only when it clarifies state, confirms action, or improves perceived responsiveness without harming reduced-motion users.
74
+ - Add a small intermediate UI contract for complex surfaces before implementation: view tree, data inputs, user actions, state transitions, visual tokens, and verification targets.
67
75
  - Do not claim a UI is visually verified without an actual render, screenshot, DOM inspection, or clear reason that visual verification was unavailable.
76
+ - Do not add undeclared packages, invented component APIs, ad hoc style scales, or framework-specific patterns that conflict with the current project.
68
77
 
69
78
  <!-- mustflow-section: procedure -->
70
79
  ## Procedure
@@ -72,23 +81,33 @@ Keep user-facing interfaces usable, minimal, accessible, responsive, localizatio
72
81
  1. Identify the real user task and the UI surface that supports it.
73
82
  2. Check nearby UI patterns before adding new layout, component, color, copy, or state conventions.
74
83
  3. Keep task-essential controls only. Remove or avoid non-essential welcome text, feature summaries, decorative cards, fake metrics, marketing copy, invented filters, and controls that do not operate on real data.
75
- 4. Verify controls are understandable and state-aware: icon buttons need accessible names or tooltips, destructive or state-changing actions need clear labels, selected or disabled states need clear visual treatment, and disabled states need a visible reason when useful.
76
- 5. Check keyboard and focus behavior before visual polish: native elements first, tab order, focus order and return, visible focus state, names for icon-only controls, form error linkage, live status announcements, reduced-motion handling, and sufficient contrast.
77
- 6. Check accessible names and states against the actual interaction model, not only the rendered text. Dynamic controls must expose the current expanded, selected, checked, invalid, busy, or disabled state when applicable.
78
- 7. Check form error and empty-state behavior. Errors should point to the field or action that needs attention, and empty states should be short and action-oriented rather than explaining the product.
79
- 8. Check localization-safe labels: language switching, fallback text, placeholders, plural or formatted values, long translated labels, bidirectional text, logical spacing, and date, time, number, currency, or unit display where applicable.
80
- 9. Check responsive layout without text overlap: text should not overflow, clip, overlap, resize fixed-format controls unexpectedly, or depend on viewport-width font scaling.
81
- 10. Check performance and asset-size awareness when the change adds images, icons, animation, third-party UI code, large client data, or extra network work. Prefer existing assets and bounded rendering cost.
82
- 11. Check state coverage: loading, empty, error, saved, changed, disabled, selected, focused, and language-switched states should update consistently where applicable.
83
- 12. Inspect responsive and localization-sensitive surfaces when the change affects layout or translated text.
84
- 13. Use visual verification only when a configured one-shot command or approved browser workflow exists for the surface. Do not start development servers, watchers, or browser sessions directly from the skill.
85
- 14. Run the narrowest configured verification that covers the changed UI, documentation, package, or mustflow contract.
84
+ 4. Check predictability and visual hierarchy. Follow familiar platform or product conventions, make the next likely action visible, and use spacing, size, weight, grouping, and order to make the primary task easier to scan.
85
+ 5. Check responsive and touch ergonomics. Prefer mobile-first layout decisions, preserve readable spacing at small widths, keep touch targets and gaps usable, and follow existing breakpoint or design-token conventions instead of inventing one-off sizes.
86
+ 6. Verify controls are understandable and state-aware: icon buttons need accessible names or tooltips, destructive or state-changing actions need clear labels, hover, active, selected, loading, and disabled states need clear visual treatment, and disabled states need a visible reason when useful.
87
+ 7. Check keyboard and focus behavior before visual polish: native elements first, semantic landmarks when they clarify page structure, tab order, focus order and return, visible focus state, names for icon-only controls, form error linkage, live status announcements, reduced-motion handling, and sufficient contrast.
88
+ 8. Check accessible names and states against the actual interaction model, not only the rendered text. Dynamic controls must expose the current expanded, selected, checked, invalid, busy, or disabled state when applicable.
89
+ 9. Check form validation, error, and empty-state behavior. Validate close to the field when useful, place errors next to the action or input that needs attention, preserve user input after failure, and keep empty states short and action-oriented rather than explaining the product.
90
+ 10. Check interaction feedback. Loading, skeleton, saving, success, failure, toast, inline message, or micro-interaction feedback should map to real state and should not distract from the task or hide a slow operation.
91
+ 11. Check localization-safe labels: language switching, fallback text, placeholders, plural or formatted values, long translated labels, bidirectional text, logical spacing, and date, time, number, currency, or unit display where applicable.
92
+ 12. Check responsive layout without text overlap: text should not overflow, clip, overlap, resize fixed-format controls unexpectedly, or depend on viewport-width font scaling.
93
+ 13. Check style drift. Repeated AI edits should not create one-off spacing, color, radius, typography, shadow, or inline-style variants when an existing token, utility, or component variant already covers the need.
94
+ 14. Check state architecture. Async UI should cover the relevant idle, loading, success, empty, error, retrying, and stale-data states without duplicating state variables or leaving race-prone updates after unmount.
95
+ 15. Check component boundaries. Reusable UI pieces should be small enough to maintain consistent states and accessibility, but not split into wrappers that obscure the user task or duplicate design rules.
96
+ 16. Check dependency and API reality. Imported UI packages, generated helpers, component props, browser APIs, and event contracts must exist in the project or be handled through the dependency workflow before code relies on them.
97
+ 17. Check high-risk widgets. Toasts need pauseable timing and appropriate status announcements; tree views need composite keyboard behavior; editable grids need navigation and editing modes; custom selects, dialogs, and comboboxes need proven accessibility patterns or an existing library.
98
+ 18. Check performance and asset-size awareness when the change adds images, icons, animation, third-party UI code, large client data, or extra network work. Prefer existing assets, lazy loading when appropriate, explicit image dimensions, and bounded rendering cost.
99
+ 19. Check state coverage: loading, empty, error, saved, changed, disabled, selected, focused, hover, active, validating, and language-switched states should update consistently where applicable.
100
+ 20. For complex surfaces, write or confirm a compact UI contract before broad implementation: view tree, data contract, interaction model, state model, design-token contract, and verification targets.
101
+ 21. Inspect responsive and localization-sensitive surfaces when the change affects layout or translated text.
102
+ 22. Use visual verification only when a configured one-shot command or approved browser workflow exists for the surface. Do not start development servers, watchers, or browser sessions directly from the skill.
103
+ 23. Run the narrowest configured verification that covers the changed UI, documentation, package, or mustflow contract.
86
104
 
87
105
  <!-- mustflow-section: postconditions -->
88
106
  ## Postconditions
89
107
 
90
108
  - The UI supports the user's task without unnecessary explanatory or decorative surface.
91
- - Important controls, labels, states, keyboard and focus paths, layout constraints, localization updates, and performance-sensitive assets are checked or reported as unverified.
109
+ - Important controls, labels, states, visual hierarchy, touch ergonomics, keyboard and focus paths, layout constraints, localization updates, and performance-sensitive assets are checked or reported as unverified.
110
+ - AI-generated changes preserve existing style tokens, component boundaries, state contracts, dependency reality, and high-risk widget accessibility expectations.
92
111
  - Final reports distinguish code-level verification from visual or interactive verification.
93
112
 
94
113
  <!-- mustflow-section: verification -->
@@ -120,7 +139,8 @@ Use a narrower configured test, build, browser, screenshot, or accessibility int
120
139
  - UI surface reviewed
121
140
  - User task and states checked
122
141
  - Task-essential controls kept or removed
123
- - Layout, keyboard and focus, accessibility, localization, performance, and asset-size checks
142
+ - Visual hierarchy, responsive layout, touch ergonomics, keyboard and focus, accessibility, localization, performance, and asset-size checks
143
+ - Interaction feedback, style drift, state architecture, dependency, high-risk widget, and component-boundary checks
124
144
  - Decorative or unnecessary UI avoided or removed
125
145
  - Command intents run
126
146
  - Skipped visual checks and reasons
@@ -1,6 +1,6 @@
1
1
  id = "default"
2
2
  name = "default"
3
- version = "2.18.7"
3
+ version = "2.18.21"
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"
@@ -17,9 +17,12 @@ creates = [
17
17
  ".mustflow/skills/behavior-preserving-refactor/SKILL.md",
18
18
  ".mustflow/skills/code-review/SKILL.md",
19
19
  ".mustflow/skills/codebase-orientation/SKILL.md",
20
+ ".mustflow/skills/cli-output-contract-review/SKILL.md",
21
+ ".mustflow/skills/command-contract-authoring/SKILL.md",
20
22
  ".mustflow/skills/command-pattern/SKILL.md",
21
23
  ".mustflow/skills/composition-over-inheritance/SKILL.md",
22
24
  ".mustflow/skills/contract-sync-check/SKILL.md",
25
+ ".mustflow/skills/cross-platform-filesystem-safety/SKILL.md",
23
26
  ".mustflow/skills/date-number-audit/SKILL.md",
24
27
  ".mustflow/skills/database-change-safety/SKILL.md",
25
28
  ".mustflow/skills/dependency-injection/SKILL.md",
@@ -31,6 +34,7 @@ creates = [
31
34
  ".mustflow/skills/test-design-guard/SKILL.md",
32
35
  ".mustflow/skills/test-maintenance/SKILL.md",
33
36
  ".mustflow/skills/vertical-slice-tdd/SKILL.md",
37
+ ".mustflow/skills/llm-service-ux-review/SKILL.md",
34
38
  ".mustflow/skills/ui-quality-gate/SKILL.md",
35
39
  ".mustflow/skills/external-prompt-injection-defense/SKILL.md",
36
40
  ".mustflow/skills/external-skill-intake/SKILL.md",
@@ -43,6 +47,7 @@ creates = [
43
47
  ".mustflow/skills/null-object-pattern/SKILL.md",
44
48
  ".mustflow/skills/performance-budget-check/SKILL.md",
45
49
  ".mustflow/skills/pattern-scout/SKILL.md",
50
+ ".mustflow/skills/process-execution-safety/SKILL.md",
46
51
  ".mustflow/skills/repo-improvement-loop/SKILL.md",
47
52
  ".mustflow/skills/structure-discovery-gate/SKILL.md",
48
53
  ".mustflow/skills/readme-authoring/SKILL.md",
@@ -57,6 +62,7 @@ creates = [
57
62
  ".mustflow/skills/project-context-authoring/SKILL.md",
58
63
  ".mustflow/skills/security-privacy-review/SKILL.md",
59
64
  ".mustflow/skills/security-regression-tests/SKILL.md",
65
+ ".mustflow/skills/search-ad-content-authoring/SKILL.md",
60
66
  ".mustflow/skills/skill-authoring/SKILL.md",
61
67
  ".mustflow/skills/visual-review-artifact/SKILL.md",
62
68
  ".mustflow/skills/visual-review-artifact/resources.toml",
@@ -91,6 +97,7 @@ minimal = [
91
97
  "behavior-preserving-refactor",
92
98
  "code-review",
93
99
  "codebase-orientation",
100
+ "command-contract-authoring",
94
101
  "contract-sync-check",
95
102
  "date-number-audit",
96
103
  "database-change-safety",
@@ -117,6 +124,7 @@ patterns = [
117
124
  "behavior-preserving-refactor",
118
125
  "code-review",
119
126
  "codebase-orientation",
127
+ "command-contract-authoring",
120
128
  "command-pattern",
121
129
  "composition-over-inheritance",
122
130
  "contract-sync-check",
@@ -154,9 +162,12 @@ oss = [
154
162
  "behavior-preserving-refactor",
155
163
  "code-review",
156
164
  "codebase-orientation",
165
+ "cli-output-contract-review",
166
+ "command-contract-authoring",
157
167
  "command-pattern",
158
168
  "composition-over-inheritance",
159
169
  "contract-sync-check",
170
+ "cross-platform-filesystem-safety",
160
171
  "date-number-audit",
161
172
  "database-change-safety",
162
173
  "dependency-injection",
@@ -173,6 +184,7 @@ oss = [
173
184
  "migration-safety-check",
174
185
  "null-object-pattern",
175
186
  "pattern-scout",
187
+ "process-execution-safety",
176
188
  "project-context-authoring",
177
189
  "pure-core-imperative-shell",
178
190
  "readme-authoring",
@@ -199,9 +211,11 @@ team = [
199
211
  "behavior-preserving-refactor",
200
212
  "code-review",
201
213
  "codebase-orientation",
214
+ "command-contract-authoring",
202
215
  "command-pattern",
203
216
  "composition-over-inheritance",
204
217
  "contract-sync-check",
218
+ "cross-platform-filesystem-safety",
205
219
  "date-number-audit",
206
220
  "database-change-safety",
207
221
  "dependency-injection",
@@ -215,6 +229,7 @@ team = [
215
229
  "multi-agent-work-coordination",
216
230
  "null-object-pattern",
217
231
  "pattern-scout",
232
+ "process-execution-safety",
218
233
  "pure-core-imperative-shell",
219
234
  "result-option",
220
235
  "requirement-regression-guard",
@@ -234,6 +249,7 @@ product = [
234
249
  "behavior-preserving-refactor",
235
250
  "code-review",
236
251
  "codebase-orientation",
252
+ "command-contract-authoring",
237
253
  "command-pattern",
238
254
  "composition-over-inheritance",
239
255
  "contract-sync-check",
@@ -247,6 +263,7 @@ product = [
247
263
  "facade-pattern",
248
264
  "failure-triage",
249
265
  "instruction-conflict-scope-check",
266
+ "llm-service-ux-review",
250
267
  "null-object-pattern",
251
268
  "pattern-scout",
252
269
  "performance-budget-check",
@@ -255,6 +272,7 @@ product = [
255
272
  "requirement-regression-guard",
256
273
  "repro-first-debug",
257
274
  "security-privacy-review",
275
+ "search-ad-content-authoring",
258
276
  "source-anchor-authoring",
259
277
  "source-freshness-check",
260
278
  "state-machine-pattern",
@@ -274,9 +292,12 @@ library = [
274
292
  "behavior-preserving-refactor",
275
293
  "code-review",
276
294
  "codebase-orientation",
295
+ "cli-output-contract-review",
296
+ "command-contract-authoring",
277
297
  "command-pattern",
278
298
  "composition-over-inheritance",
279
299
  "contract-sync-check",
300
+ "cross-platform-filesystem-safety",
280
301
  "date-number-audit",
281
302
  "database-change-safety",
282
303
  "dependency-injection",
@@ -292,6 +313,7 @@ library = [
292
313
  "migration-safety-check",
293
314
  "null-object-pattern",
294
315
  "pattern-scout",
316
+ "process-execution-safety",
295
317
  "project-context-authoring",
296
318
  "pure-core-imperative-shell",
297
319
  "readme-authoring",
@@ -1,92 +0,0 @@
1
- import { canRunMustflowBuiltinInProcess, isMustflowBinName } from '../../../core/command-classification.js';
2
- import { getPackageVersion } from '../../lib/package-info.js';
3
- import { createBufferedReporter } from './output.js';
4
- /**
5
- * mf:anchor cli.run.builtin-inprocess
6
- * purpose: Dispatch selected mustflow built-in commands without spawning a nested CLI process.
7
- * search: builtin intent, in-process command, nested mf run, run receipt
8
- * invariant: Only commands classified by command-classification can use this path.
9
- * risk: config, state
10
- */
11
- async function runKnownBuiltinCommand(args, reporter, lang) {
12
- const [command, ...commandArgs] = args;
13
- if ((command === '--version' || command === '-v' || command === 'version') && commandArgs.length === 0) {
14
- reporter.stdout(getPackageVersion());
15
- return 0;
16
- }
17
- if (!canRunMustflowBuiltinInProcess(command)) {
18
- return undefined;
19
- }
20
- if (command === 'check') {
21
- return (await import('../check.js')).runCheck(commandArgs, reporter, lang);
22
- }
23
- if (command === 'classify') {
24
- return (await import('../classify.js')).runClassify(commandArgs, reporter, lang);
25
- }
26
- if (command === 'context') {
27
- return (await import('../context.js')).runContext(commandArgs, reporter, lang);
28
- }
29
- if (command === 'doctor') {
30
- return (await import('../doctor.js')).runDoctor(commandArgs, reporter, lang);
31
- }
32
- if (command === 'help') {
33
- return (await import('../help.js')).runHelp(commandArgs, reporter, lang);
34
- }
35
- if (command === 'impact') {
36
- return (await import('../impact.js')).runImpact(commandArgs, reporter, lang);
37
- }
38
- if (command === 'line-endings') {
39
- return (await import('../line-endings.js')).runLineEndings(commandArgs, reporter, lang);
40
- }
41
- if (command === 'map') {
42
- return (await import('../map.js')).runMap(commandArgs, reporter, lang);
43
- }
44
- if (command === 'status') {
45
- return (await import('../status.js')).runStatus(commandArgs, reporter, lang);
46
- }
47
- if (command === 'update') {
48
- return (await import('../update.js')).runUpdate(commandArgs, reporter, lang);
49
- }
50
- if (command === 'version-sources') {
51
- return (await import('../version-sources.js')).runVersionSources(commandArgs, reporter, lang);
52
- }
53
- return undefined;
54
- }
55
- async function withWorkingDirectory(cwd, callback) {
56
- const previousCwd = process.cwd();
57
- process.chdir(cwd);
58
- try {
59
- return await callback();
60
- }
61
- finally {
62
- process.chdir(previousCwd);
63
- }
64
- }
65
- export async function runBuiltinArgvInProcess(commandArgv, cwd, lang) {
66
- const [command = '', ...builtinArgs] = commandArgv;
67
- if (!isMustflowBinName(command)) {
68
- return undefined;
69
- }
70
- const output = createBufferedReporter();
71
- try {
72
- const status = await withWorkingDirectory(cwd, () => runKnownBuiltinCommand(builtinArgs, output.reporter, lang));
73
- if (status === undefined) {
74
- return undefined;
75
- }
76
- return {
77
- status,
78
- signal: null,
79
- stdout: output.stdout(),
80
- stderr: output.stderr(),
81
- };
82
- }
83
- catch (error) {
84
- const message = error instanceof Error ? error.message : String(error);
85
- return {
86
- status: 1,
87
- signal: null,
88
- stdout: output.stdout(),
89
- stderr: `${output.stderr()}${message}\n`,
90
- };
91
- }
92
- }