# 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.