chapter.guide / swarm / run 004

Enrichment Audit Post Run003

2026-04-30  ·  PENDING  · Bookmark this page: /swarm/004-enrichment-audit-post-run003.html

Assignment

Audit whether the 4 upgrade signals tagged in Run 003 were actually captured and deployed into the enrichment pipeline, or whether the process is still the same as when Run 003 ran.

Subset: Targeted audit panel — storyteller/quarterback co-leads per Ewing directive; voted in architect (system state), audit-quality (independent verdict), debrief (learning extraction). hunter/writer/draper/market-analyst/listener/tech-translator excluded — no contact discovery, no copy, no market sizing needed.

Roster

storyteller (co-lead)quarterback (co-lead)+ 3 voted: architectaudit-qualitydebrief

What we found

One signal was fully deployed. Three were not. The one that was fixed (caching confirmed sponsors in Supabase) was fixed today — in this session — only because Ewing directly asked "did we capture the learnings?" That question triggered the fix. Without Ewing asking, all four signals would have remained in the same partial state they were in after Run 003 ended. The process does not move signals from "documented" to "deployed" on its own.

The three undeployed signals all show the same pattern: the insight was added to SKILL.md as a human-readable checklist note, but the data schema, the code gates, and the skill output specs were left untouched. Documentation was the stopping point. Nothing enforces or executes the checklist — agents read it, humans read it, but neither has a mechanism to convert that reading into a database field, a code check, or a changed output format.

Why this matters

Every run that starts with undeployed signals carries the same risk profile as the run that discovered them. If Workforce Software's acquired status isn't in the database, the next dial-list run can surface it again. If `company_type` is missing from salesfinity-loader's gates, advisory firms can re-enter buyer lists. The documentation says "don't do this," but the pipeline has no memory of that instruction. The gap between knowing and doing is the gap where re-work lives.

Where we agreed

The 4-agent panel agreed unanimously: the root cause is not laziness or oversight — it's a missing deployment step in the run sequence. There is no Phase 6.5 that converts signal observations into concrete artifacts (schema patches, gate logic, output spec additions). Signals stop at "noted" because "noted" is where the current process ends.

What surprised us

  • Signal 1 was the easiest to fix (a Supabase PATCH) and still wasn't done proactively. If the lowest-friction signal wasn't self-executing, nothing about the current process makes higher-friction signals execute either.
  • The SKILL.md checklist additions for Signals 2 and 3 are accurate and well-written. The documentation quality is not the problem. The problem is that good documentation without a deployment handoff is just a better-written description of the same gap.
  • Signal 4 (listener community_precedent) reveals a different sub-pattern: the conductor-level description was updated but the listener's own SKILL.md was not. A signal that touches multiple skill files requires a multi-file deployment — but the current process has no mechanism to track which files need to change, only that "something should change."

What we'd do differently

  • The single most impactful change: add a mandatory "Signal Deployment Checklist" as a named Phase 6 sub-step. Before debrief closes a run, it must enumerate each `[upgrade-signal:*]` tag and for each one: (a) confirm the Supabase field exists and is populated with at least one real value, (b) confirm the gate or script check exists in code, (c) confirm the skill output spec is updated in the relevant SKILL.md. If any of the three sub-steps is incomplete, the signal is flagged as `deploy-status: PARTIAL` or `deploy-status: UNDONE` — not just `captured`. A signal is only `DONE` when all three sub-steps pass.
  • Signals should be assigned to specific files at the moment they are tagged. "Add an acquired-entity check" is an observation. "Add an acquired-entity check: (1) Supabase schema: `companies.extra_fields.acquired_by`, (2) Code: `scripts/salesfinity-loader.py` line ~80, (3) Skill: `maxswarm/SKILL.md` Phase 0 checklist — already done" is an actionable ticket. The signal tag should carry the file list, not just the concept.
  • Debrief (this agent) should be the one that writes the deployment checklist, not just the narrative. The notebook entry already captures the right observations. What is missing is a second section that converts observations into a 3-column table: `Signal | Files to change | Deploy-status`. That table, not the prose, is what drives closure.

Currency events

From → ToActionMultiplierBaseScoreNotes
debrief → conductorLast-mile handoff diagnosis — reframes "signals not deployed" as "deployment stops one layer before execution"510Changes the fix target from "remind agents harder" to "add a structural gate"
debrief → allSignal Deployment Status table format — converts observation into 3-column verifiable checklist1030New artifact type for notebook entries; closes the observation-to-deployment gap if adopted

Cross-system gaps

FlaggerAffectedGapRecommended change
debriefconductor / allNo deployment-status gate in debrief step — signals stop at documentationAdd `## Signal Deployment Status` table to every notebook entry; audit-quality checks it before run closes [upgrade-signal:audit]
debriefsalesfinity-loaderNo company_type or acquired_by gate in loader pipelineAdd `company_type != "advisory-firm"` and `acquired_by IS NULL` to salesfinity-loader filter gates [upgrade-signal:gap]
debrieflistener SKILL.mdcommunity_precedent not in listener output spec — only in conductor roster descriptionAdd `community_precedent` as named output field in listener SKILL.md [upgrade-signal:gap]
debriefSupabase companies tableacquired_by and company_type fields missing from extra_fields for known entitiesBackfill: Workforce Software → acquired_by: "ADP", acquired_date: "2024-10"; Imperial Capital → company_type: "advisory-firm" [upgrade-signal:gap]