mustflow 2.103.35 → 2.106.1

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.
@@ -0,0 +1,190 @@
1
+ ---
2
+ mustflow_doc: skill.wails-code-change
3
+ locale: en
4
+ canonical: true
5
+ revision: 1
6
+ lifecycle: mustflow-owned
7
+ authority: procedure
8
+ name: wails-code-change
9
+ description: Apply this skill when 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, custom protocols, file associations, server builds, or Wails-related tests are created, changed, reviewed, or upgraded.
10
+ metadata:
11
+ mustflow_schema: "1"
12
+ mustflow_kind: procedure
13
+ pack_id: mustflow.core
14
+ skill_id: mustflow.core.wails-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
+ # Wails Code Change
27
+
28
+ <!-- mustflow-section: purpose -->
29
+ ## Purpose
30
+
31
+ Preserve Wails v3 application structure, Go service boundaries, generated binding compatibility, WebView platform behavior, native OS integration, and build or packaging contracts.
32
+
33
+ Treat Wails as a native shell around OS WebViews plus a Go-to-frontend bridge. Do not design it like Electron, a localhost web server, or a single browser runtime.
34
+
35
+ <!-- mustflow-section: use-when -->
36
+ ## Use When
37
+
38
+ - `wails.json`, `build/config.yml`, `Taskfile.yml`, `go.mod`, Wails Go APIs, `application.New`, services, generated bindings, `@wailsio/runtime`, frontend calls to Go methods, events, raw messages, windows, menus, system tray, dialogs, browser, clipboard, autostart, notifications, file associations, custom protocols, single-instance handling, signing, packaging, server builds, or Wails tests change.
39
+ - A task touches Wails v2-to-v3 migration, Electron-to-Wails migration, multi-window design, bridge payloads, binding generation, platform WebView behavior, OS integration, or cross-platform packaging.
40
+ - The task writes durable guidance about Wails version status, Wails CLI or runtime versions, WebView2, WKWebView, WebKitGTK, GTK build tags, Taskfile behavior, or platform packaging.
41
+
42
+ <!-- mustflow-section: do-not-use-when -->
43
+ ## Do Not Use When
44
+
45
+ - The change is pure Go with no Wails app, service, binding, WebView, or packaging boundary; use `go-code-change`.
46
+ - The change is pure web frontend with no Wails runtime, bridge, native window, or packaged WebView behavior; use the matching frontend skill.
47
+ - The change is a Tauri app; use `tauri-code-change`.
48
+ - The task only updates external version prose; use `source-freshness-check` or `version-freshness-check` unless the Wails procedure itself changes.
49
+
50
+ <!-- mustflow-section: required-inputs -->
51
+ ## Required Inputs
52
+
53
+ - Wails version track, Go module metadata, frontend package metadata, lockfiles, generated bindings, Taskfile and build config, Wails app entry point, service registration, window creation, event setup, menu or tray setup, dialog usage, and tests.
54
+ - Map of frontend calls to Go services: generated function, Go method, request DTO, response DTO, error contract, concurrency owner, cancellation path, and security or permission boundary.
55
+ - Window and native integration ledger: window name or id, owner, lifecycle, hide versus close policy, event subscriptions, runtime-ready handshake, menu projection, tray behavior, dialog decision flow, file association, custom protocol, and single-instance policy.
56
+ - Platform ledger: Windows WebView2 runtime and user-data folder assumptions, macOS WKWebView and signing or notarization expectations, Linux GTK/WebKitGTK target, build tags, package format, and unsupported or legacy distribution targets.
57
+ - Official or repository-local source evidence before preserving exact Wails status, alpha, release, CLI, runtime, package, platform dependency, or OS-support claims.
58
+ - Configured verification intents.
59
+
60
+ <!-- mustflow-section: preconditions -->
61
+ ## Preconditions
62
+
63
+ - Identify whether the app is Wails v2 or Wails v3 before editing. Do not translate v2 `wails.Run` patterns by search-and-replace.
64
+ - Treat generated bindings, Go binary, frontend runtime package, lockfiles, and Wails CLI version as one compatibility set.
65
+ - Treat every frontend-provided path, URL, protocol payload, file association, raw message, event payload, and service argument as untrusted.
66
+ - Refresh official Wails sources before writing exact status, release-date, latest-version, WebView dependency, GTK/WebKitGTK, signing, or packaging claims. If freshness cannot be checked, keep durable wording version-agnostic and report the boundary.
67
+
68
+ <!-- mustflow-section: allowed-edits -->
69
+ ## Allowed Edits
70
+
71
+ - Keep Wails-specific app assembly, service registration, window factories, menu/tray setup, event wiring, and build packaging surfaces synchronized.
72
+ - Keep Go services as app capability boundaries with typed DTOs, validation, thread-safe state, and explicit errors.
73
+ - Keep frontend calls thin around generated bindings and runtime event subscriptions with cleanup.
74
+ - Keep build and package changes in declared Wails config, Taskfile, Go module, frontend package, signing, installer, and docs surfaces.
75
+ - Do not expose debug, destructive, secret, filesystem, shell, updater, protocol, or raw-message behavior through exported Go methods without an explicit product and security boundary.
76
+
77
+ <!-- mustflow-section: procedure -->
78
+ ## Procedure
79
+
80
+ 1. Read Wails app entry points, `go.mod`, service files, generated bindings, frontend runtime imports, frontend call sites, event subscription sites, Taskfile, build config, package metadata, platform packaging files, and tests.
81
+ 2. Identify Wails major version and runtime mode: v2, v3 alpha, server build, native window build, or migration. For v3, use the app and manager API model rather than v2 single-run assumptions.
82
+ 3. Build an app ownership map:
83
+ - application object and startup/shutdown owner;
84
+ - registered services and resource owners;
85
+ - windows, names, ids, and lifecycle policy;
86
+ - menus, tray, dialogs, custom protocols, file associations, browser and clipboard operations;
87
+ - frontend runtime import and binding generation path.
88
+ 4. Build a bridge map for every frontend-to-Go call:
89
+ - frontend wrapper or generated function;
90
+ - Go method and service;
91
+ - request and response DTO;
92
+ - error shape;
93
+ - mutable state touched;
94
+ - cancellation or job id;
95
+ - large payload, streaming, or batching decision;
96
+ - security-sensitive input or output.
97
+ 5. Treat exported Go service methods as an internal RPC surface. Remove accidental exports from binding reachability, or mark them ignored or internal using the repository's established Wails pattern.
98
+ 6. Keep binding DTOs boring and explicit:
99
+ - use strings for identifiers, money, precise timestamps, and large integers that JavaScript `number` cannot safely represent;
100
+ - avoid returning domain models with unexported fields, file handles, channels, functions, broad `any` or `interface{}`, and complex cross-package aliases;
101
+ - distinguish missing, null, empty, forbidden, and not-yet-loaded states with explicit DTO fields;
102
+ - use `error` returns for expected failures and reserve panic for truly fatal programmer errors.
103
+ 7. Guard concurrent calls. Wails bridge calls can run simultaneously, so protect shared Go service state with a clear owner, mutex, channel, worker, database transaction, or immutable snapshot. Do not store current user, selected document, request-local data, or window-local state in a shared service field unless it is keyed and synchronized.
104
+ 8. Batch small repeated calls and keep large data off the ordinary call path. Use pagination, file handles, job ids, chunks, or progress events for large files, logs, binary blobs, or long-running output.
105
+ 9. Treat raw messages and low-level runtime calls as escape hatches. Require explicit schema validation, origin or caller validation when applicable, response correlation, timeout, and failure reporting before accepting a raw-message path.
106
+ 10. Design events as state notifications, not hidden data stores:
107
+ - wait for the target window runtime-ready event before emitting into a new window;
108
+ - keep and call unsubscribe functions for frontend and Go listeners;
109
+ - distinguish app-wide broadcasts from window-specific events;
110
+ - include request, window, workspace, or document ids when events target scoped state;
111
+ - throttle high-frequency progress, resize, move, drag, log, or stream events.
112
+ 11. Design windows as native lifecycle objects, not only frontend routes:
113
+ - classify each window as singleton, document-scoped, temporary, tray-attached, hidden reusable, or close-and-dispose;
114
+ - keep stable internal names separate from user-visible titles;
115
+ - choose hide versus close deliberately;
116
+ - use cancellable close hooks for unsaved work or protected shutdown flows;
117
+ - store size and position with monitor, scale, and off-screen recovery policy.
118
+ 12. Keep services, not windows, as long-lived resource owners. Database handles, file watchers, background workers, sync loops, and queues need startup, shutdown, cancellation, and wait paths independent of one window.
119
+ 13. Treat menus, tray, dialogs, autostart, notifications, clipboard, browser open, custom protocols, file associations, and single-instance behavior as product policies:
120
+ - keep macOS menu conventions separate from Windows and Linux window menus;
121
+ - update menu and tray projections after state changes;
122
+ - make dialogs asynchronous decision flows, not synchronous browser confirms;
123
+ - validate URLs, paths, protocol payloads, clipboard data, and file association inputs in Go;
124
+ - provide a fallback when tray support or notification features vary by desktop environment.
125
+ 14. Check WebView platform behavior before blaming frontend code:
126
+ - Windows uses WebView2 and has runtime, update, user-data folder, profile lock, and enterprise policy concerns;
127
+ - macOS uses WKWebView and has ATS, WebContent process, inspector, minimum OS, signing, notarization, and bundle concerns;
128
+ - Linux uses WebKitGTK and has GTK/WebKitGTK version, distro, portal, Wayland, AppImage, DEB/RPM, and driver concerns.
129
+ 15. Check build and packaging as a first-class contract:
130
+ - Wails v3 build and package behavior is Taskfile and build-config oriented;
131
+ - do not assume one host can produce all signed distributable artifacts without platform-specific runners or signing steps;
132
+ - keep WebView runtime strategy, installer format, macOS notarization, Linux distribution matrix, custom protocol registration, and file association registration explicit.
133
+ 16. When migration is involved, reject search-and-replace migrations. Rebuild the app assembly around application, services, windows, managers, lifecycle, generated bindings, events, and build tasks.
134
+ 17. Choose configured verification intents that cover Go code, frontend typecheck, generated bindings, package build, Wails build, platform package smoke, and docs. If those intents are missing, report the exact missing coverage.
135
+
136
+ <!-- mustflow-section: hard-bans -->
137
+ ## Hard Bans
138
+
139
+ - Do not design Wails v3 as Electron with multiple browser windows and shared frontend-only state.
140
+ - Do not create or rely on a localhost API server unless the app explicitly chooses that integration pattern.
141
+ - Do not use `latest` CLI or runtime claims in durable docs without a refreshed source and lockfile strategy.
142
+ - Do not expose raw paths, raw URLs, raw protocol payloads, arbitrary shell commands, secrets, tokens, debug dumps, or destructive operations through exported Go methods.
143
+ - Do not send large binary or text payloads repeatedly through ordinary binding calls or high-frequency events.
144
+ - Do not broadcast window-local or sensitive state to every window.
145
+ - Do not ignore generated binding drift between Go services, frontend imports, runtime package, and CLI version.
146
+ - Do not fix platform-specific packaging failures by weakening security settings, signing assumptions, or dependency requirements without naming the platform tradeoff.
147
+
148
+ <!-- mustflow-section: postconditions -->
149
+ ## Postconditions
150
+
151
+ - Wails major version, runtime package, generated bindings, and build surfaces are explicit.
152
+ - Go service methods, DTOs, errors, shared state, and concurrency ownership are clear.
153
+ - Window lifecycle, event subscriptions, menu/tray/dialog/native integration, and runtime-ready behavior are explicit.
154
+ - Platform WebView and packaging assumptions are recorded when touched.
155
+ - Missing Wails-specific verification is reported rather than hidden behind generic Go or frontend checks.
156
+
157
+ <!-- mustflow-section: verification -->
158
+ ## Verification
159
+
160
+ Use configured oneshot command intents when available:
161
+
162
+ - `lint`
163
+ - `build`
164
+ - `test_related`
165
+ - `test`
166
+ - `docs_validate_fast`
167
+ - `mustflow_check`
168
+
169
+ Report missing Wails-specific intents when relevant: generated binding check, frontend typecheck, Go tests, race-sensitive tests, native Wails build, packaged WebView startup smoke, Windows WebView2 runtime check, macOS signing or notarization check, Linux GTK/WebKitGTK package check, custom protocol or file association smoke, tray/menu/dialog smoke, and server-build smoke.
170
+
171
+ <!-- mustflow-section: failure-handling -->
172
+ ## Failure Handling
173
+
174
+ - If binding generation or runtime calls fail after version changes, check CLI, Go module, frontend runtime package, lockfile, generated binding, and binary compatibility before changing application logic.
175
+ - If a Wails app shows a blank window, check platform WebView startup, runtime-ready timing, built frontend assets, CSP or protocol configuration, and console evidence before rewriting UI state.
176
+ - If bridge calls race or return stale results, add request sequencing, cancellation, job ownership, or synchronized Go state before adding frontend retries.
177
+ - If a large payload stalls, move the payload to pagination, chunks, file handles, or pull-after-notification events.
178
+ - If a tray, menu, dialog, file association, protocol, or packaging behavior differs by OS, document and test the platform-specific path instead of forcing a fake cross-platform abstraction.
179
+ - If exact Wails version or platform support claims cannot be refreshed from official sources, keep the skill behavior version-agnostic and report the unverified source boundary.
180
+
181
+ <!-- mustflow-section: output-format -->
182
+ ## Output Format
183
+
184
+ - Boundary checked
185
+ - Wails version, app assembly, service, bridge, binding, window, event, menu, tray, dialog, and OS integration notes
186
+ - WebView platform and packaging notes when touched
187
+ - Files changed
188
+ - Command intents run
189
+ - Skipped checks and reasons
190
+ - Remaining Wails risk
@@ -1,6 +1,6 @@
1
1
  id = "default"
2
2
  name = "default"
3
- version = "2.103.35"
3
+ version = "2.106.1"
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"
@@ -62,6 +62,7 @@ creates = [
62
62
  ".mustflow/skills/quadratic-scan-review/SKILL.md",
63
63
  ".mustflow/skills/type-state-modeling-review/SKILL.md",
64
64
  ".mustflow/skills/race-condition-review/SKILL.md",
65
+ ".mustflow/skills/async-timing-boundary-review/SKILL.md",
65
66
  ".mustflow/skills/concurrency-invariant-review/SKILL.md",
66
67
  ".mustflow/skills/failure-integrity-review/SKILL.md",
67
68
  ".mustflow/skills/backend-log-evidence-review/SKILL.md",
@@ -101,6 +102,7 @@ creates = [
101
102
  ".mustflow/skills/node-code-change/SKILL.md",
102
103
  ".mustflow/skills/react-code-change/SKILL.md",
103
104
  ".mustflow/skills/vue-code-change/SKILL.md",
105
+ ".mustflow/skills/vite-code-change/SKILL.md",
104
106
  ".mustflow/skills/python-code-change/SKILL.md",
105
107
  ".mustflow/skills/powershell-code-change/SKILL.md",
106
108
  ".mustflow/skills/shell-code-change/SKILL.md",
@@ -112,6 +114,7 @@ creates = [
112
114
  ".mustflow/skills/svelte-code-change/SKILL.md",
113
115
  ".mustflow/skills/tailwind-code-change/SKILL.md",
114
116
  ".mustflow/skills/tauri-code-change/SKILL.md",
117
+ ".mustflow/skills/wails-code-change/SKILL.md",
115
118
  ".mustflow/skills/typescript-code-change/SKILL.md",
116
119
  ".mustflow/skills/unocss-code-change/SKILL.md",
117
120
  ".mustflow/skills/cli-output-contract-review/SKILL.md",
@@ -276,6 +279,7 @@ minimal = [
276
279
  "quadratic-scan-review",
277
280
  "type-state-modeling-review",
278
281
  "race-condition-review",
282
+ "async-timing-boundary-review",
279
283
  "concurrency-invariant-review",
280
284
  "failure-integrity-review",
281
285
  "backend-log-evidence-review",
@@ -314,6 +318,7 @@ minimal = [
314
318
  "node-code-change",
315
319
  "react-code-change",
316
320
  "vue-code-change",
321
+ "vite-code-change",
317
322
  "python-code-change",
318
323
  "powershell-code-change",
319
324
  "shell-code-change",
@@ -322,6 +327,7 @@ minimal = [
322
327
  "svelte-code-change",
323
328
  "tailwind-code-change",
324
329
  "tauri-code-change",
330
+ "wails-code-change",
325
331
  "typescript-code-change",
326
332
  "unocss-code-change",
327
333
  "command-contract-authoring",
@@ -428,6 +434,7 @@ patterns = [
428
434
  "quadratic-scan-review",
429
435
  "type-state-modeling-review",
430
436
  "race-condition-review",
437
+ "async-timing-boundary-review",
431
438
  "concurrency-invariant-review",
432
439
  "failure-integrity-review",
433
440
  "backend-log-evidence-review",
@@ -466,6 +473,7 @@ patterns = [
466
473
  "node-code-change",
467
474
  "react-code-change",
468
475
  "vue-code-change",
476
+ "vite-code-change",
469
477
  "python-code-change",
470
478
  "powershell-code-change",
471
479
  "shell-code-change",
@@ -474,6 +482,7 @@ patterns = [
474
482
  "svelte-code-change",
475
483
  "tailwind-code-change",
476
484
  "tauri-code-change",
485
+ "wails-code-change",
477
486
  "typescript-code-change",
478
487
  "unocss-code-change",
479
488
  "command-contract-authoring",
@@ -591,6 +600,7 @@ oss = [
591
600
  "quadratic-scan-review",
592
601
  "type-state-modeling-review",
593
602
  "race-condition-review",
603
+ "async-timing-boundary-review",
594
604
  "concurrency-invariant-review",
595
605
  "failure-integrity-review",
596
606
  "backend-log-evidence-review",
@@ -629,6 +639,7 @@ oss = [
629
639
  "node-code-change",
630
640
  "react-code-change",
631
641
  "vue-code-change",
642
+ "vite-code-change",
632
643
  "python-code-change",
633
644
  "powershell-code-change",
634
645
  "shell-code-change",
@@ -637,6 +648,7 @@ oss = [
637
648
  "svelte-code-change",
638
649
  "tailwind-code-change",
639
650
  "tauri-code-change",
651
+ "wails-code-change",
640
652
  "typescript-code-change",
641
653
  "unocss-code-change",
642
654
  "cli-output-contract-review",
@@ -770,6 +782,7 @@ team = [
770
782
  "quadratic-scan-review",
771
783
  "type-state-modeling-review",
772
784
  "race-condition-review",
785
+ "async-timing-boundary-review",
773
786
  "concurrency-invariant-review",
774
787
  "failure-integrity-review",
775
788
  "backend-log-evidence-review",
@@ -808,6 +821,7 @@ team = [
808
821
  "node-code-change",
809
822
  "react-code-change",
810
823
  "vue-code-change",
824
+ "vite-code-change",
811
825
  "python-code-change",
812
826
  "powershell-code-change",
813
827
  "shell-code-change",
@@ -816,6 +830,7 @@ team = [
816
830
  "svelte-code-change",
817
831
  "tailwind-code-change",
818
832
  "tauri-code-change",
833
+ "wails-code-change",
819
834
  "typescript-code-change",
820
835
  "unocss-code-change",
821
836
  "command-contract-authoring",
@@ -935,6 +950,7 @@ product = [
935
950
  "quadratic-scan-review",
936
951
  "type-state-modeling-review",
937
952
  "race-condition-review",
953
+ "async-timing-boundary-review",
938
954
  "concurrency-invariant-review",
939
955
  "failure-integrity-review",
940
956
  "backend-log-evidence-review",
@@ -973,6 +989,7 @@ product = [
973
989
  "node-code-change",
974
990
  "react-code-change",
975
991
  "vue-code-change",
992
+ "vite-code-change",
976
993
  "python-code-change",
977
994
  "powershell-code-change",
978
995
  "shell-code-change",
@@ -981,6 +998,7 @@ product = [
981
998
  "svelte-code-change",
982
999
  "tailwind-code-change",
983
1000
  "tauri-code-change",
1001
+ "wails-code-change",
984
1002
  "typescript-code-change",
985
1003
  "unocss-code-change",
986
1004
  "command-contract-authoring",
@@ -1106,6 +1124,7 @@ library = [
1106
1124
  "quadratic-scan-review",
1107
1125
  "type-state-modeling-review",
1108
1126
  "race-condition-review",
1127
+ "async-timing-boundary-review",
1109
1128
  "concurrency-invariant-review",
1110
1129
  "failure-integrity-review",
1111
1130
  "backend-log-evidence-review",
@@ -1144,6 +1163,7 @@ library = [
1144
1163
  "node-code-change",
1145
1164
  "react-code-change",
1146
1165
  "vue-code-change",
1166
+ "vite-code-change",
1147
1167
  "python-code-change",
1148
1168
  "powershell-code-change",
1149
1169
  "shell-code-change",
@@ -1152,6 +1172,7 @@ library = [
1152
1172
  "svelte-code-change",
1153
1173
  "tailwind-code-change",
1154
1174
  "tauri-code-change",
1175
+ "wails-code-change",
1155
1176
  "typescript-code-change",
1156
1177
  "unocss-code-change",
1157
1178
  "cli-output-contract-review",