anhedral 0.8.5 → 0.9.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 (126) hide show
  1. package/README.md +140 -34
  2. package/assets/anhedral-cli-init-technical.svg +8 -8
  3. package/assets/anhedral-cli-init.svg +9 -9
  4. package/assets/security/LICENSES.txt +63 -0
  5. package/assets/security/audit-deps.mjs +295 -0
  6. package/assets/security/braces-regression.mjs +102 -0
  7. package/assets/security/braces@3.0.3.patch +285 -0
  8. package/assets/security/decode-uri-component@0.2.2.patch +149 -0
  9. package/assets/security/decoder-regression.mjs +37 -0
  10. package/assets/security/forge-regression.mjs +46 -0
  11. package/assets/security/manifest.json +53 -0
  12. package/assets/security/node-forge@1.4.0.patch +26 -0
  13. package/dist/access.d.ts +10 -0
  14. package/dist/access.js +93 -0
  15. package/dist/auth-schema-snapshot.d.ts +346 -0
  16. package/dist/auth-schema-snapshot.js +347 -0
  17. package/dist/auth-schema.d.ts +1 -0
  18. package/dist/auth-schema.js +57 -0
  19. package/dist/bin.js +353 -10
  20. package/dist/bounded-file.d.ts +2 -0
  21. package/dist/bounded-file.js +30 -0
  22. package/dist/capabilities.d.ts +19 -33
  23. package/dist/capabilities.js +73 -71
  24. package/dist/cloudflare.d.ts +14 -0
  25. package/dist/cloudflare.js +66 -0
  26. package/dist/command.js +12 -3
  27. package/dist/delivery.d.ts +118 -0
  28. package/dist/delivery.js +611 -0
  29. package/dist/dependencies.d.ts +22 -0
  30. package/dist/dependencies.js +109 -67
  31. package/dist/dependency-order.d.ts +2 -0
  32. package/dist/dependency-order.js +24 -0
  33. package/dist/index.d.ts +18 -1
  34. package/dist/index.js +12 -1
  35. package/dist/managed-hosting.d.ts +49 -0
  36. package/dist/managed-hosting.js +373 -0
  37. package/dist/management.d.ts +3 -0
  38. package/dist/management.js +47 -0
  39. package/dist/platforms/desktop.d.ts +2 -2
  40. package/dist/platforms/desktop.js +22 -12
  41. package/dist/platforms/extension.d.ts +2 -2
  42. package/dist/platforms/extension.js +12 -4
  43. package/dist/platforms/mobile.d.ts +2 -2
  44. package/dist/platforms/mobile.js +13 -7
  45. package/dist/pnpm-policy.d.ts +4 -0
  46. package/dist/pnpm-policy.js +66 -0
  47. package/dist/project-state.d.ts +28 -0
  48. package/dist/project-state.js +226 -0
  49. package/dist/provider-readiness.d.ts +30 -0
  50. package/dist/provider-readiness.js +87 -0
  51. package/dist/provision.d.ts +46 -0
  52. package/dist/provision.js +197 -0
  53. package/dist/readiness.d.ts +4 -1
  54. package/dist/readiness.js +80 -8
  55. package/dist/registry/add.d.ts +22 -0
  56. package/dist/registry/add.js +198 -0
  57. package/dist/registry/bootstrap.d.ts +2 -0
  58. package/dist/registry/bootstrap.js +14 -0
  59. package/dist/registry/commands.d.ts +2 -0
  60. package/dist/registry/commands.js +99 -0
  61. package/dist/registry/context.d.ts +3 -0
  62. package/dist/registry/context.js +21 -0
  63. package/dist/registry/options.d.ts +2 -0
  64. package/dist/registry/options.js +65 -0
  65. package/dist/registry/receipt.d.ts +3 -0
  66. package/dist/registry/receipt.js +73 -0
  67. package/dist/registry/remote.d.ts +25 -0
  68. package/dist/registry/remote.js +168 -0
  69. package/dist/registry/resolve.d.ts +10 -0
  70. package/dist/registry/resolve.js +98 -0
  71. package/dist/registry/types.d.ts +64 -0
  72. package/dist/registry/usage.d.ts +1 -0
  73. package/dist/registry/usage.js +38 -0
  74. package/dist/render.js +3 -3
  75. package/dist/repository.d.ts +24 -0
  76. package/dist/repository.js +96 -0
  77. package/dist/scaffold/api.d.ts +2 -0
  78. package/dist/scaffold/api.js +13 -0
  79. package/dist/scaffold/auth.d.ts +3 -0
  80. package/dist/scaffold/auth.js +95 -0
  81. package/dist/scaffold/bootstrap.d.ts +2 -0
  82. package/dist/scaffold/bootstrap.js +34 -0
  83. package/dist/scaffold/compose.d.ts +4 -0
  84. package/dist/scaffold/compose.js +34 -0
  85. package/dist/scaffold/database.d.ts +2 -0
  86. package/dist/scaffold/database.js +43 -0
  87. package/dist/scaffold/documentation.d.ts +3 -0
  88. package/dist/scaffold/documentation.js +91 -0
  89. package/dist/scaffold/environment.d.ts +2 -0
  90. package/dist/scaffold/environment.js +5 -0
  91. package/dist/scaffold/files.d.ts +25 -0
  92. package/dist/scaffold/files.js +108 -0
  93. package/dist/scaffold/integrations.d.ts +3 -0
  94. package/dist/scaffold/integrations.js +7 -0
  95. package/dist/scaffold/services.d.ts +5 -0
  96. package/dist/scaffold/services.js +84 -0
  97. package/dist/scaffold/web.d.ts +2 -0
  98. package/dist/scaffold/web.js +102 -0
  99. package/dist/scaffold/workspace.d.ts +3 -0
  100. package/dist/scaffold/workspace.js +150 -0
  101. package/dist/security-backports.d.ts +3 -0
  102. package/dist/security-backports.js +26 -0
  103. package/dist/stack-registry.d.ts +80 -0
  104. package/dist/stack-registry.js +424 -0
  105. package/dist/standard.d.ts +6 -17
  106. package/dist/standard.js +41 -585
  107. package/dist/transaction.js +46 -26
  108. package/dist/util.js +12 -2
  109. package/dist/vercel.d.ts +98 -0
  110. package/dist/vercel.js +796 -0
  111. package/dist/version.d.ts +1 -1
  112. package/dist/version.js +1 -1
  113. package/dist/vinext.d.ts +1 -0
  114. package/dist/vinext.js +83 -0
  115. package/dist/workspace-graph.d.ts +7 -0
  116. package/dist/workspace-graph.js +73 -0
  117. package/docs/application-stack-standard.md +75 -674
  118. package/docs/delivery-workflow.md +83 -0
  119. package/docs/managed-hosting-architecture.md +87 -0
  120. package/docs/sponsorships.md +25 -0
  121. package/package.json +23 -28
  122. package/dist/project.d.ts +0 -4
  123. package/dist/standard-products.d.ts +0 -2
  124. package/dist/standard-products.js +0 -6
  125. /package/assets/{images/svg/logo-white-subtract.svg → anhedral-mark.svg} +0 -0
  126. /package/dist/{project.js → registry/types.js} +0 -0
@@ -1,703 +1,104 @@
1
1
  # Anhedral Application Stack & Delivery Standard
2
2
 
3
- ## 1. Standard
3
+ Anhedral builds client-owned applications using established frameworks and provider tools. Default web apps use Vinext, React, TypeScript, Tailwind, shadcn/ui and Lucide on Cloudflare Workers. Native Next.js on Vercel is the established alternative. React is the UI layer within these full-stack frameworks, not a standalone web-app recipe. Add components only when the product needs them, prefer free-first plans where suitable, and keep source, accounts, data, billing and recovery customer-owned.
4
4
 
5
- Anhedral builds **client-owned, monorepo-first applications** using established frameworks, services, APIs, CLIs, plugins, and agent tooling.
5
+ Respect existing account, budget, audience and release authorization. Request only missing approval for paid activation, material spending, architecture changes or release.
6
6
 
7
- The standard is:
7
+ ## Stack selection
8
8
 
9
- - **Cloudflare-first** for hosted application infrastructure.
10
- - **Free-first** where suitable.
11
- - **OpenAI/Codex-operated** for development and operations.
12
- - **Computer Use and Control Chrome throughout development.**
13
- - **GitHub-first** for source control and delivery.
14
- - **Next.js-first** for web applications.
15
- - **pnpm + Turborepo** for TypeScript/JavaScript monorepos.
16
- - **shadcn monorepo initialization for every new project.**
17
- - **macOS** as the Anhedral development environment.
18
- - Add applications, packages, providers, and infrastructure only when required.
19
- - Keep client accounts, source, infrastructure, billing, and recovery client-owned.
9
+ Cloudflare first. **Default** = preferred when needed; **Option** = choose for the stated requirement. Alternatives are grouped beside their defaults. Preserve justified existing stacks.
20
10
 
21
- Human approval is required for paid activation, material spending, architecture exceptions, and production releases.
11
+ ### Foundation and clients
22
12
 
23
- ---
13
+ | Capability | Default — when | Options — when |
14
+ | --- | --- | --- |
15
+ | Shared source | **Default:** [TypeScript](https://www.typescriptlang.org/docs/), [pnpm](https://pnpm.io/), [Turborepo](https://turborepo.dev/docs), [Zod](https://zod.dev/) — shared code, builds and validation. | — |
16
+ | Web | **Default:** [Vinext + React](https://developers.cloudflare.com/workers/framework-guides/web-apps/nextjs/) — full-stack web on Workers. | **Option:** [Next.js + OpenNext](https://opennext.js.org/cloudflare) — existing Next app on Workers; [Next.js + Vercel](https://vercel.com/docs/frameworks/nextjs) — native Next hosting. |
17
+ | UI | **Default:** [Tailwind](https://tailwindcss.com/docs/), [shadcn/ui](https://ui.shadcn.com/docs) — web styling/components. | **Option:** [CSS Modules](https://nextjs.org/docs/app/getting-started/css) — bespoke styling or existing CSS. |
18
+ | Mobile | **Default:** [Expo](https://docs.expo.dev/) — React Native iOS/Android. | **Option:** [SwiftUI](https://developer.apple.com/documentation/swiftui) / [Compose](https://developer.android.com/compose) — platform-specific UI; [Flutter](https://docs.flutter.dev/) — Dart shared UI; [Capacitor](https://capacitorjs.com/docs) — package web UI with native access. |
19
+ | Desktop | **Default:** [Electron](https://www.electronjs.org/docs/latest/) — reuse web UI with Chromium/Node. | **Option:** [Tauri](https://v2.tauri.app/) — smaller system-webview packages; [GPUI](https://github.com/zed-industries/zed/blob/main/crates/gpui/README.md) — GPU-rendered Rust UI, separate UI code and pre-1.0 APIs; [SwiftUI/AppKit](https://developer.apple.com/documentation/appkit) — Apple-specific desktop experience. |
20
+ | Extensions | **Default:** [WXT](https://wxt.dev/guide/introduction.html) — browser extensions. | **Option:** [Chrome extension APIs](https://developer.chrome.com/docs/extensions) — direct implementation or existing extension. |
24
21
 
25
- # 2. Tooling selection chart
22
+ ### Backend and data
26
23
 
27
- |Need|Default|Option|When to use|
28
- |---|---|---|---|
29
- |**Repository foundation**|**shadcn monorepo initializer + pnpm + Turborepo**|Native language workspaces alongside it|Every new project, including mobile-only, desktop-only, extensions, or projects using another app template.|
30
- |**Web**|**Next.js + React + TypeScript + Tailwind + shadcn/ui**|Vinext|Next.js by default. Vinext only when its Vite/Workers architecture provides a demonstrated benefit.|
31
- |**Mobile**|**Expo + React Native Reusables**|—|iOS/Android applications.|
32
- |**Desktop**|**Electron** + **React** + **TypeScript** + **Tailwind** + **shadcn/ui**|GPUI + Rust|Electron for React/TS reuse. GPUI for deliberately Rust-first applications.|
33
- |**Extension**|**WXT + Chrome Side Panel API**|—|Browser-integrated products. Side Panel is the primary UI.|
34
- |**API**|**Hono + OpenAPI on Workers**|Next.js route handlers|Hono for shared/mobile/external APIs. Next.js handlers when only the web application needs them.|
35
- |**Next.js hosting**|**Cloudflare Workers + OpenNext**|Vercel|Cloudflare by default. Vercel when native Next.js hosting materially simplifies the project and its applicable plan is appropriate.|
36
- |**General compute**|**Cloudflare Workers**|Containers|Containers for Linux/native dependencies or workloads that do not fit Workers.|
37
- |**PostgreSQL**|**Neon + Drizzle + Hyperdrive**|—|Relational PostgreSQL persistence.|
38
- |**Cloudflare SQL**|**D1 + Drizzle**|Neon|D1 when SQLite semantics are sufficient.|
39
- |**Local data**|**SQLite + filesystem**|—|Offline/device-local applications.|
40
- |**Authentication**|**Clerk or Better Auth**|No auth|Clerk for managed identity; Better Auth for application-managed auth; no auth when unnecessary.|
41
- |**Files**|**Private R2 + Worker binding**|Local filesystem|R2 for remote files; filesystem for local files.|
42
- |**Cache/config**|**KV**|—|Eventually consistent configuration/cache, never authoritative transactional state.|
43
- |**Realtime**|**Durable Objects + WebSockets**|—|Presence, rooms, collaboration, and stateful realtime coordination.|
44
- |**Jobs**|**Queues**|—|Deferred/asynchronous processing.|
45
- |**Scheduled work**|**Cron Triggers**|—|Recurring scheduled work.|
46
- |**Durable workflows**|**Workflows**|—|Resumable multi-step processes.|
47
- |**AI**|**OpenAI SDK or AI SDK**|Workers AI|OpenAI SDK for direct OpenAI use; AI SDK for streaming/tools/provider abstraction; Workers AI when Cloudflare inference is advantageous.|
48
- |**Domain**|**GoDaddy broker + Cloudflare nameservers**|—|Use GoDaddy for domain registration/brokerage and Cloudflare for authoritative DNS.|
49
- |**Inbound Mail**|**Cloudflare Email Routing**|—|Incoming domain-email routing for business and application mail.|
50
- |**Outbound Mail**|**Cloudflare Email Sending**|Resend|Business and application mail; use Resend when selected as the alternative sending provider.|
51
- |**Payments**|**Stripe**|RevenueCat + Stripe|Add RevenueCat when web/App Store/Play Store entitlements need unified management.|
52
- |**Operational telemetry**|**Cloudflare Observability**|Sentry|Add Sentry when additional crash/runtime diagnostics are required.|
53
- |**Product analytics**|**Basin**|PostHog|PostHog when replay, experiments, funnels, or other required capabilities justify it.|
54
- |**TS/JS auditing**|**Fallow**|—|Standard static/codebase audit for TypeScript and JavaScript. Use in development and PR checks.|
55
- |**Source**|**Git + GitHub**|Cloudflare Artifacts|GitHub by default. Artifacts when it provides a concrete advantage and required controls are supported.|
56
- |**CI/CD**|**GitHub Actions**|Workers Builds|Workers Builds when equivalent controls are available and useful.|
57
- |**Development agent**|**OpenAI / Codex**|—|Primary implementation, reasoning, testing, and operational agent.|
58
- |**Interactive development**|**Computer Use + Control Chrome**|—|Used heavily throughout implementation, iteration, setup, automation, and verification.|
59
- |**Cloudflare operations**|**Cloudflare plugin + `cf` + API/MCP**|Dashboard when useful|Provisioning, deployment, configuration, analytics, observability, and operations.|
24
+ | Capability | Default — when | Options — when |
25
+ | --- | --- | --- |
26
+ | API/runtime | **Default:** [Workers](https://developers.cloudflare.com/workers/) + [Hono](https://hono.dev/docs/getting-started/cloudflare-workers) — APIs, webhooks and services. | **Option:** framework server routes — integrated web backend; [Containers](https://developers.cloudflare.com/containers/) — Linux/native dependencies. |
27
+ | Database | **Default:** [Neon serverless driver](https://neon.com/docs/serverless/serverless-driver) + [Drizzle](https://orm.drizzle.team/docs/connect-neon) — direct HTTP for CRUD and independent queries; no Hyperdrive required. | **Option:** [Hyperdrive + Neon](https://developers.cloudflare.com/hyperdrive/examples/connect-to-postgres/postgres-database-providers/neon/) — pg/postgres.js, connection reuse or optional caching, justified by workload/latency measurements; Neon WebSocket driver — session/interactive transactions; [D1 + Drizzle](https://orm.drizzle.team/docs/sqlite/connect-cloudflare-d1) — Worker-native SQLite; [SQLite](https://www.sqlite.org/docs.html) / [IndexedDB](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API) — local/offline data. |
28
+ | Authentication | **Default:** [Better Auth](https://better-auth.com/docs/adapters/drizzle) — own identities, sessions and organizations. | **Option:** [Clerk](https://clerk.com/docs) — managed authentication and identity features. |
29
+ | Files | **Default:** [R2](https://developers.cloudflare.com/r2/) — uploads, attachments and archives. | **Option:** local files — device-only apps; existing S3-compatible storage — migration has no benefit. |
30
+ | Realtime/state | **Default:** [Durable Objects + hibernating WebSockets](https://developers.cloudflare.com/durable-objects/best-practices/websockets/) — rooms, presence and coordinated events. | **Option:** [SSE](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events) — one-way updates; polling — infrequent changes; [KV](https://developers.cloudflare.com/kv/) — read-heavy, eventually consistent cache/config. |
31
+ | Background work | **Default:** [Queues](https://developers.cloudflare.com/queues/) — jobs/retries; [Workflows](https://developers.cloudflare.com/workflows/) — durable multi-step work; [Cron](https://developers.cloudflare.com/workers/configuration/cron-triggers/) — schedules. | **Option:** [DO alarms](https://developers.cloudflare.com/durable-objects/api/alarms/) — entity timers; [K2](https://developers.cloudflare.com/k2/) — retained replayable streams, beta acceptable. |
32
+ | Placement | **Default:** standard Workers placement — request-proximate execution. | **Option:** [Placement](https://developers.cloudflare.com/workers/configuration/placement/) — database/backend round trips dominate. |
60
33
 
61
- Do not activate every option simply because it appears in the table.
34
+ Start with direct Neon HTTP; use non-interactive transaction batches where suitable, or WebSocket/standard-driver transactions when interactive sessions are needed. Benchmark before adding Hyperdrive. Its pooling operates on Cloudflare infrastructure; Neon PgBouncer operates near Postgres. With Hyperdrive use pg/postgres.js against Neon’s non-pooled endpoint, not the Neon serverless driver or stacked poolers. Disable result caching for authoritative auth, permissions, entitlements and balances. Neither Neon nor D1 is universally faster/cheaper; offline sync remains application work.
62
35
 
63
- ---
36
+ ### AI, media and communication
64
37
 
65
- # 3. Repository foundation
38
+ | Capability | Default — when | Options — when |
39
+ | --- | --- | --- |
40
+ | Inference | **Default:** [Workers AI](https://developers.cloudflare.com/workers-ai/) — supported models fit; [AI Gateway](https://developers.cloudflare.com/ai-gateway/) — routing/controls/telemetry. | **Option:** [OpenAI/other providers through Gateway](https://developers.cloudflare.com/ai-gateway/usage/providers/) — required models; [AI SDK](https://ai-sdk.dev/docs/introduction) — shared model interfaces and streaming UI. |
41
+ | Retrieval/agents | **Default:** [AI Search](https://developers.cloudflare.com/ai-search/) — managed RAG. | **Option:** [Vectorize](https://developers.cloudflare.com/vectorize/) — custom vector pipeline; [Agents SDK](https://developers.cloudflare.com/agents/) — stateful agents. |
42
+ | Isolated execution | — | **Option:** [Sandboxes](https://developers.cloudflare.com/sandbox/) — user/agent code; [Browser Run](https://developers.cloudflare.com/browser-run/) — automation, screenshots/PDFs; [Containers](https://developers.cloudflare.com/containers/) — custom runtime. |
43
+ | Calls | **Default:** [RealtimeKit](https://developers.cloudflare.com/realtime/realtimekit/) — audio/video/screensharing. | **Option:** [Realtime SFU + TURN](https://developers.cloudflare.com/realtime/) — custom WebRTC; [LiveKit](https://docs.livekit.io/) — existing ecosystem or voice-agent requirements. |
44
+ | Images/video | **Default:** [Images](https://developers.cloudflare.com/images/) — transforms/delivery; [Stream](https://developers.cloudflare.com/stream/) — encoding/playback/live video. | **Option:** [R2](https://developers.cloudflare.com/r2/) — originals/downloads without managed processing; [Media over QUIC](https://developers.cloudflare.com/moq/) — specialized low-latency transport. |
45
+ | Email | **Default:** [Email Service](https://developers.cloudflare.com/email-service/) — email workflows, sending beta acceptable. | **Option:** [Resend](https://resend.com/docs) — established transactional email provider. |
46
+ | Notifications | **Default:** [Expo Push](https://docs.expo.dev/push-notifications/overview/) — Expo mobile notifications. | **Option:** [APNs](https://developer.apple.com/documentation/usernotifications) / [FCM](https://firebase.google.com/docs/cloud-messaging) — direct native delivery; [Web Push](https://developer.mozilla.org/en-US/docs/Web/API/Push_API) — browser notifications. |
66
47
 
67
- ## Every project starts with shadcn
48
+ Durable Objects coordinate calls/events; SFU/TURN handle media. WebSockets do not replace background push.
68
49
 
69
- Every new Anhedral project starts from the **shadcn-generated pnpm/Turborepo monorepo**, regardless of initial application type.
50
+ ### Commerce and access
70
51
 
71
- Initialize:
52
+ | Capability | Default — when | Options — when |
53
+ | --- | --- | --- |
54
+ | Web billing | **Default:** [Stripe Checkout](https://docs.stripe.com/payments/checkout) + [Billing](https://docs.stripe.com/billing) — payments, subscriptions and usage billing. | **Option:** [Connect](https://docs.stripe.com/connect) — marketplaces/payouts; [Tax](https://docs.stripe.com/tax) — tax calculation. |
55
+ | Cross-store purchases | **Default:** [RevenueCat](https://www.revenuecat.com/docs/web/integrations/stripe) — supported store/web subscriptions and entitlements. | **Option:** [StoreKit](https://developer.apple.com/documentation/storekit) / [Play Billing](https://developer.android.com/google/play/billing) — own purchase lifecycle integrations. |
56
+ | Access enforcement | **Default:** Workers + chosen database — entitlement projections, seats, grants and credit/usage ledger. | **Option:** [Monetization Gateway](https://developers.cloudflare.com/monetization-gateway/) — eligible x402 requests, closed beta acceptable. |
72
57
 
73
- ```
74
- pnpm dlx shadcn@latest init --monorepo --template next
75
- ```
58
+ Stripe/stores remain purchase authorities; RevenueCat does not cover every Stripe pricing model. Verify webhooks, process idempotently and reconcile refunds/restores. Cloudflare hosts enforcement; it does not replace payment processing.
76
59
 
77
- This is the **repository bootstrap**, not a requirement that every project remain a Next.js application.
60
+ ### Security, analytics and operations
78
61
 
79
- After initialization:
62
+ | Capability | Default — when | Options — when |
63
+ | --- | --- | --- |
64
+ | Public protection | **Default:** [DNS/TLS](https://developers.cloudflare.com/directory/), [WAF](https://developers.cloudflare.com/waf/), [Turnstile](https://developers.cloudflare.com/turnstile/) — domains, HTTPS and abuse controls. | **Option:** [API Shield](https://developers.cloudflare.com/api-shield/) — additional API protection; [Access + Tunnel](https://developers.cloudflare.com/cloudflare-one/) — staff tools/private origins. |
65
+ | Specialized security/networking | — | **Option:** [Load Balancing](https://developers.cloudflare.com/load-balancing/) — multiple origins; [Spectrum](https://developers.cloudflare.com/spectrum/) — TCP/UDP proxying; [Data Localization](https://developers.cloudflare.com/data-localization/) — regional processing requirements. |
66
+ | Credentials | **Default:** [Worker secrets](https://developers.cloudflare.com/workers/configuration/secrets/) — server credentials. | **Option:** [Secrets Store](https://developers.cloudflare.com/secrets-store/) — shared account secrets, beta acceptable. |
67
+ | Website analytics | **Default:** [free Web Analytics](https://www.cloudflare.com/web-analytics/) — traffic/performance. | **Option:** [PostHog](https://posthog.com/docs) — product funnels, cohorts and replay. |
68
+ | Operational telemetry | **Default:** [Workers Observability](https://developers.cloudflare.com/workers/observability/) — logs/traces/errors. | **Option:** [Sentry](https://docs.sentry.io/platforms/javascript/) — cross-client error monitoring; [Analytics Engine](https://developers.cloudflare.com/analytics/analytics-engine/) — custom telemetry; [Basin](https://developers.cloudflare.com/basin/) — event ingestion and analytical SQL on R2/Iceberg. |
69
+ | Feature delivery | — | **Option:** [Flagship](https://developers.cloudflare.com/flagship/) — targeted exposure; [PostHog](https://posthog.com/docs/feature-flags) — existing flags/experiments. |
70
+ | Content/source tooling | — | **Option:** [Artifacts](https://developers.cloudflare.com/artifacts/) — durable versioned source/artifacts, beta acceptable; [GitHub](https://docs.github.com/) — customer-owned Git source. |
71
+ | Customer platforms | — | **Option:** [Cloudflare for SaaS](https://developers.cloudflare.com/cloudflare-for-platforms/cloudflare-for-saas/) — customer domains; [Workers for Platforms](https://developers.cloudflare.com/cloudflare-for-platforms/workers-for-platforms/) — customer code. |
80
72
 
81
- - Preserve the generated pnpm/Turborepo structure and conventions.
82
- - Use `apps/*` for applications/services.
83
- - Use `packages/*` for reusable packages.
84
- - Keep the generated Next.js app when Next.js is required.
85
- - Remove or replace the starter app when the project is mobile-only, desktop-only, extension-only, or uses another explicitly selected application template.
86
- - Never retain an unused Next.js application solely because it initialized the repository.
87
- - Add application-specific templates inside the established monorepo.
73
+ ### Development, releases and accounts
88
74
 
89
- Examples:
75
+ | Capability | Default — when | Options — when |
76
+ | --- | --- | --- |
77
+ | Agent tooling | **Default:** [Cloudflare Codex plugin](https://developers.cloudflare.com/agent-setup/codex/) — Cloudflare Skills/MCP and agent operations. | **Option:** [cf CLI](https://developers.cloudflare.com/cf/) — broad API/project operations, beta acceptable. |
78
+ | Cloud releases | **Default:** [Wrangler](https://developers.cloudflare.com/workers/wrangler/) + [Workers Builds](https://developers.cloudflare.com/workers/ci-cd/builds/) — Worker development/releases. | **Option:** [GitHub Actions](https://docs.github.com/en/actions) — custom CI; [Vercel](https://vercel.com/docs/deployments) — selected native Next stack. |
79
+ | Native builds | **Default:** [EAS](https://docs.expo.dev/build/introduction/) — hosted Expo builds. | **Option:** [local Expo builds](https://docs.expo.dev/build-reference/local-builds/) — local CI; platform toolchains — GPUI/Tauri/native clients. |
80
+ | Distribution/accounts | **Default:** customer-owned [Apple](https://developer.apple.com/programs/), [Play](https://play.google.com/console/about/), [Chrome](https://developer.chrome.com/docs/webstore/register) accounts — selected stores. | **Option:** direct desktop distribution — signed/notarized packages; [free Cloudflare account creation](https://developers.cloudflare.com/changelog/post/2026-08-04-free-dashboard-button/) — eligible separate customer accounts. |
90
81
 
91
- ```
92
- Mobile-only
82
+ Use customer-owned resources. Implement backup/recovery, authorization, replay, offline sync and ledger correctness explicitly. Select specialized capabilities as needed; alternatives are choices, not dependencies to install together.
93
83
 
94
- apps/
95
- └── mobile/
96
- ```
84
+ The CLI generates Vinext, Next.js, Expo, Electron, WXT and Hono applications plus selected provider starters. Neon starters use the direct serverless HTTP driver with Drizzle. Alternatives in the table require deliberate project implementation. A starter does not establish configured infrastructure or working product behavior. The bundled capability registry and `new --dry-run --json` describe generated requirements.
97
85
 
98
- ```
99
- Extension-only
86
+ The bundled stack registry in `src/stack-registry.ts` owns each item’s identity, version, source recipe, setup requirements, environment variables, bindings, destinations and composition constraints. Product IDs and capability views derive from that catalog. Foundations include pnpm/Turborepo, TypeScript, ESLint and shared UI; the official shadcn bootstrap is pinned in `src/dependencies.ts`. The resolver validates selections and orders dependencies; focused modules under `src/scaffold/` install the resolved recipes inside the staging transaction. `registry list|view` exposes the catalog, dry-run plans expose concrete destinations, and `anhedral.registry.json` records installed recipes and local workspace references. Package names must be unique, workspace references must resolve, and dependency cycles fail before commit. `doctor` verifies the installed receipt and workspace graph against the setup plan. To add a supported part, declare one catalog entry with its recipe and composition policy, then exercise composition and rollback in the registry tests. Build and release tooling regenerate matching plugin catalogs. Incremental `add` stages bundled or declarative local/HTTPS registry items, resolves dependencies, rejects unsafe paths and installation hooks, and refuses to replace edited source. Receipts record source integrity and generated-file hashes. Runtime relocation and older projects without fingerprints require explicit migration. This is an Anhedral recipe schema; shadcn JSON interoperability is not supported. Stack alternatives without generator recipes remain deliberate implementation choices.
100
87
 
101
- apps/
102
- └── extension/
103
- ```
88
+ ## Implementation rules
104
89
 
105
- ```
106
- Full product
90
+ - Start new projects with the official shadcn pnpm/Turborepo monorepo; use `apps/*` and genuinely shared `packages/*`. Web/Electron use React, TypeScript, Tailwind, shadcn/ui and Lucide; Expo uses React Native Reusables; WXT uses Chrome Side Panel. Preserve suitable existing architecture.
91
+ - Vinext is the default Worker framework; verify its actual compatibility. Native Next.js uses Vercel; explicit Next.js on Workers uses OpenNext. Shared/mobile APIs use Hono/OpenAPI; web-only endpoints can use framework routes.
92
+ - Select one database and one identity provider. Generator alternatives remain deliberate flags, not automatic migrations. Better Auth requires a database; authentication is optional. Configure origins/sessions and enforce tenant/resource authorization server-side. Hosting privacy is separate from product identity.
93
+ - Keep R2 private and authorize file operations in Workers. Keep secrets server-side, environments separate and migrations reviewed. KV is not authoritative transactional state. Bound retries, concurrency, AI usage and paid consumption; implement idempotency, quotas and recovery.
94
+ - Use customer-owned source, accounts, billing and recovery. Domain registration/brokerage uses GoDaddy and Cloudflare DNS; preserve existing mail/DNSSEC. Configure actual sender domains and inbound destinations; routing does not migrate mailboxes.
95
+ - Codex and browser/native tools implement and verify product flows; Fallow audits TS/JS. A starter, installed package or successful deployment does not prove a configured integration or working application.
96
+ - Record decisions and connections in the application's `docs/architecture.md`; keep tested behavior, environment, release/source identity and unresolved gaps in `docs/verification.md`. Update these existing files after relevant changes.
107
97
 
108
- apps/
109
- ├── web/
110
- ├── mobile/
111
- ├── desktop/
112
- ├── extension/
113
- ├── api/
114
- ├── jobs/
115
- └── realtime/
116
- ```
98
+ Follow the [delivery workflow](delivery-workflow.md) for release, acceptance and recovery. The [managed-hosting contract](https://github.com/anhedral/anhedral-init/blob/main/docs/managed-hosting-architecture.md) describes an undeployed client/backend boundary, not an available service. Installed versions, publication and live acceptance require separate evidence.
117
99
 
118
- ## Additional initialization
100
+ ## Maintenance
119
101
 
120
- Mobile:
102
+ This file owns stack choices; the delivery guide owns lifecycle/acceptance; the managed contract owns its API; sponsorship owns support information. Update the owning file in the same change when behavior or provider requirements change. Remove stale claims and unused options. Verify current official guidance when selecting a provider; beta availability is not guaranteed. Do not add catalogs, duplicated analyses or progress reports to `docs`. The plugin's bundled stack/delivery files are generated copies, never separate sources of truth.
121
103
 
122
- ```
123
- pnpm dlx @react-native-reusables/cli@latest init
124
- ```
125
-
126
- Extension:
127
-
128
- ```
129
- pnpm dlx wxt@latest init
130
- ```
131
-
132
- Standard commands where applicable:
133
-
134
- ```
135
- dev
136
- build
137
- lint
138
- typecheck
139
- test
140
- audit
141
- check
142
- ```
143
-
144
- Other languages retain their native toolchains. Turborepo coordinates them where useful but does not replace Cargo, Python tooling, Expo tooling, or other native systems.
145
-
146
- Commit lockfiles and record important toolchain versions.
147
-
148
- ---
149
-
150
- # 4. Application conventions
151
-
152
- ## Web
153
-
154
- Default:
155
-
156
- **Next.js + React + TypeScript + Tailwind CSS + shadcn/ui**
157
-
158
- Keep the App Router product-driven:
159
-
160
- ```
161
- app/
162
- ├── page.tsx
163
- ├── dashboard/
164
- ├── projects/
165
- ├── settings/
166
- └── (admin)/
167
- ```
168
-
169
- Use route groups such as `(admin)` and `(auth)` when they provide a meaningful layout, authorization, or organizational boundary.
170
-
171
- ### Vinext
172
-
173
- Vinext is an explicit project choice, not an automatic Next.js replacement.
174
-
175
- Use it only when its Vite/Workers architecture provides a concrete benefit and the project's dependencies and framework behavior have been verified.
176
-
177
- ## Mobile
178
-
179
- Use:
180
-
181
- **Expo + React Native + React Native Reusables + TypeScript**
182
-
183
- Follow the same general package, styling, naming, and domain conventions as web.
184
-
185
- Share appropriate business logic, contracts, validation, styling, and utilities.
186
-
187
- Do not force React and React Native to share rendered components when separate implementations are cleaner.
188
-
189
- ## Desktop
190
-
191
- Use **Electron** when React/TypeScript reuse is useful.
192
-
193
- Use **GPUI + Rust** when a deliberately Rust-first architecture, native integration, or performance requirement justifies a separate implementation.
194
-
195
- ## Browser extensions
196
-
197
- Use:
198
-
199
- **WXT + Chrome Side Panel API**
200
-
201
- The Chrome Side Panel is the primary extension interface.
202
-
203
- Use WXT for:
204
-
205
- - side panel
206
- - service worker/background logic
207
- - content scripts
208
- - browser messaging
209
- - permissions
210
- - packaging
211
-
212
- Do not default to popup-first extension architecture.
213
-
214
- ---
215
-
216
- # 5. Shared packages
217
-
218
- Create packages only when genuine reusable behavior exists.
219
-
220
- Typical options:
221
-
222
- ```
223
- packages/
224
- ├── ui/ # React / shadcn
225
- ├── ui-native/ # React Native Reusables
226
- ├── styling/ # colors, typography, spacing, themes
227
- ├── contracts/ # schemas, types, API/event contracts
228
- ├── api-client/
229
- ├── domain/ # portable business logic
230
- ├── server/ # server-only logic
231
- ├── auth/
232
- ├── db/
233
- ├── local-data/
234
- ├── storage/
235
- ├── billing/
236
- ├── email/
237
- ├── ai/
238
- ├── analytics/
239
- ├── observability/
240
- ├── i18n/
241
- ├── eslint-config/
242
- ├── typescript-config/
243
- └── test-config/
244
- ```
245
-
246
- Use **`styling`**, not `tokens`, for shared styling definitions.
247
-
248
- Share:
249
-
250
- - styling
251
- - schemas
252
- - validation
253
- - contracts
254
- - API types
255
- - event definitions
256
- - portable business logic
257
-
258
- Keep platform-specific UI separate where appropriate.
259
-
260
- Keep privileged/server integrations out of client-safe packages.
261
-
262
- Never expose server credentials through shared client code.
263
-
264
- ---
265
-
266
- # 6. Cloudflare hosting
267
-
268
- Cloudflare is the preferred hosted application platform.
269
-
270
- Typical architecture:
271
-
272
- ```
273
- Web / Mobile / Desktop / Extension
274
- │
275
- ▼
276
- Cloudflare Workers
277
- Hono / Next.js
278
- │
279
- ┌──────────┼──────────┐
280
- ▼ ▼ ▼
281
- Hyperdrive R2 Durable Objects
282
- │ │
283
- ▼ WebSockets
284
- Neon
285
-
286
- Workers
287
- ├── Queues
288
- ├── Cron
289
- ├── Workflows
290
- ├── KV
291
- ├── Observability
292
- └── Basin
293
- ```
294
-
295
- Use only required services.
296
-
297
- ## Next.js hosting
298
-
299
- Default:
300
-
301
- ```
302
- Next.js
303
- ↓
304
- OpenNext
305
- ↓
306
- Cloudflare Workers
307
- ```
308
-
309
- Alternative:
310
-
311
- ```
312
- Next.js
313
- ↓
314
- Vercel
315
- │
316
- └─────────────→ Cloudflare infrastructure
317
- ```
318
-
319
- Vercel may host only the Next.js application while Cloudflare continues to provide:
320
-
321
- - APIs
322
- - R2
323
- - Hyperdrive
324
- - Durable Objects
325
- - Queues
326
- - Workflows
327
- - analytics
328
- - other infrastructure
329
-
330
- Use Vercel when its native Next.js integration, previews, deployment experience, or framework support materially simplifies the project and its applicable plan/cost is appropriate.
331
-
332
- Cloudflare remains the default.
333
-
334
- ---
335
-
336
- # 7. APIs
337
-
338
- Use:
339
-
340
- **Hono + OpenAPI on Cloudflare Workers**
341
-
342
- when a shared network API is required by:
343
-
344
- - mobile
345
- - desktop
346
- - extensions
347
- - integrations
348
- - external consumers
349
- - multiple application interfaces
350
-
351
- Use **Next.js route handlers** when endpoints belong only to the web application and a separate service adds no useful boundary.
352
-
353
- Do not create `apps/api` automatically.
354
-
355
- ---
356
-
357
- # 8. Data
358
-
359
- ## PostgreSQL
360
-
361
- Default:
362
-
363
- ```
364
- Worker
365
- ↓
366
- Drizzle
367
- ↓
368
- Hyperdrive
369
- ↓
370
- Neon PostgreSQL
371
- ```
372
-
373
- Use PostgreSQL when relational requirements justify it.
374
-
375
- Neon remains independently managed.
376
-
377
- Avoid inappropriate Hyperdrive query caching for correctness-sensitive operations such as:
378
-
379
- - authentication
380
- - permissions
381
- - entitlements
382
- - balances
383
- - quotas
384
- - financial records
385
- - paid-unit consumption
386
-
387
- ## D1
388
-
389
- Use:
390
-
391
- **D1 + Drizzle**
392
-
393
- when SQLite semantics are sufficient and Cloudflare-native persistence is preferable.
394
-
395
- D1 is an alternative database choice, not an automatic PostgreSQL replacement.
396
-
397
- ## Local data
398
-
399
- Use:
400
-
401
- **SQLite + filesystem**
402
-
403
- for local/device-resident data.
404
-
405
- Do not add cloud persistence merely because other applications use it.
406
-
407
- Offline synchronization requires explicit design for:
408
-
409
- - identity
410
- - offline writes
411
- - conflicts
412
- - reconciliation
413
- - authoritative state
414
-
415
- ---
416
-
417
- # 9. Private files
418
-
419
- Remote application files use:
420
-
421
- **private Cloudflare R2 buckets accessed through Worker bindings.**
422
-
423
- ```
424
- web / mobile / desktop / extension
425
- ↓
426
- Worker
427
- ↓
428
- authenticate + authorize
429
- ↓
430
- private R2 binding
431
- ```
432
-
433
- Clients never receive R2 credentials.
434
-
435
- The Worker enforces file-level authorization.
436
-
437
- Do not make private application buckets public for convenience.
438
-
439
- Use the local filesystem when files are intentionally device-local.
440
-
441
- ---
442
-
443
- # 10. Authentication
444
-
445
- Choose per project.
446
-
447
- ### Clerk
448
-
449
- Use when managed identity reduces implementation and maintenance.
450
-
451
- ### Better Auth
452
-
453
- Use when application-managed authentication is preferred.
454
-
455
- ### No authentication
456
-
457
- Use when accounts are unnecessary.
458
-
459
- Do not add authentication merely because other projects use it.
460
-
461
- Cloudflare Access may separately protect internal applications or staging environments.
462
-
463
- ---
464
-
465
- # 11. Realtime and asynchronous work
466
-
467
- Use **Durable Objects + WebSockets** for:
468
-
469
- - rooms
470
- - presence
471
- - collaboration
472
- - connection coordination
473
- - stateful realtime behavior
474
-
475
- Use **Queues** for asynchronous jobs.
476
-
477
- Use **Cron Triggers** for scheduled work.
478
-
479
- Use **Workflows** for durable, resumable multi-step processes.
480
-
481
- Use **Containers** when suitable workloads require:
482
-
483
- - Linux binaries
484
- - native dependencies
485
- - heavier compute
486
- - isolated processing
487
-
488
- Define retries, idempotency, concurrency, and failure handling where applicable.
489
-
490
- ---
491
-
492
- # 12. AI
493
-
494
- Normal choices:
495
-
496
- ### OpenAI SDK
497
-
498
- Use when directly integrating OpenAI.
499
-
500
- ### AI SDK
501
-
502
- Use when the application benefits from:
503
-
504
- - streaming
505
- - tool calling
506
- - provider abstraction
507
- - structured AI UI patterns
508
- - established templates/examples
509
-
510
- Prefer official examples and suitable Next.js templates over unnecessary custom infrastructure.
511
-
512
- ### Workers AI
513
-
514
- Optional.
515
-
516
- Use when Cloudflare-hosted inference provides a concrete project advantage.
517
-
518
- AI Gateway and related Cloudflare AI services may be selected when their routing, observability, control, or cost features justify them.
519
-
520
- ---
521
-
522
- # 13. Domain and mail
523
-
524
- Use:
525
-
526
- ```
527
- Domain → GoDaddy broker + Cloudflare nameservers
528
- Inbound Mail → Cloudflare Email Routing
529
- Outbound Mail → Cloudflare Email Sending (default) / Resend (alternative)
530
- ```
531
-
532
- Purchase the domain through GoDaddy registration/brokerage in the client's account. The client owns registration, renewal, billing, and recovery access.
533
-
534
- Then add the domain as a zone in the client's Cloudflare account, verify its DNS records, and set the registrar's nameservers to those assigned by Cloudflare. Verify the zone is active before connecting application domains and mail. Registration remains with the registrar; Cloudflare manages authoritative DNS.
535
-
536
- Use Cloudflare Email Routing for inbound mail and Cloudflare Email Sending for outbound business and application mail. Resend is an alternative outbound sending provider when selected for the project.
537
-
538
- Configure domain verification, routing destinations, sender authentication, and environment-specific sending credentials or bindings for the selected provider.
539
-
540
- ---
541
-
542
- # 14. Payments
543
-
544
- Use **Stripe** for web payments and subscriptions.
545
-
546
- Add **RevenueCat** when subscriptions span web, App Store, and Play Store ecosystems and unified entitlement management is useful.
547
-
548
- Keep separate concepts for:
549
-
550
- - billing
551
- - subscriptions
552
- - entitlements
553
- - credits
554
- - quotas
555
- - seats
556
- - consumption
557
-
558
- Paid-unit consumption must be transactional and idempotent.
559
-
560
- ---
561
-
562
- # 15. Analytics and observability
563
-
564
- ## Operations
565
-
566
- Use **Cloudflare Observability** for:
567
-
568
- - logs
569
- - errors
570
- - traces
571
- - latency
572
- - deployments
573
- - request behavior
574
- - operational investigation
575
-
576
- Add **Sentry** when additional runtime or crash diagnostics are required.
577
-
578
- ## Product analytics
579
-
580
- Use **Basin** for:
581
-
582
- - application events
583
- - analytical datasets
584
- - analytical queries
585
-
586
- Add **PostHog** when requirements such as:
587
-
588
- - session replay
589
- - funnels
590
- - experiments
591
- - specialized product analytics
592
-
593
- justify it.
594
-
595
- Do not install every analytics platform by default.
596
-
597
- Operational telemetry and product analytics are separate concerns.
598
-
599
- ---
600
-
601
- # 16. TypeScript/JavaScript auditing
602
-
603
- Use **Fallow** as the standard TypeScript/JavaScript codebase auditing tool.
604
-
605
- Fallow complements linting, typechecking, testing, builds, and runtime verification.
606
-
607
- Use it for:
608
-
609
- - unused code
610
- - unused dependencies
611
- - circular dependencies
612
- - duplication
613
- - complexity
614
- - architecture-boundary problems
615
- - dependency issues
616
- - styling/design-system drift
617
-
618
- During development:
619
-
620
- ```
621
- pnpm exec fallow
622
- ```
623
-
624
- For PR/change auditing:
625
-
626
- ```
627
- pnpm exec fallow audit
628
- ```
629
-
630
- Use `fallow audit` in PR checks where applicable to identify problems introduced by the change.
631
-
632
- The deterministic gate should generally include:
633
-
634
- ```
635
- format / lint
636
- ↓
637
- typecheck
638
- ↓
639
- Fallow audit
640
- ↓
641
- tests
642
- ↓
643
- build
644
- ↓
645
- integration checks
646
- ```
647
-
648
- `pnpm check` should run the project's required deterministic gate.
649
-
650
- Fix legitimate findings. Use narrow documented exceptions for intentional behavior rather than broad ignores.
651
-
652
- ---
653
-
654
- # 17. Anhedral developers
655
-
656
- Anhedral development is **agent-driven on macOS**.
657
-
658
- The core environment is:
659
-
660
- ```
661
- macOS
662
- ├── OpenAI / Codex
663
- ├── Computer Use
664
- ├── Control Chrome
665
- ├── terminal + development servers
666
- ├── native apps / simulators
667
- ├── provider plugins
668
- ├── APIs / MCP
669
- └── CLIs
670
- ```
671
-
672
- ## Developer tooling
673
-
674
- |Tool|Primary use|
675
- |---|---|
676
- |**OpenAI / Codex**|Primary coding and reasoning agent: planning, implementation, debugging, review, testing, and operations.|
677
- |**Computer Use**|Dynamic testing, fast iteration, macOS interaction, application testing, setup automation, task automation, debugging, and cross-application workflows.|
678
- |**Control Chrome**|Browser development, rapid UI iteration, authentication flows, integrations, console/network inspection, dashboards, and deployed-app verification.|
679
- |**Cloudflare plugin + `cf` + API/MCP**|Cloudflare provisioning, configuration, deployments, logs, observability, analytics, and operations.|
680
- |**GitHub plugin**|Repositories, branches, worktrees, PRs, issues, checks, reviews, and releases.|
681
- |**Neon integration/API**|PostgreSQL projects, branches, databases, migrations, and operations.|
682
- |**Stripe plugin**|Products, prices, payments, subscriptions, test transactions, and billing operations.|
683
- |**RevenueCat integration**|Products, offerings, subscriptions, and entitlements.|
684
- |**Email integrations**|Application email and supported mailbox/email workflows.|
685
- |**Slack plugin**|Project context, communication, decisions, notifications, and workflows.|
686
- |**[Cloudflare security audit](https://github.com/cloudflare/security-audit-skill)**|Repository security reviews and verified vulnerability findings.|
687
- |**Next.js skills/tools**|Framework conventions, implementation, routing, rendering, debugging, and optimization.|
688
- |**Vercel plugin**|Projects, deployments, environments, logs, and operations when Vercel is selected.|
689
-
690
- ---
691
-
692
- # 18. Accounts and access
693
-
694
- Configure only the services selected by the project.
695
-
696
- - **Cloudflare:** client-owned account, account ID, authorized plugin/OAuth or scoped API token, and a plan supporting the selected services. Add billing or DNS access only when required.
697
- - **Domain and mail:** client-owned GoDaddy domain access, Cloudflare nameservers/DNS access, Email Routing destinations, and Cloudflare Email Sending setup or Resend credentials when selected.
698
- - **Neon / Hyperdrive:** authorized Neon project access, database connection credentials, separate migration/runtime roles, and Hyperdrive origin configuration.
699
- - **Private R2 / Pipelines:** Worker bindings for application storage; authorized sink writes to the selected private bucket. Cloudflare's managed setup requires the Workers Pipelines app's **Pipelines Setup** grant. Keep ingestion private unless an authorized public endpoint is required.
700
- - **Auth and optional providers:** Better Auth secret/URL or Clerk keys; selected AI, email, payments, analytics, and observability credentials, domains, and webhooks.
701
- - **GitHub / CI:** repository access, protected deployment secrets, and environment-specific resource identifiers.
702
-
703
- Keep secrets server-side and out of source control. Obtain approval for paid activation, broader access, and required terms. Configure resource bindings, verify selected integrations in the deployed application, and record remaining setup before production approval.
104
+ Generated `pnpm audit:deps` checks all dependencies and verifies reviewed security backports against patch hashes, installed package hashes and regression checks. Unknown advisories and altered backports fail closed.