@topy-ai/maggie 0.7.47 → 0.7.49
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 +2 -2
- package/README.md +76 -15
- package/bin/maggie.js +23 -6
- package/bundled-contracts/google-integrations/capability-report-v2.schema.json +2 -1
- package/bundled-contracts/maggie-content/email-localization-v1.schema.json +89 -0
- package/bundled-contracts/maggie-content/lifecycle-email-v1.schema.json +76 -0
- package/bundled-contracts/maggie-deployment/readiness-v1.schema.json +6 -1
- package/bundled-contracts/maggie-design/palette-roles-v1.schema.json +47 -0
- package/bundled-contracts/maggie-marketplace/template-content-v1.schema.json +103 -0
- package/bundled-contracts/maggie-ops/marketing-run-v1.schema.json +89 -0
- package/bundled-contracts/maggie-ops/notification-catalogue-example-v1.json +941 -0
- package/bundled-contracts/maggie-ops/notification-catalogue-v1.schema.json +273 -0
- package/bundled-contracts/maggie-service-booking/fact-provenance-v1.schema.json +128 -0
- package/bundled-contracts/maggie-service-booking/import-stages-v1.schema.json +191 -0
- package/bundled-contracts/maggiedash/booking-browser-evidence-v1.json +21 -0
- package/bundled-contracts/maggiedash/booking-browser-evidence-v2.json +191 -0
- package/bundled-contracts/maggiedash/booking-email-templates-v1.json +3 -1
- package/bundled-contracts/maggiedash/booking-voucher-lifecycle-v1.json +85 -0
- package/bundled-contracts/maggiedash/execution-board.json +4629 -1553
- package/bundled-contracts/maggiedash/stripe-booking-capabilities-v1.json +1 -0
- package/bundled-marketplace/README.md +17 -0
- package/bundled-marketplace/catalog.json +56 -7
- package/bundled-references/browser-inspection.md +25 -0
- package/bundled-references/google-integrations-runbook.md +54 -0
- package/bundled-references/maggiedash-booking/CURRENT-STATE.md +128 -10
- package/bundled-references/maggiedash-booking/EXECUTION-BOARD.json +4629 -1553
- package/bundled-references/maggiedash-booking/HOST-ADAPTER.md +5 -0
- package/bundled-references/maggiedash-booking/ORAWELLNESS-INTEGRATION-AUDIT.md +64 -21
- package/bundled-references/maggiedash-booking/PRD.md +9 -1
- package/bundled-references/maggiedash-booking/PROGRESS.md +244 -2399
- package/bundled-references/maggiedash-booking/QA-TEST-PLAN.md +37 -6
- package/bundled-references/maggiedash-booking/README.md +23 -6
- package/bundled-references/maggiedash-booking/RUNTIME-OPERATIONS.md +64 -8
- package/bundled-references/maggiedash-booking/SKILLS-AND-CLI.md +11 -2
- package/bundled-references/maggiedash-booking/STRIPE-INTEGRATION.md +66 -2
- package/bundled-references/maggiedash-booking/TASK-RUNBOOK.md +1 -1
- package/bundled-references/maggiedash-booking/TASKS.md +44 -3
- package/bundled-references/maggiedash-booking/VOUCHERS.md +47 -0
- package/bundled-references/provider-adapter-contract.md +33 -0
- package/bundled-skills/maggie-booking/SKILL.md +8 -0
- package/bundled-skills/maggie-clone-to-template/SKILL.md +26 -0
- package/bundled-skills/maggie-content-localization/SKILL.md +17 -1
- package/bundled-skills/maggie-content-localization/references/email-and-lifecycle.md +83 -0
- package/bundled-skills/maggie-deployment/SKILL.md +141 -7
- package/bundled-skills/maggie-deployment/references/vps.md +74 -1
- package/bundled-skills/maggie-design/SKILL.md +154 -0
- package/bundled-skills/maggie-feedback/SKILL.md +67 -1
- package/bundled-skills/maggie-marketplace/SKILL.md +91 -0
- package/bundled-skills/maggie-ops/SKILL.md +37 -0
- package/bundled-skills/maggie-ops/references/notifications-operations.md +154 -0
- package/bundled-skills/maggie-qa-workflow/SKILL.md +41 -1
- package/bundled-skills/maggie-service-booking/SKILL.md +82 -0
- package/bundled-skills/maggie-social-share/SKILL.md +56 -7
- package/bundled-skills/maggie-social-share/references/marketing-run.md +57 -0
- package/bundled-skills/maggie-social-share/references/queue-and-connections.md +152 -0
- package/bundled-skills/maggie-template/SKILL.md +57 -3
- package/bundled-skills/maggie-template/references/template-content-v1.example.json +34 -0
- package/bundled-tools/clis/maggie_booking.py +199 -26
- package/bundled-tools/clis/maggie_booking_vouchers.py +185 -0
- package/bundled-tools/clis/maggie_clone_to_template.py +14 -0
- package/bundled-tools/clis/maggie_deployment.py +307 -18
- package/bundled-tools/clis/maggie_deployment_auth_canary.py +216 -0
- package/bundled-tools/clis/maggie_deployment_collect.py +225 -0
- package/bundled-tools/clis/maggie_deployment_readiness.py +53 -3
- package/bundled-tools/clis/maggie_design.py +17 -0
- package/bundled-tools/clis/maggie_design_lint.py +277 -0
- package/bundled-tools/clis/maggie_design_verify.py +359 -0
- package/bundled-tools/clis/maggie_docs.py +82 -4
- package/bundled-tools/clis/maggie_email_localization.py +382 -0
- package/bundled-tools/clis/maggie_feedback.py +115 -5
- package/bundled-tools/clis/maggie_icon_glyph_check.py +382 -0
- package/bundled-tools/clis/maggie_icon_release_gate.py +28 -1
- package/bundled-tools/clis/maggie_localization.py +5 -0
- package/bundled-tools/clis/maggie_marketing_run.py +272 -0
- package/bundled-tools/clis/maggie_marketplace.py +199 -5
- package/bundled-tools/clis/maggie_notifications.py +528 -0
- package/bundled-tools/clis/maggie_ops.py +87 -0
- package/bundled-tools/clis/maggie_palette.py +280 -0
- package/bundled-tools/clis/maggie_qa_workflow.py +156 -1
- package/bundled-tools/clis/maggie_schedule.py +12 -2
- package/bundled-tools/clis/maggie_service_import.py +520 -0
- package/bundled-tools/clis/maggie_social_queue.py +442 -0
- package/bundled-tools/clis/maggie_social_share.py +46 -9
- package/bundled-tools/clis/maggie_template_package.py +1141 -0
- package/bundled-tools/runtime/google_ads.py +306 -0
- package/bundled-tools/runtime/google_capabilities.py +18 -2
- package/bundled-tools/runtime/google_remediation.py +152 -0
- package/package.json +1 -1
- package/references/browser-inspection.md +25 -0
- package/references/google-integrations-runbook.md +54 -0
- package/references/provider-adapter-contract.md +33 -0
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://maggie.noblox.app/contracts/maggie-ops/notification-catalogue-v1.schema.json",
|
|
4
|
+
"title": "Maggie website notification catalogue v1",
|
|
5
|
+
"description": "Provider-neutral catalogue of every website email, in-app and SMS notification. Validated by `maggie ops notifications catalogue validate`, which also enforces cross-field rules (marketing consent/unsubscribe/queue, operations alerts on the operations queue, durable outbox for external lead email).",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"schemaVersion",
|
|
9
|
+
"retention",
|
|
10
|
+
"entries"
|
|
11
|
+
],
|
|
12
|
+
"properties": {
|
|
13
|
+
"schemaVersion": {
|
|
14
|
+
"const": "maggie-notification-catalogue.v1"
|
|
15
|
+
},
|
|
16
|
+
"project": {
|
|
17
|
+
"type": "string"
|
|
18
|
+
},
|
|
19
|
+
"retention": {
|
|
20
|
+
"type": "object",
|
|
21
|
+
"required": [
|
|
22
|
+
"webhook-payload",
|
|
23
|
+
"delivery-record",
|
|
24
|
+
"rendered-snapshot",
|
|
25
|
+
"template-variables"
|
|
26
|
+
],
|
|
27
|
+
"properties": {
|
|
28
|
+
"webhook-payload": {
|
|
29
|
+
"type": "object",
|
|
30
|
+
"required": [
|
|
31
|
+
"days"
|
|
32
|
+
],
|
|
33
|
+
"properties": {
|
|
34
|
+
"days": {
|
|
35
|
+
"type": "integer",
|
|
36
|
+
"minimum": 1
|
|
37
|
+
},
|
|
38
|
+
"storeRawPayload": {
|
|
39
|
+
"type": "boolean"
|
|
40
|
+
},
|
|
41
|
+
"minimizedFields": {
|
|
42
|
+
"type": "array",
|
|
43
|
+
"items": {
|
|
44
|
+
"type": "string"
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"delivery-record": {
|
|
50
|
+
"type": "object",
|
|
51
|
+
"required": [
|
|
52
|
+
"days"
|
|
53
|
+
],
|
|
54
|
+
"properties": {
|
|
55
|
+
"days": {
|
|
56
|
+
"type": "integer",
|
|
57
|
+
"minimum": 1
|
|
58
|
+
},
|
|
59
|
+
"storeRawPayload": {
|
|
60
|
+
"type": "boolean"
|
|
61
|
+
},
|
|
62
|
+
"minimizedFields": {
|
|
63
|
+
"type": "array",
|
|
64
|
+
"items": {
|
|
65
|
+
"type": "string"
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
"rendered-snapshot": {
|
|
71
|
+
"type": "object",
|
|
72
|
+
"required": [
|
|
73
|
+
"days"
|
|
74
|
+
],
|
|
75
|
+
"properties": {
|
|
76
|
+
"days": {
|
|
77
|
+
"type": "integer",
|
|
78
|
+
"minimum": 1
|
|
79
|
+
},
|
|
80
|
+
"storeRawPayload": {
|
|
81
|
+
"type": "boolean"
|
|
82
|
+
},
|
|
83
|
+
"minimizedFields": {
|
|
84
|
+
"type": "array",
|
|
85
|
+
"items": {
|
|
86
|
+
"type": "string"
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
"template-variables": {
|
|
92
|
+
"type": "object",
|
|
93
|
+
"required": [
|
|
94
|
+
"days"
|
|
95
|
+
],
|
|
96
|
+
"properties": {
|
|
97
|
+
"days": {
|
|
98
|
+
"type": "integer",
|
|
99
|
+
"minimum": 1
|
|
100
|
+
},
|
|
101
|
+
"storeRawPayload": {
|
|
102
|
+
"type": "boolean"
|
|
103
|
+
},
|
|
104
|
+
"minimizedFields": {
|
|
105
|
+
"type": "array",
|
|
106
|
+
"items": {
|
|
107
|
+
"type": "string"
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
"additionalProperties": false
|
|
114
|
+
},
|
|
115
|
+
"entries": {
|
|
116
|
+
"type": "array",
|
|
117
|
+
"minItems": 1,
|
|
118
|
+
"items": {
|
|
119
|
+
"type": "object",
|
|
120
|
+
"required": [
|
|
121
|
+
"alias",
|
|
122
|
+
"section",
|
|
123
|
+
"trigger",
|
|
124
|
+
"audience",
|
|
125
|
+
"category",
|
|
126
|
+
"consent",
|
|
127
|
+
"locales",
|
|
128
|
+
"variables",
|
|
129
|
+
"idempotencyKey",
|
|
130
|
+
"retentionDays",
|
|
131
|
+
"provider",
|
|
132
|
+
"channels",
|
|
133
|
+
"status",
|
|
134
|
+
"delivery",
|
|
135
|
+
"queue"
|
|
136
|
+
],
|
|
137
|
+
"properties": {
|
|
138
|
+
"alias": {
|
|
139
|
+
"type": "string",
|
|
140
|
+
"pattern": "^[a-z0-9][a-z0-9._-]{0,99}$"
|
|
141
|
+
},
|
|
142
|
+
"section": {
|
|
143
|
+
"enum": [
|
|
144
|
+
"identity-security",
|
|
145
|
+
"account",
|
|
146
|
+
"business",
|
|
147
|
+
"billing",
|
|
148
|
+
"support",
|
|
149
|
+
"marketing",
|
|
150
|
+
"deliverability-ops"
|
|
151
|
+
]
|
|
152
|
+
},
|
|
153
|
+
"trigger": {
|
|
154
|
+
"type": "string",
|
|
155
|
+
"minLength": 1
|
|
156
|
+
},
|
|
157
|
+
"audience": {
|
|
158
|
+
"enum": [
|
|
159
|
+
"visitor",
|
|
160
|
+
"user",
|
|
161
|
+
"merchant",
|
|
162
|
+
"team",
|
|
163
|
+
"operator"
|
|
164
|
+
]
|
|
165
|
+
},
|
|
166
|
+
"category": {
|
|
167
|
+
"enum": [
|
|
168
|
+
"transactional",
|
|
169
|
+
"support",
|
|
170
|
+
"marketing"
|
|
171
|
+
]
|
|
172
|
+
},
|
|
173
|
+
"consent": {
|
|
174
|
+
"enum": [
|
|
175
|
+
"not-required",
|
|
176
|
+
"opt-in-required",
|
|
177
|
+
"operator-only"
|
|
178
|
+
]
|
|
179
|
+
},
|
|
180
|
+
"locales": {
|
|
181
|
+
"type": "array",
|
|
182
|
+
"minItems": 1,
|
|
183
|
+
"items": {
|
|
184
|
+
"type": "string"
|
|
185
|
+
}
|
|
186
|
+
},
|
|
187
|
+
"markets": {
|
|
188
|
+
"type": "array",
|
|
189
|
+
"items": {
|
|
190
|
+
"type": "string"
|
|
191
|
+
}
|
|
192
|
+
},
|
|
193
|
+
"variables": {
|
|
194
|
+
"type": "array",
|
|
195
|
+
"items": {
|
|
196
|
+
"type": "string",
|
|
197
|
+
"pattern": "^[A-Za-z_][A-Za-z0-9_]{0,63}$"
|
|
198
|
+
}
|
|
199
|
+
},
|
|
200
|
+
"cta": {
|
|
201
|
+
"type": [
|
|
202
|
+
"object",
|
|
203
|
+
"null"
|
|
204
|
+
],
|
|
205
|
+
"properties": {
|
|
206
|
+
"label": {
|
|
207
|
+
"type": "string"
|
|
208
|
+
},
|
|
209
|
+
"route": {
|
|
210
|
+
"type": "string"
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
},
|
|
214
|
+
"idempotencyKey": {
|
|
215
|
+
"type": "string",
|
|
216
|
+
"pattern": "\\{"
|
|
217
|
+
},
|
|
218
|
+
"retentionDays": {
|
|
219
|
+
"type": "integer",
|
|
220
|
+
"minimum": 1
|
|
221
|
+
},
|
|
222
|
+
"provider": {
|
|
223
|
+
"type": "string"
|
|
224
|
+
},
|
|
225
|
+
"channels": {
|
|
226
|
+
"type": "array",
|
|
227
|
+
"minItems": 1,
|
|
228
|
+
"items": {
|
|
229
|
+
"enum": [
|
|
230
|
+
"email",
|
|
231
|
+
"in-app",
|
|
232
|
+
"sms"
|
|
233
|
+
]
|
|
234
|
+
}
|
|
235
|
+
},
|
|
236
|
+
"status": {
|
|
237
|
+
"enum": [
|
|
238
|
+
"implemented",
|
|
239
|
+
"provider-owned",
|
|
240
|
+
"reserved",
|
|
241
|
+
"missing"
|
|
242
|
+
]
|
|
243
|
+
},
|
|
244
|
+
"delivery": {
|
|
245
|
+
"enum": [
|
|
246
|
+
"outbox",
|
|
247
|
+
"direct",
|
|
248
|
+
"provider"
|
|
249
|
+
]
|
|
250
|
+
},
|
|
251
|
+
"queue": {
|
|
252
|
+
"enum": [
|
|
253
|
+
"user",
|
|
254
|
+
"operations",
|
|
255
|
+
"marketing"
|
|
256
|
+
]
|
|
257
|
+
},
|
|
258
|
+
"lead": {
|
|
259
|
+
"type": "boolean"
|
|
260
|
+
},
|
|
261
|
+
"unsubscribe": {
|
|
262
|
+
"type": "boolean"
|
|
263
|
+
},
|
|
264
|
+
"frequency": {
|
|
265
|
+
"type": "string"
|
|
266
|
+
}
|
|
267
|
+
},
|
|
268
|
+
"additionalProperties": false
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
},
|
|
272
|
+
"additionalProperties": false
|
|
273
|
+
}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://maggie.noblox.app/contracts/service-fact-provenance-v1.json",
|
|
4
|
+
"title": "Maggie field-level provenance for imported business facts",
|
|
5
|
+
"description": "Per-field evidence from the user and from providers (Fresha, Google, website, ...). User-entered values are authoritative. Provider disagreement above policy.minConfidence becomes a needs-review conflict; a provider error is recorded and never blocks other sources. Merge with `maggie service fact-provenance`, which writes a maggie-service-fact-merge.v1 artifact for the host review UI.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"schemaVersion",
|
|
9
|
+
"entityId",
|
|
10
|
+
"fields"
|
|
11
|
+
],
|
|
12
|
+
"properties": {
|
|
13
|
+
"schemaVersion": {
|
|
14
|
+
"const": "maggie-service-fact-provenance.v1"
|
|
15
|
+
},
|
|
16
|
+
"entityId": {
|
|
17
|
+
"type": "string",
|
|
18
|
+
"minLength": 1
|
|
19
|
+
},
|
|
20
|
+
"policy": {
|
|
21
|
+
"type": "object",
|
|
22
|
+
"properties": {
|
|
23
|
+
"precedence": {
|
|
24
|
+
"type": "array",
|
|
25
|
+
"items": {
|
|
26
|
+
"type": "string"
|
|
27
|
+
},
|
|
28
|
+
"prefixItems": [
|
|
29
|
+
{
|
|
30
|
+
"const": "user"
|
|
31
|
+
}
|
|
32
|
+
],
|
|
33
|
+
"minItems": 1
|
|
34
|
+
},
|
|
35
|
+
"fieldPrecedence": {
|
|
36
|
+
"type": "object",
|
|
37
|
+
"additionalProperties": {
|
|
38
|
+
"type": "array",
|
|
39
|
+
"prefixItems": [
|
|
40
|
+
{
|
|
41
|
+
"const": "user"
|
|
42
|
+
}
|
|
43
|
+
],
|
|
44
|
+
"items": {
|
|
45
|
+
"type": "string"
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"minConfidence": {
|
|
50
|
+
"type": "number",
|
|
51
|
+
"minimum": 0,
|
|
52
|
+
"maximum": 1
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
"additionalProperties": false
|
|
56
|
+
},
|
|
57
|
+
"fields": {
|
|
58
|
+
"type": "object",
|
|
59
|
+
"minProperties": 1,
|
|
60
|
+
"additionalProperties": {
|
|
61
|
+
"$ref": "#/$defs/field"
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
"$defs": {
|
|
66
|
+
"field": {
|
|
67
|
+
"type": "object",
|
|
68
|
+
"properties": {
|
|
69
|
+
"user": {
|
|
70
|
+
"type": [
|
|
71
|
+
"object",
|
|
72
|
+
"null"
|
|
73
|
+
],
|
|
74
|
+
"required": [
|
|
75
|
+
"value"
|
|
76
|
+
],
|
|
77
|
+
"properties": {
|
|
78
|
+
"value": {},
|
|
79
|
+
"at": {
|
|
80
|
+
"type": "string",
|
|
81
|
+
"format": "date-time"
|
|
82
|
+
},
|
|
83
|
+
"actor": {
|
|
84
|
+
"type": "string"
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
"sources": {
|
|
89
|
+
"type": "array",
|
|
90
|
+
"items": {
|
|
91
|
+
"type": "object",
|
|
92
|
+
"required": [
|
|
93
|
+
"source"
|
|
94
|
+
],
|
|
95
|
+
"properties": {
|
|
96
|
+
"source": {
|
|
97
|
+
"type": "string",
|
|
98
|
+
"pattern": "^[a-z][a-z0-9_-]{0,39}$",
|
|
99
|
+
"not": {
|
|
100
|
+
"const": "user"
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
"value": {},
|
|
104
|
+
"confidence": {
|
|
105
|
+
"type": "number",
|
|
106
|
+
"minimum": 0,
|
|
107
|
+
"maximum": 1
|
|
108
|
+
},
|
|
109
|
+
"observedAt": {
|
|
110
|
+
"type": "string",
|
|
111
|
+
"format": "date-time"
|
|
112
|
+
},
|
|
113
|
+
"sourceRef": {
|
|
114
|
+
"type": "string",
|
|
115
|
+
"description": "public page or record reference; never credentials"
|
|
116
|
+
},
|
|
117
|
+
"error": {
|
|
118
|
+
"type": "string",
|
|
119
|
+
"pattern": "^[a-z0-9][a-z0-9._-]{0,79}$"
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
"additionalProperties": true
|
|
128
|
+
}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://maggie.noblox.app/contracts/service-import-stages-v1.json",
|
|
4
|
+
"title": "Maggie provider-neutral multi-stage service import state",
|
|
5
|
+
"description": "One import runs source, enrichment, research and verification stages. Stage keys are idempotent and reused on retry; running stages heartbeat and become stale after staleAfterSeconds; downstream stages record the source revision they consumed so superseded (out-of-order) results are discarded; cancellation is propagated to every stage and late results are discarded. Validate with `maggie service import-stages-validate`.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"schemaVersion",
|
|
9
|
+
"importId",
|
|
10
|
+
"idempotencyKey",
|
|
11
|
+
"state",
|
|
12
|
+
"staleAfterSeconds",
|
|
13
|
+
"stages"
|
|
14
|
+
],
|
|
15
|
+
"properties": {
|
|
16
|
+
"schemaVersion": {
|
|
17
|
+
"const": "maggie-service-import-stages.v1"
|
|
18
|
+
},
|
|
19
|
+
"importId": {
|
|
20
|
+
"type": "string",
|
|
21
|
+
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,159}$"
|
|
22
|
+
},
|
|
23
|
+
"idempotencyKey": {
|
|
24
|
+
"type": "string",
|
|
25
|
+
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,159}$"
|
|
26
|
+
},
|
|
27
|
+
"provider": {
|
|
28
|
+
"type": "string"
|
|
29
|
+
},
|
|
30
|
+
"state": {
|
|
31
|
+
"enum": [
|
|
32
|
+
"queued",
|
|
33
|
+
"running",
|
|
34
|
+
"succeeded",
|
|
35
|
+
"partial",
|
|
36
|
+
"failed",
|
|
37
|
+
"cancelled",
|
|
38
|
+
"stale"
|
|
39
|
+
]
|
|
40
|
+
},
|
|
41
|
+
"staleAfterSeconds": {
|
|
42
|
+
"type": "integer",
|
|
43
|
+
"minimum": 30,
|
|
44
|
+
"maximum": 86400
|
|
45
|
+
},
|
|
46
|
+
"evaluatedAt": {
|
|
47
|
+
"type": "string",
|
|
48
|
+
"format": "date-time"
|
|
49
|
+
},
|
|
50
|
+
"nextAction": {
|
|
51
|
+
"type": "string",
|
|
52
|
+
"minLength": 1
|
|
53
|
+
},
|
|
54
|
+
"cancellation": {
|
|
55
|
+
"type": "object",
|
|
56
|
+
"properties": {
|
|
57
|
+
"requested": {
|
|
58
|
+
"type": "boolean"
|
|
59
|
+
},
|
|
60
|
+
"requestedAt": {
|
|
61
|
+
"type": "string",
|
|
62
|
+
"format": "date-time"
|
|
63
|
+
},
|
|
64
|
+
"propagated": {
|
|
65
|
+
"type": "boolean"
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
"additionalProperties": false
|
|
69
|
+
},
|
|
70
|
+
"stages": {
|
|
71
|
+
"type": "array",
|
|
72
|
+
"minItems": 4,
|
|
73
|
+
"maxItems": 4,
|
|
74
|
+
"items": {
|
|
75
|
+
"$ref": "#/$defs/stage"
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
"$defs": {
|
|
80
|
+
"stage": {
|
|
81
|
+
"type": "object",
|
|
82
|
+
"required": [
|
|
83
|
+
"name",
|
|
84
|
+
"stageKey",
|
|
85
|
+
"state",
|
|
86
|
+
"attempt",
|
|
87
|
+
"maxAttempts",
|
|
88
|
+
"progress"
|
|
89
|
+
],
|
|
90
|
+
"properties": {
|
|
91
|
+
"name": {
|
|
92
|
+
"enum": [
|
|
93
|
+
"source",
|
|
94
|
+
"enrichment",
|
|
95
|
+
"research",
|
|
96
|
+
"verification"
|
|
97
|
+
]
|
|
98
|
+
},
|
|
99
|
+
"stageKey": {
|
|
100
|
+
"type": "string",
|
|
101
|
+
"description": "<importId>:<stage>[:<input hash>]; reused on retry"
|
|
102
|
+
},
|
|
103
|
+
"dependsOn": {
|
|
104
|
+
"type": "array",
|
|
105
|
+
"items": {
|
|
106
|
+
"enum": [
|
|
107
|
+
"source",
|
|
108
|
+
"enrichment",
|
|
109
|
+
"research",
|
|
110
|
+
"verification"
|
|
111
|
+
]
|
|
112
|
+
},
|
|
113
|
+
"description": "defaults: enrichment/research -> source; verification -> enrichment, research"
|
|
114
|
+
},
|
|
115
|
+
"state": {
|
|
116
|
+
"enum": [
|
|
117
|
+
"queued",
|
|
118
|
+
"running",
|
|
119
|
+
"succeeded",
|
|
120
|
+
"failed",
|
|
121
|
+
"skipped",
|
|
122
|
+
"cancelled"
|
|
123
|
+
]
|
|
124
|
+
},
|
|
125
|
+
"attempt": {
|
|
126
|
+
"type": "integer",
|
|
127
|
+
"minimum": 0
|
|
128
|
+
},
|
|
129
|
+
"maxAttempts": {
|
|
130
|
+
"type": "integer",
|
|
131
|
+
"minimum": 1
|
|
132
|
+
},
|
|
133
|
+
"progress": {
|
|
134
|
+
"type": "object",
|
|
135
|
+
"required": [
|
|
136
|
+
"done",
|
|
137
|
+
"total"
|
|
138
|
+
],
|
|
139
|
+
"properties": {
|
|
140
|
+
"done": {
|
|
141
|
+
"type": "integer",
|
|
142
|
+
"minimum": 0
|
|
143
|
+
},
|
|
144
|
+
"total": {
|
|
145
|
+
"type": "integer",
|
|
146
|
+
"minimum": 0
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
"startedAt": {
|
|
151
|
+
"type": "string",
|
|
152
|
+
"format": "date-time"
|
|
153
|
+
},
|
|
154
|
+
"heartbeatAt": {
|
|
155
|
+
"type": "string",
|
|
156
|
+
"format": "date-time"
|
|
157
|
+
},
|
|
158
|
+
"completedAt": {
|
|
159
|
+
"type": "string",
|
|
160
|
+
"format": "date-time"
|
|
161
|
+
},
|
|
162
|
+
"resultRevision": {
|
|
163
|
+
"type": [
|
|
164
|
+
"string",
|
|
165
|
+
"integer"
|
|
166
|
+
],
|
|
167
|
+
"description": "source stage: revision of its current result"
|
|
168
|
+
},
|
|
169
|
+
"inputRevision": {
|
|
170
|
+
"type": [
|
|
171
|
+
"string",
|
|
172
|
+
"integer"
|
|
173
|
+
],
|
|
174
|
+
"description": "downstream stages: source revision consumed"
|
|
175
|
+
},
|
|
176
|
+
"resultDiscarded": {
|
|
177
|
+
"type": "boolean"
|
|
178
|
+
},
|
|
179
|
+
"errorCode": {
|
|
180
|
+
"type": [
|
|
181
|
+
"string",
|
|
182
|
+
"null"
|
|
183
|
+
],
|
|
184
|
+
"pattern": "^[a-z0-9][a-z0-9._-]{0,79}$"
|
|
185
|
+
}
|
|
186
|
+
},
|
|
187
|
+
"additionalProperties": true
|
|
188
|
+
}
|
|
189
|
+
},
|
|
190
|
+
"additionalProperties": true
|
|
191
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://maggiedash.topy.ai/contracts/booking-browser-evidence-v1.json",
|
|
4
|
+
"title": "MaggieDash Booking production browser evidence v1",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["schemaVersion", "baseUrl", "generatedAt", "viewports", "screens", "consoleErrors", "failedRequests", "layoutErrors"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"schemaVersion": { "const": "maggiedash-booking-browser-evidence.v1" },
|
|
9
|
+
"baseUrl": { "type": "string", "pattern": "^https://" },
|
|
10
|
+
"generatedAt": { "type": "string", "format": "date-time" },
|
|
11
|
+
"version": { "type": "string" },
|
|
12
|
+
"viewports": { "type": "array", "minItems": 3, "items": { "type": "object", "required": ["name", "width", "height"] } },
|
|
13
|
+
"screens": { "type": "array", "minItems": 51, "items": { "type": "object", "required": ["route", "viewport", "httpStatus", "screenshot", "ready"] } },
|
|
14
|
+
"consoleErrors": { "type": "array", "items": { "type": "string" } },
|
|
15
|
+
"failedRequests": { "type": "array", "items": { "type": "string" } },
|
|
16
|
+
"layoutErrors": { "type": "array", "items": { "type": "string" } },
|
|
17
|
+
"notes": { "type": "array", "items": { "type": "string" } }
|
|
18
|
+
},
|
|
19
|
+
"x-required-routes": ["/_maggie/booking/", "/_maggie/booking/calendar", "/_maggie/booking/bookings", "/_maggie/booking/customers", "/_maggie/booking/waitlist", "/_maggie/booking/locations", "/_maggie/booking/catalog", "/_maggie/booking/packages", "/_maggie/booking/staff", "/_maggie/booking/resources", "/_maggie/booking/schedule", "/_maggie/booking/payments", "/_maggie/booking/notifications", "/_maggie/booking/email-templates", "/_maggie/booking/reports", "/_maggie/booking/settings", "/_maggie/booking/audit"],
|
|
20
|
+
"x-required-viewports": [{"name":"mobile","width":390,"height":844},{"name":"tablet","width":768,"height":1024},{"name":"desktop","width":1440,"height":1000}]
|
|
21
|
+
}
|