# Audit: Mode X prospects before Base migration — 2026-06-15 ## Verdict Do not migrate this batch as the requested 100-account dataset. The delivered artifact is not 100 unique accounts. The only delivered CSV at `/home/alex/.hermes/kanban/boards/mode-os/workspaces/t_6bca38e6/prospects_all.csv` contains 10 data rows, not the 24 rows claimed in the parent handoff and not the requested 100. I audited all 10 available rows. Because the row count is far short and several rows fail or need manual evidence review, this should be treated as a partial high-signal seed list, not a Base-ready 100-account migration. Recommended next action: revise / collect more before migration. If Alex wants to use the current work now, migrate only the 4 approve_for_base rows below after a shipper/coder transforms the CSV schema cleanly into item notes. ## Files checked - Source CSV: `/home/alex/.hermes/kanban/boards/mode-os/workspaces/t_6bca38e6/prospects_all.csv` - Parent report: `/home/alex/.hermes/kanban/boards/mode-os/workspaces/t_6bca38e6/prospect_validation_report.md` - Existing Base folder: `/home/alex/Vault/mode/knowledge/company/GTM/6. x-prospect-accounts/` - Existing Base schema: `/home/alex/Vault/mode/knowledge/company/GTM/6. x-prospect-accounts/x-prospect-accounts.base` - Audited rows CSV: `/home/alex/Vault/mode/knowledge/company/GTM/6. x-prospect-accounts/audited-prospects-2026-06-15.csv` ## Dataset integrity checks | Check | Result | |---|---| | Requested row count | FAIL: expected 100, delivered 10 data rows | | Parent handoff consistency | FAIL: parent summary claims 24 unique validated rows, but delivered CSV has 10 rows | | Normalized uniqueness | PASS for delivered artifact: 10 unique handles / dedupe keys | | Required evidence field | PARTIAL: all rows have an evidence URL, but several are search/profile URLs rather than exact post URLs | | Recent post within 45 days | PARTIAL: dates are recent in the CSV, but external fetch verified only some exact posts | | Account age >45 days | PASS where profile join date was visible; unknown for designengineerr; no account appeared obviously <45 days | | Follower column | PARTIAL: `follower_count` exists but most rows are blank; bands are present but not enough for sorting | | Engagement transparency | PARTIAL/FAIL: scores are mostly qualitative estimates; several rows have blank exact likes/reposts/replies/views | | CSV parse compatibility | FAIL: several rows have more columns than the header due to malformed blank engagement fields, causing `csv.DictReader` to emit an extra `None` field | | Obsidian Base compatibility | PARTIAL: core fields overlap, but CSV uses `full_name` not `account_name` and lacks `account_age_status`, `engagement_quotes`, `last_checked`, `source_report`; a transform is required before migration | ## Audit status counts - approve_for_base: 4 - maybe_needs_manual_check: 2 - exclude_before_import: 4 - total audited: 10 ## Row-level audit summary ### approve_for_base 1. `@filipwojda` — Verified exact post URL and content. Strong practitioner/product-engineering signal; recent, relevant design-engineering essay; account older than 45 days. 2. `@novikoff` — Strong established product/design practitioner signal; profile shows June 2026 recent app/product post and long account age. The exact claimed procedural-design-system status URL failed to fetch, so preserve a manual evidence note if migrated. 3. `@emilkowalski` — Strong UI animation/frontend polish practitioner; high follower exception is justified by direct craft relevance and established profile. Evidence should use a recent exact post URL rather than only the profile. 4. `@shadcn` — Strong design-system/component-library practitioner; high follower exception is justified. Evidence should use a recent exact post URL rather than only the profile. ### maybe_needs_manual_check 5. `@LiviaKissDesign` — Profile is relevant and account is old enough (joined February 2026), but the exact status URL failed to fetch and the public profile extractor reported no visible posts. Manual logged-in X check needed before approval. 6. `@designengineerr` — Exact post URL verified and topic is SwiftUI/frontend polish, but the account appears branded/content/tutorial-like rather than a clearly individual practitioner. Manual check needed to decide whether practitioner signal is strong enough. ### exclude_before_import 7. `@JennyZhangqb6b` — Profile exists and is older than 45 days, but extractor reports “hasn’t posted”; evidence URL is a search URL rather than exact post. Exclude until exact recent post is verified. 8. `@ridark_eth` — Exact post URL verified, but profile is a Web3/content/research account and the relevant post is about someone else’s design-to-code workflow. This reads as content amplification, not a strong Mode practitioner prospect. 9. `@heyyritik_` — Exact post URL verified, but the post is a follow/connect networking prompt. It matches keywords but not the substantive practitioner-evidence bar. 10. `@daman76752` — Exact post URL verified, but the post is also a follow/connect networking prompt. Bio is relevant, but evidence is too weak for import. ## Top 20 worth manual review first Only 10 rows exist. Manual review priority: 1. `@filipwojda` — likely approve; use exact post evidence. 2. `@shadcn` — likely approve if high-follower exception is acceptable. 3. `@emilkowalski` — likely approve if high-follower exception is acceptable. 4. `@novikoff` — likely approve after verifying the exact claimed status or substituting a verified recent product-design post. 5. `@designengineerr` — decide if branded/tutorial account counts as practitioner. 6. `@LiviaKissDesign` — verify exact recent post manually. 7. `@JennyZhangqb6b` — verify if any relevant posts exist; otherwise exclude. 8. `@ridark_eth` — likely exclude as content/Web3. 9. `@heyyritik_` — likely exclude as follow train / networking. 10. `@daman76752` — likely exclude as follow train / networking. ## Quality concerns and patterns - The continuation task did not produce the requested 100 and the artifact count does not match its own handoff/report claims. - The CSV itself is malformed in multiple rows because blank engagement columns include extra comma/space combinations that shift fields; this must be repaired before any automated import. - Exact evidence quality is mixed. Some rows have exact status URLs that verify cleanly; some use profile/search URLs or status URLs that failed to fetch. - The list includes keyword-matching networking posts and content-amplifier accounts that should not pass the practitioner-quality bar. - Follower data is not consistently sortable because `follower_count` is blank on most rows; high-follower exceptions are present and should be intentionally accepted, not silently mixed into the preferred-under-15k set. - Engagement scores are mostly qualitative floor estimates, so ranking is useful for triage but not sufficiently transparent for strict scoring. ## Migration recommendation Revise / collect more before migration. Do not import the delivered CSV directly into the Obsidian Base. If Alex wants immediate value from this partial batch, migrate only `@filipwojda`, `@novikoff`, `@emilkowalski`, and `@shadcn` after fixing schema/CSV formatting and replacing profile/search evidence with exact recent post URLs where needed. Treat `@LiviaKissDesign` and `@designengineerr` as manual-review candidates, and exclude `@JennyZhangqb6b`, `@ridark_eth`, `@heyyritik_`, and `@daman76752` before import. ## Checks run - Parsed source CSV with Python `csv.reader` / `csv.DictReader` to verify row count, header length, duplicate normalized handles, and malformed extra columns. - Read existing Obsidian Base `.base` file and README to compare schema expectations. - Read representative existing item notes to confirm Base item frontmatter conventions. - Web-extracted exact/profile evidence for all 10 delivered handles where possible; no outreach or X mutations performed.