← Back to brief

reference data classification

memory · reference_data_classification.md

Classification levels

LevelDescriptionStorage rulesBackup rules
L1 — PublicAlready public; no restrictionanyany
L2 — InternalOperational data, no PIImode 600/700, owner-onlyquarterly
L3 — Sensitive PIINames + emails + phonesmode 600, Keychain for tokens, FileVault recommendedquarterly + iCloud mirror
L4 — RestrictedFinancial / SSN / health / OAuth tokensKeychain ONLY, never in plaintext on diskNEVER in unencrypted backups
Current GC tenant target: L3 baseline, with L4 secrets in Keychain (not on disk).

Inventory

L4 — Restricted (Keychain only)

AccountServiceLast rotatedNotes
cloudflare_api_tokenSkyRun2026-04-24 (.env mtime)Account-level, full edit. ROTATE EVERY 90D.
ntfy_topicSkyRun2026-04-22Public-by-design (push channel name) — Keychain'd for consistency, not security
Future L4 to migrate (currently using cookie-CSRF via chrome_bridge — should move to scoped API tokens):

L3 — Sensitive PII (mode 600 files, mode 700 dirs, FileVault recommended)

PathContentPII fieldsRecords
~/Desktop/SkyRun/DNC_active_homeowners.jsonCurrent customer roster — DO-NOT-CONTACT canonical sourceemail, phone (last10), name tokens~141 emails, 97 phones, 263 name tokens
~/Desktop/SkyRun/knowledge_graph.jsonOperator KG — people, deals, meetingsname, email, phone, deal stage, transcripts referenced39 people, 11 deals (post-2026-05-02), 26 meetings
~/Desktop/SkyRun/Prospecting & Leads/master_lead_inventory_807.jsonLead inventory — full prospect dataname, email, phone, address, AV, purchase price, OOS flag865 leads
~/Desktop/SkyRun/Prospecting & Leads/STR Engine Archive/Grand_County_STR_Engine_v3.5_filtered.xlsxMaster workbook (4 tabs)same as inventory + Score Reason + tier classification865 rows × 41 cols (Lead Details)
~/Desktop/SkyRun/Prospecting & Leads/Postcard_Targets_GrandCounty_v3.5.xlsxPostcard targetsname, mailing address~789 rows
~/Desktop/SkyRun/Call Transcripts/transcripts/*.txtVerbatim call transcriptsspeaker names, content~36 files (~558K chars)
~/Desktop/SkyRun/Call Transcripts/notes/*.txtMeeting notes / summariessamemany
~/Desktop/SkyRun/Email Scans/*.json + insights_today.jsonlGmail-scan outputemail subjects, sender, snippetsaccumulates daily
~/Library/Application Support/SkyRun/pwa/data/pending_*.jsonlApproval queuesrecipient names + emails + draft bodiesvaries
~/Library/Application Support/SkyRun/known_hs_duplicates.jsonLead-id ledger of acked dupslead_ids only (no PII directly)30 entries
~/Library/Application Support/SkyRun/health/*.jsonHeartbeatstask summaries, occasionally include names in summary text30-day rolling
~/Desktop/SkyRun/audit/<date>/*.jsonSkill audit summariesvariesaccumulates
~/.claude/projects/-Users-josephbowens-Desktop-SkyRun/memory/project_active_deal_*.mdPer-deal memoryfull prospect context~7 active deal files
~/.claude/projects/-Users-josephbowens-Desktop-SkyRun/memory/feedback_*.mdVoice + drafting feedbackincludes draft examples with recipient namesmany
~/Desktop/SkyRun/Property Deliverables/<address>/*.{docx,pptx,pdf,xlsx}Per-property deliverablesowner name, address, financials, Track comp data~per-prospect

L2 — Internal (mode 600/700, no PII directly)

PathContent
~/Library/Application Support/SkyRun/{chrome_bridge,dnc_check,system_hygiene,build_pwa,deploy_pwa,quarterly_backup,notify,pwa_auto_rebuild,fleet_status_push,recompute_health_summary,secrets,schema_guards}.{py,sh,md}Helper scripts
~/Library/Application Support/SkyRun/.envKeychain-backed secret shim (no values in plaintext)
~/.claude/scheduled-tasks/*/SKILL.mdSkill prompts (operator-agnostic logic; no PII baked in directly)
~/.claude/projects/-Users-josephbowens-Desktop-SkyRun/memory/reference_*.mdReference docs
~/.claude/projects/-Users-josephbowens-Desktop-SkyRun/memory/MEMORY.mdIndex — paths + summaries (no raw PII)

L1 — Public

PathContent
~/Library/Logs/skyrun-*.log (CARE — operational logs may contain snippets that approach L3; rotate aggressively)
~/Desktop/SkyRun/Brand & Marketing/*Brand assets, public marketing

Handling rules

NEVER

ALWAYS

Subject Access / Right-to-Be-Forgotten

If a lead requests removal:
1. Find their lead_id (search master_lead_inventory by name/email/address)
2. Add to DNC_active_homeowners.json with reason "do-not-contact-by-request" + remove lead_id from outbound queues (SmartLead, postcards, pending_drafts)
3. Mark KG entity do_not_contact: true
4. Optionally: blank PII fields in master inventory (keep lead_id + DNC status; remove email/phone/name)
5. HS contact: set lifecyclestage=other and add a note recording the request
6. Ledger the action in ~/Desktop/SkyRun/audit/<date>/dsar_<lead_id>.json with timestamp + scope

Cross-references