@omega.js/desktop 0.52.0 → 0.54.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (345) hide show
  1. package/README.md +53 -48
  2. package/dist/assets/css/core/_initialize.scss +1 -1
  3. package/dist/assets/js/core/app-shell.js +14 -15
  4. package/dist/assets/themes/_template/_theme.js +6 -6
  5. package/dist/assets/themes/base/_includes/global/sections/account.html +4 -4
  6. package/dist/assets/themes/base/_includes/global/sections/app-sidebar.html +5 -5
  7. package/dist/assets/themes/base/_layouts/frontend/pages/account/index.html +3 -3
  8. package/dist/assets/themes/base/_layouts/frontend/pages/alternatives/index.html +1 -1
  9. package/dist/assets/themes/base/_layouts/frontend/pages/blog/tags/tag.html +1 -1
  10. package/dist/assets/themes/base/_layouts/frontend/pages/payment/confirmation.html +1 -1
  11. package/dist/assets/themes/base/_sections/marketing/newsletter-cta/section.js +2 -3
  12. package/dist/assets/themes/base/_sections/verts/unit/section.html +1 -1
  13. package/dist/assets/themes/base/_sections/verts/unit/section.js +3 -4
  14. package/dist/assets/themes/base/_theme.js +4 -3
  15. package/dist/assets/themes/bootstrap/_theme.js +2 -2
  16. package/dist/assets/themes/bootstrap/overrides/_links.scss +1 -1
  17. package/dist/assets/themes/classy/_theme.js +8 -6
  18. package/dist/assets/themes/classy/css/marketing/_sections.scss +1 -2
  19. package/dist/assets/themes/classy/js/hero-demo-form.js +3 -2
  20. package/dist/assets/themes/neobrutalism/_theme.js +5 -5
  21. package/dist/assets/themes/neobrutalism/js/pages/test/libraries/layers/index.js +1 -1
  22. package/dist/assets/themes/newsflash/_theme.js +6 -6
  23. package/dist/assets/themes/newsflash/js/pages/test/libraries/layers/index.js +1 -1
  24. package/dist/build.js +87 -111
  25. package/dist/cli-run.js +4 -1
  26. package/dist/cli.js +3 -3
  27. package/dist/commands/build.js +2 -2
  28. package/dist/commands/cdp/capture.js +2 -2
  29. package/dist/commands/cdp/client.js +1 -1
  30. package/dist/commands/cdp/quit.js +2 -2
  31. package/dist/commands/cdp/relaunch.js +2 -2
  32. package/dist/commands/cdp/theme.js +1 -1
  33. package/dist/commands/cdp.js +1 -1
  34. package/dist/commands/clean.js +4 -5
  35. package/dist/commands/deploy.js +4 -4
  36. package/dist/commands/dev.js +25 -0
  37. package/dist/commands/finalize-release.js +4 -4
  38. package/dist/commands/launch.js +2 -2
  39. package/dist/commands/lib/deploy-precheck.js +3 -3
  40. package/dist/commands/lib/ensure-target.js +18 -23
  41. package/dist/commands/lib/migrate.js +17 -0
  42. package/dist/commands/logs.js +1 -1
  43. package/dist/commands/package.js +2 -2
  44. package/dist/commands/publish.js +2 -2
  45. package/dist/commands/release.js +4 -4
  46. package/dist/commands/runner.js +11 -11
  47. package/dist/commands/sign-windows.js +5 -5
  48. package/dist/commands/test.js +8 -8
  49. package/dist/commands/update.js +7 -6
  50. package/dist/commands/validate-certs.js +4 -4
  51. package/dist/commands/version.js +3 -3
  52. package/dist/defaults/.github/workflows/build.yml +18 -18
  53. package/dist/defaults/_.gitignore +0 -2
  54. package/dist/defaults/_mas/README.md +3 -3
  55. package/dist/defaults/config/certs/README.md +1 -1
  56. package/dist/defaults/config/omega.json5 +43 -43
  57. package/dist/defaults/docs/README.md +3 -3
  58. package/dist/defaults/gulpfile.js +1 -1
  59. package/dist/defaults/hooks/build/post.js +2 -2
  60. package/dist/defaults/hooks/build/pre.js +2 -2
  61. package/dist/defaults/hooks/deploy/pre.js +1 -1
  62. package/dist/defaults/hooks/notarize/post.js +2 -2
  63. package/dist/defaults/hooks/release/post.js +2 -2
  64. package/dist/defaults/hooks/release/pre.js +2 -2
  65. package/dist/defaults/src/assets/js/components/about/index.js +3 -5
  66. package/dist/defaults/src/assets/js/components/main/index.js +3 -5
  67. package/dist/defaults/src/assets/js/components/settings/index.js +3 -5
  68. package/dist/defaults/src/assets/scss/pages/about.scss +1 -1
  69. package/dist/defaults/src/assets/scss/pages/main.scss +1 -1
  70. package/dist/defaults/src/assets/scss/pages/settings.scss +1 -1
  71. package/dist/defaults/src/integrations/context-menu/index.js +13 -13
  72. package/dist/defaults/src/integrations/menu/index.js +8 -8
  73. package/dist/defaults/src/integrations/tray/index.js +12 -12
  74. package/dist/defaults/src/main.js +5 -7
  75. package/dist/defaults/src/preload.js +4 -6
  76. package/dist/defaults/test/README.md +5 -5
  77. package/dist/defaults/test/_init.js +1 -1
  78. package/dist/gulp/main.js +9 -10
  79. package/dist/gulp/tasks/audit.js +11 -14
  80. package/dist/gulp/tasks/build-config.js +8 -8
  81. package/dist/gulp/tasks/bundle.js +16 -16
  82. package/dist/gulp/tasks/defaults.js +3 -3
  83. package/dist/gulp/tasks/distribute.js +2 -2
  84. package/dist/gulp/tasks/html.js +9 -9
  85. package/dist/gulp/tasks/package-quick.js +3 -3
  86. package/dist/gulp/tasks/package.js +3 -3
  87. package/dist/gulp/tasks/release.js +3 -3
  88. package/dist/gulp/tasks/sass.js +6 -6
  89. package/dist/gulp/tasks/serve.js +4 -4
  90. package/dist/hooks/notarize-artifacts.js +1 -1
  91. package/dist/hooks/notarize.js +1 -1
  92. package/dist/index.js +5 -8
  93. package/dist/lib/_environment-mixin.js +50 -0
  94. package/dist/lib/_lifecycle-mixin.js +45 -0
  95. package/dist/lib/analytics.js +33 -35
  96. package/dist/lib/app-state.js +14 -14
  97. package/dist/lib/auth-flow.js +18 -18
  98. package/dist/lib/auth-persistence.js +12 -12
  99. package/dist/lib/auth.js +421 -0
  100. package/dist/lib/auto-updater.js +49 -49
  101. package/dist/lib/context-menu.js +13 -13
  102. package/dist/lib/context.js +19 -19
  103. package/dist/lib/deep-link.js +34 -34
  104. package/dist/lib/fontawesome.js +5 -5
  105. package/dist/lib/ipc.js +4 -4
  106. package/dist/lib/menu.js +25 -25
  107. package/dist/lib/protocol.js +5 -5
  108. package/dist/lib/remote-config.js +22 -22
  109. package/dist/lib/remote-scripts.js +21 -21
  110. package/dist/lib/restart-manager/index.js +29 -29
  111. package/dist/lib/restart-manager/install.js +1 -1
  112. package/dist/lib/restart-manager/protocol.js +1 -1
  113. package/dist/lib/sign-helpers/exec-with-limit.js +1 -1
  114. package/dist/lib/sign-helpers/sign-events.js +1 -1
  115. package/dist/lib/startup.js +18 -13
  116. package/dist/lib/storage.js +10 -10
  117. package/dist/lib/templating.js +16 -16
  118. package/dist/lib/theme.js +10 -10
  119. package/dist/lib/tray.js +27 -27
  120. package/dist/lib/usage.js +11 -11
  121. package/dist/lib/window-manager.js +26 -26
  122. package/dist/main.js +399 -483
  123. package/dist/preload.js +236 -176
  124. package/dist/renderer.js +417 -391
  125. package/dist/test/fixtures/consumer-app/config/omega.json5 +1 -1
  126. package/dist/test/fixtures/consumer-app/src/assets/js/components/main/index.js +8 -11
  127. package/dist/test/fixtures/consumer-app/src/main.js +5 -7
  128. package/dist/test/fixtures/consumer-app/src/preload.js +2 -2
  129. package/dist/test/harness/boot-entry.js +22 -20
  130. package/dist/test/harness/main-entry.js +31 -30
  131. package/dist/test/harness/renderer-entry.js +5 -5
  132. package/dist/test/harness/renderer-preload.js +137 -141
  133. package/dist/test/index.js +10 -10
  134. package/dist/test/runner.js +2 -2
  135. package/dist/test/runners/boot.js +7 -6
  136. package/dist/test/runners/electron.js +3 -2
  137. package/dist/test/runners/render-event.js +2 -2
  138. package/dist/test/suites/boot/consumer-app-boots.test.js +57 -26
  139. package/dist/test/suites/boot/restart-manager.test.js +2 -2
  140. package/dist/test/suites/boot/storage-bundled.test.js +5 -5
  141. package/dist/test/suites/boot/theme.test.js +13 -13
  142. package/dist/test/suites/build/audit.test.js +21 -8
  143. package/dist/test/suites/build/auth-persistence-resolve.test.js +6 -6
  144. package/dist/test/suites/build/boot-fixture.test.js +2 -2
  145. package/dist/test/suites/build/boot-runner-timeout.test.js +6 -5
  146. package/dist/test/suites/build/brand-scss.test.js +1 -1
  147. package/dist/test/suites/build/build-json-bake.test.js +1 -1
  148. package/dist/test/suites/build/build-workflow-jobs.test.js +2 -2
  149. package/dist/test/suites/build/cli.test.js +30 -2
  150. package/dist/test/suites/build/config-schema.test.js +5 -5
  151. package/dist/test/suites/build/defaults-em-dash.test.js +22 -0
  152. package/dist/test/suites/build/defaults-scaffold.test.js +21 -7
  153. package/dist/test/suites/build/deploy-direct.test.js +7 -5
  154. package/dist/test/suites/build/deploy-dispatch.test.js +2 -1
  155. package/dist/test/suites/build/deploy-hook.test.js +7 -5
  156. package/dist/test/suites/build/dev-verb.test.js +67 -0
  157. package/dist/test/suites/build/ensure-target.test.js +13 -5
  158. package/dist/test/suites/build/env-delivery.test.js +2 -2
  159. package/dist/test/suites/build/esm-only-dependency.test.js +2 -2
  160. package/dist/test/suites/build/exports.test.js +9 -8
  161. package/dist/test/suites/build/get-config.test.js +4 -4
  162. package/dist/test/suites/build/manifest-deps.test.js +1 -1
  163. package/dist/test/suites/build/merge-line-files.test.js +7 -7
  164. package/dist/test/suites/build/migrate.test.js +29 -0
  165. package/dist/test/suites/build/omega-shell.test.js +34 -2
  166. package/dist/test/suites/build/omega.test.js +350 -0
  167. package/dist/test/suites/build/project-scripts-deps.test.js +6 -10
  168. package/dist/test/suites/build/renderer-auth-bridge.test.js +211 -78
  169. package/dist/test/suites/build/runner-env-write.test.js +73 -0
  170. package/dist/test/suites/build/runner.test.js +11 -10
  171. package/dist/test/suites/build/sentry.test.js +2 -2
  172. package/dist/test/suites/build/setup-scripts.test.js +27 -0
  173. package/dist/test/suites/build/sign-windows-e2e.test.js +2 -2
  174. package/dist/test/suites/build/templating.test.js +3 -3
  175. package/dist/test/suites/build/test-stealth.test.js +7 -9
  176. package/dist/test/suites/build/url-helpers.test.js +55 -56
  177. package/dist/test/suites/build/validate-config.test.js +15 -4
  178. package/dist/test/suites/build/verb-logs.test.js +20 -0
  179. package/dist/test/suites/build/wave5-pins.test.js +2 -2
  180. package/dist/test/suites/main/analytics.test.js +59 -59
  181. package/dist/test/suites/main/app-state.test.js +66 -66
  182. package/dist/test/suites/main/auth-flow.test.js +41 -41
  183. package/dist/test/suites/main/auth-persistence.test.js +54 -43
  184. package/dist/test/suites/main/{client-bridge.integration.test.js → auth.integration.test.js} +10 -9
  185. package/dist/test/suites/main/auth.test.js +336 -0
  186. package/dist/test/suites/main/auto-updater.test.js +134 -134
  187. package/dist/test/suites/main/boot-sequence.test.js +37 -49
  188. package/dist/test/suites/main/context-menu.test.js +51 -50
  189. package/dist/test/suites/main/context.test.js +25 -25
  190. package/dist/test/suites/main/deep-link.test.js +74 -74
  191. package/dist/test/suites/main/fontawesome.test.js +27 -27
  192. package/dist/test/suites/main/ipc.test.js +35 -35
  193. package/dist/test/suites/main/menu.test.js +101 -100
  194. package/dist/test/suites/main/protocol.test.js +19 -19
  195. package/dist/test/suites/main/remote-config.test.js +63 -63
  196. package/dist/test/suites/main/remote-scripts.test.js +103 -103
  197. package/dist/test/suites/main/request.test.js +71 -0
  198. package/dist/test/suites/main/restart-manager.test.js +33 -33
  199. package/dist/test/suites/main/startup-paths-and-ua.test.js +4 -4
  200. package/dist/test/suites/main/startup.test.js +26 -26
  201. package/dist/test/suites/main/stealth-window.test.js +1 -1
  202. package/dist/test/suites/main/storage.test.js +25 -25
  203. package/dist/test/suites/main/theme.test.js +34 -34
  204. package/dist/test/suites/main/tray.test.js +79 -79
  205. package/dist/test/suites/main/url-helpers.test.js +133 -133
  206. package/dist/test/suites/main/usage.test.js +25 -25
  207. package/dist/test/suites/main/window-bounds.test.js +27 -27
  208. package/dist/test/suites/main/window-manager.test.js +44 -44
  209. package/dist/test/suites/renderer/analytics-bridge.test.js +5 -5
  210. package/dist/test/suites/renderer/cross-context-helpers.test.js +37 -31
  211. package/dist/test/suites/renderer/round-trip.test.js +3 -3
  212. package/dist/test/suites/renderer/tooltips.test.js +15 -15
  213. package/dist/test/suites/renderer/{window-em-surface.test.js → window-desktop-surface.test.js} +28 -8
  214. package/dist/test/utils/extended-mode-warning.js +1 -1
  215. package/dist/utils/boot-harness.js +56 -0
  216. package/dist/utils/build-pipeline.js +4 -4
  217. package/dist/utils/mode-helpers.js +2 -15
  218. package/dist/utils/runner-env.js +13 -28
  219. package/dist/utils/ship-keys.js +3 -3
  220. package/dist/utils/signing-status.js +51 -0
  221. package/dist/utils/test-events.js +7 -0
  222. package/dist/utils/test-stealth.js +6 -6
  223. package/dist/utils/url-helpers.js +52 -42
  224. package/dist/utils/user-agent.js +44 -0
  225. package/dist/vendor/account/engine.js +3 -3
  226. package/dist/vendor/account/index.js +14 -45
  227. package/dist/vendor/account/resolve-account.js +44 -0
  228. package/dist/vendor/account/schema.js +1 -1
  229. package/dist/vendor/account/user.js +99 -0
  230. package/dist/vendor/config/client-config.js +1 -1
  231. package/dist/vendor/config/company.js +46 -14
  232. package/dist/vendor/config/defaults.js +30 -7
  233. package/dist/vendor/config/edit.js +25 -3
  234. package/dist/vendor/config/env-delivery.js +1 -1
  235. package/dist/vendor/config/env-schema.js +3 -6
  236. package/dist/vendor/config/env.js +34 -22
  237. package/dist/vendor/config/environment.js +11 -30
  238. package/dist/vendor/config/index.js +21 -28
  239. package/dist/vendor/config/load.js +16 -9
  240. package/dist/vendor/config/platforms.js +1 -1
  241. package/dist/vendor/config/repo.js +10 -27
  242. package/dist/vendor/config/schema-client.js +64 -0
  243. package/dist/vendor/config/schema-cloud.js +38 -0
  244. package/dist/vendor/config/schema-manager.js +118 -0
  245. package/dist/vendor/config/schema-overrides.js +68 -0
  246. package/dist/vendor/config/schema.js +104 -160
  247. package/dist/vendor/config/site-global.js +2 -3
  248. package/dist/vendor/config/validate.js +97 -78
  249. package/dist/vendor/config/winback.js +1 -1
  250. package/dist/vendor/devkit/actions-secrets.js +1 -1
  251. package/dist/vendor/devkit/agents-md.js +233 -0
  252. package/dist/vendor/devkit/attach-log-file.js +16 -2
  253. package/dist/vendor/devkit/build-json.js +1 -1
  254. package/dist/vendor/devkit/ci-workflows.js +30 -30
  255. package/dist/vendor/devkit/cli-router.js +16 -11
  256. package/dist/vendor/devkit/defaults-engine.js +15 -51
  257. package/dist/vendor/devkit/deploy-snapshot.js +44 -9
  258. package/dist/vendor/devkit/env-lines.js +183 -0
  259. package/dist/vendor/devkit/local.js +64 -10
  260. package/dist/vendor/devkit/lockfile.js +32 -13
  261. package/dist/vendor/devkit/logger.js +7 -2
  262. package/dist/vendor/devkit/merge-line-files.js +219 -177
  263. package/dist/vendor/devkit/omega-bin.js +208 -111
  264. package/dist/vendor/devkit/preludes/docs-sync.js +52 -0
  265. package/dist/vendor/devkit/preludes/index.js +1 -0
  266. package/dist/vendor/devkit/target-picker.js +45 -0
  267. package/dist/vendor/devkit/test/dashed-files.js +37 -0
  268. package/dist/vendor/devkit/test/run-verb-under-tee.js +71 -0
  269. package/dist/vendor/devkit/test/runner-core.js +6 -6
  270. package/dist/vendor/devkit/update.js +15 -15
  271. package/dist/vendor/devkit/verb-scripts.js +40 -0
  272. package/dist/vendor/devkit/verbs.js +170 -0
  273. package/dist/vendor/monitoring/env.js +2 -2
  274. package/dist/vendor/monitoring/index.js +1 -1
  275. package/dist/vendor/monitoring/main.js +1 -1
  276. package/dist/vendor/monitoring/preload.js +1 -1
  277. package/dist/vendor/monitoring/renderer.js +1 -1
  278. package/package.json +19 -26
  279. package/dist/commands/install.js +0 -37
  280. package/dist/defaults/AGENTS.md +0 -110
  281. package/dist/defaults/CLAUDE.md +0 -1
  282. package/dist/lib/client-bridge.js +0 -374
  283. package/dist/lib/logger.js +0 -4
  284. package/dist/test/suites/build/manager.test.js +0 -213
  285. package/dist/test/suites/main/client-bridge.test.js +0 -262
  286. package/dist/vendor/config/env-retired.js +0 -137
  287. package/dist/vendor/config/retired-keys.js +0 -635
  288. package/docs/analytics.md +0 -140
  289. package/docs/app-state.md +0 -92
  290. package/docs/audit.md +0 -69
  291. package/docs/auto-updater.md +0 -243
  292. package/docs/boot-sequence.md +0 -39
  293. package/docs/build-system.md +0 -169
  294. package/docs/cdp-debugging.md +0 -169
  295. package/docs/client-bridge.md +0 -269
  296. package/docs/common-mistakes.md +0 -21
  297. package/docs/config-schema.md +0 -120
  298. package/docs/context-menu.md +0 -112
  299. package/docs/context.md +0 -81
  300. package/docs/css.md +0 -90
  301. package/docs/deep-link.md +0 -186
  302. package/docs/environment-detection.md +0 -112
  303. package/docs/fontawesome.md +0 -107
  304. package/docs/hooks.md +0 -89
  305. package/docs/icons.md +0 -79
  306. package/docs/index.md +0 -317
  307. package/docs/installer-options.md +0 -165
  308. package/docs/ipc.md +0 -61
  309. package/docs/lib-modules.md +0 -53
  310. package/docs/logging.md +0 -229
  311. package/docs/menu.md +0 -160
  312. package/docs/releasing.md +0 -239
  313. package/docs/remote-config.md +0 -118
  314. package/docs/remote-scripts.md +0 -144
  315. package/docs/restart-manager.md +0 -144
  316. package/docs/runner.md +0 -290
  317. package/docs/sentry.md +0 -97
  318. package/docs/shared/agent-docs.md +0 -89
  319. package/docs/shared/analytics.md +0 -612
  320. package/docs/shared/brands.md +0 -57
  321. package/docs/shared/breaking-changes.md +0 -851
  322. package/docs/shared/config.md +0 -1952
  323. package/docs/shared/deploys.md +0 -341
  324. package/docs/shared/icons.md +0 -219
  325. package/docs/shared/local-dev.md +0 -167
  326. package/docs/shared/logging.md +0 -205
  327. package/docs/shared/monitoring.md +0 -167
  328. package/docs/shared/publishing.md +0 -187
  329. package/docs/shared/rulings.md +0 -34
  330. package/docs/shared/testing.md +0 -147
  331. package/docs/shared/theming.md +0 -629
  332. package/docs/shared/translation.md +0 -333
  333. package/docs/shared/updates.md +0 -61
  334. package/docs/signing.md +0 -293
  335. package/docs/startup.md +0 -142
  336. package/docs/storage.md +0 -59
  337. package/docs/templating.md +0 -101
  338. package/docs/test-boot-layer.md +0 -157
  339. package/docs/test-framework.md +0 -362
  340. package/docs/themes.md +0 -149
  341. package/docs/tooltips.md +0 -99
  342. package/docs/tray.md +0 -164
  343. package/docs/usage.md +0 -58
  344. package/docs/verts.md +0 -62
  345. package/docs/windows.md +0 -149
@@ -20,7 +20,8 @@
20
20
  * peer dependencies installed when missing or behind (a satisfied target
21
21
  * installs nothing)
22
22
  * defaults tree src/defaults/** — copy-if-missing, marker merges for
23
- * .env/.gitignore/AGENTS.md, workflows re-rendered
23
+ * .env/.gitignore, workflows re-rendered
24
+ * AGENTS.md standalone only, through devkit's one builder
24
25
  * locality a WARNING when the framework is a `file:` link
25
26
  *
26
27
  * Everything here is copy-if-missing, marker-merge or write-if-changed. What
@@ -31,14 +32,16 @@
31
32
  const path = require('path');
32
33
  const jetpack = require('fs-jetpack');
33
34
  const version = require('wonderful-version');
34
- const Manager = new (require('../../build.js'));
35
+ const build = require('../../build.js');
35
36
  const { ensurePeerDependencies, readProject } = require('./dependencies.js');
36
37
  const { renderSecretsBlock } = require('../../vendor/config/env-delivery.js');
37
38
  const { composeTargetWorkflows, renderInstallFirewall, renderInstallWorkspace } = require('../../vendor/devkit/ci-workflows.js');
38
39
  const { assertScaffoldable } = require('../../vendor/devkit/scaffold-guard.js');
40
+ const { scaffoldAgentsMd } = require('../../vendor/devkit/agents-md.js');
41
+ const { projectScripts } = require('../../vendor/devkit/verb-scripts.js');
39
42
 
40
- const logger = Manager.logger('ensure-target');
41
- const package = Manager.getPackage('main');
43
+ const logger = build.logger('ensure-target');
44
+ const package = build.getPackage('main');
42
45
 
43
46
  /**
44
47
  * Sync the consumer manifest: the omega verb scripts, the npm-private latch,
@@ -47,16 +50,13 @@ const package = Manager.getPackage('main');
47
50
  * Identical content is not a write (#590).
48
51
  */
49
52
  function setupScripts(projectDir, result) {
50
- projectDir = projectDir || Manager.getRootPath('project');
53
+ projectDir = projectDir || build.getRootPath('project');
51
54
  result = result || { changed: [] };
52
55
 
53
56
  const project = readProject(projectDir);
54
57
 
55
- project.scripts = project.scripts || {};
56
-
57
- Object.keys(package.projectScripts || {}).forEach((key) => {
58
- project.scripts[key] = package.projectScripts[key];
59
- });
58
+ // The verb table's scripts for this framework, the manifest's declarations over them
59
+ project.scripts = { ...project.scripts, ...projectScripts(package) };
60
60
 
61
61
  // Electron consumer projects should not be published to npm
62
62
  project.private = true;
@@ -128,7 +128,7 @@ function checkNodeVersion(projectDir, requiredMajor, warn) {
128
128
  * @param {object} log - `{ log, warn, error }` handed to the engine.
129
129
  */
130
130
  async function copyDefaults(projectDir, engineLogger) {
131
- projectDir = projectDir || Manager.getRootPath('project');
131
+ projectDir = projectDir || build.getRootPath('project');
132
132
  engineLogger = engineLogger || logger;
133
133
 
134
134
  const defaultsDir = path.resolve(__dirname, '..', '..', 'defaults');
@@ -195,18 +195,10 @@ async function copyDefaults(projectDir, engineLogger) {
195
195
  // material really lives, so a target keeps the explanation that matches
196
196
  // the ignore rules the scaffold just wrote, never an older one.
197
197
  'config/certs/README.md': { overwrite: true },
198
- // The agent-docs chain (#63): AGENTS.md carries the content (marker-merged
199
- // like .gitignore), CLAUDE.md is the one-line `@AGENTS.md` pointer — copied
200
- // when missing by the `**/*` rule above, never clobbered.
201
- 'AGENTS.md': { mergeLines: true, template: templateContext },
202
- // Brand doc unification (Ian 2026-07-20): inside a brand monorepo the
203
- // BRAND ROOT is the one doc home — per-target AGENTS.md/CLAUDE.md/CHANGELOG.md/docs/
204
- // never scaffold, and existing framework-owned-only copies are swept
205
- // (retire rules; consumer content is never destroyed). Standalone projects
206
- // keep them. Last-match-wins: these override the rules above.
198
+ // In a brand the BRAND ROOT is the one doc home: per-target CHANGELOG.md
199
+ // and docs/ never scaffold, and framework-owned copies are swept (consumer
200
+ // content is kept). Last-match-wins over the rules above.
207
201
  ...(isBrandTarget ? {
208
- 'AGENTS.md': { retire: true, template: templateContext },
209
- 'CLAUDE.md': { retire: true, template: templateContext },
210
202
  'CHANGELOG.md': { retire: true },
211
203
  'docs/**/*': { retire: true },
212
204
  } : {}),
@@ -235,6 +227,9 @@ async function copyDefaults(projectDir, engineLogger) {
235
227
  logger: engineLogger,
236
228
  });
237
229
 
230
+ // The project-root AGENTS.md, through devkit's one builder.
231
+ scaffoldAgentsMd({ outputDir: projectDir, standalone: seed.standalone, result: applied, logger: engineLogger });
232
+
238
233
  if (isBrandTarget) {
239
234
  // The same templateContext the yml rule uses, so the composed copy carries
240
235
  // the generated `githubSecrets` block — a composed workflow with the raw
@@ -311,7 +306,7 @@ function checkLocality(projectDir) {
311
306
  */
312
307
  async function ensureTarget(options) {
313
308
  options = options || {};
314
- const projectDir = options.projectDir || Manager.getRootPath('project');
309
+ const projectDir = options.projectDir || build.getRootPath('project');
315
310
  const log = options.log || (() => {});
316
311
  const warn = options.warn || (() => {});
317
312
  const result = { written: [], merged: [], changed: [] };
@@ -0,0 +1,17 @@
1
+ /**
2
+ * migrateTarget: the desktop leg of the brand root's `omega migrate`. No
3
+ * legacy electron-manager shape converts mechanically yet (the register's
4
+ * by-hand steps cover them), so it answers the shared shape with nothing due.
5
+ * Every framework exposes this entry, so the manager's walk never special-cases
6
+ * a framework name.
7
+ *
8
+ * @param {string} targetDir - the desktop target's root
9
+ * @param {object} [options]
10
+ * @param {boolean} [options.execute] - convert (default: report only)
11
+ * @returns {{ due: string[], changed: string[], errors: string[] }}
12
+ */
13
+ function migrateTarget(targetDir, options = {}) {
14
+ return { due: [], changed: [], errors: [] };
15
+ }
16
+
17
+ module.exports = { migrateTarget };
@@ -3,7 +3,7 @@
3
3
  //
4
4
  // The optional positional names the surface (default `runtime`) and resolves to
5
5
  // <projectRoot>/logs/<surface>.log — the same four files documented in
6
- // docs/logging.md. Every flag below works on whichever surface was named.
6
+ // docs/desktop/logging.md. Every flag below works on whichever surface was named.
7
7
  //
8
8
  // `runtime` resolves to the file the runtime logger writes to:
9
9
  // - Dev (running from a project directory): <projectRoot>/logs/runtime.log
@@ -1,6 +1,6 @@
1
1
  // Libraries
2
- const Manager = new (require('../build.js'));
3
- const logger = Manager.logger('package');
2
+ const build = require('../build.js');
3
+ const logger = build.logger('package');
4
4
  const { runPipeline } = require('../utils/build-pipeline.js');
5
5
 
6
6
  // `npx omega package` (the consumer's `package` script) builds the full installer
@@ -1,6 +1,6 @@
1
1
  // Libraries
2
- const Manager = new (require('../build.js'));
3
- const logger = Manager.logger('publish');
2
+ const build = require('../build.js');
3
+ const logger = build.logger('publish');
4
4
  const { runPipeline } = require('../utils/build-pipeline.js');
5
5
 
6
6
  // `npx omega publish` publishes from an already-built tree (the CI lane calls it
@@ -2,7 +2,7 @@
2
2
  // run it started.
3
3
  //
4
4
  // Replaces the old "do it from my laptop" release flow with "let CI do it, but make it
5
- // feel local." User runs `npm run release` (or `npx omega release`) and gets:
5
+ // feel local." User runs `npx omega release` and gets:
6
6
  // 1. The ONE deploy lane every target takes (`@omega.js/devkit/deploy`'s
7
7
  // deployViaDispatch, #872, #915): the composed workflow files reach the
8
8
  // default branch when they differ there (GitHub registers a workflow from
@@ -24,9 +24,9 @@ const attachLogFile = require('../utils/attach-log-file.js');
24
24
  const { deployViaDispatch, dispatchTarget, laneLabel, resolveToken } = require('../vendor/devkit/deploy.js');
25
25
  const { followRun } = require('../vendor/devkit/deploy-follow.js');
26
26
  const { targetNameFromDir } = require('../vendor/config/index.js');
27
- const Manager = new (require('../build.js'));
27
+ const build = require('../build.js');
28
28
 
29
- const logger = Manager.logger('release');
29
+ const logger = build.logger('release');
30
30
 
31
31
  module.exports = async function release(options = {}) {
32
32
  const projectRoot = process.cwd();
@@ -58,7 +58,7 @@ module.exports = async function release(options = {}) {
58
58
  // `build.yml` standalone). ONE helper for all four targets
59
59
  // ([#847](https://github.com/Omega-JS-Stack/omega/issues/847)), where this
60
60
  // file used to keep desktop's own copy of it.
61
- const { owner, repo, workflow: WORKFLOW_FILE } = dispatchTarget({ projectRoot, config: Manager.getConfig(), workflow: 'build.yml' });
61
+ const { owner, repo, workflow: WORKFLOW_FILE } = dispatchTarget({ projectRoot, config: build.getConfig(), workflow: 'build.yml' });
62
62
 
63
63
  // Optional --platforms / --platform flag forwarded as a workflow input. Accepts a
64
64
  // single value ('windows') or comma-separated list ('mac,linux'). Special value
@@ -24,7 +24,7 @@
24
24
  // stop Kill every Runner.Listener.exe under RUNNER_HOME.
25
25
  // status Registered orgs, Startup shortcuts, live listeners.
26
26
  // uninstall Remove everything — legacy services and tasks, and the
27
- // electron-manager era's em-runner install, included.
27
+ // legacy em-runner install, included.
28
28
  // monitor Tail the JSONL signing event log, pretty-printed.
29
29
  //
30
30
  // Every subcommand except `monitor` refuses on non-Windows
@@ -35,8 +35,8 @@ const fs = require('fs');
35
35
  const os = require('os');
36
36
  const jetpack = require('fs-jetpack');
37
37
 
38
- const Manager = new (require('../build.js'));
39
- const logger = Manager.logger('runner');
38
+ const build = require('../build.js');
39
+ const logger = build.logger('runner');
40
40
 
41
41
  const RUNNER_LABELS = ['self-hosted', 'windows', 'ev-token'];
42
42
 
@@ -63,7 +63,7 @@ const attachLogFile = require('../utils/attach-log-file.js');
63
63
  const RUNNER_HOME = process.env.OMEGA_RUNNER_HOME || defaultRunnerHome();
64
64
  loadRunnerEnv({ home: RUNNER_HOME });
65
65
 
66
- // The electron-manager era of this command (`em runner`) laid the same design
66
+ // The legacy generation of this command (`em runner`) laid the same design
67
67
  // down under other names: the home was %LOCALAPPDATA%\em-runner (C:\actions-runners
68
68
  // before that), and the Startup shortcuts and the GitHub-side runners were
69
69
  // `em-runner-<host>-<org>`. An upgraded box still has all of it — live, and
@@ -207,7 +207,7 @@ async function install(options) {
207
207
  // the calling terminal at normal user privilege.
208
208
 
209
209
  // Idempotent by replacement: always tear down any prior install before starting —
210
- // the omega one, or the electron-manager one an upgraded box still runs.
210
+ // the omega one, or the legacy em-runner one an upgraded box still runs.
211
211
  if (jetpack.exists(home) || listLegacyRunnerHomes({ home }).length > 0 || listLegacyRunnerStartupShortcuts().length > 0) {
212
212
  logger.log(`Existing runner installation detected — uninstalling first for a clean re-install...`);
213
213
  try {
@@ -369,8 +369,8 @@ async function registerOrg(options) {
369
369
  // THIS host. Without this, re-running install accumulates orphaned runners (one per
370
370
  // failed/aborted install, one per host rename, etc.) which causes actions/runner to
371
371
  // auto-suffix the new runner's name (e.g. `-2872`) and breaks our ability to predict
372
- // service names. Match prefix is `omega-runner-<host>-<org>` — and the electron-manager
373
- // era's `em-runner-<host>-<org>`, the same box's older registration — so we never touch
372
+ // service names. Match prefix is `omega-runner-<host>-<org>` — and the legacy
373
+ // `em-runner-<host>-<org>`, the same box's older registration — so we never touch
374
374
  // user-created runners or runners from other hosts.
375
375
  //
376
376
  // We do this BEFORE fetching the registration token because the token is one-shot
@@ -900,7 +900,7 @@ async function statusServices(options) {
900
900
  }
901
901
  }
902
902
 
903
- // The electron-manager era's install (`em runner`): its home, its Startup
903
+ // The legacy install (`em runner`): its home, its Startup
904
904
  // shortcuts, and any listener still running out of it. None of it answers to
905
905
  // the omega names above, so it is named here and torn down by `uninstall`.
906
906
  const legacyHomes = listLegacyRunnerHomes({ home });
@@ -989,7 +989,7 @@ async function uninstall(options) {
989
989
  // handles asynchronously after stop).
990
990
  await removeRunnerHomeWithRetry(new Set(failed.map((f) => f.dir)), home);
991
991
 
992
- // The electron-manager era's install, when this box still has one: the same
992
+ // The legacy em-runner install, when this box still has one: the same
993
993
  // teardown, org by org, so its GitHub-side registrations come off too.
994
994
  const legacy = await uninstallLegacyRunnerInstalls(home);
995
995
  const stillRegistered = [...failed, ...legacy.failed];
@@ -1002,7 +1002,7 @@ async function uninstall(options) {
1002
1002
  logger.warn(` Their directories were kept — re-run 'npx omega runner uninstall' to retry, or delete them under each org's Settings → Actions → Runners.`);
1003
1003
  }
1004
1004
 
1005
- // Tear down the electron-manager era's runner install: its `em-runner-*`
1005
+ // Tear down the legacy runner install: its `em-runner-*`
1006
1006
  // Startup shortcuts, then each legacy home — deregister every org dir through
1007
1007
  // its own config.cmd, kill what runs out of it, remove it. A registration that
1008
1008
  // did not come off keeps its directory, exactly as the omega home's does.
@@ -1657,7 +1657,7 @@ function listRunnerStartupShortcuts(startupDir) {
1657
1657
  return listStartupShortcuts('omega-runner-', startupDir);
1658
1658
  }
1659
1659
 
1660
- // The electron-manager era's: `em-runner-<host>-<org>`, which `status` names
1660
+ // The legacy shortcuts: `em-runner-<host>-<org>`, which `status` names
1661
1661
  // and `uninstall` removes — never anything `start` would launch.
1662
1662
  function listLegacyRunnerStartupShortcuts(startupDir) {
1663
1663
  return listStartupShortcuts(LEGACY_RUNNER_PREFIX, startupDir);
@@ -21,8 +21,8 @@ const os = require('os');
21
21
  const jetpack = require('fs-jetpack');
22
22
  const { execute } = require('node-powertools');
23
23
 
24
- const Manager = new (require('../build.js'));
25
- const logger = Manager.logger('sign-windows');
24
+ const build = require('../build.js');
25
+ const logger = build.logger('sign-windows');
26
26
 
27
27
  // The box's own signing configuration (`<runner home>\.env`: the cert, the PIN,
28
28
  // signtool) is read before anything below looks at process.env, so a manual
@@ -90,9 +90,9 @@ async function runSignCommand(options) {
90
90
  return smokeTest();
91
91
  }
92
92
 
93
- const strategy = Manager.getWindowsSignStrategy();
93
+ const strategy = build.getWindowsSignStrategy();
94
94
 
95
- const config = Manager.getConfig();
95
+ const config = build.getConfig();
96
96
  const projectRoot = process.cwd();
97
97
 
98
98
  // Resolve --in and --out (CLI flags) → directories of unsigned / signed artifacts.
@@ -441,7 +441,7 @@ async function signWithSigntool(targets, inDir, outDir, deps) {
441
441
  // (mac/linux equivalents are produced by electron-builder during their publish step,
442
442
  // but Windows is split into a post-build sign job so we have to write the yml here).
443
443
  if (signedExes.length > 0) {
444
- const pkg = Manager.getPackage('project') || {};
444
+ const pkg = build.getPackage('project') || {};
445
445
  const version = pkg.version;
446
446
  if (!version) {
447
447
  log.warn('Could not determine version from package.json; skipping latest.yml generation.');
@@ -1,8 +1,8 @@
1
1
  // Libraries
2
2
  const path = require('path');
3
3
  const fs = require('fs');
4
- const Manager = new (require('../build.js'));
5
- const logger = Manager.logger('test');
4
+ const build = require('../build.js');
5
+ const logger = build.logger('test');
6
6
  const { run } = require('../test/runner.js');
7
7
  const attachLogFile = require('../utils/attach-log-file.js');
8
8
  const { EXTENDED_MODE_WARNING } = require('../test/utils/extended-mode-warning.js');
@@ -21,7 +21,7 @@ module.exports = async function (options) {
21
21
 
22
22
  // Tee all test output to <projectRoot>/logs/test.log (ANSI-stripped) — mirrors
23
23
  // @omega.js/backend's test.log and @omega.js/desktop's own dev.log pattern.
24
- attachLogFile(path.join(process.cwd(), 'logs', 'test.log'));
24
+ const detachLog = attachLogFile(path.join(process.cwd(), 'logs', 'test.log'));
25
25
 
26
26
  // The local half of the retired `omega setup` (#675) — idempotent, offline,
27
27
  // and quiet on a converged target. The gulp verbs get it from the `defaults`
@@ -43,7 +43,7 @@ module.exports = async function (options) {
43
43
  // Extended mode — opt into tests that hit REAL external services (Firebase, analytics,
44
44
  // update feeds) instead of skipping them. Off by default so `npx omega test` stays fast and
45
45
  // offline-safe. The canonical signal is the unprefixed `TEST_EXTENDED_MODE` env var — the
46
- // SAME name across @omega.js/backend, @omega.js/extension, UJM, and @omega.js/desktop (cross-framework parity); `--extended` is the CLI
46
+ // SAME name on every framework (cross-framework parity); `--extended` is the CLI
47
47
  // shorthand. Once set on process.env it propagates to every spawned child (electron
48
48
  // main/renderer/boot, the gulp boot build) automatically via `{ ...process.env }`.
49
49
  const extended = options.extended === true
@@ -58,7 +58,7 @@ module.exports = async function (options) {
58
58
  // When @omega.js/desktop itself runs its own boot-layer tests (the cwd's package.json is @omega.js/desktop's), there's
59
59
  // no real consumer app to boot. Point the boot runner at the fixture under
60
60
  // dist/test/fixtures/consumer-app unless the caller has already set OMEGA_TEST_BOOT_PROJECT
61
- // explicitly. Mirrors BXM's OMEGA_TEST_BOOT_PROJECT / UJM's UJ_TEST_BOOT_PROJECT.
61
+ // explicitly.
62
62
  if (!process.env.OMEGA_TEST_BOOT_PROJECT) {
63
63
  try {
64
64
  const cwdPkg = JSON.parse(fs.readFileSync(path.join(process.cwd(), 'package.json'), 'utf8'));
@@ -104,19 +104,19 @@ module.exports = async function (options) {
104
104
  // ONE target to every target, so a distinct code lets it count this as a
105
105
  // miss rather than a failure (#814).
106
106
  process.exitCode = noMatchExitCode();
107
- await attachLogFile.detach();
107
+ detachLog();
108
108
  return;
109
109
  }
110
110
 
111
111
  if (result.failed > 0) {
112
112
  process.exitCode = 1;
113
- await attachLogFile.detach();
113
+ detachLog();
114
114
  throw new Error(`${result.failed} test(s) failed`);
115
115
  }
116
116
 
117
117
  // Close test.log before exiting. Nothing to flush: every write already went
118
118
  // to the fd synchronously (#197), so the Results block survives the exit
119
119
  // below whatever happens — detach() just closes the handle.
120
- await attachLogFile.detach();
120
+ detachLog();
121
121
  process.exit(0);
122
122
  };
@@ -1,18 +1,19 @@
1
1
  /**
2
- * `omega update` — dependency freshness report (npu-outdated semantics):
2
+ * `omega update` — dependency freshness (npu-outdated semantics):
3
3
  * installed/wanted/latest + patch/minor/major per dep, releases younger than
4
- * --min-age days (default 7) QUARANTINED. `--apply` installs the
4
+ * --min-age days (default 7) QUARANTINED. A bare run installs the
5
5
  * non-quarantined, non-breaking set (`--major` opts into breaking) through
6
- * npu when present. The whole verb is the shared devkit implementation.
6
+ * npu when present; `--dry-run` reports and installs nothing. The whole verb
7
+ * is the shared devkit implementation.
7
8
  */
8
- const Manager = new (require('../build.js'));
9
- const logger = Manager.logger('update');
9
+ const build = require('../build.js');
10
+ const logger = build.logger('update');
10
11
  const { runUpdate } = require('../vendor/devkit/update.js');
11
12
 
12
13
  module.exports = async function (options) {
13
14
  await runUpdate({
14
15
  dir: process.cwd(),
15
- apply: options.apply,
16
+ dryRun: options.dryRun || options['dry-run'],
16
17
  major: options.major,
17
18
  minAge: options.minAge ?? options['min-age'],
18
19
  forceFresh: options.forceFresh || options['force-fresh'],
@@ -38,8 +38,8 @@ const { certificateExpiry, EXPIRY_WARN_DAYS } = require('../vendor/devkit/certs.
38
38
  const { signingPathCandidates } = require('../vendor/devkit/signing-env.js');
39
39
  const { requiredWhenHolds } = require('../vendor/config/env-rules.js');
40
40
 
41
- const Manager = new (require('../build.js'));
42
- const logger = Manager.logger('validate-certs');
41
+ const build = require('../build.js');
42
+ const logger = build.logger('validate-certs');
43
43
 
44
44
  module.exports = async function (options) {
45
45
  options = options || {};
@@ -48,8 +48,8 @@ module.exports = async function (options) {
48
48
  logger.log('Validating signing prerequisites...');
49
49
 
50
50
  const platform = process.platform;
51
- const config = Manager.getConfig();
52
- const winStrategy = Manager.getWindowsSignStrategy();
51
+ const config = build.getConfig();
52
+ const winStrategy = build.getWindowsSignStrategy();
53
53
 
54
54
  const issues = [];
55
55
 
@@ -1,8 +1,8 @@
1
1
  // Libraries
2
- const Manager = new (require('../build.js'));
3
- const logger = Manager.logger('version');
2
+ const build = require('../build.js');
3
+ const logger = build.logger('version');
4
4
 
5
- const package = Manager.getPackage('main');
5
+ const package = build.getPackage('main');
6
6
 
7
7
  module.exports = async function (options) {
8
8
  logger.log(package.version);
@@ -27,7 +27,7 @@ env:
27
27
  # `KEY: ${{ secrets.KEY }}` line per `delivery: { desktop: 'ci' | 'bake' }`
28
28
  # entry (@omega.js/config's env-delivery.js), re-rendered by every verb's
29
29
  # ensureTarget. Signing, notarization, store and analytics credentials all
30
- # arrive here, workflow-wide — the jobs and steps below consume them without
30
+ # arrive here, workflow-wide: the jobs and steps below consume them without
31
31
  # restating one. Add a key to the schema, not to this file.
32
32
  {{ githubSecrets }}
33
33
 
@@ -103,7 +103,7 @@ jobs:
103
103
 
104
104
  {{ installFirewall }}
105
105
 
106
- # On Windows, force cmd for every shell step in this job — the runner's default
106
+ # On Windows, force cmd for every shell step in this job: the runner's default
107
107
  # is PowerShell 7 which has its own ExecutionPolicy/wrapping quirks that cause
108
108
  # `npm ci` and similar to exit silently with no captured output. cmd has none
109
109
  # of that. mac/linux use their default bash regardless of this flag (per
@@ -135,7 +135,7 @@ jobs:
135
135
  echo "NPM: $(npm -v)"
136
136
  echo "Omega: $(node "${{ github.workspace }}/node_modules/@omega.js/desktop/bin/omega" version)"
137
137
 
138
- # macOS — decode signing assets from secrets, then sign + notarize + publish.
138
+ # macOS: decode signing assets from secrets, then sign + notarize + publish.
139
139
  # `npx omega deploy`'s precheck uploads .p12 / .p8 files as base64-encoded secrets;
140
140
  # the workflow decodes them back to disk for electron-builder + notarytool to read.
141
141
  # Each decode is gated on its secret EXISTING (#872): `base64 --decode` of an
@@ -150,13 +150,13 @@ jobs:
150
150
  if [ -n "${{ secrets.CSC_LINK }}" ]; then
151
151
  echo "${{ secrets.CSC_LINK }}" | base64 --decode > config/certs/dev-id.p12
152
152
  else
153
- echo "No CSC_LINK secret: run omega deploy from targets/desktop (its precheck pushes them). A mac build must be signed."
153
+ echo "No CSC_LINK secret: run omega deploy at the brand root (its precheck pushes them). A mac build must be signed."
154
154
  exit 1
155
155
  fi
156
156
  if [ -n "${{ secrets.APPLE_API_KEY }}" ]; then
157
157
  echo "${{ secrets.APPLE_API_KEY }}" | base64 --decode > config/certs/AuthKey.p8
158
158
  else
159
- echo "No APPLE_API_KEY secret: run omega deploy from targets/desktop (its precheck pushes them). A mac build must be notarized."
159
+ echo "No APPLE_API_KEY secret: run omega deploy at the brand root (its precheck pushes them). A mac build must be notarized."
160
160
  exit 1
161
161
  fi
162
162
  # The two file-path OVERRIDES of the workflow env: electron-builder and
@@ -176,7 +176,7 @@ jobs:
176
176
  # Linux: install snapcraft when (a) the brand still SHIPS the snap format
177
177
  # (`platforms.linux.formats.snap`, on unless dropped with `false`) AND
178
178
  # (b) SNAPCRAFT_STORE_CREDENTIALS is set as a repo secret. Without the secret we
179
- # skip snapcraft install entirely — build-config.js auto-skips the snap target on
179
+ # skip snapcraft install entirely: build-config.js auto-skips the snap target on
180
180
  # the same condition, so the build still produces .deb + .AppImage cleanly with
181
181
  # no snap publish attempt and no failure.
182
182
  - name: Install Snapcraft (Linux, when snap enabled + creds present)
@@ -192,7 +192,7 @@ jobs:
192
192
  CONFIG_OK=0
193
193
  echo "platforms.linux.formats.snap is dropped, skipping snapcraft install."
194
194
  fi
195
- # (b) Credentials check — empty secret means no publish creds available.
195
+ # (b) Credentials check: empty secret means no publish creds available.
196
196
  if [ -n "$SNAPCRAFT_STORE_CREDENTIALS" ]; then
197
197
  CREDS_OK=1
198
198
  else
@@ -204,7 +204,7 @@ jobs:
204
204
  echo "Snapcraft installed."
205
205
  fi
206
206
 
207
- # Linux — no signing. The workflow env carries the mac credentials as the
207
+ # Linux: no signing. The workflow env carries the mac credentials as the
208
208
  # base64 secrets themselves (only the mac job decodes them to disk), and a
209
209
  # leg that never signs for mac has no business holding them: empty reads as
210
210
  # UNSET after the build's sanitize pass (#872).
@@ -215,18 +215,18 @@ jobs:
215
215
  APPLE_API_KEY: ''
216
216
  run: npm run release:local
217
217
 
218
- # Windows — package (build + electron-builder package) unsigned. We do NOT publish
218
+ # Windows: package (build + electron-builder package) unsigned. We do NOT publish
219
219
  # here. Mac/linux's `npm run release:local` step already created the GH Release via
220
220
  # electron-builder publish; windows-sign uploads signed .exe to that same release.
221
- # shell: cmd as above — PowerShell 7's wrapping breaks long-running npm scripts.
221
+ # shell: cmd as above. PowerShell 7's wrapping breaks long-running npm scripts.
222
222
  - if: matrix.os == 'windows-latest'
223
223
  shell: cmd
224
224
  env:
225
225
  OMEGA_SKIP_WIN_SIGN: 'true'
226
226
  # The workflow env carries the mac signing cert (CSC_LINK is the
227
227
  # base64 .p12 the mac job decodes); electron-builder would otherwise
228
- # try to sign the Windows build with it. Empty reads as UNSET — the
229
- # build's sanitize pass drops it — so this step packages unsigned, as
228
+ # try to sign the Windows build with it. Empty reads as UNSET (the
229
+ # build's sanitize pass drops it), so this step packages unsigned, as
230
230
  # it always did. windows-sign signs separately.
231
231
  CSC_LINK: ''
232
232
  CSC_KEY_PASSWORD: ''
@@ -276,9 +276,9 @@ jobs:
276
276
  name: Sign Windows
277
277
  needs: [setup, build, windows-strategy]
278
278
  # Strategy comes from config platforms.windows.signing.strategy (read by windows-strategy job).
279
- # self-hosted (default) — runs on a self-hosted runner with EV USB token attached
280
- # cloud — runs on hosted windows-latest, calls cloud signing provider
281
- # local — skip this job; sign locally via `npx omega sign-windows`
279
+ # self-hosted (default): runs on a self-hosted runner with EV USB token attached
280
+ # cloud: runs on hosted windows-latest, calls cloud signing provider
281
+ # local: skip this job; sign locally via `npx omega sign-windows`
282
282
  # The trigger half of the signer guard (#875): only a DISPATCH may reach the
283
283
  # box that holds the EV token, so a `pull_request` or `push` trigger added to
284
284
  # this file later skips the sign job instead of signing a stray build. A skip,
@@ -298,7 +298,7 @@ jobs:
298
298
  defaults:
299
299
  run:
300
300
  shell: cmd
301
- # Signing credentials — self-hosted EV USB token (WIN_EV_TOKEN_PATH,
301
+ # Signing credentials: self-hosted EV USB token (WIN_EV_TOKEN_PATH,
302
302
  # WIN_CSC_KEY_PASSWORD, SIGNTOOL_PATH) and the cloud providers (only the set
303
303
  # `platforms.windows.signing.cloud.provider` names is consumed), all arrive
304
304
  # through the workflow's generated env block. Set them in the brand .env and
@@ -348,11 +348,11 @@ jobs:
348
348
  {{ installFirewall }}
349
349
  - run: sfw npm ci {{ installWorkspace }}
350
350
  # Flip the releases-repo release from Draft to Published so electron-updater
351
- # can read it. Idempotent — safe to run even if already published. ONLY runs
351
+ # can read it. Idempotent: safe to run even if already published. ONLY runs
352
352
  # on all-platforms builds: a partial run (e.g. `--platforms windows`) leaves
353
353
  # the release as a draft, so subsequent runs can fill in the missing platform
354
354
  # assets before electron-updater starts seeing the version.
355
355
  - if: needs.setup.outputs.mac == 'true' && needs.setup.outputs.linux == 'true' && needs.setup.outputs.windows == 'true'
356
356
  run: node "${{ github.workspace }}/node_modules/@omega.js/desktop/bin/omega" finalize-release --publish
357
357
  - if: needs.setup.outputs.mac != 'true' || needs.setup.outputs.linux != 'true' || needs.setup.outputs.windows != 'true'
358
- run: echo "Partial-platform run (mac=${{ needs.setup.outputs.mac }} linux=${{ needs.setup.outputs.linux }} windows=${{ needs.setup.outputs.windows }}) — leaving release as draft. Run with --platforms all to publish."
358
+ run: echo "Partial-platform run (mac=${{ needs.setup.outputs.mac }} linux=${{ needs.setup.outputs.linux }} windows=${{ needs.setup.outputs.windows }}), leaving release as draft. Run with --platforms all to publish."
@@ -22,5 +22,3 @@ config/certs/*
22
22
  *.pem
23
23
 
24
24
  # ========== Custom Values ==========
25
-
26
- # Add your own ignores below. This section is preserved across framework re-syncs.
@@ -1,4 +1,4 @@
1
- # MAS (Mac App Store) Reference Plists — ARCHIVED
1
+ # MAS (Mac App Store) Reference Plists (ARCHIVED)
2
2
 
3
3
  These entitlement plists are reference material for a future Mac App Store
4
4
  distribution implementation. They are **NOT** part of the active scaffold copied
@@ -24,7 +24,7 @@ Team ID + appId at build time.
24
24
  ## Roadmap
25
25
 
26
26
  When MAS support is implemented (currently stubbed in
27
- `config.targets.mac.mas` — see `docs/installer-options.md`), this folder will be
27
+ `config.targets.mac.mas`, see `node_modules/@omega.js/manager/docs/desktop/installer-options.md`), this folder will be
28
28
  the starting point for the entitlements @omega.js/desktop auto-generates into `dist/config/`
29
29
  when `mac.mas.enabled === true`. The structure should be similar to the existing
30
30
  `writeMacEntitlements` flow but with separate output files for `mas`, `mas.inherit`,
@@ -42,7 +42,7 @@ The other MAS-specific concerns:
42
42
  MAS distribution adds significant non-trivial complexity (sandboxed app, App Store
43
43
  review cycle, separate provisioning profile per app, manual submission to App
44
44
  Store Connect via Transporter or Xcode). It's the right move only for apps that
45
- genuinely benefit from App Store distribution — most consumer apps ship via DMG
45
+ genuinely benefit from App Store distribution: most consumer apps ship via DMG
46
46
  download from a website, not the Mac App Store.
47
47
 
48
48
  If you need MAS now, the legacy @omega.js/desktop (pre-v1) had support that you
@@ -37,4 +37,4 @@ These are values, not files, and live in the brand `.env` (never here):
37
37
 
38
38
  Windows keeps no file here at all: the self-hosted EV USB token is addressed by `WIN_EV_TOKEN_PATH` / `WIN_CSC_KEY_PASSWORD`, and each cloud provider by its own env set.
39
39
 
40
- For the whole picture see [`docs/signing.md`](../../docs/signing.md).
40
+ For the whole picture see `node_modules/@omega.js/manager/docs/desktop/signing.md`.