@omega.js/manager 0.1.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 (416) hide show
  1. package/.claude-plugin/marketplace.json +14 -0
  2. package/LICENSE +98 -0
  3. package/README.md +165 -0
  4. package/bin/omega +2 -0
  5. package/bin/omg +2 -0
  6. package/claude-plugin/.claude-plugin/plugin.json +11 -0
  7. package/claude-plugin/.mcp.json +9 -0
  8. package/claude-plugin/README.md +139 -0
  9. package/claude-plugin/hooks/gate/mark.sh +58 -0
  10. package/claude-plugin/hooks/gate/run.sh +97 -0
  11. package/claude-plugin/hooks/guard/run.sh +249 -0
  12. package/claude-plugin/hooks/hooks.json +63 -0
  13. package/claude-plugin/hooks/inject/run.sh +127 -0
  14. package/claude-plugin/hooks/lib/omega-gate.sh +20 -0
  15. package/claude-plugin/hooks/lib/omega-scope.sh +41 -0
  16. package/claude-plugin/hooks/lib/omega-skills.sh +209 -0
  17. package/claude-plugin/hooks/quality/run.sh +132 -0
  18. package/claude-plugin/hooks/shape/run.sh +45 -0
  19. package/claude-plugin/mcp-router-launch.js +29 -0
  20. package/claude-plugin/skills/README.md +48 -0
  21. package/claude-plugin/skills/accessibility/SKILL.md +31 -0
  22. package/claude-plugin/skills/analytics/SKILL.md +30 -0
  23. package/claude-plugin/skills/backend/SKILL.md +25 -0
  24. package/claude-plugin/skills/brandcheck/SKILL.md +29 -0
  25. package/claude-plugin/skills/browser/SKILL.md +64 -0
  26. package/claude-plugin/skills/client/SKILL.md +24 -0
  27. package/claude-plugin/skills/desktop/SKILL.md +25 -0
  28. package/claude-plugin/skills/extension/SKILL.md +25 -0
  29. package/claude-plugin/skills/main/SKILL.md +54 -0
  30. package/claude-plugin/skills/manager/SKILL.md +25 -0
  31. package/claude-plugin/skills/seo/SKILL.md +36 -0
  32. package/claude-plugin/skills/theme/SKILL.md +33 -0
  33. package/claude-plugin/skills/web/SKILL.md +29 -0
  34. package/dist/cli-run.js +34 -0
  35. package/dist/cli.js +29 -0
  36. package/dist/commands/build.js +17 -0
  37. package/dist/commands/clean.js +16 -0
  38. package/dist/commands/company.js +46 -0
  39. package/dist/commands/deploy.js +143 -0
  40. package/dist/commands/dev.js +437 -0
  41. package/dist/commands/devlog.js +25 -0
  42. package/dist/commands/help.js +48 -0
  43. package/dist/commands/manage.js +53 -0
  44. package/dist/commands/migrate.js +76 -0
  45. package/dist/commands/onboard.js +31 -0
  46. package/dist/commands/pipeline.js +319 -0
  47. package/dist/commands/test.js +380 -0
  48. package/dist/commands/update.js +128 -0
  49. package/dist/commands/version.js +8 -0
  50. package/dist/company-init.js +167 -0
  51. package/dist/company.js +283 -0
  52. package/dist/config.js +1359 -0
  53. package/dist/devlog/index.js +226 -0
  54. package/dist/devlog/lib/collect-commits.js +136 -0
  55. package/dist/devlog/lib/generate-post.js +201 -0
  56. package/dist/devlog/lib/ghostii.js +122 -0
  57. package/dist/devlog/lib/project-map.js +98 -0
  58. package/dist/devlog/lib/publish-website.js +88 -0
  59. package/dist/index.js +45 -0
  60. package/dist/lib/agents-md.js +201 -0
  61. package/dist/lib/analytics-secret.js +22 -0
  62. package/dist/lib/argv.js +21 -0
  63. package/dist/lib/auth-admin.js +120 -0
  64. package/dist/lib/automation-client.js +210 -0
  65. package/dist/lib/backend-marketing.js +49 -0
  66. package/dist/lib/brand.js +240 -0
  67. package/dist/lib/bundle-id.js +53 -0
  68. package/dist/lib/claude-settings.js +125 -0
  69. package/dist/lib/company-scaffold.js +213 -0
  70. package/dist/lib/company.js +227 -0
  71. package/dist/lib/config-flow.js +350 -0
  72. package/dist/lib/config-write.js +41 -0
  73. package/dist/lib/custom-target.js +75 -0
  74. package/dist/lib/domain-utils.js +19 -0
  75. package/dist/lib/duration.js +39 -0
  76. package/dist/lib/env-order.js +236 -0
  77. package/dist/lib/env-secret.js +78 -0
  78. package/dist/lib/firestore-rest.js +326 -0
  79. package/dist/lib/framework-bin.js +156 -0
  80. package/dist/lib/gitignore.js +63 -0
  81. package/dist/lib/google-auth.js +495 -0
  82. package/dist/lib/google-token.js +66 -0
  83. package/dist/lib/jwt.js +31 -0
  84. package/dist/lib/legacy-oauth.js +59 -0
  85. package/dist/lib/node-version.js +127 -0
  86. package/dist/lib/owner-plan.js +78 -0
  87. package/dist/lib/package-scripts.js +152 -0
  88. package/dist/lib/preflight.js +470 -0
  89. package/dist/lib/product-create.js +144 -0
  90. package/dist/lib/run-command.js +74 -0
  91. package/dist/lib/run-gates.js +70 -0
  92. package/dist/lib/run-output.js +42 -0
  93. package/dist/lib/run-summary.js +384 -0
  94. package/dist/lib/scaffold.js +427 -0
  95. package/dist/lib/service-input.js +207 -0
  96. package/dist/lib/service-runner.js +466 -0
  97. package/dist/lib/stale.js +24 -0
  98. package/dist/lib/target-selection.js +155 -0
  99. package/dist/lib/verb-fanout.js +128 -0
  100. package/dist/lib/verify-live.js +188 -0
  101. package/dist/manage.js +311 -0
  102. package/dist/omega-bin.js +7 -0
  103. package/dist/onboard.js +532 -0
  104. package/dist/services/account/ensure/users.js +259 -0
  105. package/dist/services/account/index.js +97 -0
  106. package/dist/services/account/lib/backend-client.js +107 -0
  107. package/dist/services/account/lib/password.js +36 -0
  108. package/dist/services/account/lib/resolve-password.js +100 -0
  109. package/dist/services/advertising/ensure/sites.js +101 -0
  110. package/dist/services/advertising/index.js +101 -0
  111. package/dist/services/advertising/lib/adsense-api.js +41 -0
  112. package/dist/services/ai/ensure/keys.js +21 -0
  113. package/dist/services/ai/index.js +36 -0
  114. package/dist/services/analytics/ensure/google-firebase-link.js +230 -0
  115. package/dist/services/analytics/ensure/google-streams.js +256 -0
  116. package/dist/services/analytics/ensure/meta-pixel.js +22 -0
  117. package/dist/services/analytics/ensure/tiktok-pixel.js +22 -0
  118. package/dist/services/analytics/index.js +134 -0
  119. package/dist/services/analytics/lib/analytics-api.js +156 -0
  120. package/dist/services/analytics/lib/meta-api.js +83 -0
  121. package/dist/services/analytics/lib/pixel-account.js +78 -0
  122. package/dist/services/analytics/lib/pixel-provision.js +152 -0
  123. package/dist/services/analytics/lib/pixel-specs.js +57 -0
  124. package/dist/services/analytics/lib/pixel-token.js +88 -0
  125. package/dist/services/analytics/lib/property-flow.js +77 -0
  126. package/dist/services/analytics/lib/tiktok-api.js +157 -0
  127. package/dist/services/analytics/lib/tiktok-auth.js +153 -0
  128. package/dist/services/assets/ensure/logo-gen.js +68 -0
  129. package/dist/services/assets/index.js +109 -0
  130. package/dist/services/assets/lib/assets-config.js +168 -0
  131. package/dist/services/assets/lib/brandmark-api.js +160 -0
  132. package/dist/services/assets/lib/derived.js +113 -0
  133. package/dist/services/assets/lib/font-loader.js +67 -0
  134. package/dist/services/assets/lib/reconcile.js +122 -0
  135. package/dist/services/assets/lib/reset.js +118 -0
  136. package/dist/services/assets/lib/svg-logo-generator.js +154 -0
  137. package/dist/services/assets/lib/svg-to-black.js +32 -0
  138. package/dist/services/assets/write/favicons.js +82 -0
  139. package/dist/services/assets/write/icons.js +64 -0
  140. package/dist/services/assets/write/process.js +96 -0
  141. package/dist/services/assets/write/reconcile.js +30 -0
  142. package/dist/services/assets/write/social-icons.js +108 -0
  143. package/dist/services/assets/write/templates.js +345 -0
  144. package/dist/services/bookmark/ensure/sync.js +255 -0
  145. package/dist/services/bookmark/index.js +17 -0
  146. package/dist/services/campaigns/ensure/contact-person.js +40 -0
  147. package/dist/services/campaigns/ensure/custom-fields.js +84 -0
  148. package/dist/services/campaigns/ensure/domain-auth.js +92 -0
  149. package/dist/services/campaigns/ensure/event-webhook.js +89 -0
  150. package/dist/services/campaigns/ensure/link-branding.js +187 -0
  151. package/dist/services/campaigns/ensure/list.js +50 -0
  152. package/dist/services/campaigns/ensure/segments.js +109 -0
  153. package/dist/services/campaigns/ensure/sender-identity.js +153 -0
  154. package/dist/services/campaigns/ensure/unsubscribe-groups.js +116 -0
  155. package/dist/services/campaigns/index.js +79 -0
  156. package/dist/services/campaigns/lib/dns-sync.js +81 -0
  157. package/dist/services/campaigns/lib/segment-query.js +138 -0
  158. package/dist/services/campaigns/lib/sendgrid-api.js +287 -0
  159. package/dist/services/captcha/ensure/site-key.js +83 -0
  160. package/dist/services/captcha/index.js +78 -0
  161. package/dist/services/captcha/lib/console-url.js +45 -0
  162. package/dist/services/captcha/lib/recaptcha-api.js +36 -0
  163. package/dist/services/certificates/ensure/api-key.js +22 -0
  164. package/dist/services/certificates/ensure/bundle-ids.js +115 -0
  165. package/dist/services/certificates/ensure/certificates.js +187 -0
  166. package/dist/services/certificates/ensure/profiles.js +143 -0
  167. package/dist/services/certificates/index.js +225 -0
  168. package/dist/services/certificates/lib/apple-api.js +183 -0
  169. package/dist/services/certificates/lib/certificate-manager.js +252 -0
  170. package/dist/services/certificates/lib/identifier-manager.js +107 -0
  171. package/dist/services/certificates/lib/keychain.js +135 -0
  172. package/dist/services/certificates/lib/manual-walkthrough.js +165 -0
  173. package/dist/services/certificates/lib/profile-manager.js +115 -0
  174. package/dist/services/chat/data/baseline-knowledge.md +96 -0
  175. package/dist/services/chat/ensure/chat.js +106 -0
  176. package/dist/services/chat/ensure/user.js +45 -0
  177. package/dist/services/chat/index.js +139 -0
  178. package/dist/services/chat/lib/baseline-knowledge.js +137 -0
  179. package/dist/services/cloud/ensure/authentication.js +267 -0
  180. package/dist/services/cloud/ensure/billing.js +120 -0
  181. package/dist/services/cloud/ensure/cloud-messaging.js +105 -0
  182. package/dist/services/cloud/ensure/database.js +60 -0
  183. package/dist/services/cloud/ensure/firestore.js +79 -0
  184. package/dist/services/cloud/ensure/functions.js +49 -0
  185. package/dist/services/cloud/ensure/hosting.js +398 -0
  186. package/dist/services/cloud/ensure/oauth-consent.js +248 -0
  187. package/dist/services/cloud/ensure/project-settings.js +72 -0
  188. package/dist/services/cloud/ensure/sdk-config.js +95 -0
  189. package/dist/services/cloud/ensure/service-account.js +152 -0
  190. package/dist/services/cloud/ensure/services.js +103 -0
  191. package/dist/services/cloud/ensure/storage.js +47 -0
  192. package/dist/services/cloud/index.js +130 -0
  193. package/dist/services/cloud/lib/access-heal.js +130 -0
  194. package/dist/services/cloud/lib/firebase-api.js +662 -0
  195. package/dist/services/cloud/lib/project-flow.js +102 -0
  196. package/dist/services/directory/ensure/entry.js +48 -0
  197. package/dist/services/directory/index.js +64 -0
  198. package/dist/services/directory/lib/blocks.js +104 -0
  199. package/dist/services/disperse/index.js +45 -0
  200. package/dist/services/disperse/write/certs.js +117 -0
  201. package/dist/services/domain/ensure/nameservers.js +179 -0
  202. package/dist/services/domain/index.js +69 -0
  203. package/dist/services/domain/lib/namecheap-api.js +167 -0
  204. package/dist/services/domain/lib/registrars.js +46 -0
  205. package/dist/services/domain/lib/whitelist-walkthrough.js +76 -0
  206. package/dist/services/edge/ensure/cache-rules.js +105 -0
  207. package/dist/services/edge/ensure/dns-records.js +304 -0
  208. package/dist/services/edge/ensure/email-routing.js +292 -0
  209. package/dist/services/edge/ensure/rules-configuration.js +98 -0
  210. package/dist/services/edge/ensure/rules-managed-transforms.js +101 -0
  211. package/dist/services/edge/ensure/rules-redirect.js +107 -0
  212. package/dist/services/edge/ensure/rules-response-headers.js +90 -0
  213. package/dist/services/edge/ensure/rules-security.js +142 -0
  214. package/dist/services/edge/ensure/speed-scheduled-tests.js +98 -0
  215. package/dist/services/edge/ensure/workers.js +219 -0
  216. package/dist/services/edge/ensure/zone-settings.js +108 -0
  217. package/dist/services/edge/ensure/zone.js +183 -0
  218. package/dist/services/edge/index.js +73 -0
  219. package/dist/services/edge/lib/cloudflare-api.js +84 -0
  220. package/dist/services/edge/lib/dns-records-helpers.js +518 -0
  221. package/dist/services/edge/lib/read-cache.js +16 -0
  222. package/dist/services/edge/lib/ruleset-helper.js +108 -0
  223. package/dist/services/edge/workers/omega-api-proxy.js +43 -0
  224. package/dist/services/email/data/baseline-filter.md +4 -0
  225. package/dist/services/email/data/baseline-knowledge.md +86 -0
  226. package/dist/services/email/ensure/agent.js +107 -0
  227. package/dist/services/email/ensure/user.js +45 -0
  228. package/dist/services/email/index.js +138 -0
  229. package/dist/services/email/lib/baseline.js +82 -0
  230. package/dist/services/email/lib/knowledge-file.js +53 -0
  231. package/dist/services/forms/ensure/form.js +46 -0
  232. package/dist/services/forms/ensure/user.js +45 -0
  233. package/dist/services/forms/index.js +138 -0
  234. package/dist/services/migrations/ensure/notifications.js +189 -0
  235. package/dist/services/migrations/ensure/orders.js +34 -0
  236. package/dist/services/migrations/ensure/payment-provider.js +132 -0
  237. package/dist/services/migrations/ensure/payments-intents.js +34 -0
  238. package/dist/services/migrations/ensure/state-retirement.js +266 -0
  239. package/dist/services/migrations/ensure/targets-rename.js +124 -0
  240. package/dist/services/migrations/ensure/users.js +1176 -0
  241. package/dist/services/migrations/index.js +101 -0
  242. package/dist/services/migrations/lib/attribution-touch.js +64 -0
  243. package/dist/services/migrations/lib/ensure-metadata.js +144 -0
  244. package/dist/services/migrations/lib/migration-runner.js +473 -0
  245. package/dist/services/migrations/lib/sanitize-strings.js +112 -0
  246. package/dist/services/migrations/lib/schema-validator.js +154 -0
  247. package/dist/services/monitoring/ensure/dsn.js +54 -0
  248. package/dist/services/monitoring/ensure/projects.js +135 -0
  249. package/dist/services/monitoring/index.js +54 -0
  250. package/dist/services/monitoring/lib/sentry-api.js +94 -0
  251. package/dist/services/newsletter/ensure/custom-fields.js +90 -0
  252. package/dist/services/newsletter/ensure/publication.js +94 -0
  253. package/dist/services/newsletter/ensure/segments.js +140 -0
  254. package/dist/services/newsletter/ensure/webhook.js +108 -0
  255. package/dist/services/newsletter/index.js +64 -0
  256. package/dist/services/newsletter/lib/beehiiv-api.js +124 -0
  257. package/dist/services/newsletter/lib/segment-automation.js +577 -0
  258. package/dist/services/payment/ensure/chargebee-account.js +30 -0
  259. package/dist/services/payment/ensure/chargebee-products.js +359 -0
  260. package/dist/services/payment/ensure/chargebee-webhook.js +113 -0
  261. package/dist/services/payment/ensure/paypal-account.js +36 -0
  262. package/dist/services/payment/ensure/paypal-products.js +374 -0
  263. package/dist/services/payment/ensure/paypal-webhook.js +128 -0
  264. package/dist/services/payment/ensure/stripe-account.js +93 -0
  265. package/dist/services/payment/ensure/stripe-disputes.js +56 -0
  266. package/dist/services/payment/ensure/stripe-products.js +245 -0
  267. package/dist/services/payment/ensure/stripe-radar.js +74 -0
  268. package/dist/services/payment/ensure/stripe-webhook.js +130 -0
  269. package/dist/services/payment/index.js +163 -0
  270. package/dist/services/payment/lib/chargebee-api.js +338 -0
  271. package/dist/services/payment/lib/payment-utils.js +116 -0
  272. package/dist/services/payment/lib/paypal-api.js +354 -0
  273. package/dist/services/payment/lib/provider-setup.js +134 -0
  274. package/dist/services/payment/lib/stripe-api.js +152 -0
  275. package/dist/services/repo/ensure/org.js +70 -0
  276. package/dist/services/repo/ensure/pages.js +72 -0
  277. package/dist/services/repo/ensure/repo.js +90 -0
  278. package/dist/services/repo/index.js +52 -0
  279. package/dist/services/repo/lib/github-api.js +196 -0
  280. package/dist/services/search/ensure/ga-link.js +57 -0
  281. package/dist/services/search/ensure/property.js +137 -0
  282. package/dist/services/search/ensure/sitemaps.js +70 -0
  283. package/dist/services/search/index.js +61 -0
  284. package/dist/services/search/lib/search-console-api.js +92 -0
  285. package/dist/services/seo/ensure/github-repos.js +271 -0
  286. package/dist/services/seo/index.js +55 -0
  287. package/dist/services/seo/lib/gh-api.js +161 -0
  288. package/dist/services/seo/templates/developer-tool/.github/workflows/maintenance.yml +25 -0
  289. package/dist/services/seo/templates/developer-tool/.nvmrc +1 -0
  290. package/dist/services/seo/templates/developer-tool/_README.md.js +121 -0
  291. package/dist/services/seo/templates/developer-tool/_package.json.js +33 -0
  292. package/dist/services/seo/templates/developer-tool/src/index.js +120 -0
  293. package/dist/services/seo/templates/index.js +57 -0
  294. package/dist/services/server/ensure/brands.js +63 -0
  295. package/dist/services/server/index.js +42 -0
  296. package/dist/services/testing/ensure/target-checks.js +97 -0
  297. package/dist/services/testing/index.js +11 -0
  298. package/dist/services/testing/lib/checks.js +467 -0
  299. package/dist/services/update/index.js +20 -0
  300. package/dist/services/update/lib/cache.js +59 -0
  301. package/dist/services/update/lib/fingerprint.js +157 -0
  302. package/dist/services/update/write/targets.js +206 -0
  303. package/dist/services/workspace/ensure/agents.js +42 -0
  304. package/dist/services/workspace/ensure/claude-settings.js +34 -0
  305. package/dist/services/workspace/ensure/config.js +54 -0
  306. package/dist/services/workspace/ensure/defaults.js +60 -0
  307. package/dist/services/workspace/ensure/env-keys.js +55 -0
  308. package/dist/services/workspace/ensure/env-order.js +66 -0
  309. package/dist/services/workspace/ensure/env-rules.js +97 -0
  310. package/dist/services/workspace/ensure/gitignore.js +18 -0
  311. package/dist/services/workspace/ensure/scripts.js +126 -0
  312. package/dist/services/workspace/ensure/structure.js +97 -0
  313. package/dist/services/workspace/ensure/translation-sdk.js +148 -0
  314. package/dist/services/workspace/ensure/workflows.js +54 -0
  315. package/dist/services/workspace/index.js +8 -0
  316. package/dist/vendor/account/engine.js +182 -0
  317. package/dist/vendor/account/features.js +220 -0
  318. package/dist/vendor/account/index.js +53 -0
  319. package/dist/vendor/account/schema.js +272 -0
  320. package/dist/vendor/account/subscription.js +38 -0
  321. package/dist/vendor/config/company.js +31 -0
  322. package/dist/vendor/config/defaults.js +173 -0
  323. package/dist/vendor/config/demo.js +18 -0
  324. package/dist/vendor/config/desktop-artifacts.js +110 -0
  325. package/dist/vendor/config/edit.js +769 -0
  326. package/dist/vendor/config/env-delivery.js +145 -0
  327. package/dist/vendor/config/env-rules.js +93 -0
  328. package/dist/vendor/config/env-schema.js +1078 -0
  329. package/dist/vendor/config/env.js +445 -0
  330. package/dist/vendor/config/hooks.js +97 -0
  331. package/dist/vendor/config/index.js +237 -0
  332. package/dist/vendor/config/instances.js +208 -0
  333. package/dist/vendor/config/load.js +490 -0
  334. package/dist/vendor/config/merge.js +68 -0
  335. package/dist/vendor/config/order.js +139 -0
  336. package/dist/vendor/config/ports.js +374 -0
  337. package/dist/vendor/config/providers.js +32 -0
  338. package/dist/vendor/config/repo.js +142 -0
  339. package/dist/vendor/config/retired-keys.js +430 -0
  340. package/dist/vendor/config/schema.js +1610 -0
  341. package/dist/vendor/config/secrets.js +50 -0
  342. package/dist/vendor/config/seed.js +34 -0
  343. package/dist/vendor/config/site-global.js +205 -0
  344. package/dist/vendor/config/validate.js +554 -0
  345. package/dist/vendor/config/winback.js +61 -0
  346. package/dist/vendor/devkit/attach-log-file.js +262 -0
  347. package/dist/vendor/devkit/certs.js +199 -0
  348. package/dist/vendor/devkit/ci-workflows.js +520 -0
  349. package/dist/vendor/devkit/cli-router.js +156 -0
  350. package/dist/vendor/devkit/command-path.js +46 -0
  351. package/dist/vendor/devkit/deploy-record.js +180 -0
  352. package/dist/vendor/devkit/flows.js +317 -0
  353. package/dist/vendor/devkit/local-https.js +360 -0
  354. package/dist/vendor/devkit/local.js +1905 -0
  355. package/dist/vendor/devkit/logger.js +128 -0
  356. package/dist/vendor/devkit/omega-bin.js +345 -0
  357. package/dist/vendor/devkit/prompt.js +187 -0
  358. package/dist/vendor/devkit/safe-install.js +18 -0
  359. package/dist/vendor/devkit/stop-signals.js +28 -0
  360. package/dist/vendor/devkit/test/scope.js +162 -0
  361. package/dist/vendor/devkit/translate/cache.js +84 -0
  362. package/dist/vendor/devkit/translate/engine.js +243 -0
  363. package/dist/vendor/devkit/translate/index.js +49 -0
  364. package/dist/vendor/devkit/translate/languages.js +134 -0
  365. package/dist/vendor/devkit/translate/providers.js +188 -0
  366. package/dist/vendor/devkit/update.js +569 -0
  367. package/docs/AGENTS.md +200 -0
  368. package/docs/account.md +45 -0
  369. package/docs/advertising.md +46 -0
  370. package/docs/ai.md +34 -0
  371. package/docs/analytics.md +69 -0
  372. package/docs/assets.md +57 -0
  373. package/docs/bookmark.md +26 -0
  374. package/docs/brand.md +151 -0
  375. package/docs/campaigns.md +96 -0
  376. package/docs/captcha.md +46 -0
  377. package/docs/certificates.md +68 -0
  378. package/docs/chat.md +47 -0
  379. package/docs/cloud.md +110 -0
  380. package/docs/company.md +64 -0
  381. package/docs/directory.md +140 -0
  382. package/docs/disperse.md +46 -0
  383. package/docs/domain.md +56 -0
  384. package/docs/edge.md +234 -0
  385. package/docs/email.md +42 -0
  386. package/docs/forms.md +48 -0
  387. package/docs/index.md +109 -0
  388. package/docs/migration.md +203 -0
  389. package/docs/migrations.md +56 -0
  390. package/docs/monitoring.md +41 -0
  391. package/docs/newsletter.md +48 -0
  392. package/docs/payment.md +83 -0
  393. package/docs/repo.md +48 -0
  394. package/docs/search.md +44 -0
  395. package/docs/seo.md +34 -0
  396. package/docs/server.md +37 -0
  397. package/docs/shared/agent-docs.md +89 -0
  398. package/docs/shared/analytics.md +612 -0
  399. package/docs/shared/brands.md +51 -0
  400. package/docs/shared/breaking-changes.md +497 -0
  401. package/docs/shared/config.md +1387 -0
  402. package/docs/shared/deploys.md +215 -0
  403. package/docs/shared/icons.md +201 -0
  404. package/docs/shared/local-dev.md +147 -0
  405. package/docs/shared/logging.md +202 -0
  406. package/docs/shared/monitoring.md +153 -0
  407. package/docs/shared/publishing.md +183 -0
  408. package/docs/shared/rulings.md +34 -0
  409. package/docs/shared/testing.md +147 -0
  410. package/docs/shared/theming.md +604 -0
  411. package/docs/shared/translation.md +291 -0
  412. package/docs/shared/updates.md +61 -0
  413. package/docs/testing.md +34 -0
  414. package/docs/update.md +36 -0
  415. package/docs/workspace.md +64 -0
  416. package/package.json +88 -0
@@ -0,0 +1,83 @@
1
+ # The payment service — products, prices, and webhooks
2
+
3
+ The `payment` service reconciles the brand's payment providers to `payment.products`: Stripe
4
+ (account profile, products + prices, webhook, plus the two Dashboard-only guidance checks),
5
+ PayPal (catalog products + billing plans, webhook), and Chargebee (item family → items → item
6
+ prices, webhook). Product ids are written back into omega.json5 and mirrored in state.
7
+
8
+ ## What it reconciles
9
+
10
+ **Stripe** — `stripe-account` (business profile diffed to brand config),
11
+ `stripe-radar` and `stripe-disputes` (Dashboard-only, so: guidance + an interactive confirm),
12
+ `stripe-webhook`, `stripe-products` (config id → state → metadata match → create; stale
13
+ prices ARCHIVED, since Stripe cannot delete a price).
14
+
15
+ **PayPal** — `paypal-account` (an auth probe that also resolves live vs sandbox),
16
+ `paypal-webhook`, `paypal-products` (catalog products + billing plans; plans matched by
17
+ interval + amount + trial-cycle presence, duplicates and stale plans deactivated, legacy
18
+ products' active plans deactivated so no new subscription lands on them). A product with
19
+ `trial.days` gets TWO plans per paid interval — the trial twin and the skip-trial twin,
20
+ named `<Display> (Monthly)` and `<Display> (Monthly, no trial)` — because PayPal puts a
21
+ trial on the PLAN, so a buyer who is not owed one needs a plan with no free cycle on it
22
+ ([#761](https://github.com/Omega-JS-Stack/omega/issues/761)). Neither twin is a duplicate
23
+ or a stale copy of the other, so a rerun creates and deactivates nothing; a brand that
24
+ already ships trials needs ONE manage run to mint the new twins.
25
+
26
+ **Chargebee** — `chargebee-account` (an API-access probe), `chargebee-webhook`,
27
+ `chargebee-products` (fully deterministic ids — family `{brandId}`, item
28
+ `{brandId}-{productId}`, price `{brandId}-{productId}-{interval}` — so resolution needs no
29
+ stored state at all: a 404 on the deterministic id means "create it").
30
+
31
+ **Coinbase Commerce** — **nothing**, and that is the whole design
32
+ ([#642](https://github.com/Omega-JS-Stack/omega/issues/642)). A crypto charge is created ad
33
+ hoc at checkout, so there is no catalog to reconcile, and its webhook endpoint is set by hand
34
+ in the Coinbase dashboard (the API manages none). Its entire manage-time surface is the
35
+ CREDENTIAL, which the setup contract asks for in `setup` — gated on
36
+ `payment.providers.coinbase.enabled` being explicitly `true`, so a brand that never turned
37
+ crypto on is never asked for a key it has no use for. `--provider=coinbase` therefore asks for
38
+ the key and then skips, saying so.
39
+
40
+ Every webhook operation matches by exact URL, deletes every OTHER endpoint on the brand's API
41
+ host (stale twins — endpoints on other hosts are never touched), re-enables an endpoint the
42
+ provider auto-disabled, and diffs the event set.
43
+
44
+ ## Config
45
+
46
+ - `payment.enabled: false` — skip. The service also skips when `payment.products` has no paid,
47
+ non-archived entry.
48
+ - `payment.products[]` — the SSOT. Free tiers have no prices; an archived product keeps its
49
+ provider objects but stops being reconciled.
50
+ - `payment.products[id=…].{stripe,paypal}.productId` — written back on create/match.
51
+ - `payment.providers.stripe.{publishableKey,updateAccountInfo,radar,radarConfirmed,disputesConfirmed}`,
52
+ `payment.providers.paypal.clientId`, `payment.providers.chargebee.site` — the public halves
53
+ live in config; each provider can be disabled with `payment.providers.<name>: false`.
54
+ - `payment.providers.coinbase.enabled` — the exception, because Coinbase Commerce has NO public
55
+ half: its API key is the entire credential, so `enabled` (default OFF) is both the switch and
56
+ the opt-out, and the setup flow's "Disable permanently" lands `false` THERE rather than on the
57
+ provider block.
58
+ - `brand.images.brandmark` — the product image the providers show (omega-manager hardcoded a
59
+ company CDN).
60
+
61
+ **Credentials**: `STRIPE_SECRET_KEY`, `PAYPAL_CLIENT_SECRET`, `CHARGEBEE_API_KEY`,
62
+ `COINBASE_COMMERCE_API_KEY` — each OPTIONAL (`gates: false`), so a missing Stripe key never
63
+ gates a PayPal brand and each entry's "Disable permanently" writes only its own provider's
64
+ `false` (coinbase's lands on `payment.providers.coinbase.enabled`). `OMEGA_WEBHOOK_KEY` is
65
+ OMEGA's own and is minted, not asked for. `--provider=stripe|paypal|chargebee|coinbase`
66
+ narrows a run to one provider's operations.
67
+
68
+ ## Gotchas
69
+
70
+ - **A shared Firebase project has no `api.{domain}` backend** to receive events, so every
71
+ webhook operation is skipped there.
72
+ - **Stripe account updates are not supported on every account type** (org sub-accounts): a
73
+ failed update warns rather than errors, and `payment.providers.stripe.updateAccountInfo:
74
+ false` turns the whole profile sync off.
75
+ - **Radar rules and Enhanced Dispute Protection have no API.** They print the desired rules
76
+ plus a Dashboard deep-link and stay warned until confirmed; the confirmation is one of the
77
+ few reconcile flags config keeps ([#434](https://github.com/Omega-JS-Stack/omega/issues/434)).
78
+ - **Chargebee does not return `enabled_events`**, so event drift cannot be diffed: events are
79
+ set on CREATE only, and changing them means delete + recreate.
80
+ - **Chargebee has no daily billing cycle**, and its one-time `once` prices are not managed yet
81
+ (a visible note, not a silent skip).
82
+ - **PayPal sandbox mode** reconciles the payments-QA fixtures, so the step closes with the
83
+ sandbox-buyer reminder.
package/docs/repo.md ADDED
@@ -0,0 +1,48 @@
1
+ # The repo service — the brand's GitHub presence
2
+
3
+ The `repo` service reconciles the brand's GitHub side: the org profile, the brand-monorepo
4
+ repo, and GitHub Pages. It is the monorepo cousin of legacy omega-manager's github service,
5
+ which managed one repo per target — here a brand is ONE repo.
6
+
7
+ ## What it reconciles
8
+
9
+ - **`org`** — the org profile matches the brand: display name, support email
10
+ (`support@{domain}`), billing email, description (truncated to GitHub's 160-char org
11
+ limit), blog URL, and `location` only when configured. Skipped for a shared org.
12
+ - **`repo`** — the repo exists with the right settings. Missing → created EMPTY (the brand
13
+ already exists locally; the user pushes to it — no template, no clone, that is onboarding's
14
+ job). Existing → visibility and homepage diffed, and only the drift is patched.
15
+ - **`pages`** — GitHub Pages serves the website from `gh-pages` with `brand.url` as the
16
+ custom domain.
17
+
18
+ ## Config
19
+
20
+ Everything lives under `repo.providers.github` in the brand `config/omega.json5`:
21
+
22
+ | Key | Meaning |
23
+ |---|---|
24
+ | `org` | Repo owner (org or user). No default — unset and the service skips. |
25
+ | `shared` | `true` = the org is shared with other brands, so the org-level `org` operation is filtered out: one brand must not rewrite a shared org's profile. |
26
+ | `repo` | Optional `owner/name` slug or bare name. Name defaults to `<brand.id>-omega` (the `<brand.id>-<role>` rule, [#809](https://github.com/Omega-JS-Stack/omega/issues/809)), owner to `repo.providers.github.org`. |
27
+ | `private` | Repo visibility (manager default `true`). |
28
+ | `location` | Org profile location — only reconciled when set (omega-manager hardcoded a country). |
29
+
30
+ The repo identity is pure derivation from config (`@omega.js/config`'s `brandRepoName` /
31
+ `brandRepoOwner`, shared with `deploy --direct`), so nothing about it is persisted anywhere.
32
+
33
+ ## Credentials
34
+
35
+ The `gh` CLI, authenticated — `gh auth login`, or a `GH_TOKEN`/`GITHUB_TOKEN` in the brand
36
+ `.env` (loaded before services run; `gh` honors both). The client verifies `gh` is installed
37
+ and authenticated at construction, and every invocation is `execFileSync` with an argv array
38
+ — no shell, so brand-config values can never inject commands. The service declares no entry
39
+ in the `REQUIRES` registry because it authorizes through `gh`, not through a key.
40
+
41
+ ## Gotchas
42
+
43
+ - **A missing `gh-pages` branch is not an error.** It appears with the first deploy; the
44
+ operation says "deploy the website first" and moves on.
45
+ - **An owner that is a user, not an org**, makes the `org` operation inapplicable — noted,
46
+ not failed.
47
+ - **One Pages site per repo.** Legacy per-subdomain Pages repos (`{brand}-{sub}-website`)
48
+ have no monorepo equivalent; multi-site hosting rides the edge/hosting story instead.
package/docs/search.md ADDED
@@ -0,0 +1,44 @@
1
+ # The search service — the Search Console property
2
+
3
+ The `search` service owns the brand's Google Search Console presence: the `sc-domain:{domain}`
4
+ domain property (which covers every subdomain), verified by a DNS TXT record written through
5
+ Cloudflare, plus sitemap submission and the GA-association nudge. It runs after `edge` (the
6
+ zone must exist for TXT verification) and after `analytics` (the GA property is what the
7
+ association points at).
8
+
9
+ ## What it reconciles
10
+
11
+ - **`property`** — an existing property is converged proof, nothing else to check. A missing
12
+ one is created in ONE pass: fetch the DNS_TXT verification token (idempotent — Google returns
13
+ the same token until it is used), write the TXT record via Cloudflare (a stale
14
+ `google-site-verification` record at the same name is replaced), then verify. Interactive
15
+ runs poll until DNS propagates; non-interactive and dry runs attempt verification once,
16
+ report warned, and the rerun converges.
17
+ - **`ga-link`** — the Search Console ↔ GA4 association. There is NO API on either side, so it
18
+ is instructions plus an interactive confirm, warned until confirmed; the confirmation lands
19
+ at `search.providers.searchConsole.gaLinked`
20
+ ([#434](https://github.com/Omega-JS-Stack/omega/issues/434)) so the next run believes it.
21
+ - **`sitemaps`** — submits only what is MISSING. Legacy omega-manager resubmitted every
22
+ sitemap on every run, which made a converged brand mutate forever; Google re-crawls
23
+ submitted sitemaps on its own.
24
+
25
+ ## Config
26
+
27
+ | Key | Meaning |
28
+ |---|---|
29
+ | `search.providers.searchConsole.enabled: false` | Skip the service. |
30
+ | `search.providers.searchConsole.sitemapPaths` | Paths to submit (default `/sitemap.xml`). |
31
+ | `search.providers.searchConsole.submitSitemap: false` | Turn sitemap submission off. |
32
+ | `search.providers.searchConsole.gaLinked` | The one-time GA-association confirm. |
33
+ | `analytics.providers.google.propertyId` | Read (not written) by `ga-link` — no property, nothing to associate. |
34
+
35
+ **Credentials**: `GOOGLE_CLIENT_ID` + `GOOGLE_CLIENT_SECRET`, scopes `webmasters` and
36
+ `siteverification`, on the ONE shared token store (`.omega/auth/google-tokens.json`) beside
37
+ the cloud grant. `CLOUDFLARE_TOKEN` is optional: without it the property operation prints the
38
+ TXT record to add by hand.
39
+
40
+ ## Gotchas
41
+
42
+ - **A brand with no web target has no sitemap to submit** — skipped, not warned.
43
+ - **Verification happens once.** Google answers "already verified" when an earlier attempt
44
+ succeeded; that is treated as success, not an error.
package/docs/seo.md ADDED
@@ -0,0 +1,34 @@
1
+ # The seo service — parasite SEO repos
2
+
3
+ The `seo` service creates and maintains parasite SEO content: programmatically created GitHub
4
+ repos with templated READMEs, download scripts, and a maintenance workflow. It sits late in
5
+ the walk — low priority, no downstream dependencies.
6
+
7
+ ## What it reconciles
8
+
9
+ One operation, `github-repos`, per configured item: create the repo when missing (public,
10
+ auto-init README), push the generated + static template files (content-compared, so an
11
+ unchanged file is never rewritten), delete stale non-template files, reconcile description /
12
+ homepage / topics, and star the repo as the author.
13
+
14
+ ## Config
15
+
16
+ Content lives at `seo.github.content[]` in `config/omega.json5`, or in a `config/seo.json5`
17
+ sidecar whose keys merge OVER the config's `seo` section (the `chatsy.md` / `replyify.md`
18
+ convention: big content sections get their own file). `seo.enabled: false` skips the service,
19
+ and no content at all is a clean skip — this service never WRITES config, so nothing is
20
+ auto-created for a brand that declared nothing.
21
+
22
+ Per item, `author.token` (`env:VAR_NAME` or a literal) overrides the `gh` auth for that item's
23
+ API calls, and `author.git` rides the Contents API commits as author and committer — parasite
24
+ repos owned by separate accounts.
25
+
26
+ **Credentials**: the default `gh` CLI auth, plus those per-item author overrides.
27
+
28
+ ## Gotcha: the collision guardrail
29
+
30
+ A parasite repo this handler created contains only the template's files, so before ANY write
31
+ the existing tree is inspected: more than ten non-template ("stale") files means the configured
32
+ name collides with a REAL repo, and the item ERRORS without touching anything. Legitimate
33
+ parasite repos sit at zero to two stale files after a template change. **Never reuse a real
34
+ repo's name for a parasite entry.**
package/docs/server.md ADDED
@@ -0,0 +1,37 @@
1
+ # The server service — the brand's entry in the company registry
2
+
3
+ The `server` service publishes the brand's registry entry to the COMPANY server's Firestore at
4
+ `brands/{brand.id}`. The company's parent backend keeps a registry of every brand it serves —
5
+ webhook fan-out and cross-brand features read it — and this keeps that entry in sync with the
6
+ brand's config. It is a company-server OPERATOR service: every other brand answers "Disable
7
+ permanently" once.
8
+
9
+ Its sibling is the [directory](directory.md) service, and the difference is deliberate: the
10
+ registry here is a full REPLACE of the framework's document, the directory is a MERGE into a
11
+ document a hub also writes.
12
+
13
+ ## What it reconciles
14
+
15
+ One operation, `brands`. Only three top-level config sections cross into the registry —
16
+ `brand`, `repo`, `sponsorships` — and the document is fully REPLACED on write, so a key
17
+ removed from config disappears from the registry too. The write is diff-synced: the current
18
+ document is read first and only drift is written (omega-manager overwrote it blindly on every
19
+ run, with no dry-run guard). Equality is structural and key-order-insensitive, because a
20
+ full-replace write makes ANY difference — including an extra key in the current document —
21
+ drift.
22
+
23
+ ## Config and credentials
24
+
25
+ - `server.enabled: false` (or `server: false`) — skip.
26
+ - The entry id is `brand.id`.
27
+
28
+ `SERVER_SERVICE_ACCOUNT` in the brand `.env` — a path to the company server's Firebase
29
+ service-account JSON, absolute or relative to the brand root. The service account names the
30
+ target project; omega-manager hardcoded the company project instead and read its secrets from
31
+ the company-instance `.output/` tree.
32
+
33
+ ## Gotcha
34
+
35
+ Because the write is a replace, anything a human adds to a registry document by hand is
36
+ removed on the next walk. Content the framework does not own belongs on a different document —
37
+ or in the directory entry, whose write is masked.
@@ -0,0 +1,89 @@
1
+ # Brand agent-docs chain (AGENTS.md / CLAUDE.md)
2
+
3
+ **The problem**: every brand needs current framework guidance for AI agents, but copying it into each brand drifts. **The design (Ian 2026-07-20, amended 2026-07-27)**: every brand reads the SAME entry the monorepo uses — the top-level omega `AGENTS.md`, the map — and the map's pointers (plus the omega plugin's hooks) orchestrate which docs load. The brand-root knowledge itself lives in `docs/manager/brand.md`; no AGENTS.md anywhere carries content.
4
+
5
+ ## The chain
6
+
7
+ ```
8
+ brand/CLAUDE.md @AGENTS.md (one line, Claude Code's entry)
9
+ brand/AGENTS.md line 1: @node_modules/@omega.js/AGENTS.md (the top-level omega map — see below)
10
+ below: `# <brand> — brand notes` + the brand's own notes — NEVER touched by the framework
11
+ ```
12
+
13
+ `node_modules/@omega.js/AGENTS.md` is a SYMLINK the workspace service maintains: it resolves the framework monorepo through the installed manager package's real path and links straight at the live top-level map. It sits in the scope directory — no package in the path — because the map belongs to the ecosystem, not to any one package. A published install has no monorepo above the package, so the link lands on the map prepare vendored INTO it (`@omega.js/manager/docs/AGENTS.md`, below). The two candidates are tried in that order, live map first, so a locally linked brand never lands on the generated copy sitting in that same monorepo's `packages/manager` ([#144](https://github.com/Omega-JS-Stack/omega/issues/144)).
14
+
15
+ (The cp244 marker comment under the import was culled — Ian 2026-07-20: keep it short. Heals no longer scrub legacy copies (#148): a leftover marker or retired import line is consumer content, removed by hand per [breaking-changes.md](breaking-changes.md).)
16
+
17
+ - The import path is **relative** (portable to any machine). For hoisted installs (the in-repo test brands are npm workspaces of this monorepo) the ensure step walks up and writes the correct depth, e.g. `@../../node_modules/@omega.js/AGENTS.md`.
18
+ - The service resolves the monorepo through the installed manager package's real path (the local-era `file:` symlink), so the link always lands on the LIVE top-level map — framework edits are instantly visible to every brand session.
19
+ - Non-Claude agents read `AGENTS.md` but don't follow `@` imports — the import line itself names the target path for them.
20
+
21
+ ## Maintenance
22
+
23
+ `npm run manage` (the manage cycle's `workspace` service, `agents` op — `packages/manager/src/services/workspace/ensure/agents.js`, logic in `src/lib/agents-md.js`):
24
+
25
+ | State found | Action |
26
+ |---|---|
27
+ | No `AGENTS.md` | Created: import + brand-notes skeleton |
28
+ | Import present at line 1 (right depth) | No-op |
29
+ | Import missing / not first / stale depth | Healed: resolved import moved to line 1, duplicates removed, consumer content preserved verbatim |
30
+ | No `CLAUDE.md` | Created as the one-line `@AGENTS.md` pointer |
31
+ | `CLAUDE.md` carries content | WARNED (never clobbered) with the move-it-to-AGENTS.md message |
32
+
33
+ Pinned by `packages/manager/test/agents-md.test.js` (no package agent docs + files whitelist, guide-link create/heal/skip against both the local-era and published-install shapes, path resolution, create/heal/idempotence, content preservation).
34
+
35
+ ## Published packages carry their own docs ([#64](https://github.com/Omega-JS-Stack/omega/issues/64))
36
+
37
+ A consumer install has no monorepo to point at, so the prepare lane ships the knowledge INSIDE each publishable. The devkit vendor hook every framework already runs (`packages/devkit/tools/vendor-docs.js`, called from `tools/vendor.js`) copies, for `@omega.js/{backend,client,desktop,extension,manager,web}`:
38
+
39
+ | Monorepo source | Shipped as | Notes |
40
+ |---|---|---|
41
+ | `docs/<package>/` | `<package>/docs/` (flat) | The guide lands at `docs/index.md`, beside the package's committed deep docs; nested dirs (`classy-v2/`) survive |
42
+ | `docs/shared/` | `<package>/docs/shared/` | The cross-framework contracts, verbatim |
43
+ | `AGENTS.md` (the repo-root map) | `manager/docs/AGENTS.md` | Manager ONLY — the target the brand chain's scope symlink lands on when there is no monorepo. Links retargeted (see below) |
44
+ | `agent-plugins/claude/` | `manager/claude-plugin/` + `manager/.claude-plugin/marketplace.json` | Manager ONLY — the plugin every brand enables (see below). `.mcp.json` ships WITH it: since [#144](https://github.com/Omega-JS-Stack/omega/issues/144) it launches `mcp-router-launch.js` inside the plugin, which node-resolves `@omega.js/mcp-router` from the install around it (a real dependency of the manager) instead of addressing the monorepo tree |
45
+
46
+ The guide's monorepo-relative links are rewritten to the shipped layout on the way in (`../../packages/<self>/` → `../`, `../shared/` → `shared/`), so `docs/index.md` still reaches the package's deep docs, its README, and the shared contracts. Cross-framework links (`../backend/index.md`) are left verbatim — another framework's guide isn't in this tarball.
47
+
48
+ The map's links are repo-root-relative, so it gets its own pass (`rewriteMapLinks`): `docs/shared/<x>.md` → `shared/<x>.md`, `docs/manager/<x>.md` → `<x>.md` (the manager's guide tree lands flat in the same dir), `docs/<other>/<x>.md` → `../../<other>/docs/<x>.md` (a sibling package under the same `@omega.js` scope), and a `packages/…` or `brands/…` link keeps its words while losing the link — no published target exists. A sibling that never publishes (`devkit`) or isn't installed leaves a dead relative link, the same trade the guide trees already make.
49
+
50
+ Everything written is GENERATED: gitignored per package, cleared before each rewrite, and pinned by `packages/devkit/test/vendor-docs.test.js` (fixture monorepo) plus `scripts/vendor-docs.test.js`, which packs all six documented packages for real and reads the tarball listings.
51
+
52
+ Version-matched by construction: the docs in `node_modules/@omega.js/web/docs/` are the docs of the version installed there.
53
+
54
+ ## Brands enable the plugin from their installed manager ([#62](https://github.com/Omega-JS-Stack/omega/issues/62))
55
+
56
+ The plugin rides in `@omega.js/manager` because that is the package every brand installs. The workspace service's `claude-settings` op writes/heals the brand's committed `.claude/settings.json`:
57
+
58
+ ```json
59
+ {
60
+ "extraKnownMarketplaces": { "omega": { "source": { "source": "directory", "path": "./node_modules/@omega.js/manager" } } },
61
+ "enabledPlugins": { "omega@omega": true }
62
+ }
63
+ ```
64
+
65
+ Committed, so every collaborator's session in that brand loads the omega skills and hooks — a directory marketplace is read LIVE from that path, so `npm update` moves the plugin with the package. The op only fires on a PUBLISHED install: `node_modules/@omega.js/manager` must carry the vendored `.claude-plugin/marketplace.json` **and** be a real directory. A locally linked brand's manager is a SYMLINK into the monorepo — whose `packages/manager` grows that same generated marketplace on every prepare — so the link itself is the local-era signal and the step skips; the developer's own user-scope install covers those sessions. The brand file NEVER points at a monorepo path — it would be machine-specific.
66
+
67
+ Once loaded, the plugin's hooks make the chain BINDING in that brand: the inject hook discovers every target the brand declares and asks for each one's skill plus this map as required reading, and the gate hook refuses a write under `targets/<t>/` or to `config/omega.json5` until the skill owning that surface has been invoked. Mechanics and the surface table: [the plugin README](../../agent-plugins/claude/README.md).
68
+
69
+ The gate reads the same way for a human's chat and for an agent that has no Skill tool, through two lanes and no others ([#760](https://github.com/Omega-JS-Stack/omega/issues/760)). In the main chat, invoking the skill IS the record. A subagent that writes its files through Bash reads the guide its brief names and then runs the one sanctioned command, `agent-plugins/claude/hooks/gate/mark.sh <skill>` here (in a brand: `node_modules/@omega.js/manager/claude-plugin/hooks/gate/mark.sh`), which writes the marker the hook would have written. A hand-written marker is a process breach, not a shortcut. Both lanes, and the flags: [the plugin README](../../agent-plugins/claude/README.md).
70
+
71
+ Reading the chain is one half; acting on it is the other. The guard hook holds the other half in the same brand: a `Write|Edit` to a framework-owned file is refused with the upstream-first message ([#452](https://github.com/Omega-JS-Stack/omega/issues/452)). Generated and vendored files — `node_modules/`, any `dist/`, a generated header, the OMEGA-managed `database.rules.json` — are hard-refused and name the real source to edit; a SHADOW COPY, a brand file whose path mirrors a file the installed framework ships through its override layer (read from `node_modules/@omega.js/<framework>/`, never a hardcoded list), is refused with the two exits: file the framework issue, or declare the override with `omega:consumer-override: <reason>` in the file's first five lines (`omega customize` writes that marker itself, so a materialized file passes as it lands). Only the override MECHANISM is guarded: a brand's pages are content and its documented entry files are its own, so neither is ever refused. The monorepo is exempt and everything unrecognized fails open. The lookup-root table and the class rules: [the plugin README](../../agent-plugins/claude/README.md).
72
+
73
+ ## Packages carry no agent docs (Ian 2026-07-27)
74
+
75
+ No `packages/<pkg>/` has an `AGENTS.md` or `CLAUDE.md` — deleted outright, no exceptions. Monorepo sessions get the map from the parent walk; consumer brands get it through the maintained scope symlink; a standalone package install has no resolvable chain anyway; the publish era generates whatever a shipped package needs ([#64](https://github.com/Omega-JS-Stack/omega/issues/64)).
76
+
77
+ ## The one deliberate gap
78
+
79
+ - **`brands/sandbox-brand` carries NO agent-docs chain.** It is a synthetic fixture the automated corpus/e2e runs mangle and reset — nothing durable lives there, so nothing agent-facing is written there.
80
+
81
+ ## Editing the guide
82
+
83
+ The brand-root guide is [docs/manager/brand.md](../manager/brand.md) — framework-owned, brand-agnostic (structure, verbs, per-target required-reading pointers, hard rules). Brand-specific knowledge belongs below the import in that brand's own `AGENTS.md`.
84
+
85
+ ## Per-target docs — RETIRED in brand context (cp246)
86
+
87
+ Per-target `AGENTS.md`/`CLAUDE.md`/`CHANGELOG.md`/`docs/` scaffolds predate the brand-monorepo era; Claude Code walks parent directories, so the brand-root chain covers target-dir sessions. The shared defaults engine now has a `retire` fileMap rule (devkit `defaults-engine.js`), wired mirrored in all four frameworks' brand branches (detection = the existing `@omega.js/config` brand-root resolution): in a brand target those files NEVER scaffold; an existing framework-owned-only copy (Custom section empty/whitespace or byte-equal to the shipped boilerplate; marker-less files must equal the rendered template) is deleted once, loudly; a copy carrying real consumer content is preserved with a move-it-to-the-brand-root warning. Standalone projects keep full per-project doc scaffolding, and it follows the same shape as a brand root (#63): the framework template is an `AGENTS.md` (marker-merged, so consumer notes below the Custom marker survive every setup) beside a one-line `@AGENTS.md` `CLAUDE.md` pointer. Test-pinned both ways.
88
+
89
+ **Prior-generation files ([#101](https://github.com/Omega-JS-Stack/omega/issues/101)).** A destination carrying the OMEGA section markers when the current template no longer does is a file an EARLIER generation of the same framework generated — the pre-#63/#91 content-bearing `CLAUDE.md` against today's one-line pointer. Its markers are the framework's own signature, so the engine treats it as framework-owned on both paths: the brand branch retires it (instead of keeping it behind a false "carries consumer content" warning), and on the standalone upgrade path `overwrite: false` still heals it to the current template (instead of leaving a stale doc beside the new `AGENTS.md`). A file with no markers is judged as before — consumer-authored unless it equals the rendered template.