@sellable/mcp 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +12 -0
- package/.mcp.json +9 -0
- package/README.md +355 -0
- package/dist/api.d.ts +21 -0
- package/dist/api.js +73 -0
- package/dist/auth.d.ts +60 -0
- package/dist/auth.js +246 -0
- package/dist/engage-memory.d.ts +63 -0
- package/dist/engage-memory.js +354 -0
- package/dist/index-dev.d.ts +2 -0
- package/dist/index-dev.js +17 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +8 -0
- package/dist/server.d.ts +1 -0
- package/dist/server.js +499 -0
- package/dist/skills.d.ts +11 -0
- package/dist/skills.js +97 -0
- package/dist/tools/auth.d.ts +30 -0
- package/dist/tools/auth.js +124 -0
- package/dist/tools/blueprint-commit.d.ts +174 -0
- package/dist/tools/blueprint-commit.js +286 -0
- package/dist/tools/bootstrap.d.ts +64 -0
- package/dist/tools/bootstrap.js +246 -0
- package/dist/tools/campaigns.d.ts +589 -0
- package/dist/tools/campaigns.js +892 -0
- package/dist/tools/cells.d.ts +58 -0
- package/dist/tools/cells.js +48 -0
- package/dist/tools/context.d.ts +88 -0
- package/dist/tools/context.js +271 -0
- package/dist/tools/csv-domains.d.ts +73 -0
- package/dist/tools/csv-domains.js +464 -0
- package/dist/tools/csv-linkedin.d.ts +102 -0
- package/dist/tools/csv-linkedin.js +712 -0
- package/dist/tools/direct-campaigns.d.ts +240 -0
- package/dist/tools/direct-campaigns.js +250 -0
- package/dist/tools/engage-bootstrap.d.ts +94 -0
- package/dist/tools/engage-bootstrap.js +205 -0
- package/dist/tools/engage-discovery.d.ts +78 -0
- package/dist/tools/engage-discovery.js +150 -0
- package/dist/tools/engage-memory.d.ts +181 -0
- package/dist/tools/engage-memory.js +143 -0
- package/dist/tools/engage-state.d.ts +72 -0
- package/dist/tools/engage-state.js +62 -0
- package/dist/tools/enrichment.d.ts +167 -0
- package/dist/tools/enrichment.js +174 -0
- package/dist/tools/flow-preflight.d.ts +68 -0
- package/dist/tools/flow-preflight.js +138 -0
- package/dist/tools/framework.d.ts +44 -0
- package/dist/tools/framework.js +153 -0
- package/dist/tools/interaction-mode.d.ts +27 -0
- package/dist/tools/interaction-mode.js +102 -0
- package/dist/tools/leads.d.ts +2417 -0
- package/dist/tools/leads.js +2307 -0
- package/dist/tools/linkedin.d.ts +210 -0
- package/dist/tools/linkedin.js +229 -0
- package/dist/tools/navigation.d.ts +91 -0
- package/dist/tools/navigation.js +381 -0
- package/dist/tools/one-off.d.ts +229 -0
- package/dist/tools/one-off.js +273 -0
- package/dist/tools/processing.d.ts +70 -0
- package/dist/tools/processing.js +56 -0
- package/dist/tools/prompts.d.ts +211 -0
- package/dist/tools/prompts.js +210 -0
- package/dist/tools/provider-preflight.d.ts +21 -0
- package/dist/tools/provider-preflight.js +59 -0
- package/dist/tools/readiness.d.ts +261 -0
- package/dist/tools/readiness.js +510 -0
- package/dist/tools/rows.d.ts +126 -0
- package/dist/tools/rows.js +105 -0
- package/dist/tools/rubrics.d.ts +497 -0
- package/dist/tools/rubrics.js +681 -0
- package/dist/tools/senders.d.ts +44 -0
- package/dist/tools/senders.js +69 -0
- package/dist/tools/sequencer.d.ts +127 -0
- package/dist/tools/sequencer.js +194 -0
- package/dist/tools/tables.d.ts +35 -0
- package/dist/tools/tables.js +36 -0
- package/dist/tools/verify-row.d.ts +36 -0
- package/dist/tools/verify-row.js +38 -0
- package/dist/tools/workspaces.d.ts +140 -0
- package/dist/tools/workspaces.js +139 -0
- package/dist/utils/workspace-root.d.ts +1 -0
- package/dist/utils/workspace-root.js +39 -0
- package/package.json +46 -0
- package/skills/building-gtm-tables/SKILL.md +216 -0
- package/skills/building-gtm-tables/core/auto-execute.yaml +19 -0
- package/skills/building-gtm-tables/core/blueprint-schema.json +72 -0
- package/skills/building-gtm-tables/references/brief-to-blueprint.md +334 -0
- package/skills/building-gtm-tables/references/column-type-catalog.md +318 -0
- package/skills/building-gtm-tables/references/common-blueprints.fixtures.ts +199 -0
- package/skills/building-gtm-tables/references/common-blueprints.md +44 -0
- package/skills/building-gtm-tables/references/failure-taxonomy.md +197 -0
- package/skills/building-gtm-tables/references/uat-seed-prompts.md +37 -0
- package/skills/building-gtm-tables/references/verify-loop.md +74 -0
- package/skills/campaign-messages/SKILL.md +173 -0
- package/skills/campaign-messages/flow.v1.json +75 -0
- package/skills/craft-message/SKILL.md +401 -0
- package/skills/create-campaign/ARCHITECTURE.md +232 -0
- package/skills/create-campaign/DISCUSS.md +296 -0
- package/skills/create-campaign/FLOW_ASCII.md +240 -0
- package/skills/create-campaign/HOST-PARITY-CHECKLIST.md +49 -0
- package/skills/create-campaign/README.md +142 -0
- package/skills/create-campaign/SKILL.md +286 -0
- package/skills/create-campaign/context/README.md +67 -0
- package/skills/create-campaign/context/_TEMPLATE.md +12 -0
- package/skills/create-campaign/context/context.md +35 -0
- package/skills/create-campaign/context/learnings.md +16 -0
- package/skills/create-campaign/context/registry.json +19 -0
- package/skills/create-campaign/core/flow.v1.json +217 -0
- package/skills/create-campaign/core/policy.md +191 -0
- package/skills/create-campaign/core/providers/apollo.json +35 -0
- package/skills/create-campaign/core/providers/prospeo.json +34 -0
- package/skills/create-campaign/core/providers/registry.json +31 -0
- package/skills/create-campaign/core/providers/sales-nav.json +37 -0
- package/skills/create-campaign/core/providers/signal-discovery.json +42 -0
- package/skills/create-campaign/references/brief-template.md +64 -0
- package/skills/create-campaign/references/campaign-quality.md +84 -0
- package/skills/create-campaign/references/copy-calibration-examples.md +120 -0
- package/skills/create-campaign/references/offer-patterns.md +108 -0
- package/skills/create-campaign/references/provider-selection-strategy.md +212 -0
- package/skills/create-campaign/references/question-examples.md +167 -0
- package/skills/create-campaign/references/token-fill-examples.md +81 -0
- package/skills/create-campaign-brief/ARCHITECTURE.md +72 -0
- package/skills/create-campaign-brief/DISCUSS.md +64 -0
- package/skills/create-campaign-brief/README.md +176 -0
- package/skills/create-campaign-brief/SKILL.md +537 -0
- package/skills/create-campaign-brief/references/brief-synthesis-rules.md +100 -0
- package/skills/create-campaign-brief/references/brief-template.md +220 -0
- package/skills/create-campaign-brief/references/campaign-idea-options.md +30 -0
- package/skills/create-campaign-brief/references/copy-appendix-template.md +62 -0
- package/skills/create-campaign-brief/references/draft-lifecycle.md +23 -0
- package/skills/create-campaign-brief/references/examples/MANIFEST.json +89 -0
- package/skills/create-campaign-brief/references/examples/briefs/clover.md +223 -0
- package/skills/create-campaign-brief/references/examples/briefs/galley.md +222 -0
- package/skills/create-campaign-brief/references/examples/briefs/gelee.md +220 -0
- package/skills/create-campaign-brief/references/examples/briefs/hey-digital.md +234 -0
- package/skills/create-campaign-brief/references/examples/briefs/persona.md +231 -0
- package/skills/create-campaign-brief/references/examples/briefs/revvix.md +220 -0
- package/skills/create-campaign-brief/references/examples/briefs/sellable-dev.md +220 -0
- package/skills/create-campaign-brief/references/examples/briefs/superposition.md +233 -0
- package/skills/create-campaign-brief/references/examples/briefs/superpower.md +219 -0
- package/skills/create-campaign-brief/references/examples/briefs/westpark-villas.md +220 -0
- package/skills/create-campaign-brief/references/icp-lock-question-bank.md +43 -0
- package/skills/create-campaign-brief/references/messaging-inputs.md +58 -0
- package/skills/create-campaign-brief/references/output-acceptance-rubric.md +62 -0
- package/skills/create-campaign-brief/references/phase75-active-runtime-message-pack.md +248 -0
- package/skills/create-campaign-brief/references/phase75-canonical-brief-template.md +319 -0
- package/skills/create-campaign-brief/references/phase75-good-brief-and-messaging-examples.md +445 -0
- package/skills/create-campaign-brief/references/quick-research-protocol.md +39 -0
- package/skills/create-campaign-brief/references/reference-sheet-protocol.md +60 -0
- package/skills/create-campaign-brief/references/zero-shot-iteration-rules.md +66 -0
- package/skills/create-campaign-v2/SKILL.md +1619 -0
- package/skills/create-campaign-v2/core/auto-execute.README.md +219 -0
- package/skills/create-campaign-v2/core/auto-execute.yaml +121 -0
- package/skills/create-campaign-v2/core/flow.v2.json +1643 -0
- package/skills/create-campaign-v2/core/policy.md +82 -0
- package/skills/create-campaign-v2/references/ai-tells.md +253 -0
- package/skills/create-campaign-v2/references/approval-gate-framing.md +346 -0
- package/skills/create-campaign-v2/references/draft-lifecycle.md +110 -0
- package/skills/create-campaign-v2/references/escalation-ladder.md +119 -0
- package/skills/create-campaign-v2/references/filter-leads.md +495 -0
- package/skills/create-campaign-v2/references/final-handoff-contract.md +176 -0
- package/skills/create-campaign-v2/references/gold-standard-message-examples.md +394 -0
- package/skills/create-campaign-v2/references/gold-standard-message-patterns.md +314 -0
- package/skills/create-campaign-v2/references/gold-standard-message-validation-example.md +212 -0
- package/skills/create-campaign-v2/references/lead-validation-preview.md +172 -0
- package/skills/create-campaign-v2/references/parallel-critique-protocol.md +368 -0
- package/skills/create-campaign-v2/references/sample-validation-loop.md +289 -0
- package/skills/create-campaign-v2/references/step-13-import-leads.md +151 -0
- package/skills/create-campaign-v2/references/step-15-re-cascade.md +90 -0
- package/skills/create-campaign-v2/references/thomas-revision-filters.md +521 -0
- package/skills/create-campaign-v2/references/thomas-variant-selection.md +202 -0
- package/skills/create-campaign-v2/references/tier-routing-matrix.md +66 -0
- package/skills/create-campaign-v2/references/validation-criteria.md +367 -0
- package/skills/create-campaign-v2/references/watch-link-handoff.md +106 -0
- package/skills/create-campaign-v2-validation/SKILL.md +296 -0
- package/skills/create-post/SKILL.md +1308 -0
- package/skills/create-rubric/SKILL.md +251 -0
- package/skills/engage/SKILL.md +549 -0
- package/skills/engage/core/README.md +23 -0
- package/skills/engage/core/proven-searches.json +11 -0
- package/skills/engage/core/style-guide.template.md +47 -0
- package/skills/engage/core/tracked-people.json +10 -0
- package/skills/enrich-prospects/SKILL.md +97 -0
- package/skills/find-leads/SKILL.md +467 -0
- package/skills/generate-messages/SKILL.md +2361 -0
- package/skills/interview/SKILL.md +132 -0
- package/skills/interview/core/ENGAGE_STYLE_GUIDE.template.md +54 -0
- package/skills/interview/core/ICP.template.md +54 -0
- package/skills/interview/core/VOICE_PROFILE.template.md +101 -0
- package/skills/providers/apollo.md +520 -0
- package/skills/providers/prospeo.md +398 -0
- package/skills/providers/sales-nav.md +372 -0
- package/skills/providers/signal-discovery.md +495 -0
- package/skills/research/SKILL.md +258 -0
- package/skills/research/config.json +9 -0
- package/skills/research/override.md +13 -0
- package/skills/research-prospect/SKILL.md +99 -0
- package/skills/research-sender/SKILL.md +158 -0
- package/skills/workflow-sequences/SKILL.md +85 -0
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# Draft Lifecycle
|
|
2
|
+
|
|
3
|
+
Phase 84 validates the Phase 83 brief through chained artifacts in one draft
|
|
4
|
+
directory:
|
|
5
|
+
|
|
6
|
+
`.sellable/create-campaign-v2/drafts/{workspace-slug}/{campaign-slug}/`
|
|
7
|
+
|
|
8
|
+
Required files as the chain advances:
|
|
9
|
+
|
|
10
|
+
```text
|
|
11
|
+
brief.md
|
|
12
|
+
lead-review.md
|
|
13
|
+
lead-sample.json
|
|
14
|
+
lead-filter.md
|
|
15
|
+
message-validation.md
|
|
16
|
+
rubric.json # optional
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Artifact Roles
|
|
20
|
+
|
|
21
|
+
- `brief.md`
|
|
22
|
+
- stable Phase 83 thesis
|
|
23
|
+
- preserved during validation
|
|
24
|
+
- `lead-review.md`
|
|
25
|
+
- human-readable analysis of the preview run
|
|
26
|
+
- `lead-sample.json`
|
|
27
|
+
- machine-readable lead sample for filter and message validation
|
|
28
|
+
- `lead-filter.md`
|
|
29
|
+
- primary keep/exclude output for the middle step
|
|
30
|
+
- owns required keep rules, required exclude rules, sample false positives,
|
|
31
|
+
pass-rate judgment, and the final recommendation
|
|
32
|
+
- `rubric.json`
|
|
33
|
+
- optional implementation sidecar only
|
|
34
|
+
- must be derived from `lead-filter.md`, not designed separately
|
|
35
|
+
- `message-validation.md`
|
|
36
|
+
- final message check against the validated lead set
|
|
37
|
+
|
|
38
|
+
## Serial Step Order
|
|
39
|
+
|
|
40
|
+
Run in this order only:
|
|
41
|
+
|
|
42
|
+
1. find leads
|
|
43
|
+
2. filter leads
|
|
44
|
+
3. generate message
|
|
45
|
+
|
|
46
|
+
Do not skip ahead unless the required upstream artifacts already exist and are
|
|
47
|
+
complete.
|
|
48
|
+
|
|
49
|
+
## Atomic Writes
|
|
50
|
+
|
|
51
|
+
Every artifact edit must be written as:
|
|
52
|
+
|
|
53
|
+
1. read the current artifact if it exists
|
|
54
|
+
2. compute the full replacement contents
|
|
55
|
+
3. write `{artifact}.tmp`
|
|
56
|
+
4. rename `{artifact}.tmp` -> `{artifact}`
|
|
57
|
+
|
|
58
|
+
If the write fails before rename, the old artifact remains the valid state.
|
|
59
|
+
|
|
60
|
+
## Resume Rules
|
|
61
|
+
|
|
62
|
+
- `brief.md` only -> run `find leads`
|
|
63
|
+
- `lead-review.md` + `lead-sample.json` present -> run `filter leads` and
|
|
64
|
+
`generate message` from the same find-leads basis
|
|
65
|
+
- `lead-filter.md` present and `message-validation.md` missing -> run
|
|
66
|
+
`generate message`
|
|
67
|
+
- `message-validation.md` present and `lead-filter.md` missing -> run
|
|
68
|
+
`filter leads`
|
|
69
|
+
- `message-validation.md` + `lead-filter.md` present -> reconcile and stop,
|
|
70
|
+
validation complete
|
|
71
|
+
|
|
72
|
+
Invalid partial states must stop for repair:
|
|
73
|
+
|
|
74
|
+
- `lead-review.md` exists but `lead-sample.json` is missing
|
|
75
|
+
- `lead-sample.json` exists but `lead-review.md` is missing
|
|
76
|
+
- `lead-filter.md` exists without both upstream lead artifacts
|
|
77
|
+
- approval packet or commit gate exists without both `message-validation.md`
|
|
78
|
+
and `lead-filter.md`
|
|
79
|
+
|
|
80
|
+
## Revision Rules
|
|
81
|
+
|
|
82
|
+
- `revise-brief`
|
|
83
|
+
- preserve `brief.md`
|
|
84
|
+
- delete `lead-review.md`
|
|
85
|
+
- delete `lead-sample.json`
|
|
86
|
+
- delete `lead-filter.md`
|
|
87
|
+
- delete `message-validation.md`
|
|
88
|
+
- delete `rubric.json` if present
|
|
89
|
+
- `revise-leads`
|
|
90
|
+
- delete `lead-review.md`
|
|
91
|
+
- delete `lead-sample.json`
|
|
92
|
+
- delete downstream artifacts (`lead-filter.md`, `message-validation.md`, `rubric.json`)
|
|
93
|
+
- `revise-filter`
|
|
94
|
+
- preserve lead preview artifacts
|
|
95
|
+
- delete `lead-filter.md`
|
|
96
|
+
- delete `message-validation.md`
|
|
97
|
+
- delete `rubric.json` if present
|
|
98
|
+
- `revise-message`
|
|
99
|
+
- preserve upstream artifacts
|
|
100
|
+
- delete `message-validation.md`
|
|
101
|
+
|
|
102
|
+
## No-Mutation Boundary
|
|
103
|
+
|
|
104
|
+
During Phase 84, the artifact chain is local draft state only. Do not:
|
|
105
|
+
|
|
106
|
+
- create or update a `CampaignOffer`
|
|
107
|
+
- import leads
|
|
108
|
+
- persist a selected lead list
|
|
109
|
+
- create workflow rows
|
|
110
|
+
- attach sequences
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# Escalation Ladder
|
|
2
|
+
|
|
3
|
+
This reference governs when the Plan 85-02 autonomous tail STOPS and returns
|
|
4
|
+
control to the user. Load this file whenever the tail needs to decide
|
|
5
|
+
between continuing autonomously, retrying, or escalating.
|
|
6
|
+
|
|
7
|
+
## Principle
|
|
8
|
+
|
|
9
|
+
The autonomous tail is optimistic but not reckless. It retries bounded
|
|
10
|
+
transient failures, diagnoses whether a bad signal is a brief problem or a
|
|
11
|
+
list problem, and escalates cleanly when autonomous correction would either
|
|
12
|
+
loop indefinitely or silently ship bad state.
|
|
13
|
+
|
|
14
|
+
Escalation is a first-class exit — not a failure. A clean escalation leaves
|
|
15
|
+
the campaign resumable, preserves `CampaignOffer.currentStep` at the failing
|
|
16
|
+
step, and surfaces an actionable options menu.
|
|
17
|
+
|
|
18
|
+
## Escalation Conditions
|
|
19
|
+
|
|
20
|
+
Stop the autonomous tail and escalate to the user when any of the following
|
|
21
|
+
fire. The list is intentionally ordered from loudest to quietest — when
|
|
22
|
+
multiple could fire, pick the loudest.
|
|
23
|
+
|
|
24
|
+
1. **Zero leads imported** (Step 13 `import_leads` returned 0 usable rows).
|
|
25
|
+
Hard fail. There is nothing to validate, nothing to message.
|
|
26
|
+
2. **Sender missing or disabled** at any tail step that needs it
|
|
27
|
+
(sequence attach, messaging, greenlight). Hard fail — no send path.
|
|
28
|
+
3. **Sequence validation fails** (attach step rejects the sequence). Hard
|
|
29
|
+
fail with the sequence error surfaced verbatim.
|
|
30
|
+
4. **`save_rubrics` was already bypassed** and the rubric step produces
|
|
31
|
+
unusable results. The rubric never fired — the tail cannot make a
|
|
32
|
+
brief-vs-list decision without it.
|
|
33
|
+
5. **List problem diagnosed** in Step 14 (sample is overwhelmingly outside
|
|
34
|
+
ICP, or enrichment yields blanks). Do NOT auto-revise the brief; the
|
|
35
|
+
list itself needs operator attention. See
|
|
36
|
+
`references/sample-validation-loop.md` for the brief-vs-list decision
|
|
37
|
+
tree.
|
|
38
|
+
6. **`revisionRound > maxRevisionRounds`** (default cap is 3). The loop
|
|
39
|
+
tried and failed `maxRevisionRounds` times; one more try is not going
|
|
40
|
+
to change the outcome. On stale resume the counter does NOT reset —
|
|
41
|
+
see Resume Counter Rule below.
|
|
42
|
+
7. **Same tool + same error repeats** beyond `retry.sameToolSameError`
|
|
43
|
+
(default 2). The fourth retry of the same enrichment 5xx is thrash.
|
|
44
|
+
8. **User greenlight on a failed or paused campaign**. If the user says
|
|
45
|
+
"start" but the campaign is in an error/paused state that the skill
|
|
46
|
+
cannot atomically recover from, refuse the start and surface why.
|
|
47
|
+
|
|
48
|
+
## Diagnosis Before Escalation
|
|
49
|
+
|
|
50
|
+
When the tail hits a sample-validation trip (projectedPass <
|
|
51
|
+
minProjectedPass), it MUST diagnose before escalating or revising:
|
|
52
|
+
|
|
53
|
+
- **Brief problem** → autonomous `update_campaign_brief` with the
|
|
54
|
+
specific diagnostic, rerun sample. Loop counter increments.
|
|
55
|
+
- **List problem** → STOP. Escalate with an explicit "the sourced list
|
|
56
|
+
looks bad — revise leads or start over" message. Never auto-revise
|
|
57
|
+
leads.
|
|
58
|
+
- **Unknown** → STOP. Escalate rather than guess which revision path
|
|
59
|
+
would help.
|
|
60
|
+
|
|
61
|
+
The diagnosis itself is logged (which path was chosen and why) so
|
|
62
|
+
`auto-execute.yaml` tuning has real evidence later.
|
|
63
|
+
|
|
64
|
+
## Resume Counter Rule
|
|
65
|
+
|
|
66
|
+
`revisionRound` persists across skill resume. If a session closes with the
|
|
67
|
+
counter at 2 and the user reopens and resumes, the counter is still at 2 —
|
|
68
|
+
ONE more revision round is allowed before the 3-round cap trips. Stale
|
|
69
|
+
resume must still respect the cap. Do NOT reset to 0 on resume.
|
|
70
|
+
|
|
71
|
+
The counter lives with the campaign draft/committed metadata, not in
|
|
72
|
+
volatile session state.
|
|
73
|
+
|
|
74
|
+
## Retry vs Escalate
|
|
75
|
+
|
|
76
|
+
Bounded retries are fine. Infinite retries are not. Rules of thumb:
|
|
77
|
+
|
|
78
|
+
- **Retry** a single transient error on the same tool up to
|
|
79
|
+
`retry.sameToolSameError` (default 2). Includes 5xx, socket timeout,
|
|
80
|
+
rate-limit 429 with backoff.
|
|
81
|
+
- **Escalate** when the error is the same tool + same error code
|
|
82
|
+
beyond the cap, or when the tool is returning 4xx auth/permission
|
|
83
|
+
errors that won't change on retry.
|
|
84
|
+
- **Diagnose, then revise or escalate** when the tool succeeded but the
|
|
85
|
+
result is low-quality (rubric pass rate collapses, tokens cannot
|
|
86
|
+
resolve on the sample). Do not retry the same sample — the sample
|
|
87
|
+
itself is the signal, not the tool.
|
|
88
|
+
|
|
89
|
+
## Escalation Output
|
|
90
|
+
|
|
91
|
+
When escalating, the skill:
|
|
92
|
+
|
|
93
|
+
1. Writes the last diagnostic + revision history to the workflow-table
|
|
94
|
+
`Notes` column or a skill-level artifact so the operator can see what
|
|
95
|
+
was tried.
|
|
96
|
+
2. Leaves `CampaignOffer.currentStep` at the failing step (so resuming
|
|
97
|
+
the skill picks up exactly where it stopped — no silent rollback, no
|
|
98
|
+
silent advance).
|
|
99
|
+
3. Re-surfaces the watch link using `references/watch-link-handoff.md`.
|
|
100
|
+
4. Presents an actionable options menu via `AskUserQuestion`:
|
|
101
|
+
- `revise-brief` — go back to Phase 83/84 brief editing
|
|
102
|
+
- `revise-leads` — go back to Phase 84 find-leads
|
|
103
|
+
- `abort` — stop and clean up (moves committed dir under `.aborted/`
|
|
104
|
+
if the user wants to cold-start)
|
|
105
|
+
- `resume-from-<step>` — retry from the failing step (e.g.
|
|
106
|
+
`resume-from-validate-sample`), useful when the operator corrected
|
|
107
|
+
something externally (e.g. re-enabled a sender)
|
|
108
|
+
|
|
109
|
+
## Hard Rules
|
|
110
|
+
|
|
111
|
+
- A list problem NEVER triggers an autonomous `update_campaign_brief`.
|
|
112
|
+
Brief revision is for brief-shaped failures only.
|
|
113
|
+
- The revision-round counter NEVER resets on resume.
|
|
114
|
+
- Escalation NEVER silently rolls back campaign state. The campaign row
|
|
115
|
+
exists; only `currentStep` tells us where to resume.
|
|
116
|
+
- The watch link IS re-surfaced on escalation so the user can inspect
|
|
117
|
+
state directly.
|
|
118
|
+
- Escalation is not an error in the sense that the skill crashed — it's
|
|
119
|
+
a planned exit. Surface it calmly.
|