fix: stop publishing prospect data; correct stale profile guidance - #7
Merged
Conversation
…dance Doc/consistency audit of the public repo against the shipped features. **Prospect data was public.** `candidates.csv` — 108 real businesses, 52 with scraped email addresses, 108 distinct real domains — was tracked. It was added by 0c5ac04, the commit that removed the other internal artifacts, so it slipped in while the surrounding cleanup happened. It is also the default `--out` of `prospector source`, so a normal run drops it in the working tree ready to be committed by accident. Untracked and gitignored, along with the DM ledger and `*.local.csv`. Session 1 deliberately redacted prospect lists from this repo; this restores that decision. NOTE: untracking removes it from HEAD only — the file remains in git history and must be treated as already disclosed. **The drafting instructions gated a Facebook claim on evidence that cannot exist.** CONSTRAINTS.md still allowed the possessive channel phrases ("your page", "your inbox", ...) when the model could cite an `fb_*` record and had been told the signal was strong. Feature 008 deleted every FB evidence kind and retired the channel signal, so that condition is now unsatisfiable — and the code already rejects those phrases unconditionally. The instruction file was therefore weaker than the validator and described a gate that no longer exists. Now banned outright, with the removal explained so it is not reintroduced. Two related fixes: the citation example no longer offers `fb_link_1` as a sample id, and the writing guide no longer suggests opening on a Facebook page link. **Config documentation was incomplete.** `PROSPECTOR_VAULT` is read by config.py but appeared in neither the README table nor `.env.example`; the Gmail client/token paths were missing from the table; and `.env.example` predated profiles entirely, so it never mentioned `PROSPECTOR_PROFILE` or `PROSPECTOR_PROFILES`. All now documented in both places. Also: CONTRIBUTING gains an explicit "never commit prospect data" convention, the bug-report template's example command passes --profile so a new user does not land on an interactive prompt, and the PR checklist wording is consistent with v7.0.0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-up to #6, which merged before this audit finished. One commit.
What & why
A consistency audit of the public repo against the features that actually shipped, prompted by the question "does every doc still align, because it's a public repo?" Three real problems, one of them urgent.
1. Prospect data is published (urgent)
candidates.csvis tracked onmain: 108 real businesses, 52 with scraped email addresses, 108 distinct real domains. It was added by0c5ac04— the commit titled "chore: stop tracking internal development artifacts" — so it slipped in while the surrounding cleanup was removing other artifacts.It is also the default
--outofprospector source, so any user running discovery gets it in their working tree ready to be committed by accident. Untracked here and gitignored, along withdm_ledger.jsonland*.local.csv.Session 1 of this project deliberately redacted prospect lists and rewrote history twice to remove them; this restores that decision.
2. The drafting instructions gated a Facebook claim on evidence that cannot exist
CONSTRAINTS.mdstill permitted the possessive channel phrases — "your page", "your inbox", "your messenger" — if the model could cite anfb_*evidence record and had been told the channel signal was strong.Feature 008 deleted every FB evidence kind and retired the signal, so that condition is now unsatisfiable, and
agent_draft.POSSESSIVE_CHANNEL_PHRASESalready rejects those phrases unconditionally. The instruction file was therefore weaker than the validator and described a gate that no longer exists — in a file fed to the drafting model on every run. Now banned outright, with the removal explained in place so it is not reintroduced.Two related fixes: the citation instructions no longer offer
fb_link_1as a sample evidence id (it cannot appear in any catalogue), and the writing guide no longer suggests opening an email on a Facebook page link.3. Config documentation was incomplete
PROSPECTOR_VAULTis read byconfig.pybut was documented in neither the README table nor.env.example. The Gmail client/token paths were missing from the table. And.env.examplepredated the profile system entirely, so it never mentionedPROSPECTOR_PROFILEorPROSPECTOR_PROFILES. All 21 env vars the code reads are now documented in both places.Also: CONTRIBUTING gains an explicit "never commit prospect data" convention, and the bug-report template's example command passes
--profileso a new user copying it does not land on an interactive prompt.How it was verified
pytest -q→ 593 passed (unchanged; the instruction edits keep the assembly at 16,852 of 20,000 permitted chars).git ls-files | grep '\.csv$'→ no tracked CSV files remain.config.py/profiles.pyagainst those documented in README and.env.example— all three lists now agree.docs/architecture.png(predates 008 but contradicts nothing in it — no messenger bucket, nodm).Checklist
pytestpasses locallyThe Facebook guarantee is strengthened: a conditional exception in the model's instructions became an outright ban, bringing the guidance in line with what the validator already enforced. No code path changed.
Notes for reviewers
Decide on the git history.
candidates.csvhas been public since0c5ac04. Options, in increasing cost: (a) accept it as disclosed and move on, since the data is public business contact information; (b) rewrite history withgit filter-repoand force-push, which breaks every existing clone and does not retract anything already fetched or indexed; (c) additionally notify anyone who forked. This PR does none of them — force-pushing a public repo is the maintainer's call.Worth noting why the audit was needed at all: every one of these three problems was introduced by a commit that was individually correct. The prospect list rode along with an unrelated cleanup, and the instruction file was left behind by a feature that removed the concept it depended on. Neither would fail a test, because no test asserts on what the repo publishes or on whether the model's instructions still match the evidence it can be given.
🤖 Generated with Claude Code