You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- Add discover.py to the file layout (live subreddit discovery, recall stage)
- Mark archetype_map.py as fallback seed only (discovery replaced it for T5)
- Update test count 205 -> 274
- New architecture-decision note: engine=recall / skill=precision split, why
the semantic judgment lives in the skill layer (engine subprocess has no
reliable LLM key), 7d discovery window vs 48h daily-scan window.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
205 tests, target <1s total runtime. New PRs must keep the suite green.
114
+
274 tests, target <2s total runtime. New PRs must keep the suite green.
114
115
115
116
End-to-end smoke (live Reddit fetch, no posting):
116
117
@@ -144,6 +145,7 @@ These are choices that look weird in code review but exist for a reason:
144
145
-**The cap is a UX filter, not a safety limit.**`hard_ceiling=12` exists because attention drops 80% past position 10 (Nielsen Norman). Reddit's API allows ~100 QPM; we use ~30 req/day. Power users override via `--max-surfaces`.
145
146
-**author_vet** runs BEFORE scoring, not after. Catches throwaway/karma-farmer OPs early so they never enter the scoring pool. Cached 7 days in SQLite (`vetted_authors` table).
146
147
-**The 3-question `/onboard` + 8-question `/profile` BOTH route through `profile_synth.py`.** The shorter flow seeds an archetype and lets Claude refine in chat; the deeper flow runs the LLM synthesis prompt directly. Same validator, same YAML writer.
148
+
- **Subreddit discovery is split: engine = recall, skill = precision (`discover.py` + `skills/onboard/SKILL.md`).** Onboarding T5 no longer seeds subs from the archetype map. The engine runs live discovery (DataForSEO SERP + Reddit search to find candidate subs, then a per-sub search-within-sub over a 7-day window to confirm each has a real buyer thread), and emits candidates with an absolute-timestamped evidence thread, a truthful `recent_thread_reason`, and a 0-100 confidence. The per-thread gate (`software_buyer_intent`) is deterministic and lexical, so it tops out ~50% precision: it cannot tell "Software Engineering vs Dentistry" (career) from "dental software vs Dentrix" (buyer). The precision layer is the SKILL.md relevance review, where the orchestrating Claude drops semantic false positives (career questions, self-promo, brand-name collisions like Clio-the-car). This split is intentional: the engine subprocess cannot rely on an LLM key (Claude Code injects `ANTHROPIC_API_KEY` into the session, not child processes), so the semantic judgment lives in the skill layer where an LLM is guaranteed present. `archetype_map.py` remains only as the thin/fallback seed when discovery is unreachable. Freshness window is 7 days for onboarding discovery vs 48h for the daily scan (`DISCOVERY_FRESH_WINDOW_HOURS` vs `PHASE_B_FRESH_WINDOW_HOURS`).
0 commit comments