@topy-ai/maggie 0.7.37 → 0.7.40

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 (67) hide show
  1. package/README-zh-TW.md +65 -7
  2. package/README.md +80 -11
  3. package/bin/maggie.js +10 -2
  4. package/bundled-contracts/maggie-design/css-utility-evidence-v1.schema.json +10 -0
  5. package/bundled-contracts/maggie-design/dashboard-surface-v1.schema.json +11 -0
  6. package/bundled-contracts/maggie-design/progressive-enhancement-v1.schema.json +12 -0
  7. package/bundled-contracts/maggie-design/sample-surface-v1.schema.json +13 -0
  8. package/bundled-contracts/maggie-seo/privacy-origin-evidence-v1.schema.json +11 -0
  9. package/bundled-contracts/maggiedash/README.md +1 -1
  10. package/bundled-contracts/maggiedash/booking-access-v1.json +5 -4
  11. package/bundled-contracts/maggiedash/booking-customer-surface-v1.json +12 -1
  12. package/bundled-contracts/maggiedash/booking-email-templates-v1.json +2 -0
  13. package/bundled-contracts/maggiedash/booking-host-adapter-v1.json +16 -2
  14. package/bundled-contracts/maggiedash/booking-runtime.v1.json +41 -0
  15. package/bundled-contracts/maggiedash/execution-board.json +529 -28
  16. package/bundled-contracts/maggiedash/host-capabilities-v1.schema.json +10 -0
  17. package/bundled-contracts/maggiedash/site-structure-v1.schema.json +13 -0
  18. package/bundled-references/maggiedash-booking/ARCHITECTURE.md +218 -0
  19. package/bundled-references/maggiedash-booking/CURRENT-STATE.md +92 -0
  20. package/bundled-references/maggiedash-booking/DATA-FLOW.md +143 -0
  21. package/bundled-references/maggiedash-booking/DATA-MODEL.md +367 -0
  22. package/bundled-references/maggiedash-booking/DECISIONS.md +94 -0
  23. package/bundled-references/maggiedash-booking/EXECUTION-BOARD.json +2387 -0
  24. package/bundled-references/maggiedash-booking/HOST-ADAPTER.md +314 -0
  25. package/bundled-references/maggiedash-booking/ORAWELLNESS-INTEGRATION-AUDIT.md +227 -0
  26. package/bundled-references/maggiedash-booking/PAYMENT-GATEWAY.md +267 -0
  27. package/bundled-references/maggiedash-booking/PRD.md +228 -0
  28. package/bundled-references/maggiedash-booking/PROGRESS.md +2434 -0
  29. package/bundled-references/maggiedash-booking/QA-TEST-PLAN.md +235 -0
  30. package/bundled-references/maggiedash-booking/README.md +271 -0
  31. package/bundled-references/maggiedash-booking/RUNTIME-OPERATIONS.md +152 -0
  32. package/bundled-references/maggiedash-booking/SECURITY-COMPLIANCE.md +158 -0
  33. package/bundled-references/maggiedash-booking/SKILLS-AND-CLI.md +542 -0
  34. package/bundled-references/maggiedash-booking/STRIPE-INTEGRATION.md +129 -0
  35. package/bundled-references/maggiedash-booking/TASK-RUNBOOK.md +107 -0
  36. package/bundled-references/maggiedash-booking/TASKS.md +137 -0
  37. package/bundled-references/maggiedash-booking/USER-JOURNEYS.md +224 -0
  38. package/bundled-references/maggiedash-booking/diagrams/booking-dfd.excalidraw +1 -0
  39. package/bundled-references/maggiedash-booking/diagrams/booking-dfd.mmd +16 -0
  40. package/bundled-references/maggiedash-booking/diagrams/booking-dfd.png +0 -0
  41. package/bundled-references/maggiedash-booking/diagrams/booking-dfd.svg +1 -0
  42. package/bundled-references/maggiedash-booking/diagrams/booking-state-machine.mmd +19 -0
  43. package/bundled-references/maggiedash-booking/diagrams/booking-state-machine.png +0 -0
  44. package/bundled-references/maggiedash-booking/diagrams/booking-state-machine.svg +1 -0
  45. package/bundled-references/maggiedash-booking/diagrams/manager-journey.excalidraw +1 -0
  46. package/bundled-references/maggiedash-booking/diagrams/manager-journey.mmd +11 -0
  47. package/bundled-references/maggiedash-booking/diagrams/manager-journey.png +0 -0
  48. package/bundled-references/maggiedash-booking/diagrams/manager-journey.svg +1 -0
  49. package/bundled-references/maggiedash-booking/diagrams/payment-sequence.mmd +20 -0
  50. package/bundled-references/maggiedash-booking/diagrams/payment-sequence.png +0 -0
  51. package/bundled-references/maggiedash-booking/diagrams/payment-sequence.svg +1 -0
  52. package/bundled-references/maggiedash-booking/diagrams/system-context.excalidraw +1 -0
  53. package/bundled-references/maggiedash-booking/diagrams/system-context.mmd +10 -0
  54. package/bundled-references/maggiedash-booking/diagrams/system-context.png +0 -0
  55. package/bundled-references/maggiedash-booking/diagrams/system-context.svg +1 -0
  56. package/bundled-skills/maggie-blog-bootstrap/SKILL.md +16 -0
  57. package/bundled-skills/maggie-booking/SKILL.md +103 -22
  58. package/bundled-skills/maggie-design/SKILL.md +35 -0
  59. package/bundled-skills/maggie-seo-geo/SKILL.md +12 -0
  60. package/bundled-skills/maggie-service-booking/SKILL.md +14 -0
  61. package/bundled-tools/clis/maggie_booking.py +231 -31
  62. package/bundled-tools/clis/maggie_contracts.py +282 -0
  63. package/bundled-tools/clis/maggie_dash.py +28 -6
  64. package/bundled-tools/clis/maggie_design.py +29 -12
  65. package/bundled-tools/clis/maggie_service_booking.py +50 -1
  66. package/bundled-tools/clis/site_audit.py +49 -0
  67. package/package.json +1 -1
package/README-zh-TW.md CHANGED
@@ -2,16 +2,24 @@
2
2
 
3
3
  [English README](README.md) · [完整繁體中文 README](https://github.com/TOPY-AI-LTD/ai-cmo-skills/blob/main/README.zh-TW.md)
4
4
 
5
- `@topy-ai/maggie` 提供 19 個可安裝的 AI website workflow skills,支援
5
+ `@topy-ai/maggie` 提供 20 個可安裝的 AI website workflow skills,支援
6
6
  Codex、Claude Code 與相容的 coding agents。
7
7
 
8
8
  ## 安裝
9
9
 
10
10
  ```bash
11
- npx @topy-ai/maggie@0.7.37 init --agent all
11
+ npx @topy-ai/maggie@0.7.38 init --agent all
12
12
  npx @topy-ai/maggie doctor --project .
13
13
  ```
14
14
 
15
+ 目前 release 是 `0.7.40`,加入 feedback batch 21:progressive enhancement
16
+ 的區域/identity/request 驗證、Tailwind utility 與 CSS cascade evidence、
17
+ dashboard/sample surface contract、primary navigation indexability、privacy
18
+ origin parity、provider-neutral site structure、host capability manifest,
19
+ 以及包含 duration/price variants 的 Booking treatment group。MaggieDash
20
+ 同步更新至 0.2.9,ORA reference host 也提供相同的 capability/site-structure
21
+ 邊界。
22
+
15
23
  常用流程:
16
24
 
17
25
  ```bash
@@ -21,11 +29,26 @@ maggie memory context --project . --skill <skill-name>
21
29
  maggie doctor --project . --require-bootstrap --strict
22
30
  ```
23
31
 
32
+ Feedback batch quality gates:
33
+
34
+ ```bash
35
+ maggie design progressive-check --evidence .maggie/progressive.json
36
+ maggie design dash-validate --plan .maggie/design/dashboard/PLAN.json --evidence .maggie/dashboard.json
37
+ maggie seo privacy-check --evidence .maggie/privacy-origins.json
38
+ maggie dash capabilities-validate --manifest .maggie/host-capabilities.json
39
+ maggie dash structure-validate --model .maggie/site-structure.json --evidence .maggie/site-structure-rendered.json
40
+ maggie service treatment-group-audit --project .
41
+ ```
42
+
43
+ 這些 gate 只接受經過清理的 build/browser evidence,會在第三方 request 重複、
44
+ Tailwind/CSS cascade、dashboard unsupported surface、privacy origin、site
45
+ structure drift 或重複 treatment product 時 fail closed。
46
+
24
47
  主要 skills 包括 clone、design、template、Blog、SEO/GEO、localization、
25
48
  deployment、memory、feedback 和 MaggieDash。內容先 draft/review,外部寫入、
26
49
  publish 與 production deployment 需要明確確認。
27
50
 
28
- 目前 release 是 `0.7.37`,加入可安裝的 `maggie-booking` workflow:MaggieDash Booking host bootstrap、傳統 email/password 團隊登入與 granular permissions、Stripe payment boundary、Resend outbox/template 管理、public customer booking flow、runtime/ops evidence checks,以及完整的 Booking 維護文件。Production activation 仍會 fail-closed,直到 host migration、owner、Stripe、scheduler 和 authenticated runtime evidence 都完成。上一版 `0.7.36` 完成下一批已驗證 feedback:修正 doctor placeholder scope、Tailwind renderable source scope、internal link/fragment audit、unstable baseline classification、site-wide baseline reason、base64url asset hash、installed-file hash update safety,並加入 provider-routed Gemini v2、venue timezone/DST booking parsing、social-card release path、notification lifecycle contract 和 mobile hero video playback contract。provider-bound video generation 與 transactional delivery 已記錄在 issue #39;前一批延後功能仍在 issue #38,不會直接成為 active memory。0.7.33 記錄並審查一筆更正回饋;確認 0.7.32 已正確處理 batch index,沒有修改已驗證的 shared behavior。0.7.32 加入 feedback 一基索引支援、MaggieDash panel 的 source/freshness/error evidence、Consent Mode 與實際 write/no-op reconciliation、SEO baseline recapture、sitemap origin rebasing、content-diff scope、migration ledger reconciliation、deployment credential preflight、release provenance/runtime preflight、icon release gate、opt-in blog auto-publish gate,以及 least-privilege VPS deployer。也修復 top-level `maggie feedback` dispatcher parity。0.7.31 加入 update 差異摘要、atomic installer copy、subset install manifest merge,以及 inventory drift 時 doctor non-zero。0.7.30 補上 feedback tracking issue closeout gate 與 batch 14/15 audit ledger。0.7.29 修正 npm package landing page 使用英文 README;0.7.28 加入 versioned Gemini model policy、明確 fallback 與 provenance、bundled-first CLI
51
+ 目前 source tree 的 release candidate 是 `0.7.39`,npm registry 仍是 `0.7.38`;候選版本加入可安裝的 `maggie-booking` workflow:MaggieDash Booking host bootstrap、傳統 email/password 團隊登入與 granular permissions、Stripe payment boundary、Resend outbox/template 管理、public customer booking flow、runtime/ops evidence checks,以及完整的 Booking 維護文件。全新的 Astro host 會自動補上可攜的 Node SSR adapter;已有 Cloudflare、Vercel、Netlify 或 Deno adapter 的專案會保留原本的部署選擇。Production activation 仍會 fail-closed,直到 host migration、owner、Stripe、scheduler 和 authenticated runtime evidence 都完成。上一版 `0.7.36` 完成下一批已驗證 feedback:修正 doctor placeholder scope、Tailwind renderable source scope、internal link/fragment audit、unstable baseline classification、site-wide baseline reason、base64url asset hash、installed-file hash update safety,並加入 provider-routed Gemini v2、venue timezone/DST booking parsing、social-card release path、notification lifecycle contract 和 mobile hero video playback contract。provider-bound video generation 與 transactional delivery 已記錄在 issue #39;前一批延後功能仍在 issue #38,不會直接成為 active memory。0.7.33 記錄並審查一筆更正回饋;確認 0.7.32 已正確處理 batch index,沒有修改已驗證的 shared behavior。0.7.32 加入 feedback 一基索引支援、MaggieDash panel 的 source/freshness/error evidence、Consent Mode 與實際 write/no-op reconciliation、SEO baseline recapture、sitemap origin rebasing、content-diff scope、migration ledger reconciliation、deployment credential preflight、release provenance/runtime preflight、icon release gate、opt-in blog auto-publish gate,以及 least-privilege VPS deployer。也修復 top-level `maggie feedback` dispatcher parity。0.7.31 加入 update 差異摘要、atomic installer copy、subset install manifest merge,以及 inventory drift 時 doctor non-zero。0.7.30 補上 feedback tracking issue closeout gate 與 batch 14/15 audit ledger。0.7.29 修正 npm package landing page 使用英文 README;0.7.28 加入 versioned Gemini model policy、明確 fallback 與 provenance、bundled-first CLI
29
52
  dispatch、`maggie --version`、feedback batch review 聚合與重複偵測、marketplace enrichment evidence、booking
30
53
  worker/resolver evidence,以及 read-only migration preflight。它也包含 host-owned mobile app surface contract、signed-in
31
54
  camera-state QA、直接 Astro route resolution、correlated feedback batch,以及
@@ -63,15 +86,41 @@ delivery outbox:可查看去識別化的狀態與 sanitized error;owner/mana
63
86
  這是 Maggie 的 server-side delivery queue 與 audit 管理,不取代 Resend 自己的
64
87
  domain、audience、campaign 或 analytics console。
65
88
 
89
+ Booking manager 也已提供 tenant-scoped 的 prepaid treatment package catalogue,
90
+ 以及客戶 package entitlement 的手動授予、餘額查詢和預約時的原子核銷:可設定
91
+ 包含的 treatment variant 數量、價格、幣別、有效期與啟用狀態。公開客戶流程
92
+ 也支援 package checkout、token-bound payment return;manager 可以查看購買紀錄
93
+ 並提出受 redemption 保護的 Stripe package refund。Stripe 確認購買或退款後,
94
+ 會透過共用 outbox/worker 發送去識別化且具 idempotency 的 Resend 通知。
95
+
66
96
  在全新的 Astro 專案中,可以讓安裝流程補上缺少的 Booking runtime 套件:
67
97
 
68
98
  ```bash
69
99
  maggie booking install --project . --confirm --install-dependencies
100
+
101
+ # 已審核的新主機:安裝缺少的套件並套用 Booking schema
102
+ maggie booking install --project . --confirm --ready
70
103
  ```
71
104
 
72
105
  這個選項會依照專案現有的 npm/pnpm/yarn/bun lockfile,只安裝缺少的
73
- React、Phosphor、Tailwind、PostgreSQL 和 Stripe 套件,保留已存在的版本,
74
- 並更新相對應的 lockfile;它不能和 `--dry-run` 或 `--diff` 一起使用。
106
+ React、Phosphor、Tailwind、PostgreSQL、Stripe 和 SSR adapter 套件,保留已存在的
107
+ 版本,並更新相對應的 lockfile。空白 Astro 專案會補上可攜的
108
+ `@astrojs/node` 與 `astro.config.mjs`;已有 `astro.config.*` 或
109
+ Cloudflare/Vercel/Netlify/Deno adapter 的專案會保留原本的部署選擇。
110
+ 它不能和 `--dry-run` 或 `--diff` 一起使用。
111
+
112
+ 如果 host 需要自動處理 Resend outbox、reminder 和 payment reconciliation,
113
+ 可以同時產生 scheduler artifact:
114
+
115
+ ```bash
116
+ maggie booking install --project . --confirm --bootstrap --schedule systemd
117
+ # 沒有 systemd 的 host:
118
+ maggie booking worker-schedule --project . --scheduler cron --confirm
119
+ ```
120
+
121
+ 這只會在 `deploy/` 寫入可審查的 service/timer 或 cron 文件,不會修改
122
+ crontab、啟用 systemd、啟動 worker,也不會輸出 secret。啟用前仍要由 host
123
+ 管理員審查 service user,並完成 migration、backup/restore 及 release evidence。
75
124
 
76
125
  Booking 的 browser evidence gate 現在涵蓋全部 15 個 manager routes,在 mobile、
77
126
  tablet、desktop 三種 viewport 共需要 45 個 screens,包含 waitlist、locations、
@@ -95,11 +144,20 @@ Booking Team access 支援透過 Resend 發送傳統 email/password 邀請、`ma
95
144
  maggie booking email-templates-contract
96
145
  ```
97
146
 
98
- Booking 內置七種 Resend 事件模板。Owner、administrator 和 Booking manager
147
+ Booking 內置十種 Resend 事件模板,包含 package purchase confirmation/refund
148
+ 與成功 no-show fee charge 通知。No-show 狀態轉換不會自動扣款;只有在
149
+ 客戶同意、已有保存的 Stripe payment method、provider off-session capability
150
+ 已驗證,且 owner/manager/finance 明確確認後,才會建立 idempotent adjustment
151
+ charge。
152
+ Owner、administrator 和 Booking manager
99
153
  可以編輯 draft、用 sandbox sample data 預覽、發佈 audited version,或 rollback
100
154
  舊版本。每個事件只接受核准的 placeholder,worker 發送前會 escape value;
101
155
  provider credentials 和 recipient address 只留在 server/worker,不會返回瀏覽器。
102
156
 
157
+ Owner 設定 Stripe secrets 後,Booking Overview 會提供 server-side 的
158
+ 「Verify Stripe connection」操作:檢查帳號與 webhook 設定,只保存不含 secrets
159
+ 的 capability 狀態,並寫入 audited、可安全重試的結果;Stripe keys 不會進入瀏覽器。
160
+
103
161
  新版 release gates:
104
162
 
105
163
  ```bash
@@ -142,6 +200,6 @@ maggie service retirement-audit --project . \
142
200
  --evidence .maggie/booking/retirement-evidence.json
143
201
  ```
144
202
 
145
- 完整中文說明、19 個 skills 清單和 roadmap:
203
+ 完整中文說明、20 個 skills 清單和 roadmap:
146
204
  [繁體中文 README](https://github.com/TOPY-AI-LTD/ai-cmo-skills/blob/main/README.zh-TW.md)
147
205
  · [Roadmap](https://github.com/TOPY-AI-LTD/ai-cmo-skills/blob/main/ROADMAP.md)
package/README.md CHANGED
@@ -58,15 +58,41 @@ Then invoke the installed skills from your coding agent, for example:
58
58
 
59
59
  Maggie keeps the existing project foundation and asks for decisions before
60
60
  shared routes, analytics, or publishing boundaries change. The current
61
- package ships 19 installable skills and a local-first MaggieDash foundation.
62
-
63
- The current release is `0.7.37`. It adds the installable `maggie-booking`
61
+ package ships 20 installable skills and a local-first MaggieDash foundation.
62
+
63
+ The current release is `0.7.40`. It adds feedback batch 21 contracts for
64
+ progressive-enhancement identity/request safety, rendered Tailwind utility and
65
+ CSS-cascade checks, dashboard/sample surface evidence, primary-navigation
66
+ indexability, privacy-origin parity, provider-neutral site structure, host
67
+ capability manifests, and Booking treatment groups with duration/price
68
+ variants. It also includes MaggieDash 0.2.9 host-contract updates.
69
+
70
+ The previous `0.7.39` release candidate added adapter-aware fresh Astro Booking
71
+ installation: blank hosts receive a portable Node SSR config while existing
72
+ deployment adapters remain host-owned. It also adds the installable `maggie-booking`
64
73
  workflow for MaggieDash Booking: host bootstrap, traditional email/password
65
74
  team access with granular permissions, Stripe payment boundaries, Resend
66
75
  outbox and tenant email-template management, public customer booking flow,
67
76
  runtime/ops evidence checks, and the maintained Booking implementation docs.
77
+ The manager workspace also includes a tenant-scoped prepaid treatment package
78
+ catalogue with included variant quantities, package pricing, optional expiry,
79
+ and active/inactive state. Managers can also grant tenant-scoped customer
80
+ entitlements, inspect remaining balances, and redeem matching visits
81
+ transactionally when creating a manager booking. Public customers can also
82
+ start package checkout, return through a token-bound payment page, and the
83
+ manager can list and request guarded Stripe package refunds. Verified package
84
+ success/refund transitions also enqueue idempotent Resend confirmation/refund
85
+ emails through the shared delivery worker.
86
+ The Booking flow also supports an explicit, consented Stripe off-session
87
+ no-show fee action after a booking is marked `no_show`; it requires a saved
88
+ payment method, verified provider capability, idempotent adjustment state, and
89
+ queues the customer email through the Resend outbox only after a successful
90
+ charge. A status transition never charges automatically.
68
91
  Production activation remains fail-closed until the host migration, owner,
69
- Stripe, scheduler, and authenticated runtime evidence are supplied.
92
+ Stripe, scheduler, and authenticated runtime evidence are supplied. The
93
+ release candidate also regenerates the published Booking contracts and adds
94
+ an exact npm-tarball smoke test so the registry package cannot silently fall
95
+ behind the source CLI.
70
96
 
71
97
  The previous `0.7.36` release closed the next validated feedback batch:
72
98
  production demo fixtures are development-only, Dash infers the persisted
@@ -525,8 +551,8 @@ artifact schemas.
525
551
  Recommended upgrade sequence for the current release:
526
552
 
527
553
  ```bash
528
- npx @topy-ai/maggie@0.7.37 update --project . --force
529
- npx @topy-ai/maggie@0.7.37 cleanup --project .
554
+ npx @topy-ai/maggie@0.7.39 update --project . --force
555
+ npx @topy-ai/maggie@0.7.39 cleanup --project .
530
556
  ```
531
557
 
532
558
  Maintainers should pass npm credentials through the repository helper, never
@@ -635,14 +661,21 @@ maggie booking install --project . --confirm
635
661
 
636
662
  For a fresh Astro host, let the explicit install also add only the missing
637
663
  Booking runtime packages through the host's existing npm/pnpm/yarn/bun
638
- package manager:
664
+ package manager. This includes the server-rendering adapter when the project
665
+ has no existing Astro deployment adapter:
639
666
 
640
667
  ```bash
641
668
  maggie booking install --project . --confirm --install-dependencies
669
+
670
+ # Reviewed new host: install missing packages and apply the Booking schema
671
+ maggie booking install --project . --confirm --ready
642
672
  ```
643
673
 
644
- Existing dependency versions are preserved. This option updates the matching
645
- lockfile and is intentionally incompatible with `--dry-run` and `--diff`.
674
+ Existing dependency versions are preserved. A blank Astro project receives a
675
+ portable `@astrojs/node` adapter and `astro.config.mjs`; an existing
676
+ `astro.config.*` and Cloudflare/Vercel/Netlify/Deno adapter remain untouched.
677
+ This option updates the matching lockfile and is intentionally incompatible
678
+ with `--dry-run` and `--diff`.
646
679
 
647
680
  For a reviewed new host, `--bootstrap` also applies the installed idempotent
648
681
  Booking schema using the host's existing `DATABASE_URL`:
@@ -657,6 +690,20 @@ one in the local `.env` without printing it. Existing secrets are preserved;
657
690
  short configured values fail closed. External secret stores must provision the
658
691
  key themselves.
659
692
 
693
+ Generate the worker schedule artifact during install when the host is ready to
694
+ review its Resend outbox, reminders, and payment reconciliation cadence:
695
+
696
+ ```bash
697
+ maggie booking install --project . --confirm --bootstrap --schedule systemd
698
+ # or:
699
+ maggie booking worker-schedule --project . --scheduler cron --confirm
700
+ ```
701
+
702
+ The command writes reviewable files under `deploy/` only. It does not edit a
703
+ crontab, enable systemd, start a worker, or print secrets. Review the generated
704
+ unit, set an unprivileged service user, and enable it only after the migration,
705
+ backup/restore, and host evidence gates pass.
706
+
660
707
  Run the read-only onboarding checklist after installation:
661
708
 
662
709
  ```bash
@@ -683,7 +730,7 @@ Validate the tenant-scoped Booking email-template contract independently:
683
730
  maggie booking email-templates-contract
684
731
  ```
685
732
 
686
- The Booking workspace includes seven Resend event templates. Owner,
733
+ The Booking workspace includes ten Resend event templates. Owner,
687
734
  administrator, and Booking managers can edit drafts, preview sandboxed sample
688
735
  data, publish audited versions, and roll back earlier versions. Event-specific
689
736
  placeholders are allowlisted and escaped before the host worker sends through
@@ -698,6 +745,11 @@ reports required environment-key presence and the explicit schema,
698
745
  owner-registration, Stripe webhook, and Resend-worker steps without printing
699
746
  secret values or mutating the host.
700
747
 
748
+ After the owner adds the Stripe secrets, the Booking Overview includes a
749
+ server-side “Verify Stripe connection” action. It checks the account and
750
+ webhook configuration, stores only non-secret capability status, and records
751
+ an audited idempotent result; Stripe keys never enter the browser.
752
+
701
753
  Booking also includes a tenant-scoped Notifications screen for the Resend
702
754
  delivery outbox. It shows redacted delivery state and sanitized errors through
703
755
  `GET /api/maggie/booking/notifications.json`; an owner or manager can replay a
@@ -996,7 +1048,7 @@ repairs with `maggie dash sections validate`, `fanout-validate`,
996
1048
  `maggie dash inventory` to classify published pages once into disjoint kinds.
997
1049
  See the [quality contract examples](https://github.com/TOPY-AI-LTD/ai-cmo-skills/blob/main/contracts/maggiedash/quality-contracts.md).
998
1050
 
999
- The package includes all 19 installable skills: `maggie-blog-bootstrap`,
1051
+ The package includes all 20 installable skills: `maggie-blog-bootstrap`,
1000
1052
  `maggie-dash`, `maggie-clone`, `maggie-clone-to-template`, `maggie-marketplace`,
1001
1053
  `maggie-template`, `maggie-design`, `maggie-ops`, `maggie-deployment`,
1002
1054
  `maggie-project-context`, `maggie-seo-geo`, `maggie-social-share`,
@@ -1054,6 +1106,23 @@ maggie list
1054
1106
  maggie --help
1055
1107
  ```
1056
1108
 
1109
+ Feedback batch quality gates:
1110
+
1111
+ ```bash
1112
+ maggie design progressive-check --evidence .maggie/progressive.json
1113
+ maggie design dash-validate --plan .maggie/design/dashboard/PLAN.json --evidence .maggie/dashboard.json
1114
+ maggie design sample-validate --plan .maggie/design/sample/PLAN.json --evidence .maggie/sample.json
1115
+ maggie seo privacy-check --evidence .maggie/privacy-origins.json
1116
+ maggie dash capabilities-validate --manifest .maggie/host-capabilities.json
1117
+ maggie dash structure-validate --model .maggie/site-structure.json --evidence .maggie/site-structure-rendered.json
1118
+ maggie service treatment-group-audit --project .
1119
+ ```
1120
+
1121
+ These checks consume sanitized build/browser evidence and fail closed on
1122
+ third-party request churn, stale utility CSS, unsupported dashboard panels,
1123
+ privacy-policy origin drift, site-structure drift, or duplicated treatment
1124
+ products.
1125
+
1057
1126
  ## Safety model
1058
1127
 
1059
1128
  - Clone only sites the user owns or is authorized to reproduce.
package/bin/maggie.js CHANGED
@@ -58,7 +58,7 @@ Usage:
58
58
  maggie doctor [--project PATH]
59
59
  maggie bootstrap interview [project]
60
60
  maggie dash init|install|status|migrate|transition|variant|cms --project PATH [options]
61
- maggie booking install|inspect|setup|contract|runtime-validate|ops-validate|release-gate|stripe-audit|tasks --project PATH [options]
61
+ maggie booking install|worker-schedule|inspect|setup|contract|runtime-validate|ops-validate|release-gate|stripe-audit|tasks --project PATH [options]
62
62
  maggie dash sections <validate|prompt|keys|remap-translations|fanout-validate|locale-validate|variant-copy-validate|media-validate|bindings-validate|idempotency-validate|reconcile> [options]
63
63
  maggie dash inventory --pages-file FILE [--require-page-kinds] [--require-source-coverage]
64
64
  maggie dash api-contract --spec FILE
@@ -68,6 +68,11 @@ Usage:
68
68
  maggie dash components-audit --bindings-file FILE --sections-file FILE --pages-file FILE
69
69
  maggie dash status --project PATH
70
70
  maggie dash migrate --project PATH --confirm
71
+ maggie dash capabilities-validate --manifest FILE
72
+ maggie dash structure-validate --model FILE --evidence FILE
73
+ maggie design progressive-check|css-check|css-cascade-check --evidence FILE
74
+ maggie design dash-init|dash-validate|sample-init|sample-validate [options]
75
+ maggie seo privacy-check --evidence FILE
71
76
  maggie content FILE --source PROVIDER --project PATH --confirm
72
77
  maggie agent-content write --url URL --allowed-origin ORIGIN --token-env ENV --payload FILE
73
78
  maggie bootstrap phase <start|pass|fail|status> <phase> [project]
@@ -469,7 +474,8 @@ function docs(args) {
469
474
  function seo(args) {
470
475
  const command = args[0];
471
476
  const scripts = { performance: "maggie_performance.py", images: "maggie_images.py", sitemap: "maggie_sitemap.py", indexnow: "maggie_indexnow.py", "social-cards": "maggie_social_cards.py", "head-tags": "maggie_head_tags.py" };
472
- if (!scripts[command]) throw new Error("seo command must be performance, images, sitemap, indexnow, social-cards, or head-tags");
477
+ if (command === "privacy-check") return workflowCli("maggie_contracts.py", ["privacy-check", ...args.slice(1)]);
478
+ if (!scripts[command]) throw new Error("seo command must be performance, images, sitemap, indexnow, social-cards, head-tags, or privacy-check");
473
479
  workflowCli(scripts[command], args.slice(1));
474
480
  }
475
481
 
@@ -564,6 +570,7 @@ try {
564
570
  else if (command === "clone-to-template") workflowCli("maggie_clone_to_template.py", args);
565
571
  else if (command === "design" && args[0] === "icon-inventory") workflowCli("maggie_icon_inventory.py", args.slice(1));
566
572
  else if (command === "design" && args[0] === "icon-release-gate") workflowCli("maggie_icon_release_gate.py", args.slice(1));
573
+ else if (command === "design" && ["progressive-check", "css-check", "css-cascade-check", "dash-init", "dash-validate", "sample-init", "sample-validate"].includes(args[0])) workflowCli("maggie_contracts.py", args);
567
574
  else if (command === "design") workflowCli("maggie_design.py", args);
568
575
  else if (command === "auth") workflowCli("maggie_auth.py", args);
569
576
  else if (command === "blog") workflowCli("maggie_blog.py", args);
@@ -590,6 +597,7 @@ try {
590
597
  else if (command === "site-audit") workflowCli("site_audit.py", args);
591
598
  else if (command === "browser-audit") workflowCli("maggie_browser_audit.py", args);
592
599
  else if (command === "verification") workflowCli("maggie_verification.py", args);
600
+ else if (command === "dash" && ["capabilities-validate", "structure-validate"].includes(args[0])) workflowCli("maggie_contracts.py", args);
593
601
  else if (command === "dash") workflowCli("maggie_dash.py", args);
594
602
  else if (command === "booking") workflowCli("maggie_booking.py", args);
595
603
  else if (command === "agent-content") workflowCli("maggie_agent_content.py", args);
@@ -0,0 +1,10 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "Maggie rendered CSS utility evidence",
4
+ "type": "object",
5
+ "required": ["schemaVersion", "elements"],
6
+ "properties": {
7
+ "schemaVersion": {"const": "maggie-css-utility-evidence.v1"},
8
+ "elements": {"type": "array"}
9
+ }
10
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "Maggie operator dashboard surface",
4
+ "type": "object",
5
+ "required": ["schemaVersion", "route", "requiredEvidence"],
6
+ "properties": {
7
+ "schemaVersion": {"const": "maggie-dashboard-surface.v1"},
8
+ "route": {"type": "string"},
9
+ "requiredEvidence": {"type": "array", "minItems": 6}
10
+ }
11
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "Maggie progressive enhancement evidence",
4
+ "type": "object",
5
+ "required": ["schemaVersion", "region", "initial", "states"],
6
+ "properties": {
7
+ "schemaVersion": {"const": "maggie-progressive-enhancement.v1"},
8
+ "region": {"type": "object", "required": ["id", "selector", "swapScope"]},
9
+ "initial": {"type": "object", "required": ["thirdPartyRequests", "identities"]},
10
+ "states": {"type": "array", "minItems": 1}
11
+ }
12
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "Maggie layout sample surface",
4
+ "type": "object",
5
+ "required": ["schemaVersion", "route", "noindex", "sitemapIncluded", "finishChecklist"],
6
+ "properties": {
7
+ "schemaVersion": {"const": "maggie-sample-surface.v1"},
8
+ "route": {"type": "string"},
9
+ "noindex": {"const": true},
10
+ "sitemapIncluded": {"const": false},
11
+ "finishChecklist": {"type": "array", "minItems": 1}
12
+ }
13
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "Maggie third-party privacy origin evidence",
4
+ "type": "object",
5
+ "required": ["schemaVersion", "pages", "policyOrigins"],
6
+ "properties": {
7
+ "schemaVersion": {"const": "maggie-privacy-origin-evidence.v1"},
8
+ "pages": {"type": "array"},
9
+ "policyOrigins": {"type": "array"}
10
+ }
11
+ }
@@ -53,7 +53,7 @@ import.
53
53
  items with stable ordering, nesting, and safe destinations;
54
54
  - [`dashboard-runtime-v1.json`](dashboard-runtime-v1.json) defines evidence
55
55
  that an admin screen mounted, ran its checks, and completed its data calls.
56
- - MaggieDash 0.2.6 also ships a screen-level host adapter contract and
56
+ - MaggieDash 0.2.7 also ships a screen-level host adapter contract and
57
57
  provider-neutral install starters in the first-party distribution. The
58
58
  `host-adapter-v2` contract lists endpoint methods, public routes, response
59
59
  content types, and required fields; `maggie dash conformance` validates
@@ -8,10 +8,11 @@
8
8
  "roles": ["manager", "staff", "finance"],
9
9
  "permissions": [
10
10
  "calendar.read", "bookings.read", "bookings.manage", "customers.read",
11
- "catalog.read", "catalog.manage", "staff.read", "staff.manage",
12
- "resources.read", "resources.manage", "schedule.read", "schedule.manage",
13
- "payments.read", "payments.manage", "refunds.manage", "settings.read",
14
- "settings.manage", "reports.read", "audit.read"
11
+ "waitlist.read", "waitlist.manage",
12
+ "catalog.read", "catalog.manage", "packages.read", "packages.manage", "staff.read", "staff.manage",
13
+ "resources.read", "resources.manage", "schedule.read", "schedule.manage", "locations.read", "locations.manage",
14
+ "payments.read", "payments.manage", "refunds.manage", "notifications.read", "notifications.manage",
15
+ "settings.read", "settings.manage", "reports.read", "audit.read"
15
16
  ],
16
17
  "endpointIds": ["booking.access.read", "booking.access.create", "booking.access.update", "booking.access.revoke"],
17
18
  "canonicalRoutes": {
@@ -10,6 +10,8 @@
10
10
  "hostResponsibilities": ["tenant-binding", "origin-and-csrf", "rate-limit", "bot-protection", "opaque-payment-return-token", "sealed-customer-manage-token", "provider-and-notification-adapters"],
11
11
  "endpointIds": [
12
12
  "booking.public.catalog.read",
13
+ "booking.public.package-checkout.start",
14
+ "booking.public.package-payment-return.read",
13
15
  "booking.public.availability.read",
14
16
  "booking.public.waitlist.join",
15
17
  "booking.public.hold.create",
@@ -21,7 +23,9 @@
21
23
  ],
22
24
  "canonicalRoutes": {
23
25
  "booking.public.catalog.read": "GET /catalog.json",
24
- "booking.public.availability.read": "GET /availability.json?serviceVariantId={serviceVariantId}&date={date}",
26
+ "booking.public.package-checkout.start": "POST /package-checkout.json",
27
+ "booking.public.package-payment-return.read": "GET /package-payment-return.json?token={token}",
28
+ "booking.public.availability.read": "GET /availability.json?serviceVariantId={serviceVariantId}&locationId={locationId}&date={date}",
25
29
  "booking.public.waitlist.join": "POST /waitlist.json",
26
30
  "booking.public.hold.create": "POST /holds.json",
27
31
  "booking.public.checkout.start": "POST /checkout.json",
@@ -42,5 +46,12 @@
42
46
  "paymentReturn": "short-lived",
43
47
  "customerManage": "30-day-sealed",
44
48
  "rawTokenStorage": false
49
+ },
50
+ "packageRedemption": {
51
+ "holdField": "packageEntitlementId",
52
+ "checkoutField": "packageEntitlementId",
53
+ "binding": "tenant-and-customer-email",
54
+ "fullyCoveredOnly": true,
55
+ "transaction": "lock-entitlement-and-items-create-booking-write-ledger"
45
56
  }
46
57
  }
@@ -17,6 +17,8 @@
17
17
  { "id": "booking.reminder", "variables": ["customerName", "serviceName", "when", "locationName", "bookingId", "manageUrl", "siteName"] },
18
18
  { "id": "payment.action_required", "variables": ["customerName", "serviceName", "bookingId", "actionUrl", "siteName"] },
19
19
  { "id": "payment.refunded", "variables": ["customerName", "serviceName", "bookingId", "siteName"] },
20
+ { "id": "package.purchase.confirmed", "variables": ["customerName", "packageName", "amount", "expiresAt", "siteName"] },
21
+ { "id": "package.purchase.refunded", "variables": ["customerName", "packageName", "amount", "siteName"] },
20
22
  { "id": "booking.waitlist.available", "variables": ["customerName", "serviceName", "when", "locationName", "bookingUrl", "siteName"] }
21
23
  ],
22
24
  "endpointIds": ["booking.email-templates.read", "booking.email-templates.draft", "booking.email-templates.publish", "booking.email-templates.rollback"],
@@ -5,16 +5,20 @@
5
5
  "schemaVersion": "maggiedash-booking-host-adapter.v1",
6
6
  "apiPrefix": "/api/maggie/booking",
7
7
  "auth": { "managerSession": "host-session-cookie", "emailPassword": true, "passkeys": false },
8
- "requiredCapabilities": ["bookingOverview", "bookingCalendar", "bookingLifecycle", "customerLookup", "bookingWaitlist", "serviceCatalog", "locationSetup", "staffSetup", "resourceSetup", "paymentReconciliation", "bookingReports", "bookingSettings", "bookingAudit", "notificationOperations", "bookingAccess"],
8
+ "requiredCapabilities": ["bookingOverview", "bookingCalendar", "bookingLifecycle", "customerLookup", "bookingWaitlist", "serviceCatalog", "treatmentPackages", "packagePurchasePayments", "locationSetup", "staffSetup", "resourceSetup", "paymentReconciliation", "bookingReports", "bookingSettings", "bookingAudit", "notificationOperations", "bookingAccess"],
9
9
  "endpointIds": [
10
- "booking.overview.read", "booking.reports.read", "booking.calendar.read", "booking.bookings.read", "booking.booking.read", "booking.booking.create", "booking.booking.transition", "booking.booking.reschedule", "booking.availability.read", "booking.holds.create", "booking.holds.release", "booking.customers.read", "booking.customer.read", "booking.waitlist.read", "booking.waitlist.update", "booking.catalog.read", "booking.catalog.write", "booking.locations.read", "booking.location.write", "booking.staff.read", "booking.staff.write", "booking.resources.read", "booking.resources.write", "booking.schedule.read", "booking.schedule.write", "booking.payments.read", "booking.payment.start", "booking.payment.reconcile", "booking.refund.start", "booking.notifications.read", "booking.notification.replay", "booking.health.read", "booking.payment-health.read", "booking.settings.read", "booking.settings.update", "booking.audit.read", "booking.events.read", "booking.runtime.read", "booking.provider.webhook"
10
+ "booking.overview.read", "booking.reports.read", "booking.calendar.read", "booking.bookings.read", "booking.booking.read", "booking.booking.create", "booking.booking.transition", "booking.booking.no-show-fee", "booking.booking.reschedule", "booking.availability.read", "booking.holds.create", "booking.holds.release", "booking.customers.read", "booking.customer.read", "booking.waitlist.read", "booking.waitlist.update", "booking.catalog.read", "booking.catalog.write", "booking.packages.read", "booking.package.write", "booking.customer-packages.read", "booking.customer-package.grant", "booking.package-purchases.read", "booking.package-purchase.refund", "booking.locations.read", "booking.location.write", "booking.staff.read", "booking.staff.write", "booking.resources.read", "booking.resources.write", "booking.schedule.read", "booking.schedule.write", "booking.payments.read", "booking.payment.start", "booking.payment.reconcile", "booking.refund.start", "booking.notifications.read", "booking.notification.replay", "booking.health.read", "booking.payment-health.read", "booking.payment-health.verify", "booking.settings.read", "booking.settings.update", "booking.audit.read", "booking.events.read", "booking.runtime.read", "booking.provider.webhook"
11
11
  ],
12
12
  "canonicalRoutes": {
13
+ "booking.booking.no-show-fee": "POST /bookings/{id}/no-show-fee.json",
14
+ "booking.package-purchases.read": "GET /package-purchases.json?customerId={customerId}&status={status}",
15
+ "booking.package-purchase.refund": "POST /package-purchases/{purchaseId}/refund.json",
13
16
  "booking.payment.start": "POST /payments/start.json",
14
17
  "booking.refund.start": "POST /refunds.json",
15
18
  "booking.notifications.read": "GET /notifications.json?status={status}",
16
19
  "booking.notification.replay": "POST /notifications/{id}/replay.json",
17
20
  "booking.payment-health.read": "GET /payment-health.json",
21
+ "booking.payment-health.verify": "POST /payment-health.json",
18
22
  "booking.provider.webhook": "POST /webhooks/{provider}"
19
23
  },
20
24
  "serviceMethods": {
@@ -25,6 +29,7 @@
25
29
  "booking.booking.read": "readBooking",
26
30
  "booking.booking.create": "createBooking",
27
31
  "booking.booking.transition": "transitionBooking",
32
+ "booking.booking.no-show-fee": "chargeNoShowFee",
28
33
  "booking.booking.reschedule": "rescheduleBooking",
29
34
  "booking.availability.read": "readAvailability",
30
35
  "booking.holds.create": "createHold",
@@ -35,6 +40,12 @@
35
40
  "booking.waitlist.update": "updateWaitlist",
36
41
  "booking.catalog.read": "readCatalog",
37
42
  "booking.catalog.write": "updateCatalog",
43
+ "booking.packages.read": "listPackages",
44
+ "booking.package.write": "updatePackage",
45
+ "booking.customer-packages.read": "listCustomerPackages",
46
+ "booking.customer-package.grant": "grantCustomerPackage",
47
+ "booking.package-purchases.read": "listPackagePurchases",
48
+ "booking.package-purchase.refund": "startPackageRefund",
38
49
  "booking.locations.read": "listLocations",
39
50
  "booking.location.write": "updateLocation",
40
51
  "booking.staff.read": "listStaff",
@@ -51,6 +62,7 @@
51
62
  "booking.notification.replay": "replayNotification",
52
63
  "booking.health.read": "readHealth",
53
64
  "booking.payment-health.read": "readPaymentHealth",
65
+ "booking.payment-health.verify": "verifyPaymentConnection",
54
66
  "booking.settings.read": "readSettings",
55
67
  "booking.settings.update": "updateSettings",
56
68
  "booking.audit.read": "listAudit",
@@ -63,7 +75,9 @@
63
75
  "readPublicAvailability",
64
76
  "createCustomerHold",
65
77
  "startCustomerCheckout",
78
+ "startCustomerPackageCheckout",
66
79
  "readCustomerPaymentReturn",
80
+ "readCustomerPackagePaymentReturn",
67
81
  "readCustomerManage",
68
82
  "cancelCustomerBooking",
69
83
  "rescheduleCustomerBooking",
@@ -0,0 +1,41 @@
1
+ {
2
+ "schemaVersion": "maggiedash-booking-runtime.v1",
3
+ "generatedAt": "2026-09-20T00:00:00Z",
4
+ "environment": "fixture",
5
+ "baseUrl": "https://booking.fixture.invalid",
6
+ "tenant": "dedicated-fixture-tenant",
7
+ "endpoints": [
8
+ { "id": "booking.overview.read", "method": "GET", "route": "/api/maggie/booking/overview.json", "status": 200, "requiredFieldsPresent": true },
9
+ { "id": "booking.calendar.read", "method": "GET", "route": "/api/maggie/booking/calendar.json?date={date}&view={view}", "status": 200, "requiredFieldsPresent": true },
10
+ { "id": "booking.bookings.read", "method": "GET", "route": "/api/maggie/booking/bookings.json", "status": 200, "requiredFieldsPresent": true },
11
+ { "id": "booking.booking.read", "method": "GET", "route": "/api/maggie/booking/bookings/{id}.json", "status": 200, "requiredFieldsPresent": true },
12
+ { "id": "booking.booking.create", "method": "POST", "route": "/api/maggie/booking/bookings.json", "status": 200, "requiredFieldsPresent": true },
13
+ { "id": "booking.booking.transition", "method": "POST", "route": "/api/maggie/booking/bookings/{id}/transition.json", "status": 200, "requiredFieldsPresent": true },
14
+ { "id": "booking.booking.reschedule", "method": "POST", "route": "/api/maggie/booking/bookings/{id}/reschedule.json", "status": 200, "requiredFieldsPresent": true },
15
+ { "id": "booking.availability.read", "method": "GET", "route": "/api/maggie/booking/availability.json", "status": 200, "requiredFieldsPresent": true },
16
+ { "id": "booking.holds.create", "method": "POST", "route": "/api/maggie/booking/holds.json", "status": 200, "requiredFieldsPresent": true },
17
+ { "id": "booking.holds.release", "method": "POST", "route": "/api/maggie/booking/holds/{id}/release.json", "status": 200, "requiredFieldsPresent": true },
18
+ { "id": "booking.customers.read", "method": "GET", "route": "/api/maggie/booking/customers.json", "status": 200, "requiredFieldsPresent": true },
19
+ { "id": "booking.customer.read", "method": "GET", "route": "/api/maggie/booking/customers/{id}.json", "status": 200, "requiredFieldsPresent": true },
20
+ { "id": "booking.catalog.read", "method": "GET", "route": "/api/maggie/booking/catalog.json", "status": 200, "requiredFieldsPresent": true },
21
+ { "id": "booking.catalog.write", "method": "POST", "route": "/api/maggie/booking/catalog.json", "status": 200, "requiredFieldsPresent": true },
22
+ { "id": "booking.staff.read", "method": "GET", "route": "/api/maggie/booking/staff.json", "status": 200, "requiredFieldsPresent": true },
23
+ { "id": "booking.staff.write", "method": "POST", "route": "/api/maggie/booking/staff.json", "status": 200, "requiredFieldsPresent": true },
24
+ { "id": "booking.resources.read", "method": "GET", "route": "/api/maggie/booking/resources.json", "status": 200, "requiredFieldsPresent": true },
25
+ { "id": "booking.resources.write", "method": "POST", "route": "/api/maggie/booking/resources.json", "status": 200, "requiredFieldsPresent": true },
26
+ { "id": "booking.schedule.read", "method": "GET", "route": "/api/maggie/booking/schedule.json", "status": 200, "requiredFieldsPresent": true },
27
+ { "id": "booking.schedule.write", "method": "POST", "route": "/api/maggie/booking/schedule.json", "status": 200, "requiredFieldsPresent": true },
28
+ { "id": "booking.payments.read", "method": "GET", "route": "/api/maggie/booking/payments.json", "status": 200, "requiredFieldsPresent": true },
29
+ { "id": "booking.payment.start", "method": "POST", "route": "/api/maggie/booking/payments/start.json", "status": 200, "requiredFieldsPresent": true },
30
+ { "id": "booking.payment.reconcile", "method": "POST", "route": "/api/maggie/booking/payments/{id}/reconcile.json", "status": 200, "requiredFieldsPresent": true },
31
+ { "id": "booking.refund.start", "method": "POST", "route": "/api/maggie/booking/refunds.json", "status": 200, "requiredFieldsPresent": true },
32
+ { "id": "booking.health.read", "method": "GET", "route": "/api/maggie/booking/health.json", "status": 200, "requiredFieldsPresent": true },
33
+ { "id": "booking.payment-health.read", "method": "GET", "route": "/api/maggie/booking/payment-health.json", "status": 200, "requiredFieldsPresent": true },
34
+ { "id": "booking.settings.read", "method": "GET", "route": "/api/maggie/booking/settings.json", "status": 200, "requiredFieldsPresent": true },
35
+ { "id": "booking.settings.update", "method": "PATCH", "route": "/api/maggie/booking/settings.json", "status": 200, "requiredFieldsPresent": true },
36
+ { "id": "booking.audit.read", "method": "GET", "route": "/api/maggie/booking/audit.json", "status": 200, "requiredFieldsPresent": true },
37
+ { "id": "booking.events.read", "method": "GET", "route": "/api/maggie/booking/events.json", "status": 200, "requiredFieldsPresent": true },
38
+ { "id": "booking.runtime.read", "method": "GET", "route": "/api/maggie/booking/runtime.json", "status": 200, "requiredFieldsPresent": true },
39
+ { "id": "booking.provider.webhook", "method": "POST", "route": "/api/maggie/booking/webhooks/{provider}", "status": 200, "requiredFieldsPresent": true }
40
+ ]
41
+ }