@elitedcs/ghl-mcp 3.89.0-beta.3 → 3.89.0-beta.4
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/CHANGELOG.md +22 -0
- package/README.md +1 -1
- package/dist/index.js +5659 -3685
- package/package.json +1 -1
- package/skills/blueprint/examples/medspa-build-plan.json +4 -4
- package/skills/blueprint/examples/sample-build-plan.json +4 -4
- package/skills/blueprint/presets/clinic.preset.json +2 -2
- package/skills/blueprint/presets/coach.preset.json +2 -2
- package/skills/blueprint/presets/ecommerce.preset.json +2 -2
- package/skills/blueprint/presets/generic-client.preset.json +2 -2
- package/skills/blueprint/presets/local-service.preset.json +2 -2
- package/skills/blueprint/presets/med-spa.preset.json +2 -2
- package/skills/blueprint/presets/wellness-clinic.md +55 -0
- package/skills/blueprint/presets/wellness-clinic.preset.json +3529 -0
- package/skills/blueprint/references/build-plan-schema.md +1 -1
- package/skills/blueprint/references/preset-format.md +4 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elitedcs/ghl-mcp",
|
|
3
|
-
"version": "3.89.0-beta.
|
|
3
|
+
"version": "3.89.0-beta.4",
|
|
4
4
|
"mcpName": "io.github.drjerryrelth/ghl-command",
|
|
5
5
|
"description": "GoHighLevel MCP Server for Claude. 250 tools — full CRM, automation, marketing control, account-wide workflow audit, live funnel-capture verification, and the only programmatic GHL workflow builder, now multi-tenant across client accounts.",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -435,7 +435,7 @@
|
|
|
435
435
|
{
|
|
436
436
|
"ref": "sms_template.n_sms_1",
|
|
437
437
|
"name": "Nurture Text 1 - One Word",
|
|
438
|
-
"body": "{{contact.first_name}}, quick one from {{custom_values.owner_first_name}} at {{custom_values.business_name}}: is it lines, volume, or skin texture you'd most like to fix first? One word is enough
|
|
438
|
+
"body": "{{contact.first_name}}, quick one from {{custom_values.owner_first_name}} at {{custom_values.business_name}}: is it lines, volume, or skin texture you'd most like to fix first? One word is enough.\nReply STOP to opt out."
|
|
439
439
|
},
|
|
440
440
|
{
|
|
441
441
|
"ref": "sms_template.n_sms_2",
|
|
@@ -460,7 +460,7 @@
|
|
|
460
460
|
{
|
|
461
461
|
"ref": "sms_template.w_sms_1",
|
|
462
462
|
"name": "Win-back Text 1",
|
|
463
|
-
"body": "Hi {{contact.first_name}}, it's {{custom_values.owner_first_name}} at {{custom_values.business_name}}. Is your skin still on the list this season, or should I close your file for now
|
|
463
|
+
"body": "Hi {{contact.first_name}}, it's {{custom_values.owner_first_name}} at {{custom_values.business_name}}. Is your skin still on the list this season, or should I close your file for now?\nReply STOP to opt out."
|
|
464
464
|
},
|
|
465
465
|
{
|
|
466
466
|
"ref": "sms_template.w_sms_2",
|
|
@@ -767,7 +767,7 @@
|
|
|
767
767
|
"custom_values.owner_first_name",
|
|
768
768
|
"custom_values.business_name"
|
|
769
769
|
],
|
|
770
|
-
"body": "{{contact.first_name}}, quick one from {{custom_values.owner_first_name}} at {{custom_values.business_name}}: is it lines, volume, or skin texture you'd most like to fix first? One word is enough
|
|
770
|
+
"body": "{{contact.first_name}}, quick one from {{custom_values.owner_first_name}} at {{custom_values.business_name}}: is it lines, volume, or skin texture you'd most like to fix first? One word is enough.\nReply STOP to opt out."
|
|
771
771
|
},
|
|
772
772
|
{
|
|
773
773
|
"ref": "sms.n_sms_2",
|
|
@@ -817,7 +817,7 @@
|
|
|
817
817
|
"custom_values.owner_first_name",
|
|
818
818
|
"custom_values.business_name"
|
|
819
819
|
],
|
|
820
|
-
"body": "Hi {{contact.first_name}}, it's {{custom_values.owner_first_name}} at {{custom_values.business_name}}. Is your skin still on the list this season, or should I close your file for now
|
|
820
|
+
"body": "Hi {{contact.first_name}}, it's {{custom_values.owner_first_name}} at {{custom_values.business_name}}. Is your skin still on the list this season, or should I close your file for now?\nReply STOP to opt out."
|
|
821
821
|
},
|
|
822
822
|
{
|
|
823
823
|
"ref": "sms.w_sms_2",
|
|
@@ -402,7 +402,7 @@
|
|
|
402
402
|
{
|
|
403
403
|
"ref": "sms_template.n_sms_1",
|
|
404
404
|
"name": "Nurture Text 1 - One Word",
|
|
405
|
-
"body": "{{contact.first_name}}, quick one from {{custom_values.owner_first_name}} at {{custom_values.business_name}}: what matters most to you here, speed, price, or getting it right first time? One word is enough
|
|
405
|
+
"body": "{{contact.first_name}}, quick one from {{custom_values.owner_first_name}} at {{custom_values.business_name}}: what matters most to you here, speed, price, or getting it right first time? One word is enough.\nReply STOP to opt out."
|
|
406
406
|
},
|
|
407
407
|
{
|
|
408
408
|
"ref": "sms_template.n_sms_2",
|
|
@@ -427,7 +427,7 @@
|
|
|
427
427
|
{
|
|
428
428
|
"ref": "sms_template.w_sms_1",
|
|
429
429
|
"name": "Win-back Text 1",
|
|
430
|
-
"body": "Hi {{contact.first_name}}, it's {{custom_values.owner_first_name}} at {{custom_values.business_name}}. Is this still on your list this quarter, or should I close your file for now
|
|
430
|
+
"body": "Hi {{contact.first_name}}, it's {{custom_values.owner_first_name}} at {{custom_values.business_name}}. Is this still on your list this quarter, or should I close your file for now?\nReply STOP to opt out."
|
|
431
431
|
},
|
|
432
432
|
{
|
|
433
433
|
"ref": "sms_template.w_sms_2",
|
|
@@ -734,7 +734,7 @@
|
|
|
734
734
|
"custom_values.owner_first_name",
|
|
735
735
|
"custom_values.business_name"
|
|
736
736
|
],
|
|
737
|
-
"body": "{{contact.first_name}}, quick one from {{custom_values.owner_first_name}} at {{custom_values.business_name}}: what matters most to you here, speed, price, or getting it right first time? One word is enough
|
|
737
|
+
"body": "{{contact.first_name}}, quick one from {{custom_values.owner_first_name}} at {{custom_values.business_name}}: what matters most to you here, speed, price, or getting it right first time? One word is enough.\nReply STOP to opt out."
|
|
738
738
|
},
|
|
739
739
|
{
|
|
740
740
|
"ref": "sms.n_sms_2",
|
|
@@ -784,7 +784,7 @@
|
|
|
784
784
|
"custom_values.owner_first_name",
|
|
785
785
|
"custom_values.business_name"
|
|
786
786
|
],
|
|
787
|
-
"body": "Hi {{contact.first_name}}, it's {{custom_values.owner_first_name}} at {{custom_values.business_name}}. Is this still on your list this quarter, or should I close your file for now
|
|
787
|
+
"body": "Hi {{contact.first_name}}, it's {{custom_values.owner_first_name}} at {{custom_values.business_name}}. Is this still on your list this quarter, or should I close your file for now?\nReply STOP to opt out."
|
|
788
788
|
},
|
|
789
789
|
{
|
|
790
790
|
"ref": "sms.w_sms_2",
|
|
@@ -524,7 +524,7 @@
|
|
|
524
524
|
{
|
|
525
525
|
"ref": "sms_template.n_sms_1",
|
|
526
526
|
"name": "Nurture Text 1 - Insurance or Cash",
|
|
527
|
-
"body": "{{contact.first_name}}, quick one from {{custom_values.owner_first_name}} at {{custom_values.business_name}}: will this be insurance or cash-pay? One word and we'll check your benefits before you come in
|
|
527
|
+
"body": "{{contact.first_name}}, quick one from {{custom_values.owner_first_name}} at {{custom_values.business_name}}: will this be insurance or cash-pay? One word and we'll check your benefits before you come in.\nReply STOP to opt out."
|
|
528
528
|
},
|
|
529
529
|
{
|
|
530
530
|
"ref": "sms_template.n_sms_2",
|
|
@@ -549,7 +549,7 @@
|
|
|
549
549
|
{
|
|
550
550
|
"ref": "sms_template.w_sms_1",
|
|
551
551
|
"name": "Win-back Text 1",
|
|
552
|
-
"body": "Hi {{contact.first_name}}, it's {{custom_values.owner_first_name}} at {{custom_values.business_name}}. Are you still planning a first visit this season, or should I close your file for now
|
|
552
|
+
"body": "Hi {{contact.first_name}}, it's {{custom_values.owner_first_name}} at {{custom_values.business_name}}. Are you still planning a first visit this season, or should I close your file for now?\nReply STOP to opt out."
|
|
553
553
|
},
|
|
554
554
|
{
|
|
555
555
|
"ref": "sms_template.w_sms_2",
|
|
@@ -528,7 +528,7 @@
|
|
|
528
528
|
{
|
|
529
529
|
"ref": "sms_template.n_sms_1",
|
|
530
530
|
"name": "Nurture Text 1 - One Word",
|
|
531
|
-
"body": "{{contact.first_name}}, quick one from {{custom_values.owner_first_name}} at {{custom_values.business_name}}: what's the bigger gap right now, clarity on what to do, or structure to actually do it? One word is enough
|
|
531
|
+
"body": "{{contact.first_name}}, quick one from {{custom_values.owner_first_name}} at {{custom_values.business_name}}: what's the bigger gap right now, clarity on what to do, or structure to actually do it? One word is enough.\nReply STOP to opt out."
|
|
532
532
|
},
|
|
533
533
|
{
|
|
534
534
|
"ref": "sms_template.n_sms_2",
|
|
@@ -553,7 +553,7 @@
|
|
|
553
553
|
{
|
|
554
554
|
"ref": "sms_template.w_sms_1",
|
|
555
555
|
"name": "Win-back Text 1",
|
|
556
|
-
"body": "Hi {{contact.first_name}}, it's {{custom_values.owner_first_name}} at {{custom_values.business_name}}. Is {{audience.painPoints[0] || the thing you want to change}} still on your list this quarter, or should I close your application for now
|
|
556
|
+
"body": "Hi {{contact.first_name}}, it's {{custom_values.owner_first_name}} at {{custom_values.business_name}}. Is {{audience.painPoints[0] || the thing you want to change}} still on your list this quarter, or should I close your application for now?\nReply STOP to opt out."
|
|
557
557
|
},
|
|
558
558
|
{
|
|
559
559
|
"ref": "sms_template.w_sms_2",
|
|
@@ -420,7 +420,7 @@
|
|
|
420
420
|
{
|
|
421
421
|
"ref": "sms_template.n_sms_1",
|
|
422
422
|
"name": "Nurture Text 1 - One Word",
|
|
423
|
-
"body": "{{contact.first_name}}, quick one from {{custom_values.owner_first_name}} at {{custom_values.business_name}}: best sellers, new arrivals, or a gift? One word and I'll send you the right page
|
|
423
|
+
"body": "{{contact.first_name}}, quick one from {{custom_values.owner_first_name}} at {{custom_values.business_name}}: best sellers, new arrivals, or a gift? One word and I'll send you the right page.\nReply STOP to opt out."
|
|
424
424
|
},
|
|
425
425
|
{
|
|
426
426
|
"ref": "sms_template.n_sms_2",
|
|
@@ -445,7 +445,7 @@
|
|
|
445
445
|
{
|
|
446
446
|
"ref": "sms_template.w_sms_1",
|
|
447
447
|
"name": "Win-back Text 1",
|
|
448
|
-
"body": "Hi {{contact.first_name}}, it's {{custom_values.owner_first_name}} at {{custom_values.business_name}}. Still interested, or would you rather only hear about new arrivals? Reply 1 for still interested, 2 for new arrivals only
|
|
448
|
+
"body": "Hi {{contact.first_name}}, it's {{custom_values.owner_first_name}} at {{custom_values.business_name}}. Still interested, or would you rather only hear about new arrivals? Reply 1 for still interested, 2 for new arrivals only.\nReply STOP to opt out."
|
|
449
449
|
},
|
|
450
450
|
{
|
|
451
451
|
"ref": "sms_template.w_sms_2",
|
|
@@ -494,7 +494,7 @@
|
|
|
494
494
|
{
|
|
495
495
|
"ref": "sms_template.n_sms_1",
|
|
496
496
|
"name": "Nurture Text 1 - One Word",
|
|
497
|
-
"body": "{{contact.first_name}}, quick one from {{custom_values.owner_first_name}} at {{custom_values.business_name}}: what matters most to you here, speed, price, or getting it right first time? One word is enough
|
|
497
|
+
"body": "{{contact.first_name}}, quick one from {{custom_values.owner_first_name}} at {{custom_values.business_name}}: what matters most to you here, speed, price, or getting it right first time? One word is enough.\nReply STOP to opt out."
|
|
498
498
|
},
|
|
499
499
|
{
|
|
500
500
|
"ref": "sms_template.n_sms_2",
|
|
@@ -519,7 +519,7 @@
|
|
|
519
519
|
{
|
|
520
520
|
"ref": "sms_template.w_sms_1",
|
|
521
521
|
"name": "Win-back Text 1",
|
|
522
|
-
"body": "Hi {{contact.first_name}}, it's {{custom_values.owner_first_name}} at {{custom_values.business_name}}. Is this still on your list this quarter, or should I close your file for now
|
|
522
|
+
"body": "Hi {{contact.first_name}}, it's {{custom_values.owner_first_name}} at {{custom_values.business_name}}. Is this still on your list this quarter, or should I close your file for now?\nReply STOP to opt out."
|
|
523
523
|
},
|
|
524
524
|
{
|
|
525
525
|
"ref": "sms_template.w_sms_2",
|
|
@@ -537,7 +537,7 @@
|
|
|
537
537
|
{
|
|
538
538
|
"ref": "sms_template.n_sms_1",
|
|
539
539
|
"name": "Nurture Text 1 - One Word",
|
|
540
|
-
"body": "{{contact.first_name}}, quick one from {{custom_values.owner_first_name}} at {{custom_values.business_name}}: are you leaning toward a repair, a replacement, or just pricing it for now? One word is enough
|
|
540
|
+
"body": "{{contact.first_name}}, quick one from {{custom_values.owner_first_name}} at {{custom_values.business_name}}: are you leaning toward a repair, a replacement, or just pricing it for now? One word is enough.\nReply STOP to opt out."
|
|
541
541
|
},
|
|
542
542
|
{
|
|
543
543
|
"ref": "sms_template.n_sms_2",
|
|
@@ -562,7 +562,7 @@
|
|
|
562
562
|
{
|
|
563
563
|
"ref": "sms_template.w_sms_1",
|
|
564
564
|
"name": "Win-back Text 1",
|
|
565
|
-
"body": "Hi {{contact.first_name}}, it's {{custom_values.owner_first_name}} at {{custom_values.business_name}}. Is {{offer.summary || the work you asked about}} still on your list this season, or did you get it handled
|
|
565
|
+
"body": "Hi {{contact.first_name}}, it's {{custom_values.owner_first_name}} at {{custom_values.business_name}}. Is {{offer.summary || the work you asked about}} still on your list this season, or did you get it handled?\nReply STOP to opt out."
|
|
566
566
|
},
|
|
567
567
|
{
|
|
568
568
|
"ref": "sms_template.w_sms_2",
|
|
@@ -513,7 +513,7 @@
|
|
|
513
513
|
{
|
|
514
514
|
"ref": "sms_template.n_sms_1",
|
|
515
515
|
"name": "Nurture Text 1 - One Word",
|
|
516
|
-
"body": "{{contact.first_name}}, quick one from {{custom_values.owner_first_name}} at {{custom_values.business_name}}: is it lines, volume, or skin texture you'd most like to fix first? One word is enough
|
|
516
|
+
"body": "{{contact.first_name}}, quick one from {{custom_values.owner_first_name}} at {{custom_values.business_name}}: is it lines, volume, or skin texture you'd most like to fix first? One word is enough.\nReply STOP to opt out."
|
|
517
517
|
},
|
|
518
518
|
{
|
|
519
519
|
"ref": "sms_template.n_sms_2",
|
|
@@ -538,7 +538,7 @@
|
|
|
538
538
|
{
|
|
539
539
|
"ref": "sms_template.w_sms_1",
|
|
540
540
|
"name": "Win-back Text 1",
|
|
541
|
-
"body": "Hi {{contact.first_name}}, it's {{custom_values.owner_first_name}} at {{custom_values.business_name}}. Is your skin still on the list this season, or should I close your file for now
|
|
541
|
+
"body": "Hi {{contact.first_name}}, it's {{custom_values.owner_first_name}} at {{custom_values.business_name}}. Is your skin still on the list this season, or should I close your file for now?\nReply STOP to opt out."
|
|
542
542
|
},
|
|
543
543
|
{
|
|
544
544
|
"ref": "sms_template.w_sms_2",
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Preset: Wellness Clinic
|
|
2
|
+
|
|
3
|
+
**File:** `wellness-clinic.preset.json` · **id:** `wellness_clinic` · **version:** 1.0.0 · **default:** no
|
|
4
|
+
**Source:** built 2026-09-29 from live wellness trial accounts (a red-light trial clinic's published workflows, pipeline, calendar, products and custom values, read-only, plus two sister accounts running the same paid-trial-with-deposit offer) and the agency's own texting lessons. The messages follow the patterns that work in those accounts (who is texting and why, a clear YES / N ask, the deposit framing, the 72-hour close) in new wording: no message here copies the live text. Every template carries a `_source` note: `PATTERN:` (the live pattern it follows, described, never quoted) or `[NO REAL SOURCE: proposed]`.
|
|
5
|
+
|
|
6
|
+
## When it is selected
|
|
7
|
+
The cockpit industry **Wellness clinic** (`wellness-clinic`), the business types Wellness clinic, Red light therapy, Body contouring, IV therapy, IV hydration, Peptide clinic, Longevity clinic and Recovery studio, and the aliases `wellness`, `wellness_clinic`, `red_light`, `rlt`, `body_contouring`, `iv_therapy`, `peptides`. It never takes `cll` / `dbr` / `launch_event`: time-boxed launch events stay in the launch-event preset.
|
|
8
|
+
|
|
9
|
+
## What it builds
|
|
10
|
+
- **1 pipeline, 10 stages:** New Lead, Replied / Engaged, Booking Link Sent, Trial Booked, Trial Completed, Program Sold, No Program Yet - Follow Up, No Show, Not Interested, Lost / DND. A client's own stage list replaces it; every automation is mapped onto the client's stages (the follow-up workflow carries a `stagePreference` so a "No sale" stage is used).
|
|
11
|
+
- **13 custom fields:** lead source, service interest, body focus areas, goal timeline, screening confirmed, results vary understood, program recommended (names only, no prices), visit outcome, payment method (no text-to-pay), program value, appointment date, and the two SMS consent boxes (transactional and marketing, separate, unchecked).
|
|
12
|
+
- **36 tags, 17 custom values** (trial name, price, deposit, balance, balance link, address, programs; spots left and capacity only with the `launch_event` flag).
|
|
13
|
+
- **Trial calendar:** the calendar answer's length, else the intake's visit length, else 90 minutes; 24 hours' minimum notice, 1 per slot, the daily cap from the intake, and the clinic's screening text as its description. The deposit is a calendar payment product set in the UI (`handoff.deposit_product`). An optional 30-minute Program Consult calendar is built only when `goal.programConsult` is true.
|
|
14
|
+
- **Trial Request form:** name, email, optional phone, service interest, body focus, two consent boxes.
|
|
15
|
+
- **13 emails, 48 texts, 19 workflows.** A trial price of 0 or Free uses free-trial wording with no price, deposit or balance. A deposit or balance of 0, none or blank counts as none: the deposit-free texts and emails go instead, and the balance workflows, tags and hand-offs are not built. "Spots are limited" is said only when the intake says capacity really runs out.
|
|
16
|
+
|
|
17
|
+
## Workflows
|
|
18
|
+
|
|
19
|
+
| Workflow | Feature | Trigger | Pattern from |
|
|
20
|
+
|---|---|---|---|
|
|
21
|
+
| Speed to Lead | speed_to_lead | form_submission | ad-lead text + link follow-up |
|
|
22
|
+
| Missed Call Text-Back | missed_call | call_status (missed, inbound) | proposed |
|
|
23
|
+
| Lead Nurture (30 days) | nurture | contact_tag nurture-start | 9-text drip + proposed FAQ texts and emails |
|
|
24
|
+
| Win-back (30 days) | winback | contact_tag winback-start | reactivation drip, led by its best first text |
|
|
25
|
+
| Trial Booked - Confirm & Move | booking | appointment confirmed | booking confirmation |
|
|
26
|
+
| Trial Reminders | booking | appointment confirmed | appointment reminders |
|
|
27
|
+
| Trial Completed - Balance | booking | appointment showed (only with a balance) | balance on arrival |
|
|
28
|
+
| Trial Completed - Outcome | booking | appointment showed | visit showed |
|
|
29
|
+
| Trial Balance Paid | booking | payment_received (only with a balance; held DRAFT until scoped) | balance paid |
|
|
30
|
+
| Trial Canceled | booking | appointment cancelled | cancellation |
|
|
31
|
+
| No-Show Rescue | booking | appointment noshow | no-show text + proposed rescue |
|
|
32
|
+
| Reply BOOK - Send Booking Link | booking | exact reply BOOK | BOOK keyword |
|
|
33
|
+
| Program Follow-up (72 hours) | quote_followup | stage No Program Yet | 72-hour close |
|
|
34
|
+
| Review Request | review_requests | contact_tag service-complete | proposed |
|
|
35
|
+
| Replied - Stop & Route | foundation | any reply | any reply |
|
|
36
|
+
| Replied N - Not Interested | foundation | exact reply N list | soft opt-out |
|
|
37
|
+
| Replied STOP - Opt Out | foundation | exact reply STOP list | hard opt-out |
|
|
38
|
+
| Replied TEAM - Human Help | foundation | exact reply TEAM list | TEAM keyword |
|
|
39
|
+
| Program Sold - Confirm | foundation | stage Program Sold | program sale |
|
|
40
|
+
|
|
41
|
+
## The rules this preset keeps
|
|
42
|
+
- **Claims:** no outcome claim in the preset copy, never pain, inflammation, sleep, weight-loss or fat-loss. The live drip's health-claim text and its named testimonial are not carried. A client quote is never put into a message by the build, even with written permission: a consented quote is shown on the claims review hand-off for a person to read and add by hand.
|
|
43
|
+
- **GSM-7:** no em dashes, en dashes or curly quotes in any text; intake answers filled into texts are straightened too (`conventions.gsm7`).
|
|
44
|
+
- **Opt-out:** every marketing text carries its own line starting "Reply N"; the first text of a sequence puts N on its own line.
|
|
45
|
+
- **Keywords:** N, STOP, TEAM and BOOK are exact-match lists (the live account's own), never "contains".
|
|
46
|
+
- **Links:** booking links only through `{{custom_values.booking_link}}`, on a domain at least 30 days old (`handoff.link_domain`).
|
|
47
|
+
- **No text-to-pay for programs:** the only payment link any text carries is the trial balance.
|
|
48
|
+
- **Hand-offs are tags,** never `add_to_workflow`. A booking removes the lead from Speed to Lead, Lead Nurture, Win-back and No-Show Rescue (med-spa's shape), and Program Sold removes the 72-hour follow-up.
|
|
49
|
+
- **N and STOP never move a card.** N (exact: N, No thanks, Not interested; never a bare "No") tags and notes; STOP tags and turns on Do Not Disturb.
|
|
50
|
+
- **A consented client quote goes to a person, never straight into a text.** The claims review hand-off carries it, with anything obvious (a result or health claim, a name) already flagged.
|
|
51
|
+
|
|
52
|
+
## Known limits
|
|
53
|
+
- The Trial Balance Paid workflow cannot be limited to the balance product by the build; it stays DRAFT behind `handoff.balance_trigger`.
|
|
54
|
+
- The build cannot limit a card move to cards still before booking, so N and STOP leave the card where it is; the note asks staff to move a pre-booking card.
|
|
55
|
+
- Hand-off and task wording names the preset's stages (Program Sold, No Program Yet); on a client's own stage list the composer's mapping notes say which of their stages those are.
|