Full executor contractExact IDs, evidence and boundaries
# Prepare remaining leads for three campaigns
End goal: Maximize the number of remaining eligible leads from the existing 1,200-row cohort, with three disjoint campaign-specific import packages and an updated existing review table.
End state: Every one of the frozen 1,200 IDs is reconciled as previously imported/excluded, newly ready and assigned exactly once, or held with a reason. No import or prospect message happens in this preparation run.
## Supplied read-only preflight, 2026-09-30
These are source observations, not a council recheck. At execution start refresh campaign IDs, creation order, states, templates and row versions. Record whether the fixed targets below remain the intended two newest copies. Do not silently switch to different campaigns if recency has changed; hold only affected assignments for a target decision.
- Canonical run clientsflow-scale1200-20260928: 1,200 review rows, 148 IN_CAMPAIGN, 590 INSTANTLY_READY, 462 HELD. These are stored statuses, not a fresh approval to import.
- Target A: 81961204-ba22-4e24-95d9-e995c90ff8b1, v4_contractors_objektiv_20260923_reviewed_a, active.
- New target 1: 82957456-32d9-488b-a5c8-6c4a21b2e436, tegeződő-1, draft.
- New target 2: c63a9806-7c73-425a-89a0-1e1d04d1ac07, tegeződő-2, draft.
- Latest two copies use literal key domainnev,hu. Their first sentence uses business_noun and personalisation1 with third-person foglalkozik.
- The user approved other-service businesses in the previous import. Do not apply a construction-only restriction.
## Deliverables and observable criteria
1. Freeze and reconcile the remaining cohort.
- When the canonical 1,200-row snapshot is compared with refreshed workspace memberships, sent/manual history, blocklist, CRM and historical company/domain aliases, then cohort.json and reconciliation.json account for every original source ID exactly once and isolate all current imports/prior contacts/exclusions from candidates. Assert the frozen ID set equals the final disjoint disposition set, zero IDs are missing or duplicated, and final imported/prior-contact/excluded, newly ready, and held counts sum to exactly 1,200. Stored readiness alone never qualifies a row.
- When saved row versions and human edits are compared before and after processing, then the preservation report shows exact retained edits or explicit, recoverable conflict holds.
- Constraints: no new source cohort or substitution; no blanket bypass of holding-list membership or historical exclusions.
2. Maximize defensible import readiness.
- When all remaining candidate rows are evaluated against current valid-email receipts, unique email/company/domain, site identity and exact saved evidence, then ready.json contains only passing rows and holds.csv names each failed gate.
- When a held row is recovered, then its report includes a new valid receipt or precise corrected evidence; unresolved paid outcomes stay held and cached successful work is reused.
- Constraints: no catch-all/unknown treated as valid and no invented freshness; preserve paid caches, human text and reservations. No new AI pass per already-correct row. Resolve name-email conflict with source evidence or Szép napot, never a guessed name.
3. Produce exact variables and three packages.
- When each verified website is normalized with the deterministic domain formatter, then literal CSV/JSON key domainnev,hu contains example,hu for https://www.example.hu/path and example,com for https://example.com, preserving intentional comma and suffix. Multi-part suffix behavior must be explicit and fixture-tested. No scheme, path, query, port or www remains. Unsupported/ambiguous website identity is held.
- When all current email subjects and body variants from each fixed campaign ID are rendered for every assigned lead, then render-report.json shows nonempty exact variables, correct P1 sentence placement and no unresolved merge fields; RANDOM syntax is handled separately. Support documented standard RANDOM blocks, including embedded variables. Report unsupported nested RANDOM or malformed copy without silently rewriting it. The supplied first-email excerpt uses `{{RANDOM webfejlesztőként… | …}}`, while the documented form begins `{{RANDOM | …}}`; inspect actual saved copy and record any syntax discrepancy as a campaign-level readiness limit.
- When the passing rows are split, then A.csv, tegezodo-1.csv and tegezodo-2.csv cover each newly ready row exactly once with counts differing by at most one when every row is compatible with all three targets. Define compatibility as passing that campaign’s complete current subject/body variant renders and required-field gates. Record the row-by-target eligibility matrix. Use deterministic source-ID ordering and a documented allocation algorithm that minimizes the maximum-minus-minimum count under those constraints; report any unavoidable imbalance and excluded row/target pairs. Manifest binds source ID, campaign ID, row version, payload hash and receipts. Literal header domainnev,hu is properly CSV-quoted and round-trips unchanged. Include greeting, personalisation1, business_noun, first_name where proven, company, website and email.
- Constraints: no campaign or existing lead writes, imports, activation or sends; preserve the exact comma key, current user copy and existing P1 edits. Do not silently map it to domain_variable. Instantly’s current CSV troubleshooting guidance advises headers without special characters, so a correct local CSV round-trip is not provider compatibility proof. Preserve the exact key. Seek existing read-only payload and no-send Preview evidence for each target, separately recording storage, render and importer evidence. Never import/create a test lead or send a test email in this run. If support remains unproved, label provider import/rendering unverified and packages not fully import-ready. Finish all independent preparation and state this exact handoff gap.
4. Extend the existing table and prove handoff.
- When the existing /prepare1200/ table is opened and refreshed, then it shows planned destination campaign, exact comma-domain value, ready/held/imported counts and export links without relabelling planned rows as In campaign. Screenshot, blind Luna high description and parent comparison prove this UI criterion.
- When exports are downloaded and compared with current saved table rows, then a script proves identity/count/variable parity, disjoint campaign assignments and no silent lost edit. Immediately before handoff, re-read current table row versions and content hashes against the manifest. Any edit after freeze invalidates its package until rebuilt; visibly mark stale downloads invalid. A final parity pass must show zero stale rows.
- Constraints: use existing table, annotations and inline editors; no replacement app, token/login layer or private evidence published on the public goal board.
## Execution and authority
- PREPARE / READY FOR REVIEW. Do not create or queue execution until a later explicit Launch after board review, per the user-supplied LLL gate.
- Before starting any producer on Launch, check live devbox services/processes, producer ownership, reservations and active heartbeats. Record an attach/recover/stop decision for existing related work. Never run a competing producer or duplicate schedule.
- On Launch create one pinned Sol xhigh orchestrator (explicit user override of LLL medium default). Keep goal and live HTML board open in its sidebar.
- Existing devbox data: /home/matt/.local/state/get-leads-review. Scripts: /home/matt/.local/share/get-leads-review/scripts. Prior import receipts: import-named-20260929/. Use existing APIs, CLI and parsed dotenv helper before browser fallback. Never expose credentials.
- Max incremental spend USD20 total across parent, child and workers for this run explicitly authorized in user turn T0410 (source line 20791), overriding the default USD15 threshold for this task; also preserve prior aggregate USD150 ceiling unless superseded. Determine actual prior spend and reservations first. Spend only where it improves this fixed cohort. Stop paid work at the bound and report actual yield and remaining holds.
- One owner, no competing producer. Reuse current correct scripts and existing caches. Routine work and deterministic validation run on devbox without model supervision. If genuine new AI processing is needed, retain approved eight OpenRouter slots and current prompt/model privacy settings; no unnecessary regeneration.
- Parent CCC checks once after 20 minutes and thereafter every 60 minutes only. One compact snapshot and at most one consolidated steering prompt per checkpoint, then idle. On completion independently accept proofs, add top pink summary/optional next-action prompts to same board, archive successful child and delete its check schedule. No timers start in Prepare mode.
- Open assumption: approximately equal split of newly ready leads, not equal total size of campaigns. Final count is evidence-driven, not a promise that every remaining row can qualify.
- Package root: `outputs/remaining-leads-2026-09-30/` in this checkout. Main read-set relative to that root: `goal.md`, `deliverables.md`, `main-prompts.md`, `session.json`, and `user_prompts_and_goal_relevant_info.md`; final report `final-report.md`. The parent must create the launch-support files before Launch. Show actual approved OpenRouter prompts/settings in `main-prompts.md` before execution, retaining annotations and model privacy settings. Keep source plan black, evidence/status blue, verified criteria green, failed criteria red; update and republish the same board after meaningful progress.
## Provider references and current limits
Council reviewed official documentation on 2026-09-30, without accessing or changing provider state:
- Exact custom-variable mapping: https://help.instantly.ai/en/articles/6135930-how-to-add-and-use-variables-in-campaigns
- CSV import and header advice: https://help.instantly.ai/en/articles/6254215-how-to-import-leads-via-csv and https://help.instantly.ai/en/articles/13644475-why-are-leads-not-uploading
- Existing lead payload: https://developer.instantly.ai/api-reference/schemas/lead
- No-send Preview and separate immediate test-send action: https://help.instantly.ai/en/articles/7002900-preview-and-send-test-emails
- RANDOM syntax and embedded variables: https://help.instantly.ai/en/articles/6384663-how-to-use-spintax
Generic custom-field documentation does not verify a comma-containing header. These references support the required checks, not a claim that the packages or live campaigns already passed them.