@sellable/mcp 0.1.127 → 0.1.129

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.
@@ -50,8 +50,10 @@ template, senderIds, sequence template, and running state.
50
50
  There is no separate approval-packet, commit-gate, or mint step in the active
51
51
  shell-first flow. The campaign exists early for watch mode. The hard boundary
52
52
  is import/enrichment: no leads are imported, no workflow cells are queued, no
53
- sequence is attached, and nothing starts until the source is selected, rubrics
54
- are saved, and the approved message set is synced into the campaign brief.
53
+ sequence is attached, and nothing starts until the source is selected, filter
54
+ choice is resolved, rubrics are saved when filters are enabled, and Messages
55
+ has either approved template/token rules or selected the product's AI-generated
56
+ path.
55
57
  </objective>
56
58
 
57
59
  <files>
@@ -96,8 +98,8 @@ Optional debug/UAT draft directory, disabled in normal customer runs:
96
98
  state. Use `create-offer` for the brief, `pick-provider` or the selected
97
99
  provider step while sourcing, `filter-choice` after the 15-row review batch is
98
100
  imported, `messages`/`auto-execute-messaging` for message work,
99
- `validate-sample` for the 15-row validation cascade, and
100
- `awaiting-user-greenlight` for Settings. Do not advance `currentStep` backward.
101
+ `awaiting-user-greenlight` for Settings, and `validate-sample` only for
102
+ recovery/legacy validation if reached. Do not advance `currentStep` backward.
101
103
  - After the shell is minted, normal resume paths read the CampaignOffer first.
102
104
  Use debug files to explain or reconstruct work, not to decide whether a
103
105
  post-mint gate is allowed. validation/debug artifacts are not durable campaign
@@ -442,11 +444,12 @@ brief`, `Revise target`, `Revise offer/proof`, and `Other / custom`.
442
444
  not given a specific source direction, use the default sequential source
443
445
  funnel:
444
446
  `Cool. I'm going to find people who are both a good fit and active enough to
445
- be worth a LinkedIn test. I'll start with warm LinkedIn post engagement because
446
- that gives the strongest message context if enough ICP-looking people are
447
- engaging. If that does not clear a quick viability check, I'll switch to Sales
448
- Nav with recent activity, then broader Sales Nav, and use Prospeo only as the
449
- fallback. No leads import until you approve the source.`
447
+ be worth a LinkedIn test. I'll start with people engaging with relevant LinkedIn
448
+ posts because that gives the strongest message context if enough ICP-looking
449
+ people are engaging. If that does not clear a quick viability check, I'll switch
450
+ to Sales Nav to find ICP people actively posting on LinkedIn, then search by
451
+ titles, and use Prospeo for a broader account/contact path. No leads import
452
+ until you approve the source.`
450
453
  The watched campaign should still be on Pick Provider while this source logic
451
454
  is being explained. If the default first lane is Signal Discovery, say clearly
452
455
  that Codex is about to test Signal Discovery as a viability path, not import
@@ -463,19 +466,23 @@ fallback. No leads import until you approve the source.`
463
466
  - explicit compare request -> compare only the requested sources
464
467
  - In watch mode, do not skip the Pick Provider checkpoint. First move the
465
468
  campaign to `pick-provider` and narrate the source-selection reasoning there.
466
- After that visible checkpoint, move the campaign to the first source lane that
467
- will actually be tested (`signal-discovery`, `sales-nav`, `prospeo`, or the
469
+ While the watched browser is still on Pick Provider, ask for approval before
470
+ starting Signal Discovery or a user-directed first lane. After that visible
471
+ checkpoint and approval, move the campaign to the first source lane that will
472
+ actually be tested (`signal-discovery`, `sales-nav`, `prospeo`, or the
468
473
  user-directed lane), then run the campaign-attached provider prompt + provider
469
474
  search in the parent thread with `campaignOfferId`, `confirmed: true`, and
470
- `currentStep` when the tool accepts it. If that lane fails the quick viability
471
- gate, update the campaign step and watchNarration before trying the next lane
472
- so the user sees the source switch happen in the app.
475
+ `currentStep` when the tool accepts it. If that lane has timeout/error, zero
476
+ raw results, weak ICP fit, or weak message context, update the campaign step
477
+ and watchNarration before trying the next approved lane or ask the user to
478
+ revise the source/target before import. All lanes failed is a terminal
479
+ revise-source state, not an import state.
473
480
  - After the lead sample/source decision is ready and approved,
474
481
  show the next progress line:
475
482
  `Lead source is set. I'll import the first 15-row review batch into the
476
- campaign table, then add fit filters and draft the first message from that same
477
- sample. You can inspect filters once they are saved, but enrichment and message
478
- checks wait until the message draft is ready and approved.`
483
+ campaign table, then ask you to Choose filters or skip. I may let the Message
484
+ Draft Builder prepare a template in the background, but template review waits
485
+ until the filter choice is resolved and you choose Use Template.`
479
486
  - During long post-intake work, show concise progress checkpoints before the
480
487
  next expensive stage: source being checked, source switch/tradeoff if any,
481
488
  lead sample usable, filter/message drafting, and message-review rule loading.
@@ -517,17 +524,19 @@ checks wait until the message draft is ready and approved.`
517
524
  candidate messages and element tests, but it cannot select the final winner
518
525
  and cannot override `lead-filter.md`.
519
526
  - `message-validation.md` is the internal validation artifact produced by the
520
- user-facing `message generation` stage.
527
+ Message Draft Builder / `message generation` stage. It is provisional until
528
+ the user answers filter choice and then chooses Use Template in Messages.
521
529
  - `message-review.md` and `message-review-decision.md` are the mandatory
522
530
  message quality gate outputs between `message-validation.md` and
523
531
  `approval-packet.md`.
524
532
  - Run the dependency chain as a DAG: `create-campaign-brief` -> `find leads` ->
525
533
  bounded import/confirm. Once the source decision, lead sample, and campaign
526
- table `workflowTableId` exist, the normal path is the
527
- `post-lead-workstreams` step. Launch `filter leads` and `message generation`
528
- from the same basis (live campaign brief, source decision, lead sample, and
529
- the imported review-batch rows) as separate workstreams when the host exposes
530
- the named Sellable post-find-leads agents or real background work.
534
+ table `workflowTableId` exist, the normal path is the `filter-choice` user
535
+ gate. If the user chooses filters, `post-lead-workstreams` launches filter
536
+ leads and can let the Message Draft Builder run from the same basis (live
537
+ campaign brief, source decision, lead sample, and the imported review-batch
538
+ rows) as separate workstreams when the host exposes the named Sellable
539
+ post-find-leads agents or real background work.
531
540
  First call `get_post_find_leads_scout_registry` and use the returned
532
541
  canonical `name` values only when those names are available in the current
533
542
  runtime. In Claude Code, use both returned Task/Agent subagents in the same
@@ -538,14 +547,19 @@ checks wait until the message draft is ready and approved.`
538
547
  context. Do not surface agent install status to the customer. The existing
539
548
  `filter-rubric` and `message-generation` steps remain focused retry and
540
549
  resume targets.
541
- - Message generation does not need `lead-filter.md` to start. The moment the
542
- bounded review batch is imported and `workflowTableId` is ready, start the
543
- message-generation workstream from the live campaign brief, source decision,
544
- lead sample, and the imported campaign table sample. It can prepare
545
- proof inventory, token strategy, and candidate angles while filter-leads
546
- tightens keep/exclude rules. Approval still waits for both `lead-filter.md`
547
- and `message-validation.md`, then reconciles that the selected message basis
548
- rows still pass the final filter.
550
+ - Message generation does not need `lead-filter.md` to start, but it is only
551
+ background template drafting until the user reaches Messages. The moment the
552
+ bounded review batch is imported, `workflowTableId` is ready, and the user is
553
+ on/after filter choice, the Message Draft Builder may start from the live
554
+ campaign brief, source decision, lead sample, and imported campaign table
555
+ sample. It can prepare proof inventory, token strategy, and candidate angles
556
+ while filter-leads tightens keep/exclude rules. Template review cannot start
557
+ until filter choice is answered and the user chooses Use Template. If filters
558
+ are enabled, template review is locked until rubrics are saved, a bounded
559
+ filter run has usable passing/probably passing rows, and the draft reconciles
560
+ to those rows. Prefer at least 2 usable passing rows; if only 1 passes, show
561
+ weak-sample copy and ask whether to continue, revise, import more, or skip
562
+ filters.
549
563
  If a legacy/resume host starts message prep from preview rows before import,
550
564
  it still needs at least 3 probable good-fit rows and must reconcile the final
551
565
  winner against the imported review batch before message review.
@@ -557,29 +571,19 @@ checks wait until the message draft is ready and approved.`
557
571
  provisional candidate work from probable good-fit rows in `lead-sample.json`,
558
572
  but the final `message-validation.md` winner must cite basis rows from
559
573
  `lead-sample.json` that still pass `lead-filter.md`.
560
- - Parallel means real parallel execution, not optimistic progress copy. For the
561
- lead-source scout, first call `get_source_scout_registry` and use the
562
- returned canonical `name` values. In Codex, explicitly spawn one named custom scout per
563
- credible source lane when those subagents are visible in the current runtime:
564
- `source-scout-linkedin-engagement`
565
- (display: LinkedIn Engagement Scout, powered by the `signal-discovery`
566
- provider prompt), `source-scout-sales-nav` (Sales Nav Scout), and
567
- `source-scout-prospeo-contact` (Prospeo Contact Scout). For Claude Code,
568
- invoke the generated `source-scout-*` Task/Agent subagents for all credible
569
- lanes in one assistant message only when the session exposes those names.
570
- They are installed from the same canonical Sellable agent registry and carry
571
- explicit Sellable MCP tool allowlists when `@sellable/install` is active. The
572
- parent thread should not preload every provider prompt before spawning scouts;
573
- each scout loads only its own provider prompt. If host subagents are
574
- unavailable or the names are not visible, use the same provider probes via
575
- independent MCP/tool calls in the parent thread or dedicated Sellable MCP
576
- tools that perform server-side `Promise.all` fan-out. Do not write "source
577
- scout agents are not installed" or similar host status into customer-facing
578
- output. If real parallel execution is not available or not allowed, run the
579
- same DAG sequentially and use honest copy: `I’ll tighten the filter first,
580
- then draft the message from the same sample.` Never say `kicking off two
581
- workstreams`, `in parallel`, or `background` unless parallel branches were
582
- actually launched.
574
+ - Parallel means real parallel execution, not optimistic progress copy. Source
575
+ scouting is sequential by default: start with the first recommended lane from
576
+ `flow.v2.json`, usually Signal Discovery / LinkedIn engagement. Only launch
577
+ multiple named source scouts when the user explicitly requested comparison, a
578
+ prior lane failed, or the active flow marks the first lane borderline. The
579
+ fallback order is plain: use Sales Nav to find ICP people who are actively
580
+ posting on LinkedIn; if that is not enough, search Sales Nav by titles; if
581
+ that is still not enough, use Prospeo for a broader account/contact path.
582
+ Before any source scout dispatch, call `get_source_scout_registry` and use the
583
+ returned canonical `name` values. The parent thread should not preload every
584
+ provider prompt; each scout loads only its own provider prompt. Do not write
585
+ "source scout agents are not installed" or similar host status into
586
+ customer-facing output.
583
587
  - Source scout parallelism must not hide all provider work from the watch UI.
584
588
  The parent thread owns the first visible provider search: call the chosen
585
589
  provider prompt/search with the minted CampaignOffer id and provider
@@ -612,15 +616,31 @@ workstreams`, `in parallel`, or `background` unless parallel branches were
612
616
  batch`, and a no-launch safety note. Do not leave the guide saying
613
617
  `source approved` or `I'll show the review-batch outcome` once import is
614
618
  starting.
615
- - After Lead Fit Builder saves rubrics, move the watched browser to Filter
616
- Leads before waiting for message work to finish. Persist
617
- `enableICPFilters: true`, `currentStep: "apply-icp-rubric"`, and
618
- `watchNarration.stage: "fit-message"` so the user can see fit filtering
619
- happen while the first message sample finishes. After message approval,
620
- persist `useMessagingTemplate: true` and keep `enableICPFilters: true`;
621
- sample validation then runs the review-batch cascade, and the user should be
622
- walked through fit results, generated message results, and
623
- Settings/sender/sequence handoff.
619
+ - After the bounded review batch is present, update the watched browser to
620
+ `currentStep: "filter-choice"` with `watchNarration.stage: "fit-message"` and
621
+ ask the user to Choose filters or skip. If import succeeds but row readback
622
+ returns zero rows, do not move to filter choice; keep the user in source/import
623
+ recovery and ask whether to retry import, import more from the approved
624
+ source, or revise source. Active filtering starts only after rubrics are
625
+ saved; do not say filtering the batch before rubrics are saved.
626
+ - When the user chooses filters, immediately persist `enableICPFilters: true`
627
+ and `currentStep: "create-icp-rubric"` so the watched app leaves the filter
628
+ choice screen and shows that Codex is defining the rules in chat. After Lead
629
+ Fit Builder saves rubrics, move the watched browser to Filter Leads before
630
+ waiting for message work to finish. Persist `currentStep:
631
+ "apply-icp-rubric"` and `watchNarration.stage: "fit-message"`, then read the
632
+ bounded review batch with `get_rows_minimal`, queue only pending/error
633
+ `enrichCellId` values with `queue_cells`, and then wait for rubric results
634
+ with at least one passing row. Do not call `check_rubric` in the normal
635
+ create-campaign-v2 path. The next user-facing Messages screen must show mode
636
+ choice first: Use Template and AI Generated. Use Template is recommended. AI
637
+ Generated is an explicit opt-out that cancels or ignores the background
638
+ template draft and must not let late template output overwrite campaign
639
+ state. Product Generate Message cells should not run from the background
640
+ template path until template/token rules are approved. After message approval,
641
+ update the campaign brief with an Approved Message Template containing
642
+ `{{...}}` tokens and keep `enableICPFilters: true`; Generate Message detects
643
+ template mode from those tokens, not from `useMessagingTemplate`.
624
644
  - During pre-import validation, do not call `check_rubric`; use the lead-filter
625
645
  artifacts and only use campaign-backed scoring after Step 13 imports the
626
646
  15-lead test batch.
@@ -666,7 +686,7 @@ batch`, and a no-launch safety note. Do not leave the guide saying
666
686
 
667
687
  <conditional_gates>
668
688
 
669
- There are four customer-visible gates in the net-new hosted flow:
689
+ There are six customer-visible gates in the net-new hosted flow:
670
690
 
671
691
  - `brief-review` asks whether to approve the rendered campaign brief before
672
692
  Find Leads starts. Do not skip this by inferring approval from setup
@@ -674,11 +694,17 @@ There are four customer-visible gates in the net-new hosted flow:
674
694
  - `lead-review` / source decision asks whether to approve the selected source
675
695
  path and sample before moving into filter/message work. Do not skip this by
676
696
  compressing the source decision into message review.
677
- - `message-review` is the mandatory pre-import message quality gate. It asks
678
- only whether to proceed with the selected message (`approve-message`) or run
679
- one more messaging revision (`revise-messaging`). `approve-message` authorizes
680
- syncing the approved message set into the campaign brief, saving rubrics,
681
- importing the bounded 15-lead test batch, and queueing/observing that sample.
697
+ - `filter-choice` asks whether to use filters or skip after the non-empty
698
+ review batch is imported. This is the first post-import user gate.
699
+ - `messages-mode-choice` asks whether to Use Template or choose AI Generated.
700
+ Use Template is recommended. AI Generated is an explicit opt-out that cancels
701
+ or ignores the background template draft.
702
+ - `message-review` is the mandatory template quality gate only when the user
703
+ chooses Use Template. It asks only whether to proceed with the selected
704
+ message (`approve-message`) or run one more messaging revision
705
+ (`revise-messaging`). `approve-message` authorizes syncing the approved
706
+ template/token rules into the campaign brief and queueing/observing the
707
+ review-batch cascade.
682
708
  - The sender/settings/sequence handoff is the launch gate. After message
683
709
  validation, use Settings to help the user connect or select a LinkedIn sender.
684
710
  Explain Slack reply review before launch. After sender selection, attach the
@@ -814,6 +840,12 @@ Required behavior:
814
840
  watched campaign moving, not to compare every plausible lane in parallel.
815
841
  Run only enough evidence for the current lane to pass or fail the quick gate,
816
842
  then stop on the first viable source unless the user asked to compare.
843
+ User-facing fallback copy should stay fifth-grade clear: people engaging with
844
+ relevant LinkedIn posts -> Sales Nav to find ICP people actively posting on
845
+ LinkedIn -> search by titles -> Prospeo for a broader account/contact path.
846
+ The older provider label `broader Sales Nav` maps to the plain-language
847
+ `search by titles` fallback; `Prospeo only as the fallback` maps to the
848
+ plain-language broader account/contact path. Keep user-facing copy simple.
817
849
  1. Start with LinkedIn Engagement / active LinkedIn posts (internal provider:
818
850
  Signals / `signal-discovery`) because recent engagement gives the strongest
819
851
  message context and expected reply-rate upside. Search intersection keyword
@@ -842,6 +874,10 @@ Required behavior:
842
874
  start with Signal Discovery. If they name titles/personas/company filters,
843
875
  start with Sales Nav. If they explicitly ask for a comparison, compare only
844
876
  those requested sources.
877
+ - failed or empty source lanes do not import leads. A timeout/error, zero raw
878
+ results, weak ICP fit, or weak message context must trigger the next approved
879
+ lane or a revision question before import. All lanes failed is a terminal
880
+ revise-source state, not an import state.
845
881
  - run source scouts in parallel only when the user explicitly requested a
846
882
  comparison, the current turn is resuming from already-started parallel scouts,
847
883
  or the first viable source is borderline and one cheap fallback check is
@@ -1237,30 +1273,50 @@ Do not:
1237
1273
 
1238
1274
  ## Step 3: Generate Message
1239
1275
 
1240
- Step 3 is orchestrated by the main thread and executed either by the
1241
- `post-find-leads-message-scout` worker or by the parent-thread fallback. The
1242
- worker carries the campaign-launch message rules in its agent prompt. The
1243
- parent-thread fallback must load the small safety-gate reference before writing
1244
- message artifacts:
1276
+ Step 3 is the Message Draft Builder path. It is orchestrated by the main thread
1277
+ and executed either by the `post-find-leads-message-scout` worker or by the
1278
+ parent-thread fallback. The worker and fallback must load the full
1279
+ `generate-messages` prompt with `get_subskill_prompt` and use it as the drafting
1280
+ contract. The small safety-gate reference is only a supplemental approval
1281
+ check, not a replacement for the long message workflow:
1245
1282
 
1246
1283
  ```
1284
+ mcp__sellable__get_subskill_prompt({ subskillName: "generate-messages", offset, limit }) until hasMore=false
1247
1285
  mcp__sellable__get_subskill_asset({ subskillName: "create-campaign-v2", assetPath: "references/message-review-safety-gate.md" })
1248
1286
  ```
1249
1287
 
1250
- Do not load the full long-form `generate-messages` subskill in
1251
- `create-campaign-v2`. The safety-gate asset is a parent-thread compatibility
1252
- path for hosts that cannot launch `post-find-leads-message-scout`, not a
1253
- generate-message fast-mode prompt and not the preferred route. If the safety gate
1254
- is missing a needed campaign-specific rule or the draft fails quality gates, stop
1255
- at `revise-messaging` with the exact failure instead of pulling the long prompt
1256
- into the main thread.
1257
-
1258
- Do NOT proceed to Step 4 (message review gate) unless `message-validation.md`
1259
- contains the safety-gate required sections, a raw sendable Selected Winner, and an
1260
- explicit single-first-send PASS. If `message-validation.md` contains post-accept
1261
- DM, follow-up, second-touch, cadence, branch, or other sequence-shaped copy, do
1262
- not summarize it as ready; route back to message-generation and require a
1263
- single first outbound send.
1288
+ Use campaign state, campaign brief content, selected source state, and the
1289
+ selected/imported review-batch rows as the source of truth. Do not read
1290
+ `brief.md`, `lead-review.md`, or `lead-sample.json` as required state in the
1291
+ normal live campaign path; those files are optional debug context only. If the
1292
+ long prompt plus safety gate cannot safely approve the draft, stop at
1293
+ `revise-messaging` with the exact failure.
1294
+
1295
+ Do NOT proceed to Step 4 (message review gate) unless the user has answered
1296
+ filter choice, the Messages step has shown the mode choice, the user chose Use
1297
+ Template, and `message-validation.md` contains the safety-gate required
1298
+ sections, a raw sendable Selected Winner, and an explicit single-first-send
1299
+ PASS. If the user reaches Messages and chose Use Template before the draft is
1300
+ ready, say you are waiting for the Message Draft Builder and do not ask for
1301
+ approval. If the draft worker fails, produces no usable message, or has no known
1302
+ worker status, require retry/regenerate copy instead of approval copy. If
1303
+ `message-validation.md` contains post-accept DM, follow-up, second-touch,
1304
+ cadence, branch, or other sequence-shaped copy, do not summarize it as ready;
1305
+ route back to message-generation and require a single first outbound send.
1306
+
1307
+ Messages first shows mode choice:
1308
+
1309
+ 1. Use Template (recommended): wait for and review the Message Draft Builder
1310
+ template. If filters are enabled, lock this review until saved rubrics and a
1311
+ bounded filter run produce usable passing/probably passing rows. Prefer at
1312
+ least 2 usable passing rows; if only 1 passes, use weak-sample copy and ask
1313
+ whether to continue, revise, import more, or skip filters.
1314
+ 2. AI Generated: this is an explicit opt-out. Cancel or ignore the background
1315
+ template draft and prevent late template output from overwriting campaign
1316
+ state.
1317
+
1318
+ Product Generate Message cells should not run from the background template path
1319
+ until template/token rules are approved.
1264
1320
 
1265
1321
  After the main-chat message approval, update_campaign_brief writes `## Approved
1266
1322
  Message Template` with `{{...}}` tokens before any Generate Message cascade is
@@ -230,31 +230,24 @@ setting: `~/.codex/config.toml` with
230
230
 
231
231
  ## Parallelism + Naming
232
232
 
233
- Source-angle comparison should be real, not implied. When the source is not
234
- supplied and multiple source angles are viable, scout Signals, Sales Nav, and
235
- relevant domain/contact paths as independent branches when the host can do so.
236
- Call `get_source_scout_registry` first and use the returned canonical `name`
237
- values; the names below are the current registry entries. In Codex, explicitly
238
- spawn named custom scouts in the same turn when the current runtime exposes
239
- them:
240
- `source-scout-linkedin-engagement` (LinkedIn Engagement Scout, backed by the
241
- `signal-discovery` provider prompt), `source-scout-sales-nav` (Sales Nav Scout), and
242
- `source-scout-prospeo-contact` (Prospeo Contact Scout) for the credible lanes. Codex
243
- does not infer subagent fan-out from generic "compare paths" wording. In Claude
244
- Code, invoke the generated `source-scout-linkedin-engagement`, `source-scout-sales-nav`,
245
- and/or `source-scout-prospeo-contact` Task/Agent subagents in one assistant
246
- message only when the session lists those names, so Claude can run the source
247
- lanes concurrently/background. These agents come from the same canonical
248
- Sellable registry and must load their matching provider prompt before
249
- searching. The parent thread should not fetch every provider prompt first; that
250
- burns time and often degenerates into parallel tool calls instead of true
251
- subagents. When asking the user to approve a brief with Sellable finding leads,
252
- use an explicit label like `Approve brief + use background source scouts` only
253
- when the current runtime exposes the named agents; otherwise use `Approve brief
254
-
255
- - compare source paths`. If the host runs them sequentially or the named agents
256
- are absent, keep the output numeric but do not claim the source scout was
257
- parallel or surface install status to the customer.
233
+ Source selection is sequential by default. Start with the first recommended
234
+ source lane from `flow.v2.json`; for the current campaign shape that is usually
235
+ Signal Discovery / LinkedIn engagement. Only try the next fallback after the
236
+ current lane is not viable, the user asks for a comparison, or the first lane is
237
+ borderline and needs a second source to avoid a bad recommendation. The fallback
238
+ order must stay plain: use Sales Nav to find ICP people who are actively posting
239
+ on LinkedIn; if that is not enough, search Sales Nav by titles; if that is still
240
+ not enough, use Prospeo for a broader account/contact path.
241
+
242
+ Source-angle comparison should be real, not implied. Call
243
+ `get_source_scout_registry` before dispatching source scouts and use the
244
+ returned canonical `name` values. In Codex or Claude Code, launch multiple named
245
+ source scouts in the same turn only when the user explicitly requested source
246
+ comparison, a prior lane failed, or the active flow marks the first lane as
247
+ borderline. The parent thread should not fetch every provider prompt first; each
248
+ scout loads only its matching provider prompt. If source work is sequential,
249
+ keep the output numeric but do not claim the source scout was parallel or
250
+ surface install status to the customer.
258
251
 
259
252
  For post-lead work, call `get_post_find_leads_scout_registry` after source
260
253
  approval and use the returned canonical `name` values. Launch both returned