@topy-ai/maggie 0.7.36 → 0.7.38

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.
package/README-zh-TW.md CHANGED
@@ -8,7 +8,7 @@ Codex、Claude Code 與相容的 coding agents。
8
8
  ## 安裝
9
9
 
10
10
  ```bash
11
- npx @topy-ai/maggie@0.7.36 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
 
@@ -25,7 +25,7 @@ maggie doctor --project . --require-bootstrap --strict
25
25
  deployment、memory、feedback 和 MaggieDash。內容先 draft/review,外部寫入、
26
26
  publish 與 production deployment 需要明確確認。
27
27
 
28
- 目前 release 是 `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
28
+ 目前 release 是 `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
29
  dispatch、`maggie --version`、feedback batch review 聚合與重複偵測、marketplace enrichment evidence、booking
30
30
  worker/resolver evidence,以及 read-only migration preflight。它也包含 host-owned mobile app surface contract、signed-in
31
31
  camera-state QA、直接 Astro route resolution、correlated feedback batch,以及
@@ -57,6 +57,56 @@ section registry、短期 agent content bridge,以及 translation out-of-band
57
57
  browser evidence、rendered canary 與 deployment preflight。缺少必要 adapter 時
58
58
  回傳 `inconclusive`,只有五組 evidence 全部通過才回傳 `passed`。
59
59
 
60
+ Booking 也有 tenant-scoped 的 Notifications 畫面,管理 Resend transactional
61
+ delivery outbox:可查看去識別化的狀態與 sanitized error;owner/manager 只有
62
+ 在填寫 reason 並使用 idempotency key 時,才可以 replay `dead_letter` 項目。
63
+ 這是 Maggie 的 server-side delivery queue 與 audit 管理,不取代 Resend 自己的
64
+ domain、audience、campaign 或 analytics console。
65
+
66
+ 在全新的 Astro 專案中,可以讓安裝流程補上缺少的 Booking runtime 套件:
67
+
68
+ ```bash
69
+ maggie booking install --project . --confirm --install-dependencies
70
+ ```
71
+
72
+ 這個選項會依照專案現有的 npm/pnpm/yarn/bun lockfile,只安裝缺少的
73
+ React、Phosphor、Tailwind、PostgreSQL、Stripe 和 SSR adapter 套件,保留已存在的
74
+ 版本,並更新相對應的 lockfile。空白 Astro 專案會補上可攜的
75
+ `@astrojs/node` 與 `astro.config.mjs`;已有 `astro.config.*` 或
76
+ Cloudflare/Vercel/Netlify/Deno adapter 的專案會保留原本的部署選擇。
77
+ 它不能和 `--dry-run` 或 `--diff` 一起使用。
78
+
79
+ Booking 的 browser evidence gate 現在涵蓋全部 15 個 manager routes,在 mobile、
80
+ tablet、desktop 三種 viewport 共需要 45 個 screens,包含 waitlist、locations、
81
+ notifications、reports 和 audit。Production release 仍需要 authenticated HTTPS
82
+ capture,並且 console、request、layout errors 都必須為空。
83
+
84
+ 可在不連線資料庫或 provider 的情況下,獨立驗證管理員設定員工登入的 access
85
+ contract:
86
+
87
+ ```bash
88
+ maggie booking access-contract
89
+ ```
90
+
91
+ Booking Team access 支援透過 Resend 發送傳統 email/password 邀請、`manager`、
92
+ `staff`、`finance` 角色、細粒度 permissions、staff profile 綁定、密碼重設、
93
+ 撤銷權限與 audit;不使用 passkey,也不會自動重新啟用 disabled account。
94
+
95
+ 可用以下命令獨立驗證 tenant-scoped Booking email template contract:
96
+
97
+ ```bash
98
+ maggie booking email-templates-contract
99
+ ```
100
+
101
+ Booking 內置七種 Resend 事件模板。Owner、administrator 和 Booking manager
102
+ 可以編輯 draft、用 sandbox sample data 預覽、發佈 audited version,或 rollback
103
+ 舊版本。每個事件只接受核准的 placeholder,worker 發送前會 escape value;
104
+ provider credentials 和 recipient address 只留在 server/worker,不會返回瀏覽器。
105
+
106
+ Owner 設定 Stripe secrets 後,Booking Overview 會提供 server-side 的
107
+ 「Verify Stripe connection」操作:檢查帳號與 webhook 設定,只保存不含 secrets
108
+ 的 capability 狀態,並寫入 audited、可安全重試的結果;Stripe keys 不會進入瀏覽器。
109
+
60
110
  新版 release gates:
61
111
 
62
112
  ```bash
package/README.md CHANGED
@@ -60,7 +60,17 @@ Maggie keeps the existing project foundation and asks for decisions before
60
60
  shared routes, analytics, or publishing boundaries change. The current
61
61
  package ships 19 installable skills and a local-first MaggieDash foundation.
62
62
 
63
- The current release is `0.7.36`. It closes the next validated feedback batch:
63
+ The current release is `0.7.38`. It adds adapter-aware fresh Astro Booking
64
+ installation: blank hosts receive a portable Node SSR config while existing
65
+ deployment adapters remain host-owned. It also adds the installable `maggie-booking`
66
+ workflow for MaggieDash Booking: host bootstrap, traditional email/password
67
+ team access with granular permissions, Stripe payment boundaries, Resend
68
+ outbox and tenant email-template management, public customer booking flow,
69
+ runtime/ops evidence checks, and the maintained Booking implementation docs.
70
+ Production activation remains fail-closed until the host migration, owner,
71
+ Stripe, scheduler, and authenticated runtime evidence are supplied.
72
+
73
+ The previous `0.7.36` release closed the next validated feedback batch:
64
74
  production demo fixtures are development-only, Dash infers the persisted
65
75
  project id, clone asset extraction includes responsive/background assets, SEO
66
76
  structure hashes ignore content-hashed asset names, decorative empty alt text
@@ -517,8 +527,8 @@ artifact schemas.
517
527
  Recommended upgrade sequence for the current release:
518
528
 
519
529
  ```bash
520
- npx @topy-ai/maggie@0.7.36 update --project . --force
521
- npx @topy-ai/maggie@0.7.36 cleanup --project .
530
+ npx @topy-ai/maggie@0.7.38 update --project . --force
531
+ npx @topy-ai/maggie@0.7.38 cleanup --project .
522
532
  ```
523
533
 
524
534
  Maintainers should pass npm credentials through the repository helper, never
@@ -615,6 +625,103 @@ for local development or a configured private Git URL. The host project keeps
615
625
  ownership of routes, email/password auth, database, provider credentials, and
616
626
  the `/api/maggie/*` adapter.
617
627
 
628
+ For an Astro project that also needs Booking, use the Booking installer. It
629
+ installs the separate `./_maggie/booking` workspace plus missing email/password
630
+ routes, first-owner registration, PostgreSQL/Stripe host adapter, public
631
+ booking route, middleware scaffold, schema command, Resend worker, and an
632
+ `.env.maggie-booking.example`:
633
+
634
+ ```bash
635
+ maggie booking install --project . --confirm
636
+ ```
637
+
638
+ For a fresh Astro host, let the explicit install also add only the missing
639
+ Booking runtime packages through the host's existing npm/pnpm/yarn/bun
640
+ package manager. This includes the server-rendering adapter when the project
641
+ has no existing Astro deployment adapter:
642
+
643
+ ```bash
644
+ maggie booking install --project . --confirm --install-dependencies
645
+ ```
646
+
647
+ Existing dependency versions are preserved. A blank Astro project receives a
648
+ portable `@astrojs/node` adapter and `astro.config.mjs`; an existing
649
+ `astro.config.*` and Cloudflare/Vercel/Netlify/Deno adapter remain untouched.
650
+ This option updates the matching lockfile and is intentionally incompatible
651
+ with `--dry-run` and `--diff`.
652
+
653
+ For a reviewed new host, `--bootstrap` also applies the installed idempotent
654
+ Booking schema using the host's existing `DATABASE_URL`:
655
+
656
+ ```bash
657
+ maggie booking install --project . --confirm --bootstrap
658
+ ```
659
+
660
+ This remains opt-in and does not create the owner, configure Stripe, send
661
+ email, or deploy. If the host has no `BOOKING_TOKEN_SECRET`, bootstrap creates
662
+ one in the local `.env` without printing it. Existing secrets are preserved;
663
+ short configured values fail closed. External secret stores must provision the
664
+ key themselves.
665
+
666
+ Run the read-only onboarding checklist after installation:
667
+
668
+ ```bash
669
+ maggie booking setup --project .
670
+ ```
671
+
672
+ Validate the administrator-managed staff access boundary independently of a
673
+ database or provider:
674
+
675
+ ```bash
676
+ maggie booking access-contract
677
+ ```
678
+
679
+ The installed Booking workspace includes a Team access panel. An owner or
680
+ administrator can invite email/password accounts through Resend, assign
681
+ `manager`, `staff`, or `finance`, link a staff profile, edit granular
682
+ permissions, reset or resend setup credentials, and revoke Booking access.
683
+ The access contract is tenant-scoped, audited, and never silently reactivates
684
+ a disabled account.
685
+
686
+ Validate the tenant-scoped Booking email-template contract independently:
687
+
688
+ ```bash
689
+ maggie booking email-templates-contract
690
+ ```
691
+
692
+ The Booking workspace includes seven Resend event templates. Owner,
693
+ administrator, and Booking managers can edit drafts, preview sandboxed sample
694
+ data, publish audited versions, and roll back earlier versions. Event-specific
695
+ placeholders are allowlisted and escaped before the host worker sends through
696
+ Resend; provider credentials and recipient addresses remain server-only.
697
+
698
+ The default `--host auto` only selects Astro when detected. Existing host files
699
+ are preserved; a conventional `src/middleware.ts` receives the generated
700
+ `/_maggie` rewrite block automatically, while unsupported middleware is
701
+ preserved and reported for manual integration. This command does not apply migrations,
702
+ create the owner, or configure Stripe/Resend secrets. The setup checklist
703
+ reports required environment-key presence and the explicit schema,
704
+ owner-registration, Stripe webhook, and Resend-worker steps without printing
705
+ secret values or mutating the host.
706
+
707
+ After the owner adds the Stripe secrets, the Booking Overview includes a
708
+ server-side “Verify Stripe connection” action. It checks the account and
709
+ webhook configuration, stores only non-secret capability status, and records
710
+ an audited idempotent result; Stripe keys never enter the browser.
711
+
712
+ Booking also includes a tenant-scoped Notifications screen for the Resend
713
+ delivery outbox. It shows redacted delivery state and sanitized errors through
714
+ `GET /api/maggie/booking/notifications.json`; an owner or manager can replay a
715
+ `dead_letter` item through the UI only with a reason and idempotency key. This
716
+ manages Maggie's server-side transactional delivery queue and audit trail; it
717
+ does not replace Resend's own domain, audience, campaign, or analytics console.
718
+
719
+ The Booking browser-evidence gate covers all 15 manager routes at mobile,
720
+ tablet, and desktop viewports (45 required screens), including waitlist,
721
+ locations, notifications, reports, and audit. A production release still
722
+ requires an authenticated HTTPS capture with zero console, request, and
723
+ layout errors.
724
+
618
725
  Compare an existing dashboard before replacing it:
619
726
 
620
727
  ```bash
package/bin/maggie.js CHANGED
@@ -58,6 +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
62
  maggie dash sections <validate|prompt|keys|remap-translations|fanout-validate|locale-validate|variant-copy-validate|media-validate|bindings-validate|idempotency-validate|reconcile> [options]
62
63
  maggie dash inventory --pages-file FILE [--require-page-kinds] [--require-source-coverage]
63
64
  maggie dash api-contract --spec FILE
@@ -590,6 +591,7 @@ try {
590
591
  else if (command === "browser-audit") workflowCli("maggie_browser_audit.py", args);
591
592
  else if (command === "verification") workflowCli("maggie_verification.py", args);
592
593
  else if (command === "dash") workflowCli("maggie_dash.py", args);
594
+ else if (command === "booking") workflowCli("maggie_booking.py", args);
593
595
  else if (command === "agent-content") workflowCli("maggie_agent_content.py", args);
594
596
  else if (command === "content") workflowCli("maggie_content.py", args);
595
597
  else if (command === "init" || command === "install") install(args);
@@ -24,6 +24,9 @@ frontend framework.
24
24
  for translation keys and ordered migration;
25
25
  - [`translation-cache-policy-v1.json`](translation-cache-policy-v1.json):
26
26
  restart-after-out-of-band-write evidence.
27
+ - [`booking-email-templates-v1.json`](booking-email-templates-v1.json):
28
+ tenant-scoped Booking/Resend event templates, approved variables, and
29
+ server-only provider/recipient policy.
27
30
  - [`quality-contracts.md`](quality-contracts.md): reviewable inputs for
28
31
  disjoint page inventory, variant/media checks, binding resolution, repair
29
32
  convergence, and database target identity.
@@ -50,7 +53,7 @@ import.
50
53
  items with stable ordering, nesting, and safe destinations;
51
54
  - [`dashboard-runtime-v1.json`](dashboard-runtime-v1.json) defines evidence
52
55
  that an admin screen mounted, ran its checks, and completed its data calls.
53
- - 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
54
57
  provider-neutral install starters in the first-party distribution. The
55
58
  `host-adapter-v2` contract lists endpoint methods, public routes, response
56
59
  content types, and required fields; `maggie dash conformance` validates
@@ -0,0 +1,29 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://maggiedash.topy.ai/contracts/booking-access-v1.json",
4
+ "title": "MaggieDash Booking access management v1",
5
+ "schemaVersion": "maggiedash-booking-access.v1",
6
+ "apiPrefix": "/api/maggie/booking/access.json",
7
+ "auth": { "administratorSession": "host-session-cookie", "emailPassword": true, "passkeys": false, "resendInvitation": true },
8
+ "roles": ["manager", "staff", "finance"],
9
+ "permissions": [
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"
15
+ ],
16
+ "endpointIds": ["booking.access.read", "booking.access.create", "booking.access.update", "booking.access.revoke"],
17
+ "canonicalRoutes": {
18
+ "booking.access.read": "GET /access.json",
19
+ "booking.access.create": "POST /access.json",
20
+ "booking.access.update": "PATCH /access.json",
21
+ "booking.access.revoke": "DELETE /access.json"
22
+ },
23
+ "policy": {
24
+ "tenantScoped": true,
25
+ "disabledAccountsStayDisabled": true,
26
+ "passwordMinimumLength": 12,
27
+ "auditActions": ["booking.access.created", "booking.access.updated", "booking.access.invited", "booking.access.password-reset", "booking.access.revoked"]
28
+ }
29
+ }
@@ -0,0 +1,46 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://maggiedash.topy.ai/contracts/booking-customer-surface-v1.json",
4
+ "title": "MaggieDash Booking customer surface v1",
5
+ "schemaVersion": "maggiedash-booking-customer-surface.v1",
6
+ "apiPrefix": "/api/maggie/booking/public",
7
+ "pagePath": "/_maggie/booking/book",
8
+ "auth": "public-noindex",
9
+ "noindex": true,
10
+ "hostResponsibilities": ["tenant-binding", "origin-and-csrf", "rate-limit", "bot-protection", "opaque-payment-return-token", "sealed-customer-manage-token", "provider-and-notification-adapters"],
11
+ "endpointIds": [
12
+ "booking.public.catalog.read",
13
+ "booking.public.availability.read",
14
+ "booking.public.waitlist.join",
15
+ "booking.public.hold.create",
16
+ "booking.public.checkout.start",
17
+ "booking.public.payment-return.read",
18
+ "booking.public.manage.read",
19
+ "booking.public.booking-cancel",
20
+ "booking.public.booking-reschedule"
21
+ ],
22
+ "canonicalRoutes": {
23
+ "booking.public.catalog.read": "GET /catalog.json",
24
+ "booking.public.availability.read": "GET /availability.json?serviceVariantId={serviceVariantId}&date={date}",
25
+ "booking.public.waitlist.join": "POST /waitlist.json",
26
+ "booking.public.hold.create": "POST /holds.json",
27
+ "booking.public.checkout.start": "POST /checkout.json",
28
+ "booking.public.payment-return.read": "GET /payment-return.json?token={token}",
29
+ "booking.public.manage.read": "GET /manage.json?token={token}",
30
+ "booking.public.booking-cancel": "POST /bookings/{id}/cancel.json",
31
+ "booking.public.booking-reschedule": "POST /bookings/{id}/reschedule.json"
32
+ },
33
+ "responsePolicy": {
34
+ "cacheControl": "no-store",
35
+ "robots": "noindex",
36
+ "paymentRedirectProof": false,
37
+ "mutationPolicy": "all-public-mutations-require-idempotency-key-and-replay-original-result",
38
+ "holdInputPolicy": ["valid-email", "booking-update-consent"],
39
+ "sensitiveFields": ["projectId", "customerId", "providerPaymentRef", "token", "secret", "rawPayload"]
40
+ },
41
+ "tokenPolicy": {
42
+ "paymentReturn": "short-lived",
43
+ "customerManage": "30-day-sealed",
44
+ "rawTokenStorage": false
45
+ }
46
+ }
@@ -0,0 +1,38 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://maggiedash.topy.ai/contracts/booking-email-templates-v1.json",
4
+ "title": "MaggieDash Booking email templates v1",
5
+ "schemaVersion": "maggiedash-booking-email-templates.v1",
6
+ "apiPrefix": "/api/maggie/booking/email-templates.json",
7
+ "auth": {
8
+ "managerSession": "host-session-cookie",
9
+ "emailPassword": true,
10
+ "passkeys": false
11
+ },
12
+ "roles": ["owner", "admin", "manager"],
13
+ "events": [
14
+ { "id": "booking.confirmed", "variables": ["customerName", "serviceName", "when", "locationName", "bookingId", "manageUrl", "siteName"] },
15
+ { "id": "booking.rescheduled", "variables": ["customerName", "serviceName", "when", "locationName", "bookingId", "manageUrl", "siteName"] },
16
+ { "id": "booking.cancelled", "variables": ["customerName", "serviceName", "when", "locationName", "bookingId", "reason", "siteName"] },
17
+ { "id": "booking.reminder", "variables": ["customerName", "serviceName", "when", "locationName", "bookingId", "manageUrl", "siteName"] },
18
+ { "id": "payment.action_required", "variables": ["customerName", "serviceName", "bookingId", "actionUrl", "siteName"] },
19
+ { "id": "payment.refunded", "variables": ["customerName", "serviceName", "bookingId", "siteName"] },
20
+ { "id": "booking.waitlist.available", "variables": ["customerName", "serviceName", "when", "locationName", "bookingUrl", "siteName"] }
21
+ ],
22
+ "endpointIds": ["booking.email-templates.read", "booking.email-templates.draft", "booking.email-templates.publish", "booking.email-templates.rollback"],
23
+ "canonicalRoutes": {
24
+ "booking.email-templates.read": "GET /email-templates.json",
25
+ "booking.email-templates.draft": "PATCH /email-templates.json?action=draft",
26
+ "booking.email-templates.publish": "PATCH /email-templates.json?action=publish",
27
+ "booking.email-templates.rollback": "PATCH /email-templates.json?action=rollback"
28
+ },
29
+ "policy": {
30
+ "tenantScoped": true,
31
+ "auditRequired": true,
32
+ "idempotencyRequiredForMutations": true,
33
+ "syntax": "{{variable}}",
34
+ "maxHtmlLength": 50000,
35
+ "providerCredentialsRemainServerOnly": true,
36
+ "recipientDataNeverReturned": true
37
+ }
38
+ }
@@ -0,0 +1,78 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://maggiedash.topy.ai/contracts/booking-host-adapter-v1.json",
4
+ "title": "MaggieDash Booking host adapter v1",
5
+ "schemaVersion": "maggiedash-booking-host-adapter.v1",
6
+ "apiPrefix": "/api/maggie/booking",
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"],
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.payment-health.verify", "booking.settings.read", "booking.settings.update", "booking.audit.read", "booking.events.read", "booking.runtime.read", "booking.provider.webhook"
11
+ ],
12
+ "canonicalRoutes": {
13
+ "booking.payment.start": "POST /payments/start.json",
14
+ "booking.refund.start": "POST /refunds.json",
15
+ "booking.notifications.read": "GET /notifications.json?status={status}",
16
+ "booking.notification.replay": "POST /notifications/{id}/replay.json",
17
+ "booking.payment-health.read": "GET /payment-health.json",
18
+ "booking.payment-health.verify": "POST /payment-health.json",
19
+ "booking.provider.webhook": "POST /webhooks/{provider}"
20
+ },
21
+ "serviceMethods": {
22
+ "booking.overview.read": "readOverview",
23
+ "booking.reports.read": "readReports",
24
+ "booking.calendar.read": "readCalendar",
25
+ "booking.bookings.read": "listBookings",
26
+ "booking.booking.read": "readBooking",
27
+ "booking.booking.create": "createBooking",
28
+ "booking.booking.transition": "transitionBooking",
29
+ "booking.booking.reschedule": "rescheduleBooking",
30
+ "booking.availability.read": "readAvailability",
31
+ "booking.holds.create": "createHold",
32
+ "booking.holds.release": "releaseHold",
33
+ "booking.customers.read": "listCustomers",
34
+ "booking.customer.read": "readCustomer",
35
+ "booking.waitlist.read": "listWaitlist",
36
+ "booking.waitlist.update": "updateWaitlist",
37
+ "booking.catalog.read": "readCatalog",
38
+ "booking.catalog.write": "updateCatalog",
39
+ "booking.locations.read": "listLocations",
40
+ "booking.location.write": "updateLocation",
41
+ "booking.staff.read": "listStaff",
42
+ "booking.staff.write": "updateStaff",
43
+ "booking.resources.read": "listResources",
44
+ "booking.resources.write": "updateResource",
45
+ "booking.schedule.read": "readSchedule",
46
+ "booking.schedule.write": "updateSchedule",
47
+ "booking.payments.read": "listPayments",
48
+ "booking.payment.start": "startPayment",
49
+ "booking.payment.reconcile": "reconcilePayment",
50
+ "booking.refund.start": "startRefund",
51
+ "booking.notifications.read": "listNotifications",
52
+ "booking.notification.replay": "replayNotification",
53
+ "booking.health.read": "readHealth",
54
+ "booking.payment-health.read": "readPaymentHealth",
55
+ "booking.payment-health.verify": "verifyPaymentConnection",
56
+ "booking.settings.read": "readSettings",
57
+ "booking.settings.update": "updateSettings",
58
+ "booking.audit.read": "listAudit",
59
+ "booking.events.read": "listEvents",
60
+ "booking.runtime.read": "readRuntime",
61
+ "booking.provider.webhook": "handleWebhook"
62
+ },
63
+ "customerServiceMethods": [
64
+ "readPublicCatalog",
65
+ "readPublicAvailability",
66
+ "createCustomerHold",
67
+ "startCustomerCheckout",
68
+ "readCustomerPaymentReturn",
69
+ "readCustomerManage",
70
+ "cancelCustomerBooking",
71
+ "rescheduleCustomerBooking",
72
+ "joinCustomerWaitlist"
73
+ ],
74
+ "runtimeEvidence": {
75
+ "requiredFields": ["id", "method", "route", "status", "requiredFieldsPresent"],
76
+ "auth": ["session", "provider-webhook"]
77
+ }
78
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "schemaVersion": "maggiedash-booking-ops-evidence.v1",
3
+ "requiredChecks": ["backup_restore", "alert_routing", "recovery_rehearsal"],
4
+ "requiredAlertCodes": [
5
+ "worker.lock_contention",
6
+ "worker.job_failed",
7
+ "worker.stale",
8
+ "availability.stale",
9
+ "payments.reconciliation_lag",
10
+ "notifications.retrying",
11
+ "notifications.dead_letter"
12
+ ],
13
+ "requiredCheckFields": {
14
+ "backup_restore": ["status", "backupVerifiedAt", "restoreVerifiedAt", "rowCountVerified"],
15
+ "alert_routing": ["status", "alertCodes", "criticalDeliveryVerified"],
16
+ "recovery_rehearsal": ["status", "rollbackWriteGuardVerified", "workerRestartVerified", "outboxReplayVerified"]
17
+ },
18
+ "safeFields": ["schemaVersion", "generatedAt", "environment", "tenant", "checks", "backup_restore", "alert_routing", "recovery_rehearsal", "status", "backupVerifiedAt", "restoreVerifiedAt", "rowCountVerified", "alertCodes", "criticalDeliveryVerified", "rollbackWriteGuardVerified", "workerRestartVerified", "outboxReplayVerified"]
19
+ }