diff --git a/graphify-out/.graphify_detect_result.txt b/graphify-out/.graphify_detect_result.txt
deleted file mode 100644
index e56da83..0000000
--- a/graphify-out/.graphify_detect_result.txt
+++ /dev/null
@@ -1 +0,0 @@
-{'files': {'code': ['backend/app/database.py', 'backend/app/security.py', 'backend/app/main.py', 'backend/app/config.py', 'backend/app/models/__init__.py', 'backend/app/schemas/__init__.py', 'backend/app/schemas/ingredient.py', 'backend/app/schemas/recipe.py', 'backend/app/schemas/never_suggest.py', 'backend/app/schemas/meal_plan_generation.py', 'backend/app/api/profile.py', 'backend/app/api/pantry.py', 'backend/app/api/auth.py', 'backend/app/api/shopping_list.py', 'backend/app/api/recipes.py', 'backend/app/api/ingredients.py', 'backend/app/api/never_suggest.py', 'backend/app/api/meal_plans.py', 'backend/app/api/admin.py', 'backend/app/api/feedback.py', 'backend/app/api/meals.py', 'backend/app/api/orchestrate.py', 'backend/app/services/__init__.py', 'backend/app/services/approval.py', 'backend/app/services/swiftly_auth.py', 'backend/app/services/email.py', 'backend/app/services/matcher.py', 'backend/app/services/scraper_service.py', 'backend/app/services/llm_matcher.py', 'backend/app/services/planner/__init__.py', 'backend/app/services/planner/config.py', 'backend/app/services/planner/types.py', 'backend/app/services/planner/cost.py', 'backend/app/services/planner/filter.py', 'backend/app/services/planner/score.py', 'backend/app/services/planner/select.py', 'backend/app/services/planner/generate.py', 'backend/app/services/orchestrator/__init__.py', 'backend/app/services/orchestrator/alerts.py', 'backend/app/services/orchestrator/runner.py', 'backend/app/services/orchestrator/steps.py', 'backend/app/scraper/base.py', 'backend/app/scraper/__init__.py', 'backend/app/scraper/lucky_ca_scraper.py', 'backend/app/scheduler/__init__.py', 'backend/app/scheduler/__main__.py', 'backend/alembic/env.py', 'backend/alembic/versions/0003_grocery_item_description.py', 'backend/alembic/versions/0002_seed_data.py', 'backend/alembic/versions/0004_family_profile_calorie_target.py', 'backend/alembic/versions/0001_initial_migration.py', 'backend/alembic/versions/0005_grocery_item_external_id.py', 'backend/alembic/versions/0006_recipe_engine_thin.py', 'backend/alembic/versions/0007_seed_recipes.py', 'backend/alembic/versions/0008_phase5_orchestration.py', 'backend/alembic/versions/0009_phase6_reminded_at.py', 'backend/alembic/versions/0010_auto_llm_source.py', 'backend/tests/__init__.py', 'backend/tests/test_alembic.py', 'backend/tests/test_smoke.py', 'backend/tests/test_auth.py', 'backend/tests/test_scrape_endpoint.py', 'backend/tests/test_approval.py', 'backend/tests/test_config.py', 'backend/tests/test_ingredient_schema.py', 'backend/tests/test_recipe_schema.py', 'backend/tests/test_recipe_api.py', 'backend/tests/test_resolve_ingredient.py', 'backend/tests/test_matcher.py', 'backend/tests/test_match_hook.py', 'backend/tests/conftest.py', 'backend/tests/test_ingredient_api.py', 'backend/tests/test_never_suggest_api.py', 'backend/tests/test_thin_phase4_smoke.py', 'backend/tests/test_planner_cost.py', 'backend/tests/test_planner_filter.py', 'backend/tests/test_planner_score.py', 'backend/tests/test_planner_select.py', 'backend/tests/test_planner_generate.py', 'backend/tests/test_meal_plan_generate_api.py', 'backend/tests/test_swiftly_auth.py', 'backend/tests/test_swiftly_api.py', 'backend/tests/test_email_backend.py', 'backend/tests/test_orchestrator.py', 'frontend/vite.config.ts', 'frontend/tailwind.config.js', 'frontend/postcss.config.js', 'frontend/src/main.tsx', 'frontend/src/vite-env.d.ts', 'frontend/src/App.tsx', 'frontend/src/components/ErrorBoundary.tsx', 'frontend/src/components/ui/Button.tsx', 'frontend/src/components/ui/Badge.tsx', 'frontend/src/components/ui/Card.tsx', 'frontend/src/components/ui/Input.tsx', 'frontend/src/components/ui/EmptyState.tsx', 'frontend/src/components/ui/Skeleton.tsx', 'frontend/src/components/ui/LoadingSpinner.tsx', 'frontend/src/components/ui/Select.tsx', 'frontend/src/components/ui/Textarea.tsx', 'frontend/src/pages/Dashboard.tsx', 'frontend/src/pages/MealDetail.tsx', 'frontend/src/pages/Pantry.tsx', 'frontend/src/pages/ShoppingList.tsx', 'frontend/src/pages/Login.tsx', 'frontend/src/api/index.ts', 'frontend/src/types/index.ts', 'frontend/src/lib/utils.ts', 'frontend/src/lib/toast.ts', 'scripts/spike_lucky_scrape.py', 'scripts/send_test_approval.py', 'scripts/spike_swiftly_ingest.py', 'scripts/seed_family.py', 'scripts/enrich_recipes_spoonacular.py'], 'document': ['meal-planner-plan.md', 'README.md', 'CLAUDE.md', 'docs/SPEC.md', 'docs/ARCHITECTURE.md', 'docs/database-schema.md', 'docs/implementation-plan.md', 'docs/RUNNING.md', 'docs/ORIENTATION.md', 'docs/HANDOFF.md', 'docs/specs/2026-05-05-meal-planner-algorithm-design.md', 'docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md', 'docs/superpowers/plans/2026-05-05-phase-9-planner-algorithm.md', 'docs/superpowers/plans/2026-05-07-phase5-orchestration.md', 'docs/superpowers/plans/2026-05-07-phase6-sendgrid.md', 'docs/superpowers/plans/2026-05-09-mvp-login.md', 'docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md', 'backend/requirements-dev.txt', 'backend/requirements.txt', 'backend/tests/fixtures/lucky_ca/META.md', 'Review/docs-gpt5.5.md', 'Review/repo-gpt5.5.md', 'Review/docs-claude.md', 'Review/synthesis.md', 'Review/reviewconcensus.md'], 'paper': [], 'image': ['backend/tests/fixtures/lucky_ca/weekly_ad.png'], 'video': []}, 'total_files': 140, 'total_words': 108271, 'needs_graph': True, 'warning': None, 'skipped_sensitive': ['docs/specs/2026-05-06-swiftly-token-auto-mint.md'], 'graphifyignore_patterns': 0}
diff --git a/graphify-out/.graphify_python b/graphify-out/.graphify_python
deleted file mode 100644
index 381142d..0000000
--- a/graphify-out/.graphify_python
+++ /dev/null
@@ -1 +0,0 @@
-/usr/bin/python3
diff --git a/graphify-out/GRAPH_REPORT.md b/graphify-out/GRAPH_REPORT.md
deleted file mode 100644
index 386a60f..0000000
--- a/graphify-out/GRAPH_REPORT.md
+++ /dev/null
@@ -1,340 +0,0 @@
-# Graph Report - /home/peter/Projects/MealPlanner (2026-05-17)
-
-## Corpus Check
-- 140 files · ~108,271 words
-- Verdict: corpus is large enough that graph structure adds value.
-
-## Summary
-- 1365 nodes · 1777 edges · 56 communities detected
-- Extraction: 82% EXTRACTED · 18% INFERRED · 0% AMBIGUOUS · INFERRED: 323 edges (avg confidence: 0.74)
-- Token cost: 0 input · 0 output
-
-## Community Hubs (Navigation)
-- [[_COMMUNITY_MealPlanItem|MealPlanItem]]
-- [[_COMMUNITY_Accessing the Application|Accessing the Application]]
-- [[_COMMUNITY__PinMatchBody|_PinMatchBody]]
-- [[_COMMUNITY_API tests|API tests]]
-- [[_COMMUNITY_SwiftlyAuthMintError|SwiftlyAuthMintError]]
-- [[_COMMUNITY_step_reminder|step_reminder]]
-- [[_COMMUNITY_generate_meal_plan|generate_meal_plan]]
-- [[_COMMUNITY_Meal Planner - Database|Meal Planner - Database]]
-- [[_COMMUNITY_APScheduler entry point for|APScheduler entry point for]]
-- [[_COMMUNITY_Access|Access]]
-- [[_COMMUNITY_issue_token|issue_token]]
-- [[_COMMUNITY_Admin endpoint tests|Admin endpoint tests]]
-- [[_COMMUNITY_Approval Token Security|Approval Token Security]]
-- [[_COMMUNITY_Meal Planner - Architecture|Meal Planner - Architecture]]
-- [[_COMMUNITY_Blocking Findings|Blocking Findings]]
-- [[_COMMUNITY_From Claude|From Claude]]
-- [[_COMMUNITY_Adversarial Documentation Review —|Adversarial Documentation Review —]]
-- [[_COMMUNITY_Adversarial Documentation Review|Adversarial Documentation Review]]
-- [[_COMMUNITY_Architecture (current)|Architecture (current)]]
-- [[_COMMUNITY_Out of scope (Phase|Out of scope (Phase]]
-- [[_COMMUNITY__reload_settings|_reload_settings]]
-- [[_COMMUNITY_Meal Planner Algorithm —|Meal Planner Algorithm —]]
-- [[_COMMUNITY_`backendalembicversions0009_phase6_reminded_at.py` (create)|`backend/alembic/versions/0009_phase6_reminded_at.py` (create)]]
-- [[_COMMUNITY_─────────────────────────────────────────────────────────────────────────────|─────────────────────────────────────────────────────────────────────────────]]
-- [[_COMMUNITY_run_llm_match_job|run_llm_match_job]]
-- [[_COMMUNITY_BaseScraper|BaseScraper]]
-- [[_COMMUNITY_client|client]]
-- [[_COMMUNITY_require_session|require_session]]
-- [[_COMMUNITY_Done When|Done When]]
-- [[_COMMUNITY_Bash (20 lines output)|Bash (>20 lines output)]]
-- [[_COMMUNITY_Open items (deferred, tracked|Open items (deferred, tracked]]
-- [[_COMMUNITY_Expected INFO alembic.runtime.migration Running|Expected: INFO [alembic.runtime.migration] Running]]
-- [[_COMMUNITY_compute_recipe_cost|compute_recipe_cost]]
-- [[_COMMUNITY_Claude only|Claude only]]
-- [[_COMMUNITY__admin_headers|_admin_headers]]
-- [[_COMMUNITY__delete_ingredients|_delete_ingredients]]
-- [[_COMMUNITY_test_router_list_endpoints|test_router_list_endpoints]]
-- [[_COMMUNITY__admin_headers (37)|_admin_headers (37)]]
-- [[_COMMUNITY__admin|_admin]]
-- [[_COMMUNITY_ShoppingList.tsx|ShoppingList.tsx]]
-- [[_COMMUNITY_test_scrape_returns_202_and_log_id|test_scrape_returns_202_and_log_id]]
-- [[_COMMUNITY__admin (41)|_admin (41)]]
-- [[_COMMUNITY_Card.tsx|Card.tsx]]
-- [[_COMMUNITY_First parsed item (sample)|First parsed item (sample)]]
-- [[_COMMUNITY_Add nullable description column|Add nullable description column]]
-- [[_COMMUNITY_Seed initial data Revision|Seed initial data Revision]]
-- [[_COMMUNITY_Add calorie_target to family_profile|Add calorie_target to family_profile]]
-- [[_COMMUNITY_Add nullable indexed external_id|Add nullable indexed external_id]]
-- [[_COMMUNITY_Phase 5 orchestration weekly_run|Phase 5 orchestration: weekly_run]]
-- [[_COMMUNITY_Phase 6 add reminded_at|Phase 6: add reminded_at]]
-- [[_COMMUNITY_Add auto_llm to ingredient_match_source_enum|Add auto_llm to ingredient_match_source_enum]]
-- [[_COMMUNITY_test_matcher.py|test_matcher.py]]
-- [[_COMMUNITY_main|main]]
-- [[_COMMUNITY_env.py|env.py]]
-- [[_COMMUNITY_isActive|isActive]]
-- [[_COMMUNITY_ErrorBoundary.tsx|ErrorBoundary.tsx]]
-
-## God Nodes (most connected - your core abstractions)
-1. `SwiftlyAuthMintError` - 25 edges
-2. `LuckyCaliforniaScraper` - 23 edges
-3. `generate_meal_plan()` - 16 edges
-4. `issue_token()` - 12 edges
-5. `filter_recipes()` - 12 edges
-6. `SwiftlyAuthError` - 12 edges
-7. `_cost()` - 11 edges
-8. `RecipeCost` - 10 edges
-9. `step_reminder()` - 10 edges
-10. `MealPlanItem` - 9 edges
-
-## Surprising Connections (you probably didn't know these)
-- `main()` --calls--> `issue_token()` [INFERRED]
- scripts/send_test_approval.py → backend/app/services/approval.py
-- `main()` --calls--> `get_email_backend()` [INFERRED]
- scripts/send_test_approval.py → backend/app/services/email.py
-- `R2-A live-scrape spike for Lucky California weekly ad. Performs ONE live fetch` --uses--> `LuckyCaliforniaScraper` [INFERRED]
- scripts/spike_lucky_scrape.py → backend/app/scraper/lucky_ca_scraper.py
-- `main()` --calls--> `FamilyProfile` [INFERRED]
- scripts/send_test_approval.py → backend/app/models/__init__.py
-- `main()` --calls--> `FamilyMember` [INFERRED]
- scripts/send_test_approval.py → backend/app/models/__init__.py
-
-## Communities
-
-### Community 0 - "MealPlanItem"
-Cohesion: 0.02
-Nodes (86): Initial migration Revision ID: 0001 Revises: Create Date: 2026-05-04, upgrade(), thin phase 4: ingredient.aliases, recipe.calories_per_serving, ingredient_grocer, upgrade(), get_all_meal_plans(), get_email_logs(), get_log(), get_logs() (+78 more)
-
-### Community 1 - "Accessing the Application"
-Cohesion: 0.02
-Nodes (94): 1. Clone Repository, 2. Create Environment File, 3. Create SSL Certificates (for remote access), Accessing the Application, AI Images (optional), Backend Development, Backend Won't Start, Backup Database (+86 more)
-
-### Community 2 - "_PinMatchBody"
-Cohesion: 0.04
-Nodes (71): BaseModel, IngredientBase, IngredientCreate, IngredientGroceryMatchRead, IngredientRead, IngredientUpdate, _PinMatchBody, Config (+63 more)
-
-### Community 3 - "API tests"
-Cohesion: 0.02
-Nodes (80): 10.1 Shopping List Generation, 10.2 Printable Shopping List, 10.3 Web UI Shopping List View, 11.1 Scraped Images, 11.2 AI Image Generation (Fallback), 11.3 Email Image Handling, 12.1 Variety Analysis, 12.2 Budget Tracking (+72 more)
-
-### Community 4 - "SwiftlyAuthMintError"
-Cohesion: 0.05
-Nodes (65): Exception, _aisle_from_slug(), LuckyCaliforniaScraper, map_product(), parse_categories_html(), parse_category_response(), _parse_price(), Lucky California / Swiftly product API client. Replaces the prior Playwright + (+57 more)
-
-### Community 5 - "step_reminder"
-Cohesion: 0.05
-Nodes (59): send_admin_alert(), ConsoleEmailBackend, EmailBackend, get_email_backend(), Email backends. R2-B spike: only ConsoleEmailBackend is functional. SendGrid is, Dev/spike backend. Prints to stdout AND appends a JSON line to backend/var/e, SendGridEmailBackend, MealPlanVote (+51 more)
-
-### Community 6 - "generate_meal_plan"
-Cohesion: 0.07
-Nodes (53): PlannerConfig, Planner constants. Tune here without touching algorithm code., _calorie_band(), filter_recipes(), Hard-constraint filter (constraints #1-#6 from the spec)., generate_meal_plan(), _load_blocklists(), _load_last_cooked() (+45 more)
-
-### Community 7 - "Meal Planner - Database"
-Cohesion: 0.05
-Nodes (41): 1. Schema Overview, 2. Enums, 3.10 `feedback`, 3.11 `never_suggest`, 3.12 `grocery_item`, 3.13 `scrape_log`, 3.14 `email_log`, 3.1 `family_profile` (+33 more)
-
-### Community 8 - "APScheduler entry point for"
-Cohesion: 0.01
-Nodes (2): APScheduler entry point for the scheduler container. Run: python -m app.schedul, Dev / test-only dependencies. Production deps live in requirements.txt.
-
-### Community 9 - "Access"
-Cohesion: 0.05
-Nodes (39): 1. Spoonacular recipe enrichment (images + descriptions), 2. Ollama LLM matcher (Olive Oil, Corn Tortillas, etc.), 3. Natural Friday cycle, Access, Admin API auth, Admin API reference, Applying Python code changes, DB connection (+31 more)
-
-### Community 10 - "issue_token"
-Cohesion: 0.08
-Nodes (28): consume_token(), issue_token(), Per-voter approval tokens. Stateless signed tokens (itsdangerous) keyed on sett, Verify + match URL + enforce single-use. Returns the voter on success. Sing, _serializer(), verify_token(), approve_meal_item(), deny_meal_item() (+20 more)
-
-### Community 11 - "Admin endpoint tests"
-Cohesion: 0.06
-Nodes (32): ---------------------------------------------------------------------------, Admin endpoint tests, alerts.py tests, backend/alembic/versions/0008_phase5_orchestration.py, backend/app/services/orchestrator/__init__.py, column (after calorie_target line):, Environment variables added, File Map (+24 more)
-
-### Community 12 - "Approval Token Security"
-Cohesion: 0.06
-Nodes (31): 10. Data Retention, 11. Success Metrics, 12. Future Considerations, 1. Overview, 2. Problem Statement, 3. Goals, 4. Non-Goals (Out of Scope), 5. User Stories (+23 more)
-
-### Community 13 - "Meal Planner - Architecture"
-Cohesion: 0.06
-Nodes (31): 1. System Overview, 2.1 Scraper Service, 2.2 Recipe Engine, 2.3 Meal Planner Service, 2.4 Notification Service, 2.5 Feedback Service, 2.6 Web UI (React + Tailwind), 2. Component Descriptions (+23 more)
-
-### Community 14 - "Blocking Findings"
-Cohesion: 0.06
-Nodes (31): 10. `SECRET_KEY` has an unsafe default, 11. SQLAlchemy 2 health query may fail, 12. Docker Compose exposes backend and frontend directly plus nginx, 13. Nginx SSL and rate limiting are not implemented, 14. Model file is too large for early iteration and hides domain decisions, 15. Schema constraints are only partially represented, 16. API prefix behavior may produce trailing-slash-only endpoints, 17. No repository-level quality gates exist (+23 more)
-
-### Community 15 - "From Claude"
-Cohesion: 0.07
-Nodes (29): 1.1 Recipe ↔ Ingredient relationship is modeled two contradictory ways, 1.2 No authentication exists anywhere in the system, 1.3 Email approval flow is unsafe and probably exploitable, 1.4 No `family_member` table despite per-person spec, 1.5 Phase status is contradictory and the skeleton does not work, 1.6 Schema has avoidable correctness defects, 1.7 Docker compose exposes backend (8000) and frontend (3000) directly, 1.8 Production deployment claims exceed implementation (+21 more)
-
-### Community 16 - "Adversarial Documentation Review —"
-Cohesion: 0.07
-Nodes (27): Adversarial Documentation Review — Claude, B1. Family profile is internally inconsistent — the math doesn't close, B2. There is no `family_member` (or `user`) table — but the spec is per-person, B3. Recipe↔ingredient relationship is documented two contradictory ways, B4. There is no authentication anywhere in the system, B5. Approval-by-email is fragile and probably exploitable, B6. "Self-hosted, no external cloud services *except SendGrid*" is undermined, Blocking (+19 more)
-
-### Community 17 - "Adversarial Documentation Review"
-Cohesion: 0.08
-Nodes (24): 10. Deployment docs promise production features that compose file does not provide, 11. Environment-variable docs are inconsistent and include unsafe examples, 12. Documentation contains stale and misspelled file paths, 13. Tech-stack docs are already version stale, 14. Operational docs assume endpoints that are not proven to exist, 15. Data retention lacks implementation mechanics, 16. Accessibility is barely addressed despite family-facing UI, 17. Observability requirements are aspirational (+16 more)
-
-### Community 18 - "Architecture (current)"
-Cohesion: 0.08
-Nodes (23): Architecture (current), Auth, Auth model (R1-B+D, locked in), CI: .github/workflows/ci.yml runs both jobs on push/PR., Conventions, Database, Database schema highlights, Email (+15 more)
-
-### Community 19 - "Out of scope (Phase"
-Cohesion: 0.09
-Nodes (21): File Structure, Out of scope (Phase 9 plan, written separately), Re-import BaseModel near the top of the file if not already present., Stable UUIDs so re-running upgrade after a downgrade is idempotent on FK refs., Task 10: Wire matcher into scrape success path, Task 11: Manual match override endpoints, Task 12: NeverSuggest CRUD endpoints, Task 13: Migration 0007 — seed canonical ingredients (+13 more)
-
-### Community 20 - "_reload_settings"
-Cohesion: 0.1
-Nodes (15): BaseSettings, Config, Settings, Auth gate tests for R1-B+D. Covers: - /api/admin/* requires bearer token (401 w, Force ``settings`` to re-read env (test isolation)., No bearer → 401. Valid bearer → not 401 (handler runs)., POST /api/profile/members without cookie → 401., GET /api/profile is NOT auth-gated (reads stay open). (+7 more)
-
-### Community 21 - "Meal Planner Algorithm —"
-Cohesion: 0.1
-Nodes (20): 1. Goal, 2.1 Hard constraints, 2.2 Scoring signals, 2.3 Set-selection diversity, 2. Algorithm shape, 3.1 Schema, 3.2 Match job, 3.3 Manual override (+12 more)
-
-### Community 22 - "`backend/alembic/versions/0009_phase6_reminded_at.py` (create)"
-Cohesion: 0.1
-Nodes (20): Architecture, `backend/alembic/versions/0009_phase6_reminded_at.py` (create), `backend/app/api/admin.py` (modify), `backend/app/config.py` (modify), `backend/app/models/__init__.py` (modify), `backend/app/scheduler/__main__.py` (modify), `backend/app/services/email.py` (modify), `backend/app/services/orchestrator/runner.py` (modify) (+12 more)
-
-### Community 23 - "─────────────────────────────────────────────────────────────────────────────"
-Cohesion: 0.1
-Nodes (19): ─────────────────────────────────────────────────────────────────────────────, 1. Add APP_BASE_URL to `.env.test`, 2. Rebuild frontend container and restart, 3. Run the seed script, 4. Verify login works, Edit scripts/seed_family.py to fill in real names/emails first, then:, ── Edit these before running ────────────────────────────────────────────────, Expected: no TypeScript errors, build succeeds (+11 more)
-
-### Community 24 - "run_llm_match_job"
-Cohesion: 0.15
-Nodes (15): _ask_ollama(), _get_candidates(), _get_unmatched_ingredients(), LLM-powered second-pass ingredient→grocery matcher. After the deterministic AUT, LLM second pass: match remaining unmatched ingredients. For each ingredient, Return up to ``_CANDIDATE_LIMIT`` grocery items ranked by fuzzy×precision., Ingredients with no existing match in ingredient_grocery_match., Ask the LLM to pick the best grocery item for the ingredient. Returns the 0 (+7 more)
-
-### Community 25 - "BaseScraper"
-Cohesion: 0.17
-Nodes (3): ABC, BaseScraper, SeleniumScraper
-
-### Community 26 - "client"
-Cohesion: 0.12
-Nodes (12): client(), client_no_db(), db(), db_session(), pytest_collection_modifyitems(), Pytest fixtures for MealPlanner backend. DB strategy ----------- - If env ``TES, Per-test transactional session that rolls back at teardown., Plain SessionLocal for tests that need to seed data outside the transactiona (+4 more)
-
-### Community 27 - "require_session"
-Cohesion: 0.14
-Nodes (12): login(), LoginRequest, Family-shared session login. POST /api/auth/login — body ``{"password": "..."}`, get_db(), issue_session(), Auth dependencies for the MealPlanner backend. Two flavors: - ``require_admin``, Enforce a shared bearer token. 401 on bad/missing token, 503 if unset., Sign the family_profile_id and return the cookie value. (+4 more)
-
-### Community 28 - "Done When"
-Cohesion: 0.14
-Nodes (13): Architecture, Done When, Goal, Meal Planner System, Phase 1: Foundation, Phase 2: Scraping, Phase 3: Recipe & Meal Engine, Phase 4: Notifications & Approval (+5 more)
-
-### Community 29 - "Bash (>20 lines output)"
-Cohesion: 0.14
-Nodes (13): Bash (>20 lines output), BLOCKED commands — do NOT attempt these, context-mode — MANDATORY routing rules, ctx commands, curl / wget — BLOCKED, Grep (large results), Inline HTTP — BLOCKED, Output constraints (+5 more)
-
-### Community 30 - "Open items (deferred, tracked"
-Cohesion: 0.14
-Nodes (13): File Structure, Open items (deferred, tracked here), Out of scope (other phases), Phase 9 — Meal-Planner Algorithm Implementation Plan, Task 1: Planner config + types, Task 2: Cost + savings estimator, Task 3: Hard-constraint filter, Task 4: Individual scoring (+5 more)
-
-### Community 31 - "Expected: INFO [alembic.runtime.migration] Running"
-Cohesion: 0.15
-Nodes (12): Context, Expected: INFO [alembic.runtime.migration] Running upgrade 0008 -> 0009 ..., Expected: Running upgrade 0008 -> 0009 again, clean, File map, Final verification, Phase 6 — SendGrid Email Integration Implementation Plan, ── step_reminder ──────────────────────────────────────────────────────────, Task 1: Migration 0009 — add `reminded_at` to `weekly_run` (+4 more)
-
-### Community 32 - "compute_recipe_cost"
-Cohesion: 0.32
-Nodes (10): compute_recipe_cost(), _decimal(), Compute per-recipe cost and savings against ingredient_grocery_match. Inputs:, _scale(), _ingredient(), _match(), test_compute_recipe_cost_sums_ingredient_costs(), test_pantry_hits_counted() (+2 more)
-
-### Community 33 - "Claude only"
-Cohesion: 0.17
-Nodes (11): 1. Strong Consensus (all reviewers, blocking), 2. Partial Agreement (2 of 3), 3. Unique Findings (only one reviewer), 4. Where Reviewers Conflict, 5. Combined Blocker List (deduplicated, ranked), 6. Additional Investigation Needed, 7. Net Assessment, Claude only (+3 more)
-
-### Community 34 - "_admin_headers"
-Cohesion: 0.35
-Nodes (9): _admin_headers(), _seed_grocery(), test_create_ingredient_rejects_duplicate_name(), test_create_ingredient_returns_201_with_id(), test_delete_ingredient_removes_row(), test_list_ingredients_supports_search(), test_pin_manual_match(), test_unpin_manual_match() (+1 more)
-
-### Community 35 - "_delete_ingredients"
-Cohesion: 0.33
-Nodes (8): _delete_ingredients(), _delete_recipes(), downgrade(), _insert_recipes(), seed canonical ingredients (and 30 starter recipes in P4-14) Revision ID: 0007, Best-effort: only remove rows whose name_lower matches one of our seeds. Pre, upgrade(), _upsert_ingredients()
-
-### Community 36 - "test_router_list_endpoints"
-Cohesion: 0.29
-Nodes (3): Smoke tests: app boots, routers wire up, no import-time crashes. The router-lis, Each canonical GET must respond. 200 (handled), 401 (admin-gated), 404 (hand, test_router_list_endpoints()
-
-### Community 37 - "_admin_headers (37)"
-Cohesion: 0.73
-Nodes (5): _admin_headers(), _new_ingredient(), test_create_recipe_rejects_unknown_ingredient_id(), test_create_recipe_with_canonical_ingredients(), test_list_recipes_returns_seeded_data()
-
-### Community 38 - "_admin"
-Cohesion: 0.4
-Nodes (4): _admin(), End-to-end: ingredient + recipe + match all wired together., test_match_job_runs_against_seeded_data(), test_resolve_against_seeded_ingredients()
-
-### Community 39 - "ShoppingList.tsx"
-Cohesion: 0.33
-Nodes (0):
-
-### Community 40 - "test_scrape_returns_202_and_log_id"
-Cohesion: 0.4
-Nodes (3): Async scrape endpoint contract. Verifies that ``POST /api/admin/scrape``: - r, Endpoint enqueues the scrape and returns 202 + scrape_log_id. We replace th, test_scrape_returns_202_and_log_id()
-
-### Community 41 - "_admin (41)"
-Cohesion: 0.9
-Nodes (4): _admin(), _seed_ingredient(), test_resolve_ingredient_handles_no_unit(), test_resolve_ingredient_returns_top_three_candidates()
-
-### Community 42 - "Card.tsx"
-Cohesion: 0.4
-Nodes (0):
-
-### Community 43 - "First parsed item (sample)"
-Cohesion: 0.4
-Nodes (4): First parsed item (sample), Lucky California weekly-ad spike (R2-A), Notes, Selectors used (verified against this fixture)
-
-### Community 44 - "Add nullable description column"
-Cohesion: 0.5
-Nodes (1): Add nullable description column to grocery_item. The Lucky California parser pr
-
-### Community 45 - "Seed initial data Revision"
-Cohesion: 0.5
-Nodes (1): Seed initial data Revision ID: 0002 Revises: 0001 Create Date: 2026-05-04
-
-### Community 46 - "Add calorie_target to family_profile"
-Cohesion: 0.5
-Nodes (1): Add calorie_target to family_profile Revision ID: 0004 Revises: 0003 Create Dat
-
-### Community 47 - "Add nullable indexed external_id"
-Cohesion: 0.5
-Nodes (1): Add nullable indexed external_id and source columns to grocery_item. The Swiftl
-
-### Community 48 - "Phase 5 orchestration: weekly_run"
-Cohesion: 0.5
-Nodes (1): Phase 5 orchestration: weekly_run table + pending_approval_policy Revision ID:
-
-### Community 49 - "Phase 6: add reminded_at"
-Cohesion: 0.5
-Nodes (1): Phase 6: add reminded_at to weekly_run Revision ID: 0009 Revises: 0008 Create D
-
-### Community 50 - "Add auto_llm to ingredient_match_source_enum"
-Cohesion: 0.5
-Nodes (1): Add auto_llm to ingredient_match_source_enum Revision ID: 0010 Revises: 0009 Cr
-
-### Community 51 - "test_matcher.py"
-Cohesion: 0.5
-Nodes (0):
-
-### Community 52 - "main"
-Cohesion: 0.83
-Nodes (3): main(), search_recipe(), strip_html()
-
-### Community 53 - "env.py"
-Cohesion: 0.67
-Nodes (0):
-
-### Community 54 - "isActive"
-Cohesion: 1.0
-Nodes (2): isActive(), linkClass()
-
-### Community 55 - "ErrorBoundary.tsx"
-Cohesion: 0.67
-Nodes (0):
-
-## Knowledge Gaps
-- **720 isolated node(s):** `Auth dependencies for the MealPlanner backend. Two flavors: - ``require_admin```, `Enforce a shared bearer token. 401 on bad/missing token, 503 if unset.`, `Sign the family_profile_id and return the cookie value.`, `Auto-authenticate: return the first family_profile_id from the DB. No cooki`, `Config` (+715 more)
- These have ≤1 connection - possible missing edges or undocumented components.
-
-## Suggested Questions
-_Questions this graph is uniquely positioned to answer:_
-
-- **Why does `map_product()` connect `SwiftlyAuthMintError` to `MealPlanItem`?**
- _High betweenness centrality (0.014) - this node is a cross-community bridge._
-- **Why does `_cost()` connect `generate_meal_plan` to `MealPlanItem`?**
- _High betweenness centrality (0.012) - this node is a cross-community bridge._
-- **Are the 47 inferred relationships involving `str` (e.g. with `require_session()` and `health_check_db()`) actually correct?**
- _`str` has 47 INFERRED edges - model-reasoned connections that need verification._
-- **Are the 19 inferred relationships involving `SwiftlyAuthMintError` (e.g. with `SwiftlyAuthError` and `LuckyCaliforniaScraper`) actually correct?**
- _`SwiftlyAuthMintError` has 19 INFERRED edges - model-reasoned connections that need verification._
-- **Are the 14 inferred relationships involving `LuckyCaliforniaScraper` (e.g. with `SwiftlyAuthMintError` and `._do_scrape()`) actually correct?**
- _`LuckyCaliforniaScraper` has 14 INFERRED edges - model-reasoned connections that need verification._
-- **What connects `Auth dependencies for the MealPlanner backend. Two flavors: - ``require_admin```, `Enforce a shared bearer token. 401 on bad/missing token, 503 if unset.`, `Sign the family_profile_id and return the cookie value.` to the rest of the system?**
- _720 weakly-connected nodes found - possible documentation gaps or missing edges._
-- **Should `MealPlanItem` be split into smaller, more focused modules?**
- _Cohesion score 0.02 - nodes in this community are weakly interconnected._
\ No newline at end of file
diff --git a/graphify-out/cache/016b51cbbb4e5c2c2c41f94850de290e323627fbd03e9ec82eb670850d545009.json b/graphify-out/cache/016b51cbbb4e5c2c2c41f94850de290e323627fbd03e9ec82eb670850d545009.json
deleted file mode 100644
index 63a93b3..0000000
--- a/graphify-out/cache/016b51cbbb4e5c2c2c41f94850de290e323627fbd03e9ec82eb670850d545009.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_alembic_versions_0010_auto_llm_source_py", "label": "0010_auto_llm_source.py", "file_type": "code", "source_file": "backend/alembic/versions/0010_auto_llm_source.py", "source_location": "L1"}, {"id": "0010_auto_llm_source_upgrade", "label": "upgrade()", "file_type": "code", "source_file": "backend/alembic/versions/0010_auto_llm_source.py", "source_location": "L15"}, {"id": "0010_auto_llm_source_downgrade", "label": "downgrade()", "file_type": "code", "source_file": "backend/alembic/versions/0010_auto_llm_source.py", "source_location": "L21"}, {"id": "0010_auto_llm_source_rationale_1", "label": "Add auto_llm to ingredient_match_source_enum Revision ID: 0010 Revises: 0009 Cr", "file_type": "rationale", "source_file": "backend/alembic/versions/0010_auto_llm_source.py", "source_location": "L1"}], "edges": [{"source": "backend_alembic_versions_0010_auto_llm_source_py", "target": "alembic", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0010_auto_llm_source.py", "source_location": "L7", "weight": 1.0}, {"source": "backend_alembic_versions_0010_auto_llm_source_py", "target": "0010_auto_llm_source_upgrade", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0010_auto_llm_source.py", "source_location": "L15", "weight": 1.0}, {"source": "backend_alembic_versions_0010_auto_llm_source_py", "target": "0010_auto_llm_source_downgrade", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0010_auto_llm_source.py", "source_location": "L21", "weight": 1.0}, {"source": "0010_auto_llm_source_rationale_1", "target": "backend_alembic_versions_0010_auto_llm_source_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0010_auto_llm_source.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "0010_auto_llm_source_upgrade", "callee": "execute", "source_file": "backend/alembic/versions/0010_auto_llm_source.py", "source_location": "L18"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/050dc5c1e715a6aba4d7acff809852a8a984488348d9d3d8bd5393e3d3ec3245.json b/graphify-out/cache/050dc5c1e715a6aba4d7acff809852a8a984488348d9d3d8bd5393e3d3ec3245.json
deleted file mode 100644
index c2a5500..0000000
--- a/graphify-out/cache/050dc5c1e715a6aba4d7acff809852a8a984488348d9d3d8bd5393e3d3ec3245.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_schemas_init_py", "label": "__init__.py", "file_type": "code", "source_file": "backend/app/schemas/__init__.py", "source_location": "L1"}, {"id": "init_familymemberrole", "label": "FamilyMemberRole", "file_type": "code", "source_file": "backend/app/schemas/__init__.py", "source_location": "L8"}, {"id": "str", "label": "str", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "enum", "label": "Enum", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "init_mealtype", "label": "MealType", "file_type": "code", "source_file": "backend/app/schemas/__init__.py", "source_location": "L13"}, {"id": "init_mealplanstatus", "label": "MealPlanStatus", "file_type": "code", "source_file": "backend/app/schemas/__init__.py", "source_location": "L19"}, {"id": "init_mealplanitemstatus", "label": "MealPlanItemStatus", "file_type": "code", "source_file": "backend/app/schemas/__init__.py", "source_location": "L26"}, {"id": "init_denialreason", "label": "DenialReason", "file_type": "code", "source_file": "backend/app/schemas/__init__.py", "source_location": "L33"}, {"id": "init_neversuggestreason", "label": "NeverSuggestReason", "file_type": "code", "source_file": "backend/app/schemas/__init__.py", "source_location": "L41"}, {"id": "init_ingredientbase", "label": "IngredientBase", "file_type": "code", "source_file": "backend/app/schemas/__init__.py", "source_location": "L48"}, {"id": "basemodel", "label": "BaseModel", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "init_ingredientresponse", "label": "IngredientResponse", "file_type": "code", "source_file": "backend/app/schemas/__init__.py", "source_location": "L58"}, {"id": "init_config", "label": "Config", "file_type": "code", "source_file": "backend/app/schemas/__init__.py", "source_location": "L62"}, {"id": "init_ingredientcreate", "label": "IngredientCreate", "file_type": "code", "source_file": "backend/app/schemas/__init__.py", "source_location": "L66"}, {"id": "init_familymemberbase", "label": "FamilyMemberBase", "file_type": "code", "source_file": "backend/app/schemas/__init__.py", "source_location": "L70"}, {"id": "init_familymemberresponse", "label": "FamilyMemberResponse", "file_type": "code", "source_file": "backend/app/schemas/__init__.py", "source_location": "L77"}, {"id": "init_familymembercreate", "label": "FamilyMemberCreate", "file_type": "code", "source_file": "backend/app/schemas/__init__.py", "source_location": "L87"}, {"id": "init_familyprofilebase", "label": "FamilyProfileBase", "file_type": "code", "source_file": "backend/app/schemas/__init__.py", "source_location": "L91"}, {"id": "init_familyprofileresponse", "label": "FamilyProfileResponse", "file_type": "code", "source_file": "backend/app/schemas/__init__.py", "source_location": "L100"}, {"id": "init_familyprofilecreate", "label": "FamilyProfileCreate", "file_type": "code", "source_file": "backend/app/schemas/__init__.py", "source_location": "L110"}, {"id": "init_familyprofileupdate", "label": "FamilyProfileUpdate", "file_type": "code", "source_file": "backend/app/schemas/__init__.py", "source_location": "L114"}, {"id": "init_recipeingredient", "label": "RecipeIngredient", "file_type": "code", "source_file": "backend/app/schemas/__init__.py", "source_location": "L123"}, {"id": "init_normalize", "label": "_normalize()", "file_type": "code", "source_file": "backend/app/schemas/__init__.py", "source_location": "L133"}, {"id": "init_recipebase", "label": "RecipeBase", "file_type": "code", "source_file": "backend/app/schemas/__init__.py", "source_location": "L142"}, {"id": "init_reciperesponse", "label": "RecipeResponse", "file_type": "code", "source_file": "backend/app/schemas/__init__.py", "source_location": "L161"}, {"id": "init_recipecreate", "label": "RecipeCreate", "file_type": "code", "source_file": "backend/app/schemas/__init__.py", "source_location": "L173"}, {"id": "init_mealplanitembase", "label": "MealPlanItemBase", "file_type": "code", "source_file": "backend/app/schemas/__init__.py", "source_location": "L177"}, {"id": "init_mealplanitemresponse", "label": "MealPlanItemResponse", "file_type": "code", "source_file": "backend/app/schemas/__init__.py", "source_location": "L184"}, {"id": "init_mealplanitemcreate", "label": "MealPlanItemCreate", "file_type": "code", "source_file": "backend/app/schemas/__init__.py", "source_location": "L199"}, {"id": "init_mealplanbase", "label": "MealPlanBase", "file_type": "code", "source_file": "backend/app/schemas/__init__.py", "source_location": "L203"}, {"id": "init_mealplanresponse", "label": "MealPlanResponse", "file_type": "code", "source_file": "backend/app/schemas/__init__.py", "source_location": "L210"}, {"id": "init_mealplancreate", "label": "MealPlanCreate", "file_type": "code", "source_file": "backend/app/schemas/__init__.py", "source_location": "L222"}, {"id": "init_voterequest", "label": "VoteRequest", "file_type": "code", "source_file": "backend/app/schemas/__init__.py", "source_location": "L226"}, {"id": "init_voteresponse", "label": "VoteResponse", "file_type": "code", "source_file": "backend/app/schemas/__init__.py", "source_location": "L232"}, {"id": "init_homepantrybase", "label": "HomePantryBase", "file_type": "code", "source_file": "backend/app/schemas/__init__.py", "source_location": "L243"}, {"id": "init_homepantryresponse", "label": "HomePantryResponse", "file_type": "code", "source_file": "backend/app/schemas/__init__.py", "source_location": "L250"}, {"id": "init_homepantrycreate", "label": "HomePantryCreate", "file_type": "code", "source_file": "backend/app/schemas/__init__.py", "source_location": "L261"}, {"id": "init_feedbackbase", "label": "FeedbackBase", "file_type": "code", "source_file": "backend/app/schemas/__init__.py", "source_location": "L265"}, {"id": "init_feedbackresponse", "label": "FeedbackResponse", "file_type": "code", "source_file": "backend/app/schemas/__init__.py", "source_location": "L272"}, {"id": "init_feedbackcreate", "label": "FeedbackCreate", "file_type": "code", "source_file": "backend/app/schemas/__init__.py", "source_location": "L283"}, {"id": "init_shoppinglistitem", "label": "ShoppingListItem", "file_type": "code", "source_file": "backend/app/schemas/__init__.py", "source_location": "L287"}, {"id": "init_shoppinglistresponse", "label": "ShoppingListResponse", "file_type": "code", "source_file": "backend/app/schemas/__init__.py", "source_location": "L300"}], "edges": [{"source": "backend_app_schemas_init_py", "target": "pydantic", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L1", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L2", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "uuid", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L3", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "datetime", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L4", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "enum", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L5", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_familymemberrole", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L8", "weight": 1.0}, {"source": "init_familymemberrole", "target": "str", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L8", "weight": 1.0}, {"source": "init_familymemberrole", "target": "enum", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L8", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_mealtype", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L13", "weight": 1.0}, {"source": "init_mealtype", "target": "str", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L13", "weight": 1.0}, {"source": "init_mealtype", "target": "enum", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L13", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_mealplanstatus", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L19", "weight": 1.0}, {"source": "init_mealplanstatus", "target": "str", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L19", "weight": 1.0}, {"source": "init_mealplanstatus", "target": "enum", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L19", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_mealplanitemstatus", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L26", "weight": 1.0}, {"source": "init_mealplanitemstatus", "target": "str", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L26", "weight": 1.0}, {"source": "init_mealplanitemstatus", "target": "enum", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L26", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_denialreason", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L33", "weight": 1.0}, {"source": "init_denialreason", "target": "str", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L33", "weight": 1.0}, {"source": "init_denialreason", "target": "enum", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L33", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_neversuggestreason", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L41", "weight": 1.0}, {"source": "init_neversuggestreason", "target": "str", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L41", "weight": 1.0}, {"source": "init_neversuggestreason", "target": "enum", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L41", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_ingredientbase", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L48", "weight": 1.0}, {"source": "init_ingredientbase", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L48", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_ingredientresponse", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L58", "weight": 1.0}, {"source": "init_ingredientresponse", "target": "init_ingredientbase", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L58", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L62", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_ingredientcreate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L66", "weight": 1.0}, {"source": "init_ingredientcreate", "target": "init_ingredientbase", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L66", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_familymemberbase", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L70", "weight": 1.0}, {"source": "init_familymemberbase", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L70", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_familymemberresponse", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L77", "weight": 1.0}, {"source": "init_familymemberresponse", "target": "init_familymemberbase", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L77", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L83", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_familymembercreate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L87", "weight": 1.0}, {"source": "init_familymembercreate", "target": "init_familymemberbase", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L87", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_familyprofilebase", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L91", "weight": 1.0}, {"source": "init_familyprofilebase", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L91", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_familyprofileresponse", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L100", "weight": 1.0}, {"source": "init_familyprofileresponse", "target": "init_familyprofilebase", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L100", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L106", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_familyprofilecreate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L110", "weight": 1.0}, {"source": "init_familyprofilecreate", "target": "init_familyprofilebase", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L110", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_familyprofileupdate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L114", "weight": 1.0}, {"source": "init_familyprofileupdate", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L114", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_recipeingredient", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L123", "weight": 1.0}, {"source": "init_recipeingredient", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L123", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_normalize", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L133", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_recipebase", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L142", "weight": 1.0}, {"source": "init_recipebase", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L142", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_reciperesponse", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L161", "weight": 1.0}, {"source": "init_reciperesponse", "target": "init_recipebase", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L161", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L169", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_recipecreate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L173", "weight": 1.0}, {"source": "init_recipecreate", "target": "init_recipebase", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L173", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_mealplanitembase", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L177", "weight": 1.0}, {"source": "init_mealplanitembase", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L177", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_mealplanitemresponse", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L184", "weight": 1.0}, {"source": "init_mealplanitemresponse", "target": "init_mealplanitembase", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L184", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L195", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_mealplanitemcreate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L199", "weight": 1.0}, {"source": "init_mealplanitemcreate", "target": "init_mealplanitembase", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L199", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_mealplanbase", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L203", "weight": 1.0}, {"source": "init_mealplanbase", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L203", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_mealplanresponse", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L210", "weight": 1.0}, {"source": "init_mealplanresponse", "target": "init_mealplanbase", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L210", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L218", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_mealplancreate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L222", "weight": 1.0}, {"source": "init_mealplancreate", "target": "init_mealplanbase", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L222", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_voterequest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L226", "weight": 1.0}, {"source": "init_voterequest", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L226", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_voteresponse", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L232", "weight": 1.0}, {"source": "init_voteresponse", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L232", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L239", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_homepantrybase", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L243", "weight": 1.0}, {"source": "init_homepantrybase", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L243", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_homepantryresponse", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L250", "weight": 1.0}, {"source": "init_homepantryresponse", "target": "init_homepantrybase", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L250", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L257", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_homepantrycreate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L261", "weight": 1.0}, {"source": "init_homepantrycreate", "target": "init_homepantrybase", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L261", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_feedbackbase", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L265", "weight": 1.0}, {"source": "init_feedbackbase", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L265", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_feedbackresponse", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L272", "weight": 1.0}, {"source": "init_feedbackresponse", "target": "init_feedbackbase", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L272", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L279", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_feedbackcreate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L283", "weight": 1.0}, {"source": "init_feedbackcreate", "target": "init_feedbackbase", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L283", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_shoppinglistitem", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L287", "weight": 1.0}, {"source": "init_shoppinglistitem", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L287", "weight": 1.0}, {"source": "backend_app_schemas_init_py", "target": "init_shoppinglistresponse", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L300", "weight": 1.0}, {"source": "init_shoppinglistresponse", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/__init__.py", "source_location": "L300", "weight": 1.0}], "raw_calls": [{"caller_nid": "init_normalize", "callee": "isinstance", "source_file": "backend/app/schemas/__init__.py", "source_location": "L134"}, {"caller_nid": "init_normalize", "callee": "pop", "source_file": "backend/app/schemas/__init__.py", "source_location": "L138"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/072bb5cda3348e8cf403942c120165ef363b4a4763e7183d5b2a71a987327c64.json b/graphify-out/cache/072bb5cda3348e8cf403942c120165ef363b4a4763e7183d5b2a71a987327c64.json
deleted file mode 100644
index 1371ffd..0000000
--- a/graphify-out/cache/072bb5cda3348e8cf403942c120165ef363b4a4763e7183d5b2a71a987327c64.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_tests_test_resolve_ingredient_py", "label": "test_resolve_ingredient.py", "file_type": "code", "source_file": "backend/tests/test_resolve_ingredient.py", "source_location": "L1"}, {"id": "test_resolve_ingredient_admin", "label": "_admin()", "file_type": "code", "source_file": "backend/tests/test_resolve_ingredient.py", "source_location": "L6"}, {"id": "test_resolve_ingredient_seed_ingredient", "label": "_seed_ingredient()", "file_type": "code", "source_file": "backend/tests/test_resolve_ingredient.py", "source_location": "L10"}, {"id": "test_resolve_ingredient_test_resolve_ingredient_returns_top_three_candidates", "label": "test_resolve_ingredient_returns_top_three_candidates()", "file_type": "code", "source_file": "backend/tests/test_resolve_ingredient.py", "source_location": "L19"}, {"id": "test_resolve_ingredient_test_resolve_ingredient_handles_no_unit", "label": "test_resolve_ingredient_handles_no_unit()", "file_type": "code", "source_file": "backend/tests/test_resolve_ingredient.py", "source_location": "L38"}], "edges": [{"source": "backend_tests_test_resolve_ingredient_py", "target": "pytest", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_resolve_ingredient.py", "source_location": "L1", "weight": 1.0}, {"source": "backend_tests_test_resolve_ingredient_py", "target": "test_resolve_ingredient_admin", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_resolve_ingredient.py", "source_location": "L6", "weight": 1.0}, {"source": "backend_tests_test_resolve_ingredient_py", "target": "test_resolve_ingredient_seed_ingredient", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_resolve_ingredient.py", "source_location": "L10", "weight": 1.0}, {"source": "backend_tests_test_resolve_ingredient_py", "target": "test_resolve_ingredient_test_resolve_ingredient_returns_top_three_candidates", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_resolve_ingredient.py", "source_location": "L19", "weight": 1.0}, {"source": "backend_tests_test_resolve_ingredient_py", "target": "test_resolve_ingredient_test_resolve_ingredient_handles_no_unit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_resolve_ingredient.py", "source_location": "L38", "weight": 1.0}, {"source": "test_resolve_ingredient_seed_ingredient", "target": "test_resolve_ingredient_admin", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_resolve_ingredient.py", "source_location": "L14", "weight": 1.0}, {"source": "test_resolve_ingredient_test_resolve_ingredient_returns_top_three_candidates", "target": "test_resolve_ingredient_seed_ingredient", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_resolve_ingredient.py", "source_location": "L20", "weight": 1.0}, {"source": "test_resolve_ingredient_test_resolve_ingredient_returns_top_three_candidates", "target": "test_resolve_ingredient_admin", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_resolve_ingredient.py", "source_location": "L27", "weight": 1.0}, {"source": "test_resolve_ingredient_test_resolve_ingredient_handles_no_unit", "target": "test_resolve_ingredient_seed_ingredient", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_resolve_ingredient.py", "source_location": "L39", "weight": 1.0}, {"source": "test_resolve_ingredient_test_resolve_ingredient_handles_no_unit", "target": "test_resolve_ingredient_admin", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_resolve_ingredient.py", "source_location": "L43", "weight": 1.0}], "raw_calls": [{"caller_nid": "test_resolve_ingredient_seed_ingredient", "callee": "post", "source_file": "backend/tests/test_resolve_ingredient.py", "source_location": "L11"}, {"caller_nid": "test_resolve_ingredient_seed_ingredient", "callee": "json", "source_file": "backend/tests/test_resolve_ingredient.py", "source_location": "L16"}, {"caller_nid": "test_resolve_ingredient_test_resolve_ingredient_returns_top_three_candidates", "callee": "post", "source_file": "backend/tests/test_resolve_ingredient.py", "source_location": "L24"}, {"caller_nid": "test_resolve_ingredient_test_resolve_ingredient_returns_top_three_candidates", "callee": "json", "source_file": "backend/tests/test_resolve_ingredient.py", "source_location": "L30"}, {"caller_nid": "test_resolve_ingredient_test_resolve_ingredient_handles_no_unit", "callee": "post", "source_file": "backend/tests/test_resolve_ingredient.py", "source_location": "L40"}, {"caller_nid": "test_resolve_ingredient_test_resolve_ingredient_handles_no_unit", "callee": "json", "source_file": "backend/tests/test_resolve_ingredient.py", "source_location": "L45"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/07f69a362a2970b4ceac515265a92829233c4a0b451df754854fc43ec8968ac9.json b/graphify-out/cache/07f69a362a2970b4ceac515265a92829233c4a0b451df754854fc43ec8968ac9.json
deleted file mode 100644
index 866388a..0000000
--- a/graphify-out/cache/07f69a362a2970b4ceac515265a92829233c4a0b451df754854fc43ec8968ac9.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_tests_test_scrape_endpoint_py", "label": "test_scrape_endpoint.py", "file_type": "code", "source_file": "backend/tests/test_scrape_endpoint.py", "source_location": "L1"}, {"id": "test_scrape_endpoint_admin_token", "label": "_admin_token()", "file_type": "code", "source_file": "backend/tests/test_scrape_endpoint.py", "source_location": "L20"}, {"id": "test_scrape_endpoint_test_scrape_returns_202_and_log_id", "label": "test_scrape_returns_202_and_log_id()", "file_type": "code", "source_file": "backend/tests/test_scrape_endpoint.py", "source_location": "L26"}, {"id": "test_scrape_endpoint_rationale_1", "label": "Async scrape endpoint contract. Verifies that ``POST /api/admin/scrape``: - r", "file_type": "rationale", "source_file": "backend/tests/test_scrape_endpoint.py", "source_location": "L1"}, {"id": "test_scrape_endpoint_rationale_27", "label": "Endpoint enqueues the scrape and returns 202 + scrape_log_id. We replace th", "file_type": "rationale", "source_file": "backend/tests/test_scrape_endpoint.py", "source_location": "L27"}], "edges": [{"source": "backend_tests_test_scrape_endpoint_py", "target": "os", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_scrape_endpoint.py", "source_location": "L11", "weight": 1.0}, {"source": "backend_tests_test_scrape_endpoint_py", "target": "uuid", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_scrape_endpoint.py", "source_location": "L12", "weight": 1.0}, {"source": "backend_tests_test_scrape_endpoint_py", "target": "pytest", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_scrape_endpoint.py", "source_location": "L14", "weight": 1.0}, {"source": "backend_tests_test_scrape_endpoint_py", "target": "test_scrape_endpoint_admin_token", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_scrape_endpoint.py", "source_location": "L20", "weight": 1.0}, {"source": "backend_tests_test_scrape_endpoint_py", "target": "test_scrape_endpoint_test_scrape_returns_202_and_log_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_scrape_endpoint.py", "source_location": "L26", "weight": 1.0}, {"source": "test_scrape_endpoint_rationale_1", "target": "backend_tests_test_scrape_endpoint_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_scrape_endpoint.py", "source_location": "L1", "weight": 1.0}, {"source": "test_scrape_endpoint_rationale_27", "target": "test_scrape_endpoint_test_scrape_returns_202_and_log_id", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_scrape_endpoint.py", "source_location": "L27", "weight": 1.0}], "raw_calls": [{"caller_nid": "test_scrape_endpoint_admin_token", "callee": "setenv", "source_file": "backend/tests/test_scrape_endpoint.py", "source_location": "L21"}, {"caller_nid": "test_scrape_endpoint_test_scrape_returns_202_and_log_id", "callee": "setattr", "source_file": "backend/tests/test_scrape_endpoint.py", "source_location": "L40"}, {"caller_nid": "test_scrape_endpoint_test_scrape_returns_202_and_log_id", "callee": "post", "source_file": "backend/tests/test_scrape_endpoint.py", "source_location": "L44"}, {"caller_nid": "test_scrape_endpoint_test_scrape_returns_202_and_log_id", "callee": "json", "source_file": "backend/tests/test_scrape_endpoint.py", "source_location": "L49"}, {"caller_nid": "test_scrape_endpoint_test_scrape_returns_202_and_log_id", "callee": "UUID", "source_file": "backend/tests/test_scrape_endpoint.py", "source_location": "L53"}, {"caller_nid": "test_scrape_endpoint_test_scrape_returns_202_and_log_id", "callee": "first", "source_file": "backend/tests/test_scrape_endpoint.py", "source_location": "L58"}, {"caller_nid": "test_scrape_endpoint_test_scrape_returns_202_and_log_id", "callee": "filter", "source_file": "backend/tests/test_scrape_endpoint.py", "source_location": "L58"}, {"caller_nid": "test_scrape_endpoint_test_scrape_returns_202_and_log_id", "callee": "query", "source_file": "backend/tests/test_scrape_endpoint.py", "source_location": "L58"}, {"caller_nid": "test_scrape_endpoint_test_scrape_returns_202_and_log_id", "callee": "len", "source_file": "backend/tests/test_scrape_endpoint.py", "source_location": "L67"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/0a65e94e392f664c73e4b61ca33a717f824a77c2d37ec17ee9ec8b8507e90808.json b/graphify-out/cache/0a65e94e392f664c73e4b61ca33a717f824a77c2d37ec17ee9ec8b8507e90808.json
deleted file mode 100644
index 083fc04..0000000
--- a/graphify-out/cache/0a65e94e392f664c73e4b61ca33a717f824a77c2d37ec17ee9ec8b8507e90808.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "frontend_src_pages_mealdetail_tsx", "label": "MealDetail.tsx", "file_type": "code", "source_file": "frontend/src/pages/MealDetail.tsx", "source_location": "L1"}], "edges": [{"source": "frontend_src_pages_mealdetail_tsx", "target": "react", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/MealDetail.tsx", "source_location": "L1", "weight": 1.0}, {"source": "frontend_src_pages_mealdetail_tsx", "target": "react_query", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/MealDetail.tsx", "source_location": "L2", "weight": 1.0}, {"source": "frontend_src_pages_mealdetail_tsx", "target": "react_router_dom", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/MealDetail.tsx", "source_location": "L3", "weight": 1.0}, {"source": "frontend_src_pages_mealdetail_tsx", "target": "lucide_react", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/MealDetail.tsx", "source_location": "L4", "weight": 1.0}, {"source": "frontend_src_pages_mealdetail_tsx", "target": "frontend_src_pages_api", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/MealDetail.tsx", "source_location": "L5", "weight": 1.0}, {"source": "frontend_src_pages_mealdetail_tsx", "target": "frontend_src_pages_types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/MealDetail.tsx", "source_location": "L6", "weight": 1.0}, {"source": "frontend_src_pages_mealdetail_tsx", "target": "frontend_src_pages_components_ui_button", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/MealDetail.tsx", "source_location": "L7", "weight": 1.0}, {"source": "frontend_src_pages_mealdetail_tsx", "target": "frontend_src_pages_components_ui_badge", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/MealDetail.tsx", "source_location": "L8", "weight": 1.0}, {"source": "frontend_src_pages_mealdetail_tsx", "target": "frontend_src_pages_components_ui_card", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/MealDetail.tsx", "source_location": "L9", "weight": 1.0}, {"source": "frontend_src_pages_mealdetail_tsx", "target": "frontend_src_pages_components_ui_skeleton", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/MealDetail.tsx", "source_location": "L10", "weight": 1.0}, {"source": "frontend_src_pages_mealdetail_tsx", "target": "frontend_src_pages_components_ui_select", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/MealDetail.tsx", "source_location": "L11", "weight": 1.0}, {"source": "frontend_src_pages_mealdetail_tsx", "target": "frontend_src_pages_components_ui_textarea", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/MealDetail.tsx", "source_location": "L12", "weight": 1.0}, {"source": "frontend_src_pages_mealdetail_tsx", "target": "frontend_src_pages_lib_toast", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/MealDetail.tsx", "source_location": "L13", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/graphify-out/cache/0c8874623eae0202bed38a1f0c6c14b19cd40af0d49aa8595914711c6ac8b77a.json b/graphify-out/cache/0c8874623eae0202bed38a1f0c6c14b19cd40af0d49aa8595914711c6ac8b77a.json
deleted file mode 100644
index 937cf2a..0000000
--- a/graphify-out/cache/0c8874623eae0202bed38a1f0c6c14b19cd40af0d49aa8595914711c6ac8b77a.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "scripts_enrich_recipes_spoonacular_py", "label": "enrich_recipes_spoonacular.py", "file_type": "code", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L1"}, {"id": "enrich_recipes_spoonacular_strip_html", "label": "strip_html()", "file_type": "code", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L30"}, {"id": "enrich_recipes_spoonacular_search_recipe", "label": "search_recipe()", "file_type": "code", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L34"}, {"id": "enrich_recipes_spoonacular_main", "label": "main()", "file_type": "code", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L53"}], "edges": [{"source": "scripts_enrich_recipes_spoonacular_py", "target": "os", "relation": "imports", "confidence": "EXTRACTED", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L12", "weight": 1.0}, {"source": "scripts_enrich_recipes_spoonacular_py", "target": "re", "relation": "imports", "confidence": "EXTRACTED", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L13", "weight": 1.0}, {"source": "scripts_enrich_recipes_spoonacular_py", "target": "time", "relation": "imports", "confidence": "EXTRACTED", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L14", "weight": 1.0}, {"source": "scripts_enrich_recipes_spoonacular_py", "target": "logging", "relation": "imports", "confidence": "EXTRACTED", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L15", "weight": 1.0}, {"source": "scripts_enrich_recipes_spoonacular_py", "target": "sys", "relation": "imports", "confidence": "EXTRACTED", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L16", "weight": 1.0}, {"source": "scripts_enrich_recipes_spoonacular_py", "target": "requests", "relation": "imports", "confidence": "EXTRACTED", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L18", "weight": 1.0}, {"source": "scripts_enrich_recipes_spoonacular_py", "target": "sqlalchemy", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L19", "weight": 1.0}, {"source": "scripts_enrich_recipes_spoonacular_py", "target": "enrich_recipes_spoonacular_strip_html", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L30", "weight": 1.0}, {"source": "scripts_enrich_recipes_spoonacular_py", "target": "enrich_recipes_spoonacular_search_recipe", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L34", "weight": 1.0}, {"source": "scripts_enrich_recipes_spoonacular_py", "target": "enrich_recipes_spoonacular_main", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L53", "weight": 1.0}, {"source": "enrich_recipes_spoonacular_main", "target": "enrich_recipes_spoonacular_search_recipe", "relation": "calls", "confidence": "EXTRACTED", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L81", "weight": 1.0}, {"source": "enrich_recipes_spoonacular_main", "target": "enrich_recipes_spoonacular_strip_html", "relation": "calls", "confidence": "EXTRACTED", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L95", "weight": 1.0}], "raw_calls": [{"caller_nid": "enrich_recipes_spoonacular_strip_html", "callee": "strip", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L31"}, {"caller_nid": "enrich_recipes_spoonacular_strip_html", "callee": "sub", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L31"}, {"caller_nid": "enrich_recipes_spoonacular_search_recipe", "callee": "get", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L35"}, {"caller_nid": "enrich_recipes_spoonacular_search_recipe", "callee": "error", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L46"}, {"caller_nid": "enrich_recipes_spoonacular_search_recipe", "callee": "exit", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L47"}, {"caller_nid": "enrich_recipes_spoonacular_search_recipe", "callee": "raise_for_status", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L48"}, {"caller_nid": "enrich_recipes_spoonacular_search_recipe", "callee": "get", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L49"}, {"caller_nid": "enrich_recipes_spoonacular_search_recipe", "callee": "json", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L49"}, {"caller_nid": "enrich_recipes_spoonacular_main", "callee": "error", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L55"}, {"caller_nid": "enrich_recipes_spoonacular_main", "callee": "exit", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L56"}, {"caller_nid": "enrich_recipes_spoonacular_main", "callee": "create_engine", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L58"}, {"caller_nid": "enrich_recipes_spoonacular_main", "callee": "connect", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L60"}, {"caller_nid": "enrich_recipes_spoonacular_main", "callee": "fetchall", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L61"}, {"caller_nid": "enrich_recipes_spoonacular_main", "callee": "execute", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L61"}, {"caller_nid": "enrich_recipes_spoonacular_main", "callee": "text", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L62"}, {"caller_nid": "enrich_recipes_spoonacular_main", "callee": "info", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L70"}, {"caller_nid": "enrich_recipes_spoonacular_main", "callee": "len", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L70"}, {"caller_nid": "enrich_recipes_spoonacular_main", "callee": "create_engine", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L75"}, {"caller_nid": "enrich_recipes_spoonacular_main", "callee": "connect", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L76"}, {"caller_nid": "enrich_recipes_spoonacular_main", "callee": "info", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L78"}, {"caller_nid": "enrich_recipes_spoonacular_main", "callee": "len", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L78"}, {"caller_nid": "enrich_recipes_spoonacular_main", "callee": "warning", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L83"}, {"caller_nid": "enrich_recipes_spoonacular_main", "callee": "sleep", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L84"}, {"caller_nid": "enrich_recipes_spoonacular_main", "callee": "info", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L88"}, {"caller_nid": "enrich_recipes_spoonacular_main", "callee": "sleep", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L90"}, {"caller_nid": "enrich_recipes_spoonacular_main", "callee": "get", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L93"}, {"caller_nid": "enrich_recipes_spoonacular_main", "callee": "get", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L94"}, {"caller_nid": "enrich_recipes_spoonacular_main", "callee": "execute", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L97"}, {"caller_nid": "enrich_recipes_spoonacular_main", "callee": "text", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L98"}, {"caller_nid": "enrich_recipes_spoonacular_main", "callee": "commit", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L103"}, {"caller_nid": "enrich_recipes_spoonacular_main", "callee": "len", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L106"}, {"caller_nid": "enrich_recipes_spoonacular_main", "callee": "info", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L107"}, {"caller_nid": "enrich_recipes_spoonacular_main", "callee": "sleep", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L109"}, {"caller_nid": "enrich_recipes_spoonacular_main", "callee": "info", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L111"}, {"caller_nid": "enrich_recipes_spoonacular_main", "callee": "len", "source_file": "scripts/enrich_recipes_spoonacular.py", "source_location": "L115"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/0dd14b7c999ba812845454af32920614ef5f554da8ccf90350b8a32c3c092aa4.json b/graphify-out/cache/0dd14b7c999ba812845454af32920614ef5f554da8ccf90350b8a32c3c092aa4.json
deleted file mode 100644
index 9f8dab1..0000000
--- a/graphify-out/cache/0dd14b7c999ba812845454af32920614ef5f554da8ccf90350b8a32c3c092aa4.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "frontend_src_components_ui_skeleton_tsx", "label": "Skeleton.tsx", "file_type": "code", "source_file": "frontend/src/components/ui/Skeleton.tsx", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/graphify-out/cache/117be2824f18e240245f8c042cc19d9c761ae95544bdf3c5a25067b8a64486f7.json b/graphify-out/cache/117be2824f18e240245f8c042cc19d9c761ae95544bdf3c5a25067b8a64486f7.json
deleted file mode 100644
index 07e1f51..0000000
--- a/graphify-out/cache/117be2824f18e240245f8c042cc19d9c761ae95544bdf3c5a25067b8a64486f7.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "frontend_src_vite_env_d_ts", "label": "vite-env.d.ts", "file_type": "code", "source_file": "frontend/src/vite-env.d.ts", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/graphify-out/cache/1293a7c4fcf6c692fd6add4221f54206d8e28d3f15fbbd600b005d16e2cba919.json b/graphify-out/cache/1293a7c4fcf6c692fd6add4221f54206d8e28d3f15fbbd600b005d16e2cba919.json
deleted file mode 100644
index 4100474..0000000
--- a/graphify-out/cache/1293a7c4fcf6c692fd6add4221f54206d8e28d3f15fbbd600b005d16e2cba919.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_tests_test_planner_generate_py", "label": "test_planner_generate.py", "file_type": "code", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L1"}, {"id": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "label": "test_generate_meal_plan_against_seeded_data()", "file_type": "code", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L10"}, {"id": "test_planner_generate_rationale_11", "label": "Smoke test: with the seeded 30 recipes and a seeded grocery scrape, generate", "file_type": "rationale", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L11"}], "edges": [{"source": "backend_tests_test_planner_generate_py", "target": "datetime", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L1", "weight": 1.0}, {"source": "backend_tests_test_planner_generate_py", "target": "decimal", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L2", "weight": 1.0}, {"source": "backend_tests_test_planner_generate_py", "target": "uuid", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L3", "weight": 1.0}, {"source": "backend_tests_test_planner_generate_py", "target": "pytest", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L5", "weight": 1.0}, {"source": "backend_tests_test_planner_generate_py", "target": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L10", "weight": 1.0}, {"source": "test_planner_generate_rationale_11", "target": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L11", "weight": 1.0}], "raw_calls": [{"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "SessionLocal", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L29"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "FamilyProfile", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L31"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "uuid4", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L32"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "add", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L39"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "commit", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L40"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "all", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L45"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "limit", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L45"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "query", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L45"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "add", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L46"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "GroceryItem", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L47"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "uuid4", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L48"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "Decimal", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L52"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "Decimal", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L53"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "now", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L55"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "commit", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L58"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "close", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L60"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "SessionLocal", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L62"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "run_match_job", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L64"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "generate_meal_plan", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L65"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "date", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L65"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "len", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L67"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "first", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L68"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "filter", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L68"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "query", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L68"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "all", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L70"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "filter", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L70"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "query", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L70"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "len", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L71"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "len", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L71"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "SessionLocal", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L73"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "delete", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L75"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "filter", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L75"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "query", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L75"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "in_", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L76"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "all", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L77"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "filter", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L77"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "query", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L77"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "delete", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L80"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "filter", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L80"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "query", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L80"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "delete", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L81"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "filter", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L81"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "query", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L81"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "delete", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L82"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "filter", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L82"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "query", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L82"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "like", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L82"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "delete", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L83"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "filter", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L83"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "query", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L83"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "commit", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L86"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "close", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L88"}, {"caller_nid": "test_planner_generate_test_generate_meal_plan_against_seeded_data", "callee": "close", "source_file": "backend/tests/test_planner_generate.py", "source_location": "L89"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/13f4a2742a30b67d3e0e5c4fd9ffcde69f2d0505c76156e4d929597783b411cd.json b/graphify-out/cache/13f4a2742a30b67d3e0e5c4fd9ffcde69f2d0505c76156e4d929597783b411cd.json
deleted file mode 100644
index f8ba0f8..0000000
--- a/graphify-out/cache/13f4a2742a30b67d3e0e5c4fd9ffcde69f2d0505c76156e4d929597783b411cd.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_schemas_never_suggest_py", "label": "never_suggest.py", "file_type": "code", "source_file": "backend/app/schemas/never_suggest.py", "source_location": "L1"}, {"id": "never_suggest_neversuggestcreate", "label": "NeverSuggestCreate", "file_type": "code", "source_file": "backend/app/schemas/never_suggest.py", "source_location": "L9"}, {"id": "basemodel", "label": "BaseModel", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "never_suggest_exactly_one_target", "label": "_exactly_one_target()", "file_type": "code", "source_file": "backend/app/schemas/never_suggest.py", "source_location": "L17"}, {"id": "never_suggest_neversuggestread", "label": "NeverSuggestRead", "file_type": "code", "source_file": "backend/app/schemas/never_suggest.py", "source_location": "L24"}], "edges": [{"source": "backend_app_schemas_never_suggest_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/never_suggest.py", "source_location": "L3", "weight": 1.0}, {"source": "backend_app_schemas_never_suggest_py", "target": "uuid", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/never_suggest.py", "source_location": "L4", "weight": 1.0}, {"source": "backend_app_schemas_never_suggest_py", "target": "pydantic", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/never_suggest.py", "source_location": "L6", "weight": 1.0}, {"source": "backend_app_schemas_never_suggest_py", "target": "never_suggest_neversuggestcreate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/never_suggest.py", "source_location": "L9", "weight": 1.0}, {"source": "never_suggest_neversuggestcreate", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/never_suggest.py", "source_location": "L9", "weight": 1.0}, {"source": "backend_app_schemas_never_suggest_py", "target": "never_suggest_exactly_one_target", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/never_suggest.py", "source_location": "L17", "weight": 1.0}, {"source": "backend_app_schemas_never_suggest_py", "target": "never_suggest_neversuggestread", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/never_suggest.py", "source_location": "L24", "weight": 1.0}, {"source": "never_suggest_neversuggestread", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/never_suggest.py", "source_location": "L24", "weight": 1.0}], "raw_calls": [{"caller_nid": "never_suggest_exactly_one_target", "callee": "sum", "source_file": "backend/app/schemas/never_suggest.py", "source_location": "L18"}, {"caller_nid": "never_suggest_exactly_one_target", "callee": "ValueError", "source_file": "backend/app/schemas/never_suggest.py", "source_location": "L20"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/14c23d1097071854a78ccf2b1e2d14f7f7da268108ed34db3c94e642981598c5.json b/graphify-out/cache/14c23d1097071854a78ccf2b1e2d14f7f7da268108ed34db3c94e642981598c5.json
deleted file mode 100644
index acb391d..0000000
--- a/graphify-out/cache/14c23d1097071854a78ccf2b1e2d14f7f7da268108ed34db3c94e642981598c5.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_alembic_versions_0002_seed_data_py", "label": "0002_seed_data.py", "file_type": "code", "source_file": "backend/alembic/versions/0002_seed_data.py", "source_location": "L1"}, {"id": "0002_seed_data_upgrade", "label": "upgrade()", "file_type": "code", "source_file": "backend/alembic/versions/0002_seed_data.py", "source_location": "L17"}, {"id": "0002_seed_data_downgrade", "label": "downgrade()", "file_type": "code", "source_file": "backend/alembic/versions/0002_seed_data.py", "source_location": "L112"}, {"id": "0002_seed_data_rationale_1", "label": "Seed initial data Revision ID: 0002 Revises: 0001 Create Date: 2026-05-04", "file_type": "rationale", "source_file": "backend/alembic/versions/0002_seed_data.py", "source_location": "L1"}], "edges": [{"source": "backend_alembic_versions_0002_seed_data_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0002_seed_data.py", "source_location": "L7", "weight": 1.0}, {"source": "backend_alembic_versions_0002_seed_data_py", "target": "alembic", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0002_seed_data.py", "source_location": "L8", "weight": 1.0}, {"source": "backend_alembic_versions_0002_seed_data_py", "target": "sqlalchemy", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0002_seed_data.py", "source_location": "L9", "weight": 1.0}, {"source": "backend_alembic_versions_0002_seed_data_py", "target": "0002_seed_data_upgrade", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0002_seed_data.py", "source_location": "L17", "weight": 1.0}, {"source": "backend_alembic_versions_0002_seed_data_py", "target": "0002_seed_data_downgrade", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0002_seed_data.py", "source_location": "L112", "weight": 1.0}, {"source": "0002_seed_data_rationale_1", "target": "backend_alembic_versions_0002_seed_data_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0002_seed_data.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "0002_seed_data_upgrade", "callee": "execute", "source_file": "backend/alembic/versions/0002_seed_data.py", "source_location": "L22"}, {"caller_nid": "0002_seed_data_upgrade", "callee": "execute", "source_file": "backend/alembic/versions/0002_seed_data.py", "source_location": "L27"}, {"caller_nid": "0002_seed_data_upgrade", "callee": "execute", "source_file": "backend/alembic/versions/0002_seed_data.py", "source_location": "L105"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/14ce2c9d4a7e4c0451cd3cba5cc4a8bbb6aa8901979d8f60dae318f4022737c0.json b/graphify-out/cache/14ce2c9d4a7e4c0451cd3cba5cc4a8bbb6aa8901979d8f60dae318f4022737c0.json
deleted file mode 100644
index 2b5b0b8..0000000
--- a/graphify-out/cache/14ce2c9d4a7e4c0451cd3cba5cc4a8bbb6aa8901979d8f60dae318f4022737c0.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_tests_init_py", "label": "__init__.py", "file_type": "code", "source_file": "backend/tests/__init__.py", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/graphify-out/cache/1582d1a776af58a77080858688fad1a1d0c67f1380e659186a7dbd9122cdb75b.json b/graphify-out/cache/1582d1a776af58a77080858688fad1a1d0c67f1380e659186a7dbd9122cdb75b.json
deleted file mode 100644
index b397e20..0000000
--- a/graphify-out/cache/1582d1a776af58a77080858688fad1a1d0c67f1380e659186a7dbd9122cdb75b.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "frontend_src_components_ui_input_tsx", "label": "Input.tsx", "file_type": "code", "source_file": "frontend/src/components/ui/Input.tsx", "source_location": "L1"}, {"id": "input_cn", "label": "cn()", "file_type": "code", "source_file": "frontend/src/components/ui/Input.tsx", "source_location": "L17"}], "edges": [{"source": "frontend_src_components_ui_input_tsx", "target": "react", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/components/ui/Input.tsx", "source_location": "L1", "weight": 1.0}, {"source": "frontend_src_components_ui_input_tsx", "target": "frontend_src_components_ui_lib_utils", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/components/ui/Input.tsx", "source_location": "L2", "weight": 1.0}, {"source": "frontend_src_components_ui_input_tsx", "target": "input_cn", "relation": "contains", "confidence": "EXTRACTED", "source_file": "frontend/src/components/ui/Input.tsx", "source_location": "L17", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/graphify-out/cache/159648af2bd35ba13683d5bbde59cf5a690123c5a0f08c8c197aa542559a44dd.json b/graphify-out/cache/159648af2bd35ba13683d5bbde59cf5a690123c5a0f08c8c197aa542559a44dd.json
deleted file mode 100644
index b0dbe46..0000000
--- a/graphify-out/cache/159648af2bd35ba13683d5bbde59cf5a690123c5a0f08c8c197aa542559a44dd.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "frontend_src_components_ui_select_tsx", "label": "Select.tsx", "file_type": "code", "source_file": "frontend/src/components/ui/Select.tsx", "source_location": "L1"}], "edges": [{"source": "frontend_src_components_ui_select_tsx", "target": "frontend_src_components_ui_lib_utils", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/components/ui/Select.tsx", "source_location": "L1", "weight": 1.0}, {"source": "frontend_src_components_ui_select_tsx", "target": "react", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/components/ui/Select.tsx", "source_location": "L2", "weight": 1.0}, {"source": "frontend_src_components_ui_select_tsx", "target": "react", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/components/ui/Select.tsx", "source_location": "L3", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/graphify-out/cache/1a2ef2a73d4b7fc6c29fd6ce945673bc37aeb8d3ec90db5d752124450d167e3f.json b/graphify-out/cache/1a2ef2a73d4b7fc6c29fd6ce945673bc37aeb8d3ec90db5d752124450d167e3f.json
deleted file mode 100644
index d63952f..0000000
--- a/graphify-out/cache/1a2ef2a73d4b7fc6c29fd6ce945673bc37aeb8d3ec90db5d752124450d167e3f.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_services_orchestrator_init_py", "label": "__init__.py", "file_type": "code", "source_file": "backend/app/services/orchestrator/__init__.py", "source_location": "L1"}], "edges": [{"source": "backend_app_services_orchestrator_init_py", "target": "app_services_orchestrator_runner", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/orchestrator/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/graphify-out/cache/1b2fe490e96959f36c17155491592c5c923f66a548649a8a62483804d47a9fa7.json b/graphify-out/cache/1b2fe490e96959f36c17155491592c5c923f66a548649a8a62483804d47a9fa7.json
deleted file mode 100644
index c28e0b8..0000000
--- a/graphify-out/cache/1b2fe490e96959f36c17155491592c5c923f66a548649a8a62483804d47a9fa7.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_api_feedback_py", "label": "feedback.py", "file_type": "code", "source_file": "backend/app/api/feedback.py", "source_location": "L1"}, {"id": "feedback_get_feedback", "label": "get_feedback()", "file_type": "code", "source_file": "backend/app/api/feedback.py", "source_location": "L17"}, {"id": "feedback_create_feedback", "label": "create_feedback()", "file_type": "code", "source_file": "backend/app/api/feedback.py", "source_location": "L39"}, {"id": "feedback_rationale_22", "label": "Get existing feedback for a meal plan item.", "file_type": "rationale", "source_file": "backend/app/api/feedback.py", "source_location": "L22"}, {"id": "feedback_rationale_44", "label": "Create or update feedback for a meal plan item.", "file_type": "rationale", "source_file": "backend/app/api/feedback.py", "source_location": "L44"}], "edges": [{"source": "backend_app_api_feedback_py", "target": "uuid", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/feedback.py", "source_location": "L3", "weight": 1.0}, {"source": "backend_app_api_feedback_py", "target": "fastapi", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/feedback.py", "source_location": "L5", "weight": 1.0}, {"source": "backend_app_api_feedback_py", "target": "sqlalchemy_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/feedback.py", "source_location": "L6", "weight": 1.0}, {"source": "backend_app_api_feedback_py", "target": "app_database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/feedback.py", "source_location": "L8", "weight": 1.0}, {"source": "backend_app_api_feedback_py", "target": "app_models", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/feedback.py", "source_location": "L9", "weight": 1.0}, {"source": "backend_app_api_feedback_py", "target": "app_schemas", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/feedback.py", "source_location": "L10", "weight": 1.0}, {"source": "backend_app_api_feedback_py", "target": "app_security", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/feedback.py", "source_location": "L11", "weight": 1.0}, {"source": "backend_app_api_feedback_py", "target": "feedback_get_feedback", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/feedback.py", "source_location": "L17", "weight": 1.0}, {"source": "backend_app_api_feedback_py", "target": "feedback_create_feedback", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/feedback.py", "source_location": "L39", "weight": 1.0}, {"source": "feedback_rationale_22", "target": "feedback_get_feedback", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/api/feedback.py", "source_location": "L22", "weight": 1.0}, {"source": "feedback_rationale_44", "target": "feedback_create_feedback", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/api/feedback.py", "source_location": "L44", "weight": 1.0}], "raw_calls": [{"caller_nid": "feedback_get_feedback", "callee": "first", "source_file": "backend/app/api/feedback.py", "source_location": "L23"}, {"caller_nid": "feedback_get_feedback", "callee": "filter", "source_file": "backend/app/api/feedback.py", "source_location": "L23"}, {"caller_nid": "feedback_get_feedback", "callee": "query", "source_file": "backend/app/api/feedback.py", "source_location": "L23"}, {"caller_nid": "feedback_get_feedback", "callee": "HTTPException", "source_file": "backend/app/api/feedback.py", "source_location": "L25"}, {"caller_nid": "feedback_get_feedback", "callee": "first", "source_file": "backend/app/api/feedback.py", "source_location": "L28"}, {"caller_nid": "feedback_get_feedback", "callee": "filter", "source_file": "backend/app/api/feedback.py", "source_location": "L28"}, {"caller_nid": "feedback_get_feedback", "callee": "query", "source_file": "backend/app/api/feedback.py", "source_location": "L28"}, {"caller_nid": "feedback_get_feedback", "callee": "UUID", "source_file": "backend/app/api/feedback.py", "source_location": "L31"}, {"caller_nid": "feedback_create_feedback", "callee": "first", "source_file": "backend/app/api/feedback.py", "source_location": "L45"}, {"caller_nid": "feedback_create_feedback", "callee": "filter", "source_file": "backend/app/api/feedback.py", "source_location": "L45"}, {"caller_nid": "feedback_create_feedback", "callee": "query", "source_file": "backend/app/api/feedback.py", "source_location": "L45"}, {"caller_nid": "feedback_create_feedback", "callee": "HTTPException", "source_file": "backend/app/api/feedback.py", "source_location": "L49"}, {"caller_nid": "feedback_create_feedback", "callee": "first", "source_file": "backend/app/api/feedback.py", "source_location": "L51"}, {"caller_nid": "feedback_create_feedback", "callee": "filter", "source_file": "backend/app/api/feedback.py", "source_location": "L51"}, {"caller_nid": "feedback_create_feedback", "callee": "query", "source_file": "backend/app/api/feedback.py", "source_location": "L51"}, {"caller_nid": "feedback_create_feedback", "callee": "UUID", "source_file": "backend/app/api/feedback.py", "source_location": "L51"}, {"caller_nid": "feedback_create_feedback", "callee": "HTTPException", "source_file": "backend/app/api/feedback.py", "source_location": "L53"}, {"caller_nid": "feedback_create_feedback", "callee": "first", "source_file": "backend/app/api/feedback.py", "source_location": "L56"}, {"caller_nid": "feedback_create_feedback", "callee": "filter", "source_file": "backend/app/api/feedback.py", "source_location": "L56"}, {"caller_nid": "feedback_create_feedback", "callee": "query", "source_file": "backend/app/api/feedback.py", "source_location": "L56"}, {"caller_nid": "feedback_create_feedback", "callee": "UUID", "source_file": "backend/app/api/feedback.py", "source_location": "L59"}, {"caller_nid": "feedback_create_feedback", "callee": "commit", "source_file": "backend/app/api/feedback.py", "source_location": "L69"}, {"caller_nid": "feedback_create_feedback", "callee": "refresh", "source_file": "backend/app/api/feedback.py", "source_location": "L70"}, {"caller_nid": "feedback_create_feedback", "callee": "Feedback", "source_file": "backend/app/api/feedback.py", "source_location": "L73"}, {"caller_nid": "feedback_create_feedback", "callee": "UUID", "source_file": "backend/app/api/feedback.py", "source_location": "L74"}, {"caller_nid": "feedback_create_feedback", "callee": "add", "source_file": "backend/app/api/feedback.py", "source_location": "L81"}, {"caller_nid": "feedback_create_feedback", "callee": "commit", "source_file": "backend/app/api/feedback.py", "source_location": "L82"}, {"caller_nid": "feedback_create_feedback", "callee": "refresh", "source_file": "backend/app/api/feedback.py", "source_location": "L83"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/1d8dc9705bbd79895fb0e5f812017c03af1d75fbcc77296aa42fc14156528f48.json b/graphify-out/cache/1d8dc9705bbd79895fb0e5f812017c03af1d75fbcc77296aa42fc14156528f48.json
deleted file mode 100644
index a151886..0000000
--- a/graphify-out/cache/1d8dc9705bbd79895fb0e5f812017c03af1d75fbcc77296aa42fc14156528f48.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_schemas_recipe_py", "label": "recipe.py", "file_type": "code", "source_file": "backend/app/schemas/recipe.py", "source_location": "L1"}, {"id": "recipe_recipeingredientref", "label": "RecipeIngredientRef", "file_type": "code", "source_file": "backend/app/schemas/recipe.py", "source_location": "L10"}, {"id": "basemodel", "label": "BaseModel", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "recipe_recipebase", "label": "RecipeBase", "file_type": "code", "source_file": "backend/app/schemas/recipe.py", "source_location": "L17"}, {"id": "recipe_recipecreate", "label": "RecipeCreate", "file_type": "code", "source_file": "backend/app/schemas/recipe.py", "source_location": "L34"}, {"id": "recipe_recipeupdate", "label": "RecipeUpdate", "file_type": "code", "source_file": "backend/app/schemas/recipe.py", "source_location": "L38"}, {"id": "recipe_reciperead", "label": "RecipeRead", "file_type": "code", "source_file": "backend/app/schemas/recipe.py", "source_location": "L54"}, {"id": "recipe_resolveingredientrequest", "label": "ResolveIngredientRequest", "file_type": "code", "source_file": "backend/app/schemas/recipe.py", "source_location": "L60"}, {"id": "recipe_resolveingredientcandidate", "label": "ResolveIngredientCandidate", "file_type": "code", "source_file": "backend/app/schemas/recipe.py", "source_location": "L64"}, {"id": "recipe_resolveingredientresponse", "label": "ResolveIngredientResponse", "file_type": "code", "source_file": "backend/app/schemas/recipe.py", "source_location": "L71"}], "edges": [{"source": "backend_app_schemas_recipe_py", "target": "decimal", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/recipe.py", "source_location": "L3", "weight": 1.0}, {"source": "backend_app_schemas_recipe_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/recipe.py", "source_location": "L4", "weight": 1.0}, {"source": "backend_app_schemas_recipe_py", "target": "uuid", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/recipe.py", "source_location": "L5", "weight": 1.0}, {"source": "backend_app_schemas_recipe_py", "target": "pydantic", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/recipe.py", "source_location": "L7", "weight": 1.0}, {"source": "backend_app_schemas_recipe_py", "target": "recipe_recipeingredientref", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/recipe.py", "source_location": "L10", "weight": 1.0}, {"source": "recipe_recipeingredientref", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/recipe.py", "source_location": "L10", "weight": 1.0}, {"source": "backend_app_schemas_recipe_py", "target": "recipe_recipebase", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/recipe.py", "source_location": "L17", "weight": 1.0}, {"source": "recipe_recipebase", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/recipe.py", "source_location": "L17", "weight": 1.0}, {"source": "backend_app_schemas_recipe_py", "target": "recipe_recipecreate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/recipe.py", "source_location": "L34", "weight": 1.0}, {"source": "recipe_recipecreate", "target": "recipe_recipebase", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/recipe.py", "source_location": "L34", "weight": 1.0}, {"source": "backend_app_schemas_recipe_py", "target": "recipe_recipeupdate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/recipe.py", "source_location": "L38", "weight": 1.0}, {"source": "recipe_recipeupdate", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/recipe.py", "source_location": "L38", "weight": 1.0}, {"source": "backend_app_schemas_recipe_py", "target": "recipe_reciperead", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/recipe.py", "source_location": "L54", "weight": 1.0}, {"source": "recipe_reciperead", "target": "recipe_recipebase", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/recipe.py", "source_location": "L54", "weight": 1.0}, {"source": "backend_app_schemas_recipe_py", "target": "recipe_resolveingredientrequest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/recipe.py", "source_location": "L60", "weight": 1.0}, {"source": "recipe_resolveingredientrequest", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/recipe.py", "source_location": "L60", "weight": 1.0}, {"source": "backend_app_schemas_recipe_py", "target": "recipe_resolveingredientcandidate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/recipe.py", "source_location": "L64", "weight": 1.0}, {"source": "recipe_resolveingredientcandidate", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/recipe.py", "source_location": "L64", "weight": 1.0}, {"source": "backend_app_schemas_recipe_py", "target": "recipe_resolveingredientresponse", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/recipe.py", "source_location": "L71", "weight": 1.0}, {"source": "recipe_resolveingredientresponse", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/recipe.py", "source_location": "L71", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/graphify-out/cache/1dae63cff7e401bf92383015bce297da3cab749924c8e5654a1092dd262cc0fb.json b/graphify-out/cache/1dae63cff7e401bf92383015bce297da3cab749924c8e5654a1092dd262cc0fb.json
deleted file mode 100644
index 5387ec2..0000000
--- a/graphify-out/cache/1dae63cff7e401bf92383015bce297da3cab749924c8e5654a1092dd262cc0fb.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_services_matcher_py", "label": "matcher.py", "file_type": "code", "source_file": "backend/app/services/matcher.py", "source_location": "L1"}, {"id": "matcher_singularize", "label": "_singularize()", "file_type": "code", "source_file": "backend/app/services/matcher.py", "source_location": "L42"}, {"id": "matcher_matchresult", "label": "MatchResult", "file_type": "code", "source_file": "backend/app/services/matcher.py", "source_location": "L87"}, {"id": "matcher_sig_words", "label": "_sig_words()", "file_type": "code", "source_file": "backend/app/services/matcher.py", "source_location": "L93"}, {"id": "matcher_run_match_job", "label": "run_match_job()", "file_type": "code", "source_file": "backend/app/services/matcher.py", "source_location": "L103"}, {"id": "matcher_rationale_1", "label": "Fuzzy ingredient\u2192grocery_item matcher. Ingredient-centric: for each ingredient,", "file_type": "rationale", "source_file": "backend/app/services/matcher.py", "source_location": "L1"}, {"id": "matcher_rationale_43", "label": "Best-effort English singularization for grocery product names. Handles 'tor", "file_type": "rationale", "source_file": "backend/app/services/matcher.py", "source_location": "L43"}, {"id": "matcher_rationale_94", "label": "Lowercase alpha tokens >2 chars, stop-words removed, plurals normalized.", "file_type": "rationale", "source_file": "backend/app/services/matcher.py", "source_location": "L94"}, {"id": "matcher_rationale_109", "label": "Refresh AUTO ingredient_grocery_match rows for grocery items from `source_filter", "file_type": "rationale", "source_file": "backend/app/services/matcher.py", "source_location": "L109"}], "edges": [{"source": "backend_app_services_matcher_py", "target": "re", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/app/services/matcher.py", "source_location": "L13", "weight": 1.0}, {"source": "backend_app_services_matcher_py", "target": "uuid", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/app/services/matcher.py", "source_location": "L14", "weight": 1.0}, {"source": "backend_app_services_matcher_py", "target": "dataclasses", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/matcher.py", "source_location": "L15", "weight": 1.0}, {"source": "backend_app_services_matcher_py", "target": "decimal", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/matcher.py", "source_location": "L16", "weight": 1.0}, {"source": "backend_app_services_matcher_py", "target": "uuid", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/matcher.py", "source_location": "L17", "weight": 1.0}, {"source": "backend_app_services_matcher_py", "target": "rapidfuzz", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/matcher.py", "source_location": "L19", "weight": 1.0}, {"source": "backend_app_services_matcher_py", "target": "sqlalchemy_dialects_postgresql", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/matcher.py", "source_location": "L20", "weight": 1.0}, {"source": "backend_app_services_matcher_py", "target": "sqlalchemy_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/matcher.py", "source_location": "L21", "weight": 1.0}, {"source": "backend_app_services_matcher_py", "target": "app_models", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/matcher.py", "source_location": "L23", "weight": 1.0}, {"source": "backend_app_services_matcher_py", "target": "matcher_singularize", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/matcher.py", "source_location": "L42", "weight": 1.0}, {"source": "backend_app_services_matcher_py", "target": "matcher_matchresult", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/matcher.py", "source_location": "L87", "weight": 1.0}, {"source": "backend_app_services_matcher_py", "target": "matcher_sig_words", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/matcher.py", "source_location": "L93", "weight": 1.0}, {"source": "backend_app_services_matcher_py", "target": "matcher_run_match_job", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/matcher.py", "source_location": "L103", "weight": 1.0}, {"source": "matcher_sig_words", "target": "matcher_singularize", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/services/matcher.py", "source_location": "L97", "weight": 1.0}, {"source": "matcher_run_match_job", "target": "matcher_sig_words", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/services/matcher.py", "source_location": "L135", "weight": 1.0}, {"source": "matcher_rationale_1", "target": "backend_app_services_matcher_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/services/matcher.py", "source_location": "L1", "weight": 1.0}, {"source": "matcher_rationale_43", "target": "matcher_singularize", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/services/matcher.py", "source_location": "L43", "weight": 1.0}, {"source": "matcher_rationale_94", "target": "matcher_sig_words", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/services/matcher.py", "source_location": "L94", "weight": 1.0}, {"source": "matcher_rationale_109", "target": "matcher_run_match_job", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/services/matcher.py", "source_location": "L109", "weight": 1.0}], "raw_calls": [{"caller_nid": "matcher_singularize", "callee": "len", "source_file": "backend/app/services/matcher.py", "source_location": "L48"}, {"caller_nid": "matcher_singularize", "callee": "endswith", "source_file": "backend/app/services/matcher.py", "source_location": "L48"}, {"caller_nid": "matcher_singularize", "callee": "len", "source_file": "backend/app/services/matcher.py", "source_location": "L50"}, {"caller_nid": "matcher_singularize", "callee": "endswith", "source_file": "backend/app/services/matcher.py", "source_location": "L50"}, {"caller_nid": "matcher_singularize", "callee": "endswith", "source_file": "backend/app/services/matcher.py", "source_location": "L50"}, {"caller_nid": "matcher_sig_words", "callee": "split", "source_file": "backend/app/services/matcher.py", "source_location": "L95"}, {"caller_nid": "matcher_sig_words", "callee": "sub", "source_file": "backend/app/services/matcher.py", "source_location": "L95"}, {"caller_nid": "matcher_sig_words", "callee": "lower", "source_file": "backend/app/services/matcher.py", "source_location": "L95"}, {"caller_nid": "matcher_sig_words", "callee": "frozenset", "source_file": "backend/app/services/matcher.py", "source_location": "L96"}, {"caller_nid": "matcher_sig_words", "callee": "len", "source_file": "backend/app/services/matcher.py", "source_location": "L99"}, {"caller_nid": "matcher_run_match_job", "callee": "all", "source_file": "backend/app/services/matcher.py", "source_location": "L127"}, {"caller_nid": "matcher_run_match_job", "callee": "filter", "source_file": "backend/app/services/matcher.py", "source_location": "L127"}, {"caller_nid": "matcher_run_match_job", "callee": "query", "source_file": "backend/app/services/matcher.py", "source_location": "L127"}, {"caller_nid": "matcher_run_match_job", "callee": "lower", "source_file": "backend/app/services/matcher.py", "source_location": "L134"}, {"caller_nid": "matcher_run_match_job", "callee": "delete", "source_file": "backend/app/services/matcher.py", "source_location": "L139"}, {"caller_nid": "matcher_run_match_job", "callee": "filter", "source_file": "backend/app/services/matcher.py", "source_location": "L139"}, {"caller_nid": "matcher_run_match_job", "callee": "query", "source_file": "backend/app/services/matcher.py", "source_location": "L139"}, {"caller_nid": "matcher_run_match_job", "callee": "in_", "source_file": "backend/app/services/matcher.py", "source_location": "L140"}, {"caller_nid": "matcher_run_match_job", "callee": "flush", "source_file": "backend/app/services/matcher.py", "source_location": "L143"}, {"caller_nid": "matcher_run_match_job", "callee": "lower", "source_file": "backend/app/services/matcher.py", "source_location": "L147"}, {"caller_nid": "matcher_run_match_job", "callee": "strip", "source_file": "backend/app/services/matcher.py", "source_location": "L147"}, {"caller_nid": "matcher_run_match_job", "callee": "enumerate", "source_file": "backend/app/services/matcher.py", "source_location": "L147"}, {"caller_nid": "matcher_run_match_job", "callee": "all", "source_file": "backend/app/services/matcher.py", "source_location": "L150"}, {"caller_nid": "matcher_run_match_job", "callee": "query", "source_file": "backend/app/services/matcher.py", "source_location": "L150"}, {"caller_nid": "matcher_run_match_job", "callee": "lower", "source_file": "backend/app/services/matcher.py", "source_location": "L159"}, {"caller_nid": "matcher_run_match_job", "callee": "lower", "source_file": "backend/app/services/matcher.py", "source_location": "L160"}, {"caller_nid": "matcher_run_match_job", "callee": "get", "source_file": "backend/app/services/matcher.py", "source_location": "L164"}, {"caller_nid": "matcher_run_match_job", "callee": "lower", "source_file": "backend/app/services/matcher.py", "source_location": "L164"}, {"caller_nid": "matcher_run_match_job", "callee": "strip", "source_file": "backend/app/services/matcher.py", "source_location": "L164"}, {"caller_nid": "matcher_run_match_job", "callee": "on_conflict_do_nothing", "source_file": "backend/app/services/matcher.py", "source_location": "L167"}, {"caller_nid": "matcher_run_match_job", "callee": "values", "source_file": "backend/app/services/matcher.py", "source_location": "L167"}, {"caller_nid": "matcher_run_match_job", "callee": "_pg_insert", "source_file": "backend/app/services/matcher.py", "source_location": "L167"}, {"caller_nid": "matcher_run_match_job", "callee": "uuid4", "source_file": "backend/app/services/matcher.py", "source_location": "L169"}, {"caller_nid": "matcher_run_match_job", "callee": "Decimal", "source_file": "backend/app/services/matcher.py", "source_location": "L172"}, {"caller_nid": "matcher_run_match_job", "callee": "execute", "source_file": "backend/app/services/matcher.py", "source_location": "L177"}, {"caller_nid": "matcher_run_match_job", "callee": "extract", "source_file": "backend/app/services/matcher.py", "source_location": "L185"}, {"caller_nid": "matcher_run_match_job", "callee": "issubset", "source_file": "backend/app/services/matcher.py", "source_location": "L198"}, {"caller_nid": "matcher_run_match_job", "callee": "len", "source_file": "backend/app/services/matcher.py", "source_location": "L206"}, {"caller_nid": "matcher_run_match_job", "callee": "len", "source_file": "backend/app/services/matcher.py", "source_location": "L206"}, {"caller_nid": "matcher_run_match_job", "callee": "on_conflict_do_nothing", "source_file": "backend/app/services/matcher.py", "source_location": "L222"}, {"caller_nid": "matcher_run_match_job", "callee": "values", "source_file": "backend/app/services/matcher.py", "source_location": "L222"}, {"caller_nid": "matcher_run_match_job", "callee": "_pg_insert", "source_file": "backend/app/services/matcher.py", "source_location": "L222"}, {"caller_nid": "matcher_run_match_job", "callee": "uuid4", "source_file": "backend/app/services/matcher.py", "source_location": "L224"}, {"caller_nid": "matcher_run_match_job", "callee": "Decimal", "source_file": "backend/app/services/matcher.py", "source_location": "L227"}, {"caller_nid": "matcher_run_match_job", "callee": "str", "source_file": "backend/app/services/matcher.py", "source_location": "L227"}, {"caller_nid": "matcher_run_match_job", "callee": "round", "source_file": "backend/app/services/matcher.py", "source_location": "L227"}, {"caller_nid": "matcher_run_match_job", "callee": "execute", "source_file": "backend/app/services/matcher.py", "source_location": "L232"}, {"caller_nid": "matcher_run_match_job", "callee": "commit", "source_file": "backend/app/services/matcher.py", "source_location": "L235"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/1fdc1f2ea191620ac66a16c2228188f5e9a6c9387f921c4cd902b9319eb38640.json b/graphify-out/cache/1fdc1f2ea191620ac66a16c2228188f5e9a6c9387f921c4cd902b9319eb38640.json
deleted file mode 100644
index 6ac756a..0000000
--- a/graphify-out/cache/1fdc1f2ea191620ac66a16c2228188f5e9a6c9387f921c4cd902b9319eb38640.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_services_planner_config_py", "label": "config.py", "file_type": "code", "source_file": "backend/app/services/planner/config.py", "source_location": "L1"}, {"id": "config_plannerconfig", "label": "PlannerConfig", "file_type": "code", "source_file": "backend/app/services/planner/config.py", "source_location": "L8"}, {"id": "config_plannerconfig_validate", "label": ".validate()", "file_type": "code", "source_file": "backend/app/services/planner/config.py", "source_location": "L35"}, {"id": "config_rationale_1", "label": "Planner constants. Tune here without touching algorithm code.", "file_type": "rationale", "source_file": "backend/app/services/planner/config.py", "source_location": "L1"}], "edges": [{"source": "backend_app_services_planner_config_py", "target": "dataclasses", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/config.py", "source_location": "L4", "weight": 1.0}, {"source": "backend_app_services_planner_config_py", "target": "config_plannerconfig", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/config.py", "source_location": "L8", "weight": 1.0}, {"source": "config_plannerconfig", "target": "config_plannerconfig_validate", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/config.py", "source_location": "L35", "weight": 1.0}, {"source": "config_rationale_1", "target": "backend_app_services_planner_config_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/config.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "config_plannerconfig_validate", "callee": "abs", "source_file": "backend/app/services/planner/config.py", "source_location": "L37"}, {"caller_nid": "config_plannerconfig_validate", "callee": "ValueError", "source_file": "backend/app/services/planner/config.py", "source_location": "L38"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/24d4383b003eb575d0fb73cab0afb56a34fb15ec3872237b39663ae2fade2d7b.json b/graphify-out/cache/24d4383b003eb575d0fb73cab0afb56a34fb15ec3872237b39663ae2fade2d7b.json
deleted file mode 100644
index c3c782b..0000000
--- a/graphify-out/cache/24d4383b003eb575d0fb73cab0afb56a34fb15ec3872237b39663ae2fade2d7b.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_alembic_versions_0009_phase6_reminded_at_py", "label": "0009_phase6_reminded_at.py", "file_type": "code", "source_file": "backend/alembic/versions/0009_phase6_reminded_at.py", "source_location": "L1"}, {"id": "0009_phase6_reminded_at_upgrade", "label": "upgrade()", "file_type": "code", "source_file": "backend/alembic/versions/0009_phase6_reminded_at.py", "source_location": "L16"}, {"id": "0009_phase6_reminded_at_downgrade", "label": "downgrade()", "file_type": "code", "source_file": "backend/alembic/versions/0009_phase6_reminded_at.py", "source_location": "L23"}, {"id": "0009_phase6_reminded_at_rationale_1", "label": "Phase 6: add reminded_at to weekly_run Revision ID: 0009 Revises: 0008 Create D", "file_type": "rationale", "source_file": "backend/alembic/versions/0009_phase6_reminded_at.py", "source_location": "L1"}], "edges": [{"source": "backend_alembic_versions_0009_phase6_reminded_at_py", "target": "alembic", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0009_phase6_reminded_at.py", "source_location": "L7", "weight": 1.0}, {"source": "backend_alembic_versions_0009_phase6_reminded_at_py", "target": "sqlalchemy", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0009_phase6_reminded_at.py", "source_location": "L8", "weight": 1.0}, {"source": "backend_alembic_versions_0009_phase6_reminded_at_py", "target": "0009_phase6_reminded_at_upgrade", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0009_phase6_reminded_at.py", "source_location": "L16", "weight": 1.0}, {"source": "backend_alembic_versions_0009_phase6_reminded_at_py", "target": "0009_phase6_reminded_at_downgrade", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0009_phase6_reminded_at.py", "source_location": "L23", "weight": 1.0}, {"source": "0009_phase6_reminded_at_rationale_1", "target": "backend_alembic_versions_0009_phase6_reminded_at_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0009_phase6_reminded_at.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "0009_phase6_reminded_at_upgrade", "callee": "add_column", "source_file": "backend/alembic/versions/0009_phase6_reminded_at.py", "source_location": "L17"}, {"caller_nid": "0009_phase6_reminded_at_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0009_phase6_reminded_at.py", "source_location": "L19"}, {"caller_nid": "0009_phase6_reminded_at_upgrade", "callee": "DateTime", "source_file": "backend/alembic/versions/0009_phase6_reminded_at.py", "source_location": "L19"}, {"caller_nid": "0009_phase6_reminded_at_downgrade", "callee": "drop_column", "source_file": "backend/alembic/versions/0009_phase6_reminded_at.py", "source_location": "L24"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/25be8432d2262f46f7be51ae5a9299f6678bc911274ef31749c348a860cd5b8b.json b/graphify-out/cache/25be8432d2262f46f7be51ae5a9299f6678bc911274ef31749c348a860cd5b8b.json
deleted file mode 100644
index 6bcbfa4..0000000
--- a/graphify-out/cache/25be8432d2262f46f7be51ae5a9299f6678bc911274ef31749c348a860cd5b8b.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "frontend_src_pages_shoppinglist_tsx", "label": "ShoppingList.tsx", "file_type": "code", "source_file": "frontend/src/pages/ShoppingList.tsx", "source_location": "L1"}, {"id": "shoppinglist_shoppinglistskeleton", "label": "ShoppingListSkeleton()", "file_type": "code", "source_file": "frontend/src/pages/ShoppingList.tsx", "source_location": "L12"}, {"id": "shoppinglist_skeletoncard", "label": "SkeletonCard()", "file_type": "code", "source_file": "frontend/src/pages/ShoppingList.tsx", "source_location": "L33"}, {"id": "shoppinglist_storagekey", "label": "storageKey()", "file_type": "code", "source_file": "frontend/src/pages/ShoppingList.tsx", "source_location": "L44"}, {"id": "shoppinglist_toggle", "label": "toggle()", "file_type": "code", "source_file": "frontend/src/pages/ShoppingList.tsx", "source_location": "L77"}, {"id": "shoppinglist_clearall", "label": "clearAll()", "file_type": "code", "source_file": "frontend/src/pages/ShoppingList.tsx", "source_location": "L86"}], "edges": [{"source": "frontend_src_pages_shoppinglist_tsx", "target": "react", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/ShoppingList.tsx", "source_location": "L1", "weight": 1.0}, {"source": "frontend_src_pages_shoppinglist_tsx", "target": "react_query", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/ShoppingList.tsx", "source_location": "L2", "weight": 1.0}, {"source": "frontend_src_pages_shoppinglist_tsx", "target": "lucide_react", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/ShoppingList.tsx", "source_location": "L3", "weight": 1.0}, {"source": "frontend_src_pages_shoppinglist_tsx", "target": "frontend_src_pages_api", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/ShoppingList.tsx", "source_location": "L4", "weight": 1.0}, {"source": "frontend_src_pages_shoppinglist_tsx", "target": "frontend_src_pages_types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/ShoppingList.tsx", "source_location": "L5", "weight": 1.0}, {"source": "frontend_src_pages_shoppinglist_tsx", "target": "frontend_src_pages_components_ui_button", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/ShoppingList.tsx", "source_location": "L6", "weight": 1.0}, {"source": "frontend_src_pages_shoppinglist_tsx", "target": "frontend_src_pages_components_ui_badge", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/ShoppingList.tsx", "source_location": "L7", "weight": 1.0}, {"source": "frontend_src_pages_shoppinglist_tsx", "target": "frontend_src_pages_components_ui_card", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/ShoppingList.tsx", "source_location": "L8", "weight": 1.0}, {"source": "frontend_src_pages_shoppinglist_tsx", "target": "frontend_src_pages_components_ui_skeleton", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/ShoppingList.tsx", "source_location": "L9", "weight": 1.0}, {"source": "frontend_src_pages_shoppinglist_tsx", "target": "frontend_src_pages_components_ui_emptystate", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/ShoppingList.tsx", "source_location": "L10", "weight": 1.0}, {"source": "frontend_src_pages_shoppinglist_tsx", "target": "shoppinglist_shoppinglistskeleton", "relation": "contains", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/ShoppingList.tsx", "source_location": "L12", "weight": 1.0}, {"source": "frontend_src_pages_shoppinglist_tsx", "target": "shoppinglist_skeletoncard", "relation": "contains", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/ShoppingList.tsx", "source_location": "L33", "weight": 1.0}, {"source": "frontend_src_pages_shoppinglist_tsx", "target": "shoppinglist_storagekey", "relation": "contains", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/ShoppingList.tsx", "source_location": "L44", "weight": 1.0}, {"source": "frontend_src_pages_shoppinglist_tsx", "target": "shoppinglist_toggle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/ShoppingList.tsx", "source_location": "L77", "weight": 1.0}, {"source": "frontend_src_pages_shoppinglist_tsx", "target": "shoppinglist_clearall", "relation": "contains", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/ShoppingList.tsx", "source_location": "L86", "weight": 1.0}], "raw_calls": [{"caller_nid": "shoppinglist_toggle", "callee": "setChecked", "source_file": "frontend/src/pages/ShoppingList.tsx", "source_location": "L78"}, {"caller_nid": "shoppinglist_clearall", "callee": "setChecked", "source_file": "frontend/src/pages/ShoppingList.tsx", "source_location": "L86"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/2700a45555aca8c4dc46012e36a409a375f0e2039c14278b559d1840152a197e.json b/graphify-out/cache/2700a45555aca8c4dc46012e36a409a375f0e2039c14278b559d1840152a197e.json
deleted file mode 100644
index ec15278..0000000
--- a/graphify-out/cache/2700a45555aca8c4dc46012e36a409a375f0e2039c14278b559d1840152a197e.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_services_planner_filter_py", "label": "filter.py", "file_type": "code", "source_file": "backend/app/services/planner/filter.py", "source_location": "L1"}, {"id": "filter_calorie_band", "label": "_calorie_band()", "file_type": "code", "source_file": "backend/app/services/planner/filter.py", "source_location": "L12"}, {"id": "filter_filter_recipes", "label": "filter_recipes()", "file_type": "code", "source_file": "backend/app/services/planner/filter.py", "source_location": "L17"}, {"id": "filter_rationale_1", "label": "Hard-constraint filter (constraints #1-#6 from the spec).", "file_type": "rationale", "source_file": "backend/app/services/planner/filter.py", "source_location": "L1"}], "edges": [{"source": "backend_app_services_planner_filter_py", "target": "datetime", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/filter.py", "source_location": "L4", "weight": 1.0}, {"source": "backend_app_services_planner_filter_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/filter.py", "source_location": "L5", "weight": 1.0}, {"source": "backend_app_services_planner_filter_py", "target": "uuid", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/filter.py", "source_location": "L6", "weight": 1.0}, {"source": "backend_app_services_planner_filter_py", "target": "app_services_planner_config", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/filter.py", "source_location": "L8", "weight": 1.0}, {"source": "backend_app_services_planner_filter_py", "target": "app_services_planner_types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/filter.py", "source_location": "L9", "weight": 1.0}, {"source": "backend_app_services_planner_filter_py", "target": "filter_calorie_band", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/filter.py", "source_location": "L12", "weight": 1.0}, {"source": "backend_app_services_planner_filter_py", "target": "filter_filter_recipes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/filter.py", "source_location": "L17", "weight": 1.0}, {"source": "filter_filter_recipes", "target": "filter_calorie_band", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/filter.py", "source_location": "L34", "weight": 1.0}, {"source": "filter_rationale_1", "target": "backend_app_services_planner_filter_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/filter.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "filter_calorie_band", "callee": "int", "source_file": "backend/app/services/planner/filter.py", "source_location": "L14"}, {"caller_nid": "filter_calorie_band", "callee": "int", "source_file": "backend/app/services/planner/filter.py", "source_location": "L14"}, {"caller_nid": "filter_filter_recipes", "callee": "timedelta", "source_file": "backend/app/services/planner/filter.py", "source_location": "L36"}, {"caller_nid": "filter_filter_recipes", "callee": "isinstance", "source_file": "backend/app/services/planner/filter.py", "source_location": "L40"}, {"caller_nid": "filter_filter_recipes", "callee": "UUID", "source_file": "backend/app/services/planner/filter.py", "source_location": "L41"}, {"caller_nid": "filter_filter_recipes", "callee": "get", "source_file": "backend/app/services/planner/filter.py", "source_location": "L49"}, {"caller_nid": "filter_filter_recipes", "callee": "set", "source_file": "backend/app/services/planner/filter.py", "source_location": "L49"}, {"caller_nid": "filter_filter_recipes", "callee": "get", "source_file": "backend/app/services/planner/filter.py", "source_location": "L54"}, {"caller_nid": "filter_filter_recipes", "callee": "get", "source_file": "backend/app/services/planner/filter.py", "source_location": "L61"}, {"caller_nid": "filter_filter_recipes", "callee": "int", "source_file": "backend/app/services/planner/filter.py", "source_location": "L71"}, {"caller_nid": "filter_filter_recipes", "callee": "get", "source_file": "backend/app/services/planner/filter.py", "source_location": "L71"}, {"caller_nid": "filter_filter_recipes", "callee": "int", "source_file": "backend/app/services/planner/filter.py", "source_location": "L72"}, {"caller_nid": "filter_filter_recipes", "callee": "get", "source_file": "backend/app/services/planner/filter.py", "source_location": "L72"}, {"caller_nid": "filter_filter_recipes", "callee": "get", "source_file": "backend/app/services/planner/filter.py", "source_location": "L78"}, {"caller_nid": "filter_filter_recipes", "callee": "float", "source_file": "backend/app/services/planner/filter.py", "source_location": "L82"}, {"caller_nid": "filter_filter_recipes", "callee": "append", "source_file": "backend/app/services/planner/filter.py", "source_location": "L86"}, {"caller_nid": "filter_filter_recipes", "callee": "FilterResult", "source_file": "backend/app/services/planner/filter.py", "source_location": "L88"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/275cfb3616349924b09e78707633d754cf843c228a96c027d8f81a89fb46c872.json b/graphify-out/cache/275cfb3616349924b09e78707633d754cf843c228a96c027d8f81a89fb46c872.json
deleted file mode 100644
index b98299b..0000000
--- a/graphify-out/cache/275cfb3616349924b09e78707633d754cf843c228a96c027d8f81a89fb46c872.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_services_planner_score_py", "label": "score.py", "file_type": "code", "source_file": "backend/app/services/planner/score.py", "source_location": "L1"}, {"id": "score_time_bonus", "label": "time_bonus()", "file_type": "code", "source_file": "backend/app/services/planner/score.py", "source_location": "L13"}, {"id": "score_recency_bonus", "label": "recency_bonus()", "file_type": "code", "source_file": "backend/app/services/planner/score.py", "source_location": "L23"}, {"id": "score_normalize_savings", "label": "normalize_savings()", "file_type": "code", "source_file": "backend/app/services/planner/score.py", "source_location": "L42"}, {"id": "score_score_recipes", "label": "score_recipes()", "file_type": "code", "source_file": "backend/app/services/planner/score.py", "source_location": "L52"}, {"id": "score_rationale_1", "label": "Per-recipe scoring with the 5 weighted signals from the spec.", "file_type": "rationale", "source_file": "backend/app/services/planner/score.py", "source_location": "L1"}, {"id": "score_rationale_60", "label": "Returns recipes scored DESC. Caller passes only the feasible set.", "file_type": "rationale", "source_file": "backend/app/services/planner/score.py", "source_location": "L60"}], "edges": [{"source": "backend_app_services_planner_score_py", "target": "datetime", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/score.py", "source_location": "L4", "weight": 1.0}, {"source": "backend_app_services_planner_score_py", "target": "decimal", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/score.py", "source_location": "L5", "weight": 1.0}, {"source": "backend_app_services_planner_score_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/score.py", "source_location": "L6", "weight": 1.0}, {"source": "backend_app_services_planner_score_py", "target": "uuid", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/score.py", "source_location": "L7", "weight": 1.0}, {"source": "backend_app_services_planner_score_py", "target": "app_services_planner_config", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/score.py", "source_location": "L9", "weight": 1.0}, {"source": "backend_app_services_planner_score_py", "target": "app_services_planner_types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/score.py", "source_location": "L10", "weight": 1.0}, {"source": "backend_app_services_planner_score_py", "target": "score_time_bonus", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/score.py", "source_location": "L13", "weight": 1.0}, {"source": "backend_app_services_planner_score_py", "target": "score_recency_bonus", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/score.py", "source_location": "L23", "weight": 1.0}, {"source": "backend_app_services_planner_score_py", "target": "score_normalize_savings", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/score.py", "source_location": "L42", "weight": 1.0}, {"source": "backend_app_services_planner_score_py", "target": "score_score_recipes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/score.py", "source_location": "L52", "weight": 1.0}, {"source": "score_score_recipes", "target": "score_normalize_savings", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/score.py", "source_location": "L66", "weight": 1.0}, {"source": "score_score_recipes", "target": "score_time_bonus", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/score.py", "source_location": "L75", "weight": 1.0}, {"source": "score_score_recipes", "target": "score_recency_bonus", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/score.py", "source_location": "L76", "weight": 1.0}, {"source": "score_rationale_1", "target": "backend_app_services_planner_score_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/score.py", "source_location": "L1", "weight": 1.0}, {"source": "score_rationale_60", "target": "score_score_recipes", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/score.py", "source_location": "L60", "weight": 1.0}], "raw_calls": [{"caller_nid": "score_time_bonus", "callee": "max", "source_file": "backend/app/services/planner/score.py", "source_location": "L20"}, {"caller_nid": "score_time_bonus", "callee": "min", "source_file": "backend/app/services/planner/score.py", "source_location": "L20"}, {"caller_nid": "score_recency_bonus", "callee": "max", "source_file": "backend/app/services/planner/score.py", "source_location": "L39"}, {"caller_nid": "score_recency_bonus", "callee": "min", "source_file": "backend/app/services/planner/score.py", "source_location": "L39"}, {"caller_nid": "score_normalize_savings", "callee": "float", "source_file": "backend/app/services/planner/score.py", "source_location": "L45"}, {"caller_nid": "score_normalize_savings", "callee": "min", "source_file": "backend/app/services/planner/score.py", "source_location": "L46"}, {"caller_nid": "score_normalize_savings", "callee": "max", "source_file": "backend/app/services/planner/score.py", "source_location": "L46"}, {"caller_nid": "score_normalize_savings", "callee": "len", "source_file": "backend/app/services/planner/score.py", "source_location": "L48"}, {"caller_nid": "score_score_recipes", "callee": "list", "source_file": "backend/app/services/planner/score.py", "source_location": "L61"}, {"caller_nid": "score_score_recipes", "callee": "zip", "source_file": "backend/app/services/planner/score.py", "source_location": "L69"}, {"caller_nid": "score_score_recipes", "callee": "isinstance", "source_file": "backend/app/services/planner/score.py", "source_location": "L71"}, {"caller_nid": "score_score_recipes", "callee": "UUID", "source_file": "backend/app/services/planner/score.py", "source_location": "L72"}, {"caller_nid": "score_score_recipes", "callee": "int", "source_file": "backend/app/services/planner/score.py", "source_location": "L74"}, {"caller_nid": "score_score_recipes", "callee": "get", "source_file": "backend/app/services/planner/score.py", "source_location": "L74"}, {"caller_nid": "score_score_recipes", "callee": "int", "source_file": "backend/app/services/planner/score.py", "source_location": "L74"}, {"caller_nid": "score_score_recipes", "callee": "get", "source_file": "backend/app/services/planner/score.py", "source_location": "L74"}, {"caller_nid": "score_score_recipes", "callee": "get", "source_file": "backend/app/services/planner/score.py", "source_location": "L76"}, {"caller_nid": "score_score_recipes", "callee": "float", "source_file": "backend/app/services/planner/score.py", "source_location": "L84"}, {"caller_nid": "score_score_recipes", "callee": "get", "source_file": "backend/app/services/planner/score.py", "source_location": "L95"}, {"caller_nid": "score_score_recipes", "callee": "append", "source_file": "backend/app/services/planner/score.py", "source_location": "L98"}, {"caller_nid": "score_score_recipes", "callee": "ScoredRecipe", "source_file": "backend/app/services/planner/score.py", "source_location": "L99"}, {"caller_nid": "score_score_recipes", "callee": "get", "source_file": "backend/app/services/planner/score.py", "source_location": "L104"}, {"caller_nid": "score_score_recipes", "callee": "sort", "source_file": "backend/app/services/planner/score.py", "source_location": "L109"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/27c86779d1f62eec0bf35f4cf5f07bbb6a67ea15e4df31eb472b68daaa2b3305.json b/graphify-out/cache/27c86779d1f62eec0bf35f4cf5f07bbb6a67ea15e4df31eb472b68daaa2b3305.json
deleted file mode 100644
index 52858e2..0000000
--- a/graphify-out/cache/27c86779d1f62eec0bf35f4cf5f07bbb6a67ea15e4df31eb472b68daaa2b3305.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_alembic_versions_0008_phase5_orchestration_py", "label": "0008_phase5_orchestration.py", "file_type": "code", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L1"}, {"id": "0008_phase5_orchestration_upgrade", "label": "upgrade()", "file_type": "code", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L17"}, {"id": "0008_phase5_orchestration_downgrade", "label": "downgrade()", "file_type": "code", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L67"}, {"id": "0008_phase5_orchestration_rationale_1", "label": "Phase 5 orchestration: weekly_run table + pending_approval_policy Revision ID:", "file_type": "rationale", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L1"}], "edges": [{"source": "backend_alembic_versions_0008_phase5_orchestration_py", "target": "alembic", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L7", "weight": 1.0}, {"source": "backend_alembic_versions_0008_phase5_orchestration_py", "target": "sqlalchemy", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L8", "weight": 1.0}, {"source": "backend_alembic_versions_0008_phase5_orchestration_py", "target": "sqlalchemy_dialects", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L9", "weight": 1.0}, {"source": "backend_alembic_versions_0008_phase5_orchestration_py", "target": "0008_phase5_orchestration_upgrade", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L17", "weight": 1.0}, {"source": "backend_alembic_versions_0008_phase5_orchestration_py", "target": "0008_phase5_orchestration_downgrade", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L67", "weight": 1.0}, {"source": "0008_phase5_orchestration_rationale_1", "target": "backend_alembic_versions_0008_phase5_orchestration_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "0008_phase5_orchestration_upgrade", "callee": "add_column", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L18"}, {"caller_nid": "0008_phase5_orchestration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L20"}, {"caller_nid": "0008_phase5_orchestration_upgrade", "callee": "String", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L22"}, {"caller_nid": "0008_phase5_orchestration_upgrade", "callee": "create_table", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L27"}, {"caller_nid": "0008_phase5_orchestration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L29"}, {"caller_nid": "0008_phase5_orchestration_upgrade", "callee": "UUID", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L31"}, {"caller_nid": "0008_phase5_orchestration_upgrade", "callee": "text", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L33"}, {"caller_nid": "0008_phase5_orchestration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L35"}, {"caller_nid": "0008_phase5_orchestration_upgrade", "callee": "UUID", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L37"}, {"caller_nid": "0008_phase5_orchestration_upgrade", "callee": "ForeignKey", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L38"}, {"caller_nid": "0008_phase5_orchestration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L41"}, {"caller_nid": "0008_phase5_orchestration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L42"}, {"caller_nid": "0008_phase5_orchestration_upgrade", "callee": "String", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L42"}, {"caller_nid": "0008_phase5_orchestration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L43"}, {"caller_nid": "0008_phase5_orchestration_upgrade", "callee": "DateTime", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L43"}, {"caller_nid": "0008_phase5_orchestration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L44"}, {"caller_nid": "0008_phase5_orchestration_upgrade", "callee": "DateTime", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L44"}, {"caller_nid": "0008_phase5_orchestration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L45"}, {"caller_nid": "0008_phase5_orchestration_upgrade", "callee": "DateTime", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L45"}, {"caller_nid": "0008_phase5_orchestration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L46"}, {"caller_nid": "0008_phase5_orchestration_upgrade", "callee": "DateTime", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L46"}, {"caller_nid": "0008_phase5_orchestration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L47"}, {"caller_nid": "0008_phase5_orchestration_upgrade", "callee": "DateTime", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L47"}, {"caller_nid": "0008_phase5_orchestration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L48"}, {"caller_nid": "0008_phase5_orchestration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L54"}, {"caller_nid": "0008_phase5_orchestration_upgrade", "callee": "String", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L54"}, {"caller_nid": "0008_phase5_orchestration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L55"}, {"caller_nid": "0008_phase5_orchestration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L56"}, {"caller_nid": "0008_phase5_orchestration_upgrade", "callee": "DateTime", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L58"}, {"caller_nid": "0008_phase5_orchestration_upgrade", "callee": "text", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L59"}, {"caller_nid": "0008_phase5_orchestration_upgrade", "callee": "UniqueConstraint", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L61"}, {"caller_nid": "0008_phase5_orchestration_downgrade", "callee": "drop_table", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L68"}, {"caller_nid": "0008_phase5_orchestration_downgrade", "callee": "drop_column", "source_file": "backend/alembic/versions/0008_phase5_orchestration.py", "source_location": "L69"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/2a88cb2b2844c1a84b195e7b92103efb61533398660f97d9ac007a2403edfde0.json b/graphify-out/cache/2a88cb2b2844c1a84b195e7b92103efb61533398660f97d9ac007a2403edfde0.json
deleted file mode 100644
index 5203f48..0000000
--- a/graphify-out/cache/2a88cb2b2844c1a84b195e7b92103efb61533398660f97d9ac007a2403edfde0.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_tests_test_email_backend_py", "label": "test_email_backend.py", "file_type": "code", "source_file": "backend/tests/test_email_backend.py", "source_location": "L1"}, {"id": "test_email_backend_test_sendgrid_send_calls_api", "label": "test_sendgrid_send_calls_api()", "file_type": "code", "source_file": "backend/tests/test_email_backend.py", "source_location": "L5"}, {"id": "test_email_backend_test_sendgrid_raises_on_4xx", "label": "test_sendgrid_raises_on_4xx()", "file_type": "code", "source_file": "backend/tests/test_email_backend.py", "source_location": "L26"}, {"id": "test_email_backend_rationale_1", "label": "Unit tests for SendGridEmailBackend \u2014 no Postgres needed.", "file_type": "rationale", "source_file": "backend/tests/test_email_backend.py", "source_location": "L1"}], "edges": [{"source": "backend_tests_test_email_backend_py", "target": "pytest", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_email_backend.py", "source_location": "L2", "weight": 1.0}, {"source": "backend_tests_test_email_backend_py", "target": "test_email_backend_test_sendgrid_send_calls_api", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_email_backend.py", "source_location": "L5", "weight": 1.0}, {"source": "backend_tests_test_email_backend_py", "target": "test_email_backend_test_sendgrid_raises_on_4xx", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_email_backend.py", "source_location": "L26", "weight": 1.0}, {"source": "test_email_backend_rationale_1", "target": "backend_tests_test_email_backend_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_email_backend.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "test_email_backend_test_sendgrid_send_calls_api", "callee": "setattr", "source_file": "backend/tests/test_email_backend.py", "source_location": "L17"}, {"caller_nid": "test_email_backend_test_sendgrid_send_calls_api", "callee": "FakeClient", "source_file": "backend/tests/test_email_backend.py", "source_location": "L17"}, {"caller_nid": "test_email_backend_test_sendgrid_send_calls_api", "callee": "SendGridEmailBackend", "source_file": "backend/tests/test_email_backend.py", "source_location": "L20"}, {"caller_nid": "test_email_backend_test_sendgrid_send_calls_api", "callee": "send", "source_file": "backend/tests/test_email_backend.py", "source_location": "L21"}, {"caller_nid": "test_email_backend_test_sendgrid_send_calls_api", "callee": "len", "source_file": "backend/tests/test_email_backend.py", "source_location": "L23"}, {"caller_nid": "test_email_backend_test_sendgrid_raises_on_4xx", "callee": "setattr", "source_file": "backend/tests/test_email_backend.py", "source_location": "L35"}, {"caller_nid": "test_email_backend_test_sendgrid_raises_on_4xx", "callee": "FakeClient", "source_file": "backend/tests/test_email_backend.py", "source_location": "L35"}, {"caller_nid": "test_email_backend_test_sendgrid_raises_on_4xx", "callee": "SendGridEmailBackend", "source_file": "backend/tests/test_email_backend.py", "source_location": "L38"}, {"caller_nid": "test_email_backend_test_sendgrid_raises_on_4xx", "callee": "raises", "source_file": "backend/tests/test_email_backend.py", "source_location": "L39"}, {"caller_nid": "test_email_backend_test_sendgrid_raises_on_4xx", "callee": "send", "source_file": "backend/tests/test_email_backend.py", "source_location": "L40"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/2c0c9b4f25c125864e99adf7faaba03b0ad8a7caa40ea7ad8a2d19d95bbcdcf1.json b/graphify-out/cache/2c0c9b4f25c125864e99adf7faaba03b0ad8a7caa40ea7ad8a2d19d95bbcdcf1.json
deleted file mode 100644
index c14644d..0000000
--- a/graphify-out/cache/2c0c9b4f25c125864e99adf7faaba03b0ad8a7caa40ea7ad8a2d19d95bbcdcf1.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_services_orchestrator_runner_py", "label": "runner.py", "file_type": "code", "source_file": "backend/app/services/orchestrator/runner.py", "source_location": "L1"}, {"id": "runner_current_week_start", "label": "_current_week_start()", "file_type": "code", "source_file": "backend/app/services/orchestrator/runner.py", "source_location": "L20"}, {"id": "runner_get_or_create_run", "label": "_get_or_create_run()", "file_type": "code", "source_file": "backend/app/services/orchestrator/runner.py", "source_location": "L27"}, {"id": "runner_run_step", "label": "run_step()", "file_type": "code", "source_file": "backend/app/services/orchestrator/runner.py", "source_location": "L50"}, {"id": "runner_run_week", "label": "run_week()", "file_type": "code", "source_file": "backend/app/services/orchestrator/runner.py", "source_location": "L84"}, {"id": "runner_rationale_1", "label": "Orchestrator runner. run_step(step_name, week_start_date) \u2014 execute one step f", "file_type": "rationale", "source_file": "backend/app/services/orchestrator/runner.py", "source_location": "L1"}, {"id": "runner_rationale_21", "label": "Return the most recent Friday (today if today is Friday).", "file_type": "rationale", "source_file": "backend/app/services/orchestrator/runner.py", "source_location": "L21"}], "edges": [{"source": "backend_app_services_orchestrator_runner_py", "target": "logging", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/app/services/orchestrator/runner.py", "source_location": "L9", "weight": 1.0}, {"source": "backend_app_services_orchestrator_runner_py", "target": "datetime", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/orchestrator/runner.py", "source_location": "L10", "weight": 1.0}, {"source": "backend_app_services_orchestrator_runner_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/orchestrator/runner.py", "source_location": "L11", "weight": 1.0}, {"source": "backend_app_services_orchestrator_runner_py", "target": "app_database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/orchestrator/runner.py", "source_location": "L13", "weight": 1.0}, {"source": "backend_app_services_orchestrator_runner_py", "target": "runner_current_week_start", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/orchestrator/runner.py", "source_location": "L20", "weight": 1.0}, {"source": "backend_app_services_orchestrator_runner_py", "target": "runner_get_or_create_run", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/orchestrator/runner.py", "source_location": "L27", "weight": 1.0}, {"source": "backend_app_services_orchestrator_runner_py", "target": "runner_run_step", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/orchestrator/runner.py", "source_location": "L50", "weight": 1.0}, {"source": "backend_app_services_orchestrator_runner_py", "target": "runner_run_week", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/orchestrator/runner.py", "source_location": "L84", "weight": 1.0}, {"source": "runner_run_step", "target": "runner_current_week_start", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/services/orchestrator/runner.py", "source_location": "L65", "weight": 1.0}, {"source": "runner_run_step", "target": "runner_get_or_create_run", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/services/orchestrator/runner.py", "source_location": "L73", "weight": 1.0}, {"source": "runner_run_week", "target": "runner_current_week_start", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/services/orchestrator/runner.py", "source_location": "L85", "weight": 1.0}, {"source": "runner_run_week", "target": "runner_run_step", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/services/orchestrator/runner.py", "source_location": "L87", "weight": 1.0}, {"source": "runner_rationale_1", "target": "backend_app_services_orchestrator_runner_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/services/orchestrator/runner.py", "source_location": "L1", "weight": 1.0}, {"source": "runner_rationale_21", "target": "runner_current_week_start", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/services/orchestrator/runner.py", "source_location": "L21", "weight": 1.0}], "raw_calls": [{"caller_nid": "runner_current_week_start", "callee": "today", "source_file": "backend/app/services/orchestrator/runner.py", "source_location": "L22"}, {"caller_nid": "runner_current_week_start", "callee": "weekday", "source_file": "backend/app/services/orchestrator/runner.py", "source_location": "L23"}, {"caller_nid": "runner_current_week_start", "callee": "timedelta", "source_file": "backend/app/services/orchestrator/runner.py", "source_location": "L24"}, {"caller_nid": "runner_get_or_create_run", "callee": "first", "source_file": "backend/app/services/orchestrator/runner.py", "source_location": "L31"}, {"caller_nid": "runner_get_or_create_run", "callee": "filter", "source_file": "backend/app/services/orchestrator/runner.py", "source_location": "L31"}, {"caller_nid": "runner_get_or_create_run", "callee": "query", "source_file": "backend/app/services/orchestrator/runner.py", "source_location": "L31"}, {"caller_nid": "runner_get_or_create_run", "callee": "WeeklyRun", "source_file": "backend/app/services/orchestrator/runner.py", "source_location": "L39"}, {"caller_nid": "runner_get_or_create_run", "callee": "add", "source_file": "backend/app/services/orchestrator/runner.py", "source_location": "L44"}, {"caller_nid": "runner_get_or_create_run", "callee": "flush", "source_file": "backend/app/services/orchestrator/runner.py", "source_location": "L45"}, {"caller_nid": "runner_get_or_create_run", "callee": "refresh", "source_file": "backend/app/services/orchestrator/runner.py", "source_location": "L46"}, {"caller_nid": "runner_run_step", "callee": "ValueError", "source_file": "backend/app/services/orchestrator/runner.py", "source_location": "L63"}, {"caller_nid": "runner_run_step", "callee": "list", "source_file": "backend/app/services/orchestrator/runner.py", "source_location": "L63"}, {"caller_nid": "runner_run_step", "callee": "SessionLocal", "source_file": "backend/app/services/orchestrator/runner.py", "source_location": "L66"}, {"caller_nid": "runner_run_step", "callee": "all", "source_file": "backend/app/services/orchestrator/runner.py", "source_location": "L68"}, {"caller_nid": "runner_run_step", "callee": "query", "source_file": "backend/app/services/orchestrator/runner.py", "source_location": "L68"}, {"caller_nid": "runner_run_step", "callee": "warning", "source_file": "backend/app/services/orchestrator/runner.py", "source_location": "L70"}, {"caller_nid": "runner_run_step", "callee": "step_fns[step_name]", "source_file": "backend/app/services/orchestrator/runner.py", "source_location": "L75"}, {"caller_nid": "runner_run_step", "callee": "exception", "source_file": "backend/app/services/orchestrator/runner.py", "source_location": "L77"}, {"caller_nid": "runner_run_step", "callee": "close", "source_file": "backend/app/services/orchestrator/runner.py", "source_location": "L81"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/2ca6a4be8af8deb95e9594136383e30cc8a202aed667496290e86b50dd18ad43.json b/graphify-out/cache/2ca6a4be8af8deb95e9594136383e30cc8a202aed667496290e86b50dd18ad43.json
deleted file mode 100644
index 78f99ea..0000000
--- a/graphify-out/cache/2ca6a4be8af8deb95e9594136383e30cc8a202aed667496290e86b50dd18ad43.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_services_init_py", "label": "__init__.py", "file_type": "code", "source_file": "backend/app/services/__init__.py", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/graphify-out/cache/30398de8a906f8f4cb471bb475d80cdd65d9fe94c979e36a36cdce62142da5ec.json b/graphify-out/cache/30398de8a906f8f4cb471bb475d80cdd65d9fe94c979e36a36cdce62142da5ec.json
deleted file mode 100644
index ddf503d..0000000
--- a/graphify-out/cache/30398de8a906f8f4cb471bb475d80cdd65d9fe94c979e36a36cdce62142da5ec.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_tests_test_recipe_api_py", "label": "test_recipe_api.py", "file_type": "code", "source_file": "backend/tests/test_recipe_api.py", "source_location": "L1"}, {"id": "test_recipe_api_admin_headers", "label": "_admin_headers()", "file_type": "code", "source_file": "backend/tests/test_recipe_api.py", "source_location": "L6"}, {"id": "test_recipe_api_new_ingredient", "label": "_new_ingredient()", "file_type": "code", "source_file": "backend/tests/test_recipe_api.py", "source_location": "L10"}, {"id": "test_recipe_api_test_create_recipe_with_canonical_ingredients", "label": "test_create_recipe_with_canonical_ingredients()", "file_type": "code", "source_file": "backend/tests/test_recipe_api.py", "source_location": "L20"}, {"id": "test_recipe_api_test_create_recipe_rejects_unknown_ingredient_id", "label": "test_create_recipe_rejects_unknown_ingredient_id()", "file_type": "code", "source_file": "backend/tests/test_recipe_api.py", "source_location": "L45"}, {"id": "test_recipe_api_test_list_recipes_returns_seeded_data", "label": "test_list_recipes_returns_seeded_data()", "file_type": "code", "source_file": "backend/tests/test_recipe_api.py", "source_location": "L63"}], "edges": [{"source": "backend_tests_test_recipe_api_py", "target": "pytest", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_recipe_api.py", "source_location": "L1", "weight": 1.0}, {"source": "backend_tests_test_recipe_api_py", "target": "test_recipe_api_admin_headers", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_recipe_api.py", "source_location": "L6", "weight": 1.0}, {"source": "backend_tests_test_recipe_api_py", "target": "test_recipe_api_new_ingredient", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_recipe_api.py", "source_location": "L10", "weight": 1.0}, {"source": "backend_tests_test_recipe_api_py", "target": "test_recipe_api_test_create_recipe_with_canonical_ingredients", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_recipe_api.py", "source_location": "L20", "weight": 1.0}, {"source": "backend_tests_test_recipe_api_py", "target": "test_recipe_api_test_create_recipe_rejects_unknown_ingredient_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_recipe_api.py", "source_location": "L45", "weight": 1.0}, {"source": "backend_tests_test_recipe_api_py", "target": "test_recipe_api_test_list_recipes_returns_seeded_data", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_recipe_api.py", "source_location": "L63", "weight": 1.0}, {"source": "test_recipe_api_new_ingredient", "target": "test_recipe_api_admin_headers", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_recipe_api.py", "source_location": "L14", "weight": 1.0}, {"source": "test_recipe_api_test_create_recipe_with_canonical_ingredients", "target": "test_recipe_api_new_ingredient", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_recipe_api.py", "source_location": "L21", "weight": 1.0}, {"source": "test_recipe_api_test_create_recipe_with_canonical_ingredients", "target": "test_recipe_api_admin_headers", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_recipe_api.py", "source_location": "L38", "weight": 1.0}, {"source": "test_recipe_api_test_create_recipe_rejects_unknown_ingredient_id", "target": "test_recipe_api_admin_headers", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_recipe_api.py", "source_location": "L59", "weight": 1.0}, {"source": "test_recipe_api_test_list_recipes_returns_seeded_data", "target": "test_recipe_api_new_ingredient", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_recipe_api.py", "source_location": "L64", "weight": 1.0}, {"source": "test_recipe_api_test_list_recipes_returns_seeded_data", "target": "test_recipe_api_admin_headers", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_recipe_api.py", "source_location": "L78", "weight": 1.0}], "raw_calls": [{"caller_nid": "test_recipe_api_new_ingredient", "callee": "post", "source_file": "backend/tests/test_recipe_api.py", "source_location": "L11"}, {"caller_nid": "test_recipe_api_new_ingredient", "callee": "json", "source_file": "backend/tests/test_recipe_api.py", "source_location": "L17"}, {"caller_nid": "test_recipe_api_test_create_recipe_with_canonical_ingredients", "callee": "post", "source_file": "backend/tests/test_recipe_api.py", "source_location": "L38"}, {"caller_nid": "test_recipe_api_test_create_recipe_with_canonical_ingredients", "callee": "json", "source_file": "backend/tests/test_recipe_api.py", "source_location": "L40"}, {"caller_nid": "test_recipe_api_test_create_recipe_with_canonical_ingredients", "callee": "len", "source_file": "backend/tests/test_recipe_api.py", "source_location": "L42"}, {"caller_nid": "test_recipe_api_test_create_recipe_rejects_unknown_ingredient_id", "callee": "post", "source_file": "backend/tests/test_recipe_api.py", "source_location": "L59"}, {"caller_nid": "test_recipe_api_test_list_recipes_returns_seeded_data", "callee": "post", "source_file": "backend/tests/test_recipe_api.py", "source_location": "L65"}, {"caller_nid": "test_recipe_api_test_list_recipes_returns_seeded_data", "callee": "get", "source_file": "backend/tests/test_recipe_api.py", "source_location": "L80"}, {"caller_nid": "test_recipe_api_test_list_recipes_returns_seeded_data", "callee": "json", "source_file": "backend/tests/test_recipe_api.py", "source_location": "L82"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/3285a478225c415c5ae5fe71a4097b987fa1e97f5a1ba5a59d4729e31440b665.json b/graphify-out/cache/3285a478225c415c5ae5fe71a4097b987fa1e97f5a1ba5a59d4729e31440b665.json
deleted file mode 100644
index 2e61273..0000000
--- a/graphify-out/cache/3285a478225c415c5ae5fe71a4097b987fa1e97f5a1ba5a59d4729e31440b665.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "scripts_seed_family_py", "label": "seed_family.py", "file_type": "code", "source_file": "scripts/seed_family.py", "source_location": "L1"}], "edges": [{"source": "scripts_seed_family_py", "target": "os", "relation": "imports", "confidence": "EXTRACTED", "source_file": "scripts/seed_family.py", "source_location": "L12", "weight": 1.0}, {"source": "scripts_seed_family_py", "target": "sys", "relation": "imports", "confidence": "EXTRACTED", "source_file": "scripts/seed_family.py", "source_location": "L13", "weight": 1.0}, {"source": "scripts_seed_family_py", "target": "app_database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "scripts/seed_family.py", "source_location": "L32", "weight": 1.0}, {"source": "scripts_seed_family_py", "target": "app_models", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "scripts/seed_family.py", "source_location": "L33", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/graphify-out/cache/36c8234db7e337b1bdd32f3e6b106588891f91f74ee5d59fa2fb464c53171102.json b/graphify-out/cache/36c8234db7e337b1bdd32f3e6b106588891f91f74ee5d59fa2fb464c53171102.json
deleted file mode 100644
index 18e211c..0000000
--- a/graphify-out/cache/36c8234db7e337b1bdd32f3e6b106588891f91f74ee5d59fa2fb464c53171102.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_config_py", "label": "config.py", "file_type": "code", "source_file": "backend/app/config.py", "source_location": "L1"}, {"id": "config_settings", "label": "Settings", "file_type": "code", "source_file": "backend/app/config.py", "source_location": "L6"}, {"id": "basesettings", "label": "BaseSettings", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "config_config", "label": "Config", "file_type": "code", "source_file": "backend/app/config.py", "source_location": "L41"}, {"id": "config_require_database_url", "label": "_require_database_url()", "file_type": "code", "source_file": "backend/app/config.py", "source_location": "L45"}], "edges": [{"source": "backend_app_config_py", "target": "pydantic_settings", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/config.py", "source_location": "L1", "weight": 1.0}, {"source": "backend_app_config_py", "target": "pydantic", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/config.py", "source_location": "L2", "weight": 1.0}, {"source": "backend_app_config_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/config.py", "source_location": "L3", "weight": 1.0}, {"source": "backend_app_config_py", "target": "config_settings", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/config.py", "source_location": "L6", "weight": 1.0}, {"source": "config_settings", "target": "basesettings", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/config.py", "source_location": "L6", "weight": 1.0}, {"source": "backend_app_config_py", "target": "config_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/config.py", "source_location": "L41", "weight": 1.0}, {"source": "backend_app_config_py", "target": "config_require_database_url", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/config.py", "source_location": "L45", "weight": 1.0}], "raw_calls": [{"caller_nid": "config_require_database_url", "callee": "RuntimeError", "source_file": "backend/app/config.py", "source_location": "L47"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/38068088724ce0daa3b60ca97171073e25e7afecf53981862eb8332538b226a3.json b/graphify-out/cache/38068088724ce0daa3b60ca97171073e25e7afecf53981862eb8332538b226a3.json
deleted file mode 100644
index b203bf3..0000000
--- a/graphify-out/cache/38068088724ce0daa3b60ca97171073e25e7afecf53981862eb8332538b226a3.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_tests_test_recipe_schema_py", "label": "test_recipe_schema.py", "file_type": "code", "source_file": "backend/tests/test_recipe_schema.py", "source_location": "L1"}, {"id": "test_recipe_schema_test_recipe_create_requires_canonical_ingredient_ids", "label": "test_recipe_create_requires_canonical_ingredient_ids()", "file_type": "code", "source_file": "backend/tests/test_recipe_schema.py", "source_location": "L9"}, {"id": "test_recipe_schema_test_recipe_create_rejects_empty_ingredients", "label": "test_recipe_create_rejects_empty_ingredients()", "file_type": "code", "source_file": "backend/tests/test_recipe_schema.py", "source_location": "L25"}, {"id": "test_recipe_schema_test_resolve_ingredient_request_round_trip", "label": "test_resolve_ingredient_request_round_trip()", "file_type": "code", "source_file": "backend/tests/test_recipe_schema.py", "source_location": "L39"}], "edges": [{"source": "backend_tests_test_recipe_schema_py", "target": "uuid", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_recipe_schema.py", "source_location": "L1", "weight": 1.0}, {"source": "backend_tests_test_recipe_schema_py", "target": "pytest", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_recipe_schema.py", "source_location": "L3", "weight": 1.0}, {"source": "backend_tests_test_recipe_schema_py", "target": "pydantic", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_recipe_schema.py", "source_location": "L4", "weight": 1.0}, {"source": "backend_tests_test_recipe_schema_py", "target": "app_schemas_recipe", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_recipe_schema.py", "source_location": "L6", "weight": 1.0}, {"source": "backend_tests_test_recipe_schema_py", "target": "test_recipe_schema_test_recipe_create_requires_canonical_ingredient_ids", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_recipe_schema.py", "source_location": "L9", "weight": 1.0}, {"source": "backend_tests_test_recipe_schema_py", "target": "test_recipe_schema_test_recipe_create_rejects_empty_ingredients", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_recipe_schema.py", "source_location": "L25", "weight": 1.0}, {"source": "backend_tests_test_recipe_schema_py", "target": "test_recipe_schema_test_resolve_ingredient_request_round_trip", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_recipe_schema.py", "source_location": "L39", "weight": 1.0}], "raw_calls": [{"caller_nid": "test_recipe_schema_test_recipe_create_requires_canonical_ingredient_ids", "callee": "uuid4", "source_file": "backend/tests/test_recipe_schema.py", "source_location": "L10"}, {"caller_nid": "test_recipe_schema_test_recipe_create_requires_canonical_ingredient_ids", "callee": "RecipeCreate", "source_file": "backend/tests/test_recipe_schema.py", "source_location": "L11"}, {"caller_nid": "test_recipe_schema_test_recipe_create_requires_canonical_ingredient_ids", "callee": "RecipeIngredientRef", "source_file": "backend/tests/test_recipe_schema.py", "source_location": "L18"}, {"caller_nid": "test_recipe_schema_test_recipe_create_rejects_empty_ingredients", "callee": "raises", "source_file": "backend/tests/test_recipe_schema.py", "source_location": "L26"}, {"caller_nid": "test_recipe_schema_test_recipe_create_rejects_empty_ingredients", "callee": "RecipeCreate", "source_file": "backend/tests/test_recipe_schema.py", "source_location": "L27"}, {"caller_nid": "test_recipe_schema_test_resolve_ingredient_request_round_trip", "callee": "ResolveIngredientRequest", "source_file": "backend/tests/test_recipe_schema.py", "source_location": "L40"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/3cb894775607e9f941eae097d948e13e7408c8c679284215ea4b45a47c8977c7.json b/graphify-out/cache/3cb894775607e9f941eae097d948e13e7408c8c679284215ea4b45a47c8977c7.json
deleted file mode 100644
index 03772f7..0000000
--- a/graphify-out/cache/3cb894775607e9f941eae097d948e13e7408c8c679284215ea4b45a47c8977c7.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_api_never_suggest_py", "label": "never_suggest.py", "file_type": "code", "source_file": "backend/app/api/never_suggest.py", "source_location": "L1"}, {"id": "never_suggest_coerce_reason", "label": "_coerce_reason()", "file_type": "code", "source_file": "backend/app/api/never_suggest.py", "source_location": "L23"}, {"id": "never_suggest_list_for_family", "label": "list_for_family()", "file_type": "code", "source_file": "backend/app/api/never_suggest.py", "source_location": "L33"}, {"id": "never_suggest_block", "label": "block()", "file_type": "code", "source_file": "backend/app/api/never_suggest.py", "source_location": "L45"}, {"id": "never_suggest_unblock", "label": "unblock()", "file_type": "code", "source_file": "backend/app/api/never_suggest.py", "source_location": "L64"}], "edges": [{"source": "backend_app_api_never_suggest_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/never_suggest.py", "source_location": "L3", "weight": 1.0}, {"source": "backend_app_api_never_suggest_py", "target": "uuid", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/never_suggest.py", "source_location": "L4", "weight": 1.0}, {"source": "backend_app_api_never_suggest_py", "target": "fastapi", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/never_suggest.py", "source_location": "L6", "weight": 1.0}, {"source": "backend_app_api_never_suggest_py", "target": "sqlalchemy_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/never_suggest.py", "source_location": "L7", "weight": 1.0}, {"source": "backend_app_api_never_suggest_py", "target": "app_database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/never_suggest.py", "source_location": "L9", "weight": 1.0}, {"source": "backend_app_api_never_suggest_py", "target": "app_models", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/never_suggest.py", "source_location": "L10", "weight": 1.0}, {"source": "backend_app_api_never_suggest_py", "target": "app_schemas_never_suggest", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/never_suggest.py", "source_location": "L11", "weight": 1.0}, {"source": "backend_app_api_never_suggest_py", "target": "app_security", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/never_suggest.py", "source_location": "L12", "weight": 1.0}, {"source": "backend_app_api_never_suggest_py", "target": "never_suggest_coerce_reason", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/never_suggest.py", "source_location": "L23", "weight": 1.0}, {"source": "backend_app_api_never_suggest_py", "target": "never_suggest_list_for_family", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/never_suggest.py", "source_location": "L33", "weight": 1.0}, {"source": "backend_app_api_never_suggest_py", "target": "never_suggest_block", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/never_suggest.py", "source_location": "L45", "weight": 1.0}, {"source": "backend_app_api_never_suggest_py", "target": "never_suggest_unblock", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/never_suggest.py", "source_location": "L64", "weight": 1.0}, {"source": "never_suggest_block", "target": "never_suggest_coerce_reason", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/api/never_suggest.py", "source_location": "L50", "weight": 1.0}], "raw_calls": [{"caller_nid": "never_suggest_coerce_reason", "callee": "NeverSuggestReason", "source_file": "backend/app/api/never_suggest.py", "source_location": "L27"}, {"caller_nid": "never_suggest_coerce_reason", "callee": "HTTPException", "source_file": "backend/app/api/never_suggest.py", "source_location": "L29"}, {"caller_nid": "never_suggest_list_for_family", "callee": "all", "source_file": "backend/app/api/never_suggest.py", "source_location": "L38"}, {"caller_nid": "never_suggest_list_for_family", "callee": "filter", "source_file": "backend/app/api/never_suggest.py", "source_location": "L38"}, {"caller_nid": "never_suggest_list_for_family", "callee": "query", "source_file": "backend/app/api/never_suggest.py", "source_location": "L38"}, {"caller_nid": "never_suggest_block", "callee": "NeverSuggest", "source_file": "backend/app/api/never_suggest.py", "source_location": "L46"}, {"caller_nid": "never_suggest_block", "callee": "add", "source_file": "backend/app/api/never_suggest.py", "source_location": "L53"}, {"caller_nid": "never_suggest_block", "callee": "commit", "source_file": "backend/app/api/never_suggest.py", "source_location": "L54"}, {"caller_nid": "never_suggest_block", "callee": "refresh", "source_file": "backend/app/api/never_suggest.py", "source_location": "L55"}, {"caller_nid": "never_suggest_unblock", "callee": "first", "source_file": "backend/app/api/never_suggest.py", "source_location": "L65"}, {"caller_nid": "never_suggest_unblock", "callee": "filter", "source_file": "backend/app/api/never_suggest.py", "source_location": "L65"}, {"caller_nid": "never_suggest_unblock", "callee": "query", "source_file": "backend/app/api/never_suggest.py", "source_location": "L65"}, {"caller_nid": "never_suggest_unblock", "callee": "HTTPException", "source_file": "backend/app/api/never_suggest.py", "source_location": "L67"}, {"caller_nid": "never_suggest_unblock", "callee": "delete", "source_file": "backend/app/api/never_suggest.py", "source_location": "L68"}, {"caller_nid": "never_suggest_unblock", "callee": "commit", "source_file": "backend/app/api/never_suggest.py", "source_location": "L69"}, {"caller_nid": "never_suggest_unblock", "callee": "Response", "source_file": "backend/app/api/never_suggest.py", "source_location": "L70"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/4042093a07643a1fe4d4ac44fcbb5e8cc63fb486d65eb60b74e222d659d12fa3.json b/graphify-out/cache/4042093a07643a1fe4d4ac44fcbb5e8cc63fb486d65eb60b74e222d659d12fa3.json
deleted file mode 100644
index 866560d..0000000
--- a/graphify-out/cache/4042093a07643a1fe4d4ac44fcbb5e8cc63fb486d65eb60b74e222d659d12fa3.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_services_swiftly_auth_py", "label": "swiftly_auth.py", "file_type": "code", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L1"}, {"id": "swiftly_auth_swiftlyauthminterror", "label": "SwiftlyAuthMintError", "file_type": "code", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L28"}, {"id": "exception", "label": "Exception", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "swiftly_auth_reset_cache_for_tests", "label": "_reset_cache_for_tests()", "file_type": "code", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L51"}, {"id": "swiftly_auth_decode_jwt_payload", "label": "_decode_jwt_payload()", "file_type": "code", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L59"}, {"id": "swiftly_auth_fetch_firebase_api_key", "label": "_fetch_firebase_api_key()", "file_type": "code", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L72"}, {"id": "swiftly_auth_mint_anonymous_token", "label": "mint_anonymous_token()", "file_type": "code", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L105"}, {"id": "swiftly_auth_get_token", "label": "get_token()", "file_type": "code", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L160"}, {"id": "swiftly_auth_rationale_1", "label": "Swiftly bearer-JWT auto-mint via Firebase REST. Replaces the static ``SWIFTLY_B", "file_type": "rationale", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L1"}, {"id": "swiftly_auth_rationale_29", "label": "Raised when minting a fresh Swiftly JWT fails. Surface the message verbatim", "file_type": "rationale", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L29"}, {"id": "swiftly_auth_rationale_52", "label": "Clear the process-local cache. Test-only helper.", "file_type": "rationale", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L52"}, {"id": "swiftly_auth_rationale_106", "label": "Mint a fresh anonymous Firebase ID token. Returns ``(token, exp_epoch_secon", "file_type": "rationale", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L106"}, {"id": "swiftly_auth_rationale_161", "label": "Return a valid Swiftly bearer JWT, minting one if needed. A cached token is", "file_type": "rationale", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L161"}], "edges": [{"source": "backend_app_services_swiftly_auth_py", "target": "base64", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L16", "weight": 1.0}, {"source": "backend_app_services_swiftly_auth_py", "target": "json", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L17", "weight": 1.0}, {"source": "backend_app_services_swiftly_auth_py", "target": "logging", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L18", "weight": 1.0}, {"source": "backend_app_services_swiftly_auth_py", "target": "threading", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L19", "weight": 1.0}, {"source": "backend_app_services_swiftly_auth_py", "target": "time", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L20", "weight": 1.0}, {"source": "backend_app_services_swiftly_auth_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L21", "weight": 1.0}, {"source": "backend_app_services_swiftly_auth_py", "target": "requests", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L23", "weight": 1.0}, {"source": "backend_app_services_swiftly_auth_py", "target": "swiftly_auth_swiftlyauthminterror", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L28", "weight": 1.0}, {"source": "swiftly_auth_swiftlyauthminterror", "target": "exception", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L28", "weight": 1.0}, {"source": "backend_app_services_swiftly_auth_py", "target": "swiftly_auth_reset_cache_for_tests", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L51", "weight": 1.0}, {"source": "backend_app_services_swiftly_auth_py", "target": "swiftly_auth_decode_jwt_payload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L59", "weight": 1.0}, {"source": "backend_app_services_swiftly_auth_py", "target": "swiftly_auth_fetch_firebase_api_key", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L72", "weight": 1.0}, {"source": "backend_app_services_swiftly_auth_py", "target": "swiftly_auth_mint_anonymous_token", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L105", "weight": 1.0}, {"source": "backend_app_services_swiftly_auth_py", "target": "swiftly_auth_get_token", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L160", "weight": 1.0}, {"source": "swiftly_auth_decode_jwt_payload", "target": "swiftly_auth_swiftlyauthminterror", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L62", "weight": 1.0}, {"source": "swiftly_auth_fetch_firebase_api_key", "target": "swiftly_auth_swiftlyauthminterror", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L83", "weight": 1.0}, {"source": "swiftly_auth_mint_anonymous_token", "target": "swiftly_auth_fetch_firebase_api_key", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L111", "weight": 1.0}, {"source": "swiftly_auth_mint_anonymous_token", "target": "swiftly_auth_swiftlyauthminterror", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L127", "weight": 1.0}, {"source": "swiftly_auth_mint_anonymous_token", "target": "swiftly_auth_decode_jwt_payload", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L144", "weight": 1.0}, {"source": "swiftly_auth_get_token", "target": "swiftly_auth_mint_anonymous_token", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L171", "weight": 1.0}, {"source": "swiftly_auth_rationale_1", "target": "backend_app_services_swiftly_auth_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L1", "weight": 1.0}, {"source": "swiftly_auth_rationale_29", "target": "swiftly_auth_swiftlyauthminterror", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L29", "weight": 1.0}, {"source": "swiftly_auth_rationale_52", "target": "swiftly_auth_reset_cache_for_tests", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L52", "weight": 1.0}, {"source": "swiftly_auth_rationale_106", "target": "swiftly_auth_mint_anonymous_token", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L106", "weight": 1.0}, {"source": "swiftly_auth_rationale_161", "target": "swiftly_auth_get_token", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L161", "weight": 1.0}], "raw_calls": [{"caller_nid": "swiftly_auth_decode_jwt_payload", "callee": "split", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L60"}, {"caller_nid": "swiftly_auth_decode_jwt_payload", "callee": "len", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L61"}, {"caller_nid": "swiftly_auth_decode_jwt_payload", "callee": "len", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L64"}, {"caller_nid": "swiftly_auth_decode_jwt_payload", "callee": "urlsafe_b64decode", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L66"}, {"caller_nid": "swiftly_auth_decode_jwt_payload", "callee": "encode", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L66"}, {"caller_nid": "swiftly_auth_decode_jwt_payload", "callee": "loads", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L67"}, {"caller_nid": "swiftly_auth_fetch_firebase_api_key", "callee": "get", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L73"}, {"caller_nid": "swiftly_auth_fetch_firebase_api_key", "callee": "get", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L77"}, {"caller_nid": "swiftly_auth_fetch_firebase_api_key", "callee": "json", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L91"}, {"caller_nid": "swiftly_auth_fetch_firebase_api_key", "callee": "get", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L96"}, {"caller_nid": "swiftly_auth_mint_anonymous_token", "callee": "post", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L119"}, {"caller_nid": "swiftly_auth_mint_anonymous_token", "callee": "json", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L135"}, {"caller_nid": "swiftly_auth_mint_anonymous_token", "callee": "get", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L140"}, {"caller_nid": "swiftly_auth_mint_anonymous_token", "callee": "get", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L145"}, {"caller_nid": "swiftly_auth_mint_anonymous_token", "callee": "get", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L150"}, {"caller_nid": "swiftly_auth_mint_anonymous_token", "callee": "isinstance", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L151"}, {"caller_nid": "swiftly_auth_mint_anonymous_token", "callee": "float", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L153"}, {"caller_nid": "swiftly_auth_mint_anonymous_token", "callee": "time", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L153"}, {"caller_nid": "swiftly_auth_mint_anonymous_token", "callee": "time", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L155"}, {"caller_nid": "swiftly_auth_mint_anonymous_token", "callee": "float", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L157"}, {"caller_nid": "swiftly_auth_get_token", "callee": "time", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L167"}, {"caller_nid": "swiftly_auth_get_token", "callee": "get", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L168"}, {"caller_nid": "swiftly_auth_get_token", "callee": "get", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L169"}, {"caller_nid": "swiftly_auth_get_token", "callee": "info", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L174"}, {"caller_nid": "swiftly_auth_get_token", "callee": "time", "source_file": "backend/app/services/swiftly_auth.py", "source_location": "L175"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/492aba367d5ce9350987b8f3e5f09aefb9b3dbe342d952e72183f121078b0e7a.json b/graphify-out/cache/492aba367d5ce9350987b8f3e5f09aefb9b3dbe342d952e72183f121078b0e7a.json
deleted file mode 100644
index be9aa97..0000000
--- a/graphify-out/cache/492aba367d5ce9350987b8f3e5f09aefb9b3dbe342d952e72183f121078b0e7a.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_api_orchestrate_py", "label": "orchestrate.py", "file_type": "code", "source_file": "backend/app/api/orchestrate.py", "source_location": "L1"}, {"id": "orchestrate_orchestrate_status", "label": "orchestrate_status()", "file_type": "code", "source_file": "backend/app/api/orchestrate.py", "source_location": "L15"}, {"id": "orchestrate_orchestrate_run_week", "label": "orchestrate_run_week()", "file_type": "code", "source_file": "backend/app/api/orchestrate.py", "source_location": "L41"}, {"id": "orchestrate_orchestrate_step", "label": "orchestrate_step()", "file_type": "code", "source_file": "backend/app/api/orchestrate.py", "source_location": "L51"}], "edges": [{"source": "backend_app_api_orchestrate_py", "target": "fastapi", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/orchestrate.py", "source_location": "L1", "weight": 1.0}, {"source": "backend_app_api_orchestrate_py", "target": "sqlalchemy_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/orchestrate.py", "source_location": "L2", "weight": 1.0}, {"source": "backend_app_api_orchestrate_py", "target": "app_database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/orchestrate.py", "source_location": "L3", "weight": 1.0}, {"source": "backend_app_api_orchestrate_py", "target": "app_models", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/orchestrate.py", "source_location": "L4", "weight": 1.0}, {"source": "backend_app_api_orchestrate_py", "target": "app_services_orchestrator", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/orchestrate.py", "source_location": "L5", "weight": 1.0}, {"source": "backend_app_api_orchestrate_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/orchestrate.py", "source_location": "L6", "weight": 1.0}, {"source": "backend_app_api_orchestrate_py", "target": "datetime", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/orchestrate.py", "source_location": "L7", "weight": 1.0}, {"source": "backend_app_api_orchestrate_py", "target": "orchestrate_orchestrate_status", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/orchestrate.py", "source_location": "L15", "weight": 1.0}, {"source": "backend_app_api_orchestrate_py", "target": "orchestrate_orchestrate_run_week", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/orchestrate.py", "source_location": "L41", "weight": 1.0}, {"source": "backend_app_api_orchestrate_py", "target": "orchestrate_orchestrate_step", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/orchestrate.py", "source_location": "L51", "weight": 1.0}], "raw_calls": [{"caller_nid": "orchestrate_orchestrate_status", "callee": "all", "source_file": "backend/app/api/orchestrate.py", "source_location": "L17"}, {"caller_nid": "orchestrate_orchestrate_status", "callee": "limit", "source_file": "backend/app/api/orchestrate.py", "source_location": "L17"}, {"caller_nid": "orchestrate_orchestrate_status", "callee": "order_by", "source_file": "backend/app/api/orchestrate.py", "source_location": "L17"}, {"caller_nid": "orchestrate_orchestrate_status", "callee": "query", "source_file": "backend/app/api/orchestrate.py", "source_location": "L17"}, {"caller_nid": "orchestrate_orchestrate_status", "callee": "desc", "source_file": "backend/app/api/orchestrate.py", "source_location": "L18"}, {"caller_nid": "orchestrate_orchestrate_status", "callee": "str", "source_file": "backend/app/api/orchestrate.py", "source_location": "L25"}, {"caller_nid": "orchestrate_orchestrate_status", "callee": "str", "source_file": "backend/app/api/orchestrate.py", "source_location": "L26"}, {"caller_nid": "orchestrate_orchestrate_status", "callee": "isoformat", "source_file": "backend/app/api/orchestrate.py", "source_location": "L27"}, {"caller_nid": "orchestrate_orchestrate_status", "callee": "isoformat", "source_file": "backend/app/api/orchestrate.py", "source_location": "L28"}, {"caller_nid": "orchestrate_orchestrate_status", "callee": "isoformat", "source_file": "backend/app/api/orchestrate.py", "source_location": "L29"}, {"caller_nid": "orchestrate_orchestrate_status", "callee": "isoformat", "source_file": "backend/app/api/orchestrate.py", "source_location": "L30"}, {"caller_nid": "orchestrate_orchestrate_status", "callee": "isoformat", "source_file": "backend/app/api/orchestrate.py", "source_location": "L31"}, {"caller_nid": "orchestrate_orchestrate_status", "callee": "isoformat", "source_file": "backend/app/api/orchestrate.py", "source_location": "L32"}, {"caller_nid": "orchestrate_orchestrate_run_week", "callee": "fromisoformat", "source_file": "backend/app/api/orchestrate.py", "source_location": "L45"}, {"caller_nid": "orchestrate_orchestrate_run_week", "callee": "add_task", "source_file": "backend/app/api/orchestrate.py", "source_location": "L46"}, {"caller_nid": "orchestrate_orchestrate_run_week", "callee": "str", "source_file": "backend/app/api/orchestrate.py", "source_location": "L47"}, {"caller_nid": "orchestrate_orchestrate_step", "callee": "HTTPException", "source_file": "backend/app/api/orchestrate.py", "source_location": "L57"}, {"caller_nid": "orchestrate_orchestrate_step", "callee": "sorted", "source_file": "backend/app/api/orchestrate.py", "source_location": "L59"}, {"caller_nid": "orchestrate_orchestrate_step", "callee": "fromisoformat", "source_file": "backend/app/api/orchestrate.py", "source_location": "L61"}, {"caller_nid": "orchestrate_orchestrate_step", "callee": "add_task", "source_file": "backend/app/api/orchestrate.py", "source_location": "L62"}, {"caller_nid": "orchestrate_orchestrate_step", "callee": "str", "source_file": "backend/app/api/orchestrate.py", "source_location": "L63"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/4a65d47ff612ab8aa15d2700459b4c0509ceebdd798b7673379ece405e61a2f0.json b/graphify-out/cache/4a65d47ff612ab8aa15d2700459b4c0509ceebdd798b7673379ece405e61a2f0.json
deleted file mode 100644
index 9e64cbe..0000000
--- a/graphify-out/cache/4a65d47ff612ab8aa15d2700459b4c0509ceebdd798b7673379ece405e61a2f0.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_alembic_versions_0001_initial_migration_py", "label": "0001_initial_migration.py", "file_type": "code", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L1"}, {"id": "0001_initial_migration_upgrade", "label": "upgrade()", "file_type": "code", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L18"}, {"id": "0001_initial_migration_downgrade", "label": "downgrade()", "file_type": "code", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L288"}, {"id": "0001_initial_migration_rationale_1", "label": "Initial migration Revision ID: 0001 Revises: Create Date: 2026-05-04", "file_type": "rationale", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L1"}], "edges": [{"source": "backend_alembic_versions_0001_initial_migration_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L7", "weight": 1.0}, {"source": "backend_alembic_versions_0001_initial_migration_py", "target": "alembic", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L8", "weight": 1.0}, {"source": "backend_alembic_versions_0001_initial_migration_py", "target": "sqlalchemy", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L9", "weight": 1.0}, {"source": "backend_alembic_versions_0001_initial_migration_py", "target": "sqlalchemy_dialects", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L10", "weight": 1.0}, {"source": "backend_alembic_versions_0001_initial_migration_py", "target": "0001_initial_migration_upgrade", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L18", "weight": 1.0}, {"source": "backend_alembic_versions_0001_initial_migration_py", "target": "0001_initial_migration_downgrade", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L288", "weight": 1.0}, {"source": "0001_initial_migration_rationale_1", "target": "backend_alembic_versions_0001_initial_migration_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "0001_initial_migration_upgrade", "callee": "execute", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L19"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "execute", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L20"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "execute", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L35"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "execute", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L36"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "execute", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L38"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "execute", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L39"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "execute", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L40"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "execute", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L41"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "execute", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L42"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "execute", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L43"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "execute", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L44"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "execute", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L45"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "execute", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L46"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "create_table", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L48"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L49"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UUID", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L49"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L50"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "String", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L50"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L51"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Integer", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L51"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L52"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Integer", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L52"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L53"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Integer", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L53"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L54"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Text", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L54"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L55"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Numeric", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L55"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L56"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "DateTime", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L56"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "text", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L56"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L57"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "DateTime", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L57"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "text", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L57"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "PrimaryKeyConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L58"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "create_table", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L60"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L61"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UUID", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L61"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L62"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "String", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L62"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L63"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "String", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L63"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L64"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "String", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L64"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L65"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "String", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L65"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L66"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Numeric", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L66"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L67"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "String", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L67"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L68"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "ARRAY", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L68"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Integer", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L68"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L69"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "DateTime", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L69"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "text", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L69"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "PrimaryKeyConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L70"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UniqueConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L71"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "create_table", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L73"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L74"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UUID", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L74"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L75"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UUID", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L75"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L76"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "String", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L76"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L77"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "String", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L77"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L78"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "ENUM", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L78"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L79"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Boolean", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L79"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L80"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "DateTime", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L80"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "text", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L80"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L81"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "DateTime", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L81"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "text", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L81"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "ForeignKeyConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L82"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "PrimaryKeyConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L83"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UniqueConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L84"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "create_table", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L86"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L87"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UUID", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L87"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L88"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UUID", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L88"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L89"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "String", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L89"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L90"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Text", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L90"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L91"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Text", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L91"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L92"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "String", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L92"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L93"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Integer", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L93"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L94"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Integer", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L94"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L95"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Integer", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L95"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L96"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Integer", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L96"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L97"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "ARRAY", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L97"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "String", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L97"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L98"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "ARRAY", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L98"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "String", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L98"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L99"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "String", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L99"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L100"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Integer", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L100"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L101"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "JSONB", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L101"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L102"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "ARRAY", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L102"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Text", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L102"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L103"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Text", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L103"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L104"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "DateTime", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L104"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L105"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Boolean", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L105"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L106"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "DateTime", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L106"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "text", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L106"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L107"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "DateTime", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L107"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "text", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L107"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "ForeignKeyConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L108"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "PrimaryKeyConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L109"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "create_table", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L111"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L112"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UUID", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L112"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L113"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UUID", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L113"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L114"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Date", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L114"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L115"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "ENUM", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L115"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L116"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "DateTime", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L116"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L117"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Numeric", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L117"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L118"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Text", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L118"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L119"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "DateTime", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L119"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "text", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L119"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L120"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "DateTime", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L120"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "text", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L120"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "ForeignKeyConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L121"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "PrimaryKeyConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L122"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UniqueConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L123"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "create_table", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L125"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L126"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UUID", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L126"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L127"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UUID", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L127"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L128"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UUID", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L128"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L129"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Numeric", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L129"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L130"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "String", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L130"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L131"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Date", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L131"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L132"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "DateTime", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L132"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "text", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L132"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L133"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "DateTime", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L133"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "text", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L133"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "ForeignKeyConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L134"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "ForeignKeyConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L135"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "PrimaryKeyConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L136"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UniqueConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L137"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "create_table", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L139"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L140"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UUID", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L140"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L141"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UUID", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L141"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L142"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UUID", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L142"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L143"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Integer", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L143"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L144"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "ENUM", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L144"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L145"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "ENUM", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L145"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L146"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "ENUM", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L146"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L147"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Text", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L147"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L148"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Numeric", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L148"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L149"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "ARRAY", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L149"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UUID", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L149"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L150"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "DateTime", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L150"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "text", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L150"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L151"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "DateTime", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L151"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "text", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L151"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "ForeignKeyConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L152"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "ForeignKeyConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L153"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "PrimaryKeyConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L154"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UniqueConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L155"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "create_table", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L157"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L158"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UUID", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L158"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L159"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UUID", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L159"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L160"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UUID", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L160"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L161"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Boolean", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L161"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L162"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "DateTime", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L162"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "text", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L162"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "ForeignKeyConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L163"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "ForeignKeyConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L164"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "PrimaryKeyConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L165"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UniqueConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L166"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "create_table", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L168"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L169"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UUID", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L169"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L170"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UUID", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L170"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L171"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UUID", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L171"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L172"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "String", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L172"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L173"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "ENUM", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L173"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L174"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "DateTime", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L174"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L175"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "DateTime", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L175"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L176"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "DateTime", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L176"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "text", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L176"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "ForeignKeyConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L177"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "ForeignKeyConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L178"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "PrimaryKeyConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L179"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UniqueConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L180"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UniqueConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L181"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "create_table", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L183"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L184"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UUID", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L184"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L185"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UUID", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L185"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L186"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UUID", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L186"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L187"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UUID", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L187"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L188"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Integer", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L188"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L189"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Boolean", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L189"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L190"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "ENUM", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L190"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L191"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Text", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L191"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L192"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "DateTime", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L192"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "text", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L192"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "ForeignKeyConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L193"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "ForeignKeyConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L194"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "ForeignKeyConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L195"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "PrimaryKeyConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L196"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "create_table", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L198"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L199"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UUID", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L199"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L200"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UUID", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L200"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L201"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UUID", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L201"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L202"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UUID", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L202"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L203"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "ENUM", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L203"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L204"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Text", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L204"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L205"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "DateTime", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L205"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "text", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L205"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "ForeignKeyConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L206"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "ForeignKeyConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L207"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "ForeignKeyConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L208"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "PrimaryKeyConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L209"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "create_table", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L211"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L212"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UUID", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L212"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L213"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UUID", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L213"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L214"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "String", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L214"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L215"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "String", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L215"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L216"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Numeric", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L216"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L217"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Numeric", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L217"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L218"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "String", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L218"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L219"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "String", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L219"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L220"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Text", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L220"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L221"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Text", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L221"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L222"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Boolean", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L222"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L223"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Date", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L223"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L224"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Date", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L224"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L225"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Boolean", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L225"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L226"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "DateTime", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L226"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "text", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L226"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L227"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Text", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L227"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "ForeignKeyConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L228"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "PrimaryKeyConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L229"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "create_table", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L231"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L232"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UUID", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L232"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L233"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "String", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L233"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L234"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "String", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L234"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L235"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "ENUM", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L235"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L236"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Integer", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L236"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L237"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Text", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L237"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L238"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "DateTime", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L238"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "text", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L238"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L239"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "DateTime", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L239"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L240"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Integer", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L240"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "PrimaryKeyConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L241"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "create_table", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L243"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L244"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UUID", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L244"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L245"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "String", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L245"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L246"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "String", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L246"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L247"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "String", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L247"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L248"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UUID", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L248"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L249"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "UUID", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L249"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L250"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "String", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L250"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L251"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "ENUM", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L251"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L252"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Text", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L252"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L253"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "DateTime", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L253"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "text", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L253"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L254"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "DateTime", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L254"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "ForeignKeyConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L255"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "ForeignKeyConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L256"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "PrimaryKeyConstraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L257"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "create_index", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L260"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "create_index", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L261"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "create_index", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L262"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "create_index", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L263"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "create_index", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L264"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "create_index", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L265"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "create_index", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L266"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "create_index", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L267"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "create_index", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L268"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "create_index", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L269"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "create_index", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L270"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "create_index", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L271"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "create_index", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L272"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "create_index", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L273"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "create_index", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L274"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "create_index", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L275"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "create_index", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L276"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "text", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L276"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "text", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L276"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "execute", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L278"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "execute", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L279"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "create_check_constraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L281"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "create_check_constraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L282"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "create_check_constraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L283"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "create_check_constraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L284"}, {"caller_nid": "0001_initial_migration_upgrade", "callee": "create_check_constraint", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L285"}, {"caller_nid": "0001_initial_migration_downgrade", "callee": "execute", "source_file": "backend/alembic/versions/0001_initial_migration.py", "source_location": "L289"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/4b2d737e9a8de68eb72124e08e6893da644136b508aa19e25b452853dafa8b7d.json b/graphify-out/cache/4b2d737e9a8de68eb72124e08e6893da644136b508aa19e25b452853dafa8b7d.json
deleted file mode 100644
index bf444d3..0000000
--- a/graphify-out/cache/4b2d737e9a8de68eb72124e08e6893da644136b508aa19e25b452853dafa8b7d.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_alembic_versions_0006_recipe_engine_thin_py", "label": "0006_recipe_engine_thin.py", "file_type": "code", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L1"}, {"id": "0006_recipe_engine_thin_upgrade", "label": "upgrade()", "file_type": "code", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L19"}, {"id": "0006_recipe_engine_thin_downgrade", "label": "downgrade()", "file_type": "code", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L88"}, {"id": "0006_recipe_engine_thin_rationale_1", "label": "thin phase 4: ingredient.aliases, recipe.calories_per_serving, ingredient_grocer", "file_type": "rationale", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L1"}], "edges": [{"source": "backend_alembic_versions_0006_recipe_engine_thin_py", "target": "alembic", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L7", "weight": 1.0}, {"source": "backend_alembic_versions_0006_recipe_engine_thin_py", "target": "sqlalchemy", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L8", "weight": 1.0}, {"source": "backend_alembic_versions_0006_recipe_engine_thin_py", "target": "sqlalchemy_dialects", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L9", "weight": 1.0}, {"source": "backend_alembic_versions_0006_recipe_engine_thin_py", "target": "sqlalchemy_dialects_postgresql", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L10", "weight": 1.0}, {"source": "backend_alembic_versions_0006_recipe_engine_thin_py", "target": "0006_recipe_engine_thin_upgrade", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L19", "weight": 1.0}, {"source": "backend_alembic_versions_0006_recipe_engine_thin_py", "target": "0006_recipe_engine_thin_downgrade", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L88", "weight": 1.0}, {"source": "0006_recipe_engine_thin_rationale_1", "target": "backend_alembic_versions_0006_recipe_engine_thin_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "0006_recipe_engine_thin_upgrade", "callee": "add_column", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L20"}, {"caller_nid": "0006_recipe_engine_thin_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L22"}, {"caller_nid": "0006_recipe_engine_thin_upgrade", "callee": "ARRAY", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L24"}, {"caller_nid": "0006_recipe_engine_thin_upgrade", "callee": "Text", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L24"}, {"caller_nid": "0006_recipe_engine_thin_upgrade", "callee": "add_column", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L30"}, {"caller_nid": "0006_recipe_engine_thin_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L32"}, {"caller_nid": "0006_recipe_engine_thin_upgrade", "callee": "Integer", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L32"}, {"caller_nid": "0006_recipe_engine_thin_upgrade", "callee": "execute", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L35"}, {"caller_nid": "0006_recipe_engine_thin_upgrade", "callee": "create_table", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L39"}, {"caller_nid": "0006_recipe_engine_thin_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L41"}, {"caller_nid": "0006_recipe_engine_thin_upgrade", "callee": "UUID", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L43"}, {"caller_nid": "0006_recipe_engine_thin_upgrade", "callee": "text", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L45"}, {"caller_nid": "0006_recipe_engine_thin_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L47"}, {"caller_nid": "0006_recipe_engine_thin_upgrade", "callee": "UUID", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L49"}, {"caller_nid": "0006_recipe_engine_thin_upgrade", "callee": "ForeignKey", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L50"}, {"caller_nid": "0006_recipe_engine_thin_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L53"}, {"caller_nid": "0006_recipe_engine_thin_upgrade", "callee": "UUID", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L55"}, {"caller_nid": "0006_recipe_engine_thin_upgrade", "callee": "ForeignKey", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L56"}, {"caller_nid": "0006_recipe_engine_thin_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L59"}, {"caller_nid": "0006_recipe_engine_thin_upgrade", "callee": "Numeric", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L59"}, {"caller_nid": "0006_recipe_engine_thin_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L60"}, {"caller_nid": "0006_recipe_engine_thin_upgrade", "callee": "ENUM", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L62"}, {"caller_nid": "0006_recipe_engine_thin_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L68"}, {"caller_nid": "0006_recipe_engine_thin_upgrade", "callee": "DateTime", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L70"}, {"caller_nid": "0006_recipe_engine_thin_upgrade", "callee": "now", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L71"}, {"caller_nid": "0006_recipe_engine_thin_upgrade", "callee": "UniqueConstraint", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L74"}, {"caller_nid": "0006_recipe_engine_thin_upgrade", "callee": "create_index", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L81"}, {"caller_nid": "0006_recipe_engine_thin_upgrade", "callee": "text", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L84"}, {"caller_nid": "0006_recipe_engine_thin_downgrade", "callee": "drop_index", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L89"}, {"caller_nid": "0006_recipe_engine_thin_downgrade", "callee": "drop_table", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L93"}, {"caller_nid": "0006_recipe_engine_thin_downgrade", "callee": "execute", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L94"}, {"caller_nid": "0006_recipe_engine_thin_downgrade", "callee": "drop_column", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L95"}, {"caller_nid": "0006_recipe_engine_thin_downgrade", "callee": "drop_column", "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py", "source_location": "L96"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/4c580d9af1c48927236491e2983c6a56e236c078d41148320370da305e7ddc61.json b/graphify-out/cache/4c580d9af1c48927236491e2983c6a56e236c078d41148320370da305e7ddc61.json
deleted file mode 100644
index 23d7896..0000000
--- a/graphify-out/cache/4c580d9af1c48927236491e2983c6a56e236c078d41148320370da305e7ddc61.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_api_auth_py", "label": "auth.py", "file_type": "code", "source_file": "backend/app/api/auth.py", "source_location": "L1"}, {"id": "auth_loginrequest", "label": "LoginRequest", "file_type": "code", "source_file": "backend/app/api/auth.py", "source_location": "L26"}, {"id": "basemodel", "label": "BaseModel", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "auth_login", "label": "login()", "file_type": "code", "source_file": "backend/app/api/auth.py", "source_location": "L31"}, {"id": "auth_logout", "label": "logout()", "file_type": "code", "source_file": "backend/app/api/auth.py", "source_location": "L64"}, {"id": "auth_rationale_1", "label": "Family-shared session login. POST /api/auth/login \u2014 body ``{\"password\": \"...\"}`", "file_type": "rationale", "source_file": "backend/app/api/auth.py", "source_location": "L1"}], "edges": [{"source": "backend_app_api_auth_py", "target": "fastapi", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/auth.py", "source_location": "L14", "weight": 1.0}, {"source": "backend_app_api_auth_py", "target": "pydantic", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/auth.py", "source_location": "L15", "weight": 1.0}, {"source": "backend_app_api_auth_py", "target": "sqlalchemy_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/auth.py", "source_location": "L16", "weight": 1.0}, {"source": "backend_app_api_auth_py", "target": "app_config", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/auth.py", "source_location": "L18", "weight": 1.0}, {"source": "backend_app_api_auth_py", "target": "app_database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/auth.py", "source_location": "L19", "weight": 1.0}, {"source": "backend_app_api_auth_py", "target": "app_models", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/auth.py", "source_location": "L20", "weight": 1.0}, {"source": "backend_app_api_auth_py", "target": "app_security", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/auth.py", "source_location": "L21", "weight": 1.0}, {"source": "backend_app_api_auth_py", "target": "auth_loginrequest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/auth.py", "source_location": "L26", "weight": 1.0}, {"source": "auth_loginrequest", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/api/auth.py", "source_location": "L26", "weight": 1.0}, {"source": "backend_app_api_auth_py", "target": "auth_login", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/auth.py", "source_location": "L31", "weight": 1.0}, {"source": "backend_app_api_auth_py", "target": "auth_logout", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/auth.py", "source_location": "L64", "weight": 1.0}, {"source": "auth_rationale_1", "target": "backend_app_api_auth_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/api/auth.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "auth_login", "callee": "HTTPException", "source_file": "backend/app/api/auth.py", "source_location": "L34"}, {"caller_nid": "auth_login", "callee": "HTTPException", "source_file": "backend/app/api/auth.py", "source_location": "L39"}, {"caller_nid": "auth_login", "callee": "first", "source_file": "backend/app/api/auth.py", "source_location": "L43"}, {"caller_nid": "auth_login", "callee": "query", "source_file": "backend/app/api/auth.py", "source_location": "L43"}, {"caller_nid": "auth_login", "callee": "str", "source_file": "backend/app/api/auth.py", "source_location": "L47"}, {"caller_nid": "auth_login", "callee": "issue_session", "source_file": "backend/app/api/auth.py", "source_location": "L48"}, {"caller_nid": "auth_login", "callee": "Response", "source_file": "backend/app/api/auth.py", "source_location": "L50"}, {"caller_nid": "auth_login", "callee": "set_cookie", "source_file": "backend/app/api/auth.py", "source_location": "L51"}, {"caller_nid": "auth_logout", "callee": "Response", "source_file": "backend/app/api/auth.py", "source_location": "L65"}, {"caller_nid": "auth_logout", "callee": "delete_cookie", "source_file": "backend/app/api/auth.py", "source_location": "L66"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/4cab40916116d18df317a16e631231d9351ed5c2c64934eaab67a2b610dcfcfb.json b/graphify-out/cache/4cab40916116d18df317a16e631231d9351ed5c2c64934eaab67a2b610dcfcfb.json
deleted file mode 100644
index 2fb5ff1..0000000
--- a/graphify-out/cache/4cab40916116d18df317a16e631231d9351ed5c2c64934eaab67a2b610dcfcfb.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_main_py", "label": "main.py", "file_type": "code", "source_file": "backend/app/main.py", "source_location": "L1"}, {"id": "main_health_check", "label": "health_check()", "file_type": "code", "source_file": "backend/app/main.py", "source_location": "L19"}, {"id": "main_health_check_db", "label": "health_check_db()", "file_type": "code", "source_file": "backend/app/main.py", "source_location": "L24"}], "edges": [{"source": "backend_app_main_py", "target": "fastapi", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/main.py", "source_location": "L1", "weight": 1.0}, {"source": "backend_app_main_py", "target": "sqlalchemy_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/main.py", "source_location": "L2", "weight": 1.0}, {"source": "backend_app_main_py", "target": "sqlalchemy", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/main.py", "source_location": "L3", "weight": 1.0}, {"source": "backend_app_main_py", "target": "app_database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/main.py", "source_location": "L4", "weight": 1.0}, {"source": "backend_app_main_py", "target": "app_config", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/main.py", "source_location": "L5", "weight": 1.0}, {"source": "backend_app_main_py", "target": "logging", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/app/main.py", "source_location": "L6", "weight": 1.0}, {"source": "backend_app_main_py", "target": "main_health_check", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/main.py", "source_location": "L19", "weight": 1.0}, {"source": "backend_app_main_py", "target": "main_health_check_db", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/main.py", "source_location": "L24", "weight": 1.0}, {"source": "backend_app_main_py", "target": "app_api", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/main.py", "source_location": "L32", "weight": 1.0}, {"source": "backend_app_main_py", "target": "app_api", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/main.py", "source_location": "L33", "weight": 1.0}, {"source": "backend_app_main_py", "target": "app_api", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/main.py", "source_location": "L34", "weight": 1.0}, {"source": "backend_app_main_py", "target": "app_api", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/main.py", "source_location": "L35", "weight": 1.0}, {"source": "backend_app_main_py", "target": "app_api", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/main.py", "source_location": "L36", "weight": 1.0}, {"source": "backend_app_main_py", "target": "app_api", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/main.py", "source_location": "L37", "weight": 1.0}, {"source": "backend_app_main_py", "target": "app_api", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/main.py", "source_location": "L38", "weight": 1.0}], "raw_calls": [{"caller_nid": "main_health_check_db", "callee": "execute", "source_file": "backend/app/main.py", "source_location": "L26"}, {"caller_nid": "main_health_check_db", "callee": "text", "source_file": "backend/app/main.py", "source_location": "L26"}, {"caller_nid": "main_health_check_db", "callee": "str", "source_file": "backend/app/main.py", "source_location": "L29"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/5039275bc1234cdc578dbfce2be14705b9327b0ad62eed2bf0e07de810cca17b.json b/graphify-out/cache/5039275bc1234cdc578dbfce2be14705b9327b0ad62eed2bf0e07de810cca17b.json
deleted file mode 100644
index 967db20..0000000
--- a/graphify-out/cache/5039275bc1234cdc578dbfce2be14705b9327b0ad62eed2bf0e07de810cca17b.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "frontend_src_app_tsx", "label": "App.tsx", "file_type": "code", "source_file": "frontend/src/App.tsx", "source_location": "L1"}, {"id": "app_isactive", "label": "isActive()", "file_type": "code", "source_file": "frontend/src/App.tsx", "source_location": "L13"}, {"id": "app_linkclass", "label": "linkClass()", "file_type": "code", "source_file": "frontend/src/App.tsx", "source_location": "L15"}], "edges": [{"source": "frontend_src_app_tsx", "target": "react_router_dom", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/App.tsx", "source_location": "L1", "weight": 1.0}, {"source": "frontend_src_app_tsx", "target": "react_query", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/App.tsx", "source_location": "L2", "weight": 1.0}, {"source": "frontend_src_app_tsx", "target": "frontend_src_components_errorboundary", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/App.tsx", "source_location": "L3", "weight": 1.0}, {"source": "frontend_src_app_tsx", "target": "frontend_src_pages_dashboard", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/App.tsx", "source_location": "L4", "weight": 1.0}, {"source": "frontend_src_app_tsx", "target": "frontend_src_pages_mealdetail", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/App.tsx", "source_location": "L5", "weight": 1.0}, {"source": "frontend_src_app_tsx", "target": "frontend_src_pages_pantry", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/App.tsx", "source_location": "L6", "weight": 1.0}, {"source": "frontend_src_app_tsx", "target": "frontend_src_pages_shoppinglist", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/App.tsx", "source_location": "L7", "weight": 1.0}, {"source": "frontend_src_app_tsx", "target": "app_isactive", "relation": "contains", "confidence": "EXTRACTED", "source_file": "frontend/src/App.tsx", "source_location": "L13", "weight": 1.0}, {"source": "frontend_src_app_tsx", "target": "app_linkclass", "relation": "contains", "confidence": "EXTRACTED", "source_file": "frontend/src/App.tsx", "source_location": "L15", "weight": 1.0}, {"source": "app_linkclass", "target": "app_isactive", "relation": "calls", "confidence": "EXTRACTED", "source_file": "frontend/src/App.tsx", "source_location": "L17", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/graphify-out/cache/5821d913f2895e7ff0be3a207ccd06daff302b34a4183555bb975d86d56a405d.json b/graphify-out/cache/5821d913f2895e7ff0be3a207ccd06daff302b34a4183555bb975d86d56a405d.json
deleted file mode 100644
index 13a74ca..0000000
--- a/graphify-out/cache/5821d913f2895e7ff0be3a207ccd06daff302b34a4183555bb975d86d56a405d.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_tests_test_ingredient_schema_py", "label": "test_ingredient_schema.py", "file_type": "code", "source_file": "backend/tests/test_ingredient_schema.py", "source_location": "L1"}, {"id": "test_ingredient_schema_test_ingredient_create_normalizes_aliases", "label": "test_ingredient_create_normalizes_aliases()", "file_type": "code", "source_file": "backend/tests/test_ingredient_schema.py", "source_location": "L7"}, {"id": "test_ingredient_schema_test_ingredient_match_read_round_trip", "label": "test_ingredient_match_read_round_trip()", "file_type": "code", "source_file": "backend/tests/test_ingredient_schema.py", "source_location": "L18"}], "edges": [{"source": "backend_tests_test_ingredient_schema_py", "target": "decimal", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_ingredient_schema.py", "source_location": "L1", "weight": 1.0}, {"source": "backend_tests_test_ingredient_schema_py", "target": "uuid", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_ingredient_schema.py", "source_location": "L2", "weight": 1.0}, {"source": "backend_tests_test_ingredient_schema_py", "target": "app_schemas_ingredient", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_ingredient_schema.py", "source_location": "L4", "weight": 1.0}, {"source": "backend_tests_test_ingredient_schema_py", "target": "test_ingredient_schema_test_ingredient_create_normalizes_aliases", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_ingredient_schema.py", "source_location": "L7", "weight": 1.0}, {"source": "backend_tests_test_ingredient_schema_py", "target": "test_ingredient_schema_test_ingredient_match_read_round_trip", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_ingredient_schema.py", "source_location": "L18", "weight": 1.0}], "raw_calls": [{"caller_nid": "test_ingredient_schema_test_ingredient_create_normalizes_aliases", "callee": "IngredientCreate", "source_file": "backend/tests/test_ingredient_schema.py", "source_location": "L8"}, {"caller_nid": "test_ingredient_schema_test_ingredient_match_read_round_trip", "callee": "uuid4", "source_file": "backend/tests/test_ingredient_schema.py", "source_location": "L19"}, {"caller_nid": "test_ingredient_schema_test_ingredient_match_read_round_trip", "callee": "uuid4", "source_file": "backend/tests/test_ingredient_schema.py", "source_location": "L20"}, {"caller_nid": "test_ingredient_schema_test_ingredient_match_read_round_trip", "callee": "uuid4", "source_file": "backend/tests/test_ingredient_schema.py", "source_location": "L22"}, {"caller_nid": "test_ingredient_schema_test_ingredient_match_read_round_trip", "callee": "Decimal", "source_file": "backend/tests/test_ingredient_schema.py", "source_location": "L25"}, {"caller_nid": "test_ingredient_schema_test_ingredient_match_read_round_trip", "callee": "Decimal", "source_file": "backend/tests/test_ingredient_schema.py", "source_location": "L28"}, {"caller_nid": "test_ingredient_schema_test_ingredient_match_read_round_trip", "callee": "Decimal", "source_file": "backend/tests/test_ingredient_schema.py", "source_location": "L29"}, {"caller_nid": "test_ingredient_schema_test_ingredient_match_read_round_trip", "callee": "model_validate", "source_file": "backend/tests/test_ingredient_schema.py", "source_location": "L32"}, {"caller_nid": "test_ingredient_schema_test_ingredient_match_read_round_trip", "callee": "Decimal", "source_file": "backend/tests/test_ingredient_schema.py", "source_location": "L33"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/5999d03e4fd8ebb6013e1176932718d8a936d2a0f83cd7ff3a68127cc3c6b7ca.json b/graphify-out/cache/5999d03e4fd8ebb6013e1176932718d8a936d2a0f83cd7ff3a68127cc3c6b7ca.json
deleted file mode 100644
index 4ef7557..0000000
--- a/graphify-out/cache/5999d03e4fd8ebb6013e1176932718d8a936d2a0f83cd7ff3a68127cc3c6b7ca.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_tests_test_never_suggest_api_py", "label": "test_never_suggest_api.py", "file_type": "code", "source_file": "backend/tests/test_never_suggest_api.py", "source_location": "L1"}, {"id": "test_never_suggest_api_admin", "label": "_admin()", "file_type": "code", "source_file": "backend/tests/test_never_suggest_api.py", "source_location": "L6"}, {"id": "test_never_suggest_api_seed_family", "label": "_seed_family()", "file_type": "code", "source_file": "backend/tests/test_never_suggest_api.py", "source_location": "L10"}, {"id": "test_never_suggest_api_test_block_ingredient", "label": "test_block_ingredient()", "file_type": "code", "source_file": "backend/tests/test_never_suggest_api.py", "source_location": "L29"}, {"id": "test_never_suggest_api_test_list_never_suggest_for_family", "label": "test_list_never_suggest_for_family()", "file_type": "code", "source_file": "backend/tests/test_never_suggest_api.py", "source_location": "L46"}, {"id": "test_never_suggest_api_test_unblock_removes_row", "label": "test_unblock_removes_row()", "file_type": "code", "source_file": "backend/tests/test_never_suggest_api.py", "source_location": "L63"}], "edges": [{"source": "backend_tests_test_never_suggest_api_py", "target": "pytest", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_never_suggest_api.py", "source_location": "L1", "weight": 1.0}, {"source": "backend_tests_test_never_suggest_api_py", "target": "test_never_suggest_api_admin", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_never_suggest_api.py", "source_location": "L6", "weight": 1.0}, {"source": "backend_tests_test_never_suggest_api_py", "target": "test_never_suggest_api_seed_family", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_never_suggest_api.py", "source_location": "L10", "weight": 1.0}, {"source": "backend_tests_test_never_suggest_api_py", "target": "test_never_suggest_api_test_block_ingredient", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_never_suggest_api.py", "source_location": "L29", "weight": 1.0}, {"source": "backend_tests_test_never_suggest_api_py", "target": "test_never_suggest_api_test_list_never_suggest_for_family", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_never_suggest_api.py", "source_location": "L46", "weight": 1.0}, {"source": "backend_tests_test_never_suggest_api_py", "target": "test_never_suggest_api_test_unblock_removes_row", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_never_suggest_api.py", "source_location": "L63", "weight": 1.0}, {"source": "test_never_suggest_api_test_block_ingredient", "target": "test_never_suggest_api_seed_family", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_never_suggest_api.py", "source_location": "L30", "weight": 1.0}, {"source": "test_never_suggest_api_test_block_ingredient", "target": "test_never_suggest_api_admin", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_never_suggest_api.py", "source_location": "L34", "weight": 1.0}, {"source": "test_never_suggest_api_test_list_never_suggest_for_family", "target": "test_never_suggest_api_seed_family", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_never_suggest_api.py", "source_location": "L47", "weight": 1.0}, {"source": "test_never_suggest_api_test_list_never_suggest_for_family", "target": "test_never_suggest_api_admin", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_never_suggest_api.py", "source_location": "L51", "weight": 1.0}, {"source": "test_never_suggest_api_test_unblock_removes_row", "target": "test_never_suggest_api_seed_family", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_never_suggest_api.py", "source_location": "L64", "weight": 1.0}, {"source": "test_never_suggest_api_test_unblock_removes_row", "target": "test_never_suggest_api_admin", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_never_suggest_api.py", "source_location": "L68", "weight": 1.0}], "raw_calls": [{"caller_nid": "test_never_suggest_api_seed_family", "callee": "uuid4", "source_file": "backend/tests/test_never_suggest_api.py", "source_location": "L14"}, {"caller_nid": "test_never_suggest_api_seed_family", "callee": "add", "source_file": "backend/tests/test_never_suggest_api.py", "source_location": "L15"}, {"caller_nid": "test_never_suggest_api_seed_family", "callee": "FamilyProfile", "source_file": "backend/tests/test_never_suggest_api.py", "source_location": "L16"}, {"caller_nid": "test_never_suggest_api_seed_family", "callee": "commit", "source_file": "backend/tests/test_never_suggest_api.py", "source_location": "L25"}, {"caller_nid": "test_never_suggest_api_seed_family", "callee": "str", "source_file": "backend/tests/test_never_suggest_api.py", "source_location": "L26"}, {"caller_nid": "test_never_suggest_api_test_block_ingredient", "callee": "post", "source_file": "backend/tests/test_never_suggest_api.py", "source_location": "L31"}, {"caller_nid": "test_never_suggest_api_test_block_ingredient", "callee": "json", "source_file": "backend/tests/test_never_suggest_api.py", "source_location": "L36"}, {"caller_nid": "test_never_suggest_api_test_block_ingredient", "callee": "post", "source_file": "backend/tests/test_never_suggest_api.py", "source_location": "L38"}, {"caller_nid": "test_never_suggest_api_test_list_never_suggest_for_family", "callee": "post", "source_file": "backend/tests/test_never_suggest_api.py", "source_location": "L48"}, {"caller_nid": "test_never_suggest_api_test_list_never_suggest_for_family", "callee": "post", "source_file": "backend/tests/test_never_suggest_api.py", "source_location": "L53"}, {"caller_nid": "test_never_suggest_api_test_list_never_suggest_for_family", "callee": "json", "source_file": "backend/tests/test_never_suggest_api.py", "source_location": "L55"}, {"caller_nid": "test_never_suggest_api_test_list_never_suggest_for_family", "callee": "get", "source_file": "backend/tests/test_never_suggest_api.py", "source_location": "L58"}, {"caller_nid": "test_never_suggest_api_test_list_never_suggest_for_family", "callee": "len", "source_file": "backend/tests/test_never_suggest_api.py", "source_location": "L60"}, {"caller_nid": "test_never_suggest_api_test_list_never_suggest_for_family", "callee": "json", "source_file": "backend/tests/test_never_suggest_api.py", "source_location": "L60"}, {"caller_nid": "test_never_suggest_api_test_unblock_removes_row", "callee": "post", "source_file": "backend/tests/test_never_suggest_api.py", "source_location": "L65"}, {"caller_nid": "test_never_suggest_api_test_unblock_removes_row", "callee": "post", "source_file": "backend/tests/test_never_suggest_api.py", "source_location": "L70"}, {"caller_nid": "test_never_suggest_api_test_unblock_removes_row", "callee": "json", "source_file": "backend/tests/test_never_suggest_api.py", "source_location": "L72"}, {"caller_nid": "test_never_suggest_api_test_unblock_removes_row", "callee": "json", "source_file": "backend/tests/test_never_suggest_api.py", "source_location": "L75"}, {"caller_nid": "test_never_suggest_api_test_unblock_removes_row", "callee": "delete", "source_file": "backend/tests/test_never_suggest_api.py", "source_location": "L76"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/5ae40d76bfe483c9ac994a887c1e089b643f24312181ccb1a99c8ad872829237.json b/graphify-out/cache/5ae40d76bfe483c9ac994a887c1e089b643f24312181ccb1a99c8ad872829237.json
deleted file mode 100644
index 1943f77..0000000
--- a/graphify-out/cache/5ae40d76bfe483c9ac994a887c1e089b643f24312181ccb1a99c8ad872829237.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_api_admin_py", "label": "admin.py", "file_type": "code", "source_file": "backend/app/api/admin.py", "source_location": "L1"}, {"id": "admin_trigger_scrape", "label": "trigger_scrape()", "file_type": "code", "source_file": "backend/app/api/admin.py", "source_location": "L14"}, {"id": "admin_get_logs", "label": "get_logs()", "file_type": "code", "source_file": "backend/app/api/admin.py", "source_location": "L30"}, {"id": "admin_get_log", "label": "get_log()", "file_type": "code", "source_file": "backend/app/api/admin.py", "source_location": "L60"}, {"id": "admin_get_email_logs", "label": "get_email_logs()", "file_type": "code", "source_file": "backend/app/api/admin.py", "source_location": "L78"}, {"id": "admin_get_all_meal_plans", "label": "get_all_meal_plans()", "file_type": "code", "source_file": "backend/app/api/admin.py", "source_location": "L107"}, {"id": "admin_test_email", "label": "test_email()", "file_type": "code", "source_file": "backend/app/api/admin.py", "source_location": "L134"}, {"id": "admin_get_stats", "label": "get_stats()", "file_type": "code", "source_file": "backend/app/api/admin.py", "source_location": "L171"}], "edges": [{"source": "backend_app_api_admin_py", "target": "fastapi", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/admin.py", "source_location": "L1", "weight": 1.0}, {"source": "backend_app_api_admin_py", "target": "sqlalchemy_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/admin.py", "source_location": "L2", "weight": 1.0}, {"source": "backend_app_api_admin_py", "target": "app_database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/admin.py", "source_location": "L3", "weight": 1.0}, {"source": "backend_app_api_admin_py", "target": "app_models", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/admin.py", "source_location": "L4", "weight": 1.0}, {"source": "backend_app_api_admin_py", "target": "app_security", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/admin.py", "source_location": "L5", "weight": 1.0}, {"source": "backend_app_api_admin_py", "target": "app_services_scraper_service", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/admin.py", "source_location": "L6", "weight": 1.0}, {"source": "backend_app_api_admin_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/admin.py", "source_location": "L7", "weight": 1.0}, {"source": "backend_app_api_admin_py", "target": "datetime", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/admin.py", "source_location": "L8", "weight": 1.0}, {"source": "backend_app_api_admin_py", "target": "admin_trigger_scrape", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/admin.py", "source_location": "L14", "weight": 1.0}, {"source": "backend_app_api_admin_py", "target": "admin_get_logs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/admin.py", "source_location": "L30", "weight": 1.0}, {"source": "backend_app_api_admin_py", "target": "admin_get_log", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/admin.py", "source_location": "L60", "weight": 1.0}, {"source": "backend_app_api_admin_py", "target": "admin_get_email_logs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/admin.py", "source_location": "L78", "weight": 1.0}, {"source": "backend_app_api_admin_py", "target": "admin_get_all_meal_plans", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/admin.py", "source_location": "L107", "weight": 1.0}, {"source": "backend_app_api_admin_py", "target": "admin_test_email", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/admin.py", "source_location": "L134", "weight": 1.0}, {"source": "backend_app_api_admin_py", "target": "admin_get_stats", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/admin.py", "source_location": "L171", "weight": 1.0}], "raw_calls": [{"caller_nid": "admin_trigger_scrape", "callee": "enqueue_scrape", "source_file": "backend/app/api/admin.py", "source_location": "L20"}, {"caller_nid": "admin_trigger_scrape", "callee": "str", "source_file": "backend/app/api/admin.py", "source_location": "L26"}, {"caller_nid": "admin_get_logs", "callee": "order_by", "source_file": "backend/app/api/admin.py", "source_location": "L35"}, {"caller_nid": "admin_get_logs", "callee": "query", "source_file": "backend/app/api/admin.py", "source_location": "L35"}, {"caller_nid": "admin_get_logs", "callee": "desc", "source_file": "backend/app/api/admin.py", "source_location": "L35"}, {"caller_nid": "admin_get_logs", "callee": "filter", "source_file": "backend/app/api/admin.py", "source_location": "L38"}, {"caller_nid": "admin_get_logs", "callee": "all", "source_file": "backend/app/api/admin.py", "source_location": "L40"}, {"caller_nid": "admin_get_logs", "callee": "limit", "source_file": "backend/app/api/admin.py", "source_location": "L40"}, {"caller_nid": "admin_get_logs", "callee": "str", "source_file": "backend/app/api/admin.py", "source_location": "L44"}, {"caller_nid": "admin_get_logs", "callee": "isoformat", "source_file": "backend/app/api/admin.py", "source_location": "L50"}, {"caller_nid": "admin_get_logs", "callee": "isoformat", "source_file": "backend/app/api/admin.py", "source_location": "L51"}, {"caller_nid": "admin_get_log", "callee": "first", "source_file": "backend/app/api/admin.py", "source_location": "L61"}, {"caller_nid": "admin_get_log", "callee": "filter", "source_file": "backend/app/api/admin.py", "source_location": "L61"}, {"caller_nid": "admin_get_log", "callee": "query", "source_file": "backend/app/api/admin.py", "source_location": "L61"}, {"caller_nid": "admin_get_log", "callee": "HTTPException", "source_file": "backend/app/api/admin.py", "source_location": "L63"}, {"caller_nid": "admin_get_log", "callee": "str", "source_file": "backend/app/api/admin.py", "source_location": "L65"}, {"caller_nid": "admin_get_log", "callee": "isoformat", "source_file": "backend/app/api/admin.py", "source_location": "L71"}, {"caller_nid": "admin_get_log", "callee": "isoformat", "source_file": "backend/app/api/admin.py", "source_location": "L72"}, {"caller_nid": "admin_get_email_logs", "callee": "order_by", "source_file": "backend/app/api/admin.py", "source_location": "L83"}, {"caller_nid": "admin_get_email_logs", "callee": "query", "source_file": "backend/app/api/admin.py", "source_location": "L83"}, {"caller_nid": "admin_get_email_logs", "callee": "desc", "source_file": "backend/app/api/admin.py", "source_location": "L83"}, {"caller_nid": "admin_get_email_logs", "callee": "filter", "source_file": "backend/app/api/admin.py", "source_location": "L86"}, {"caller_nid": "admin_get_email_logs", "callee": "all", "source_file": "backend/app/api/admin.py", "source_location": "L88"}, {"caller_nid": "admin_get_email_logs", "callee": "limit", "source_file": "backend/app/api/admin.py", "source_location": "L88"}, {"caller_nid": "admin_get_email_logs", "callee": "str", "source_file": "backend/app/api/admin.py", "source_location": "L92"}, {"caller_nid": "admin_get_email_logs", "callee": "isoformat", "source_file": "backend/app/api/admin.py", "source_location": "L98"}, {"caller_nid": "admin_get_email_logs", "callee": "isoformat", "source_file": "backend/app/api/admin.py", "source_location": "L99"}, {"caller_nid": "admin_get_all_meal_plans", "callee": "order_by", "source_file": "backend/app/api/admin.py", "source_location": "L112"}, {"caller_nid": "admin_get_all_meal_plans", "callee": "query", "source_file": "backend/app/api/admin.py", "source_location": "L112"}, {"caller_nid": "admin_get_all_meal_plans", "callee": "desc", "source_file": "backend/app/api/admin.py", "source_location": "L112"}, {"caller_nid": "admin_get_all_meal_plans", "callee": "filter", "source_file": "backend/app/api/admin.py", "source_location": "L115"}, {"caller_nid": "admin_get_all_meal_plans", "callee": "all", "source_file": "backend/app/api/admin.py", "source_location": "L117"}, {"caller_nid": "admin_get_all_meal_plans", "callee": "limit", "source_file": "backend/app/api/admin.py", "source_location": "L117"}, {"caller_nid": "admin_get_all_meal_plans", "callee": "str", "source_file": "backend/app/api/admin.py", "source_location": "L121"}, {"caller_nid": "admin_get_all_meal_plans", "callee": "isoformat", "source_file": "backend/app/api/admin.py", "source_location": "L122"}, {"caller_nid": "admin_get_all_meal_plans", "callee": "float", "source_file": "backend/app/api/admin.py", "source_location": "L124"}, {"caller_nid": "admin_get_all_meal_plans", "callee": "len", "source_file": "backend/app/api/admin.py", "source_location": "L125"}, {"caller_nid": "admin_get_all_meal_plans", "callee": "isoformat", "source_file": "backend/app/api/admin.py", "source_location": "L126"}, {"caller_nid": "admin_test_email", "callee": "get_email_backend", "source_file": "backend/app/api/admin.py", "source_location": "L141"}, {"caller_nid": "admin_test_email", "callee": "send", "source_file": "backend/app/api/admin.py", "source_location": "L142"}, {"caller_nid": "admin_test_email", "callee": "EmailLog", "source_file": "backend/app/api/admin.py", "source_location": "L152"}, {"caller_nid": "admin_test_email", "callee": "now", "source_file": "backend/app/api/admin.py", "source_location": "L156"}, {"caller_nid": "admin_test_email", "callee": "add", "source_file": "backend/app/api/admin.py", "source_location": "L158"}, {"caller_nid": "admin_test_email", "callee": "commit", "source_file": "backend/app/api/admin.py", "source_location": "L159"}, {"caller_nid": "admin_test_email", "callee": "refresh", "source_file": "backend/app/api/admin.py", "source_location": "L160"}, {"caller_nid": "admin_test_email", "callee": "str", "source_file": "backend/app/api/admin.py", "source_location": "L164"}, {"caller_nid": "admin_get_stats", "callee": "count", "source_file": "backend/app/api/admin.py", "source_location": "L174"}, {"caller_nid": "admin_get_stats", "callee": "query", "source_file": "backend/app/api/admin.py", "source_location": "L174"}, {"caller_nid": "admin_get_stats", "callee": "count", "source_file": "backend/app/api/admin.py", "source_location": "L175"}, {"caller_nid": "admin_get_stats", "callee": "query", "source_file": "backend/app/api/admin.py", "source_location": "L175"}, {"caller_nid": "admin_get_stats", "callee": "count", "source_file": "backend/app/api/admin.py", "source_location": "L176"}, {"caller_nid": "admin_get_stats", "callee": "query", "source_file": "backend/app/api/admin.py", "source_location": "L176"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/5bd6987e1ed8ca514dd8f92c419b65a8c979a2eaa499e5dcbb4271b2b5381e8c.json b/graphify-out/cache/5bd6987e1ed8ca514dd8f92c419b65a8c979a2eaa499e5dcbb4271b2b5381e8c.json
deleted file mode 100644
index e532459..0000000
--- a/graphify-out/cache/5bd6987e1ed8ca514dd8f92c419b65a8c979a2eaa499e5dcbb4271b2b5381e8c.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "scripts_spike_swiftly_ingest_py", "label": "spike_swiftly_ingest.py", "file_type": "code", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L1"}, {"id": "spike_swiftly_ingest_main", "label": "main()", "file_type": "code", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L33"}, {"id": "spike_swiftly_ingest_rationale_1", "label": "Live spike for the Swiftly product API (R3-0, ad-hoc admin tool). Usage: py", "file_type": "rationale", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L1"}], "edges": [{"source": "scripts_spike_swiftly_ingest_py", "target": "argparse", "relation": "imports", "confidence": "EXTRACTED", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L14", "weight": 1.0}, {"source": "scripts_spike_swiftly_ingest_py", "target": "json", "relation": "imports", "confidence": "EXTRACTED", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L15", "weight": 1.0}, {"source": "scripts_spike_swiftly_ingest_py", "target": "os", "relation": "imports", "confidence": "EXTRACTED", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L16", "weight": 1.0}, {"source": "scripts_spike_swiftly_ingest_py", "target": "sys", "relation": "imports", "confidence": "EXTRACTED", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L17", "weight": 1.0}, {"source": "scripts_spike_swiftly_ingest_py", "target": "pathlib", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L18", "weight": 1.0}, {"source": "scripts_spike_swiftly_ingest_py", "target": "app_scraper_lucky_ca_scraper", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L30", "weight": 1.0}, {"source": "scripts_spike_swiftly_ingest_py", "target": "spike_swiftly_ingest_main", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L33", "weight": 1.0}, {"source": "spike_swiftly_ingest_rationale_1", "target": "scripts_spike_swiftly_ingest_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "spike_swiftly_ingest_main", "callee": "ArgumentParser", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L34"}, {"caller_nid": "spike_swiftly_ingest_main", "callee": "add_argument", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L35"}, {"caller_nid": "spike_swiftly_ingest_main", "callee": "add_argument", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L40"}, {"caller_nid": "spike_swiftly_ingest_main", "callee": "add_argument", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L45"}, {"caller_nid": "spike_swiftly_ingest_main", "callee": "parse_args", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L51"}, {"caller_nid": "spike_swiftly_ingest_main", "callee": "print", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L54"}, {"caller_nid": "spike_swiftly_ingest_main", "callee": "LuckyCaliforniaScraper", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L61"}, {"caller_nid": "spike_swiftly_ingest_main", "callee": "discover_categories", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L63"}, {"caller_nid": "spike_swiftly_ingest_main", "callee": "print", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L64"}, {"caller_nid": "spike_swiftly_ingest_main", "callee": "len", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L64"}, {"caller_nid": "spike_swiftly_ingest_main", "callee": "print", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L66"}, {"caller_nid": "spike_swiftly_ingest_main", "callee": "len", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L67"}, {"caller_nid": "spike_swiftly_ingest_main", "callee": "print", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L68"}, {"caller_nid": "spike_swiftly_ingest_main", "callee": "len", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L68"}, {"caller_nid": "spike_swiftly_ingest_main", "callee": "fetch_category", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L71"}, {"caller_nid": "spike_swiftly_ingest_main", "callee": "print", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L73"}, {"caller_nid": "spike_swiftly_ingest_main", "callee": "print", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L76"}, {"caller_nid": "spike_swiftly_ingest_main", "callee": "len", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L76"}, {"caller_nid": "spike_swiftly_ingest_main", "callee": "_aisle_from_slug", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L78"}, {"caller_nid": "spike_swiftly_ingest_main", "callee": "map_product", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L81"}, {"caller_nid": "spike_swiftly_ingest_main", "callee": "append", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L85"}, {"caller_nid": "spike_swiftly_ingest_main", "callee": "print", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L86"}, {"caller_nid": "spike_swiftly_ingest_main", "callee": "len", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L86"}, {"caller_nid": "spike_swiftly_ingest_main", "callee": "print", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L88"}, {"caller_nid": "spike_swiftly_ingest_main", "callee": "str", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L91"}, {"caller_nid": "spike_swiftly_ingest_main", "callee": "items", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L91"}, {"caller_nid": "spike_swiftly_ingest_main", "callee": "print", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L92"}, {"caller_nid": "spike_swiftly_ingest_main", "callee": "dumps", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L92"}, {"caller_nid": "spike_swiftly_ingest_main", "callee": "print", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L93"}, {"caller_nid": "spike_swiftly_ingest_main", "callee": "cleanup", "source_file": "scripts/spike_swiftly_ingest.py", "source_location": "L97"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/5e02e552e70d06542d94b45c987f81dd588adbd6f213f40b808c09d3965012ac.json b/graphify-out/cache/5e02e552e70d06542d94b45c987f81dd588adbd6f213f40b808c09d3965012ac.json
deleted file mode 100644
index bded1b9..0000000
--- a/graphify-out/cache/5e02e552e70d06542d94b45c987f81dd588adbd6f213f40b808c09d3965012ac.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "frontend_src_components_errorboundary_tsx", "label": "ErrorBoundary.tsx", "file_type": "code", "source_file": "frontend/src/components/ErrorBoundary.tsx", "source_location": "L1"}, {"id": "errorboundary_getderivedstatefromerror", "label": "getDerivedStateFromError()", "file_type": "code", "source_file": "frontend/src/components/ErrorBoundary.tsx", "source_location": "L19"}, {"id": "errorboundary_componentdidcatch", "label": "componentDidCatch()", "file_type": "code", "source_file": "frontend/src/components/ErrorBoundary.tsx", "source_location": "L23"}], "edges": [{"source": "frontend_src_components_errorboundary_tsx", "target": "react", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/components/ErrorBoundary.tsx", "source_location": "L1", "weight": 1.0}, {"source": "frontend_src_components_errorboundary_tsx", "target": "lucide_react", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/components/ErrorBoundary.tsx", "source_location": "L2", "weight": 1.0}, {"source": "frontend_src_components_errorboundary_tsx", "target": "frontend_src_components_ui_button", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/components/ErrorBoundary.tsx", "source_location": "L3", "weight": 1.0}, {"source": "frontend_src_components_errorboundary_tsx", "target": "errorboundary_getderivedstatefromerror", "relation": "contains", "confidence": "EXTRACTED", "source_file": "frontend/src/components/ErrorBoundary.tsx", "source_location": "L19", "weight": 1.0}, {"source": "frontend_src_components_errorboundary_tsx", "target": "errorboundary_componentdidcatch", "relation": "contains", "confidence": "EXTRACTED", "source_file": "frontend/src/components/ErrorBoundary.tsx", "source_location": "L23", "weight": 1.0}], "raw_calls": [{"caller_nid": "errorboundary_componentdidcatch", "callee": "error", "source_file": "frontend/src/components/ErrorBoundary.tsx", "source_location": "L24"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/5fbeab8b2ad089a62f78074430bf248b263f31e9cb12f9c7c84720de57017da6.json b/graphify-out/cache/5fbeab8b2ad089a62f78074430bf248b263f31e9cb12f9c7c84720de57017da6.json
deleted file mode 100644
index c2f2b5b..0000000
--- a/graphify-out/cache/5fbeab8b2ad089a62f78074430bf248b263f31e9cb12f9c7c84720de57017da6.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "frontend_src_components_ui_button_tsx", "label": "Button.tsx", "file_type": "code", "source_file": "frontend/src/components/ui/Button.tsx", "source_location": "L1"}, {"id": "button_button", "label": "Button()", "file_type": "code", "source_file": "frontend/src/components/ui/Button.tsx", "source_location": "L11"}], "edges": [{"source": "frontend_src_components_ui_button_tsx", "target": "lucide_react", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/components/ui/Button.tsx", "source_location": "L1", "weight": 1.0}, {"source": "frontend_src_components_ui_button_tsx", "target": "react", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/components/ui/Button.tsx", "source_location": "L2", "weight": 1.0}, {"source": "frontend_src_components_ui_button_tsx", "target": "button_button", "relation": "contains", "confidence": "EXTRACTED", "source_file": "frontend/src/components/ui/Button.tsx", "source_location": "L11", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/graphify-out/cache/6270ba97cf1cb2bdb7d525beecf19c76f81190da4b635131df2f98710c452427.json b/graphify-out/cache/6270ba97cf1cb2bdb7d525beecf19c76f81190da4b635131df2f98710c452427.json
deleted file mode 100644
index 9bef805..0000000
--- a/graphify-out/cache/6270ba97cf1cb2bdb7d525beecf19c76f81190da4b635131df2f98710c452427.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_tests_test_planner_select_py", "label": "test_planner_select.py", "file_type": "code", "source_file": "backend/tests/test_planner_select.py", "source_location": "L1"}, {"id": "test_planner_select_mk", "label": "_mk()", "file_type": "code", "source_file": "backend/tests/test_planner_select.py", "source_location": "L12"}, {"id": "test_planner_select_test_diversity_penalty_zero_when_all_unique", "label": "test_diversity_penalty_zero_when_all_unique()", "file_type": "code", "source_file": "backend/tests/test_planner_select.py", "source_location": "L33"}, {"id": "test_planner_select_test_diversity_penalty_three_chickens", "label": "test_diversity_penalty_three_chickens()", "file_type": "code", "source_file": "backend/tests/test_planner_select.py", "source_location": "L40"}, {"id": "test_planner_select_test_select_set_picks_diverse_over_homogeneous", "label": "test_select_set_picks_diverse_over_homogeneous()", "file_type": "code", "source_file": "backend/tests/test_planner_select.py", "source_location": "L49"}, {"id": "test_planner_select_test_select_set_handles_too_few", "label": "test_select_set_handles_too_few()", "file_type": "code", "source_file": "backend/tests/test_planner_select.py", "source_location": "L68"}, {"id": "test_planner_select_test_select_set_empty_input", "label": "test_select_set_empty_input()", "file_type": "code", "source_file": "backend/tests/test_planner_select.py", "source_location": "L75"}, {"id": "test_planner_select_rationale_50", "label": "Three chicken/american (each 0.95) lose to fully-diverse mixed (each 0.90) o", "file_type": "rationale", "source_file": "backend/tests/test_planner_select.py", "source_location": "L50"}], "edges": [{"source": "backend_tests_test_planner_select_py", "target": "decimal", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_select.py", "source_location": "L1", "weight": 1.0}, {"source": "backend_tests_test_planner_select_py", "target": "uuid", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_select.py", "source_location": "L2", "weight": 1.0}, {"source": "backend_tests_test_planner_select_py", "target": "app_services_planner_config", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_select.py", "source_location": "L4", "weight": 1.0}, {"source": "backend_tests_test_planner_select_py", "target": "app_services_planner_select", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_select.py", "source_location": "L5", "weight": 1.0}, {"source": "backend_tests_test_planner_select_py", "target": "app_services_planner_types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_select.py", "source_location": "L6", "weight": 1.0}, {"source": "backend_tests_test_planner_select_py", "target": "test_planner_select_mk", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_select.py", "source_location": "L12", "weight": 1.0}, {"source": "backend_tests_test_planner_select_py", "target": "test_planner_select_test_diversity_penalty_zero_when_all_unique", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_select.py", "source_location": "L33", "weight": 1.0}, {"source": "backend_tests_test_planner_select_py", "target": "test_planner_select_test_diversity_penalty_three_chickens", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_select.py", "source_location": "L40", "weight": 1.0}, {"source": "backend_tests_test_planner_select_py", "target": "test_planner_select_test_select_set_picks_diverse_over_homogeneous", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_select.py", "source_location": "L49", "weight": 1.0}, {"source": "backend_tests_test_planner_select_py", "target": "test_planner_select_test_select_set_handles_too_few", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_select.py", "source_location": "L68", "weight": 1.0}, {"source": "backend_tests_test_planner_select_py", "target": "test_planner_select_test_select_set_empty_input", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_select.py", "source_location": "L75", "weight": 1.0}, {"source": "test_planner_select_test_diversity_penalty_zero_when_all_unique", "target": "test_planner_select_mk", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_select.py", "source_location": "L34", "weight": 1.0}, {"source": "test_planner_select_test_diversity_penalty_three_chickens", "target": "test_planner_select_mk", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_select.py", "source_location": "L41", "weight": 1.0}, {"source": "test_planner_select_test_select_set_picks_diverse_over_homogeneous", "target": "test_planner_select_mk", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_select.py", "source_location": "L56", "weight": 1.0}, {"source": "test_planner_select_test_select_set_handles_too_few", "target": "test_planner_select_mk", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_select.py", "source_location": "L69", "weight": 1.0}, {"source": "test_planner_select_rationale_50", "target": "test_planner_select_test_select_set_picks_diverse_over_homogeneous", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_select.py", "source_location": "L50", "weight": 1.0}], "raw_calls": [{"caller_nid": "test_planner_select_mk", "callee": "uuid4", "source_file": "backend/tests/test_planner_select.py", "source_location": "L13"}, {"caller_nid": "test_planner_select_mk", "callee": "ScoredRecipe", "source_file": "backend/tests/test_planner_select.py", "source_location": "L14"}, {"caller_nid": "test_planner_select_mk", "callee": "RecipeCost", "source_file": "backend/tests/test_planner_select.py", "source_location": "L18"}, {"caller_nid": "test_planner_select_mk", "callee": "Decimal", "source_file": "backend/tests/test_planner_select.py", "source_location": "L20"}, {"caller_nid": "test_planner_select_mk", "callee": "Decimal", "source_file": "backend/tests/test_planner_select.py", "source_location": "L21"}, {"caller_nid": "test_planner_select_test_diversity_penalty_zero_when_all_unique", "callee": "set_diversity_penalty", "source_file": "backend/tests/test_planner_select.py", "source_location": "L37"}, {"caller_nid": "test_planner_select_test_diversity_penalty_three_chickens", "callee": "set_diversity_penalty", "source_file": "backend/tests/test_planner_select.py", "source_location": "L45"}, {"caller_nid": "test_planner_select_test_diversity_penalty_three_chickens", "callee": "abs", "source_file": "backend/tests/test_planner_select.py", "source_location": "L46"}, {"caller_nid": "test_planner_select_test_select_set_picks_diverse_over_homogeneous", "callee": "select_set", "source_file": "backend/tests/test_planner_select.py", "source_location": "L63"}, {"caller_nid": "test_planner_select_test_select_set_handles_too_few", "callee": "select_set", "source_file": "backend/tests/test_planner_select.py", "source_location": "L71"}, {"caller_nid": "test_planner_select_test_select_set_handles_too_few", "callee": "len", "source_file": "backend/tests/test_planner_select.py", "source_location": "L72"}, {"caller_nid": "test_planner_select_test_select_set_empty_input", "callee": "select_set", "source_file": "backend/tests/test_planner_select.py", "source_location": "L76"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/665ac143ecce337abdde84a6484a323f0b9b8f2157ba14cc3e6f1a6a0b495a81.json b/graphify-out/cache/665ac143ecce337abdde84a6484a323f0b9b8f2157ba14cc3e6f1a6a0b495a81.json
deleted file mode 100644
index ede7dda..0000000
--- a/graphify-out/cache/665ac143ecce337abdde84a6484a323f0b9b8f2157ba14cc3e6f1a6a0b495a81.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_api_pantry_py", "label": "pantry.py", "file_type": "code", "source_file": "backend/app/api/pantry.py", "source_location": "L1"}, {"id": "pantry_get_pantry_items", "label": "get_pantry_items()", "file_type": "code", "source_file": "backend/app/api/pantry.py", "source_location": "L14"}, {"id": "pantry_add_pantry_item", "label": "add_pantry_item()", "file_type": "code", "source_file": "backend/app/api/pantry.py", "source_location": "L26"}, {"id": "pantry_remove_pantry_item", "label": "remove_pantry_item()", "file_type": "code", "source_file": "backend/app/api/pantry.py", "source_location": "L59"}, {"id": "pantry_update_pantry_item", "label": "update_pantry_item()", "file_type": "code", "source_file": "backend/app/api/pantry.py", "source_location": "L70"}], "edges": [{"source": "backend_app_api_pantry_py", "target": "fastapi", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/pantry.py", "source_location": "L1", "weight": 1.0}, {"source": "backend_app_api_pantry_py", "target": "sqlalchemy_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/pantry.py", "source_location": "L2", "weight": 1.0}, {"source": "backend_app_api_pantry_py", "target": "app_database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/pantry.py", "source_location": "L3", "weight": 1.0}, {"source": "backend_app_api_pantry_py", "target": "app_models", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/pantry.py", "source_location": "L4", "weight": 1.0}, {"source": "backend_app_api_pantry_py", "target": "app_schemas", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/pantry.py", "source_location": "L5", "weight": 1.0}, {"source": "backend_app_api_pantry_py", "target": "app_security", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/pantry.py", "source_location": "L6", "weight": 1.0}, {"source": "backend_app_api_pantry_py", "target": "uuid", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/pantry.py", "source_location": "L7", "weight": 1.0}, {"source": "backend_app_api_pantry_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/pantry.py", "source_location": "L8", "weight": 1.0}, {"source": "backend_app_api_pantry_py", "target": "pantry_get_pantry_items", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/pantry.py", "source_location": "L14", "weight": 1.0}, {"source": "backend_app_api_pantry_py", "target": "pantry_add_pantry_item", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/pantry.py", "source_location": "L26", "weight": 1.0}, {"source": "backend_app_api_pantry_py", "target": "pantry_remove_pantry_item", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/pantry.py", "source_location": "L59", "weight": 1.0}, {"source": "backend_app_api_pantry_py", "target": "pantry_update_pantry_item", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/pantry.py", "source_location": "L70", "weight": 1.0}], "raw_calls": [{"caller_nid": "pantry_get_pantry_items", "callee": "first", "source_file": "backend/app/api/pantry.py", "source_location": "L15"}, {"caller_nid": "pantry_get_pantry_items", "callee": "query", "source_file": "backend/app/api/pantry.py", "source_location": "L15"}, {"caller_nid": "pantry_get_pantry_items", "callee": "HTTPException", "source_file": "backend/app/api/pantry.py", "source_location": "L17"}, {"caller_nid": "pantry_get_pantry_items", "callee": "all", "source_file": "backend/app/api/pantry.py", "source_location": "L19"}, {"caller_nid": "pantry_get_pantry_items", "callee": "filter", "source_file": "backend/app/api/pantry.py", "source_location": "L19"}, {"caller_nid": "pantry_get_pantry_items", "callee": "query", "source_file": "backend/app/api/pantry.py", "source_location": "L19"}, {"caller_nid": "pantry_add_pantry_item", "callee": "first", "source_file": "backend/app/api/pantry.py", "source_location": "L27"}, {"caller_nid": "pantry_add_pantry_item", "callee": "query", "source_file": "backend/app/api/pantry.py", "source_location": "L27"}, {"caller_nid": "pantry_add_pantry_item", "callee": "HTTPException", "source_file": "backend/app/api/pantry.py", "source_location": "L29"}, {"caller_nid": "pantry_add_pantry_item", "callee": "first", "source_file": "backend/app/api/pantry.py", "source_location": "L31"}, {"caller_nid": "pantry_add_pantry_item", "callee": "filter", "source_file": "backend/app/api/pantry.py", "source_location": "L31"}, {"caller_nid": "pantry_add_pantry_item", "callee": "query", "source_file": "backend/app/api/pantry.py", "source_location": "L31"}, {"caller_nid": "pantry_add_pantry_item", "callee": "commit", "source_file": "backend/app/api/pantry.py", "source_location": "L40"}, {"caller_nid": "pantry_add_pantry_item", "callee": "refresh", "source_file": "backend/app/api/pantry.py", "source_location": "L41"}, {"caller_nid": "pantry_add_pantry_item", "callee": "HomePantry", "source_file": "backend/app/api/pantry.py", "source_location": "L44"}, {"caller_nid": "pantry_add_pantry_item", "callee": "add", "source_file": "backend/app/api/pantry.py", "source_location": "L52"}, {"caller_nid": "pantry_add_pantry_item", "callee": "commit", "source_file": "backend/app/api/pantry.py", "source_location": "L53"}, {"caller_nid": "pantry_add_pantry_item", "callee": "refresh", "source_file": "backend/app/api/pantry.py", "source_location": "L54"}, {"caller_nid": "pantry_remove_pantry_item", "callee": "first", "source_file": "backend/app/api/pantry.py", "source_location": "L60"}, {"caller_nid": "pantry_remove_pantry_item", "callee": "filter", "source_file": "backend/app/api/pantry.py", "source_location": "L60"}, {"caller_nid": "pantry_remove_pantry_item", "callee": "query", "source_file": "backend/app/api/pantry.py", "source_location": "L60"}, {"caller_nid": "pantry_remove_pantry_item", "callee": "HTTPException", "source_file": "backend/app/api/pantry.py", "source_location": "L62"}, {"caller_nid": "pantry_remove_pantry_item", "callee": "delete", "source_file": "backend/app/api/pantry.py", "source_location": "L64"}, {"caller_nid": "pantry_remove_pantry_item", "callee": "commit", "source_file": "backend/app/api/pantry.py", "source_location": "L65"}, {"caller_nid": "pantry_update_pantry_item", "callee": "first", "source_file": "backend/app/api/pantry.py", "source_location": "L71"}, {"caller_nid": "pantry_update_pantry_item", "callee": "filter", "source_file": "backend/app/api/pantry.py", "source_location": "L71"}, {"caller_nid": "pantry_update_pantry_item", "callee": "query", "source_file": "backend/app/api/pantry.py", "source_location": "L71"}, {"caller_nid": "pantry_update_pantry_item", "callee": "HTTPException", "source_file": "backend/app/api/pantry.py", "source_location": "L73"}, {"caller_nid": "pantry_update_pantry_item", "callee": "commit", "source_file": "backend/app/api/pantry.py", "source_location": "L80"}, {"caller_nid": "pantry_update_pantry_item", "callee": "refresh", "source_file": "backend/app/api/pantry.py", "source_location": "L81"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/67942cf3d45d008fdd4f0c7267196dee79f9ade6a52797e204402ae150013089.json b/graphify-out/cache/67942cf3d45d008fdd4f0c7267196dee79f9ade6a52797e204402ae150013089.json
deleted file mode 100644
index 897425d..0000000
--- a/graphify-out/cache/67942cf3d45d008fdd4f0c7267196dee79f9ade6a52797e204402ae150013089.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_alembic_versions_0004_family_profile_calorie_target_py", "label": "0004_family_profile_calorie_target.py", "file_type": "code", "source_file": "backend/alembic/versions/0004_family_profile_calorie_target.py", "source_location": "L1"}, {"id": "0004_family_profile_calorie_target_upgrade", "label": "upgrade()", "file_type": "code", "source_file": "backend/alembic/versions/0004_family_profile_calorie_target.py", "source_location": "L22"}, {"id": "0004_family_profile_calorie_target_downgrade", "label": "downgrade()", "file_type": "code", "source_file": "backend/alembic/versions/0004_family_profile_calorie_target.py", "source_location": "L29"}, {"id": "0004_family_profile_calorie_target_rationale_1", "label": "Add calorie_target to family_profile Revision ID: 0004 Revises: 0003 Create Dat", "file_type": "rationale", "source_file": "backend/alembic/versions/0004_family_profile_calorie_target.py", "source_location": "L1"}], "edges": [{"source": "backend_alembic_versions_0004_family_profile_calorie_target_py", "target": "alembic", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0004_family_profile_calorie_target.py", "source_location": "L12", "weight": 1.0}, {"source": "backend_alembic_versions_0004_family_profile_calorie_target_py", "target": "sqlalchemy", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0004_family_profile_calorie_target.py", "source_location": "L13", "weight": 1.0}, {"source": "backend_alembic_versions_0004_family_profile_calorie_target_py", "target": "0004_family_profile_calorie_target_upgrade", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0004_family_profile_calorie_target.py", "source_location": "L22", "weight": 1.0}, {"source": "backend_alembic_versions_0004_family_profile_calorie_target_py", "target": "0004_family_profile_calorie_target_downgrade", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0004_family_profile_calorie_target.py", "source_location": "L29", "weight": 1.0}, {"source": "0004_family_profile_calorie_target_rationale_1", "target": "backend_alembic_versions_0004_family_profile_calorie_target_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0004_family_profile_calorie_target.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "0004_family_profile_calorie_target_upgrade", "callee": "add_column", "source_file": "backend/alembic/versions/0004_family_profile_calorie_target.py", "source_location": "L23"}, {"caller_nid": "0004_family_profile_calorie_target_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0004_family_profile_calorie_target.py", "source_location": "L25"}, {"caller_nid": "0004_family_profile_calorie_target_upgrade", "callee": "Integer", "source_file": "backend/alembic/versions/0004_family_profile_calorie_target.py", "source_location": "L25"}, {"caller_nid": "0004_family_profile_calorie_target_downgrade", "callee": "drop_column", "source_file": "backend/alembic/versions/0004_family_profile_calorie_target.py", "source_location": "L30"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/6bad421de5ee31757cabb924bc3d254a0e4b9422bc7502870a923cf2b3e644c1.json b/graphify-out/cache/6bad421de5ee31757cabb924bc3d254a0e4b9422bc7502870a923cf2b3e644c1.json
deleted file mode 100644
index 3ad8521..0000000
--- a/graphify-out/cache/6bad421de5ee31757cabb924bc3d254a0e4b9422bc7502870a923cf2b3e644c1.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "frontend_src_pages_pantry_tsx", "label": "Pantry.tsx", "file_type": "code", "source_file": "frontend/src/pages/Pantry.tsx", "source_location": "L1"}, {"id": "pantry_handleadd", "label": "handleAdd()", "file_type": "code", "source_file": "frontend/src/pages/Pantry.tsx", "source_location": "L59"}], "edges": [{"source": "frontend_src_pages_pantry_tsx", "target": "react", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/Pantry.tsx", "source_location": "L1", "weight": 1.0}, {"source": "frontend_src_pages_pantry_tsx", "target": "react_query", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/Pantry.tsx", "source_location": "L2", "weight": 1.0}, {"source": "frontend_src_pages_pantry_tsx", "target": "lucide_react", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/Pantry.tsx", "source_location": "L3", "weight": 1.0}, {"source": "frontend_src_pages_pantry_tsx", "target": "frontend_src_pages_api", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/Pantry.tsx", "source_location": "L4", "weight": 1.0}, {"source": "frontend_src_pages_pantry_tsx", "target": "frontend_src_pages_types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/Pantry.tsx", "source_location": "L5", "weight": 1.0}, {"source": "frontend_src_pages_pantry_tsx", "target": "frontend_src_pages_components_ui_button", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/Pantry.tsx", "source_location": "L6", "weight": 1.0}, {"source": "frontend_src_pages_pantry_tsx", "target": "frontend_src_pages_components_ui_card", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/Pantry.tsx", "source_location": "L7", "weight": 1.0}, {"source": "frontend_src_pages_pantry_tsx", "target": "frontend_src_pages_components_ui_input", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/Pantry.tsx", "source_location": "L8", "weight": 1.0}, {"source": "frontend_src_pages_pantry_tsx", "target": "frontend_src_pages_components_ui_select", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/Pantry.tsx", "source_location": "L9", "weight": 1.0}, {"source": "frontend_src_pages_pantry_tsx", "target": "frontend_src_pages_components_ui_skeleton", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/Pantry.tsx", "source_location": "L10", "weight": 1.0}, {"source": "frontend_src_pages_pantry_tsx", "target": "frontend_src_pages_components_ui_emptystate", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/Pantry.tsx", "source_location": "L11", "weight": 1.0}, {"source": "frontend_src_pages_pantry_tsx", "target": "frontend_src_pages_lib_toast", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/Pantry.tsx", "source_location": "L12", "weight": 1.0}, {"source": "frontend_src_pages_pantry_tsx", "target": "pantry_handleadd", "relation": "contains", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/Pantry.tsx", "source_location": "L59", "weight": 1.0}], "raw_calls": [{"caller_nid": "pantry_handleadd", "callee": "mutate", "source_file": "frontend/src/pages/Pantry.tsx", "source_location": "L61"}, {"caller_nid": "pantry_handleadd", "callee": "parseFloat", "source_file": "frontend/src/pages/Pantry.tsx", "source_location": "L63"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/6f1e764871c5814ff8e463c1a46484127d81d5d0d11baa2776d4137bd3f49210.json b/graphify-out/cache/6f1e764871c5814ff8e463c1a46484127d81d5d0d11baa2776d4137bd3f49210.json
deleted file mode 100644
index 4d1b3c2..0000000
--- a/graphify-out/cache/6f1e764871c5814ff8e463c1a46484127d81d5d0d11baa2776d4137bd3f49210.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_services_orchestrator_alerts_py", "label": "alerts.py", "file_type": "code", "source_file": "backend/app/services/orchestrator/alerts.py", "source_location": "L1"}, {"id": "alerts_send_admin_alert", "label": "send_admin_alert()", "file_type": "code", "source_file": "backend/app/services/orchestrator/alerts.py", "source_location": "L9"}], "edges": [{"source": "backend_app_services_orchestrator_alerts_py", "target": "logging", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/app/services/orchestrator/alerts.py", "source_location": "L1", "weight": 1.0}, {"source": "backend_app_services_orchestrator_alerts_py", "target": "app_config", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/orchestrator/alerts.py", "source_location": "L3", "weight": 1.0}, {"source": "backend_app_services_orchestrator_alerts_py", "target": "app_services_email", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/orchestrator/alerts.py", "source_location": "L4", "weight": 1.0}, {"source": "backend_app_services_orchestrator_alerts_py", "target": "alerts_send_admin_alert", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/orchestrator/alerts.py", "source_location": "L9", "weight": 1.0}], "raw_calls": [{"caller_nid": "alerts_send_admin_alert", "callee": "warning", "source_file": "backend/app/services/orchestrator/alerts.py", "source_location": "L11"}, {"caller_nid": "alerts_send_admin_alert", "callee": "send", "source_file": "backend/app/services/orchestrator/alerts.py", "source_location": "L14"}, {"caller_nid": "alerts_send_admin_alert", "callee": "get_email_backend", "source_file": "backend/app/services/orchestrator/alerts.py", "source_location": "L14"}, {"caller_nid": "alerts_send_admin_alert", "callee": "exception", "source_file": "backend/app/services/orchestrator/alerts.py", "source_location": "L21"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/70602a52079a41ae620b42c1e8746f04002fe855f8984d33cac8c0fc22f880e4.json b/graphify-out/cache/70602a52079a41ae620b42c1e8746f04002fe855f8984d33cac8c0fc22f880e4.json
deleted file mode 100644
index 1fc3617..0000000
--- a/graphify-out/cache/70602a52079a41ae620b42c1e8746f04002fe855f8984d33cac8c0fc22f880e4.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "frontend_src_components_ui_emptystate_tsx", "label": "EmptyState.tsx", "file_type": "code", "source_file": "frontend/src/components/ui/EmptyState.tsx", "source_location": "L1"}], "edges": [{"source": "frontend_src_components_ui_emptystate_tsx", "target": "lucide_react", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/components/ui/EmptyState.tsx", "source_location": "L1", "weight": 1.0}, {"source": "frontend_src_components_ui_emptystate_tsx", "target": "frontend_src_components_ui_button", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/components/ui/EmptyState.tsx", "source_location": "L2", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/graphify-out/cache/750edc9043a18f04858001e5e414025633c09fd91d924ca833df3e246e6e721a.json b/graphify-out/cache/750edc9043a18f04858001e5e414025633c09fd91d924ca833df3e246e6e721a.json
deleted file mode 100644
index 58cbc36..0000000
--- a/graphify-out/cache/750edc9043a18f04858001e5e414025633c09fd91d924ca833df3e246e6e721a.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_alembic_versions_0003_grocery_item_description_py", "label": "0003_grocery_item_description.py", "file_type": "code", "source_file": "backend/alembic/versions/0003_grocery_item_description.py", "source_location": "L1"}, {"id": "0003_grocery_item_description_upgrade", "label": "upgrade()", "file_type": "code", "source_file": "backend/alembic/versions/0003_grocery_item_description.py", "source_location": "L24"}, {"id": "0003_grocery_item_description_downgrade", "label": "downgrade()", "file_type": "code", "source_file": "backend/alembic/versions/0003_grocery_item_description.py", "source_location": "L31"}, {"id": "0003_grocery_item_description_rationale_1", "label": "Add nullable description column to grocery_item. The Lucky California parser pr", "file_type": "rationale", "source_file": "backend/alembic/versions/0003_grocery_item_description.py", "source_location": "L1"}], "edges": [{"source": "backend_alembic_versions_0003_grocery_item_description_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0003_grocery_item_description.py", "source_location": "L12", "weight": 1.0}, {"source": "backend_alembic_versions_0003_grocery_item_description_py", "target": "alembic", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0003_grocery_item_description.py", "source_location": "L14", "weight": 1.0}, {"source": "backend_alembic_versions_0003_grocery_item_description_py", "target": "sqlalchemy", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0003_grocery_item_description.py", "source_location": "L15", "weight": 1.0}, {"source": "backend_alembic_versions_0003_grocery_item_description_py", "target": "0003_grocery_item_description_upgrade", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0003_grocery_item_description.py", "source_location": "L24", "weight": 1.0}, {"source": "backend_alembic_versions_0003_grocery_item_description_py", "target": "0003_grocery_item_description_downgrade", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0003_grocery_item_description.py", "source_location": "L31", "weight": 1.0}, {"source": "0003_grocery_item_description_rationale_1", "target": "backend_alembic_versions_0003_grocery_item_description_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0003_grocery_item_description.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "0003_grocery_item_description_upgrade", "callee": "add_column", "source_file": "backend/alembic/versions/0003_grocery_item_description.py", "source_location": "L25"}, {"caller_nid": "0003_grocery_item_description_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0003_grocery_item_description.py", "source_location": "L27"}, {"caller_nid": "0003_grocery_item_description_upgrade", "callee": "Text", "source_file": "backend/alembic/versions/0003_grocery_item_description.py", "source_location": "L27"}, {"caller_nid": "0003_grocery_item_description_downgrade", "callee": "drop_column", "source_file": "backend/alembic/versions/0003_grocery_item_description.py", "source_location": "L32"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/7881dd7e3031c0feea8b4d7f9f58c6965b978de70dddad6ae69877ac3f9213d3.json b/graphify-out/cache/7881dd7e3031c0feea8b4d7f9f58c6965b978de70dddad6ae69877ac3f9213d3.json
deleted file mode 100644
index 9d9ff43..0000000
--- a/graphify-out/cache/7881dd7e3031c0feea8b4d7f9f58c6965b978de70dddad6ae69877ac3f9213d3.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_scraper_init_py", "label": "__init__.py", "file_type": "code", "source_file": "backend/app/scraper/__init__.py", "source_location": "L1"}], "edges": [{"source": "backend_app_scraper_init_py", "target": "backend_app_scraper_base_py", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/__init__.py", "source_location": "L1", "weight": 1.0}, {"source": "backend_app_scraper_init_py", "target": "backend_app_scraper_lucky_ca_scraper_py", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/__init__.py", "source_location": "L2", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/graphify-out/cache/7afecc851c51f4a2aa397c1f345b5ccb9cff435f3ec72110d5805a1644b4ceb3.json b/graphify-out/cache/7afecc851c51f4a2aa397c1f345b5ccb9cff435f3ec72110d5805a1644b4ceb3.json
deleted file mode 100644
index 91a3ddd..0000000
--- a/graphify-out/cache/7afecc851c51f4a2aa397c1f345b5ccb9cff435f3ec72110d5805a1644b4ceb3.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_scraper_base_py", "label": "base.py", "file_type": "code", "source_file": "backend/app/scraper/base.py", "source_location": "L1"}, {"id": "base_basescraper", "label": "BaseScraper", "file_type": "code", "source_file": "backend/app/scraper/base.py", "source_location": "L14"}, {"id": "abc", "label": "ABC", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "base_basescraper_init", "label": ".__init__()", "file_type": "code", "source_file": "backend/app/scraper/base.py", "source_location": "L15"}, {"id": "base_basescraper_create_session", "label": "._create_session()", "file_type": "code", "source_file": "backend/app/scraper/base.py", "source_location": "L29"}, {"id": "base_basescraper_rate_limit", "label": "._rate_limit()", "file_type": "code", "source_file": "backend/app/scraper/base.py", "source_location": "L51"}, {"id": "base_basescraper_get", "label": "._get()", "file_type": "code", "source_file": "backend/app/scraper/base.py", "source_location": "L59"}, {"id": "base_basescraper_post", "label": "._post()", "file_type": "code", "source_file": "backend/app/scraper/base.py", "source_location": "L80"}, {"id": "base_scrape", "label": "scrape()", "file_type": "code", "source_file": "backend/app/scraper/base.py", "source_location": "L102"}, {"id": "base_basescraper_log_scrape", "label": ".log_scrape()", "file_type": "code", "source_file": "backend/app/scraper/base.py", "source_location": "L105"}, {"id": "base_seleniumscraper", "label": "SeleniumScraper", "file_type": "code", "source_file": "backend/app/scraper/base.py", "source_location": "L109"}, {"id": "base_seleniumscraper_init", "label": ".__init__()", "file_type": "code", "source_file": "backend/app/scraper/base.py", "source_location": "L110"}, {"id": "base_seleniumscraper_init_playwright", "label": "._init_playwright()", "file_type": "code", "source_file": "backend/app/scraper/base.py", "source_location": "L114"}, {"id": "base_seleniumscraper_get_playwright", "label": "._get_playwright()", "file_type": "code", "source_file": "backend/app/scraper/base.py", "source_location": "L123"}, {"id": "base_seleniumscraper_get_browser_page", "label": ".get_browser_page()", "file_type": "code", "source_file": "backend/app/scraper/base.py", "source_location": "L127"}, {"id": "base_seleniumscraper_cleanup", "label": ".cleanup()", "file_type": "code", "source_file": "backend/app/scraper/base.py", "source_location": "L133"}], "edges": [{"source": "backend_app_scraper_base_py", "target": "time", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/base.py", "source_location": "L1", "weight": 1.0}, {"source": "backend_app_scraper_base_py", "target": "logging", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/base.py", "source_location": "L2", "weight": 1.0}, {"source": "backend_app_scraper_base_py", "target": "abc", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/base.py", "source_location": "L3", "weight": 1.0}, {"source": "backend_app_scraper_base_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/base.py", "source_location": "L4", "weight": 1.0}, {"source": "backend_app_scraper_base_py", "target": "datetime", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/base.py", "source_location": "L5", "weight": 1.0}, {"source": "backend_app_scraper_base_py", "target": "urllib_parse", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/base.py", "source_location": "L6", "weight": 1.0}, {"source": "backend_app_scraper_base_py", "target": "requests", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/base.py", "source_location": "L7", "weight": 1.0}, {"source": "backend_app_scraper_base_py", "target": "requests_adapters", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/base.py", "source_location": "L8", "weight": 1.0}, {"source": "backend_app_scraper_base_py", "target": "urllib3_util_retry", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/base.py", "source_location": "L9", "weight": 1.0}, {"source": "backend_app_scraper_base_py", "target": "base_basescraper", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/base.py", "source_location": "L14", "weight": 1.0}, {"source": "base_basescraper", "target": "abc", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/base.py", "source_location": "L14", "weight": 1.0}, {"source": "base_basescraper", "target": "base_basescraper_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/base.py", "source_location": "L15", "weight": 1.0}, {"source": "base_basescraper", "target": "base_basescraper_create_session", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/base.py", "source_location": "L29", "weight": 1.0}, {"source": "base_basescraper", "target": "base_basescraper_rate_limit", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/base.py", "source_location": "L51", "weight": 1.0}, {"source": "base_basescraper", "target": "base_basescraper_get", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/base.py", "source_location": "L59", "weight": 1.0}, {"source": "base_basescraper", "target": "base_basescraper_post", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/base.py", "source_location": "L80", "weight": 1.0}, {"source": "backend_app_scraper_base_py", "target": "base_scrape", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/base.py", "source_location": "L102", "weight": 1.0}, {"source": "base_basescraper", "target": "base_basescraper_log_scrape", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/base.py", "source_location": "L105", "weight": 1.0}, {"source": "backend_app_scraper_base_py", "target": "base_seleniumscraper", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/base.py", "source_location": "L109", "weight": 1.0}, {"source": "base_seleniumscraper", "target": "base_basescraper", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/base.py", "source_location": "L109", "weight": 1.0}, {"source": "base_seleniumscraper", "target": "base_seleniumscraper_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/base.py", "source_location": "L110", "weight": 1.0}, {"source": "base_seleniumscraper", "target": "base_seleniumscraper_init_playwright", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/base.py", "source_location": "L114", "weight": 1.0}, {"source": "base_seleniumscraper", "target": "base_seleniumscraper_get_playwright", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/base.py", "source_location": "L123", "weight": 1.0}, {"source": "base_seleniumscraper", "target": "base_seleniumscraper_get_browser_page", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/base.py", "source_location": "L127", "weight": 1.0}, {"source": "base_seleniumscraper", "target": "base_seleniumscraper_cleanup", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/base.py", "source_location": "L133", "weight": 1.0}, {"source": "base_basescraper_init", "target": "base_basescraper_create_session", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/base.py", "source_location": "L27", "weight": 1.0}, {"source": "base_basescraper_get", "target": "base_basescraper_rate_limit", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/base.py", "source_location": "L60", "weight": 1.0}, {"source": "base_basescraper_post", "target": "base_basescraper_rate_limit", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/base.py", "source_location": "L81", "weight": 1.0}, {"source": "base_seleniumscraper_get_playwright", "target": "base_seleniumscraper_init_playwright", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/base.py", "source_location": "L124", "weight": 1.0}, {"source": "base_seleniumscraper_get_browser_page", "target": "base_seleniumscraper_get_playwright", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/base.py", "source_location": "L128", "weight": 1.0}], "raw_calls": [{"caller_nid": "base_basescraper_init", "callee": "rstrip", "source_file": "backend/app/scraper/base.py", "source_location": "L22"}, {"caller_nid": "base_basescraper_create_session", "callee": "Session", "source_file": "backend/app/scraper/base.py", "source_location": "L30"}, {"caller_nid": "base_basescraper_create_session", "callee": "Retry", "source_file": "backend/app/scraper/base.py", "source_location": "L32"}, {"caller_nid": "base_basescraper_create_session", "callee": "HTTPAdapter", "source_file": "backend/app/scraper/base.py", "source_location": "L39"}, {"caller_nid": "base_basescraper_create_session", "callee": "mount", "source_file": "backend/app/scraper/base.py", "source_location": "L40"}, {"caller_nid": "base_basescraper_create_session", "callee": "mount", "source_file": "backend/app/scraper/base.py", "source_location": "L41"}, {"caller_nid": "base_basescraper_create_session", "callee": "update", "source_file": "backend/app/scraper/base.py", "source_location": "L43"}, {"caller_nid": "base_basescraper_rate_limit", "callee": "time", "source_file": "backend/app/scraper/base.py", "source_location": "L52"}, {"caller_nid": "base_basescraper_rate_limit", "callee": "debug", "source_file": "backend/app/scraper/base.py", "source_location": "L55"}, {"caller_nid": "base_basescraper_rate_limit", "callee": "sleep", "source_file": "backend/app/scraper/base.py", "source_location": "L56"}, {"caller_nid": "base_basescraper_rate_limit", "callee": "time", "source_file": "backend/app/scraper/base.py", "source_location": "L57"}, {"caller_nid": "base_basescraper_get", "callee": "startswith", "source_file": "backend/app/scraper/base.py", "source_location": "L62"}, {"caller_nid": "base_basescraper_get", "callee": "urljoin", "source_file": "backend/app/scraper/base.py", "source_location": "L62"}, {"caller_nid": "base_basescraper_get", "callee": "range", "source_file": "backend/app/scraper/base.py", "source_location": "L64"}, {"caller_nid": "base_basescraper_get", "callee": "debug", "source_file": "backend/app/scraper/base.py", "source_location": "L66"}, {"caller_nid": "base_basescraper_get", "callee": "get", "source_file": "backend/app/scraper/base.py", "source_location": "L67"}, {"caller_nid": "base_basescraper_get", "callee": "raise_for_status", "source_file": "backend/app/scraper/base.py", "source_location": "L68"}, {"caller_nid": "base_basescraper_get", "callee": "warning", "source_file": "backend/app/scraper/base.py", "source_location": "L72"}, {"caller_nid": "base_basescraper_get", "callee": "error", "source_file": "backend/app/scraper/base.py", "source_location": "L74"}, {"caller_nid": "base_basescraper_get", "callee": "sleep", "source_file": "backend/app/scraper/base.py", "source_location": "L76"}, {"caller_nid": "base_basescraper_post", "callee": "startswith", "source_file": "backend/app/scraper/base.py", "source_location": "L83"}, {"caller_nid": "base_basescraper_post", "callee": "urljoin", "source_file": "backend/app/scraper/base.py", "source_location": "L83"}, {"caller_nid": "base_basescraper_post", "callee": "range", "source_file": "backend/app/scraper/base.py", "source_location": "L85"}, {"caller_nid": "base_basescraper_post", "callee": "debug", "source_file": "backend/app/scraper/base.py", "source_location": "L87"}, {"caller_nid": "base_basescraper_post", "callee": "post", "source_file": "backend/app/scraper/base.py", "source_location": "L88"}, {"caller_nid": "base_basescraper_post", "callee": "raise_for_status", "source_file": "backend/app/scraper/base.py", "source_location": "L89"}, {"caller_nid": "base_basescraper_post", "callee": "warning", "source_file": "backend/app/scraper/base.py", "source_location": "L93"}, {"caller_nid": "base_basescraper_post", "callee": "error", "source_file": "backend/app/scraper/base.py", "source_location": "L95"}, {"caller_nid": "base_basescraper_post", "callee": "sleep", "source_file": "backend/app/scraper/base.py", "source_location": "L97"}, {"caller_nid": "base_basescraper_log_scrape", "callee": "info", "source_file": "backend/app/scraper/base.py", "source_location": "L106"}, {"caller_nid": "base_seleniumscraper_init", "callee": "super", "source_file": "backend/app/scraper/base.py", "source_location": "L111"}, {"caller_nid": "base_seleniumscraper_init_playwright", "callee": "start", "source_file": "backend/app/scraper/base.py", "source_location": "L117"}, {"caller_nid": "base_seleniumscraper_init_playwright", "callee": "sync_playwright", "source_file": "backend/app/scraper/base.py", "source_location": "L117"}, {"caller_nid": "base_seleniumscraper_init_playwright", "callee": "launch", "source_file": "backend/app/scraper/base.py", "source_location": "L118"}, {"caller_nid": "base_seleniumscraper_init_playwright", "callee": "new_context", "source_file": "backend/app/scraper/base.py", "source_location": "L119"}, {"caller_nid": "base_seleniumscraper_get_browser_page", "callee": "new_page", "source_file": "backend/app/scraper/base.py", "source_location": "L129"}, {"caller_nid": "base_seleniumscraper_get_browser_page", "callee": "goto", "source_file": "backend/app/scraper/base.py", "source_location": "L130"}, {"caller_nid": "base_seleniumscraper_cleanup", "callee": "close", "source_file": "backend/app/scraper/base.py", "source_location": "L135"}, {"caller_nid": "base_seleniumscraper_cleanup", "callee": "stop", "source_file": "backend/app/scraper/base.py", "source_location": "L137"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/802692cbd9b59f370ccff6c8be1029056fcda1d8df708be972537f07292378ef.json b/graphify-out/cache/802692cbd9b59f370ccff6c8be1029056fcda1d8df708be972537f07292378ef.json
deleted file mode 100644
index d94bceb..0000000
--- a/graphify-out/cache/802692cbd9b59f370ccff6c8be1029056fcda1d8df708be972537f07292378ef.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_schemas_meal_plan_generation_py", "label": "meal_plan_generation.py", "file_type": "code", "source_file": "backend/app/schemas/meal_plan_generation.py", "source_location": "L1"}, {"id": "meal_plan_generation_generaterequest", "label": "GenerateRequest", "file_type": "code", "source_file": "backend/app/schemas/meal_plan_generation.py", "source_location": "L11"}, {"id": "basemodel", "label": "BaseModel", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "meal_plan_generation_regeneraterequest", "label": "RegenerateRequest", "file_type": "code", "source_file": "backend/app/schemas/meal_plan_generation.py", "source_location": "L16"}, {"id": "meal_plan_generation_generationitem", "label": "GenerationItem", "file_type": "code", "source_file": "backend/app/schemas/meal_plan_generation.py", "source_location": "L25"}, {"id": "meal_plan_generation_generationdebug", "label": "GenerationDebug", "file_type": "code", "source_file": "backend/app/schemas/meal_plan_generation.py", "source_location": "L33"}, {"id": "meal_plan_generation_generationresponse", "label": "GenerationResponse", "file_type": "code", "source_file": "backend/app/schemas/meal_plan_generation.py", "source_location": "L39"}], "edges": [{"source": "backend_app_schemas_meal_plan_generation_py", "target": "datetime", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/meal_plan_generation.py", "source_location": "L3", "weight": 1.0}, {"source": "backend_app_schemas_meal_plan_generation_py", "target": "decimal", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/meal_plan_generation.py", "source_location": "L4", "weight": 1.0}, {"source": "backend_app_schemas_meal_plan_generation_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/meal_plan_generation.py", "source_location": "L5", "weight": 1.0}, {"source": "backend_app_schemas_meal_plan_generation_py", "target": "uuid", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/meal_plan_generation.py", "source_location": "L6", "weight": 1.0}, {"source": "backend_app_schemas_meal_plan_generation_py", "target": "pydantic", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/meal_plan_generation.py", "source_location": "L8", "weight": 1.0}, {"source": "backend_app_schemas_meal_plan_generation_py", "target": "meal_plan_generation_generaterequest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/meal_plan_generation.py", "source_location": "L11", "weight": 1.0}, {"source": "meal_plan_generation_generaterequest", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/meal_plan_generation.py", "source_location": "L11", "weight": 1.0}, {"source": "backend_app_schemas_meal_plan_generation_py", "target": "meal_plan_generation_regeneraterequest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/meal_plan_generation.py", "source_location": "L16", "weight": 1.0}, {"source": "meal_plan_generation_regeneraterequest", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/meal_plan_generation.py", "source_location": "L16", "weight": 1.0}, {"source": "backend_app_schemas_meal_plan_generation_py", "target": "meal_plan_generation_generationitem", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/meal_plan_generation.py", "source_location": "L25", "weight": 1.0}, {"source": "meal_plan_generation_generationitem", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/meal_plan_generation.py", "source_location": "L25", "weight": 1.0}, {"source": "backend_app_schemas_meal_plan_generation_py", "target": "meal_plan_generation_generationdebug", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/meal_plan_generation.py", "source_location": "L33", "weight": 1.0}, {"source": "meal_plan_generation_generationdebug", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/meal_plan_generation.py", "source_location": "L33", "weight": 1.0}, {"source": "backend_app_schemas_meal_plan_generation_py", "target": "meal_plan_generation_generationresponse", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/meal_plan_generation.py", "source_location": "L39", "weight": 1.0}, {"source": "meal_plan_generation_generationresponse", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/meal_plan_generation.py", "source_location": "L39", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/graphify-out/cache/815b0d85e1b9cb840879cdfa364b6de2919a7053da187905aa9e3f6e89f4a69a.json b/graphify-out/cache/815b0d85e1b9cb840879cdfa364b6de2919a7053da187905aa9e3f6e89f4a69a.json
deleted file mode 100644
index 814c76f..0000000
--- a/graphify-out/cache/815b0d85e1b9cb840879cdfa364b6de2919a7053da187905aa9e3f6e89f4a69a.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "frontend_vite_config_ts", "label": "vite.config.ts", "file_type": "code", "source_file": "frontend/vite.config.ts", "source_location": "L1"}], "edges": [{"source": "frontend_vite_config_ts", "target": "vite", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/vite.config.ts", "source_location": "L1", "weight": 1.0}, {"source": "frontend_vite_config_ts", "target": "plugin_react", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/vite.config.ts", "source_location": "L2", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/graphify-out/cache/821aaf5ce4fdaa9c4e4a8c73e14145d1c4b853b44a231d31c824493ba9c34f9c.json b/graphify-out/cache/821aaf5ce4fdaa9c4e4a8c73e14145d1c4b853b44a231d31c824493ba9c34f9c.json
deleted file mode 100644
index fd0cf03..0000000
--- a/graphify-out/cache/821aaf5ce4fdaa9c4e4a8c73e14145d1c4b853b44a231d31c824493ba9c34f9c.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_api_profile_py", "label": "profile.py", "file_type": "code", "source_file": "backend/app/api/profile.py", "source_location": "L1"}, {"id": "profile_get_profile", "label": "get_profile()", "file_type": "code", "source_file": "backend/app/api/profile.py", "source_location": "L17"}, {"id": "profile_update_profile", "label": "update_profile()", "file_type": "code", "source_file": "backend/app/api/profile.py", "source_location": "L25"}, {"id": "profile_get_members", "label": "get_members()", "file_type": "code", "source_file": "backend/app/api/profile.py", "source_location": "L40"}, {"id": "profile_add_member", "label": "add_member()", "file_type": "code", "source_file": "backend/app/api/profile.py", "source_location": "L48"}, {"id": "profile_delete_member", "label": "delete_member()", "file_type": "code", "source_file": "backend/app/api/profile.py", "source_location": "L74"}], "edges": [{"source": "backend_app_api_profile_py", "target": "fastapi", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/profile.py", "source_location": "L1", "weight": 1.0}, {"source": "backend_app_api_profile_py", "target": "sqlalchemy_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/profile.py", "source_location": "L2", "weight": 1.0}, {"source": "backend_app_api_profile_py", "target": "app_database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/profile.py", "source_location": "L3", "weight": 1.0}, {"source": "backend_app_api_profile_py", "target": "app_models", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/profile.py", "source_location": "L4", "weight": 1.0}, {"source": "backend_app_api_profile_py", "target": "app_schemas", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/profile.py", "source_location": "L5", "weight": 1.0}, {"source": "backend_app_api_profile_py", "target": "app_security", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/profile.py", "source_location": "L9", "weight": 1.0}, {"source": "backend_app_api_profile_py", "target": "uuid", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/profile.py", "source_location": "L10", "weight": 1.0}, {"source": "backend_app_api_profile_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/profile.py", "source_location": "L11", "weight": 1.0}, {"source": "backend_app_api_profile_py", "target": "profile_get_profile", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/profile.py", "source_location": "L17", "weight": 1.0}, {"source": "backend_app_api_profile_py", "target": "profile_update_profile", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/profile.py", "source_location": "L25", "weight": 1.0}, {"source": "backend_app_api_profile_py", "target": "profile_get_members", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/profile.py", "source_location": "L40", "weight": 1.0}, {"source": "backend_app_api_profile_py", "target": "profile_add_member", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/profile.py", "source_location": "L48", "weight": 1.0}, {"source": "backend_app_api_profile_py", "target": "profile_delete_member", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/profile.py", "source_location": "L74", "weight": 1.0}], "raw_calls": [{"caller_nid": "profile_get_profile", "callee": "first", "source_file": "backend/app/api/profile.py", "source_location": "L18"}, {"caller_nid": "profile_get_profile", "callee": "query", "source_file": "backend/app/api/profile.py", "source_location": "L18"}, {"caller_nid": "profile_get_profile", "callee": "HTTPException", "source_file": "backend/app/api/profile.py", "source_location": "L20"}, {"caller_nid": "profile_update_profile", "callee": "first", "source_file": "backend/app/api/profile.py", "source_location": "L26"}, {"caller_nid": "profile_update_profile", "callee": "query", "source_file": "backend/app/api/profile.py", "source_location": "L26"}, {"caller_nid": "profile_update_profile", "callee": "HTTPException", "source_file": "backend/app/api/profile.py", "source_location": "L28"}, {"caller_nid": "profile_update_profile", "callee": "model_dump", "source_file": "backend/app/api/profile.py", "source_location": "L30"}, {"caller_nid": "profile_update_profile", "callee": "items", "source_file": "backend/app/api/profile.py", "source_location": "L31"}, {"caller_nid": "profile_update_profile", "callee": "setattr", "source_file": "backend/app/api/profile.py", "source_location": "L32"}, {"caller_nid": "profile_update_profile", "callee": "commit", "source_file": "backend/app/api/profile.py", "source_location": "L34"}, {"caller_nid": "profile_update_profile", "callee": "refresh", "source_file": "backend/app/api/profile.py", "source_location": "L35"}, {"caller_nid": "profile_get_members", "callee": "first", "source_file": "backend/app/api/profile.py", "source_location": "L41"}, {"caller_nid": "profile_get_members", "callee": "query", "source_file": "backend/app/api/profile.py", "source_location": "L41"}, {"caller_nid": "profile_get_members", "callee": "HTTPException", "source_file": "backend/app/api/profile.py", "source_location": "L43"}, {"caller_nid": "profile_add_member", "callee": "first", "source_file": "backend/app/api/profile.py", "source_location": "L49"}, {"caller_nid": "profile_add_member", "callee": "query", "source_file": "backend/app/api/profile.py", "source_location": "L49"}, {"caller_nid": "profile_add_member", "callee": "HTTPException", "source_file": "backend/app/api/profile.py", "source_location": "L51"}, {"caller_nid": "profile_add_member", "callee": "first", "source_file": "backend/app/api/profile.py", "source_location": "L53"}, {"caller_nid": "profile_add_member", "callee": "filter", "source_file": "backend/app/api/profile.py", "source_location": "L53"}, {"caller_nid": "profile_add_member", "callee": "query", "source_file": "backend/app/api/profile.py", "source_location": "L53"}, {"caller_nid": "profile_add_member", "callee": "HTTPException", "source_file": "backend/app/api/profile.py", "source_location": "L58"}, {"caller_nid": "profile_add_member", "callee": "FamilyMember", "source_file": "backend/app/api/profile.py", "source_location": "L60"}, {"caller_nid": "profile_add_member", "callee": "upper", "source_file": "backend/app/api/profile.py", "source_location": "L64"}, {"caller_nid": "profile_add_member", "callee": "add", "source_file": "backend/app/api/profile.py", "source_location": "L67"}, {"caller_nid": "profile_add_member", "callee": "commit", "source_file": "backend/app/api/profile.py", "source_location": "L68"}, {"caller_nid": "profile_add_member", "callee": "refresh", "source_file": "backend/app/api/profile.py", "source_location": "L69"}, {"caller_nid": "profile_delete_member", "callee": "first", "source_file": "backend/app/api/profile.py", "source_location": "L75"}, {"caller_nid": "profile_delete_member", "callee": "filter", "source_file": "backend/app/api/profile.py", "source_location": "L75"}, {"caller_nid": "profile_delete_member", "callee": "query", "source_file": "backend/app/api/profile.py", "source_location": "L75"}, {"caller_nid": "profile_delete_member", "callee": "HTTPException", "source_file": "backend/app/api/profile.py", "source_location": "L77"}, {"caller_nid": "profile_delete_member", "callee": "delete", "source_file": "backend/app/api/profile.py", "source_location": "L79"}, {"caller_nid": "profile_delete_member", "callee": "commit", "source_file": "backend/app/api/profile.py", "source_location": "L80"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/82ba683cf400c01fba6587336f9ea5b3b843503f5fc2e0a81f9748fd417670a4.json b/graphify-out/cache/82ba683cf400c01fba6587336f9ea5b3b843503f5fc2e0a81f9748fd417670a4.json
deleted file mode 100644
index cda1429..0000000
--- a/graphify-out/cache/82ba683cf400c01fba6587336f9ea5b3b843503f5fc2e0a81f9748fd417670a4.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_services_llm_matcher_py", "label": "llm_matcher.py", "file_type": "code", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L1"}, {"id": "llm_matcher_get_candidates", "label": "_get_candidates()", "file_type": "code", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L38"}, {"id": "llm_matcher_get_unmatched_ingredients", "label": "_get_unmatched_ingredients()", "file_type": "code", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L86"}, {"id": "llm_matcher_ask_ollama", "label": "_ask_ollama()", "file_type": "code", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L97"}, {"id": "llm_matcher_run_llm_match_job", "label": "run_llm_match_job()", "file_type": "code", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L147"}, {"id": "llm_matcher_rationale_1", "label": "LLM-powered second-pass ingredient\u2192grocery matcher. After the deterministic AUT", "file_type": "rationale", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L1"}, {"id": "llm_matcher_rationale_42", "label": "Return up to ``_CANDIDATE_LIMIT`` grocery items ranked by fuzzy\u00d7precision.", "file_type": "rationale", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L42"}, {"id": "llm_matcher_rationale_87", "label": "Ingredients with no existing match in ingredient_grocery_match.", "file_type": "rationale", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L87"}, {"id": "llm_matcher_rationale_98", "label": "Ask the LLM to pick the best grocery item for the ingredient. Returns the 0", "file_type": "rationale", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L98"}, {"id": "llm_matcher_rationale_152", "label": "LLM second pass: match remaining unmatched ingredients. For each ingredient", "file_type": "rationale", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L152"}], "edges": [{"source": "backend_app_services_llm_matcher_py", "target": "logging", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L12", "weight": 1.0}, {"source": "backend_app_services_llm_matcher_py", "target": "re", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L13", "weight": 1.0}, {"source": "backend_app_services_llm_matcher_py", "target": "time", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L14", "weight": 1.0}, {"source": "backend_app_services_llm_matcher_py", "target": "uuid", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L15", "weight": 1.0}, {"source": "backend_app_services_llm_matcher_py", "target": "decimal", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L16", "weight": 1.0}, {"source": "backend_app_services_llm_matcher_py", "target": "requests", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L18", "weight": 1.0}, {"source": "backend_app_services_llm_matcher_py", "target": "rapidfuzz", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L19", "weight": 1.0}, {"source": "backend_app_services_llm_matcher_py", "target": "sqlalchemy_dialects_postgresql", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L20", "weight": 1.0}, {"source": "backend_app_services_llm_matcher_py", "target": "sqlalchemy_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L21", "weight": 1.0}, {"source": "backend_app_services_llm_matcher_py", "target": "app_config", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L23", "weight": 1.0}, {"source": "backend_app_services_llm_matcher_py", "target": "app_models", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L24", "weight": 1.0}, {"source": "backend_app_services_llm_matcher_py", "target": "app_services_matcher", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L30", "weight": 1.0}, {"source": "backend_app_services_llm_matcher_py", "target": "llm_matcher_get_candidates", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L38", "weight": 1.0}, {"source": "backend_app_services_llm_matcher_py", "target": "llm_matcher_get_unmatched_ingredients", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L86", "weight": 1.0}, {"source": "backend_app_services_llm_matcher_py", "target": "llm_matcher_ask_ollama", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L97", "weight": 1.0}, {"source": "backend_app_services_llm_matcher_py", "target": "llm_matcher_run_llm_match_job", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L147", "weight": 1.0}, {"source": "llm_matcher_run_llm_match_job", "target": "llm_matcher_get_unmatched_ingredients", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L168", "weight": 1.0}, {"source": "llm_matcher_run_llm_match_job", "target": "llm_matcher_get_candidates", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L180", "weight": 1.0}, {"source": "llm_matcher_run_llm_match_job", "target": "llm_matcher_ask_ollama", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L188", "weight": 1.0}, {"source": "llm_matcher_rationale_1", "target": "backend_app_services_llm_matcher_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L1", "weight": 1.0}, {"source": "llm_matcher_rationale_42", "target": "llm_matcher_get_candidates", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L42", "weight": 1.0}, {"source": "llm_matcher_rationale_87", "target": "llm_matcher_get_unmatched_ingredients", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L87", "weight": 1.0}, {"source": "llm_matcher_rationale_98", "target": "llm_matcher_ask_ollama", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L98", "weight": 1.0}, {"source": "llm_matcher_rationale_152", "target": "llm_matcher_run_llm_match_job", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L152", "weight": 1.0}], "raw_calls": [{"caller_nid": "llm_matcher_get_candidates", "callee": "_sig_words", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L50"}, {"caller_nid": "llm_matcher_get_candidates", "callee": "_sig_words", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L57"}, {"caller_nid": "llm_matcher_get_candidates", "callee": "lower", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L62"}, {"caller_nid": "llm_matcher_get_candidates", "callee": "extract", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L64"}, {"caller_nid": "llm_matcher_get_candidates", "callee": "lower", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L65"}, {"caller_nid": "llm_matcher_get_candidates", "callee": "len", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L68"}, {"caller_nid": "llm_matcher_get_candidates", "callee": "_sig_words", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L74"}, {"caller_nid": "llm_matcher_get_candidates", "callee": "len", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L78"}, {"caller_nid": "llm_matcher_get_candidates", "callee": "len", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L78"}, {"caller_nid": "llm_matcher_get_candidates", "callee": "append", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L80"}, {"caller_nid": "llm_matcher_get_candidates", "callee": "sort", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L82"}, {"caller_nid": "llm_matcher_get_unmatched_ingredients", "callee": "select", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L89"}, {"caller_nid": "llm_matcher_get_unmatched_ingredients", "callee": "all", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L91"}, {"caller_nid": "llm_matcher_get_unmatched_ingredients", "callee": "filter", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L91"}, {"caller_nid": "llm_matcher_get_unmatched_ingredients", "callee": "query", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L91"}, {"caller_nid": "llm_matcher_get_unmatched_ingredients", "callee": "notin_", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L92"}, {"caller_nid": "llm_matcher_ask_ollama", "callee": "warning", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L103"}, {"caller_nid": "llm_matcher_ask_ollama", "callee": "join", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L106"}, {"caller_nid": "llm_matcher_ask_ollama", "callee": "enumerate", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L106"}, {"caller_nid": "llm_matcher_ask_ollama", "callee": "len", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L111"}, {"caller_nid": "llm_matcher_ask_ollama", "callee": "post", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L115"}, {"caller_nid": "llm_matcher_ask_ollama", "callee": "raise_for_status", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L129"}, {"caller_nid": "llm_matcher_ask_ollama", "callee": "warning", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L131"}, {"caller_nid": "llm_matcher_ask_ollama", "callee": "get", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L134"}, {"caller_nid": "llm_matcher_ask_ollama", "callee": "get", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L134"}, {"caller_nid": "llm_matcher_ask_ollama", "callee": "get", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L134"}, {"caller_nid": "llm_matcher_ask_ollama", "callee": "json", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L134"}, {"caller_nid": "llm_matcher_ask_ollama", "callee": "strip", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L136"}, {"caller_nid": "llm_matcher_ask_ollama", "callee": "sub", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L136"}, {"caller_nid": "llm_matcher_ask_ollama", "callee": "lower", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L138"}, {"caller_nid": "llm_matcher_ask_ollama", "callee": "search", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L140"}, {"caller_nid": "llm_matcher_ask_ollama", "callee": "int", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L143"}, {"caller_nid": "llm_matcher_ask_ollama", "callee": "group", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L143"}, {"caller_nid": "llm_matcher_ask_ollama", "callee": "len", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L144"}, {"caller_nid": "llm_matcher_run_llm_match_job", "callee": "all", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L161"}, {"caller_nid": "llm_matcher_run_llm_match_job", "callee": "filter", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L161"}, {"caller_nid": "llm_matcher_run_llm_match_job", "callee": "query", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L161"}, {"caller_nid": "llm_matcher_run_llm_match_job", "callee": "info", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L170"}, {"caller_nid": "llm_matcher_run_llm_match_job", "callee": "info", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L173"}, {"caller_nid": "llm_matcher_run_llm_match_job", "callee": "len", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L173"}, {"caller_nid": "llm_matcher_run_llm_match_job", "callee": "strip", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L177"}, {"caller_nid": "llm_matcher_run_llm_match_job", "callee": "debug", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L182"}, {"caller_nid": "llm_matcher_run_llm_match_job", "callee": "info", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L186"}, {"caller_nid": "llm_matcher_run_llm_match_job", "callee": "len", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L186"}, {"caller_nid": "llm_matcher_run_llm_match_job", "callee": "sleep", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L189"}, {"caller_nid": "llm_matcher_run_llm_match_job", "callee": "info", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L192"}, {"caller_nid": "llm_matcher_run_llm_match_job", "callee": "info", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L196"}, {"caller_nid": "llm_matcher_run_llm_match_job", "callee": "on_conflict_do_nothing", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L199"}, {"caller_nid": "llm_matcher_run_llm_match_job", "callee": "values", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L199"}, {"caller_nid": "llm_matcher_run_llm_match_job", "callee": "_pg_insert", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L199"}, {"caller_nid": "llm_matcher_run_llm_match_job", "callee": "uuid4", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L201"}, {"caller_nid": "llm_matcher_run_llm_match_job", "callee": "Decimal", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L204"}, {"caller_nid": "llm_matcher_run_llm_match_job", "callee": "execute", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L209"}, {"caller_nid": "llm_matcher_run_llm_match_job", "callee": "commit", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L212"}, {"caller_nid": "llm_matcher_run_llm_match_job", "callee": "info", "source_file": "backend/app/services/llm_matcher.py", "source_location": "L213"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/83866d4ed7bd29cdab1fb4f6b9d2dcae559d9422662b1e6910c661da8b1c9ce6.json b/graphify-out/cache/83866d4ed7bd29cdab1fb4f6b9d2dcae559d9422662b1e6910c661da8b1c9ce6.json
deleted file mode 100644
index 200ad37..0000000
--- a/graphify-out/cache/83866d4ed7bd29cdab1fb4f6b9d2dcae559d9422662b1e6910c661da8b1c9ce6.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_tests_test_swiftly_auth_py", "label": "test_swiftly_auth.py", "file_type": "code", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L1"}, {"id": "test_swiftly_auth_clear_cache", "label": "_clear_cache()", "file_type": "code", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L34"}, {"id": "test_swiftly_auth_b64url", "label": "_b64url()", "file_type": "code", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L40"}, {"id": "test_swiftly_auth_make_jwt", "label": "_make_jwt()", "file_type": "code", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L44"}, {"id": "test_swiftly_auth_config_response", "label": "_config_response()", "file_type": "code", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L53"}, {"id": "test_swiftly_auth_signup_response", "label": "_signup_response()", "file_type": "code", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L60"}, {"id": "test_swiftly_auth_test_get_token_mints_fresh_when_cache_empty", "label": "test_get_token_mints_fresh_when_cache_empty()", "file_type": "code", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L71"}, {"id": "test_swiftly_auth_test_get_token_returns_cached_without_reminting", "label": "test_get_token_returns_cached_without_reminting()", "file_type": "code", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L99"}, {"id": "test_swiftly_auth_test_get_token_remints_when_cached_token_near_expiry", "label": "test_get_token_remints_when_cached_token_near_expiry()", "file_type": "code", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L118"}, {"id": "test_swiftly_auth_test_mint_raises_on_firebase_non_200", "label": "test_mint_raises_on_firebase_non_200()", "file_type": "code", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L140"}, {"id": "test_swiftly_auth_rationale_1", "label": "Offline tests for swiftly_auth \u2014 Firebase REST anon-signUp + cache. All tests r", "file_type": "rationale", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L1"}, {"id": "test_swiftly_auth_rationale_72", "label": "First call fetches config.json, posts to Firebase, returns idToken.", "file_type": "rationale", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L72"}, {"id": "test_swiftly_auth_rationale_100", "label": "Second call within the refresh window does NOT re-hit Firebase.", "file_type": "rationale", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L100"}, {"id": "test_swiftly_auth_rationale_119", "label": "A cached token within the refresh-margin window triggers a re-mint.", "file_type": "rationale", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L119"}, {"id": "test_swiftly_auth_rationale_141", "label": "Firebase 403/400/etc. surfaces as SwiftlyAuthMintError with status detail.", "file_type": "rationale", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L141"}], "edges": [{"source": "backend_tests_test_swiftly_auth_py", "target": "base64", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L9", "weight": 1.0}, {"source": "backend_tests_test_swiftly_auth_py", "target": "json", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L10", "weight": 1.0}, {"source": "backend_tests_test_swiftly_auth_py", "target": "sys", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L11", "weight": 1.0}, {"source": "backend_tests_test_swiftly_auth_py", "target": "time", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L12", "weight": 1.0}, {"source": "backend_tests_test_swiftly_auth_py", "target": "pathlib", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L13", "weight": 1.0}, {"source": "backend_tests_test_swiftly_auth_py", "target": "unittest_mock", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L14", "weight": 1.0}, {"source": "backend_tests_test_swiftly_auth_py", "target": "pytest", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L16", "weight": 1.0}, {"source": "backend_tests_test_swiftly_auth_py", "target": "requests", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L17", "weight": 1.0}, {"source": "backend_tests_test_swiftly_auth_py", "target": "app_services", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L23", "weight": 1.0}, {"source": "backend_tests_test_swiftly_auth_py", "target": "app_services_swiftly_auth", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L24", "weight": 1.0}, {"source": "backend_tests_test_swiftly_auth_py", "target": "test_swiftly_auth_clear_cache", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L34", "weight": 1.0}, {"source": "backend_tests_test_swiftly_auth_py", "target": "test_swiftly_auth_b64url", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L40", "weight": 1.0}, {"source": "backend_tests_test_swiftly_auth_py", "target": "test_swiftly_auth_make_jwt", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L44", "weight": 1.0}, {"source": "backend_tests_test_swiftly_auth_py", "target": "test_swiftly_auth_config_response", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L53", "weight": 1.0}, {"source": "backend_tests_test_swiftly_auth_py", "target": "test_swiftly_auth_signup_response", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L60", "weight": 1.0}, {"source": "backend_tests_test_swiftly_auth_py", "target": "test_swiftly_auth_test_get_token_mints_fresh_when_cache_empty", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L71", "weight": 1.0}, {"source": "backend_tests_test_swiftly_auth_py", "target": "test_swiftly_auth_test_get_token_returns_cached_without_reminting", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L99", "weight": 1.0}, {"source": "backend_tests_test_swiftly_auth_py", "target": "test_swiftly_auth_test_get_token_remints_when_cached_token_near_expiry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L118", "weight": 1.0}, {"source": "backend_tests_test_swiftly_auth_py", "target": "test_swiftly_auth_test_mint_raises_on_firebase_non_200", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L140", "weight": 1.0}, {"source": "test_swiftly_auth_make_jwt", "target": "test_swiftly_auth_b64url", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L45", "weight": 1.0}, {"source": "test_swiftly_auth_test_get_token_mints_fresh_when_cache_empty", "target": "test_swiftly_auth_make_jwt", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L74", "weight": 1.0}, {"source": "test_swiftly_auth_test_get_token_mints_fresh_when_cache_empty", "target": "test_swiftly_auth_config_response", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L77", "weight": 1.0}, {"source": "test_swiftly_auth_test_get_token_mints_fresh_when_cache_empty", "target": "test_swiftly_auth_signup_response", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L81", "weight": 1.0}, {"source": "test_swiftly_auth_test_get_token_returns_cached_without_reminting", "target": "test_swiftly_auth_make_jwt", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L102", "weight": 1.0}, {"source": "test_swiftly_auth_test_get_token_returns_cached_without_reminting", "target": "test_swiftly_auth_config_response", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L105", "weight": 1.0}, {"source": "test_swiftly_auth_test_get_token_returns_cached_without_reminting", "target": "test_swiftly_auth_signup_response", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L109", "weight": 1.0}, {"source": "test_swiftly_auth_test_get_token_remints_when_cached_token_near_expiry", "target": "test_swiftly_auth_make_jwt", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L122", "weight": 1.0}, {"source": "test_swiftly_auth_test_get_token_remints_when_cached_token_near_expiry", "target": "test_swiftly_auth_signup_response", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L132", "weight": 1.0}, {"source": "test_swiftly_auth_test_mint_raises_on_firebase_non_200", "target": "test_swiftly_auth_config_response", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L143", "weight": 1.0}, {"source": "test_swiftly_auth_test_mint_raises_on_firebase_non_200", "target": "test_swiftly_auth_signup_response", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L147", "weight": 1.0}, {"source": "test_swiftly_auth_rationale_1", "target": "backend_tests_test_swiftly_auth_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L1", "weight": 1.0}, {"source": "test_swiftly_auth_rationale_72", "target": "test_swiftly_auth_test_get_token_mints_fresh_when_cache_empty", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L72", "weight": 1.0}, {"source": "test_swiftly_auth_rationale_100", "target": "test_swiftly_auth_test_get_token_returns_cached_without_reminting", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L100", "weight": 1.0}, {"source": "test_swiftly_auth_rationale_119", "target": "test_swiftly_auth_test_get_token_remints_when_cached_token_near_expiry", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L119", "weight": 1.0}, {"source": "test_swiftly_auth_rationale_141", "target": "test_swiftly_auth_test_mint_raises_on_firebase_non_200", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L141", "weight": 1.0}], "raw_calls": [{"caller_nid": "test_swiftly_auth_clear_cache", "callee": "_reset_cache_for_tests", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L35"}, {"caller_nid": "test_swiftly_auth_clear_cache", "callee": "_reset_cache_for_tests", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L37"}, {"caller_nid": "test_swiftly_auth_b64url", "callee": "decode", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L41"}, {"caller_nid": "test_swiftly_auth_b64url", "callee": "rstrip", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L41"}, {"caller_nid": "test_swiftly_auth_b64url", "callee": "urlsafe_b64encode", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L41"}, {"caller_nid": "test_swiftly_auth_make_jwt", "callee": "encode", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L45"}, {"caller_nid": "test_swiftly_auth_make_jwt", "callee": "dumps", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L45"}, {"caller_nid": "test_swiftly_auth_make_jwt", "callee": "encode", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L47"}, {"caller_nid": "test_swiftly_auth_make_jwt", "callee": "dumps", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L47"}, {"caller_nid": "test_swiftly_auth_make_jwt", "callee": "int", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L47"}, {"caller_nid": "test_swiftly_auth_config_response", "callee": "MagicMock", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L54"}, {"caller_nid": "test_swiftly_auth_signup_response", "callee": "MagicMock", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L61"}, {"caller_nid": "test_swiftly_auth_signup_response", "callee": "ValueError", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L67"}, {"caller_nid": "test_swiftly_auth_test_get_token_mints_fresh_when_cache_empty", "callee": "time", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L73"}, {"caller_nid": "test_swiftly_auth_test_get_token_mints_fresh_when_cache_empty", "callee": "object", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L76"}, {"caller_nid": "test_swiftly_auth_test_get_token_mints_fresh_when_cache_empty", "callee": "object", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L78"}, {"caller_nid": "test_swiftly_auth_test_get_token_mints_fresh_when_cache_empty", "callee": "get_token", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L83"}, {"caller_nid": "test_swiftly_auth_test_get_token_mints_fresh_when_cache_empty", "callee": "assert_called_once", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L86"}, {"caller_nid": "test_swiftly_auth_test_get_token_mints_fresh_when_cache_empty", "callee": "assert_called_once", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L90"}, {"caller_nid": "test_swiftly_auth_test_get_token_returns_cached_without_reminting", "callee": "time", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L101"}, {"caller_nid": "test_swiftly_auth_test_get_token_returns_cached_without_reminting", "callee": "object", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L104"}, {"caller_nid": "test_swiftly_auth_test_get_token_returns_cached_without_reminting", "callee": "object", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L106"}, {"caller_nid": "test_swiftly_auth_test_get_token_returns_cached_without_reminting", "callee": "get_token", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L111"}, {"caller_nid": "test_swiftly_auth_test_get_token_returns_cached_without_reminting", "callee": "get_token", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L112"}, {"caller_nid": "test_swiftly_auth_test_get_token_remints_when_cached_token_near_expiry", "callee": "time", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L120"}, {"caller_nid": "test_swiftly_auth_test_get_token_remints_when_cached_token_near_expiry", "callee": "time", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L121"}, {"caller_nid": "test_swiftly_auth_test_get_token_remints_when_cached_token_near_expiry", "callee": "object", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L129"}, {"caller_nid": "test_swiftly_auth_test_get_token_remints_when_cached_token_near_expiry", "callee": "get_token", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L134"}, {"caller_nid": "test_swiftly_auth_test_get_token_remints_when_cached_token_near_expiry", "callee": "assert_called_once", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L137"}, {"caller_nid": "test_swiftly_auth_test_mint_raises_on_firebase_non_200", "callee": "object", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L142"}, {"caller_nid": "test_swiftly_auth_test_mint_raises_on_firebase_non_200", "callee": "object", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L144"}, {"caller_nid": "test_swiftly_auth_test_mint_raises_on_firebase_non_200", "callee": "raises", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L149"}, {"caller_nid": "test_swiftly_auth_test_mint_raises_on_firebase_non_200", "callee": "get_token", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L150"}, {"caller_nid": "test_swiftly_auth_test_mint_raises_on_firebase_non_200", "callee": "str", "source_file": "backend/tests/test_swiftly_auth.py", "source_location": "L152"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/8d6be6310faa1579c96f5dc83a67ae64b0b395965b4a74155695c6c87f44df39.json b/graphify-out/cache/8d6be6310faa1579c96f5dc83a67ae64b0b395965b4a74155695c6c87f44df39.json
deleted file mode 100644
index 78d5aa9..0000000
--- a/graphify-out/cache/8d6be6310faa1579c96f5dc83a67ae64b0b395965b4a74155695c6c87f44df39.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "frontend_src_api_index_ts", "label": "index.ts", "file_type": "code", "source_file": "frontend/src/api/index.ts", "source_location": "L1"}], "edges": [{"source": "frontend_src_api_index_ts", "target": "axios", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/api/index.ts", "source_location": "L1", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/graphify-out/cache/8fef70084796c9eee20d9e399f8baeed28fe270670a7a14c9cb8921761170b83.json b/graphify-out/cache/8fef70084796c9eee20d9e399f8baeed28fe270670a7a14c9cb8921761170b83.json
deleted file mode 100644
index 8250994..0000000
--- a/graphify-out/cache/8fef70084796c9eee20d9e399f8baeed28fe270670a7a14c9cb8921761170b83.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "scripts_send_test_approval_py", "label": "send_test_approval.py", "file_type": "code", "source_file": "scripts/send_test_approval.py", "source_location": "L1"}, {"id": "send_test_approval_main", "label": "main()", "file_type": "code", "source_file": "scripts/send_test_approval.py", "source_location": "L44"}], "edges": [{"source": "scripts_send_test_approval_py", "target": "argparse", "relation": "imports", "confidence": "EXTRACTED", "source_file": "scripts/send_test_approval.py", "source_location": "L21", "weight": 1.0}, {"source": "scripts_send_test_approval_py", "target": "os", "relation": "imports", "confidence": "EXTRACTED", "source_file": "scripts/send_test_approval.py", "source_location": "L22", "weight": 1.0}, {"source": "scripts_send_test_approval_py", "target": "sys", "relation": "imports", "confidence": "EXTRACTED", "source_file": "scripts/send_test_approval.py", "source_location": "L23", "weight": 1.0}, {"source": "scripts_send_test_approval_py", "target": "uuid", "relation": "imports", "confidence": "EXTRACTED", "source_file": "scripts/send_test_approval.py", "source_location": "L24", "weight": 1.0}, {"source": "scripts_send_test_approval_py", "target": "datetime", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "scripts/send_test_approval.py", "source_location": "L25", "weight": 1.0}, {"source": "scripts_send_test_approval_py", "target": "pathlib", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "scripts/send_test_approval.py", "source_location": "L26", "weight": 1.0}, {"source": "scripts_send_test_approval_py", "target": "send_test_approval_main", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/send_test_approval.py", "source_location": "L44", "weight": 1.0}], "raw_calls": [{"caller_nid": "send_test_approval_main", "callee": "ArgumentParser", "source_file": "scripts/send_test_approval.py", "source_location": "L45"}, {"caller_nid": "send_test_approval_main", "callee": "add_argument", "source_file": "scripts/send_test_approval.py", "source_location": "L46"}, {"caller_nid": "send_test_approval_main", "callee": "add_argument", "source_file": "scripts/send_test_approval.py", "source_location": "L51"}, {"caller_nid": "send_test_approval_main", "callee": "parse_args", "source_file": "scripts/send_test_approval.py", "source_location": "L56"}, {"caller_nid": "send_test_approval_main", "callee": "create_engine", "source_file": "scripts/send_test_approval.py", "source_location": "L75"}, {"caller_nid": "send_test_approval_main", "callee": "replace", "source_file": "scripts/send_test_approval.py", "source_location": "L76"}, {"caller_nid": "send_test_approval_main", "callee": "sessionmaker", "source_file": "scripts/send_test_approval.py", "source_location": "L78"}, {"caller_nid": "send_test_approval_main", "callee": "Session", "source_file": "scripts/send_test_approval.py", "source_location": "L79"}, {"caller_nid": "send_test_approval_main", "callee": "uuid4", "source_file": "scripts/send_test_approval.py", "source_location": "L86"}, {"caller_nid": "send_test_approval_main", "callee": "FamilyProfile", "source_file": "scripts/send_test_approval.py", "source_location": "L88"}, {"caller_nid": "send_test_approval_main", "callee": "add", "source_file": "scripts/send_test_approval.py", "source_location": "L94"}, {"caller_nid": "send_test_approval_main", "callee": "flush", "source_file": "scripts/send_test_approval.py", "source_location": "L95"}, {"caller_nid": "send_test_approval_main", "callee": "FamilyMember", "source_file": "scripts/send_test_approval.py", "source_location": "L97"}, {"caller_nid": "send_test_approval_main", "callee": "add", "source_file": "scripts/send_test_approval.py", "source_location": "L103"}, {"caller_nid": "send_test_approval_main", "callee": "flush", "source_file": "scripts/send_test_approval.py", "source_location": "L104"}, {"caller_nid": "send_test_approval_main", "callee": "Recipe", "source_file": "scripts/send_test_approval.py", "source_location": "L106"}, {"caller_nid": "send_test_approval_main", "callee": "add", "source_file": "scripts/send_test_approval.py", "source_location": "L114"}, {"caller_nid": "send_test_approval_main", "callee": "flush", "source_file": "scripts/send_test_approval.py", "source_location": "L115"}, {"caller_nid": "send_test_approval_main", "callee": "MealPlan", "source_file": "scripts/send_test_approval.py", "source_location": "L117"}, {"caller_nid": "send_test_approval_main", "callee": "today", "source_file": "scripts/send_test_approval.py", "source_location": "L119"}, {"caller_nid": "send_test_approval_main", "callee": "timedelta", "source_file": "scripts/send_test_approval.py", "source_location": "L119"}, {"caller_nid": "send_test_approval_main", "callee": "weekday", "source_file": "scripts/send_test_approval.py", "source_location": "L119"}, {"caller_nid": "send_test_approval_main", "callee": "today", "source_file": "scripts/send_test_approval.py", "source_location": "L119"}, {"caller_nid": "send_test_approval_main", "callee": "add", "source_file": "scripts/send_test_approval.py", "source_location": "L122"}, {"caller_nid": "send_test_approval_main", "callee": "flush", "source_file": "scripts/send_test_approval.py", "source_location": "L123"}, {"caller_nid": "send_test_approval_main", "callee": "MealPlanItem", "source_file": "scripts/send_test_approval.py", "source_location": "L125"}, {"caller_nid": "send_test_approval_main", "callee": "add", "source_file": "scripts/send_test_approval.py", "source_location": "L131"}, {"caller_nid": "send_test_approval_main", "callee": "commit", "source_file": "scripts/send_test_approval.py", "source_location": "L132"}, {"caller_nid": "send_test_approval_main", "callee": "issue_token", "source_file": "scripts/send_test_approval.py", "source_location": "L134"}, {"caller_nid": "send_test_approval_main", "callee": "get_email_backend", "source_file": "scripts/send_test_approval.py", "source_location": "L138"}, {"caller_nid": "send_test_approval_main", "callee": "send", "source_file": "scripts/send_test_approval.py", "source_location": "L146"}, {"caller_nid": "send_test_approval_main", "callee": "print", "source_file": "scripts/send_test_approval.py", "source_location": "L148"}, {"caller_nid": "send_test_approval_main", "callee": "print", "source_file": "scripts/send_test_approval.py", "source_location": "L149"}, {"caller_nid": "send_test_approval_main", "callee": "print", "source_file": "scripts/send_test_approval.py", "source_location": "L150"}, {"caller_nid": "send_test_approval_main", "callee": "TestClient", "source_file": "scripts/send_test_approval.py", "source_location": "L162"}, {"caller_nid": "send_test_approval_main", "callee": "get", "source_file": "scripts/send_test_approval.py", "source_location": "L164"}, {"caller_nid": "send_test_approval_main", "callee": "get", "source_file": "scripts/send_test_approval.py", "source_location": "L166"}, {"caller_nid": "send_test_approval_main", "callee": "post", "source_file": "scripts/send_test_approval.py", "source_location": "L168"}, {"caller_nid": "send_test_approval_main", "callee": "json", "source_file": "scripts/send_test_approval.py", "source_location": "L174"}, {"caller_nid": "send_test_approval_main", "callee": "print", "source_file": "scripts/send_test_approval.py", "source_location": "L175"}, {"caller_nid": "send_test_approval_main", "callee": "post", "source_file": "scripts/send_test_approval.py", "source_location": "L179"}, {"caller_nid": "send_test_approval_main", "callee": "print", "source_file": "scripts/send_test_approval.py", "source_location": "L185"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/917979cbe96e6bdc52d9e944917dc51a0907d7fbc8b2603fcd67a6dfd21b36d7.json b/graphify-out/cache/917979cbe96e6bdc52d9e944917dc51a0907d7fbc8b2603fcd67a6dfd21b36d7.json
deleted file mode 100644
index e2f7458..0000000
--- a/graphify-out/cache/917979cbe96e6bdc52d9e944917dc51a0907d7fbc8b2603fcd67a6dfd21b36d7.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_services_approval_py", "label": "approval.py", "file_type": "code", "source_file": "backend/app/services/approval.py", "source_location": "L1"}, {"id": "approval_serializer", "label": "_serializer()", "file_type": "code", "source_file": "backend/app/services/approval.py", "source_location": "L33"}, {"id": "approval_issue_token", "label": "issue_token()", "file_type": "code", "source_file": "backend/app/services/approval.py", "source_location": "L37"}, {"id": "approval_verify_token", "label": "verify_token()", "file_type": "code", "source_file": "backend/app/services/approval.py", "source_location": "L45"}, {"id": "approval_consume_token", "label": "consume_token()", "file_type": "code", "source_file": "backend/app/services/approval.py", "source_location": "L57"}, {"id": "approval_rationale_1", "label": "Per-voter approval tokens. Stateless signed tokens (itsdangerous) keyed on sett", "file_type": "rationale", "source_file": "backend/app/services/approval.py", "source_location": "L1"}, {"id": "approval_rationale_63", "label": "Verify + match URL + enforce single-use. Returns the voter on success. Sing", "file_type": "rationale", "source_file": "backend/app/services/approval.py", "source_location": "L63"}], "edges": [{"source": "backend_app_services_approval_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/approval.py", "source_location": "L12", "weight": 1.0}, {"source": "backend_app_services_approval_py", "target": "uuid", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/approval.py", "source_location": "L13", "weight": 1.0}, {"source": "backend_app_services_approval_py", "target": "fastapi", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/approval.py", "source_location": "L15", "weight": 1.0}, {"source": "backend_app_services_approval_py", "target": "itsdangerous", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/approval.py", "source_location": "L16", "weight": 1.0}, {"source": "backend_app_services_approval_py", "target": "app_config", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/approval.py", "source_location": "L22", "weight": 1.0}, {"source": "backend_app_services_approval_py", "target": "app_models", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/approval.py", "source_location": "L23", "weight": 1.0}, {"source": "backend_app_services_approval_py", "target": "sqlalchemy_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/approval.py", "source_location": "L26", "weight": 1.0}, {"source": "backend_app_services_approval_py", "target": "approval_serializer", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/approval.py", "source_location": "L33", "weight": 1.0}, {"source": "backend_app_services_approval_py", "target": "approval_issue_token", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/approval.py", "source_location": "L37", "weight": 1.0}, {"source": "backend_app_services_approval_py", "target": "approval_verify_token", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/approval.py", "source_location": "L45", "weight": 1.0}, {"source": "backend_app_services_approval_py", "target": "approval_consume_token", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/approval.py", "source_location": "L57", "weight": 1.0}, {"source": "approval_issue_token", "target": "approval_serializer", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/services/approval.py", "source_location": "L42", "weight": 1.0}, {"source": "approval_verify_token", "target": "approval_serializer", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/services/approval.py", "source_location": "L47", "weight": 1.0}, {"source": "approval_consume_token", "target": "approval_verify_token", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/services/approval.py", "source_location": "L68", "weight": 1.0}, {"source": "approval_rationale_1", "target": "backend_app_services_approval_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/services/approval.py", "source_location": "L1", "weight": 1.0}, {"source": "approval_rationale_63", "target": "approval_consume_token", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/services/approval.py", "source_location": "L63", "weight": 1.0}], "raw_calls": [{"caller_nid": "approval_serializer", "callee": "URLSafeTimedSerializer", "source_file": "backend/app/services/approval.py", "source_location": "L34"}, {"caller_nid": "approval_issue_token", "callee": "str", "source_file": "backend/app/services/approval.py", "source_location": "L39"}, {"caller_nid": "approval_issue_token", "callee": "str", "source_file": "backend/app/services/approval.py", "source_location": "L40"}, {"caller_nid": "approval_issue_token", "callee": "dumps", "source_file": "backend/app/services/approval.py", "source_location": "L42"}, {"caller_nid": "approval_verify_token", "callee": "loads", "source_file": "backend/app/services/approval.py", "source_location": "L47"}, {"caller_nid": "approval_verify_token", "callee": "HTTPException", "source_file": "backend/app/services/approval.py", "source_location": "L49"}, {"caller_nid": "approval_verify_token", "callee": "HTTPException", "source_file": "backend/app/services/approval.py", "source_location": "L51"}, {"caller_nid": "approval_verify_token", "callee": "isinstance", "source_file": "backend/app/services/approval.py", "source_location": "L52"}, {"caller_nid": "approval_verify_token", "callee": "HTTPException", "source_file": "backend/app/services/approval.py", "source_location": "L53"}, {"caller_nid": "approval_consume_token", "callee": "str", "source_file": "backend/app/services/approval.py", "source_location": "L70"}, {"caller_nid": "approval_consume_token", "callee": "str", "source_file": "backend/app/services/approval.py", "source_location": "L70"}, {"caller_nid": "approval_consume_token", "callee": "HTTPException", "source_file": "backend/app/services/approval.py", "source_location": "L71"}, {"caller_nid": "approval_consume_token", "callee": "UUID", "source_file": "backend/app/services/approval.py", "source_location": "L73"}, {"caller_nid": "approval_consume_token", "callee": "str", "source_file": "backend/app/services/approval.py", "source_location": "L73"}, {"caller_nid": "approval_consume_token", "callee": "first", "source_file": "backend/app/services/approval.py", "source_location": "L74"}, {"caller_nid": "approval_consume_token", "callee": "filter", "source_file": "backend/app/services/approval.py", "source_location": "L74"}, {"caller_nid": "approval_consume_token", "callee": "query", "source_file": "backend/app/services/approval.py", "source_location": "L74"}, {"caller_nid": "approval_consume_token", "callee": "HTTPException", "source_file": "backend/app/services/approval.py", "source_location": "L76"}, {"caller_nid": "approval_consume_token", "callee": "first", "source_file": "backend/app/services/approval.py", "source_location": "L79"}, {"caller_nid": "approval_consume_token", "callee": "filter", "source_file": "backend/app/services/approval.py", "source_location": "L79"}, {"caller_nid": "approval_consume_token", "callee": "query", "source_file": "backend/app/services/approval.py", "source_location": "L79"}, {"caller_nid": "approval_consume_token", "callee": "HTTPException", "source_file": "backend/app/services/approval.py", "source_location": "L87"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/952fef9d57f5cb6337e3bfc6c73238e1c1792686b20275f6eda3806e0ac3cb1b.json b/graphify-out/cache/952fef9d57f5cb6337e3bfc6c73238e1c1792686b20275f6eda3806e0ac3cb1b.json
deleted file mode 100644
index 1990986..0000000
--- a/graphify-out/cache/952fef9d57f5cb6337e3bfc6c73238e1c1792686b20275f6eda3806e0ac3cb1b.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "scripts_spike_lucky_scrape_py", "label": "spike_lucky_scrape.py", "file_type": "code", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L1"}, {"id": "spike_lucky_scrape_main", "label": "main()", "file_type": "code", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L38"}, {"id": "spike_lucky_scrape_rationale_1", "label": "R2-A live-scrape spike for Lucky California weekly ad. Performs ONE live fetch", "file_type": "rationale", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L1"}], "edges": [{"source": "scripts_spike_lucky_scrape_py", "target": "sys", "relation": "imports", "confidence": "EXTRACTED", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L17", "weight": 1.0}, {"source": "scripts_spike_lucky_scrape_py", "target": "datetime", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L18", "weight": 1.0}, {"source": "scripts_spike_lucky_scrape_py", "target": "pathlib", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L19", "weight": 1.0}, {"source": "scripts_spike_lucky_scrape_py", "target": "playwright_sync_api", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L21", "weight": 1.0}, {"source": "scripts_spike_lucky_scrape_py", "target": "app_scraper_lucky_ca_scraper", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L27", "weight": 1.0}, {"source": "scripts_spike_lucky_scrape_py", "target": "bs4", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L28", "weight": 1.0}, {"source": "scripts_spike_lucky_scrape_py", "target": "spike_lucky_scrape_main", "relation": "contains", "confidence": "EXTRACTED", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L38", "weight": 1.0}, {"source": "spike_lucky_scrape_rationale_1", "target": "scripts_spike_lucky_scrape_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "spike_lucky_scrape_main", "callee": "mkdir", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L39"}, {"caller_nid": "spike_lucky_scrape_main", "callee": "now", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L44"}, {"caller_nid": "spike_lucky_scrape_main", "callee": "print", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L45"}, {"caller_nid": "spike_lucky_scrape_main", "callee": "sync_playwright", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L53"}, {"caller_nid": "spike_lucky_scrape_main", "callee": "launch", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L54"}, {"caller_nid": "spike_lucky_scrape_main", "callee": "new_context", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L56"}, {"caller_nid": "spike_lucky_scrape_main", "callee": "new_page", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L57"}, {"caller_nid": "spike_lucky_scrape_main", "callee": "on", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L67"}, {"caller_nid": "spike_lucky_scrape_main", "callee": "goto", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L70"}, {"caller_nid": "spike_lucky_scrape_main", "callee": "type", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L82"}, {"caller_nid": "spike_lucky_scrape_main", "callee": "content", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L85"}, {"caller_nid": "spike_lucky_scrape_main", "callee": "write_text", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L90"}, {"caller_nid": "spike_lucky_scrape_main", "callee": "screenshot", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L93"}, {"caller_nid": "spike_lucky_scrape_main", "callee": "str", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L93"}, {"caller_nid": "spike_lucky_scrape_main", "callee": "lower", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L98"}, {"caller_nid": "spike_lucky_scrape_main", "callee": "close", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L115"}, {"caller_nid": "spike_lucky_scrape_main", "callee": "LuckyCaliforniaScraper", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L118"}, {"caller_nid": "spike_lucky_scrape_main", "callee": "parse_featured_coupons_html", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L119"}, {"caller_nid": "spike_lucky_scrape_main", "callee": "now", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L122"}, {"caller_nid": "spike_lucky_scrape_main", "callee": "isoformat", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L130"}, {"caller_nid": "spike_lucky_scrape_main", "callee": "isoformat", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L131"}, {"caller_nid": "spike_lucky_scrape_main", "callee": "len", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L133"}, {"caller_nid": "spike_lucky_scrape_main", "callee": "len", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L134"}, {"caller_nid": "spike_lucky_scrape_main", "callee": "dumps", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L142"}, {"caller_nid": "spike_lucky_scrape_main", "callee": "__import__", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L142"}, {"caller_nid": "spike_lucky_scrape_main", "callee": "write_text", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L152"}, {"caller_nid": "spike_lucky_scrape_main", "callee": "print", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L154"}, {"caller_nid": "spike_lucky_scrape_main", "callee": "len", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L154"}, {"caller_nid": "spike_lucky_scrape_main", "callee": "len", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L154"}, {"caller_nid": "spike_lucky_scrape_main", "callee": "print", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L156"}, {"caller_nid": "spike_lucky_scrape_main", "callee": "print", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L157"}, {"caller_nid": "spike_lucky_scrape_main", "callee": "print", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L158"}, {"caller_nid": "spike_lucky_scrape_main", "callee": "print", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L161"}, {"caller_nid": "spike_lucky_scrape_main", "callee": "print", "source_file": "scripts/spike_lucky_scrape.py", "source_location": "L163"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/95a212ce7e528d6a90b24ffbc8d958407f782debe5679c9a8f9ab0c930a19a77.json b/graphify-out/cache/95a212ce7e528d6a90b24ffbc8d958407f782debe5679c9a8f9ab0c930a19a77.json
deleted file mode 100644
index 35e6223..0000000
--- a/graphify-out/cache/95a212ce7e528d6a90b24ffbc8d958407f782debe5679c9a8f9ab0c930a19a77.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_alembic_versions_0005_grocery_item_external_id_py", "label": "0005_grocery_item_external_id.py", "file_type": "code", "source_file": "backend/alembic/versions/0005_grocery_item_external_id.py", "source_location": "L1"}, {"id": "0005_grocery_item_external_id_upgrade", "label": "upgrade()", "file_type": "code", "source_file": "backend/alembic/versions/0005_grocery_item_external_id.py", "source_location": "L26"}, {"id": "0005_grocery_item_external_id_downgrade", "label": "downgrade()", "file_type": "code", "source_file": "backend/alembic/versions/0005_grocery_item_external_id.py", "source_location": "L45"}, {"id": "0005_grocery_item_external_id_rationale_1", "label": "Add nullable indexed external_id and source columns to grocery_item. The Swiftl", "file_type": "rationale", "source_file": "backend/alembic/versions/0005_grocery_item_external_id.py", "source_location": "L1"}], "edges": [{"source": "backend_alembic_versions_0005_grocery_item_external_id_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0005_grocery_item_external_id.py", "source_location": "L14", "weight": 1.0}, {"source": "backend_alembic_versions_0005_grocery_item_external_id_py", "target": "alembic", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0005_grocery_item_external_id.py", "source_location": "L16", "weight": 1.0}, {"source": "backend_alembic_versions_0005_grocery_item_external_id_py", "target": "sqlalchemy", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0005_grocery_item_external_id.py", "source_location": "L17", "weight": 1.0}, {"source": "backend_alembic_versions_0005_grocery_item_external_id_py", "target": "0005_grocery_item_external_id_upgrade", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0005_grocery_item_external_id.py", "source_location": "L26", "weight": 1.0}, {"source": "backend_alembic_versions_0005_grocery_item_external_id_py", "target": "0005_grocery_item_external_id_downgrade", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0005_grocery_item_external_id.py", "source_location": "L45", "weight": 1.0}, {"source": "0005_grocery_item_external_id_rationale_1", "target": "backend_alembic_versions_0005_grocery_item_external_id_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0005_grocery_item_external_id.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "0005_grocery_item_external_id_upgrade", "callee": "add_column", "source_file": "backend/alembic/versions/0005_grocery_item_external_id.py", "source_location": "L27"}, {"caller_nid": "0005_grocery_item_external_id_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0005_grocery_item_external_id.py", "source_location": "L29"}, {"caller_nid": "0005_grocery_item_external_id_upgrade", "callee": "String", "source_file": "backend/alembic/versions/0005_grocery_item_external_id.py", "source_location": "L29"}, {"caller_nid": "0005_grocery_item_external_id_upgrade", "callee": "add_column", "source_file": "backend/alembic/versions/0005_grocery_item_external_id.py", "source_location": "L31"}, {"caller_nid": "0005_grocery_item_external_id_upgrade", "callee": "Column", "source_file": "backend/alembic/versions/0005_grocery_item_external_id.py", "source_location": "L33"}, {"caller_nid": "0005_grocery_item_external_id_upgrade", "callee": "String", "source_file": "backend/alembic/versions/0005_grocery_item_external_id.py", "source_location": "L34"}, {"caller_nid": "0005_grocery_item_external_id_upgrade", "callee": "create_index", "source_file": "backend/alembic/versions/0005_grocery_item_external_id.py", "source_location": "L37"}, {"caller_nid": "0005_grocery_item_external_id_downgrade", "callee": "drop_index", "source_file": "backend/alembic/versions/0005_grocery_item_external_id.py", "source_location": "L46"}, {"caller_nid": "0005_grocery_item_external_id_downgrade", "callee": "drop_column", "source_file": "backend/alembic/versions/0005_grocery_item_external_id.py", "source_location": "L47"}, {"caller_nid": "0005_grocery_item_external_id_downgrade", "callee": "drop_column", "source_file": "backend/alembic/versions/0005_grocery_item_external_id.py", "source_location": "L48"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/9809f83630e43980357602a5341487aaeb73514738a86ef402921ae4356f7484.json b/graphify-out/cache/9809f83630e43980357602a5341487aaeb73514738a86ef402921ae4356f7484.json
deleted file mode 100644
index ba88a8d..0000000
--- a/graphify-out/cache/9809f83630e43980357602a5341487aaeb73514738a86ef402921ae4356f7484.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_tests_test_meal_plan_generate_api_py", "label": "test_meal_plan_generate_api.py", "file_type": "code", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L1"}, {"id": "test_meal_plan_generate_api_admin", "label": "_admin()", "file_type": "code", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L10"}, {"id": "test_meal_plan_generate_api_family_with_groceries", "label": "family_with_groceries()", "file_type": "code", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L15"}, {"id": "test_meal_plan_generate_api_test_generate_endpoint_returns_meal_plan", "label": "test_generate_endpoint_returns_meal_plan()", "file_type": "code", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L50"}, {"id": "test_meal_plan_generate_api_test_generate_endpoint_requires_admin_token", "label": "test_generate_endpoint_requires_admin_token()", "file_type": "code", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L64"}, {"id": "test_meal_plan_generate_api_test_generate_endpoint_returns_404_for_unknown_family", "label": "test_generate_endpoint_returns_404_for_unknown_family()", "file_type": "code", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L73"}], "edges": [{"source": "backend_tests_test_meal_plan_generate_api_py", "target": "datetime", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L1", "weight": 1.0}, {"source": "backend_tests_test_meal_plan_generate_api_py", "target": "decimal", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L2", "weight": 1.0}, {"source": "backend_tests_test_meal_plan_generate_api_py", "target": "uuid", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L3", "weight": 1.0}, {"source": "backend_tests_test_meal_plan_generate_api_py", "target": "pytest", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L5", "weight": 1.0}, {"source": "backend_tests_test_meal_plan_generate_api_py", "target": "test_meal_plan_generate_api_admin", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L10", "weight": 1.0}, {"source": "backend_tests_test_meal_plan_generate_api_py", "target": "test_meal_plan_generate_api_family_with_groceries", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L15", "weight": 1.0}, {"source": "backend_tests_test_meal_plan_generate_api_py", "target": "test_meal_plan_generate_api_test_generate_endpoint_returns_meal_plan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L50", "weight": 1.0}, {"source": "backend_tests_test_meal_plan_generate_api_py", "target": "test_meal_plan_generate_api_test_generate_endpoint_requires_admin_token", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L64", "weight": 1.0}, {"source": "backend_tests_test_meal_plan_generate_api_py", "target": "test_meal_plan_generate_api_test_generate_endpoint_returns_404_for_unknown_family", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L73", "weight": 1.0}, {"source": "test_meal_plan_generate_api_test_generate_endpoint_returns_meal_plan", "target": "test_meal_plan_generate_api_admin", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L55", "weight": 1.0}, {"source": "test_meal_plan_generate_api_test_generate_endpoint_returns_404_for_unknown_family", "target": "test_meal_plan_generate_api_admin", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L78", "weight": 1.0}], "raw_calls": [{"caller_nid": "test_meal_plan_generate_api_family_with_groceries", "callee": "FamilyProfile", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L18"}, {"caller_nid": "test_meal_plan_generate_api_family_with_groceries", "callee": "uuid4", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L19"}, {"caller_nid": "test_meal_plan_generate_api_family_with_groceries", "callee": "add", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L26"}, {"caller_nid": "test_meal_plan_generate_api_family_with_groceries", "callee": "commit", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L27"}, {"caller_nid": "test_meal_plan_generate_api_family_with_groceries", "callee": "all", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L29"}, {"caller_nid": "test_meal_plan_generate_api_family_with_groceries", "callee": "limit", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L29"}, {"caller_nid": "test_meal_plan_generate_api_family_with_groceries", "callee": "query", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L29"}, {"caller_nid": "test_meal_plan_generate_api_family_with_groceries", "callee": "add", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L30"}, {"caller_nid": "test_meal_plan_generate_api_family_with_groceries", "callee": "GroceryItem", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L31"}, {"caller_nid": "test_meal_plan_generate_api_family_with_groceries", "callee": "uuid4", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L32"}, {"caller_nid": "test_meal_plan_generate_api_family_with_groceries", "callee": "Decimal", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L36"}, {"caller_nid": "test_meal_plan_generate_api_family_with_groceries", "callee": "Decimal", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L37"}, {"caller_nid": "test_meal_plan_generate_api_family_with_groceries", "callee": "now", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L39"}, {"caller_nid": "test_meal_plan_generate_api_family_with_groceries", "callee": "commit", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L42"}, {"caller_nid": "test_meal_plan_generate_api_family_with_groceries", "callee": "run_match_job", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L46"}, {"caller_nid": "test_meal_plan_generate_api_test_generate_endpoint_returns_meal_plan", "callee": "str", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L52"}, {"caller_nid": "test_meal_plan_generate_api_test_generate_endpoint_returns_meal_plan", "callee": "post", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L55"}, {"caller_nid": "test_meal_plan_generate_api_test_generate_endpoint_returns_meal_plan", "callee": "json", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L57"}, {"caller_nid": "test_meal_plan_generate_api_test_generate_endpoint_returns_meal_plan", "callee": "len", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L59"}, {"caller_nid": "test_meal_plan_generate_api_test_generate_endpoint_requires_admin_token", "callee": "str", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L66"}, {"caller_nid": "test_meal_plan_generate_api_test_generate_endpoint_requires_admin_token", "callee": "post", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L69"}, {"caller_nid": "test_meal_plan_generate_api_test_generate_endpoint_returns_404_for_unknown_family", "callee": "str", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L75"}, {"caller_nid": "test_meal_plan_generate_api_test_generate_endpoint_returns_404_for_unknown_family", "callee": "uuid4", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L75"}, {"caller_nid": "test_meal_plan_generate_api_test_generate_endpoint_returns_404_for_unknown_family", "callee": "post", "source_file": "backend/tests/test_meal_plan_generate_api.py", "source_location": "L78"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/9d7481a5faa311f2bc15c874fa9a5cd314e51c663433f49331306227f2a9572d.json b/graphify-out/cache/9d7481a5faa311f2bc15c874fa9a5cd314e51c663433f49331306227f2a9572d.json
deleted file mode 100644
index dd5b10a..0000000
--- a/graphify-out/cache/9d7481a5faa311f2bc15c874fa9a5cd314e51c663433f49331306227f2a9572d.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_database_py", "label": "database.py", "file_type": "code", "source_file": "backend/app/database.py", "source_location": "L1"}, {"id": "database_get_db", "label": "get_db()", "file_type": "code", "source_file": "backend/app/database.py", "source_location": "L11"}], "edges": [{"source": "backend_app_database_py", "target": "sqlalchemy", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/database.py", "source_location": "L1", "weight": 1.0}, {"source": "backend_app_database_py", "target": "sqlalchemy_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/database.py", "source_location": "L2", "weight": 1.0}, {"source": "backend_app_database_py", "target": "app_config", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/database.py", "source_location": "L3", "weight": 1.0}, {"source": "backend_app_database_py", "target": "database_get_db", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/database.py", "source_location": "L11", "weight": 1.0}], "raw_calls": [{"caller_nid": "database_get_db", "callee": "SessionLocal", "source_file": "backend/app/database.py", "source_location": "L12"}, {"caller_nid": "database_get_db", "callee": "close", "source_file": "backend/app/database.py", "source_location": "L16"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/a1f824ca18b2668ca91a2d929ae927a15429c651a23a9f79358166fcaa4cc4a5.json b/graphify-out/cache/a1f824ca18b2668ca91a2d929ae927a15429c651a23a9f79358166fcaa4cc4a5.json
deleted file mode 100644
index 6c704e1..0000000
--- a/graphify-out/cache/a1f824ca18b2668ca91a2d929ae927a15429c651a23a9f79358166fcaa4cc4a5.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_scraper_lucky_ca_scraper_py", "label": "lucky_ca_scraper.py", "file_type": "code", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L1"}, {"id": "lucky_ca_scraper_swiftlyautherror", "label": "SwiftlyAuthError", "file_type": "code", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L49"}, {"id": "exception", "label": "Exception", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "lucky_ca_scraper_luckycaliforniascraper", "label": "LuckyCaliforniaScraper", "file_type": "code", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L67"}, {"id": "lucky_ca_scraper_luckycaliforniascraper_init", "label": ".__init__()", "file_type": "code", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L86"}, {"id": "lucky_ca_scraper_luckycaliforniascraper_cleanup", "label": ".cleanup()", "file_type": "code", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L129"}, {"id": "lucky_ca_scraper_luckycaliforniascraper_scrape", "label": ".scrape()", "file_type": "code", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L138"}, {"id": "lucky_ca_scraper_luckycaliforniascraper_fetch_all", "label": ".fetch_all()", "file_type": "code", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L157"}, {"id": "lucky_ca_scraper_luckycaliforniascraper_discover_categories", "label": ".discover_categories()", "file_type": "code", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L179"}, {"id": "lucky_ca_scraper_parse_categories_html", "label": "parse_categories_html()", "file_type": "code", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L191"}, {"id": "lucky_ca_scraper_luckycaliforniascraper_fetch_category", "label": ".fetch_category()", "file_type": "code", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L208"}, {"id": "lucky_ca_scraper_parse_category_response", "label": "parse_category_response()", "file_type": "code", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L226"}, {"id": "lucky_ca_scraper_map_product", "label": "map_product()", "file_type": "code", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L240"}, {"id": "lucky_ca_scraper_parse_price", "label": "_parse_price()", "file_type": "code", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L297"}, {"id": "lucky_ca_scraper_aisle_from_slug", "label": "_aisle_from_slug()", "file_type": "code", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L317"}, {"id": "lucky_ca_scraper_luckycaliforniascraper_rate_limit", "label": "._rate_limit()", "file_type": "code", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L325"}, {"id": "lucky_ca_scraper_rationale_1", "label": "Lucky California / Swiftly product API client. Replaces the prior Playwright +", "file_type": "rationale", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L1"}, {"id": "lucky_ca_scraper_rationale_50", "label": "Raised when the Swiftly API returns 401. The exception message is surfaced", "file_type": "rationale", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L50"}, {"id": "lucky_ca_scraper_rationale_68", "label": "Swiftly product-API client for the Lucky California banner. The class name", "file_type": "rationale", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L68"}, {"id": "lucky_ca_scraper_rationale_139", "label": "Synchronous top-level scrape. Kept for the legacy ``ScraperService.run_", "file_type": "rationale", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L139"}, {"id": "lucky_ca_scraper_rationale_158", "label": "Yield mapped product dicts across every discovered category.", "file_type": "rationale", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L158"}, {"id": "lucky_ca_scraper_rationale_180", "label": "Fetch the categories page and return the list of API slugs. The slugs l", "file_type": "rationale", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L180"}, {"id": "lucky_ca_scraper_rationale_192", "label": "Pure parser used by tests against a saved fixture.", "file_type": "rationale", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L192"}, {"id": "lucky_ca_scraper_rationale_209", "label": "Fetch every product in a category. Raises ``SwiftlyAuthError`` on 401.", "file_type": "rationale", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L209"}, {"id": "lucky_ca_scraper_rationale_227", "label": "Pure parser used by tests against a saved fixture.", "file_type": "rationale", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L227"}, {"id": "lucky_ca_scraper_rationale_247", "label": "Convert one Swiftly product dict to a grocery_item-ready dict. Returns", "file_type": "rationale", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L247"}, {"id": "lucky_ca_scraper_rationale_298", "label": "Extract ``(price, unit)`` from strings like ``\"$3.49 /lb\"``. Returns ``", "file_type": "rationale", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L298"}, {"id": "lucky_ca_scraper_rationale_318", "label": "``Product/meat_seafood`` \u2192 ``meat_seafood``.", "file_type": "rationale", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L318"}], "edges": [{"source": "backend_app_scraper_lucky_ca_scraper_py", "target": "logging", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L29", "weight": 1.0}, {"source": "backend_app_scraper_lucky_ca_scraper_py", "target": "re", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L30", "weight": 1.0}, {"source": "backend_app_scraper_lucky_ca_scraper_py", "target": "time", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L31", "weight": 1.0}, {"source": "backend_app_scraper_lucky_ca_scraper_py", "target": "urllib_parse", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L32", "weight": 1.0}, {"source": "backend_app_scraper_lucky_ca_scraper_py", "target": "datetime", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L33", "weight": 1.0}, {"source": "backend_app_scraper_lucky_ca_scraper_py", "target": "decimal", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L34", "weight": 1.0}, {"source": "backend_app_scraper_lucky_ca_scraper_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L35", "weight": 1.0}, {"source": "backend_app_scraper_lucky_ca_scraper_py", "target": "requests", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L37", "weight": 1.0}, {"source": "backend_app_scraper_lucky_ca_scraper_py", "target": "bs4", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L38", "weight": 1.0}, {"source": "backend_app_scraper_lucky_ca_scraper_py", "target": "app_config", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L40", "weight": 1.0}, {"source": "backend_app_scraper_lucky_ca_scraper_py", "target": "app_services_swiftly_auth", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L41", "weight": 1.0}, {"source": "backend_app_scraper_lucky_ca_scraper_py", "target": "lucky_ca_scraper_swiftlyautherror", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L49", "weight": 1.0}, {"source": "lucky_ca_scraper_swiftlyautherror", "target": "exception", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L49", "weight": 1.0}, {"source": "backend_app_scraper_lucky_ca_scraper_py", "target": "lucky_ca_scraper_luckycaliforniascraper", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L67", "weight": 1.0}, {"source": "lucky_ca_scraper_luckycaliforniascraper", "target": "lucky_ca_scraper_luckycaliforniascraper_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L86", "weight": 1.0}, {"source": "lucky_ca_scraper_luckycaliforniascraper", "target": "lucky_ca_scraper_luckycaliforniascraper_cleanup", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L129", "weight": 1.0}, {"source": "lucky_ca_scraper_luckycaliforniascraper", "target": "lucky_ca_scraper_luckycaliforniascraper_scrape", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L138", "weight": 1.0}, {"source": "lucky_ca_scraper_luckycaliforniascraper", "target": "lucky_ca_scraper_luckycaliforniascraper_fetch_all", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L157", "weight": 1.0}, {"source": "lucky_ca_scraper_luckycaliforniascraper", "target": "lucky_ca_scraper_luckycaliforniascraper_discover_categories", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L179", "weight": 1.0}, {"source": "backend_app_scraper_lucky_ca_scraper_py", "target": "lucky_ca_scraper_parse_categories_html", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L191", "weight": 1.0}, {"source": "lucky_ca_scraper_luckycaliforniascraper", "target": "lucky_ca_scraper_luckycaliforniascraper_fetch_category", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L208", "weight": 1.0}, {"source": "backend_app_scraper_lucky_ca_scraper_py", "target": "lucky_ca_scraper_parse_category_response", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L226", "weight": 1.0}, {"source": "backend_app_scraper_lucky_ca_scraper_py", "target": "lucky_ca_scraper_map_product", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L240", "weight": 1.0}, {"source": "backend_app_scraper_lucky_ca_scraper_py", "target": "lucky_ca_scraper_parse_price", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L297", "weight": 1.0}, {"source": "backend_app_scraper_lucky_ca_scraper_py", "target": "lucky_ca_scraper_aisle_from_slug", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L317", "weight": 1.0}, {"source": "lucky_ca_scraper_luckycaliforniascraper", "target": "lucky_ca_scraper_luckycaliforniascraper_rate_limit", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L325", "weight": 1.0}, {"source": "lucky_ca_scraper_luckycaliforniascraper_scrape", "target": "lucky_ca_scraper_luckycaliforniascraper_fetch_all", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L146", "weight": 1.0}, {"source": "lucky_ca_scraper_luckycaliforniascraper_fetch_all", "target": "lucky_ca_scraper_luckycaliforniascraper_discover_categories", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L159", "weight": 1.0}, {"source": "lucky_ca_scraper_luckycaliforniascraper_fetch_all", "target": "lucky_ca_scraper_luckycaliforniascraper_fetch_category", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L163", "weight": 1.0}, {"source": "lucky_ca_scraper_luckycaliforniascraper_fetch_all", "target": "lucky_ca_scraper_aisle_from_slug", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L170", "weight": 1.0}, {"source": "lucky_ca_scraper_luckycaliforniascraper_fetch_all", "target": "lucky_ca_scraper_map_product", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L172", "weight": 1.0}, {"source": "lucky_ca_scraper_luckycaliforniascraper_discover_categories", "target": "lucky_ca_scraper_luckycaliforniascraper_rate_limit", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L185", "weight": 1.0}, {"source": "lucky_ca_scraper_luckycaliforniascraper_discover_categories", "target": "lucky_ca_scraper_parse_categories_html", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L188", "weight": 1.0}, {"source": "lucky_ca_scraper_luckycaliforniascraper_fetch_category", "target": "lucky_ca_scraper_luckycaliforniascraper_rate_limit", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L212", "weight": 1.0}, {"source": "lucky_ca_scraper_luckycaliforniascraper_fetch_category", "target": "lucky_ca_scraper_swiftlyautherror", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L220", "weight": 1.0}, {"source": "lucky_ca_scraper_luckycaliforniascraper_fetch_category", "target": "lucky_ca_scraper_parse_category_response", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L223", "weight": 1.0}, {"source": "lucky_ca_scraper_map_product", "target": "lucky_ca_scraper_parse_price", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L258", "weight": 1.0}, {"source": "lucky_ca_scraper_rationale_1", "target": "backend_app_scraper_lucky_ca_scraper_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L1", "weight": 1.0}, {"source": "lucky_ca_scraper_rationale_50", "target": "lucky_ca_scraper_swiftlyautherror", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L50", "weight": 1.0}, {"source": "lucky_ca_scraper_rationale_68", "target": "lucky_ca_scraper_luckycaliforniascraper", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L68", "weight": 1.0}, {"source": "lucky_ca_scraper_rationale_139", "target": "lucky_ca_scraper_luckycaliforniascraper_scrape", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L139", "weight": 1.0}, {"source": "lucky_ca_scraper_rationale_158", "target": "lucky_ca_scraper_luckycaliforniascraper_fetch_all", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L158", "weight": 1.0}, {"source": "lucky_ca_scraper_rationale_180", "target": "lucky_ca_scraper_luckycaliforniascraper_discover_categories", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L180", "weight": 1.0}, {"source": "lucky_ca_scraper_rationale_192", "target": "lucky_ca_scraper_luckycaliforniascraper_parse_categories_html", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L192", "weight": 1.0}, {"source": "lucky_ca_scraper_rationale_209", "target": "lucky_ca_scraper_luckycaliforniascraper_fetch_category", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L209", "weight": 1.0}, {"source": "lucky_ca_scraper_rationale_227", "target": "lucky_ca_scraper_luckycaliforniascraper_parse_category_response", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L227", "weight": 1.0}, {"source": "lucky_ca_scraper_rationale_247", "target": "lucky_ca_scraper_luckycaliforniascraper_map_product", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L247", "weight": 1.0}, {"source": "lucky_ca_scraper_rationale_298", "target": "lucky_ca_scraper_luckycaliforniascraper_parse_price", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L298", "weight": 1.0}, {"source": "lucky_ca_scraper_rationale_318", "target": "lucky_ca_scraper_luckycaliforniascraper_aisle_from_slug", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L318", "weight": 1.0}], "raw_calls": [{"caller_nid": "lucky_ca_scraper_luckycaliforniascraper_init", "callee": "rstrip", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L101"}, {"caller_nid": "lucky_ca_scraper_luckycaliforniascraper_init", "callee": "Session", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L107"}, {"caller_nid": "lucky_ca_scraper_luckycaliforniascraper_init", "callee": "update", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L108"}, {"caller_nid": "lucky_ca_scraper_luckycaliforniascraper_init", "callee": "Session", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L116"}, {"caller_nid": "lucky_ca_scraper_luckycaliforniascraper_init", "callee": "update", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L117"}, {"caller_nid": "lucky_ca_scraper_luckycaliforniascraper_cleanup", "callee": "close", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L131"}, {"caller_nid": "lucky_ca_scraper_luckycaliforniascraper_cleanup", "callee": "close", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L133"}, {"caller_nid": "lucky_ca_scraper_luckycaliforniascraper_scrape", "callee": "isoformat", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L145"}, {"caller_nid": "lucky_ca_scraper_luckycaliforniascraper_scrape", "callee": "now", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L145"}, {"caller_nid": "lucky_ca_scraper_luckycaliforniascraper_scrape", "callee": "list", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L146"}, {"caller_nid": "lucky_ca_scraper_luckycaliforniascraper_scrape", "callee": "isoformat", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L151"}, {"caller_nid": "lucky_ca_scraper_luckycaliforniascraper_scrape", "callee": "now", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L151"}, {"caller_nid": "lucky_ca_scraper_luckycaliforniascraper_scrape", "callee": "len", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L152"}, {"caller_nid": "lucky_ca_scraper_luckycaliforniascraper_fetch_all", "callee": "info", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L160"}, {"caller_nid": "lucky_ca_scraper_luckycaliforniascraper_fetch_all", "callee": "len", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L160"}, {"caller_nid": "lucky_ca_scraper_luckycaliforniascraper_fetch_all", "callee": "warning", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L168"}, {"caller_nid": "lucky_ca_scraper_luckycaliforniascraper_discover_categories", "callee": "get", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L186"}, {"caller_nid": "lucky_ca_scraper_luckycaliforniascraper_discover_categories", "callee": "raise_for_status", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L187"}, {"caller_nid": "lucky_ca_scraper_parse_categories_html", "callee": "set", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L194"}, {"caller_nid": "lucky_ca_scraper_parse_categories_html", "callee": "findall", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L195"}, {"caller_nid": "lucky_ca_scraper_parse_categories_html", "callee": "match", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L196"}, {"caller_nid": "lucky_ca_scraper_parse_categories_html", "callee": "unquote", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L199"}, {"caller_nid": "lucky_ca_scraper_parse_categories_html", "callee": "group", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L199"}, {"caller_nid": "lucky_ca_scraper_parse_categories_html", "callee": "add", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L201"}, {"caller_nid": "lucky_ca_scraper_parse_categories_html", "callee": "append", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L202"}, {"caller_nid": "lucky_ca_scraper_luckycaliforniascraper_fetch_category", "callee": "_get_swiftly_token", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L210"}, {"caller_nid": "lucky_ca_scraper_luckycaliforniascraper_fetch_category", "callee": "get", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L216"}, {"caller_nid": "lucky_ca_scraper_luckycaliforniascraper_fetch_category", "callee": "raise_for_status", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L221"}, {"caller_nid": "lucky_ca_scraper_luckycaliforniascraper_fetch_category", "callee": "json", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L222"}, {"caller_nid": "lucky_ca_scraper_parse_category_response", "callee": "isinstance", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L228"}, {"caller_nid": "lucky_ca_scraper_parse_category_response", "callee": "get", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L230"}, {"caller_nid": "lucky_ca_scraper_parse_category_response", "callee": "get", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L231"}, {"caller_nid": "lucky_ca_scraper_parse_category_response", "callee": "isinstance", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L232"}, {"caller_nid": "lucky_ca_scraper_map_product", "callee": "get", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L252"}, {"caller_nid": "lucky_ca_scraper_map_product", "callee": "strip", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L253"}, {"caller_nid": "lucky_ca_scraper_map_product", "callee": "get", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L253"}, {"caller_nid": "lucky_ca_scraper_map_product", "callee": "get", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L257"}, {"caller_nid": "lucky_ca_scraper_map_product", "callee": "get", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L257"}, {"caller_nid": "lucky_ca_scraper_map_product", "callee": "get", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L258"}, {"caller_nid": "lucky_ca_scraper_map_product", "callee": "get", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L259"}, {"caller_nid": "lucky_ca_scraper_map_product", "callee": "get", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L260"}, {"caller_nid": "lucky_ca_scraper_map_product", "callee": "get", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L268"}, {"caller_nid": "lucky_ca_scraper_map_product", "callee": "isinstance", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L269"}, {"caller_nid": "lucky_ca_scraper_map_product", "callee": "get", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L270"}, {"caller_nid": "lucky_ca_scraper_map_product", "callee": "get", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L272"}, {"caller_nid": "lucky_ca_scraper_map_product", "callee": "get", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L273"}, {"caller_nid": "lucky_ca_scraper_map_product", "callee": "str", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L276"}, {"caller_nid": "lucky_ca_scraper_map_product", "callee": "bool", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L284"}, {"caller_nid": "lucky_ca_scraper_map_product", "callee": "isoformat", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L289"}, {"caller_nid": "lucky_ca_scraper_map_product", "callee": "now", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L289"}, {"caller_nid": "lucky_ca_scraper_parse_price", "callee": "search", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L304"}, {"caller_nid": "lucky_ca_scraper_parse_price", "callee": "replace", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L307"}, {"caller_nid": "lucky_ca_scraper_parse_price", "callee": "group", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L307"}, {"caller_nid": "lucky_ca_scraper_parse_price", "callee": "Decimal", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L309"}, {"caller_nid": "lucky_ca_scraper_parse_price", "callee": "search", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L312"}, {"caller_nid": "lucky_ca_scraper_parse_price", "callee": "lower", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L313"}, {"caller_nid": "lucky_ca_scraper_parse_price", "callee": "group", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L313"}, {"caller_nid": "lucky_ca_scraper_aisle_from_slug", "callee": "rsplit", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L322"}, {"caller_nid": "lucky_ca_scraper_luckycaliforniascraper_rate_limit", "callee": "time", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L326"}, {"caller_nid": "lucky_ca_scraper_luckycaliforniascraper_rate_limit", "callee": "sleep", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L328"}, {"caller_nid": "lucky_ca_scraper_luckycaliforniascraper_rate_limit", "callee": "time", "source_file": "backend/app/scraper/lucky_ca_scraper.py", "source_location": "L329"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/a2631ece28dfc32edb7c8d5a352c0501e1ea7958d18ce1679ccd5b63c8fb63b4.json b/graphify-out/cache/a2631ece28dfc32edb7c8d5a352c0501e1ea7958d18ce1679ccd5b63c8fb63b4.json
deleted file mode 100644
index a62e8ad..0000000
--- a/graphify-out/cache/a2631ece28dfc32edb7c8d5a352c0501e1ea7958d18ce1679ccd5b63c8fb63b4.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "frontend_src_main_tsx", "label": "main.tsx", "file_type": "code", "source_file": "frontend/src/main.tsx", "source_location": "L1"}], "edges": [{"source": "frontend_src_main_tsx", "target": "react", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/main.tsx", "source_location": "L1", "weight": 1.0}, {"source": "frontend_src_main_tsx", "target": "client", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/main.tsx", "source_location": "L2", "weight": 1.0}, {"source": "frontend_src_main_tsx", "target": "react_hot_toast", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/main.tsx", "source_location": "L3", "weight": 1.0}, {"source": "frontend_src_main_tsx", "target": "frontend_src_app", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/main.tsx", "source_location": "L4", "weight": 1.0}, {"source": "frontend_src_main_tsx", "target": "frontend_src_index_css", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/main.tsx", "source_location": "L5", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/graphify-out/cache/a46dfb20b7f17b46fccba047c7f3d0024496dc89af1865c4da3e7c01faba15f0.json b/graphify-out/cache/a46dfb20b7f17b46fccba047c7f3d0024496dc89af1865c4da3e7c01faba15f0.json
deleted file mode 100644
index 1ca8a26..0000000
--- a/graphify-out/cache/a46dfb20b7f17b46fccba047c7f3d0024496dc89af1865c4da3e7c01faba15f0.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "frontend_postcss_config_js", "label": "postcss.config.js", "file_type": "code", "source_file": "frontend/postcss.config.js", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/graphify-out/cache/a5c51895e4e32e403798730c1f0989b94cc5dbcac7ed053359c54a6bd237a354.json b/graphify-out/cache/a5c51895e4e32e403798730c1f0989b94cc5dbcac7ed053359c54a6bd237a354.json
deleted file mode 100644
index 53622fe..0000000
--- a/graphify-out/cache/a5c51895e4e32e403798730c1f0989b94cc5dbcac7ed053359c54a6bd237a354.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_tests_test_ingredient_api_py", "label": "test_ingredient_api.py", "file_type": "code", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L1"}, {"id": "test_ingredient_api_admin_headers", "label": "_admin_headers()", "file_type": "code", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L6"}, {"id": "test_ingredient_api_test_create_ingredient_returns_201_with_id", "label": "test_create_ingredient_returns_201_with_id()", "file_type": "code", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L10"}, {"id": "test_ingredient_api_test_create_ingredient_rejects_duplicate_name", "label": "test_create_ingredient_rejects_duplicate_name()", "file_type": "code", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L24"}, {"id": "test_ingredient_api_test_list_ingredients_supports_search", "label": "test_list_ingredients_supports_search()", "file_type": "code", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L32"}, {"id": "test_ingredient_api_test_create_ingredient_requires_admin_token", "label": "test_create_ingredient_requires_admin_token()", "file_type": "code", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L44"}, {"id": "test_ingredient_api_test_update_ingredient_replaces_aliases", "label": "test_update_ingredient_replaces_aliases()", "file_type": "code", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L50"}, {"id": "test_ingredient_api_seed_grocery", "label": "_seed_grocery()", "file_type": "code", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L66"}, {"id": "test_ingredient_api_test_pin_manual_match", "label": "test_pin_manual_match()", "file_type": "code", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L90"}, {"id": "test_ingredient_api_test_unpin_manual_match", "label": "test_unpin_manual_match()", "file_type": "code", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L110"}, {"id": "test_ingredient_api_test_delete_ingredient_removes_row", "label": "test_delete_ingredient_removes_row()", "file_type": "code", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L128"}], "edges": [{"source": "backend_tests_test_ingredient_api_py", "target": "pytest", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L1", "weight": 1.0}, {"source": "backend_tests_test_ingredient_api_py", "target": "test_ingredient_api_admin_headers", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L6", "weight": 1.0}, {"source": "backend_tests_test_ingredient_api_py", "target": "test_ingredient_api_test_create_ingredient_returns_201_with_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L10", "weight": 1.0}, {"source": "backend_tests_test_ingredient_api_py", "target": "test_ingredient_api_test_create_ingredient_rejects_duplicate_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L24", "weight": 1.0}, {"source": "backend_tests_test_ingredient_api_py", "target": "test_ingredient_api_test_list_ingredients_supports_search", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L32", "weight": 1.0}, {"source": "backend_tests_test_ingredient_api_py", "target": "test_ingredient_api_test_create_ingredient_requires_admin_token", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L44", "weight": 1.0}, {"source": "backend_tests_test_ingredient_api_py", "target": "test_ingredient_api_test_update_ingredient_replaces_aliases", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L50", "weight": 1.0}, {"source": "backend_tests_test_ingredient_api_py", "target": "test_ingredient_api_seed_grocery", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L66", "weight": 1.0}, {"source": "backend_tests_test_ingredient_api_py", "target": "test_ingredient_api_test_pin_manual_match", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L90", "weight": 1.0}, {"source": "backend_tests_test_ingredient_api_py", "target": "test_ingredient_api_test_unpin_manual_match", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L110", "weight": 1.0}, {"source": "backend_tests_test_ingredient_api_py", "target": "test_ingredient_api_test_delete_ingredient_removes_row", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L128", "weight": 1.0}, {"source": "test_ingredient_api_test_create_ingredient_returns_201_with_id", "target": "test_ingredient_api_admin_headers", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L17", "weight": 1.0}, {"source": "test_ingredient_api_test_create_ingredient_rejects_duplicate_name", "target": "test_ingredient_api_admin_headers", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L26", "weight": 1.0}, {"source": "test_ingredient_api_test_list_ingredients_supports_search", "target": "test_ingredient_api_admin_headers", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L36", "weight": 1.0}, {"source": "test_ingredient_api_test_update_ingredient_replaces_aliases", "target": "test_ingredient_api_admin_headers", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L54", "weight": 1.0}, {"source": "test_ingredient_api_test_pin_manual_match", "target": "test_ingredient_api_admin_headers", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L94", "weight": 1.0}, {"source": "test_ingredient_api_test_pin_manual_match", "target": "test_ingredient_api_seed_grocery", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L97", "weight": 1.0}, {"source": "test_ingredient_api_test_unpin_manual_match", "target": "test_ingredient_api_admin_headers", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L114", "weight": 1.0}, {"source": "test_ingredient_api_test_unpin_manual_match", "target": "test_ingredient_api_seed_grocery", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L117", "weight": 1.0}, {"source": "test_ingredient_api_test_delete_ingredient_removes_row", "target": "test_ingredient_api_admin_headers", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L132", "weight": 1.0}], "raw_calls": [{"caller_nid": "test_ingredient_api_test_create_ingredient_returns_201_with_id", "callee": "post", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L17"}, {"caller_nid": "test_ingredient_api_test_create_ingredient_returns_201_with_id", "callee": "json", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L19"}, {"caller_nid": "test_ingredient_api_test_create_ingredient_rejects_duplicate_name", "callee": "post", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L26"}, {"caller_nid": "test_ingredient_api_test_create_ingredient_rejects_duplicate_name", "callee": "post", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L28"}, {"caller_nid": "test_ingredient_api_test_list_ingredients_supports_search", "callee": "post", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L33"}, {"caller_nid": "test_ingredient_api_test_list_ingredients_supports_search", "callee": "get", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L38"}, {"caller_nid": "test_ingredient_api_test_list_ingredients_supports_search", "callee": "json", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L40"}, {"caller_nid": "test_ingredient_api_test_create_ingredient_requires_admin_token", "callee": "post", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L46"}, {"caller_nid": "test_ingredient_api_test_update_ingredient_replaces_aliases", "callee": "post", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L51"}, {"caller_nid": "test_ingredient_api_test_update_ingredient_replaces_aliases", "callee": "json", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L56"}, {"caller_nid": "test_ingredient_api_test_update_ingredient_replaces_aliases", "callee": "patch", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L57"}, {"caller_nid": "test_ingredient_api_test_update_ingredient_replaces_aliases", "callee": "json", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L63"}, {"caller_nid": "test_ingredient_api_seed_grocery", "callee": "uuid4", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L73"}, {"caller_nid": "test_ingredient_api_seed_grocery", "callee": "add", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L74"}, {"caller_nid": "test_ingredient_api_seed_grocery", "callee": "GroceryItem", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L75"}, {"caller_nid": "test_ingredient_api_seed_grocery", "callee": "Decimal", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L80"}, {"caller_nid": "test_ingredient_api_seed_grocery", "callee": "Decimal", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L81"}, {"caller_nid": "test_ingredient_api_seed_grocery", "callee": "now", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L83"}, {"caller_nid": "test_ingredient_api_seed_grocery", "callee": "commit", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L86"}, {"caller_nid": "test_ingredient_api_seed_grocery", "callee": "str", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L87"}, {"caller_nid": "test_ingredient_api_test_pin_manual_match", "callee": "post", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L91"}, {"caller_nid": "test_ingredient_api_test_pin_manual_match", "callee": "json", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L96"}, {"caller_nid": "test_ingredient_api_test_pin_manual_match", "callee": "post", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L99"}, {"caller_nid": "test_ingredient_api_test_pin_manual_match", "callee": "json", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L105"}, {"caller_nid": "test_ingredient_api_test_unpin_manual_match", "callee": "post", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L111"}, {"caller_nid": "test_ingredient_api_test_unpin_manual_match", "callee": "json", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L116"}, {"caller_nid": "test_ingredient_api_test_unpin_manual_match", "callee": "post", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L118"}, {"caller_nid": "test_ingredient_api_test_unpin_manual_match", "callee": "json", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L123"}, {"caller_nid": "test_ingredient_api_test_unpin_manual_match", "callee": "delete", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L124"}, {"caller_nid": "test_ingredient_api_test_delete_ingredient_removes_row", "callee": "post", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L129"}, {"caller_nid": "test_ingredient_api_test_delete_ingredient_removes_row", "callee": "json", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L134"}, {"caller_nid": "test_ingredient_api_test_delete_ingredient_removes_row", "callee": "delete", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L135"}, {"caller_nid": "test_ingredient_api_test_delete_ingredient_removes_row", "callee": "get", "source_file": "backend/tests/test_ingredient_api.py", "source_location": "L137"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/a759cee302d0d32094284f244bcdac464a13857d11fec9405c925257b61fadc2.json b/graphify-out/cache/a759cee302d0d32094284f244bcdac464a13857d11fec9405c925257b61fadc2.json
deleted file mode 100644
index bf570b9..0000000
--- a/graphify-out/cache/a759cee302d0d32094284f244bcdac464a13857d11fec9405c925257b61fadc2.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_tests_test_planner_cost_py", "label": "test_planner_cost.py", "file_type": "code", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L1"}, {"id": "test_planner_cost_ingredient", "label": "_ingredient()", "file_type": "code", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L10"}, {"id": "test_planner_cost_match", "label": "_match()", "file_type": "code", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L14"}, {"id": "test_planner_cost_test_compute_recipe_cost_sums_ingredient_costs", "label": "test_compute_recipe_cost_sums_ingredient_costs()", "file_type": "code", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L25"}, {"id": "test_planner_cost_test_unmatched_ingredient_zero_cost_and_savings", "label": "test_unmatched_ingredient_zero_cost_and_savings()", "file_type": "code", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L51"}, {"id": "test_planner_cost_test_pantry_hits_counted", "label": "test_pantry_hits_counted()", "file_type": "code", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L65"}], "edges": [{"source": "backend_tests_test_planner_cost_py", "target": "decimal", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L1", "weight": 1.0}, {"source": "backend_tests_test_planner_cost_py", "target": "uuid", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L2", "weight": 1.0}, {"source": "backend_tests_test_planner_cost_py", "target": "pytest", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L4", "weight": 1.0}, {"source": "backend_tests_test_planner_cost_py", "target": "app_services_planner_cost", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L6", "weight": 1.0}, {"source": "backend_tests_test_planner_cost_py", "target": "app_services_planner_types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L7", "weight": 1.0}, {"source": "backend_tests_test_planner_cost_py", "target": "test_planner_cost_ingredient", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L10", "weight": 1.0}, {"source": "backend_tests_test_planner_cost_py", "target": "test_planner_cost_match", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L14", "weight": 1.0}, {"source": "backend_tests_test_planner_cost_py", "target": "test_planner_cost_test_compute_recipe_cost_sums_ingredient_costs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L25", "weight": 1.0}, {"source": "backend_tests_test_planner_cost_py", "target": "test_planner_cost_test_unmatched_ingredient_zero_cost_and_savings", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L51", "weight": 1.0}, {"source": "backend_tests_test_planner_cost_py", "target": "test_planner_cost_test_pantry_hits_counted", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L65", "weight": 1.0}, {"source": "test_planner_cost_test_compute_recipe_cost_sums_ingredient_costs", "target": "test_planner_cost_match", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L30", "weight": 1.0}, {"source": "test_planner_cost_test_compute_recipe_cost_sums_ingredient_costs", "target": "test_planner_cost_ingredient", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L37", "weight": 1.0}, {"source": "test_planner_cost_test_unmatched_ingredient_zero_cost_and_savings", "target": "test_planner_cost_ingredient", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L56", "weight": 1.0}, {"source": "test_planner_cost_test_pantry_hits_counted", "target": "test_planner_cost_match", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L70", "weight": 1.0}, {"source": "test_planner_cost_test_pantry_hits_counted", "target": "test_planner_cost_ingredient", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L75", "weight": 1.0}], "raw_calls": [{"caller_nid": "test_planner_cost_match", "callee": "Decimal", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L18"}, {"caller_nid": "test_planner_cost_match", "callee": "str", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L18"}, {"caller_nid": "test_planner_cost_match", "callee": "Decimal", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L19"}, {"caller_nid": "test_planner_cost_match", "callee": "str", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L19"}, {"caller_nid": "test_planner_cost_match", "callee": "Decimal", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L21"}, {"caller_nid": "test_planner_cost_match", "callee": "str", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L21"}, {"caller_nid": "test_planner_cost_test_compute_recipe_cost_sums_ingredient_costs", "callee": "uuid4", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L26"}, {"caller_nid": "test_planner_cost_test_compute_recipe_cost_sums_ingredient_costs", "callee": "uuid4", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L27"}, {"caller_nid": "test_planner_cost_test_compute_recipe_cost_sums_ingredient_costs", "callee": "uuid4", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L27"}, {"caller_nid": "test_planner_cost_test_compute_recipe_cost_sums_ingredient_costs", "callee": "uuid4", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L28"}, {"caller_nid": "test_planner_cost_test_compute_recipe_cost_sums_ingredient_costs", "callee": "uuid4", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L28"}, {"caller_nid": "test_planner_cost_test_compute_recipe_cost_sums_ingredient_costs", "callee": "set", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L33"}, {"caller_nid": "test_planner_cost_test_compute_recipe_cost_sums_ingredient_costs", "callee": "compute_recipe_cost", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L35"}, {"caller_nid": "test_planner_cost_test_compute_recipe_cost_sums_ingredient_costs", "callee": "isinstance", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L42"}, {"caller_nid": "test_planner_cost_test_compute_recipe_cost_sums_ingredient_costs", "callee": "Decimal", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L47"}, {"caller_nid": "test_planner_cost_test_compute_recipe_cost_sums_ingredient_costs", "callee": "Decimal", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L48"}, {"caller_nid": "test_planner_cost_test_unmatched_ingredient_zero_cost_and_savings", "callee": "uuid4", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L52"}, {"caller_nid": "test_planner_cost_test_unmatched_ingredient_zero_cost_and_savings", "callee": "uuid4", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L53"}, {"caller_nid": "test_planner_cost_test_unmatched_ingredient_zero_cost_and_savings", "callee": "compute_recipe_cost", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L54"}, {"caller_nid": "test_planner_cost_test_unmatched_ingredient_zero_cost_and_savings", "callee": "set", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L58"}, {"caller_nid": "test_planner_cost_test_unmatched_ingredient_zero_cost_and_savings", "callee": "Decimal", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L61"}, {"caller_nid": "test_planner_cost_test_unmatched_ingredient_zero_cost_and_savings", "callee": "Decimal", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L62"}, {"caller_nid": "test_planner_cost_test_pantry_hits_counted", "callee": "uuid4", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L66"}, {"caller_nid": "test_planner_cost_test_pantry_hits_counted", "callee": "uuid4", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L67"}, {"caller_nid": "test_planner_cost_test_pantry_hits_counted", "callee": "uuid4", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L67"}, {"caller_nid": "test_planner_cost_test_pantry_hits_counted", "callee": "uuid4", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L68"}, {"caller_nid": "test_planner_cost_test_pantry_hits_counted", "callee": "uuid4", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L68"}, {"caller_nid": "test_planner_cost_test_pantry_hits_counted", "callee": "compute_recipe_cost", "source_file": "backend/tests/test_planner_cost.py", "source_location": "L73"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/a7c8940fa6e843a117a206647cc18f225c968a33d1c97ec220233367df2df93a.json b/graphify-out/cache/a7c8940fa6e843a117a206647cc18f225c968a33d1c97ec220233367df2df93a.json
deleted file mode 100644
index 945456a..0000000
--- a/graphify-out/cache/a7c8940fa6e843a117a206647cc18f225c968a33d1c97ec220233367df2df93a.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_tests_test_thin_phase4_smoke_py", "label": "test_thin_phase4_smoke.py", "file_type": "code", "source_file": "backend/tests/test_thin_phase4_smoke.py", "source_location": "L1"}, {"id": "test_thin_phase4_smoke_admin", "label": "_admin()", "file_type": "code", "source_file": "backend/tests/test_thin_phase4_smoke.py", "source_location": "L7"}, {"id": "test_thin_phase4_smoke_test_seed_data_present_and_resolvable", "label": "test_seed_data_present_and_resolvable()", "file_type": "code", "source_file": "backend/tests/test_thin_phase4_smoke.py", "source_location": "L11"}, {"id": "test_thin_phase4_smoke_test_resolve_against_seeded_ingredients", "label": "test_resolve_against_seeded_ingredients()", "file_type": "code", "source_file": "backend/tests/test_thin_phase4_smoke.py", "source_location": "L18"}, {"id": "test_thin_phase4_smoke_test_match_job_runs_against_seeded_data", "label": "test_match_job_runs_against_seeded_data()", "file_type": "code", "source_file": "backend/tests/test_thin_phase4_smoke.py", "source_location": "L30"}, {"id": "test_thin_phase4_smoke_rationale_1", "label": "End-to-end: ingredient + recipe + match all wired together.", "file_type": "rationale", "source_file": "backend/tests/test_thin_phase4_smoke.py", "source_location": "L1"}], "edges": [{"source": "backend_tests_test_thin_phase4_smoke_py", "target": "pytest", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_thin_phase4_smoke.py", "source_location": "L2", "weight": 1.0}, {"source": "backend_tests_test_thin_phase4_smoke_py", "target": "test_thin_phase4_smoke_admin", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_thin_phase4_smoke.py", "source_location": "L7", "weight": 1.0}, {"source": "backend_tests_test_thin_phase4_smoke_py", "target": "test_thin_phase4_smoke_test_seed_data_present_and_resolvable", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_thin_phase4_smoke.py", "source_location": "L11", "weight": 1.0}, {"source": "backend_tests_test_thin_phase4_smoke_py", "target": "test_thin_phase4_smoke_test_resolve_against_seeded_ingredients", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_thin_phase4_smoke.py", "source_location": "L18", "weight": 1.0}, {"source": "backend_tests_test_thin_phase4_smoke_py", "target": "test_thin_phase4_smoke_test_match_job_runs_against_seeded_data", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_thin_phase4_smoke.py", "source_location": "L30", "weight": 1.0}, {"source": "test_thin_phase4_smoke_test_resolve_against_seeded_ingredients", "target": "test_thin_phase4_smoke_admin", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_thin_phase4_smoke.py", "source_location": "L22", "weight": 1.0}, {"source": "test_thin_phase4_smoke_rationale_1", "target": "backend_tests_test_thin_phase4_smoke_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_thin_phase4_smoke.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "test_thin_phase4_smoke_test_seed_data_present_and_resolvable", "callee": "get", "source_file": "backend/tests/test_thin_phase4_smoke.py", "source_location": "L12"}, {"caller_nid": "test_thin_phase4_smoke_test_seed_data_present_and_resolvable", "callee": "json", "source_file": "backend/tests/test_thin_phase4_smoke.py", "source_location": "L14"}, {"caller_nid": "test_thin_phase4_smoke_test_seed_data_present_and_resolvable", "callee": "len", "source_file": "backend/tests/test_thin_phase4_smoke.py", "source_location": "L15"}, {"caller_nid": "test_thin_phase4_smoke_test_seed_data_present_and_resolvable", "callee": "len", "source_file": "backend/tests/test_thin_phase4_smoke.py", "source_location": "L15"}, {"caller_nid": "test_thin_phase4_smoke_test_resolve_against_seeded_ingredients", "callee": "post", "source_file": "backend/tests/test_thin_phase4_smoke.py", "source_location": "L19"}, {"caller_nid": "test_thin_phase4_smoke_test_resolve_against_seeded_ingredients", "callee": "json", "source_file": "backend/tests/test_thin_phase4_smoke.py", "source_location": "L25"}, {"caller_nid": "test_thin_phase4_smoke_test_resolve_against_seeded_ingredients", "callee": "lower", "source_file": "backend/tests/test_thin_phase4_smoke.py", "source_location": "L27"}, {"caller_nid": "test_thin_phase4_smoke_test_match_job_runs_against_seeded_data", "callee": "run_match_job", "source_file": "backend/tests/test_thin_phase4_smoke.py", "source_location": "L33"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/a8684466f31241b86c5c6b7f74fe5e43da266988dd2ae7effa0dab65156d55e0.json b/graphify-out/cache/a8684466f31241b86c5c6b7f74fe5e43da266988dd2ae7effa0dab65156d55e0.json
deleted file mode 100644
index e15a81b..0000000
--- a/graphify-out/cache/a8684466f31241b86c5c6b7f74fe5e43da266988dd2ae7effa0dab65156d55e0.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_services_planner_select_py", "label": "select.py", "file_type": "code", "source_file": "backend/app/services/planner/select.py", "source_location": "L1"}, {"id": "select_set_diversity_penalty", "label": "set_diversity_penalty()", "file_type": "code", "source_file": "backend/app/services/planner/select.py", "source_location": "L16"}, {"id": "select_set_score", "label": "_set_score()", "file_type": "code", "source_file": "backend/app/services/planner/select.py", "source_location": "L29"}, {"id": "select_select_set", "label": "select_set()", "file_type": "code", "source_file": "backend/app/services/planner/select.py", "source_location": "L33"}, {"id": "select_rationale_1", "label": "Top-K set enumeration with diversity penalty. Takes the top K (=20) scored reci", "file_type": "rationale", "source_file": "backend/app/services/planner/select.py", "source_location": "L1"}], "edges": [{"source": "backend_app_services_planner_select_py", "target": "itertools", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/select.py", "source_location": "L9", "weight": 1.0}, {"source": "backend_app_services_planner_select_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/select.py", "source_location": "L10", "weight": 1.0}, {"source": "backend_app_services_planner_select_py", "target": "app_services_planner_config", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/select.py", "source_location": "L12", "weight": 1.0}, {"source": "backend_app_services_planner_select_py", "target": "app_services_planner_types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/select.py", "source_location": "L13", "weight": 1.0}, {"source": "backend_app_services_planner_select_py", "target": "select_set_diversity_penalty", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/select.py", "source_location": "L16", "weight": 1.0}, {"source": "backend_app_services_planner_select_py", "target": "select_set_score", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/select.py", "source_location": "L29", "weight": 1.0}, {"source": "backend_app_services_planner_select_py", "target": "select_select_set", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/select.py", "source_location": "L33", "weight": 1.0}, {"source": "select_set_score", "target": "select_set_diversity_penalty", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/select.py", "source_location": "L30", "weight": 1.0}, {"source": "select_select_set", "target": "select_set_score", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/select.py", "source_location": "L41", "weight": 1.0}, {"source": "select_rationale_1", "target": "backend_app_services_planner_select_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/select.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "select_set_diversity_penalty", "callee": "combinations", "source_file": "backend/app/services/planner/select.py", "source_location": "L21"}, {"caller_nid": "select_set_score", "callee": "sum", "source_file": "backend/app/services/planner/select.py", "source_location": "L30"}, {"caller_nid": "select_select_set", "callee": "list", "source_file": "backend/app/services/planner/select.py", "source_location": "L37"}, {"caller_nid": "select_select_set", "callee": "len", "source_file": "backend/app/services/planner/select.py", "source_location": "L40"}, {"caller_nid": "select_select_set", "callee": "sort", "source_file": "backend/app/services/planner/select.py", "source_location": "L43"}, {"caller_nid": "select_select_set", "callee": "float", "source_file": "backend/app/services/planner/select.py", "source_location": "L47"}, {"caller_nid": "select_select_set", "callee": "combinations", "source_file": "backend/app/services/planner/select.py", "source_location": "L48"}, {"caller_nid": "select_select_set", "callee": "list", "source_file": "backend/app/services/planner/select.py", "source_location": "L49"}, {"caller_nid": "select_select_set", "callee": "list", "source_file": "backend/app/services/planner/select.py", "source_location": "L52"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/acdce00d951bd249381f95f4b1dad7d622ed0ca7f97e989fc50fc54f1f245d6f.json b/graphify-out/cache/acdce00d951bd249381f95f4b1dad7d622ed0ca7f97e989fc50fc54f1f245d6f.json
deleted file mode 100644
index 458f5a7..0000000
--- a/graphify-out/cache/acdce00d951bd249381f95f4b1dad7d622ed0ca7f97e989fc50fc54f1f245d6f.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "frontend_src_components_ui_loadingspinner_tsx", "label": "LoadingSpinner.tsx", "file_type": "code", "source_file": "frontend/src/components/ui/LoadingSpinner.tsx", "source_location": "L1"}, {"id": "loadingspinner_loadingspinner", "label": "LoadingSpinner()", "file_type": "code", "source_file": "frontend/src/components/ui/LoadingSpinner.tsx", "source_location": "L10"}], "edges": [{"source": "frontend_src_components_ui_loadingspinner_tsx", "target": "lucide_react", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/components/ui/LoadingSpinner.tsx", "source_location": "L1", "weight": 1.0}, {"source": "frontend_src_components_ui_loadingspinner_tsx", "target": "frontend_src_components_ui_lib_utils", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/components/ui/LoadingSpinner.tsx", "source_location": "L2", "weight": 1.0}, {"source": "frontend_src_components_ui_loadingspinner_tsx", "target": "loadingspinner_loadingspinner", "relation": "contains", "confidence": "EXTRACTED", "source_file": "frontend/src/components/ui/LoadingSpinner.tsx", "source_location": "L10", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/graphify-out/cache/ae4448879cb427c7c3369248896560b52115ec81cdf08c63f33d81330df0451f.json b/graphify-out/cache/ae4448879cb427c7c3369248896560b52115ec81cdf08c63f33d81330df0451f.json
deleted file mode 100644
index 771cf35..0000000
--- a/graphify-out/cache/ae4448879cb427c7c3369248896560b52115ec81cdf08c63f33d81330df0451f.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "frontend_src_components_ui_card_tsx", "label": "Card.tsx", "file_type": "code", "source_file": "frontend/src/components/ui/Card.tsx", "source_location": "L1"}, {"id": "card_card", "label": "Card()", "file_type": "code", "source_file": "frontend/src/components/ui/Card.tsx", "source_location": "L8"}, {"id": "card_cardheader", "label": "CardHeader()", "file_type": "code", "source_file": "frontend/src/components/ui/Card.tsx", "source_location": "L17"}, {"id": "card_cardbody", "label": "CardBody()", "file_type": "code", "source_file": "frontend/src/components/ui/Card.tsx", "source_location": "L26"}, {"id": "card_cardfooter", "label": "CardFooter()", "file_type": "code", "source_file": "frontend/src/components/ui/Card.tsx", "source_location": "L35"}], "edges": [{"source": "frontend_src_components_ui_card_tsx", "target": "frontend_src_components_ui_lib_utils", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/components/ui/Card.tsx", "source_location": "L1", "weight": 1.0}, {"source": "frontend_src_components_ui_card_tsx", "target": "card_card", "relation": "contains", "confidence": "EXTRACTED", "source_file": "frontend/src/components/ui/Card.tsx", "source_location": "L8", "weight": 1.0}, {"source": "frontend_src_components_ui_card_tsx", "target": "card_cardheader", "relation": "contains", "confidence": "EXTRACTED", "source_file": "frontend/src/components/ui/Card.tsx", "source_location": "L17", "weight": 1.0}, {"source": "frontend_src_components_ui_card_tsx", "target": "card_cardbody", "relation": "contains", "confidence": "EXTRACTED", "source_file": "frontend/src/components/ui/Card.tsx", "source_location": "L26", "weight": 1.0}, {"source": "frontend_src_components_ui_card_tsx", "target": "card_cardfooter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "frontend/src/components/ui/Card.tsx", "source_location": "L35", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/graphify-out/cache/ae9e1f8142739fecfbdaca3c867daa87e365626713fba26de34079eaad731592.json b/graphify-out/cache/ae9e1f8142739fecfbdaca3c867daa87e365626713fba26de34079eaad731592.json
deleted file mode 100644
index 75a73f2..0000000
--- a/graphify-out/cache/ae9e1f8142739fecfbdaca3c867daa87e365626713fba26de34079eaad731592.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "frontend_src_lib_utils_ts", "label": "utils.ts", "file_type": "code", "source_file": "frontend/src/lib/utils.ts", "source_location": "L1"}, {"id": "utils_cn", "label": "cn()", "file_type": "code", "source_file": "frontend/src/lib/utils.ts", "source_location": "L4"}], "edges": [{"source": "frontend_src_lib_utils_ts", "target": "clsx", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/lib/utils.ts", "source_location": "L1", "weight": 1.0}, {"source": "frontend_src_lib_utils_ts", "target": "tailwind_merge", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/lib/utils.ts", "source_location": "L2", "weight": 1.0}, {"source": "frontend_src_lib_utils_ts", "target": "utils_cn", "relation": "contains", "confidence": "EXTRACTED", "source_file": "frontend/src/lib/utils.ts", "source_location": "L4", "weight": 1.0}], "raw_calls": [{"caller_nid": "utils_cn", "callee": "twMerge", "source_file": "frontend/src/lib/utils.ts", "source_location": "L5"}, {"caller_nid": "utils_cn", "callee": "clsx", "source_file": "frontend/src/lib/utils.ts", "source_location": "L5"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/b23fd4cb9340b9b1e7c16b0017e671deb1470ded3c9245d20655b25842c48fc9.json b/graphify-out/cache/b23fd4cb9340b9b1e7c16b0017e671deb1470ded3c9245d20655b25842c48fc9.json
deleted file mode 100644
index ea07045..0000000
--- a/graphify-out/cache/b23fd4cb9340b9b1e7c16b0017e671deb1470ded3c9245d20655b25842c48fc9.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_services_planner_types_py", "label": "types.py", "file_type": "code", "source_file": "backend/app/services/planner/types.py", "source_location": "L1"}, {"id": "types_ingredientcost", "label": "IngredientCost", "file_type": "code", "source_file": "backend/app/services/planner/types.py", "source_location": "L11"}, {"id": "types_recipecost", "label": "RecipeCost", "file_type": "code", "source_file": "backend/app/services/planner/types.py", "source_location": "L26"}, {"id": "types_sale_coverage_pct", "label": "sale_coverage_pct()", "file_type": "code", "source_file": "backend/app/services/planner/types.py", "source_location": "L37"}, {"id": "types_pantry_hit_pct", "label": "pantry_hit_pct()", "file_type": "code", "source_file": "backend/app/services/planner/types.py", "source_location": "L43"}, {"id": "types_filterresult", "label": "FilterResult", "file_type": "code", "source_file": "backend/app/services/planner/types.py", "source_location": "L50"}, {"id": "types_scoredrecipe", "label": "ScoredRecipe", "file_type": "code", "source_file": "backend/app/services/planner/types.py", "source_location": "L56"}, {"id": "types_generationresult", "label": "GenerationResult", "file_type": "code", "source_file": "backend/app/services/planner/types.py", "source_location": "L66"}, {"id": "types_rationale_1", "label": "Shared planner data structures.", "file_type": "rationale", "source_file": "backend/app/services/planner/types.py", "source_location": "L1"}], "edges": [{"source": "backend_app_services_planner_types_py", "target": "dataclasses", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/types.py", "source_location": "L4", "weight": 1.0}, {"source": "backend_app_services_planner_types_py", "target": "decimal", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/types.py", "source_location": "L5", "weight": 1.0}, {"source": "backend_app_services_planner_types_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/types.py", "source_location": "L6", "weight": 1.0}, {"source": "backend_app_services_planner_types_py", "target": "uuid", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/types.py", "source_location": "L7", "weight": 1.0}, {"source": "backend_app_services_planner_types_py", "target": "types_ingredientcost", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/types.py", "source_location": "L11", "weight": 1.0}, {"source": "backend_app_services_planner_types_py", "target": "types_recipecost", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/types.py", "source_location": "L26", "weight": 1.0}, {"source": "backend_app_services_planner_types_py", "target": "types_sale_coverage_pct", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/types.py", "source_location": "L37", "weight": 1.0}, {"source": "backend_app_services_planner_types_py", "target": "types_pantry_hit_pct", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/types.py", "source_location": "L43", "weight": 1.0}, {"source": "backend_app_services_planner_types_py", "target": "types_filterresult", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/types.py", "source_location": "L50", "weight": 1.0}, {"source": "backend_app_services_planner_types_py", "target": "types_scoredrecipe", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/types.py", "source_location": "L56", "weight": 1.0}, {"source": "backend_app_services_planner_types_py", "target": "types_generationresult", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/types.py", "source_location": "L66", "weight": 1.0}, {"source": "types_rationale_1", "target": "backend_app_services_planner_types_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/types.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/graphify-out/cache/b2d5f8f44ab22bcdee006e5e1198ab80bebfb55f284c43fbdc56862eedcd75e9.json b/graphify-out/cache/b2d5f8f44ab22bcdee006e5e1198ab80bebfb55f284c43fbdc56862eedcd75e9.json
deleted file mode 100644
index 83597c5..0000000
--- a/graphify-out/cache/b2d5f8f44ab22bcdee006e5e1198ab80bebfb55f284c43fbdc56862eedcd75e9.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_api_recipes_py", "label": "recipes.py", "file_type": "code", "source_file": "backend/app/api/recipes.py", "source_location": "L1"}, {"id": "recipes_validate_ingredient_ids", "label": "_validate_ingredient_ids()", "file_type": "code", "source_file": "backend/app/api/recipes.py", "source_location": "L32"}, {"id": "recipes_serialize", "label": "_serialize()", "file_type": "code", "source_file": "backend/app/api/recipes.py", "source_location": "L46"}, {"id": "recipes_list_recipes", "label": "list_recipes()", "file_type": "code", "source_file": "backend/app/api/recipes.py", "source_location": "L67"}, {"id": "recipes_get_recipe", "label": "get_recipe()", "file_type": "code", "source_file": "backend/app/api/recipes.py", "source_location": "L81"}, {"id": "recipes_create_recipe", "label": "create_recipe()", "file_type": "code", "source_file": "backend/app/api/recipes.py", "source_location": "L89"}, {"id": "recipes_update_recipe", "label": "update_recipe()", "file_type": "code", "source_file": "backend/app/api/recipes.py", "source_location": "L115"}, {"id": "recipes_delete_recipe", "label": "delete_recipe()", "file_type": "code", "source_file": "backend/app/api/recipes.py", "source_location": "L132"}, {"id": "recipes_parse_qty_unit", "label": "_parse_qty_unit()", "file_type": "code", "source_file": "backend/app/api/recipes.py", "source_location": "L152"}, {"id": "recipes_resolve_ingredient", "label": "resolve_ingredient()", "file_type": "code", "source_file": "backend/app/api/recipes.py", "source_location": "L171"}], "edges": [{"source": "backend_app_api_recipes_py", "target": "re", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L3", "weight": 1.0}, {"source": "backend_app_api_recipes_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L4", "weight": 1.0}, {"source": "backend_app_api_recipes_py", "target": "uuid", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L5", "weight": 1.0}, {"source": "backend_app_api_recipes_py", "target": "fastapi", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L7", "weight": 1.0}, {"source": "backend_app_api_recipes_py", "target": "rapidfuzz", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L8", "weight": 1.0}, {"source": "backend_app_api_recipes_py", "target": "sqlalchemy_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L9", "weight": 1.0}, {"source": "backend_app_api_recipes_py", "target": "app_database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L11", "weight": 1.0}, {"source": "backend_app_api_recipes_py", "target": "app_models", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L12", "weight": 1.0}, {"source": "backend_app_api_recipes_py", "target": "app_schemas_recipe", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L13", "weight": 1.0}, {"source": "backend_app_api_recipes_py", "target": "app_security", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L21", "weight": 1.0}, {"source": "backend_app_api_recipes_py", "target": "recipes_validate_ingredient_ids", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L32", "weight": 1.0}, {"source": "backend_app_api_recipes_py", "target": "recipes_serialize", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L46", "weight": 1.0}, {"source": "backend_app_api_recipes_py", "target": "recipes_list_recipes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L67", "weight": 1.0}, {"source": "backend_app_api_recipes_py", "target": "recipes_get_recipe", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L81", "weight": 1.0}, {"source": "backend_app_api_recipes_py", "target": "recipes_create_recipe", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L89", "weight": 1.0}, {"source": "backend_app_api_recipes_py", "target": "recipes_update_recipe", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L115", "weight": 1.0}, {"source": "backend_app_api_recipes_py", "target": "recipes_delete_recipe", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L132", "weight": 1.0}, {"source": "backend_app_api_recipes_py", "target": "recipes_parse_qty_unit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L152", "weight": 1.0}, {"source": "backend_app_api_recipes_py", "target": "recipes_resolve_ingredient", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L171", "weight": 1.0}, {"source": "recipes_list_recipes", "target": "recipes_serialize", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L77", "weight": 1.0}, {"source": "recipes_get_recipe", "target": "recipes_serialize", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L85", "weight": 1.0}, {"source": "recipes_create_recipe", "target": "recipes_validate_ingredient_ids", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L90", "weight": 1.0}, {"source": "recipes_create_recipe", "target": "recipes_serialize", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L111", "weight": 1.0}, {"source": "recipes_update_recipe", "target": "recipes_validate_ingredient_ids", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L121", "weight": 1.0}, {"source": "recipes_update_recipe", "target": "recipes_serialize", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L128", "weight": 1.0}, {"source": "recipes_resolve_ingredient", "target": "recipes_parse_qty_unit", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/api/recipes.py", "source_location": "L175", "weight": 1.0}], "raw_calls": [{"caller_nid": "recipes_validate_ingredient_ids", "callee": "all", "source_file": "backend/app/api/recipes.py", "source_location": "L35"}, {"caller_nid": "recipes_validate_ingredient_ids", "callee": "filter", "source_file": "backend/app/api/recipes.py", "source_location": "L35"}, {"caller_nid": "recipes_validate_ingredient_ids", "callee": "query", "source_file": "backend/app/api/recipes.py", "source_location": "L35"}, {"caller_nid": "recipes_validate_ingredient_ids", "callee": "in_", "source_file": "backend/app/api/recipes.py", "source_location": "L35"}, {"caller_nid": "recipes_validate_ingredient_ids", "callee": "str", "source_file": "backend/app/api/recipes.py", "source_location": "L38"}, {"caller_nid": "recipes_validate_ingredient_ids", "callee": "HTTPException", "source_file": "backend/app/api/recipes.py", "source_location": "L40"}, {"caller_nid": "recipes_serialize", "callee": "list", "source_file": "backend/app/api/recipes.py", "source_location": "L55"}, {"caller_nid": "recipes_serialize", "callee": "list", "source_file": "backend/app/api/recipes.py", "source_location": "L56"}, {"caller_nid": "recipes_serialize", "callee": "list", "source_file": "backend/app/api/recipes.py", "source_location": "L61"}, {"caller_nid": "recipes_list_recipes", "callee": "query", "source_file": "backend/app/api/recipes.py", "source_location": "L72"}, {"caller_nid": "recipes_list_recipes", "callee": "lower", "source_file": "backend/app/api/recipes.py", "source_location": "L74"}, {"caller_nid": "recipes_list_recipes", "callee": "filter", "source_file": "backend/app/api/recipes.py", "source_location": "L75"}, {"caller_nid": "recipes_list_recipes", "callee": "ilike", "source_file": "backend/app/api/recipes.py", "source_location": "L75"}, {"caller_nid": "recipes_list_recipes", "callee": "all", "source_file": "backend/app/api/recipes.py", "source_location": "L76"}, {"caller_nid": "recipes_list_recipes", "callee": "limit", "source_file": "backend/app/api/recipes.py", "source_location": "L76"}, {"caller_nid": "recipes_list_recipes", "callee": "order_by", "source_file": "backend/app/api/recipes.py", "source_location": "L76"}, {"caller_nid": "recipes_get_recipe", "callee": "first", "source_file": "backend/app/api/recipes.py", "source_location": "L82"}, {"caller_nid": "recipes_get_recipe", "callee": "filter", "source_file": "backend/app/api/recipes.py", "source_location": "L82"}, {"caller_nid": "recipes_get_recipe", "callee": "query", "source_file": "backend/app/api/recipes.py", "source_location": "L82"}, {"caller_nid": "recipes_get_recipe", "callee": "HTTPException", "source_file": "backend/app/api/recipes.py", "source_location": "L84"}, {"caller_nid": "recipes_create_recipe", "callee": "Recipe", "source_file": "backend/app/api/recipes.py", "source_location": "L91"}, {"caller_nid": "recipes_create_recipe", "callee": "model_dump", "source_file": "backend/app/api/recipes.py", "source_location": "L103"}, {"caller_nid": "recipes_create_recipe", "callee": "add", "source_file": "backend/app/api/recipes.py", "source_location": "L108"}, {"caller_nid": "recipes_create_recipe", "callee": "commit", "source_file": "backend/app/api/recipes.py", "source_location": "L109"}, {"caller_nid": "recipes_create_recipe", "callee": "refresh", "source_file": "backend/app/api/recipes.py", "source_location": "L110"}, {"caller_nid": "recipes_update_recipe", "callee": "first", "source_file": "backend/app/api/recipes.py", "source_location": "L116"}, {"caller_nid": "recipes_update_recipe", "callee": "filter", "source_file": "backend/app/api/recipes.py", "source_location": "L116"}, {"caller_nid": "recipes_update_recipe", "callee": "query", "source_file": "backend/app/api/recipes.py", "source_location": "L116"}, {"caller_nid": "recipes_update_recipe", "callee": "HTTPException", "source_file": "backend/app/api/recipes.py", "source_location": "L118"}, {"caller_nid": "recipes_update_recipe", "callee": "model_dump", "source_file": "backend/app/api/recipes.py", "source_location": "L119"}, {"caller_nid": "recipes_update_recipe", "callee": "model_dump", "source_file": "backend/app/api/recipes.py", "source_location": "L122"}, {"caller_nid": "recipes_update_recipe", "callee": "pop", "source_file": "backend/app/api/recipes.py", "source_location": "L123"}, {"caller_nid": "recipes_update_recipe", "callee": "items", "source_file": "backend/app/api/recipes.py", "source_location": "L124"}, {"caller_nid": "recipes_update_recipe", "callee": "setattr", "source_file": "backend/app/api/recipes.py", "source_location": "L125"}, {"caller_nid": "recipes_update_recipe", "callee": "commit", "source_file": "backend/app/api/recipes.py", "source_location": "L126"}, {"caller_nid": "recipes_update_recipe", "callee": "refresh", "source_file": "backend/app/api/recipes.py", "source_location": "L127"}, {"caller_nid": "recipes_delete_recipe", "callee": "first", "source_file": "backend/app/api/recipes.py", "source_location": "L133"}, {"caller_nid": "recipes_delete_recipe", "callee": "filter", "source_file": "backend/app/api/recipes.py", "source_location": "L133"}, {"caller_nid": "recipes_delete_recipe", "callee": "query", "source_file": "backend/app/api/recipes.py", "source_location": "L133"}, {"caller_nid": "recipes_delete_recipe", "callee": "HTTPException", "source_file": "backend/app/api/recipes.py", "source_location": "L135"}, {"caller_nid": "recipes_delete_recipe", "callee": "delete", "source_file": "backend/app/api/recipes.py", "source_location": "L136"}, {"caller_nid": "recipes_delete_recipe", "callee": "commit", "source_file": "backend/app/api/recipes.py", "source_location": "L137"}, {"caller_nid": "recipes_delete_recipe", "callee": "Response", "source_file": "backend/app/api/recipes.py", "source_location": "L138"}, {"caller_nid": "recipes_parse_qty_unit", "callee": "match", "source_file": "backend/app/api/recipes.py", "source_location": "L153"}, {"caller_nid": "recipes_parse_qty_unit", "callee": "strip", "source_file": "backend/app/api/recipes.py", "source_location": "L155"}, {"caller_nid": "recipes_parse_qty_unit", "callee": "group", "source_file": "backend/app/api/recipes.py", "source_location": "L156"}, {"caller_nid": "recipes_parse_qty_unit", "callee": "split", "source_file": "backend/app/api/recipes.py", "source_location": "L158"}, {"caller_nid": "recipes_parse_qty_unit", "callee": "float", "source_file": "backend/app/api/recipes.py", "source_location": "L159"}, {"caller_nid": "recipes_parse_qty_unit", "callee": "float", "source_file": "backend/app/api/recipes.py", "source_location": "L159"}, {"caller_nid": "recipes_parse_qty_unit", "callee": "float", "source_file": "backend/app/api/recipes.py", "source_location": "L161"}, {"caller_nid": "recipes_parse_qty_unit", "callee": "group", "source_file": "backend/app/api/recipes.py", "source_location": "L162"}, {"caller_nid": "recipes_parse_qty_unit", "callee": "strip", "source_file": "backend/app/api/recipes.py", "source_location": "L163"}, {"caller_nid": "recipes_parse_qty_unit", "callee": "group", "source_file": "backend/app/api/recipes.py", "source_location": "L163"}, {"caller_nid": "recipes_parse_qty_unit", "callee": "lower", "source_file": "backend/app/api/recipes.py", "source_location": "L164"}, {"caller_nid": "recipes_parse_qty_unit", "callee": "lower", "source_file": "backend/app/api/recipes.py", "source_location": "L167"}, {"caller_nid": "recipes_resolve_ingredient", "callee": "all", "source_file": "backend/app/api/recipes.py", "source_location": "L176"}, {"caller_nid": "recipes_resolve_ingredient", "callee": "query", "source_file": "backend/app/api/recipes.py", "source_location": "L176"}, {"caller_nid": "recipes_resolve_ingredient", "callee": "ResolveIngredientResponse", "source_file": "backend/app/api/recipes.py", "source_location": "L178"}, {"caller_nid": "recipes_resolve_ingredient", "callee": "append", "source_file": "backend/app/api/recipes.py", "source_location": "L187"}, {"caller_nid": "recipes_resolve_ingredient", "callee": "append", "source_file": "backend/app/api/recipes.py", "source_location": "L189"}, {"caller_nid": "recipes_resolve_ingredient", "callee": "extract", "source_file": "backend/app/api/recipes.py", "source_location": "L191"}, {"caller_nid": "recipes_resolve_ingredient", "callee": "set", "source_file": "backend/app/api/recipes.py", "source_location": "L197"}, {"caller_nid": "recipes_resolve_ingredient", "callee": "add", "source_file": "backend/app/api/recipes.py", "source_location": "L203"}, {"caller_nid": "recipes_resolve_ingredient", "callee": "append", "source_file": "backend/app/api/recipes.py", "source_location": "L204"}, {"caller_nid": "recipes_resolve_ingredient", "callee": "ResolveIngredientCandidate", "source_file": "backend/app/api/recipes.py", "source_location": "L205"}, {"caller_nid": "recipes_resolve_ingredient", "callee": "len", "source_file": "backend/app/api/recipes.py", "source_location": "L212"}, {"caller_nid": "recipes_resolve_ingredient", "callee": "ResolveIngredientResponse", "source_file": "backend/app/api/recipes.py", "source_location": "L215"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/b43d9d274acca9b0585c93baa3ca2dcf9f91d8d2ca532ee86c165ca0b6cbc79d.json b/graphify-out/cache/b43d9d274acca9b0585c93baa3ca2dcf9f91d8d2ca532ee86c165ca0b6cbc79d.json
deleted file mode 100644
index 678f3a4..0000000
--- a/graphify-out/cache/b43d9d274acca9b0585c93baa3ca2dcf9f91d8d2ca532ee86c165ca0b6cbc79d.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_api_shopping_list_py", "label": "shopping_list.py", "file_type": "code", "source_file": "backend/app/api/shopping_list.py", "source_location": "L1"}, {"id": "shopping_list_parse_uuid", "label": "_parse_uuid()", "file_type": "code", "source_file": "backend/app/api/shopping_list.py", "source_location": "L18"}, {"id": "shopping_list_get_shopping_list", "label": "get_shopping_list()", "file_type": "code", "source_file": "backend/app/api/shopping_list.py", "source_location": "L28"}, {"id": "shopping_list_print_shopping_list", "label": "print_shopping_list()", "file_type": "code", "source_file": "backend/app/api/shopping_list.py", "source_location": "L155"}], "edges": [{"source": "backend_app_api_shopping_list_py", "target": "fastapi", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/shopping_list.py", "source_location": "L1", "weight": 1.0}, {"source": "backend_app_api_shopping_list_py", "target": "sqlalchemy_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/shopping_list.py", "source_location": "L2", "weight": 1.0}, {"source": "backend_app_api_shopping_list_py", "target": "sqlalchemy", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/shopping_list.py", "source_location": "L3", "weight": 1.0}, {"source": "backend_app_api_shopping_list_py", "target": "app_database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/shopping_list.py", "source_location": "L4", "weight": 1.0}, {"source": "backend_app_api_shopping_list_py", "target": "app_models", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/shopping_list.py", "source_location": "L5", "weight": 1.0}, {"source": "backend_app_api_shopping_list_py", "target": "app_schemas", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/shopping_list.py", "source_location": "L9", "weight": 1.0}, {"source": "backend_app_api_shopping_list_py", "target": "datetime", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/shopping_list.py", "source_location": "L10", "weight": 1.0}, {"source": "backend_app_api_shopping_list_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/shopping_list.py", "source_location": "L11", "weight": 1.0}, {"source": "backend_app_api_shopping_list_py", "target": "collections", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/shopping_list.py", "source_location": "L12", "weight": 1.0}, {"source": "backend_app_api_shopping_list_py", "target": "uuid", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/shopping_list.py", "source_location": "L13", "weight": 1.0}, {"source": "backend_app_api_shopping_list_py", "target": "shopping_list_parse_uuid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/shopping_list.py", "source_location": "L18", "weight": 1.0}, {"source": "backend_app_api_shopping_list_py", "target": "shopping_list_get_shopping_list", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/shopping_list.py", "source_location": "L28", "weight": 1.0}, {"source": "backend_app_api_shopping_list_py", "target": "shopping_list_print_shopping_list", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/shopping_list.py", "source_location": "L155", "weight": 1.0}, {"source": "shopping_list_get_shopping_list", "target": "shopping_list_parse_uuid", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/api/shopping_list.py", "source_location": "L64", "weight": 1.0}], "raw_calls": [{"caller_nid": "shopping_list_parse_uuid", "callee": "UUID", "source_file": "backend/app/api/shopping_list.py", "source_location": "L22"}, {"caller_nid": "shopping_list_parse_uuid", "callee": "isinstance", "source_file": "backend/app/api/shopping_list.py", "source_location": "L22"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "first", "source_file": "backend/app/api/shopping_list.py", "source_location": "L29"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "query", "source_file": "backend/app/api/shopping_list.py", "source_location": "L29"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "HTTPException", "source_file": "backend/app/api/shopping_list.py", "source_location": "L31"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "first", "source_file": "backend/app/api/shopping_list.py", "source_location": "L33"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "order_by", "source_file": "backend/app/api/shopping_list.py", "source_location": "L33"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "filter", "source_file": "backend/app/api/shopping_list.py", "source_location": "L33"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "query", "source_file": "backend/app/api/shopping_list.py", "source_location": "L33"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "in_", "source_file": "backend/app/api/shopping_list.py", "source_location": "L35"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "desc", "source_file": "backend/app/api/shopping_list.py", "source_location": "L36"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "first", "source_file": "backend/app/api/shopping_list.py", "source_location": "L39"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "order_by", "source_file": "backend/app/api/shopping_list.py", "source_location": "L39"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "filter", "source_file": "backend/app/api/shopping_list.py", "source_location": "L39"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "query", "source_file": "backend/app/api/shopping_list.py", "source_location": "L39"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "desc", "source_file": "backend/app/api/shopping_list.py", "source_location": "L41"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "ShoppingListResponse", "source_file": "backend/app/api/shopping_list.py", "source_location": "L44"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "today", "source_file": "backend/app/api/shopping_list.py", "source_location": "L45"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "all", "source_file": "backend/app/api/shopping_list.py", "source_location": "L53"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "filter", "source_file": "backend/app/api/shopping_list.py", "source_location": "L53"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "query", "source_file": "backend/app/api/shopping_list.py", "source_location": "L53"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "set", "source_file": "backend/app/api/shopping_list.py", "source_location": "L59"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "first", "source_file": "backend/app/api/shopping_list.py", "source_location": "L61"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "filter", "source_file": "backend/app/api/shopping_list.py", "source_location": "L61"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "query", "source_file": "backend/app/api/shopping_list.py", "source_location": "L61"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "get", "source_file": "backend/app/api/shopping_list.py", "source_location": "L64"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "add", "source_file": "backend/app/api/shopping_list.py", "source_location": "L66"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "all", "source_file": "backend/app/api/shopping_list.py", "source_location": "L69"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "filter", "source_file": "backend/app/api/shopping_list.py", "source_location": "L69"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "query", "source_file": "backend/app/api/shopping_list.py", "source_location": "L69"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "in_", "source_file": "backend/app/api/shopping_list.py", "source_location": "L70"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "all", "source_file": "backend/app/api/shopping_list.py", "source_location": "L76"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "filter", "source_file": "backend/app/api/shopping_list.py", "source_location": "L76"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "query", "source_file": "backend/app/api/shopping_list.py", "source_location": "L76"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "in_", "source_file": "backend/app/api/shopping_list.py", "source_location": "L77"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "defaultdict", "source_file": "backend/app/api/shopping_list.py", "source_location": "L83"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "first", "source_file": "backend/app/api/shopping_list.py", "source_location": "L86"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "filter", "source_file": "backend/app/api/shopping_list.py", "source_location": "L86"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "query", "source_file": "backend/app/api/shopping_list.py", "source_location": "L86"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "get", "source_file": "backend/app/api/shopping_list.py", "source_location": "L89"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "get", "source_file": "backend/app/api/shopping_list.py", "source_location": "L90"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "get", "source_file": "backend/app/api/shopping_list.py", "source_location": "L95"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "get", "source_file": "backend/app/api/shopping_list.py", "source_location": "L96"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "lower", "source_file": "backend/app/api/shopping_list.py", "source_location": "L98"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "items", "source_file": "backend/app/api/shopping_list.py", "source_location": "L108"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "get", "source_file": "backend/app/api/shopping_list.py", "source_location": "L109"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "get", "source_file": "backend/app/api/shopping_list.py", "source_location": "L112"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "float", "source_file": "backend/app/api/shopping_list.py", "source_location": "L113"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "float", "source_file": "backend/app/api/shopping_list.py", "source_location": "L120"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "append", "source_file": "backend/app/api/shopping_list.py", "source_location": "L127"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "ShoppingListItem", "source_file": "backend/app/api/shopping_list.py", "source_location": "L127"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "get", "source_file": "backend/app/api/shopping_list.py", "source_location": "L136"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "defaultdict", "source_file": "backend/app/api/shopping_list.py", "source_location": "L140"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "append", "source_file": "backend/app/api/shopping_list.py", "source_location": "L143"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "ShoppingListResponse", "source_file": "backend/app/api/shopping_list.py", "source_location": "L145"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "round", "source_file": "backend/app/api/shopping_list.py", "source_location": "L148"}, {"caller_nid": "shopping_list_get_shopping_list", "callee": "dict", "source_file": "backend/app/api/shopping_list.py", "source_location": "L150"}, {"caller_nid": "shopping_list_print_shopping_list", "callee": "__wrapped__", "source_file": "backend/app/api/shopping_list.py", "source_location": "L156"}, {"caller_nid": "shopping_list_print_shopping_list", "callee": "items", "source_file": "backend/app/api/shopping_list.py", "source_location": "L180"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/b5562baa062a947c869e10e465119b526f4dce361c49153de7bb43cf78780204.json b/graphify-out/cache/b5562baa062a947c869e10e465119b526f4dce361c49153de7bb43cf78780204.json
deleted file mode 100644
index 8c62d16..0000000
--- a/graphify-out/cache/b5562baa062a947c869e10e465119b526f4dce361c49153de7bb43cf78780204.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_api_ingredients_py", "label": "ingredients.py", "file_type": "code", "source_file": "backend/app/api/ingredients.py", "source_location": "L1"}, {"id": "ingredients_list_ingredients", "label": "list_ingredients()", "file_type": "code", "source_file": "backend/app/api/ingredients.py", "source_location": "L33"}, {"id": "ingredients_get_ingredient", "label": "get_ingredient()", "file_type": "code", "source_file": "backend/app/api/ingredients.py", "source_location": "L51"}, {"id": "ingredients_create_ingredient", "label": "create_ingredient()", "file_type": "code", "source_file": "backend/app/api/ingredients.py", "source_location": "L59"}, {"id": "ingredients_update_ingredient", "label": "update_ingredient()", "file_type": "code", "source_file": "backend/app/api/ingredients.py", "source_location": "L79"}, {"id": "ingredients_delete_ingredient", "label": "delete_ingredient()", "file_type": "code", "source_file": "backend/app/api/ingredients.py", "source_location": "L108"}, {"id": "ingredients_pinmatchbody", "label": "_PinMatchBody", "file_type": "code", "source_file": "backend/app/api/ingredients.py", "source_location": "L117"}, {"id": "basemodel", "label": "BaseModel", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "ingredients_pin_match", "label": "pin_match()", "file_type": "code", "source_file": "backend/app/api/ingredients.py", "source_location": "L127"}, {"id": "ingredients_unpin_match", "label": "unpin_match()", "file_type": "code", "source_file": "backend/app/api/ingredients.py", "source_location": "L170"}], "edges": [{"source": "backend_app_api_ingredients_py", "target": "decimal", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/ingredients.py", "source_location": "L3", "weight": 1.0}, {"source": "backend_app_api_ingredients_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/ingredients.py", "source_location": "L4", "weight": 1.0}, {"source": "backend_app_api_ingredients_py", "target": "uuid", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/ingredients.py", "source_location": "L5", "weight": 1.0}, {"source": "backend_app_api_ingredients_py", "target": "fastapi", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/ingredients.py", "source_location": "L7", "weight": 1.0}, {"source": "backend_app_api_ingredients_py", "target": "pydantic", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/ingredients.py", "source_location": "L8", "weight": 1.0}, {"source": "backend_app_api_ingredients_py", "target": "sqlalchemy", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/ingredients.py", "source_location": "L9", "weight": 1.0}, {"source": "backend_app_api_ingredients_py", "target": "sqlalchemy_exc", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/ingredients.py", "source_location": "L10", "weight": 1.0}, {"source": "backend_app_api_ingredients_py", "target": "sqlalchemy_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/ingredients.py", "source_location": "L11", "weight": 1.0}, {"source": "backend_app_api_ingredients_py", "target": "app_database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/ingredients.py", "source_location": "L13", "weight": 1.0}, {"source": "backend_app_api_ingredients_py", "target": "app_models", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/ingredients.py", "source_location": "L14", "weight": 1.0}, {"source": "backend_app_api_ingredients_py", "target": "app_schemas_ingredient", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/ingredients.py", "source_location": "L15", "weight": 1.0}, {"source": "backend_app_api_ingredients_py", "target": "app_security", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/ingredients.py", "source_location": "L21", "weight": 1.0}, {"source": "backend_app_api_ingredients_py", "target": "ingredients_list_ingredients", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/ingredients.py", "source_location": "L33", "weight": 1.0}, {"source": "backend_app_api_ingredients_py", "target": "ingredients_get_ingredient", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/ingredients.py", "source_location": "L51", "weight": 1.0}, {"source": "backend_app_api_ingredients_py", "target": "ingredients_create_ingredient", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/ingredients.py", "source_location": "L59", "weight": 1.0}, {"source": "backend_app_api_ingredients_py", "target": "ingredients_update_ingredient", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/ingredients.py", "source_location": "L79", "weight": 1.0}, {"source": "backend_app_api_ingredients_py", "target": "ingredients_delete_ingredient", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/ingredients.py", "source_location": "L108", "weight": 1.0}, {"source": "backend_app_api_ingredients_py", "target": "ingredients_pinmatchbody", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/ingredients.py", "source_location": "L117", "weight": 1.0}, {"source": "ingredients_pinmatchbody", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/api/ingredients.py", "source_location": "L117", "weight": 1.0}, {"source": "backend_app_api_ingredients_py", "target": "ingredients_pin_match", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/ingredients.py", "source_location": "L127", "weight": 1.0}, {"source": "backend_app_api_ingredients_py", "target": "ingredients_unpin_match", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/ingredients.py", "source_location": "L170", "weight": 1.0}], "raw_calls": [{"caller_nid": "ingredients_list_ingredients", "callee": "query", "source_file": "backend/app/api/ingredients.py", "source_location": "L38"}, {"caller_nid": "ingredients_list_ingredients", "callee": "lower", "source_file": "backend/app/api/ingredients.py", "source_location": "L40"}, {"caller_nid": "ingredients_list_ingredients", "callee": "filter", "source_file": "backend/app/api/ingredients.py", "source_location": "L41"}, {"caller_nid": "ingredients_list_ingredients", "callee": "or_", "source_file": "backend/app/api/ingredients.py", "source_location": "L42"}, {"caller_nid": "ingredients_list_ingredients", "callee": "ilike", "source_file": "backend/app/api/ingredients.py", "source_location": "L43"}, {"caller_nid": "ingredients_list_ingredients", "callee": "any", "source_file": "backend/app/api/ingredients.py", "source_location": "L44"}, {"caller_nid": "ingredients_list_ingredients", "callee": "all", "source_file": "backend/app/api/ingredients.py", "source_location": "L47"}, {"caller_nid": "ingredients_list_ingredients", "callee": "limit", "source_file": "backend/app/api/ingredients.py", "source_location": "L47"}, {"caller_nid": "ingredients_list_ingredients", "callee": "order_by", "source_file": "backend/app/api/ingredients.py", "source_location": "L47"}, {"caller_nid": "ingredients_get_ingredient", "callee": "first", "source_file": "backend/app/api/ingredients.py", "source_location": "L52"}, {"caller_nid": "ingredients_get_ingredient", "callee": "filter", "source_file": "backend/app/api/ingredients.py", "source_location": "L52"}, {"caller_nid": "ingredients_get_ingredient", "callee": "query", "source_file": "backend/app/api/ingredients.py", "source_location": "L52"}, {"caller_nid": "ingredients_get_ingredient", "callee": "HTTPException", "source_file": "backend/app/api/ingredients.py", "source_location": "L54"}, {"caller_nid": "ingredients_create_ingredient", "callee": "Ingredient", "source_file": "backend/app/api/ingredients.py", "source_location": "L60"}, {"caller_nid": "ingredients_create_ingredient", "callee": "lower", "source_file": "backend/app/api/ingredients.py", "source_location": "L62"}, {"caller_nid": "ingredients_create_ingredient", "callee": "add", "source_file": "backend/app/api/ingredients.py", "source_location": "L68"}, {"caller_nid": "ingredients_create_ingredient", "callee": "commit", "source_file": "backend/app/api/ingredients.py", "source_location": "L70"}, {"caller_nid": "ingredients_create_ingredient", "callee": "rollback", "source_file": "backend/app/api/ingredients.py", "source_location": "L72"}, {"caller_nid": "ingredients_create_ingredient", "callee": "HTTPException", "source_file": "backend/app/api/ingredients.py", "source_location": "L73"}, {"caller_nid": "ingredients_create_ingredient", "callee": "refresh", "source_file": "backend/app/api/ingredients.py", "source_location": "L74"}, {"caller_nid": "ingredients_update_ingredient", "callee": "first", "source_file": "backend/app/api/ingredients.py", "source_location": "L84"}, {"caller_nid": "ingredients_update_ingredient", "callee": "filter", "source_file": "backend/app/api/ingredients.py", "source_location": "L84"}, {"caller_nid": "ingredients_update_ingredient", "callee": "query", "source_file": "backend/app/api/ingredients.py", "source_location": "L84"}, {"caller_nid": "ingredients_update_ingredient", "callee": "HTTPException", "source_file": "backend/app/api/ingredients.py", "source_location": "L86"}, {"caller_nid": "ingredients_update_ingredient", "callee": "model_dump", "source_file": "backend/app/api/ingredients.py", "source_location": "L87"}, {"caller_nid": "ingredients_update_ingredient", "callee": "lower", "source_file": "backend/app/api/ingredients.py", "source_location": "L90"}, {"caller_nid": "ingredients_update_ingredient", "callee": "setattr", "source_file": "backend/app/api/ingredients.py", "source_location": "L93"}, {"caller_nid": "ingredients_update_ingredient", "callee": "commit", "source_file": "backend/app/api/ingredients.py", "source_location": "L95"}, {"caller_nid": "ingredients_update_ingredient", "callee": "rollback", "source_file": "backend/app/api/ingredients.py", "source_location": "L97"}, {"caller_nid": "ingredients_update_ingredient", "callee": "HTTPException", "source_file": "backend/app/api/ingredients.py", "source_location": "L98"}, {"caller_nid": "ingredients_update_ingredient", "callee": "refresh", "source_file": "backend/app/api/ingredients.py", "source_location": "L99"}, {"caller_nid": "ingredients_delete_ingredient", "callee": "first", "source_file": "backend/app/api/ingredients.py", "source_location": "L109"}, {"caller_nid": "ingredients_delete_ingredient", "callee": "filter", "source_file": "backend/app/api/ingredients.py", "source_location": "L109"}, {"caller_nid": "ingredients_delete_ingredient", "callee": "query", "source_file": "backend/app/api/ingredients.py", "source_location": "L109"}, {"caller_nid": "ingredients_delete_ingredient", "callee": "HTTPException", "source_file": "backend/app/api/ingredients.py", "source_location": "L111"}, {"caller_nid": "ingredients_delete_ingredient", "callee": "delete", "source_file": "backend/app/api/ingredients.py", "source_location": "L112"}, {"caller_nid": "ingredients_delete_ingredient", "callee": "commit", "source_file": "backend/app/api/ingredients.py", "source_location": "L113"}, {"caller_nid": "ingredients_delete_ingredient", "callee": "Response", "source_file": "backend/app/api/ingredients.py", "source_location": "L114"}, {"caller_nid": "ingredients_pin_match", "callee": "first", "source_file": "backend/app/api/ingredients.py", "source_location": "L133"}, {"caller_nid": "ingredients_pin_match", "callee": "filter", "source_file": "backend/app/api/ingredients.py", "source_location": "L133"}, {"caller_nid": "ingredients_pin_match", "callee": "query", "source_file": "backend/app/api/ingredients.py", "source_location": "L133"}, {"caller_nid": "ingredients_pin_match", "callee": "Decimal", "source_file": "backend/app/api/ingredients.py", "source_location": "L142"}, {"caller_nid": "ingredients_pin_match", "callee": "str", "source_file": "backend/app/api/ingredients.py", "source_location": "L142"}, {"caller_nid": "ingredients_pin_match", "callee": "round", "source_file": "backend/app/api/ingredients.py", "source_location": "L142"}, {"caller_nid": "ingredients_pin_match", "callee": "commit", "source_file": "backend/app/api/ingredients.py", "source_location": "L143"}, {"caller_nid": "ingredients_pin_match", "callee": "refresh", "source_file": "backend/app/api/ingredients.py", "source_location": "L144"}, {"caller_nid": "ingredients_pin_match", "callee": "IngredientGroceryMatch", "source_file": "backend/app/api/ingredients.py", "source_location": "L146"}, {"caller_nid": "ingredients_pin_match", "callee": "Decimal", "source_file": "backend/app/api/ingredients.py", "source_location": "L149"}, {"caller_nid": "ingredients_pin_match", "callee": "str", "source_file": "backend/app/api/ingredients.py", "source_location": "L149"}, {"caller_nid": "ingredients_pin_match", "callee": "round", "source_file": "backend/app/api/ingredients.py", "source_location": "L149"}, {"caller_nid": "ingredients_pin_match", "callee": "add", "source_file": "backend/app/api/ingredients.py", "source_location": "L152"}, {"caller_nid": "ingredients_pin_match", "callee": "commit", "source_file": "backend/app/api/ingredients.py", "source_location": "L153"}, {"caller_nid": "ingredients_pin_match", "callee": "refresh", "source_file": "backend/app/api/ingredients.py", "source_location": "L154"}, {"caller_nid": "ingredients_unpin_match", "callee": "first", "source_file": "backend/app/api/ingredients.py", "source_location": "L171"}, {"caller_nid": "ingredients_unpin_match", "callee": "filter", "source_file": "backend/app/api/ingredients.py", "source_location": "L171"}, {"caller_nid": "ingredients_unpin_match", "callee": "query", "source_file": "backend/app/api/ingredients.py", "source_location": "L171"}, {"caller_nid": "ingredients_unpin_match", "callee": "HTTPException", "source_file": "backend/app/api/ingredients.py", "source_location": "L173"}, {"caller_nid": "ingredients_unpin_match", "callee": "delete", "source_file": "backend/app/api/ingredients.py", "source_location": "L174"}, {"caller_nid": "ingredients_unpin_match", "callee": "commit", "source_file": "backend/app/api/ingredients.py", "source_location": "L175"}, {"caller_nid": "ingredients_unpin_match", "callee": "Response", "source_file": "backend/app/api/ingredients.py", "source_location": "L176"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/b712962d7d969510962befbacab14c0e25565ae01af9a5c6f37fc90434614d1e.json b/graphify-out/cache/b712962d7d969510962befbacab14c0e25565ae01af9a5c6f37fc90434614d1e.json
deleted file mode 100644
index 9f719e1..0000000
--- a/graphify-out/cache/b712962d7d969510962befbacab14c0e25565ae01af9a5c6f37fc90434614d1e.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_tests_test_approval_py", "label": "test_approval.py", "file_type": "code", "source_file": "backend/tests/test_approval.py", "source_location": "L1"}, {"id": "test_approval_test_issue_and_verify_token_roundtrip", "label": "test_issue_and_verify_token_roundtrip()", "file_type": "code", "source_file": "backend/tests/test_approval.py", "source_location": "L23"}, {"id": "test_approval_test_verify_rejects_tampered_token", "label": "test_verify_rejects_tampered_token()", "file_type": "code", "source_file": "backend/tests/test_approval.py", "source_location": "L32"}, {"id": "test_approval_test_verify_rejects_expired_token", "label": "test_verify_rejects_expired_token()", "file_type": "code", "source_file": "backend/tests/test_approval.py", "source_location": "L42"}, {"id": "test_approval_scenario", "label": "scenario()", "file_type": "code", "source_file": "backend/tests/test_approval.py", "source_location": "L74"}, {"id": "test_approval_test_consume_token_single_use", "label": "test_consume_token_single_use()", "file_type": "code", "source_file": "backend/tests/test_approval.py", "source_location": "L159"}, {"id": "test_approval_test_vote_get_renders_html", "label": "test_vote_get_renders_html()", "file_type": "code", "source_file": "backend/tests/test_approval.py", "source_location": "L186"}, {"id": "test_approval_test_vote_post_records_and_decides", "label": "test_vote_post_records_and_decides()", "file_type": "code", "source_file": "backend/tests/test_approval.py", "source_location": "L207"}, {"id": "test_approval_rationale_1", "label": "R2-B: approval-token + per-voter vote round-trip tests. - Pure unit tests for `", "file_type": "rationale", "source_file": "backend/tests/test_approval.py", "source_location": "L1"}, {"id": "test_approval_rationale_43", "label": "itsdangerous reads `time.time()` \u2014 patch the time module's `time` attribute", "file_type": "rationale", "source_file": "backend/tests/test_approval.py", "source_location": "L43"}, {"id": "test_approval_rationale_75", "label": "Create profile + 2 voters + recipe + plan + item, all in one shot. Uses the", "file_type": "rationale", "source_file": "backend/tests/test_approval.py", "source_location": "L75"}, {"id": "test_approval_rationale_208", "label": "First voter approves -> still pending (Bob hasn't voted). Then Bob approves", "file_type": "rationale", "source_file": "backend/tests/test_approval.py", "source_location": "L208"}], "edges": [{"source": "backend_tests_test_approval_py", "target": "time", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_approval.py", "source_location": "L10", "weight": 1.0}, {"source": "backend_tests_test_approval_py", "target": "uuid", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_approval.py", "source_location": "L11", "weight": 1.0}, {"source": "backend_tests_test_approval_py", "target": "datetime", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_approval.py", "source_location": "L12", "weight": 1.0}, {"source": "backend_tests_test_approval_py", "target": "pytest", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_approval.py", "source_location": "L14", "weight": 1.0}, {"source": "backend_tests_test_approval_py", "target": "fastapi", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_approval.py", "source_location": "L15", "weight": 1.0}, {"source": "backend_tests_test_approval_py", "target": "app_services", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_approval.py", "source_location": "L17", "weight": 1.0}, {"source": "backend_tests_test_approval_py", "target": "test_approval_test_issue_and_verify_token_roundtrip", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_approval.py", "source_location": "L23", "weight": 1.0}, {"source": "backend_tests_test_approval_py", "target": "test_approval_test_verify_rejects_tampered_token", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_approval.py", "source_location": "L32", "weight": 1.0}, {"source": "backend_tests_test_approval_py", "target": "test_approval_test_verify_rejects_expired_token", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_approval.py", "source_location": "L42", "weight": 1.0}, {"source": "backend_tests_test_approval_py", "target": "test_approval_scenario", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_approval.py", "source_location": "L74", "weight": 1.0}, {"source": "backend_tests_test_approval_py", "target": "test_approval_test_consume_token_single_use", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_approval.py", "source_location": "L159", "weight": 1.0}, {"source": "backend_tests_test_approval_py", "target": "test_approval_test_vote_get_renders_html", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_approval.py", "source_location": "L186", "weight": 1.0}, {"source": "backend_tests_test_approval_py", "target": "test_approval_test_vote_post_records_and_decides", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_approval.py", "source_location": "L207", "weight": 1.0}, {"source": "test_approval_rationale_1", "target": "backend_tests_test_approval_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_approval.py", "source_location": "L1", "weight": 1.0}, {"source": "test_approval_rationale_43", "target": "test_approval_test_verify_rejects_expired_token", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_approval.py", "source_location": "L43", "weight": 1.0}, {"source": "test_approval_rationale_75", "target": "test_approval_scenario", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_approval.py", "source_location": "L75", "weight": 1.0}, {"source": "test_approval_rationale_208", "target": "test_approval_test_vote_post_records_and_decides", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_approval.py", "source_location": "L208", "weight": 1.0}], "raw_calls": [{"caller_nid": "test_approval_test_issue_and_verify_token_roundtrip", "callee": "uuid4", "source_file": "backend/tests/test_approval.py", "source_location": "L24"}, {"caller_nid": "test_approval_test_issue_and_verify_token_roundtrip", "callee": "uuid4", "source_file": "backend/tests/test_approval.py", "source_location": "L25"}, {"caller_nid": "test_approval_test_issue_and_verify_token_roundtrip", "callee": "issue_token", "source_file": "backend/tests/test_approval.py", "source_location": "L26"}, {"caller_nid": "test_approval_test_issue_and_verify_token_roundtrip", "callee": "verify_token", "source_file": "backend/tests/test_approval.py", "source_location": "L27"}, {"caller_nid": "test_approval_test_issue_and_verify_token_roundtrip", "callee": "str", "source_file": "backend/tests/test_approval.py", "source_location": "L28"}, {"caller_nid": "test_approval_test_issue_and_verify_token_roundtrip", "callee": "str", "source_file": "backend/tests/test_approval.py", "source_location": "L29"}, {"caller_nid": "test_approval_test_verify_rejects_tampered_token", "callee": "uuid4", "source_file": "backend/tests/test_approval.py", "source_location": "L33"}, {"caller_nid": "test_approval_test_verify_rejects_tampered_token", "callee": "uuid4", "source_file": "backend/tests/test_approval.py", "source_location": "L34"}, {"caller_nid": "test_approval_test_verify_rejects_tampered_token", "callee": "issue_token", "source_file": "backend/tests/test_approval.py", "source_location": "L35"}, {"caller_nid": "test_approval_test_verify_rejects_tampered_token", "callee": "endswith", "source_file": "backend/tests/test_approval.py", "source_location": "L36"}, {"caller_nid": "test_approval_test_verify_rejects_tampered_token", "callee": "raises", "source_file": "backend/tests/test_approval.py", "source_location": "L37"}, {"caller_nid": "test_approval_test_verify_rejects_tampered_token", "callee": "verify_token", "source_file": "backend/tests/test_approval.py", "source_location": "L38"}, {"caller_nid": "test_approval_test_verify_rejects_expired_token", "callee": "uuid4", "source_file": "backend/tests/test_approval.py", "source_location": "L48"}, {"caller_nid": "test_approval_test_verify_rejects_expired_token", "callee": "uuid4", "source_file": "backend/tests/test_approval.py", "source_location": "L49"}, {"caller_nid": "test_approval_test_verify_rejects_expired_token", "callee": "issue_token", "source_file": "backend/tests/test_approval.py", "source_location": "L52"}, {"caller_nid": "test_approval_test_verify_rejects_expired_token", "callee": "time", "source_file": "backend/tests/test_approval.py", "source_location": "L55"}, {"caller_nid": "test_approval_test_verify_rejects_expired_token", "callee": "setattr", "source_file": "backend/tests/test_approval.py", "source_location": "L63"}, {"caller_nid": "test_approval_test_verify_rejects_expired_token", "callee": "raises", "source_file": "backend/tests/test_approval.py", "source_location": "L65"}, {"caller_nid": "test_approval_test_verify_rejects_expired_token", "callee": "verify_token", "source_file": "backend/tests/test_approval.py", "source_location": "L66"}, {"caller_nid": "test_approval_scenario", "callee": "uuid4", "source_file": "backend/tests/test_approval.py", "source_location": "L91"}, {"caller_nid": "test_approval_scenario", "callee": "FamilyProfile", "source_file": "backend/tests/test_approval.py", "source_location": "L93"}, {"caller_nid": "test_approval_scenario", "callee": "add", "source_file": "backend/tests/test_approval.py", "source_location": "L99"}, {"caller_nid": "test_approval_scenario", "callee": "flush", "source_file": "backend/tests/test_approval.py", "source_location": "L100"}, {"caller_nid": "test_approval_scenario", "callee": "FamilyMember", "source_file": "backend/tests/test_approval.py", "source_location": "L102"}, {"caller_nid": "test_approval_scenario", "callee": "FamilyMember", "source_file": "backend/tests/test_approval.py", "source_location": "L108"}, {"caller_nid": "test_approval_scenario", "callee": "add_all", "source_file": "backend/tests/test_approval.py", "source_location": "L114"}, {"caller_nid": "test_approval_scenario", "callee": "flush", "source_file": "backend/tests/test_approval.py", "source_location": "L115"}, {"caller_nid": "test_approval_scenario", "callee": "Recipe", "source_file": "backend/tests/test_approval.py", "source_location": "L117"}, {"caller_nid": "test_approval_scenario", "callee": "add", "source_file": "backend/tests/test_approval.py", "source_location": "L125"}, {"caller_nid": "test_approval_scenario", "callee": "flush", "source_file": "backend/tests/test_approval.py", "source_location": "L126"}, {"caller_nid": "test_approval_scenario", "callee": "MealPlan", "source_file": "backend/tests/test_approval.py", "source_location": "L128"}, {"caller_nid": "test_approval_scenario", "callee": "today", "source_file": "backend/tests/test_approval.py", "source_location": "L130"}, {"caller_nid": "test_approval_scenario", "callee": "timedelta", "source_file": "backend/tests/test_approval.py", "source_location": "L130"}, {"caller_nid": "test_approval_scenario", "callee": "add", "source_file": "backend/tests/test_approval.py", "source_location": "L133"}, {"caller_nid": "test_approval_scenario", "callee": "flush", "source_file": "backend/tests/test_approval.py", "source_location": "L134"}, {"caller_nid": "test_approval_scenario", "callee": "MealPlanItem", "source_file": "backend/tests/test_approval.py", "source_location": "L136"}, {"caller_nid": "test_approval_scenario", "callee": "add", "source_file": "backend/tests/test_approval.py", "source_location": "L142"}, {"caller_nid": "test_approval_scenario", "callee": "flush", "source_file": "backend/tests/test_approval.py", "source_location": "L143"}, {"caller_nid": "test_approval_test_consume_token_single_use", "callee": "issue_token", "source_file": "backend/tests/test_approval.py", "source_location": "L164"}, {"caller_nid": "test_approval_test_consume_token_single_use", "callee": "consume_token", "source_file": "backend/tests/test_approval.py", "source_location": "L167"}, {"caller_nid": "test_approval_test_consume_token_single_use", "callee": "add", "source_file": "backend/tests/test_approval.py", "source_location": "L172"}, {"caller_nid": "test_approval_test_consume_token_single_use", "callee": "MealPlanVote", "source_file": "backend/tests/test_approval.py", "source_location": "L172"}, {"caller_nid": "test_approval_test_consume_token_single_use", "callee": "flush", "source_file": "backend/tests/test_approval.py", "source_location": "L177"}, {"caller_nid": "test_approval_test_consume_token_single_use", "callee": "raises", "source_file": "backend/tests/test_approval.py", "source_location": "L180"}, {"caller_nid": "test_approval_test_consume_token_single_use", "callee": "consume_token", "source_file": "backend/tests/test_approval.py", "source_location": "L181"}, {"caller_nid": "test_approval_test_vote_get_renders_html", "callee": "issue_token", "source_file": "backend/tests/test_approval.py", "source_location": "L189"}, {"caller_nid": "test_approval_test_vote_get_renders_html", "callee": "get", "source_file": "backend/tests/test_approval.py", "source_location": "L191"}, {"caller_nid": "test_approval_test_vote_get_renders_html", "callee": "get", "source_file": "backend/tests/test_approval.py", "source_location": "L193"}, {"caller_nid": "test_approval_test_vote_get_renders_html", "callee": "find", "source_file": "backend/tests/test_approval.py", "source_location": "L199"}, {"caller_nid": "test_approval_test_vote_get_renders_html", "callee": "find", "source_file": "backend/tests/test_approval.py", "source_location": "L200"}, {"caller_nid": "test_approval_test_vote_post_records_and_decides", "callee": "issue_token", "source_file": "backend/tests/test_approval.py", "source_location": "L216"}, {"caller_nid": "test_approval_test_vote_post_records_and_decides", "callee": "post", "source_file": "backend/tests/test_approval.py", "source_location": "L217"}, {"caller_nid": "test_approval_test_vote_post_records_and_decides", "callee": "json", "source_file": "backend/tests/test_approval.py", "source_location": "L223"}, {"caller_nid": "test_approval_test_vote_post_records_and_decides", "callee": "issue_token", "source_file": "backend/tests/test_approval.py", "source_location": "L229"}, {"caller_nid": "test_approval_test_vote_post_records_and_decides", "callee": "post", "source_file": "backend/tests/test_approval.py", "source_location": "L230"}, {"caller_nid": "test_approval_test_vote_post_records_and_decides", "callee": "json", "source_file": "backend/tests/test_approval.py", "source_location": "L236"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/b97474fd6a923116bab90e4d42290e4e16dfc35ff027d54044b3bd6563991375.json b/graphify-out/cache/b97474fd6a923116bab90e4d42290e4e16dfc35ff027d54044b3bd6563991375.json
deleted file mode 100644
index 34b7d33..0000000
--- a/graphify-out/cache/b97474fd6a923116bab90e4d42290e4e16dfc35ff027d54044b3bd6563991375.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "frontend_src_components_ui_textarea_tsx", "label": "Textarea.tsx", "file_type": "code", "source_file": "frontend/src/components/ui/Textarea.tsx", "source_location": "L1"}, {"id": "textarea_cn", "label": "cn()", "file_type": "code", "source_file": "frontend/src/components/ui/Textarea.tsx", "source_location": "L17"}], "edges": [{"source": "frontend_src_components_ui_textarea_tsx", "target": "react", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/components/ui/Textarea.tsx", "source_location": "L1", "weight": 1.0}, {"source": "frontend_src_components_ui_textarea_tsx", "target": "frontend_src_components_ui_lib_utils", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/components/ui/Textarea.tsx", "source_location": "L2", "weight": 1.0}, {"source": "frontend_src_components_ui_textarea_tsx", "target": "textarea_cn", "relation": "contains", "confidence": "EXTRACTED", "source_file": "frontend/src/components/ui/Textarea.tsx", "source_location": "L17", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/graphify-out/cache/b9c16adc387de022f8fecee94173535b847d8b07922242ecd0298f5bf9a69b21.json b/graphify-out/cache/b9c16adc387de022f8fecee94173535b847d8b07922242ecd0298f5bf9a69b21.json
deleted file mode 100644
index 40a1d19..0000000
--- a/graphify-out/cache/b9c16adc387de022f8fecee94173535b847d8b07922242ecd0298f5bf9a69b21.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_tests_test_planner_score_py", "label": "test_planner_score.py", "file_type": "code", "source_file": "backend/tests/test_planner_score.py", "source_location": "L1"}, {"id": "test_planner_score_test_time_bonus_capped_at_ideal", "label": "test_time_bonus_capped_at_ideal()", "file_type": "code", "source_file": "backend/tests/test_planner_score.py", "source_location": "L18"}, {"id": "test_planner_score_test_time_bonus_decays_to_zero_at_full", "label": "test_time_bonus_decays_to_zero_at_full()", "file_type": "code", "source_file": "backend/tests/test_planner_score.py", "source_location": "L23"}, {"id": "test_planner_score_test_time_bonus_linear_midpoint", "label": "test_time_bonus_linear_midpoint()", "file_type": "code", "source_file": "backend/tests/test_planner_score.py", "source_location": "L27"}, {"id": "test_planner_score_test_recency_bonus_full_when_long_ago", "label": "test_recency_bonus_full_when_long_ago()", "file_type": "code", "source_file": "backend/tests/test_planner_score.py", "source_location": "L32"}, {"id": "test_planner_score_test_recency_bonus_zero_when_just_eligible", "label": "test_recency_bonus_zero_when_just_eligible()", "file_type": "code", "source_file": "backend/tests/test_planner_score.py", "source_location": "L38"}, {"id": "test_planner_score_test_recency_bonus_full_when_never_cooked", "label": "test_recency_bonus_full_when_never_cooked()", "file_type": "code", "source_file": "backend/tests/test_planner_score.py", "source_location": "L45"}, {"id": "test_planner_score_test_normalize_savings_minmax", "label": "test_normalize_savings_minmax()", "file_type": "code", "source_file": "backend/tests/test_planner_score.py", "source_location": "L49"}, {"id": "test_planner_score_test_normalize_savings_uniform_returns_zeros", "label": "test_normalize_savings_uniform_returns_zeros()", "file_type": "code", "source_file": "backend/tests/test_planner_score.py", "source_location": "L54"}, {"id": "test_planner_score_test_score_recipes_orders_by_combined_score", "label": "test_score_recipes_orders_by_combined_score()", "file_type": "code", "source_file": "backend/tests/test_planner_score.py", "source_location": "L59"}], "edges": [{"source": "backend_tests_test_planner_score_py", "target": "datetime", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_score.py", "source_location": "L1", "weight": 1.0}, {"source": "backend_tests_test_planner_score_py", "target": "decimal", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_score.py", "source_location": "L2", "weight": 1.0}, {"source": "backend_tests_test_planner_score_py", "target": "uuid", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_score.py", "source_location": "L3", "weight": 1.0}, {"source": "backend_tests_test_planner_score_py", "target": "app_services_planner_config", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_score.py", "source_location": "L5", "weight": 1.0}, {"source": "backend_tests_test_planner_score_py", "target": "app_services_planner_score", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_score.py", "source_location": "L6", "weight": 1.0}, {"source": "backend_tests_test_planner_score_py", "target": "app_services_planner_types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_score.py", "source_location": "L12", "weight": 1.0}, {"source": "backend_tests_test_planner_score_py", "target": "test_planner_score_test_time_bonus_capped_at_ideal", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_score.py", "source_location": "L18", "weight": 1.0}, {"source": "backend_tests_test_planner_score_py", "target": "test_planner_score_test_time_bonus_decays_to_zero_at_full", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_score.py", "source_location": "L23", "weight": 1.0}, {"source": "backend_tests_test_planner_score_py", "target": "test_planner_score_test_time_bonus_linear_midpoint", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_score.py", "source_location": "L27", "weight": 1.0}, {"source": "backend_tests_test_planner_score_py", "target": "test_planner_score_test_recency_bonus_full_when_long_ago", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_score.py", "source_location": "L32", "weight": 1.0}, {"source": "backend_tests_test_planner_score_py", "target": "test_planner_score_test_recency_bonus_zero_when_just_eligible", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_score.py", "source_location": "L38", "weight": 1.0}, {"source": "backend_tests_test_planner_score_py", "target": "test_planner_score_test_recency_bonus_full_when_never_cooked", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_score.py", "source_location": "L45", "weight": 1.0}, {"source": "backend_tests_test_planner_score_py", "target": "test_planner_score_test_normalize_savings_minmax", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_score.py", "source_location": "L49", "weight": 1.0}, {"source": "backend_tests_test_planner_score_py", "target": "test_planner_score_test_normalize_savings_uniform_returns_zeros", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_score.py", "source_location": "L54", "weight": 1.0}, {"source": "backend_tests_test_planner_score_py", "target": "test_planner_score_test_score_recipes_orders_by_combined_score", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_score.py", "source_location": "L59", "weight": 1.0}], "raw_calls": [{"caller_nid": "test_planner_score_test_time_bonus_capped_at_ideal", "callee": "time_bonus", "source_file": "backend/tests/test_planner_score.py", "source_location": "L19"}, {"caller_nid": "test_planner_score_test_time_bonus_capped_at_ideal", "callee": "time_bonus", "source_file": "backend/tests/test_planner_score.py", "source_location": "L20"}, {"caller_nid": "test_planner_score_test_time_bonus_decays_to_zero_at_full", "callee": "time_bonus", "source_file": "backend/tests/test_planner_score.py", "source_location": "L24"}, {"caller_nid": "test_planner_score_test_time_bonus_linear_midpoint", "callee": "abs", "source_file": "backend/tests/test_planner_score.py", "source_location": "L29"}, {"caller_nid": "test_planner_score_test_time_bonus_linear_midpoint", "callee": "time_bonus", "source_file": "backend/tests/test_planner_score.py", "source_location": "L29"}, {"caller_nid": "test_planner_score_test_recency_bonus_full_when_long_ago", "callee": "date", "source_file": "backend/tests/test_planner_score.py", "source_location": "L33"}, {"caller_nid": "test_planner_score_test_recency_bonus_full_when_long_ago", "callee": "timedelta", "source_file": "backend/tests/test_planner_score.py", "source_location": "L34"}, {"caller_nid": "test_planner_score_test_recency_bonus_full_when_long_ago", "callee": "recency_bonus", "source_file": "backend/tests/test_planner_score.py", "source_location": "L35"}, {"caller_nid": "test_planner_score_test_recency_bonus_zero_when_just_eligible", "callee": "date", "source_file": "backend/tests/test_planner_score.py", "source_location": "L40"}, {"caller_nid": "test_planner_score_test_recency_bonus_zero_when_just_eligible", "callee": "timedelta", "source_file": "backend/tests/test_planner_score.py", "source_location": "L41"}, {"caller_nid": "test_planner_score_test_recency_bonus_zero_when_just_eligible", "callee": "recency_bonus", "source_file": "backend/tests/test_planner_score.py", "source_location": "L42"}, {"caller_nid": "test_planner_score_test_recency_bonus_full_when_never_cooked", "callee": "recency_bonus", "source_file": "backend/tests/test_planner_score.py", "source_location": "L46"}, {"caller_nid": "test_planner_score_test_recency_bonus_full_when_never_cooked", "callee": "date", "source_file": "backend/tests/test_planner_score.py", "source_location": "L46"}, {"caller_nid": "test_planner_score_test_normalize_savings_minmax", "callee": "normalize_savings", "source_file": "backend/tests/test_planner_score.py", "source_location": "L50"}, {"caller_nid": "test_planner_score_test_normalize_savings_minmax", "callee": "Decimal", "source_file": "backend/tests/test_planner_score.py", "source_location": "L50"}, {"caller_nid": "test_planner_score_test_normalize_savings_minmax", "callee": "Decimal", "source_file": "backend/tests/test_planner_score.py", "source_location": "L50"}, {"caller_nid": "test_planner_score_test_normalize_savings_minmax", "callee": "Decimal", "source_file": "backend/tests/test_planner_score.py", "source_location": "L50"}, {"caller_nid": "test_planner_score_test_normalize_savings_uniform_returns_zeros", "callee": "normalize_savings", "source_file": "backend/tests/test_planner_score.py", "source_location": "L55"}, {"caller_nid": "test_planner_score_test_normalize_savings_uniform_returns_zeros", "callee": "Decimal", "source_file": "backend/tests/test_planner_score.py", "source_location": "L55"}, {"caller_nid": "test_planner_score_test_normalize_savings_uniform_returns_zeros", "callee": "Decimal", "source_file": "backend/tests/test_planner_score.py", "source_location": "L55"}, {"caller_nid": "test_planner_score_test_normalize_savings_uniform_returns_zeros", "callee": "Decimal", "source_file": "backend/tests/test_planner_score.py", "source_location": "L55"}, {"caller_nid": "test_planner_score_test_score_recipes_orders_by_combined_score", "callee": "uuid4", "source_file": "backend/tests/test_planner_score.py", "source_location": "L62"}, {"caller_nid": "test_planner_score_test_score_recipes_orders_by_combined_score", "callee": "uuid4", "source_file": "backend/tests/test_planner_score.py", "source_location": "L70"}, {"caller_nid": "test_planner_score_test_score_recipes_orders_by_combined_score", "callee": "RecipeCost", "source_file": "backend/tests/test_planner_score.py", "source_location": "L79"}, {"caller_nid": "test_planner_score_test_score_recipes_orders_by_combined_score", "callee": "Decimal", "source_file": "backend/tests/test_planner_score.py", "source_location": "L81"}, {"caller_nid": "test_planner_score_test_score_recipes_orders_by_combined_score", "callee": "Decimal", "source_file": "backend/tests/test_planner_score.py", "source_location": "L82"}, {"caller_nid": "test_planner_score_test_score_recipes_orders_by_combined_score", "callee": "RecipeCost", "source_file": "backend/tests/test_planner_score.py", "source_location": "L89"}, {"caller_nid": "test_planner_score_test_score_recipes_orders_by_combined_score", "callee": "Decimal", "source_file": "backend/tests/test_planner_score.py", "source_location": "L91"}, {"caller_nid": "test_planner_score_test_score_recipes_orders_by_combined_score", "callee": "Decimal", "source_file": "backend/tests/test_planner_score.py", "source_location": "L92"}, {"caller_nid": "test_planner_score_test_score_recipes_orders_by_combined_score", "callee": "score_recipes", "source_file": "backend/tests/test_planner_score.py", "source_location": "L100"}, {"caller_nid": "test_planner_score_test_score_recipes_orders_by_combined_score", "callee": "date", "source_file": "backend/tests/test_planner_score.py", "source_location": "L105"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/ba96bac641da5ef566a3717011450e85f4be14c3c320dab7e1acaf9e84784c28.json b/graphify-out/cache/ba96bac641da5ef566a3717011450e85f4be14c3c320dab7e1acaf9e84784c28.json
deleted file mode 100644
index 46005b5..0000000
--- a/graphify-out/cache/ba96bac641da5ef566a3717011450e85f4be14c3c320dab7e1acaf9e84784c28.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "frontend_src_pages_login_tsx", "label": "Login.tsx", "file_type": "code", "source_file": "frontend/src/pages/Login.tsx", "source_location": "L1"}, {"id": "login_login", "label": "Login()", "file_type": "code", "source_file": "frontend/src/pages/Login.tsx", "source_location": "L8"}], "edges": [{"source": "frontend_src_pages_login_tsx", "target": "react", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/Login.tsx", "source_location": "L1", "weight": 1.0}, {"source": "frontend_src_pages_login_tsx", "target": "lucide_react", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/Login.tsx", "source_location": "L2", "weight": 1.0}, {"source": "frontend_src_pages_login_tsx", "target": "frontend_src_pages_api", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/Login.tsx", "source_location": "L3", "weight": 1.0}, {"source": "frontend_src_pages_login_tsx", "target": "frontend_src_pages_components_ui_button", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/Login.tsx", "source_location": "L4", "weight": 1.0}, {"source": "frontend_src_pages_login_tsx", "target": "frontend_src_pages_components_ui_card", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/Login.tsx", "source_location": "L5", "weight": 1.0}, {"source": "frontend_src_pages_login_tsx", "target": "frontend_src_pages_components_ui_input", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/Login.tsx", "source_location": "L6", "weight": 1.0}, {"source": "frontend_src_pages_login_tsx", "target": "login_login", "relation": "contains", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/Login.tsx", "source_location": "L8", "weight": 1.0}], "raw_calls": [{"caller_nid": "login_login", "callee": "useState", "source_file": "frontend/src/pages/Login.tsx", "source_location": "L9"}, {"caller_nid": "login_login", "callee": "useState", "source_file": "frontend/src/pages/Login.tsx", "source_location": "L10"}, {"caller_nid": "login_login", "callee": "useState", "source_file": "frontend/src/pages/Login.tsx", "source_location": "L11"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/bca9392423b3787d646d9cb7498a39b011b89d8a5c3db6f82bb86882b0109217.json b/graphify-out/cache/bca9392423b3787d646d9cb7498a39b011b89d8a5c3db6f82bb86882b0109217.json
deleted file mode 100644
index 1ff3c4b..0000000
--- a/graphify-out/cache/bca9392423b3787d646d9cb7498a39b011b89d8a5c3db6f82bb86882b0109217.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_tests_test_smoke_py", "label": "test_smoke.py", "file_type": "code", "source_file": "backend/tests/test_smoke.py", "source_location": "L1"}, {"id": "test_smoke_test_app_imports", "label": "test_app_imports()", "file_type": "code", "source_file": "backend/tests/test_smoke.py", "source_location": "L15"}, {"id": "test_smoke_test_health", "label": "test_health()", "file_type": "code", "source_file": "backend/tests/test_smoke.py", "source_location": "L21"}, {"id": "test_smoke_test_health_db", "label": "test_health_db()", "file_type": "code", "source_file": "backend/tests/test_smoke.py", "source_location": "L28"}, {"id": "test_smoke_test_router_list_endpoints", "label": "test_router_list_endpoints()", "file_type": "code", "source_file": "backend/tests/test_smoke.py", "source_location": "L49"}, {"id": "test_smoke_rationale_1", "label": "Smoke tests: app boots, routers wire up, no import-time crashes. The router-lis", "file_type": "rationale", "source_file": "backend/tests/test_smoke.py", "source_location": "L1"}, {"id": "test_smoke_rationale_50", "label": "Each canonical GET must respond. 200 (handled), 401 (admin-gated), 404 (hand", "file_type": "rationale", "source_file": "backend/tests/test_smoke.py", "source_location": "L50"}], "edges": [{"source": "backend_tests_test_smoke_py", "target": "os", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_smoke.py", "source_location": "L11", "weight": 1.0}, {"source": "backend_tests_test_smoke_py", "target": "pytest", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_smoke.py", "source_location": "L12", "weight": 1.0}, {"source": "backend_tests_test_smoke_py", "target": "test_smoke_test_app_imports", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_smoke.py", "source_location": "L15", "weight": 1.0}, {"source": "backend_tests_test_smoke_py", "target": "test_smoke_test_health", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_smoke.py", "source_location": "L21", "weight": 1.0}, {"source": "backend_tests_test_smoke_py", "target": "test_smoke_test_health_db", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_smoke.py", "source_location": "L28", "weight": 1.0}, {"source": "backend_tests_test_smoke_py", "target": "test_smoke_test_router_list_endpoints", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_smoke.py", "source_location": "L49", "weight": 1.0}, {"source": "test_smoke_rationale_1", "target": "backend_tests_test_smoke_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_smoke.py", "source_location": "L1", "weight": 1.0}, {"source": "test_smoke_rationale_50", "target": "test_smoke_test_router_list_endpoints", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_smoke.py", "source_location": "L50", "weight": 1.0}], "raw_calls": [{"caller_nid": "test_smoke_test_health", "callee": "get", "source_file": "backend/tests/test_smoke.py", "source_location": "L22"}, {"caller_nid": "test_smoke_test_health", "callee": "json", "source_file": "backend/tests/test_smoke.py", "source_location": "L24"}, {"caller_nid": "test_smoke_test_health_db", "callee": "get", "source_file": "backend/tests/test_smoke.py", "source_location": "L29"}, {"caller_nid": "test_smoke_test_health_db", "callee": "json", "source_file": "backend/tests/test_smoke.py", "source_location": "L31"}, {"caller_nid": "test_smoke_test_health_db", "callee": "get", "source_file": "backend/tests/test_smoke.py", "source_location": "L32"}, {"caller_nid": "test_smoke_test_router_list_endpoints", "callee": "get", "source_file": "backend/tests/test_smoke.py", "source_location": "L56"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/bf68a08e7e42b5cb98862a8a79259bba6a8081c3b2b3e4ac5edfe038f59acdac.json b/graphify-out/cache/bf68a08e7e42b5cb98862a8a79259bba6a8081c3b2b3e4ac5edfe038f59acdac.json
deleted file mode 100644
index 12645be..0000000
--- a/graphify-out/cache/bf68a08e7e42b5cb98862a8a79259bba6a8081c3b2b3e4ac5edfe038f59acdac.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "frontend_src_components_ui_badge_tsx", "label": "Badge.tsx", "file_type": "code", "source_file": "frontend/src/components/ui/Badge.tsx", "source_location": "L1"}, {"id": "badge_badge", "label": "Badge()", "file_type": "code", "source_file": "frontend/src/components/ui/Badge.tsx", "source_location": "L9"}], "edges": [{"source": "frontend_src_components_ui_badge_tsx", "target": "frontend_src_components_ui_lib_utils", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/components/ui/Badge.tsx", "source_location": "L1", "weight": 1.0}, {"source": "frontend_src_components_ui_badge_tsx", "target": "badge_badge", "relation": "contains", "confidence": "EXTRACTED", "source_file": "frontend/src/components/ui/Badge.tsx", "source_location": "L9", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/graphify-out/cache/c081b9a999c1212a91927c09db8b1eb4bac04592caf1c5ab399ae0112f9492e8.json b/graphify-out/cache/c081b9a999c1212a91927c09db8b1eb4bac04592caf1c5ab399ae0112f9492e8.json
deleted file mode 100644
index 48cca82..0000000
--- a/graphify-out/cache/c081b9a999c1212a91927c09db8b1eb4bac04592caf1c5ab399ae0112f9492e8.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_alembic_env_py", "label": "env.py", "file_type": "code", "source_file": "backend/alembic/env.py", "source_location": "L1"}, {"id": "env_run_migrations_offline", "label": "run_migrations_offline()", "file_type": "code", "source_file": "backend/alembic/env.py", "source_location": "L22"}, {"id": "env_run_migrations_online", "label": "run_migrations_online()", "file_type": "code", "source_file": "backend/alembic/env.py", "source_location": "L35"}], "edges": [{"source": "backend_alembic_env_py", "target": "logging_config", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/alembic/env.py", "source_location": "L1", "weight": 1.0}, {"source": "backend_alembic_env_py", "target": "sqlalchemy", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/alembic/env.py", "source_location": "L2", "weight": 1.0}, {"source": "backend_alembic_env_py", "target": "alembic", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/alembic/env.py", "source_location": "L3", "weight": 1.0}, {"source": "backend_alembic_env_py", "target": "sys", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/alembic/env.py", "source_location": "L4", "weight": 1.0}, {"source": "backend_alembic_env_py", "target": "os", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/alembic/env.py", "source_location": "L5", "weight": 1.0}, {"source": "backend_alembic_env_py", "target": "app_models", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/alembic/env.py", "source_location": "L9", "weight": 1.0}, {"source": "backend_alembic_env_py", "target": "app_config", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/alembic/env.py", "source_location": "L10", "weight": 1.0}, {"source": "backend_alembic_env_py", "target": "env_run_migrations_offline", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/alembic/env.py", "source_location": "L22", "weight": 1.0}, {"source": "backend_alembic_env_py", "target": "env_run_migrations_online", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/alembic/env.py", "source_location": "L35", "weight": 1.0}], "raw_calls": [{"caller_nid": "env_run_migrations_offline", "callee": "get_main_option", "source_file": "backend/alembic/env.py", "source_location": "L23"}, {"caller_nid": "env_run_migrations_offline", "callee": "configure", "source_file": "backend/alembic/env.py", "source_location": "L24"}, {"caller_nid": "env_run_migrations_offline", "callee": "begin_transaction", "source_file": "backend/alembic/env.py", "source_location": "L31"}, {"caller_nid": "env_run_migrations_offline", "callee": "run_migrations", "source_file": "backend/alembic/env.py", "source_location": "L32"}, {"caller_nid": "env_run_migrations_online", "callee": "engine_from_config", "source_file": "backend/alembic/env.py", "source_location": "L36"}, {"caller_nid": "env_run_migrations_online", "callee": "get_section", "source_file": "backend/alembic/env.py", "source_location": "L37"}, {"caller_nid": "env_run_migrations_online", "callee": "connect", "source_file": "backend/alembic/env.py", "source_location": "L42"}, {"caller_nid": "env_run_migrations_online", "callee": "configure", "source_file": "backend/alembic/env.py", "source_location": "L43"}, {"caller_nid": "env_run_migrations_online", "callee": "begin_transaction", "source_file": "backend/alembic/env.py", "source_location": "L48"}, {"caller_nid": "env_run_migrations_online", "callee": "run_migrations", "source_file": "backend/alembic/env.py", "source_location": "L49"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/c5ee5c18a1c498a0016371f413c4d5e388275bc844d65490b85d6b0a5d656fe3.json b/graphify-out/cache/c5ee5c18a1c498a0016371f413c4d5e388275bc844d65490b85d6b0a5d656fe3.json
deleted file mode 100644
index 15f6d7d..0000000
--- a/graphify-out/cache/c5ee5c18a1c498a0016371f413c4d5e388275bc844d65490b85d6b0a5d656fe3.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "frontend_src_pages_dashboard_tsx", "label": "Dashboard.tsx", "file_type": "code", "source_file": "frontend/src/pages/Dashboard.tsx", "source_location": "L1"}, {"id": "dashboard_handlesend", "label": "handleSend()", "file_type": "code", "source_file": "frontend/src/pages/Dashboard.tsx", "source_location": "L282"}], "edges": [{"source": "frontend_src_pages_dashboard_tsx", "target": "react_query", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/Dashboard.tsx", "source_location": "L1", "weight": 1.0}, {"source": "frontend_src_pages_dashboard_tsx", "target": "react", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/Dashboard.tsx", "source_location": "L2", "weight": 1.0}, {"source": "frontend_src_pages_dashboard_tsx", "target": "react_router_dom", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/Dashboard.tsx", "source_location": "L3", "weight": 1.0}, {"source": "frontend_src_pages_dashboard_tsx", "target": "lucide_react", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/Dashboard.tsx", "source_location": "L4", "weight": 1.0}, {"source": "frontend_src_pages_dashboard_tsx", "target": "react_hot_toast", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/Dashboard.tsx", "source_location": "L8", "weight": 1.0}, {"source": "frontend_src_pages_dashboard_tsx", "target": "dnd", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/Dashboard.tsx", "source_location": "L9", "weight": 1.0}, {"source": "frontend_src_pages_dashboard_tsx", "target": "frontend_src_pages_api", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/Dashboard.tsx", "source_location": "L20", "weight": 1.0}, {"source": "frontend_src_pages_dashboard_tsx", "target": "frontend_src_pages_types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/Dashboard.tsx", "source_location": "L21", "weight": 1.0}, {"source": "frontend_src_pages_dashboard_tsx", "target": "frontend_src_pages_components_ui_badge", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/Dashboard.tsx", "source_location": "L22", "weight": 1.0}, {"source": "frontend_src_pages_dashboard_tsx", "target": "frontend_src_pages_components_ui_card", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/Dashboard.tsx", "source_location": "L23", "weight": 1.0}, {"source": "frontend_src_pages_dashboard_tsx", "target": "frontend_src_pages_components_ui_skeleton", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/Dashboard.tsx", "source_location": "L24", "weight": 1.0}, {"source": "frontend_src_pages_dashboard_tsx", "target": "frontend_src_pages_components_ui_emptystate", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/Dashboard.tsx", "source_location": "L25", "weight": 1.0}, {"source": "frontend_src_pages_dashboard_tsx", "target": "dashboard_handlesend", "relation": "contains", "confidence": "EXTRACTED", "source_file": "frontend/src/pages/Dashboard.tsx", "source_location": "L282", "weight": 1.0}], "raw_calls": [{"caller_nid": "dashboard_handlesend", "callee": "setSendingVoteEmail", "source_file": "frontend/src/pages/Dashboard.tsx", "source_location": "L283"}, {"caller_nid": "dashboard_handlesend", "callee": "triggerOrchestrate", "source_file": "frontend/src/pages/Dashboard.tsx", "source_location": "L285"}, {"caller_nid": "dashboard_handlesend", "callee": "success", "source_file": "frontend/src/pages/Dashboard.tsx", "source_location": "L287"}, {"caller_nid": "dashboard_handlesend", "callee": "error", "source_file": "frontend/src/pages/Dashboard.tsx", "source_location": "L289"}, {"caller_nid": "dashboard_handlesend", "callee": "setSendingVoteEmail", "source_file": "frontend/src/pages/Dashboard.tsx", "source_location": "L291"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/c93501f5c64d177ebd2e759009e1a174c56181e22512416b5a18ec8b234b2dfe.json b/graphify-out/cache/c93501f5c64d177ebd2e759009e1a174c56181e22512416b5a18ec8b234b2dfe.json
deleted file mode 100644
index 0bb2107..0000000
--- a/graphify-out/cache/c93501f5c64d177ebd2e759009e1a174c56181e22512416b5a18ec8b234b2dfe.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_api_meal_plans_py", "label": "meal_plans.py", "file_type": "code", "source_file": "backend/app/api/meal_plans.py", "source_location": "L1"}, {"id": "meal_plans_to_response", "label": "_to_response()", "file_type": "code", "source_file": "backend/app/api/meal_plans.py", "source_location": "L33"}, {"id": "meal_plans_generate", "label": "generate()", "file_type": "code", "source_file": "backend/app/api/meal_plans.py", "source_location": "L60"}, {"id": "meal_plans_regenerate", "label": "regenerate()", "file_type": "code", "source_file": "backend/app/api/meal_plans.py", "source_location": "L82"}, {"id": "meal_plans_get_plan", "label": "get_plan()", "file_type": "code", "source_file": "backend/app/api/meal_plans.py", "source_location": "L120"}], "edges": [{"source": "backend_app_api_meal_plans_py", "target": "dataclasses", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/meal_plans.py", "source_location": "L3", "weight": 1.0}, {"source": "backend_app_api_meal_plans_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/meal_plans.py", "source_location": "L4", "weight": 1.0}, {"source": "backend_app_api_meal_plans_py", "target": "uuid", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/meal_plans.py", "source_location": "L5", "weight": 1.0}, {"source": "backend_app_api_meal_plans_py", "target": "fastapi", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/meal_plans.py", "source_location": "L7", "weight": 1.0}, {"source": "backend_app_api_meal_plans_py", "target": "sqlalchemy_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/meal_plans.py", "source_location": "L8", "weight": 1.0}, {"source": "backend_app_api_meal_plans_py", "target": "app_database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/meal_plans.py", "source_location": "L10", "weight": 1.0}, {"source": "backend_app_api_meal_plans_py", "target": "app_models", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/meal_plans.py", "source_location": "L11", "weight": 1.0}, {"source": "backend_app_api_meal_plans_py", "target": "app_schemas_meal_plan_generation", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/meal_plans.py", "source_location": "L12", "weight": 1.0}, {"source": "backend_app_api_meal_plans_py", "target": "app_security", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/meal_plans.py", "source_location": "L19", "weight": 1.0}, {"source": "backend_app_api_meal_plans_py", "target": "app_services_planner_config", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/meal_plans.py", "source_location": "L20", "weight": 1.0}, {"source": "backend_app_api_meal_plans_py", "target": "app_services_planner_generate", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/meal_plans.py", "source_location": "L21", "weight": 1.0}, {"source": "backend_app_api_meal_plans_py", "target": "app_services_planner_types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/meal_plans.py", "source_location": "L22", "weight": 1.0}, {"source": "backend_app_api_meal_plans_py", "target": "meal_plans_to_response", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/meal_plans.py", "source_location": "L33", "weight": 1.0}, {"source": "backend_app_api_meal_plans_py", "target": "meal_plans_generate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/meal_plans.py", "source_location": "L60", "weight": 1.0}, {"source": "backend_app_api_meal_plans_py", "target": "meal_plans_regenerate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/meal_plans.py", "source_location": "L82", "weight": 1.0}, {"source": "backend_app_api_meal_plans_py", "target": "meal_plans_get_plan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/meal_plans.py", "source_location": "L120", "weight": 1.0}, {"source": "meal_plans_generate", "target": "meal_plans_to_response", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/api/meal_plans.py", "source_location": "L78", "weight": 1.0}, {"source": "meal_plans_regenerate", "target": "meal_plans_to_response", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/api/meal_plans.py", "source_location": "L116", "weight": 1.0}], "raw_calls": [{"caller_nid": "meal_plans_to_response", "callee": "get", "source_file": "backend/app/api/meal_plans.py", "source_location": "L37"}, {"caller_nid": "meal_plans_to_response", "callee": "append", "source_file": "backend/app/api/meal_plans.py", "source_location": "L38"}, {"caller_nid": "meal_plans_to_response", "callee": "GenerationItem", "source_file": "backend/app/api/meal_plans.py", "source_location": "L39"}, {"caller_nid": "meal_plans_to_response", "callee": "float", "source_file": "backend/app/api/meal_plans.py", "source_location": "L44"}, {"caller_nid": "meal_plans_to_response", "callee": "items", "source_file": "backend/app/api/meal_plans.py", "source_location": "L44"}, {"caller_nid": "meal_plans_to_response", "callee": "GenerationResponse", "source_file": "backend/app/api/meal_plans.py", "source_location": "L47"}, {"caller_nid": "meal_plans_to_response", "callee": "GenerationDebug", "source_file": "backend/app/api/meal_plans.py", "source_location": "L51"}, {"caller_nid": "meal_plans_generate", "callee": "first", "source_file": "backend/app/api/meal_plans.py", "source_location": "L61"}, {"caller_nid": "meal_plans_generate", "callee": "filter", "source_file": "backend/app/api/meal_plans.py", "source_location": "L61"}, {"caller_nid": "meal_plans_generate", "callee": "query", "source_file": "backend/app/api/meal_plans.py", "source_location": "L61"}, {"caller_nid": "meal_plans_generate", "callee": "HTTPException", "source_file": "backend/app/api/meal_plans.py", "source_location": "L63"}, {"caller_nid": "meal_plans_generate", "callee": "generate_meal_plan", "source_file": "backend/app/api/meal_plans.py", "source_location": "L65"}, {"caller_nid": "meal_plans_generate", "callee": "HTTPException", "source_file": "backend/app/api/meal_plans.py", "source_location": "L71"}, {"caller_nid": "meal_plans_generate", "callee": "str", "source_file": "backend/app/api/meal_plans.py", "source_location": "L71"}, {"caller_nid": "meal_plans_generate", "callee": "all", "source_file": "backend/app/api/meal_plans.py", "source_location": "L73"}, {"caller_nid": "meal_plans_generate", "callee": "order_by", "source_file": "backend/app/api/meal_plans.py", "source_location": "L73"}, {"caller_nid": "meal_plans_generate", "callee": "filter", "source_file": "backend/app/api/meal_plans.py", "source_location": "L73"}, {"caller_nid": "meal_plans_generate", "callee": "query", "source_file": "backend/app/api/meal_plans.py", "source_location": "L73"}, {"caller_nid": "meal_plans_regenerate", "callee": "first", "source_file": "backend/app/api/meal_plans.py", "source_location": "L83"}, {"caller_nid": "meal_plans_regenerate", "callee": "filter", "source_file": "backend/app/api/meal_plans.py", "source_location": "L83"}, {"caller_nid": "meal_plans_regenerate", "callee": "query", "source_file": "backend/app/api/meal_plans.py", "source_location": "L83"}, {"caller_nid": "meal_plans_regenerate", "callee": "HTTPException", "source_file": "backend/app/api/meal_plans.py", "source_location": "L85"}, {"caller_nid": "meal_plans_regenerate", "callee": "replace", "source_file": "backend/app/api/meal_plans.py", "source_location": "L89"}, {"caller_nid": "meal_plans_regenerate", "callee": "replace", "source_file": "backend/app/api/meal_plans.py", "source_location": "L91"}, {"caller_nid": "meal_plans_regenerate", "callee": "replace", "source_file": "backend/app/api/meal_plans.py", "source_location": "L93"}, {"caller_nid": "meal_plans_regenerate", "callee": "delete", "source_file": "backend/app/api/meal_plans.py", "source_location": "L98"}, {"caller_nid": "meal_plans_regenerate", "callee": "filter", "source_file": "backend/app/api/meal_plans.py", "source_location": "L98"}, {"caller_nid": "meal_plans_regenerate", "callee": "query", "source_file": "backend/app/api/meal_plans.py", "source_location": "L98"}, {"caller_nid": "meal_plans_regenerate", "callee": "commit", "source_file": "backend/app/api/meal_plans.py", "source_location": "L102"}, {"caller_nid": "meal_plans_regenerate", "callee": "generate_meal_plan", "source_file": "backend/app/api/meal_plans.py", "source_location": "L104"}, {"caller_nid": "meal_plans_regenerate", "callee": "all", "source_file": "backend/app/api/meal_plans.py", "source_location": "L111"}, {"caller_nid": "meal_plans_regenerate", "callee": "order_by", "source_file": "backend/app/api/meal_plans.py", "source_location": "L111"}, {"caller_nid": "meal_plans_regenerate", "callee": "filter", "source_file": "backend/app/api/meal_plans.py", "source_location": "L111"}, {"caller_nid": "meal_plans_regenerate", "callee": "query", "source_file": "backend/app/api/meal_plans.py", "source_location": "L111"}, {"caller_nid": "meal_plans_get_plan", "callee": "first", "source_file": "backend/app/api/meal_plans.py", "source_location": "L121"}, {"caller_nid": "meal_plans_get_plan", "callee": "filter", "source_file": "backend/app/api/meal_plans.py", "source_location": "L121"}, {"caller_nid": "meal_plans_get_plan", "callee": "query", "source_file": "backend/app/api/meal_plans.py", "source_location": "L121"}, {"caller_nid": "meal_plans_get_plan", "callee": "HTTPException", "source_file": "backend/app/api/meal_plans.py", "source_location": "L123"}, {"caller_nid": "meal_plans_get_plan", "callee": "all", "source_file": "backend/app/api/meal_plans.py", "source_location": "L125"}, {"caller_nid": "meal_plans_get_plan", "callee": "order_by", "source_file": "backend/app/api/meal_plans.py", "source_location": "L125"}, {"caller_nid": "meal_plans_get_plan", "callee": "filter", "source_file": "backend/app/api/meal_plans.py", "source_location": "L125"}, {"caller_nid": "meal_plans_get_plan", "callee": "query", "source_file": "backend/app/api/meal_plans.py", "source_location": "L125"}, {"caller_nid": "meal_plans_get_plan", "callee": "GenerationResponse", "source_file": "backend/app/api/meal_plans.py", "source_location": "L132"}, {"caller_nid": "meal_plans_get_plan", "callee": "GenerationItem", "source_file": "backend/app/api/meal_plans.py", "source_location": "L136"}, {"caller_nid": "meal_plans_get_plan", "callee": "GenerationDebug", "source_file": "backend/app/api/meal_plans.py", "source_location": "L145"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/cd19f7953985319eb2687fad2eb4655088cfac2cd341f8a5970e9fe59dccf8c8.json b/graphify-out/cache/cd19f7953985319eb2687fad2eb4655088cfac2cd341f8a5970e9fe59dccf8c8.json
deleted file mode 100644
index 17b0c3a..0000000
--- a/graphify-out/cache/cd19f7953985319eb2687fad2eb4655088cfac2cd341f8a5970e9fe59dccf8c8.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_security_py", "label": "security.py", "file_type": "code", "source_file": "backend/app/security.py", "source_location": "L1"}, {"id": "security_require_admin", "label": "require_admin()", "file_type": "code", "source_file": "backend/app/security.py", "source_location": "L29"}, {"id": "security_signer", "label": "_signer()", "file_type": "code", "source_file": "backend/app/security.py", "source_location": "L45"}, {"id": "security_issue_session", "label": "issue_session()", "file_type": "code", "source_file": "backend/app/security.py", "source_location": "L49"}, {"id": "security_require_session", "label": "require_session()", "file_type": "code", "source_file": "backend/app/security.py", "source_location": "L54"}, {"id": "security_rationale_1", "label": "Auth dependencies for the MealPlanner backend. Two flavors: - ``require_admin``", "file_type": "rationale", "source_file": "backend/app/security.py", "source_location": "L1"}, {"id": "security_rationale_30", "label": "Enforce a shared bearer token. 401 on bad/missing token, 503 if unset.", "file_type": "rationale", "source_file": "backend/app/security.py", "source_location": "L30"}, {"id": "security_rationale_50", "label": "Sign the family_profile_id and return the cookie value.", "file_type": "rationale", "source_file": "backend/app/security.py", "source_location": "L50"}, {"id": "security_rationale_55", "label": "Auto-authenticate: return the first family_profile_id from the DB. No cooki", "file_type": "rationale", "source_file": "backend/app/security.py", "source_location": "L55"}], "edges": [{"source": "backend_app_security_py", "target": "fastapi", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/security.py", "source_location": "L16", "weight": 1.0}, {"source": "backend_app_security_py", "target": "itsdangerous", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/security.py", "source_location": "L17", "weight": 1.0}, {"source": "backend_app_security_py", "target": "app_config", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/security.py", "source_location": "L19", "weight": 1.0}, {"source": "backend_app_security_py", "target": "app_database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/security.py", "source_location": "L20", "weight": 1.0}, {"source": "backend_app_security_py", "target": "app_models", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/security.py", "source_location": "L21", "weight": 1.0}, {"source": "backend_app_security_py", "target": "security_require_admin", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/security.py", "source_location": "L29", "weight": 1.0}, {"source": "backend_app_security_py", "target": "security_signer", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/security.py", "source_location": "L45", "weight": 1.0}, {"source": "backend_app_security_py", "target": "security_issue_session", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/security.py", "source_location": "L49", "weight": 1.0}, {"source": "backend_app_security_py", "target": "security_require_session", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/security.py", "source_location": "L54", "weight": 1.0}, {"source": "security_issue_session", "target": "security_signer", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/security.py", "source_location": "L51", "weight": 1.0}, {"source": "security_require_session", "target": "security_signer", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/security.py", "source_location": "L66", "weight": 1.0}, {"source": "security_rationale_1", "target": "backend_app_security_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/security.py", "source_location": "L1", "weight": 1.0}, {"source": "security_rationale_30", "target": "security_require_admin", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/security.py", "source_location": "L30", "weight": 1.0}, {"source": "security_rationale_50", "target": "security_issue_session", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/security.py", "source_location": "L50", "weight": 1.0}, {"source": "security_rationale_55", "target": "security_require_session", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/security.py", "source_location": "L55", "weight": 1.0}], "raw_calls": [{"caller_nid": "security_require_admin", "callee": "HTTPException", "source_file": "backend/app/security.py", "source_location": "L33"}, {"caller_nid": "security_require_admin", "callee": "get", "source_file": "backend/app/security.py", "source_location": "L37"}, {"caller_nid": "security_require_admin", "callee": "startswith", "source_file": "backend/app/security.py", "source_location": "L38"}, {"caller_nid": "security_require_admin", "callee": "HTTPException", "source_file": "backend/app/security.py", "source_location": "L39"}, {"caller_nid": "security_signer", "callee": "TimestampSigner", "source_file": "backend/app/security.py", "source_location": "L46"}, {"caller_nid": "security_issue_session", "callee": "decode", "source_file": "backend/app/security.py", "source_location": "L51"}, {"caller_nid": "security_issue_session", "callee": "sign", "source_file": "backend/app/security.py", "source_location": "L51"}, {"caller_nid": "security_issue_session", "callee": "encode", "source_file": "backend/app/security.py", "source_location": "L51"}, {"caller_nid": "security_require_session", "callee": "get", "source_file": "backend/app/security.py", "source_location": "L62"}, {"caller_nid": "security_require_session", "callee": "decode", "source_file": "backend/app/security.py", "source_location": "L66"}, {"caller_nid": "security_require_session", "callee": "unsign", "source_file": "backend/app/security.py", "source_location": "L66"}, {"caller_nid": "security_require_session", "callee": "encode", "source_file": "backend/app/security.py", "source_location": "L66"}, {"caller_nid": "security_require_session", "callee": "next", "source_file": "backend/app/security.py", "source_location": "L72"}, {"caller_nid": "security_require_session", "callee": "get_db", "source_file": "backend/app/security.py", "source_location": "L72"}, {"caller_nid": "security_require_session", "callee": "first", "source_file": "backend/app/security.py", "source_location": "L73"}, {"caller_nid": "security_require_session", "callee": "query", "source_file": "backend/app/security.py", "source_location": "L73"}, {"caller_nid": "security_require_session", "callee": "str", "source_file": "backend/app/security.py", "source_location": "L75"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/d010bce451c093758d150b8090a4fd8cbc87fadb245a50df960588f8ea93b621.json b/graphify-out/cache/d010bce451c093758d150b8090a4fd8cbc87fadb245a50df960588f8ea93b621.json
deleted file mode 100644
index f42cd92..0000000
--- a/graphify-out/cache/d010bce451c093758d150b8090a4fd8cbc87fadb245a50df960588f8ea93b621.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_tests_test_config_py", "label": "test_config.py", "file_type": "code", "source_file": "backend/tests/test_config.py", "source_location": "L1"}, {"id": "test_config_test_database_url_required", "label": "test_database_url_required()", "file_type": "code", "source_file": "backend/tests/test_config.py", "source_location": "L12"}, {"id": "test_config_rationale_1", "label": "Config fail-fast: importing app.config with DATABASE_URL unset must raise.", "file_type": "rationale", "source_file": "backend/tests/test_config.py", "source_location": "L1"}, {"id": "test_config_rationale_13", "label": "Settings() with empty DATABASE_URL \u2192 RuntimeError at instantiation.", "file_type": "rationale", "source_file": "backend/tests/test_config.py", "source_location": "L13"}], "edges": [{"source": "backend_tests_test_config_py", "target": "importlib", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_config.py", "source_location": "L7", "weight": 1.0}, {"source": "backend_tests_test_config_py", "target": "pytest", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_config.py", "source_location": "L9", "weight": 1.0}, {"source": "backend_tests_test_config_py", "target": "test_config_test_database_url_required", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_config.py", "source_location": "L12", "weight": 1.0}, {"source": "test_config_rationale_1", "target": "backend_tests_test_config_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_config.py", "source_location": "L1", "weight": 1.0}, {"source": "test_config_rationale_13", "target": "test_config_test_database_url_required", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_config.py", "source_location": "L13", "weight": 1.0}], "raw_calls": [{"caller_nid": "test_config_test_database_url_required", "callee": "setenv", "source_file": "backend/tests/test_config.py", "source_location": "L16"}, {"caller_nid": "test_config_test_database_url_required", "callee": "raises", "source_file": "backend/tests/test_config.py", "source_location": "L18"}, {"caller_nid": "test_config_test_database_url_required", "callee": "Settings", "source_file": "backend/tests/test_config.py", "source_location": "L19"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/d5f5a271cbb8bfa062e617d6aa14ea3ab93411538f090b390f705a1c9dfa0ccc.json b/graphify-out/cache/d5f5a271cbb8bfa062e617d6aa14ea3ab93411538f090b390f705a1c9dfa0ccc.json
deleted file mode 100644
index f6f811e..0000000
--- a/graphify-out/cache/d5f5a271cbb8bfa062e617d6aa14ea3ab93411538f090b390f705a1c9dfa0ccc.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_tests_test_planner_filter_py", "label": "test_planner_filter.py", "file_type": "code", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L1"}, {"id": "test_planner_filter_recipe", "label": "_recipe()", "file_type": "code", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L15"}, {"id": "test_planner_filter_cost", "label": "_cost()", "file_type": "code", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L35"}, {"id": "test_planner_filter_test_filter_blocks_by_never_suggest_ingredient", "label": "test_filter_blocks_by_never_suggest_ingredient()", "file_type": "code", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L48"}, {"id": "test_planner_filter_test_filter_blocks_by_never_suggest_recipe", "label": "test_filter_blocks_by_never_suggest_recipe()", "file_type": "code", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L70"}, {"id": "test_planner_filter_test_filter_blocks_by_recency", "label": "test_filter_blocks_by_recency()", "file_type": "code", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L87"}, {"id": "test_planner_filter_test_filter_blocks_by_calories", "label": "test_filter_blocks_by_calories()", "file_type": "code", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L104"}, {"id": "test_planner_filter_test_filter_blocks_by_time", "label": "test_filter_blocks_by_time()", "file_type": "code", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L122"}, {"id": "test_planner_filter_test_filter_blocks_by_cost", "label": "test_filter_blocks_by_cost()", "file_type": "code", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L140"}, {"id": "test_planner_filter_test_filter_passes_when_calorie_target_is_none", "label": "test_filter_passes_when_calorie_target_is_none()", "file_type": "code", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L158"}, {"id": "test_planner_filter_test_filter_blocks_recipe_with_null_calories_when_target_set", "label": "test_filter_blocks_recipe_with_null_calories_when_target_set()", "file_type": "code", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L174"}], "edges": [{"source": "backend_tests_test_planner_filter_py", "target": "datetime", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L1", "weight": 1.0}, {"source": "backend_tests_test_planner_filter_py", "target": "decimal", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L2", "weight": 1.0}, {"source": "backend_tests_test_planner_filter_py", "target": "uuid", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L3", "weight": 1.0}, {"source": "backend_tests_test_planner_filter_py", "target": "pytest", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L5", "weight": 1.0}, {"source": "backend_tests_test_planner_filter_py", "target": "app_services_planner_config", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L7", "weight": 1.0}, {"source": "backend_tests_test_planner_filter_py", "target": "app_services_planner_filter", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L8", "weight": 1.0}, {"source": "backend_tests_test_planner_filter_py", "target": "app_services_planner_types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L9", "weight": 1.0}, {"source": "backend_tests_test_planner_filter_py", "target": "test_planner_filter_recipe", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L15", "weight": 1.0}, {"source": "backend_tests_test_planner_filter_py", "target": "test_planner_filter_cost", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L35", "weight": 1.0}, {"source": "backend_tests_test_planner_filter_py", "target": "test_planner_filter_test_filter_blocks_by_never_suggest_ingredient", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L48", "weight": 1.0}, {"source": "backend_tests_test_planner_filter_py", "target": "test_planner_filter_test_filter_blocks_by_never_suggest_recipe", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L70", "weight": 1.0}, {"source": "backend_tests_test_planner_filter_py", "target": "test_planner_filter_test_filter_blocks_by_recency", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L87", "weight": 1.0}, {"source": "backend_tests_test_planner_filter_py", "target": "test_planner_filter_test_filter_blocks_by_calories", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L104", "weight": 1.0}, {"source": "backend_tests_test_planner_filter_py", "target": "test_planner_filter_test_filter_blocks_by_time", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L122", "weight": 1.0}, {"source": "backend_tests_test_planner_filter_py", "target": "test_planner_filter_test_filter_blocks_by_cost", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L140", "weight": 1.0}, {"source": "backend_tests_test_planner_filter_py", "target": "test_planner_filter_test_filter_passes_when_calorie_target_is_none", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L158", "weight": 1.0}, {"source": "backend_tests_test_planner_filter_py", "target": "test_planner_filter_test_filter_blocks_recipe_with_null_calories_when_target_set", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L174", "weight": 1.0}, {"source": "test_planner_filter_test_filter_blocks_by_never_suggest_ingredient", "target": "test_planner_filter_recipe", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L49", "weight": 1.0}, {"source": "test_planner_filter_test_filter_blocks_by_never_suggest_ingredient", "target": "test_planner_filter_cost", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L57", "weight": 1.0}, {"source": "test_planner_filter_test_filter_blocks_by_never_suggest_recipe", "target": "test_planner_filter_recipe", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L71", "weight": 1.0}, {"source": "test_planner_filter_test_filter_blocks_by_never_suggest_recipe", "target": "test_planner_filter_cost", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L75", "weight": 1.0}, {"source": "test_planner_filter_test_filter_blocks_by_recency", "target": "test_planner_filter_recipe", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L88", "weight": 1.0}, {"source": "test_planner_filter_test_filter_blocks_by_recency", "target": "test_planner_filter_cost", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L93", "weight": 1.0}, {"source": "test_planner_filter_test_filter_blocks_by_calories", "target": "test_planner_filter_recipe", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L105", "weight": 1.0}, {"source": "test_planner_filter_test_filter_blocks_by_calories", "target": "test_planner_filter_cost", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L110", "weight": 1.0}, {"source": "test_planner_filter_test_filter_blocks_by_time", "target": "test_planner_filter_recipe", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L123", "weight": 1.0}, {"source": "test_planner_filter_test_filter_blocks_by_time", "target": "test_planner_filter_cost", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L128", "weight": 1.0}, {"source": "test_planner_filter_test_filter_blocks_by_cost", "target": "test_planner_filter_recipe", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L141", "weight": 1.0}, {"source": "test_planner_filter_test_filter_blocks_by_cost", "target": "test_planner_filter_cost", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L146", "weight": 1.0}, {"source": "test_planner_filter_test_filter_passes_when_calorie_target_is_none", "target": "test_planner_filter_recipe", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L159", "weight": 1.0}, {"source": "test_planner_filter_test_filter_passes_when_calorie_target_is_none", "target": "test_planner_filter_cost", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L163", "weight": 1.0}, {"source": "test_planner_filter_test_filter_blocks_recipe_with_null_calories_when_target_set", "target": "test_planner_filter_recipe", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L175", "weight": 1.0}, {"source": "test_planner_filter_test_filter_blocks_recipe_with_null_calories_when_target_set", "target": "test_planner_filter_cost", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L179", "weight": 1.0}], "raw_calls": [{"caller_nid": "test_planner_filter_recipe", "callee": "uuid4", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L25"}, {"caller_nid": "test_planner_filter_recipe", "callee": "list", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L31"}, {"caller_nid": "test_planner_filter_cost", "callee": "RecipeCost", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L36"}, {"caller_nid": "test_planner_filter_cost", "callee": "Decimal", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L38"}, {"caller_nid": "test_planner_filter_cost", "callee": "str", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L38"}, {"caller_nid": "test_planner_filter_cost", "callee": "Decimal", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L39"}, {"caller_nid": "test_planner_filter_test_filter_blocks_by_never_suggest_ingredient", "callee": "uuid4", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L51"}, {"caller_nid": "test_planner_filter_test_filter_blocks_by_never_suggest_ingredient", "callee": "uuid4", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L52"}, {"caller_nid": "test_planner_filter_test_filter_blocks_by_never_suggest_ingredient", "callee": "filter_recipes", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L54"}, {"caller_nid": "test_planner_filter_test_filter_blocks_by_never_suggest_ingredient", "callee": "set", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L59"}, {"caller_nid": "test_planner_filter_test_filter_blocks_by_never_suggest_ingredient", "callee": "date", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L63"}, {"caller_nid": "test_planner_filter_test_filter_blocks_by_never_suggest_recipe", "callee": "filter_recipes", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L72"}, {"caller_nid": "test_planner_filter_test_filter_blocks_by_never_suggest_recipe", "callee": "set", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L74"}, {"caller_nid": "test_planner_filter_test_filter_blocks_by_never_suggest_recipe", "callee": "set", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L76"}, {"caller_nid": "test_planner_filter_test_filter_blocks_by_never_suggest_recipe", "callee": "date", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L81"}, {"caller_nid": "test_planner_filter_test_filter_blocks_by_recency", "callee": "date", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L89"}, {"caller_nid": "test_planner_filter_test_filter_blocks_by_recency", "callee": "timedelta", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L89"}, {"caller_nid": "test_planner_filter_test_filter_blocks_by_recency", "callee": "filter_recipes", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L90"}, {"caller_nid": "test_planner_filter_test_filter_blocks_by_recency", "callee": "set", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L92"}, {"caller_nid": "test_planner_filter_test_filter_blocks_by_recency", "callee": "set", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L94"}, {"caller_nid": "test_planner_filter_test_filter_blocks_by_recency", "callee": "set", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L95"}, {"caller_nid": "test_planner_filter_test_filter_blocks_by_recency", "callee": "date", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L99"}, {"caller_nid": "test_planner_filter_test_filter_blocks_by_calories", "callee": "filter_recipes", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L107"}, {"caller_nid": "test_planner_filter_test_filter_blocks_by_calories", "callee": "set", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L109"}, {"caller_nid": "test_planner_filter_test_filter_blocks_by_calories", "callee": "set", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L109"}, {"caller_nid": "test_planner_filter_test_filter_blocks_by_calories", "callee": "set", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L111"}, {"caller_nid": "test_planner_filter_test_filter_blocks_by_calories", "callee": "set", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L112"}, {"caller_nid": "test_planner_filter_test_filter_blocks_by_calories", "callee": "date", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L116"}, {"caller_nid": "test_planner_filter_test_filter_blocks_by_time", "callee": "filter_recipes", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L125"}, {"caller_nid": "test_planner_filter_test_filter_blocks_by_time", "callee": "set", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L127"}, {"caller_nid": "test_planner_filter_test_filter_blocks_by_time", "callee": "set", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L127"}, {"caller_nid": "test_planner_filter_test_filter_blocks_by_time", "callee": "set", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L129"}, {"caller_nid": "test_planner_filter_test_filter_blocks_by_time", "callee": "set", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L130"}, {"caller_nid": "test_planner_filter_test_filter_blocks_by_time", "callee": "date", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L134"}, {"caller_nid": "test_planner_filter_test_filter_blocks_by_cost", "callee": "filter_recipes", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L143"}, {"caller_nid": "test_planner_filter_test_filter_blocks_by_cost", "callee": "set", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L145"}, {"caller_nid": "test_planner_filter_test_filter_blocks_by_cost", "callee": "set", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L145"}, {"caller_nid": "test_planner_filter_test_filter_blocks_by_cost", "callee": "set", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L147"}, {"caller_nid": "test_planner_filter_test_filter_blocks_by_cost", "callee": "set", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L148"}, {"caller_nid": "test_planner_filter_test_filter_blocks_by_cost", "callee": "date", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L152"}, {"caller_nid": "test_planner_filter_test_filter_passes_when_calorie_target_is_none", "callee": "filter_recipes", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L160"}, {"caller_nid": "test_planner_filter_test_filter_passes_when_calorie_target_is_none", "callee": "set", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L162"}, {"caller_nid": "test_planner_filter_test_filter_passes_when_calorie_target_is_none", "callee": "set", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L164"}, {"caller_nid": "test_planner_filter_test_filter_passes_when_calorie_target_is_none", "callee": "set", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L165"}, {"caller_nid": "test_planner_filter_test_filter_passes_when_calorie_target_is_none", "callee": "date", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L169"}, {"caller_nid": "test_planner_filter_test_filter_blocks_recipe_with_null_calories_when_target_set", "callee": "filter_recipes", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L176"}, {"caller_nid": "test_planner_filter_test_filter_blocks_recipe_with_null_calories_when_target_set", "callee": "set", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L178"}, {"caller_nid": "test_planner_filter_test_filter_blocks_recipe_with_null_calories_when_target_set", "callee": "set", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L180"}, {"caller_nid": "test_planner_filter_test_filter_blocks_recipe_with_null_calories_when_target_set", "callee": "set", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L181"}, {"caller_nid": "test_planner_filter_test_filter_blocks_recipe_with_null_calories_when_target_set", "callee": "date", "source_file": "backend/tests/test_planner_filter.py", "source_location": "L185"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/d6fce6b7573bb0b004a6a4e3ab9cd0d44ac0f2d57378c014d9d3aa66b9926d37.json b/graphify-out/cache/d6fce6b7573bb0b004a6a4e3ab9cd0d44ac0f2d57378c014d9d3aa66b9926d37.json
deleted file mode 100644
index ac20032..0000000
--- a/graphify-out/cache/d6fce6b7573bb0b004a6a4e3ab9cd0d44ac0f2d57378c014d9d3aa66b9926d37.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_services_planner_cost_py", "label": "cost.py", "file_type": "code", "source_file": "backend/app/services/planner/cost.py", "source_location": "L1"}, {"id": "cost_decimal", "label": "_decimal()", "file_type": "code", "source_file": "backend/app/services/planner/cost.py", "source_location": "L30"}, {"id": "cost_scale", "label": "_scale()", "file_type": "code", "source_file": "backend/app/services/planner/cost.py", "source_location": "L36"}, {"id": "cost_compute_recipe_cost", "label": "compute_recipe_cost()", "file_type": "code", "source_file": "backend/app/services/planner/cost.py", "source_location": "L40"}, {"id": "cost_rationale_1", "label": "Compute per-recipe cost and savings against ingredient_grocery_match. Inputs:", "file_type": "rationale", "source_file": "backend/app/services/planner/cost.py", "source_location": "L1"}], "edges": [{"source": "backend_app_services_planner_cost_py", "target": "decimal", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/cost.py", "source_location": "L23", "weight": 1.0}, {"source": "backend_app_services_planner_cost_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/cost.py", "source_location": "L24", "weight": 1.0}, {"source": "backend_app_services_planner_cost_py", "target": "uuid", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/cost.py", "source_location": "L25", "weight": 1.0}, {"source": "backend_app_services_planner_cost_py", "target": "app_services_planner_types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/cost.py", "source_location": "L27", "weight": 1.0}, {"source": "backend_app_services_planner_cost_py", "target": "cost_decimal", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/cost.py", "source_location": "L30", "weight": 1.0}, {"source": "backend_app_services_planner_cost_py", "target": "cost_scale", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/cost.py", "source_location": "L36", "weight": 1.0}, {"source": "backend_app_services_planner_cost_py", "target": "cost_compute_recipe_cost", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/cost.py", "source_location": "L40", "weight": 1.0}, {"source": "cost_compute_recipe_cost", "target": "cost_decimal", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/cost.py", "source_location": "L86", "weight": 1.0}, {"source": "cost_compute_recipe_cost", "target": "cost_scale", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/cost.py", "source_location": "L89", "weight": 1.0}, {"source": "cost_rationale_1", "target": "backend_app_services_planner_cost_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/cost.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "cost_decimal", "callee": "Decimal", "source_file": "backend/app/services/planner/cost.py", "source_location": "L32"}, {"caller_nid": "cost_decimal", "callee": "isinstance", "source_file": "backend/app/services/planner/cost.py", "source_location": "L33"}, {"caller_nid": "cost_decimal", "callee": "Decimal", "source_file": "backend/app/services/planner/cost.py", "source_location": "L33"}, {"caller_nid": "cost_decimal", "callee": "str", "source_file": "backend/app/services/planner/cost.py", "source_location": "L33"}, {"caller_nid": "cost_scale", "callee": "quantize", "source_file": "backend/app/services/planner/cost.py", "source_location": "L37"}, {"caller_nid": "cost_scale", "callee": "Decimal", "source_file": "backend/app/services/planner/cost.py", "source_location": "L37"}, {"caller_nid": "cost_scale", "callee": "str", "source_file": "backend/app/services/planner/cost.py", "source_location": "L37"}, {"caller_nid": "cost_scale", "callee": "Decimal", "source_file": "backend/app/services/planner/cost.py", "source_location": "L37"}, {"caller_nid": "cost_compute_recipe_cost", "callee": "Decimal", "source_file": "backend/app/services/planner/cost.py", "source_location": "L48"}, {"caller_nid": "cost_compute_recipe_cost", "callee": "Decimal", "source_file": "backend/app/services/planner/cost.py", "source_location": "L49"}, {"caller_nid": "cost_compute_recipe_cost", "callee": "isinstance", "source_file": "backend/app/services/planner/cost.py", "source_location": "L58"}, {"caller_nid": "cost_compute_recipe_cost", "callee": "UUID", "source_file": "backend/app/services/planner/cost.py", "source_location": "L59"}, {"caller_nid": "cost_compute_recipe_cost", "callee": "float", "source_file": "backend/app/services/planner/cost.py", "source_location": "L60"}, {"caller_nid": "cost_compute_recipe_cost", "callee": "get", "source_file": "backend/app/services/planner/cost.py", "source_location": "L60"}, {"caller_nid": "cost_compute_recipe_cost", "callee": "get", "source_file": "backend/app/services/planner/cost.py", "source_location": "L61"}, {"caller_nid": "cost_compute_recipe_cost", "callee": "get", "source_file": "backend/app/services/planner/cost.py", "source_location": "L66"}, {"caller_nid": "cost_compute_recipe_cost", "callee": "append", "source_file": "backend/app/services/planner/cost.py", "source_location": "L68"}, {"caller_nid": "cost_compute_recipe_cost", "callee": "IngredientCost", "source_file": "backend/app/services/planner/cost.py", "source_location": "L69"}, {"caller_nid": "cost_compute_recipe_cost", "callee": "Decimal", "source_file": "backend/app/services/planner/cost.py", "source_location": "L78"}, {"caller_nid": "cost_compute_recipe_cost", "callee": "Decimal", "source_file": "backend/app/services/planner/cost.py", "source_location": "L79"}, {"caller_nid": "cost_compute_recipe_cost", "callee": "get", "source_file": "backend/app/services/planner/cost.py", "source_location": "L86"}, {"caller_nid": "cost_compute_recipe_cost", "callee": "get", "source_file": "backend/app/services/planner/cost.py", "source_location": "L87"}, {"caller_nid": "cost_compute_recipe_cost", "callee": "bool", "source_file": "backend/app/services/planner/cost.py", "source_location": "L88"}, {"caller_nid": "cost_compute_recipe_cost", "callee": "get", "source_file": "backend/app/services/planner/cost.py", "source_location": "L88"}, {"caller_nid": "cost_compute_recipe_cost", "callee": "max", "source_file": "backend/app/services/planner/cost.py", "source_location": "L90"}, {"caller_nid": "cost_compute_recipe_cost", "callee": "Decimal", "source_file": "backend/app/services/planner/cost.py", "source_location": "L90"}, {"caller_nid": "cost_compute_recipe_cost", "callee": "append", "source_file": "backend/app/services/planner/cost.py", "source_location": "L98"}, {"caller_nid": "cost_compute_recipe_cost", "callee": "IngredientCost", "source_file": "backend/app/services/planner/cost.py", "source_location": "L99"}, {"caller_nid": "cost_compute_recipe_cost", "callee": "get", "source_file": "backend/app/services/planner/cost.py", "source_location": "L103"}, {"caller_nid": "cost_compute_recipe_cost", "callee": "get", "source_file": "backend/app/services/planner/cost.py", "source_location": "L104"}, {"caller_nid": "cost_compute_recipe_cost", "callee": "RecipeCost", "source_file": "backend/app/services/planner/cost.py", "source_location": "L114"}, {"caller_nid": "cost_compute_recipe_cost", "callee": "quantize", "source_file": "backend/app/services/planner/cost.py", "source_location": "L116"}, {"caller_nid": "cost_compute_recipe_cost", "callee": "Decimal", "source_file": "backend/app/services/planner/cost.py", "source_location": "L116"}, {"caller_nid": "cost_compute_recipe_cost", "callee": "quantize", "source_file": "backend/app/services/planner/cost.py", "source_location": "L117"}, {"caller_nid": "cost_compute_recipe_cost", "callee": "Decimal", "source_file": "backend/app/services/planner/cost.py", "source_location": "L117"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/da85812840888913d18f8a774e090306985497a2da2448d486841b8060a5fee4.json b/graphify-out/cache/da85812840888913d18f8a774e090306985497a2da2448d486841b8060a5fee4.json
deleted file mode 100644
index ed1dd4b..0000000
--- a/graphify-out/cache/da85812840888913d18f8a774e090306985497a2da2448d486841b8060a5fee4.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_tests_test_alembic_py", "label": "test_alembic.py", "file_type": "code", "source_file": "backend/tests/test_alembic.py", "source_location": "L1"}, {"id": "test_alembic_test_alembic_upgrade_head_roundtrip", "label": "test_alembic_upgrade_head_roundtrip()", "file_type": "code", "source_file": "backend/tests/test_alembic.py", "source_location": "L21"}, {"id": "test_alembic_rationale_1", "label": "Alembic round-trip test. Verifies that ``alembic upgrade head`` followed by ``a", "file_type": "rationale", "source_file": "backend/tests/test_alembic.py", "source_location": "L1"}], "edges": [{"source": "backend_tests_test_alembic_py", "target": "os", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_alembic.py", "source_location": "L12", "weight": 1.0}, {"source": "backend_tests_test_alembic_py", "target": "pathlib", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_alembic.py", "source_location": "L13", "weight": 1.0}, {"source": "backend_tests_test_alembic_py", "target": "subprocess", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_alembic.py", "source_location": "L14", "weight": 1.0}, {"source": "backend_tests_test_alembic_py", "target": "pytest", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_alembic.py", "source_location": "L15", "weight": 1.0}, {"source": "backend_tests_test_alembic_py", "target": "test_alembic_test_alembic_upgrade_head_roundtrip", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_alembic.py", "source_location": "L21", "weight": 1.0}, {"source": "test_alembic_rationale_1", "target": "backend_tests_test_alembic_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_alembic.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "test_alembic_test_alembic_upgrade_head_roundtrip", "callee": "get", "source_file": "backend/tests/test_alembic.py", "source_location": "L22"}, {"caller_nid": "test_alembic_test_alembic_upgrade_head_roundtrip", "callee": "get", "source_file": "backend/tests/test_alembic.py", "source_location": "L22"}, {"caller_nid": "test_alembic_test_alembic_upgrade_head_roundtrip", "callee": "copy", "source_file": "backend/tests/test_alembic.py", "source_location": "L25"}, {"caller_nid": "test_alembic_test_alembic_upgrade_head_roundtrip", "callee": "run", "source_file": "backend/tests/test_alembic.py", "source_location": "L31"}, {"caller_nid": "test_alembic_test_alembic_upgrade_head_roundtrip", "callee": "str", "source_file": "backend/tests/test_alembic.py", "source_location": "L33"}, {"caller_nid": "test_alembic_test_alembic_upgrade_head_roundtrip", "callee": "run", "source_file": "backend/tests/test_alembic.py", "source_location": "L40"}, {"caller_nid": "test_alembic_test_alembic_upgrade_head_roundtrip", "callee": "str", "source_file": "backend/tests/test_alembic.py", "source_location": "L42"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/e0c58b19cf4b2f486757aa6abf78b1c1376f7f718429dd57ebda643ea6d5cace.json b/graphify-out/cache/e0c58b19cf4b2f486757aa6abf78b1c1376f7f718429dd57ebda643ea6d5cace.json
deleted file mode 100644
index 92d4710..0000000
--- a/graphify-out/cache/e0c58b19cf4b2f486757aa6abf78b1c1376f7f718429dd57ebda643ea6d5cace.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "frontend_tailwind_config_js", "label": "tailwind.config.js", "file_type": "code", "source_file": "frontend/tailwind.config.js", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/graphify-out/cache/e2875597aa8f963b292f7d77650d33a6b2515e1b7f925bb74af94f317edebf53.json b/graphify-out/cache/e2875597aa8f963b292f7d77650d33a6b2515e1b7f925bb74af94f317edebf53.json
deleted file mode 100644
index 5bad8e9..0000000
--- a/graphify-out/cache/e2875597aa8f963b292f7d77650d33a6b2515e1b7f925bb74af94f317edebf53.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "frontend_src_types_index_ts", "label": "index.ts", "file_type": "code", "source_file": "frontend/src/types/index.ts", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/graphify-out/cache/e29024bbe8cc42570202664e0b24f63461f32ff4f1f6a0abace8a85f360625b3.json b/graphify-out/cache/e29024bbe8cc42570202664e0b24f63461f32ff4f1f6a0abace8a85f360625b3.json
deleted file mode 100644
index 0ecfa6d..0000000
--- a/graphify-out/cache/e29024bbe8cc42570202664e0b24f63461f32ff4f1f6a0abace8a85f360625b3.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_models_init_py", "label": "__init__.py", "file_type": "code", "source_file": "backend/app/models/__init__.py", "source_location": "L1"}, {"id": "init_dayofweek", "label": "DayOfWeek", "file_type": "code", "source_file": "backend/app/models/__init__.py", "source_location": "L13"}, {"id": "init_mealtype", "label": "MealType", "file_type": "code", "source_file": "backend/app/models/__init__.py", "source_location": "L23"}, {"id": "init_mealplanstatus", "label": "MealPlanStatus", "file_type": "code", "source_file": "backend/app/models/__init__.py", "source_location": "L29"}, {"id": "init_mealplanitemstatus", "label": "MealPlanItemStatus", "file_type": "code", "source_file": "backend/app/models/__init__.py", "source_location": "L36"}, {"id": "str", "label": "str", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "init_approvaltokenstatus", "label": "ApprovalTokenStatus", "file_type": "code", "source_file": "backend/app/models/__init__.py", "source_location": "L43"}, {"id": "init_familymemberrole", "label": "FamilyMemberRole", "file_type": "code", "source_file": "backend/app/models/__init__.py", "source_location": "L49"}, {"id": "init_denialreason", "label": "DenialReason", "file_type": "code", "source_file": "backend/app/models/__init__.py", "source_location": "L54"}, {"id": "init_neversuggestreason", "label": "NeverSuggestReason", "file_type": "code", "source_file": "backend/app/models/__init__.py", "source_location": "L62"}, {"id": "init_scrapestatus", "label": "ScrapeStatus", "file_type": "code", "source_file": "backend/app/models/__init__.py", "source_location": "L69"}, {"id": "init_emailstatus", "label": "EmailStatus", "file_type": "code", "source_file": "backend/app/models/__init__.py", "source_location": "L75"}, {"id": "init_ingredientmatchsource", "label": "IngredientMatchSource", "file_type": "code", "source_file": "backend/app/models/__init__.py", "source_location": "L82"}, {"id": "init_familyprofile", "label": "FamilyProfile", "file_type": "code", "source_file": "backend/app/models/__init__.py", "source_location": "L88"}, {"id": "base", "label": "Base", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "init_familymember", "label": "FamilyMember", "file_type": "code", "source_file": "backend/app/models/__init__.py", "source_location": "L120"}, {"id": "init_ingredient", "label": "Ingredient", "file_type": "code", "source_file": "backend/app/models/__init__.py", "source_location": "L141"}, {"id": "init_recipe", "label": "Recipe", "file_type": "code", "source_file": "backend/app/models/__init__.py", "source_location": "L161"}, {"id": "init_total_time_minutes", "label": "total_time_minutes()", "file_type": "code", "source_file": "backend/app/models/__init__.py", "source_location": "L191"}, {"id": "init_mealplan", "label": "MealPlan", "file_type": "code", "source_file": "backend/app/models/__init__.py", "source_location": "L195"}, {"id": "init_mealplanitem", "label": "MealPlanItem", "file_type": "code", "source_file": "backend/app/models/__init__.py", "source_location": "L216"}, {"id": "init_mealplanvote", "label": "MealPlanVote", "file_type": "code", "source_file": "backend/app/models/__init__.py", "source_location": "L243"}, {"id": "init_approvaltoken", "label": "ApprovalToken", "file_type": "code", "source_file": "backend/app/models/__init__.py", "source_location": "L260"}, {"id": "init_homepantry", "label": "HomePantry", "file_type": "code", "source_file": "backend/app/models/__init__.py", "source_location": "L280"}, {"id": "init_feedback", "label": "Feedback", "file_type": "code", "source_file": "backend/app/models/__init__.py", "source_location": "L300"}, {"id": "init_neversuggest", "label": "NeverSuggest", "file_type": "code", "source_file": "backend/app/models/__init__.py", "source_location": "L322"}, {"id": "init_groceryitem", "label": "GroceryItem", "file_type": "code", "source_file": "backend/app/models/__init__.py", "source_location": "L337"}, {"id": "init_scrapelog", "label": "ScrapeLog", "file_type": "code", "source_file": "backend/app/models/__init__.py", "source_location": "L364"}, {"id": "init_emaillog", "label": "EmailLog", "file_type": "code", "source_file": "backend/app/models/__init__.py", "source_location": "L378"}, {"id": "init_ingredientgrocerymatch", "label": "IngredientGroceryMatch", "file_type": "code", "source_file": "backend/app/models/__init__.py", "source_location": "L397"}, {"id": "init_weeklyrun", "label": "WeeklyRun", "file_type": "code", "source_file": "backend/app/models/__init__.py", "source_location": "L415"}], "edges": [{"source": "backend_app_models_init_py", "target": "sqlalchemy", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L1", "weight": 1.0}, {"source": "backend_app_models_init_py", "target": "sqlalchemy_dialects_postgresql", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L5", "weight": 1.0}, {"source": "backend_app_models_init_py", "target": "sqlalchemy_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L6", "weight": 1.0}, {"source": "backend_app_models_init_py", "target": "sqlalchemy_sql", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L7", "weight": 1.0}, {"source": "backend_app_models_init_py", "target": "app_database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L8", "weight": 1.0}, {"source": "backend_app_models_init_py", "target": "uuid", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L9", "weight": 1.0}, {"source": "backend_app_models_init_py", "target": "enum", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L10", "weight": 1.0}, {"source": "backend_app_models_init_py", "target": "init_dayofweek", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L13", "weight": 1.0}, {"source": "backend_app_models_init_py", "target": "init_mealtype", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L23", "weight": 1.0}, {"source": "backend_app_models_init_py", "target": "init_mealplanstatus", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L29", "weight": 1.0}, {"source": "backend_app_models_init_py", "target": "init_mealplanitemstatus", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L36", "weight": 1.0}, {"source": "init_mealplanitemstatus", "target": "str", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L36", "weight": 1.0}, {"source": "backend_app_models_init_py", "target": "init_approvaltokenstatus", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L43", "weight": 1.0}, {"source": "backend_app_models_init_py", "target": "init_familymemberrole", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L49", "weight": 1.0}, {"source": "backend_app_models_init_py", "target": "init_denialreason", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L54", "weight": 1.0}, {"source": "backend_app_models_init_py", "target": "init_neversuggestreason", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L62", "weight": 1.0}, {"source": "backend_app_models_init_py", "target": "init_scrapestatus", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L69", "weight": 1.0}, {"source": "backend_app_models_init_py", "target": "init_emailstatus", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L75", "weight": 1.0}, {"source": "backend_app_models_init_py", "target": "init_ingredientmatchsource", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L82", "weight": 1.0}, {"source": "backend_app_models_init_py", "target": "init_familyprofile", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L88", "weight": 1.0}, {"source": "init_familyprofile", "target": "base", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L88", "weight": 1.0}, {"source": "backend_app_models_init_py", "target": "init_familymember", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L120", "weight": 1.0}, {"source": "init_familymember", "target": "base", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L120", "weight": 1.0}, {"source": "backend_app_models_init_py", "target": "init_ingredient", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L141", "weight": 1.0}, {"source": "init_ingredient", "target": "base", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L141", "weight": 1.0}, {"source": "backend_app_models_init_py", "target": "init_recipe", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L161", "weight": 1.0}, {"source": "init_recipe", "target": "base", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L161", "weight": 1.0}, {"source": "backend_app_models_init_py", "target": "init_total_time_minutes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L191", "weight": 1.0}, {"source": "backend_app_models_init_py", "target": "init_mealplan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L195", "weight": 1.0}, {"source": "init_mealplan", "target": "base", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L195", "weight": 1.0}, {"source": "backend_app_models_init_py", "target": "init_mealplanitem", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L216", "weight": 1.0}, {"source": "init_mealplanitem", "target": "base", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L216", "weight": 1.0}, {"source": "backend_app_models_init_py", "target": "init_mealplanvote", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L243", "weight": 1.0}, {"source": "init_mealplanvote", "target": "base", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L243", "weight": 1.0}, {"source": "backend_app_models_init_py", "target": "init_approvaltoken", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L260", "weight": 1.0}, {"source": "init_approvaltoken", "target": "base", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L260", "weight": 1.0}, {"source": "backend_app_models_init_py", "target": "init_homepantry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L280", "weight": 1.0}, {"source": "init_homepantry", "target": "base", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L280", "weight": 1.0}, {"source": "backend_app_models_init_py", "target": "init_feedback", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L300", "weight": 1.0}, {"source": "init_feedback", "target": "base", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L300", "weight": 1.0}, {"source": "backend_app_models_init_py", "target": "init_neversuggest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L322", "weight": 1.0}, {"source": "init_neversuggest", "target": "base", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L322", "weight": 1.0}, {"source": "backend_app_models_init_py", "target": "init_groceryitem", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L337", "weight": 1.0}, {"source": "init_groceryitem", "target": "base", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L337", "weight": 1.0}, {"source": "backend_app_models_init_py", "target": "init_scrapelog", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L364", "weight": 1.0}, {"source": "init_scrapelog", "target": "base", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L364", "weight": 1.0}, {"source": "backend_app_models_init_py", "target": "init_emaillog", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L378", "weight": 1.0}, {"source": "init_emaillog", "target": "base", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L378", "weight": 1.0}, {"source": "backend_app_models_init_py", "target": "init_ingredientgrocerymatch", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L397", "weight": 1.0}, {"source": "init_ingredientgrocerymatch", "target": "base", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L397", "weight": 1.0}, {"source": "backend_app_models_init_py", "target": "init_weeklyrun", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L415", "weight": 1.0}, {"source": "init_weeklyrun", "target": "base", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/models/__init__.py", "source_location": "L415", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/graphify-out/cache/e7f83ddf73e9139218b7dad625efc67ab2d29fce3d701ce7d13a0ea7dbb7de4d.json b/graphify-out/cache/e7f83ddf73e9139218b7dad625efc67ab2d29fce3d701ce7d13a0ea7dbb7de4d.json
deleted file mode 100644
index 52fd903..0000000
--- a/graphify-out/cache/e7f83ddf73e9139218b7dad625efc67ab2d29fce3d701ce7d13a0ea7dbb7de4d.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "frontend_src_lib_toast_ts", "label": "toast.ts", "file_type": "code", "source_file": "frontend/src/lib/toast.ts", "source_location": "L1"}], "edges": [{"source": "frontend_src_lib_toast_ts", "target": "react_hot_toast", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "frontend/src/lib/toast.ts", "source_location": "L1", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/graphify-out/cache/e90eb608e280f9806dfff9ec55f0d52d16ce2eb18beacc32d2e46c8c0208d1e4.json b/graphify-out/cache/e90eb608e280f9806dfff9ec55f0d52d16ce2eb18beacc32d2e46c8c0208d1e4.json
deleted file mode 100644
index 1ee35ae..0000000
--- a/graphify-out/cache/e90eb608e280f9806dfff9ec55f0d52d16ce2eb18beacc32d2e46c8c0208d1e4.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_tests_test_orchestrator_py", "label": "test_orchestrator.py", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L1"}, {"id": "test_orchestrator_family", "label": "family()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L15"}, {"id": "test_orchestrator_member", "label": "member()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L31"}, {"id": "test_orchestrator_weekly_run", "label": "weekly_run()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L46"}, {"id": "test_orchestrator_weekly_run_scraped", "label": "weekly_run_scraped()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L55"}, {"id": "test_orchestrator_weekly_run_generated", "label": "weekly_run_generated()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L69"}, {"id": "test_orchestrator_meal_plan", "label": "meal_plan()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L84"}, {"id": "test_orchestrator_pending_item", "label": "pending_item()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L98"}, {"id": "test_orchestrator_weekly_run_emailed", "label": "weekly_run_emailed()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L123"}, {"id": "test_orchestrator_weekly_run_reminded", "label": "weekly_run_reminded()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L139"}, {"id": "test_orchestrator_test_send_admin_alert_noop_when_email_unset", "label": "test_send_admin_alert_noop_when_email_unset()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L159"}, {"id": "test_orchestrator_test_send_admin_alert_calls_backend", "label": "test_send_admin_alert_calls_backend()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L168"}, {"id": "test_orchestrator_test_step_scrape_idempotent", "label": "test_step_scrape_idempotent()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L194"}, {"id": "test_orchestrator_test_step_scrape_success", "label": "test_step_scrape_success()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L201"}, {"id": "test_orchestrator_test_step_scrape_both_fail_marks_stale", "label": "test_step_scrape_both_fail_marks_stale()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L212"}, {"id": "test_orchestrator_test_step_generate_idempotent", "label": "test_step_generate_idempotent()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L231"}, {"id": "test_orchestrator_test_step_generate_creates_plan", "label": "test_step_generate_creates_plan()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L238"}, {"id": "test_orchestrator_test_step_generate_records_error_on_failure", "label": "test_step_generate_records_error_on_failure()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L257"}, {"id": "test_orchestrator_test_step_email_idempotent", "label": "test_step_email_idempotent()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L276"}, {"id": "test_orchestrator_test_step_email_sends_per_member", "label": "test_step_email_sends_per_member()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L283"}, {"id": "test_orchestrator_test_step_email_stale_banner", "label": "test_step_email_stale_banner()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L302"}, {"id": "test_orchestrator_test_step_email_escapes_recipe_name", "label": "test_step_email_escapes_recipe_name()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L319"}, {"id": "test_orchestrator_test_step_reminder_idempotent", "label": "test_step_reminder_idempotent()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L345"}, {"id": "test_orchestrator_test_step_reminder_skips_when_not_emailed", "label": "test_step_reminder_skips_when_not_emailed()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L352"}, {"id": "test_orchestrator_test_step_reminder_sends_to_non_voter", "label": "test_step_reminder_sends_to_non_voter()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L370"}, {"id": "test_orchestrator_test_step_reminder_skips_voter", "label": "test_step_reminder_skips_voter()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L391"}, {"id": "test_orchestrator_test_step_reminder_no_sends_when_all_voted", "label": "test_step_reminder_no_sends_when_all_voted()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L420"}, {"id": "test_orchestrator_test_step_deadline_idempotent", "label": "test_step_deadline_idempotent()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L454"}, {"id": "test_orchestrator_test_step_deadline_resolves_pending_to_approved", "label": "test_step_deadline_resolves_pending_to_approved()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L463"}, {"id": "test_orchestrator_test_step_deadline_resolves_pending_to_denied", "label": "test_step_deadline_resolves_pending_to_denied()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L474"}, {"id": "test_orchestrator_weekly_run_deadline_passed", "label": "weekly_run_deadline_passed()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L489"}, {"id": "test_orchestrator_approved_item", "label": "approved_item()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L506"}, {"id": "test_orchestrator_test_step_finalize_idempotent", "label": "test_step_finalize_idempotent()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L530"}, {"id": "test_orchestrator_test_step_finalize_sends_shopping_list", "label": "test_step_finalize_sends_shopping_list()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L539"}, {"id": "test_orchestrator_test_step_finalize_no_approved_sends_empty_message", "label": "test_step_finalize_no_approved_sends_empty_message()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L559"}, {"id": "test_orchestrator_test_run_step_upserts_weekly_run", "label": "test_run_step_upserts_weekly_run()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L580"}, {"id": "test_orchestrator_test_run_step_invalid_raises", "label": "test_run_step_invalid_raises()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L606"}, {"id": "test_orchestrator_test_run_week_calls_all_steps", "label": "test_run_week_calls_all_steps()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L612"}, {"id": "test_orchestrator_admin_client", "label": "admin_client()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L632"}, {"id": "test_orchestrator_test_orchestrate_status_returns_list", "label": "test_orchestrate_status_returns_list()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L646"}, {"id": "test_orchestrator_test_orchestrate_step_invalid_returns_400", "label": "test_orchestrate_step_invalid_returns_400()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L654"}, {"id": "test_orchestrator_test_orchestrate_run_week_returns_202", "label": "test_orchestrate_run_week_returns_202()", "file_type": "code", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L663"}, {"id": "test_orchestrator_rationale_1", "label": "Tests for the Phase 5 weekly orchestration.", "file_type": "rationale", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L1"}], "edges": [{"source": "backend_tests_test_orchestrator_py", "target": "pytest", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L2", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "datetime", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L3", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "uuid", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L4", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_family", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L15", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_member", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L31", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_weekly_run", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L46", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_weekly_run_scraped", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L55", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_weekly_run_generated", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L69", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_meal_plan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L84", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_pending_item", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L98", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_weekly_run_emailed", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L123", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_weekly_run_reminded", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L139", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_test_send_admin_alert_noop_when_email_unset", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L159", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_test_send_admin_alert_calls_backend", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L168", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_test_step_scrape_idempotent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L194", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_test_step_scrape_success", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L201", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_test_step_scrape_both_fail_marks_stale", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L212", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_test_step_generate_idempotent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L231", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_test_step_generate_creates_plan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L238", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_test_step_generate_records_error_on_failure", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L257", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_test_step_email_idempotent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L276", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_test_step_email_sends_per_member", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L283", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_test_step_email_stale_banner", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L302", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_test_step_email_escapes_recipe_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L319", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_test_step_reminder_idempotent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L345", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_test_step_reminder_skips_when_not_emailed", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L352", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_test_step_reminder_sends_to_non_voter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L370", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_test_step_reminder_skips_voter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L391", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_test_step_reminder_no_sends_when_all_voted", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L420", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_test_step_deadline_idempotent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L454", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_test_step_deadline_resolves_pending_to_approved", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L463", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_test_step_deadline_resolves_pending_to_denied", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L474", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_weekly_run_deadline_passed", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L489", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_approved_item", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L506", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_test_step_finalize_idempotent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L530", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_test_step_finalize_sends_shopping_list", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L539", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_test_step_finalize_no_approved_sends_empty_message", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L559", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_test_run_step_upserts_weekly_run", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L580", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_test_run_step_invalid_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L606", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_test_run_week_calls_all_steps", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L612", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_admin_client", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L632", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_test_orchestrate_status_returns_list", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L646", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_test_orchestrate_step_invalid_returns_400", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L654", "weight": 1.0}, {"source": "backend_tests_test_orchestrator_py", "target": "test_orchestrator_test_orchestrate_run_week_returns_202", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L663", "weight": 1.0}, {"source": "test_orchestrator_rationale_1", "target": "backend_tests_test_orchestrator_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "test_orchestrator_family", "callee": "FamilyProfile", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L17"}, {"caller_nid": "test_orchestrator_family", "callee": "uuid4", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L18"}, {"caller_nid": "test_orchestrator_family", "callee": "add", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L25"}, {"caller_nid": "test_orchestrator_family", "callee": "flush", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L26"}, {"caller_nid": "test_orchestrator_member", "callee": "FamilyMember", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L33"}, {"caller_nid": "test_orchestrator_member", "callee": "uuid4", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L34"}, {"caller_nid": "test_orchestrator_member", "callee": "add", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L40"}, {"caller_nid": "test_orchestrator_member", "callee": "flush", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L41"}, {"caller_nid": "test_orchestrator_weekly_run", "callee": "WeeklyRun", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L48"}, {"caller_nid": "test_orchestrator_weekly_run", "callee": "add", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L49"}, {"caller_nid": "test_orchestrator_weekly_run", "callee": "flush", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L50"}, {"caller_nid": "test_orchestrator_weekly_run_scraped", "callee": "WeeklyRun", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L57"}, {"caller_nid": "test_orchestrator_weekly_run_scraped", "callee": "now", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L61"}, {"caller_nid": "test_orchestrator_weekly_run_scraped", "callee": "add", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L63"}, {"caller_nid": "test_orchestrator_weekly_run_scraped", "callee": "flush", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L64"}, {"caller_nid": "test_orchestrator_weekly_run_generated", "callee": "WeeklyRun", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L71"}, {"caller_nid": "test_orchestrator_weekly_run_generated", "callee": "now", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L75"}, {"caller_nid": "test_orchestrator_weekly_run_generated", "callee": "now", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L76"}, {"caller_nid": "test_orchestrator_weekly_run_generated", "callee": "add", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L78"}, {"caller_nid": "test_orchestrator_weekly_run_generated", "callee": "flush", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L79"}, {"caller_nid": "test_orchestrator_meal_plan", "callee": "MealPlan", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L86"}, {"caller_nid": "test_orchestrator_meal_plan", "callee": "uuid4", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L87"}, {"caller_nid": "test_orchestrator_meal_plan", "callee": "add", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L92"}, {"caller_nid": "test_orchestrator_meal_plan", "callee": "flush", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L93"}, {"caller_nid": "test_orchestrator_pending_item", "callee": "Recipe", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L100"}, {"caller_nid": "test_orchestrator_pending_item", "callee": "uuid4", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L101"}, {"caller_nid": "test_orchestrator_pending_item", "callee": "add", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L107"}, {"caller_nid": "test_orchestrator_pending_item", "callee": "flush", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L108"}, {"caller_nid": "test_orchestrator_pending_item", "callee": "MealPlanItem", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L109"}, {"caller_nid": "test_orchestrator_pending_item", "callee": "uuid4", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L110"}, {"caller_nid": "test_orchestrator_pending_item", "callee": "add", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L117"}, {"caller_nid": "test_orchestrator_pending_item", "callee": "flush", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L118"}, {"caller_nid": "test_orchestrator_weekly_run_emailed", "callee": "WeeklyRun", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L125"}, {"caller_nid": "test_orchestrator_weekly_run_emailed", "callee": "now", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L129"}, {"caller_nid": "test_orchestrator_weekly_run_emailed", "callee": "now", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L130"}, {"caller_nid": "test_orchestrator_weekly_run_emailed", "callee": "now", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L131"}, {"caller_nid": "test_orchestrator_weekly_run_emailed", "callee": "add", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L133"}, {"caller_nid": "test_orchestrator_weekly_run_emailed", "callee": "flush", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L134"}, {"caller_nid": "test_orchestrator_weekly_run_reminded", "callee": "WeeklyRun", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L141"}, {"caller_nid": "test_orchestrator_weekly_run_reminded", "callee": "now", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L145"}, {"caller_nid": "test_orchestrator_weekly_run_reminded", "callee": "now", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L146"}, {"caller_nid": "test_orchestrator_weekly_run_reminded", "callee": "now", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L147"}, {"caller_nid": "test_orchestrator_weekly_run_reminded", "callee": "now", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L148"}, {"caller_nid": "test_orchestrator_weekly_run_reminded", "callee": "add", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L150"}, {"caller_nid": "test_orchestrator_weekly_run_reminded", "callee": "flush", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L151"}, {"caller_nid": "test_orchestrator_test_send_admin_alert_noop_when_email_unset", "callee": "setattr", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L160"}, {"caller_nid": "test_orchestrator_test_send_admin_alert_noop_when_email_unset", "callee": "type(\"S\", (), {\"ADMIN_EMAIL\": \"\"})", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L162"}, {"caller_nid": "test_orchestrator_test_send_admin_alert_noop_when_email_unset", "callee": "type", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L162"}, {"caller_nid": "test_orchestrator_test_send_admin_alert_noop_when_email_unset", "callee": "send_admin_alert", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L165"}, {"caller_nid": "test_orchestrator_test_send_admin_alert_calls_backend", "callee": "setattr", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L175"}, {"caller_nid": "test_orchestrator_test_send_admin_alert_calls_backend", "callee": "type(\"S\", (), {\"ADMIN_EMAIL\": \"admin@example.com\"})", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L177"}, {"caller_nid": "test_orchestrator_test_send_admin_alert_calls_backend", "callee": "type", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L177"}, {"caller_nid": "test_orchestrator_test_send_admin_alert_calls_backend", "callee": "setattr", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L179"}, {"caller_nid": "test_orchestrator_test_send_admin_alert_calls_backend", "callee": "FakeBackend", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L181"}, {"caller_nid": "test_orchestrator_test_send_admin_alert_calls_backend", "callee": "send_admin_alert", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L184"}, {"caller_nid": "test_orchestrator_test_send_admin_alert_calls_backend", "callee": "len", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L185"}, {"caller_nid": "test_orchestrator_test_step_scrape_idempotent", "callee": "step_scrape", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L197"}, {"caller_nid": "test_orchestrator_test_step_scrape_success", "callee": "setattr", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L202"}, {"caller_nid": "test_orchestrator_test_step_scrape_success", "callee": "step_scrape", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L207"}, {"caller_nid": "test_orchestrator_test_step_scrape_both_fail_marks_stale", "callee": "setattr", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L213"}, {"caller_nid": "test_orchestrator_test_step_scrape_both_fail_marks_stale", "callee": "setattr", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L217"}, {"caller_nid": "test_orchestrator_test_step_scrape_both_fail_marks_stale", "callee": "step_scrape", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L222"}, {"caller_nid": "test_orchestrator_test_step_generate_idempotent", "callee": "step_generate", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L234"}, {"caller_nid": "test_orchestrator_test_step_generate_creates_plan", "callee": "setattr", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L242"}, {"caller_nid": "test_orchestrator_test_step_generate_creates_plan", "callee": "GenerationResult", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L244"}, {"caller_nid": "test_orchestrator_test_step_generate_creates_plan", "callee": "uuid4", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L245"}, {"caller_nid": "test_orchestrator_test_step_generate_creates_plan", "callee": "step_generate", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L253"}, {"caller_nid": "test_orchestrator_test_step_generate_records_error_on_failure", "callee": "setattr", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L258"}, {"caller_nid": "test_orchestrator_test_step_generate_records_error_on_failure", "callee": "throw", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L260"}, {"caller_nid": "test_orchestrator_test_step_generate_records_error_on_failure", "callee": "RuntimeError", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L260"}, {"caller_nid": "test_orchestrator_test_step_generate_records_error_on_failure", "callee": "setattr", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L262"}, {"caller_nid": "test_orchestrator_test_step_generate_records_error_on_failure", "callee": "raises", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L267"}, {"caller_nid": "test_orchestrator_test_step_generate_records_error_on_failure", "callee": "step_generate", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L268"}, {"caller_nid": "test_orchestrator_test_step_email_idempotent", "callee": "step_email", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L279"}, {"caller_nid": "test_orchestrator_test_step_email_sends_per_member", "callee": "setattr", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L290"}, {"caller_nid": "test_orchestrator_test_step_email_sends_per_member", "callee": "FakeBackend", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L292"}, {"caller_nid": "test_orchestrator_test_step_email_sends_per_member", "callee": "step_email", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L295"}, {"caller_nid": "test_orchestrator_test_step_email_sends_per_member", "callee": "len", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L297"}, {"caller_nid": "test_orchestrator_test_step_email_sends_per_member", "callee": "str", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L299"}, {"caller_nid": "test_orchestrator_test_step_email_stale_banner", "callee": "setattr", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L310"}, {"caller_nid": "test_orchestrator_test_step_email_stale_banner", "callee": "FakeBackend", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L312"}, {"caller_nid": "test_orchestrator_test_step_email_stale_banner", "callee": "step_email", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L315"}, {"caller_nid": "test_orchestrator_test_step_email_stale_banner", "callee": "lower", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L316"}, {"caller_nid": "test_orchestrator_test_step_email_stale_banner", "callee": "lower", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L316"}, {"caller_nid": "test_orchestrator_test_step_email_escapes_recipe_name", "callee": "flush", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L323"}, {"caller_nid": "test_orchestrator_test_step_email_escapes_recipe_name", "callee": "setattr", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L331"}, {"caller_nid": "test_orchestrator_test_step_email_escapes_recipe_name", "callee": "FakeBackend", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L333"}, {"caller_nid": "test_orchestrator_test_step_email_escapes_recipe_name", "callee": "step_email", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L336"}, {"caller_nid": "test_orchestrator_test_step_email_escapes_recipe_name", "callee": "len", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L337"}, {"caller_nid": "test_orchestrator_test_step_reminder_idempotent", "callee": "step_reminder", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L348"}, {"caller_nid": "test_orchestrator_test_step_reminder_skips_when_not_emailed", "callee": "setattr", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L359"}, {"caller_nid": "test_orchestrator_test_step_reminder_skips_when_not_emailed", "callee": "FakeBackend", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L361"}, {"caller_nid": "test_orchestrator_test_step_reminder_skips_when_not_emailed", "callee": "step_reminder", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L364"}, {"caller_nid": "test_orchestrator_test_step_reminder_skips_when_not_emailed", "callee": "len", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L366"}, {"caller_nid": "test_orchestrator_test_step_reminder_sends_to_non_voter", "callee": "setattr", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L379"}, {"caller_nid": "test_orchestrator_test_step_reminder_sends_to_non_voter", "callee": "FakeBackend", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L381"}, {"caller_nid": "test_orchestrator_test_step_reminder_sends_to_non_voter", "callee": "step_reminder", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L384"}, {"caller_nid": "test_orchestrator_test_step_reminder_sends_to_non_voter", "callee": "len", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L386"}, {"caller_nid": "test_orchestrator_test_step_reminder_sends_to_non_voter", "callee": "lower", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L388"}, {"caller_nid": "test_orchestrator_test_step_reminder_sends_to_non_voter", "callee": "lower", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L388"}, {"caller_nid": "test_orchestrator_test_step_reminder_skips_voter", "callee": "MealPlanVote", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L395"}, {"caller_nid": "test_orchestrator_test_step_reminder_skips_voter", "callee": "add", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L400"}, {"caller_nid": "test_orchestrator_test_step_reminder_skips_voter", "callee": "flush", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L401"}, {"caller_nid": "test_orchestrator_test_step_reminder_skips_voter", "callee": "setattr", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L409"}, {"caller_nid": "test_orchestrator_test_step_reminder_skips_voter", "callee": "FakeBackend", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L411"}, {"caller_nid": "test_orchestrator_test_step_reminder_skips_voter", "callee": "step_reminder", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L414"}, {"caller_nid": "test_orchestrator_test_step_reminder_skips_voter", "callee": "len", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L416"}, {"caller_nid": "test_orchestrator_test_step_reminder_no_sends_when_all_voted", "callee": "MealPlanVote", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L425"}, {"caller_nid": "test_orchestrator_test_step_reminder_no_sends_when_all_voted", "callee": "add", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L430"}, {"caller_nid": "test_orchestrator_test_step_reminder_no_sends_when_all_voted", "callee": "flush", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L431"}, {"caller_nid": "test_orchestrator_test_step_reminder_no_sends_when_all_voted", "callee": "setattr", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L439"}, {"caller_nid": "test_orchestrator_test_step_reminder_no_sends_when_all_voted", "callee": "FakeBackend", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L441"}, {"caller_nid": "test_orchestrator_test_step_reminder_no_sends_when_all_voted", "callee": "step_reminder", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L444"}, {"caller_nid": "test_orchestrator_test_step_reminder_no_sends_when_all_voted", "callee": "len", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L446"}, {"caller_nid": "test_orchestrator_test_step_deadline_idempotent", "callee": "now", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L455"}, {"caller_nid": "test_orchestrator_test_step_deadline_idempotent", "callee": "flush", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L456"}, {"caller_nid": "test_orchestrator_test_step_deadline_idempotent", "callee": "step_deadline", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L459"}, {"caller_nid": "test_orchestrator_test_step_deadline_resolves_pending_to_approved", "callee": "flush", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L467"}, {"caller_nid": "test_orchestrator_test_step_deadline_resolves_pending_to_approved", "callee": "step_deadline", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L468"}, {"caller_nid": "test_orchestrator_test_step_deadline_resolves_pending_to_approved", "callee": "refresh", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L469"}, {"caller_nid": "test_orchestrator_test_step_deadline_resolves_pending_to_denied", "callee": "flush", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L478"}, {"caller_nid": "test_orchestrator_test_step_deadline_resolves_pending_to_denied", "callee": "step_deadline", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L479"}, {"caller_nid": "test_orchestrator_test_step_deadline_resolves_pending_to_denied", "callee": "refresh", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L480"}, {"caller_nid": "test_orchestrator_weekly_run_deadline_passed", "callee": "WeeklyRun", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L491"}, {"caller_nid": "test_orchestrator_weekly_run_deadline_passed", "callee": "now", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L495"}, {"caller_nid": "test_orchestrator_weekly_run_deadline_passed", "callee": "now", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L496"}, {"caller_nid": "test_orchestrator_weekly_run_deadline_passed", "callee": "now", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L497"}, {"caller_nid": "test_orchestrator_weekly_run_deadline_passed", "callee": "now", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L498"}, {"caller_nid": "test_orchestrator_weekly_run_deadline_passed", "callee": "add", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L500"}, {"caller_nid": "test_orchestrator_weekly_run_deadline_passed", "callee": "flush", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L501"}, {"caller_nid": "test_orchestrator_approved_item", "callee": "Recipe", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L508"}, {"caller_nid": "test_orchestrator_approved_item", "callee": "uuid4", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L509"}, {"caller_nid": "test_orchestrator_approved_item", "callee": "add", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L515"}, {"caller_nid": "test_orchestrator_approved_item", "callee": "flush", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L516"}, {"caller_nid": "test_orchestrator_approved_item", "callee": "MealPlanItem", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L517"}, {"caller_nid": "test_orchestrator_approved_item", "callee": "uuid4", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L518"}, {"caller_nid": "test_orchestrator_approved_item", "callee": "add", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L525"}, {"caller_nid": "test_orchestrator_approved_item", "callee": "flush", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L526"}, {"caller_nid": "test_orchestrator_test_step_finalize_idempotent", "callee": "now", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L531"}, {"caller_nid": "test_orchestrator_test_step_finalize_idempotent", "callee": "flush", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L532"}, {"caller_nid": "test_orchestrator_test_step_finalize_idempotent", "callee": "step_finalize", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L535"}, {"caller_nid": "test_orchestrator_test_step_finalize_sends_shopping_list", "callee": "setattr", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L546"}, {"caller_nid": "test_orchestrator_test_step_finalize_sends_shopping_list", "callee": "FakeBackend", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L548"}, {"caller_nid": "test_orchestrator_test_step_finalize_sends_shopping_list", "callee": "step_finalize", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L551"}, {"caller_nid": "test_orchestrator_test_step_finalize_sends_shopping_list", "callee": "len", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L554"}, {"caller_nid": "test_orchestrator_test_step_finalize_sends_shopping_list", "callee": "lower", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L556"}, {"caller_nid": "test_orchestrator_test_step_finalize_no_approved_sends_empty_message", "callee": "setattr", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L566"}, {"caller_nid": "test_orchestrator_test_step_finalize_no_approved_sends_empty_message", "callee": "FakeBackend", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L568"}, {"caller_nid": "test_orchestrator_test_step_finalize_no_approved_sends_empty_message", "callee": "step_finalize", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L571"}, {"caller_nid": "test_orchestrator_test_run_step_upserts_weekly_run", "callee": "setattr", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L581"}, {"caller_nid": "test_orchestrator_test_run_step_upserts_weekly_run", "callee": "setattr", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L594"}, {"caller_nid": "test_orchestrator_test_run_step_upserts_weekly_run", "callee": "_NoCloseSession", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L596"}, {"caller_nid": "test_orchestrator_test_run_step_upserts_weekly_run", "callee": "run_step", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L599"}, {"caller_nid": "test_orchestrator_test_run_step_upserts_weekly_run", "callee": "first", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L601"}, {"caller_nid": "test_orchestrator_test_run_step_upserts_weekly_run", "callee": "filter", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L601"}, {"caller_nid": "test_orchestrator_test_run_step_upserts_weekly_run", "callee": "query", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L601"}, {"caller_nid": "test_orchestrator_test_run_step_invalid_raises", "callee": "raises", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L608"}, {"caller_nid": "test_orchestrator_test_run_step_invalid_raises", "callee": "run_step", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L609"}, {"caller_nid": "test_orchestrator_test_run_week_calls_all_steps", "callee": "setattr", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L618"}, {"caller_nid": "test_orchestrator_test_run_week_calls_all_steps", "callee": "run_week", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L623"}, {"caller_nid": "test_orchestrator_admin_client", "callee": "TestClient", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L638"}, {"caller_nid": "test_orchestrator_admin_client", "callee": "clear", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L640"}, {"caller_nid": "test_orchestrator_test_orchestrate_status_returns_list", "callee": "setattr", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L648"}, {"caller_nid": "test_orchestrator_test_orchestrate_status_returns_list", "callee": "get", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L649"}, {"caller_nid": "test_orchestrator_test_orchestrate_status_returns_list", "callee": "json", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L651"}, {"caller_nid": "test_orchestrator_test_orchestrate_step_invalid_returns_400", "callee": "setattr", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L656"}, {"caller_nid": "test_orchestrator_test_orchestrate_step_invalid_returns_400", "callee": "post", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L657"}, {"caller_nid": "test_orchestrator_test_orchestrate_run_week_returns_202", "callee": "setattr", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L665"}, {"caller_nid": "test_orchestrator_test_orchestrate_run_week_returns_202", "callee": "setattr", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L666"}, {"caller_nid": "test_orchestrator_test_orchestrate_run_week_returns_202", "callee": "post", "source_file": "backend/tests/test_orchestrator.py", "source_location": "L670"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/ea22f185346c06a80048c1b30c06ced102d5657a2d867a77bcfe5a9a11039d36.json b/graphify-out/cache/ea22f185346c06a80048c1b30c06ced102d5657a2d867a77bcfe5a9a11039d36.json
deleted file mode 100644
index ee5b31a..0000000
--- a/graphify-out/cache/ea22f185346c06a80048c1b30c06ced102d5657a2d867a77bcfe5a9a11039d36.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_services_scraper_service_py", "label": "scraper_service.py", "file_type": "code", "source_file": "backend/app/services/scraper_service.py", "source_location": "L1"}, {"id": "scraper_service_enqueue_scrape", "label": "enqueue_scrape()", "file_type": "code", "source_file": "backend/app/services/scraper_service.py", "source_location": "L36"}, {"id": "scraper_service_run_scrape_in_background", "label": "_run_scrape_in_background()", "file_type": "code", "source_file": "backend/app/services/scraper_service.py", "source_location": "L65"}, {"id": "scraper_service_scraperservice", "label": "ScraperService", "file_type": "code", "source_file": "backend/app/services/scraper_service.py", "source_location": "L123"}, {"id": "scraper_service_scraperservice_init", "label": ".__init__()", "file_type": "code", "source_file": "backend/app/services/scraper_service.py", "source_location": "L124"}, {"id": "scraper_service_scraperservice_run_scrape", "label": ".run_scrape()", "file_type": "code", "source_file": "backend/app/services/scraper_service.py", "source_location": "L127"}, {"id": "scraper_service_scraperservice_do_scrape", "label": "._do_scrape()", "file_type": "code", "source_file": "backend/app/services/scraper_service.py", "source_location": "L180"}, {"id": "scraper_service_scraperservice_save_grocery_item", "label": "._save_grocery_item()", "file_type": "code", "source_file": "backend/app/services/scraper_service.py", "source_location": "L200"}, {"id": "scraper_service_scraperservice_get_sale_items", "label": ".get_sale_items()", "file_type": "code", "source_file": "backend/app/services/scraper_service.py", "source_location": "L285"}, {"id": "scraper_service_rationale_1", "label": "Scraper service. Two entry points: - ``enqueue_scrape(db, source, scrape_type,", "file_type": "rationale", "source_file": "backend/app/services/scraper_service.py", "source_location": "L1"}, {"id": "scraper_service_rationale_43", "label": "Create the ScrapeLog row, commit, and schedule the background scrape. Retur", "file_type": "rationale", "source_file": "backend/app/services/scraper_service.py", "source_location": "L43"}, {"id": "scraper_service_rationale_68", "label": "Background entry point. Opens a fresh DB session \u2014 the request-scoped sessio", "file_type": "rationale", "source_file": "backend/app/services/scraper_service.py", "source_location": "L68"}, {"id": "scraper_service_rationale_130", "label": "Synchronous end-to-end scrape (legacy path). Creates the log row, runs t", "file_type": "rationale", "source_file": "backend/app/services/scraper_service.py", "source_location": "L130"}, {"id": "scraper_service_rationale_181", "label": "Run the scraper and persist items. Returns (saved, found). Raises any s", "file_type": "rationale", "source_file": "backend/app/services/scraper_service.py", "source_location": "L181"}], "edges": [{"source": "backend_app_services_scraper_service_py", "target": "logging", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/app/services/scraper_service.py", "source_location": "L19", "weight": 1.0}, {"source": "backend_app_services_scraper_service_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/scraper_service.py", "source_location": "L20", "weight": 1.0}, {"source": "backend_app_services_scraper_service_py", "target": "datetime", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/scraper_service.py", "source_location": "L21", "weight": 1.0}, {"source": "backend_app_services_scraper_service_py", "target": "uuid", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/scraper_service.py", "source_location": "L22", "weight": 1.0}, {"source": "backend_app_services_scraper_service_py", "target": "fastapi", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/scraper_service.py", "source_location": "L24", "weight": 1.0}, {"source": "backend_app_services_scraper_service_py", "target": "sqlalchemy_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/scraper_service.py", "source_location": "L25", "weight": 1.0}, {"source": "backend_app_services_scraper_service_py", "target": "app_database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/scraper_service.py", "source_location": "L27", "weight": 1.0}, {"source": "backend_app_services_scraper_service_py", "target": "app_models", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/scraper_service.py", "source_location": "L28", "weight": 1.0}, {"source": "backend_app_services_scraper_service_py", "target": "scraper_service_enqueue_scrape", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/scraper_service.py", "source_location": "L36", "weight": 1.0}, {"source": "backend_app_services_scraper_service_py", "target": "scraper_service_run_scrape_in_background", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/scraper_service.py", "source_location": "L65", "weight": 1.0}, {"source": "backend_app_services_scraper_service_py", "target": "scraper_service_scraperservice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/scraper_service.py", "source_location": "L123", "weight": 1.0}, {"source": "scraper_service_scraperservice", "target": "scraper_service_scraperservice_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/app/services/scraper_service.py", "source_location": "L124", "weight": 1.0}, {"source": "scraper_service_scraperservice", "target": "scraper_service_scraperservice_run_scrape", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/app/services/scraper_service.py", "source_location": "L127", "weight": 1.0}, {"source": "scraper_service_scraperservice", "target": "scraper_service_scraperservice_do_scrape", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/app/services/scraper_service.py", "source_location": "L180", "weight": 1.0}, {"source": "scraper_service_scraperservice", "target": "scraper_service_scraperservice_save_grocery_item", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/app/services/scraper_service.py", "source_location": "L200", "weight": 1.0}, {"source": "scraper_service_scraperservice", "target": "scraper_service_scraperservice_get_sale_items", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/app/services/scraper_service.py", "source_location": "L285", "weight": 1.0}, {"source": "scraper_service_run_scrape_in_background", "target": "scraper_service_scraperservice", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/services/scraper_service.py", "source_location": "L81", "weight": 1.0}, {"source": "scraper_service_run_scrape_in_background", "target": "scraper_service_scraperservice_do_scrape", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/services/scraper_service.py", "source_location": "L82", "weight": 1.0}, {"source": "scraper_service_scraperservice_run_scrape", "target": "scraper_service_scraperservice_do_scrape", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/services/scraper_service.py", "source_location": "L147", "weight": 1.0}, {"source": "scraper_service_scraperservice_do_scrape", "target": "scraper_service_scraperservice_save_grocery_item", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/services/scraper_service.py", "source_location": "L194", "weight": 1.0}, {"source": "scraper_service_rationale_1", "target": "backend_app_services_scraper_service_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/services/scraper_service.py", "source_location": "L1", "weight": 1.0}, {"source": "scraper_service_rationale_43", "target": "scraper_service_enqueue_scrape", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/services/scraper_service.py", "source_location": "L43", "weight": 1.0}, {"source": "scraper_service_rationale_68", "target": "scraper_service_run_scrape_in_background", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/services/scraper_service.py", "source_location": "L68", "weight": 1.0}, {"source": "scraper_service_rationale_130", "target": "scraper_service_scraperservice_run_scrape", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/services/scraper_service.py", "source_location": "L130", "weight": 1.0}, {"source": "scraper_service_rationale_181", "target": "scraper_service_scraperservice_do_scrape", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/services/scraper_service.py", "source_location": "L181", "weight": 1.0}], "raw_calls": [{"caller_nid": "scraper_service_enqueue_scrape", "callee": "ScrapeLog", "source_file": "backend/app/services/scraper_service.py", "source_location": "L48"}, {"caller_nid": "scraper_service_enqueue_scrape", "callee": "uuid4", "source_file": "backend/app/services/scraper_service.py", "source_location": "L49"}, {"caller_nid": "scraper_service_enqueue_scrape", "callee": "now", "source_file": "backend/app/services/scraper_service.py", "source_location": "L53"}, {"caller_nid": "scraper_service_enqueue_scrape", "callee": "add", "source_file": "backend/app/services/scraper_service.py", "source_location": "L55"}, {"caller_nid": "scraper_service_enqueue_scrape", "callee": "commit", "source_file": "backend/app/services/scraper_service.py", "source_location": "L56"}, {"caller_nid": "scraper_service_enqueue_scrape", "callee": "refresh", "source_file": "backend/app/services/scraper_service.py", "source_location": "L57"}, {"caller_nid": "scraper_service_enqueue_scrape", "callee": "add_task", "source_file": "backend/app/services/scraper_service.py", "source_location": "L59"}, {"caller_nid": "scraper_service_run_scrape_in_background", "callee": "SessionLocal", "source_file": "backend/app/services/scraper_service.py", "source_location": "L71"}, {"caller_nid": "scraper_service_run_scrape_in_background", "callee": "first", "source_file": "backend/app/services/scraper_service.py", "source_location": "L73"}, {"caller_nid": "scraper_service_run_scrape_in_background", "callee": "filter", "source_file": "backend/app/services/scraper_service.py", "source_location": "L73"}, {"caller_nid": "scraper_service_run_scrape_in_background", "callee": "query", "source_file": "backend/app/services/scraper_service.py", "source_location": "L73"}, {"caller_nid": "scraper_service_run_scrape_in_background", "callee": "error", "source_file": "backend/app/services/scraper_service.py", "source_location": "L75"}, {"caller_nid": "scraper_service_run_scrape_in_background", "callee": "now", "source_file": "backend/app/services/scraper_service.py", "source_location": "L85"}, {"caller_nid": "scraper_service_run_scrape_in_background", "callee": "int", "source_file": "backend/app/services/scraper_service.py", "source_location": "L86"}, {"caller_nid": "scraper_service_run_scrape_in_background", "callee": "total_seconds", "source_file": "backend/app/services/scraper_service.py", "source_location": "L87"}, {"caller_nid": "scraper_service_run_scrape_in_background", "callee": "run_match_job", "source_file": "backend/app/services/scraper_service.py", "source_location": "L91"}, {"caller_nid": "scraper_service_run_scrape_in_background", "callee": "run_llm_match_job", "source_file": "backend/app/services/scraper_service.py", "source_location": "L93"}, {"caller_nid": "scraper_service_run_scrape_in_background", "callee": "exception", "source_file": "backend/app/services/scraper_service.py", "source_location": "L96"}, {"caller_nid": "scraper_service_run_scrape_in_background", "callee": "commit", "source_file": "backend/app/services/scraper_service.py", "source_location": "L97"}, {"caller_nid": "scraper_service_run_scrape_in_background", "callee": "info", "source_file": "backend/app/services/scraper_service.py", "source_location": "L98"}, {"caller_nid": "scraper_service_run_scrape_in_background", "callee": "exception", "source_file": "backend/app/services/scraper_service.py", "source_location": "L103"}, {"caller_nid": "scraper_service_run_scrape_in_background", "callee": "rollback", "source_file": "backend/app/services/scraper_service.py", "source_location": "L104"}, {"caller_nid": "scraper_service_run_scrape_in_background", "callee": "first", "source_file": "backend/app/services/scraper_service.py", "source_location": "L106"}, {"caller_nid": "scraper_service_run_scrape_in_background", "callee": "filter", "source_file": "backend/app/services/scraper_service.py", "source_location": "L106"}, {"caller_nid": "scraper_service_run_scrape_in_background", "callee": "query", "source_file": "backend/app/services/scraper_service.py", "source_location": "L106"}, {"caller_nid": "scraper_service_run_scrape_in_background", "callee": "str", "source_file": "backend/app/services/scraper_service.py", "source_location": "L109"}, {"caller_nid": "scraper_service_run_scrape_in_background", "callee": "now", "source_file": "backend/app/services/scraper_service.py", "source_location": "L110"}, {"caller_nid": "scraper_service_run_scrape_in_background", "callee": "int", "source_file": "backend/app/services/scraper_service.py", "source_location": "L112"}, {"caller_nid": "scraper_service_run_scrape_in_background", "callee": "total_seconds", "source_file": "backend/app/services/scraper_service.py", "source_location": "L113"}, {"caller_nid": "scraper_service_run_scrape_in_background", "callee": "commit", "source_file": "backend/app/services/scraper_service.py", "source_location": "L115"}, {"caller_nid": "scraper_service_run_scrape_in_background", "callee": "close", "source_file": "backend/app/services/scraper_service.py", "source_location": "L117"}, {"caller_nid": "scraper_service_scraperservice_run_scrape", "callee": "ScrapeLog", "source_file": "backend/app/services/scraper_service.py", "source_location": "L134"}, {"caller_nid": "scraper_service_scraperservice_run_scrape", "callee": "uuid4", "source_file": "backend/app/services/scraper_service.py", "source_location": "L135"}, {"caller_nid": "scraper_service_scraperservice_run_scrape", "callee": "now", "source_file": "backend/app/services/scraper_service.py", "source_location": "L139"}, {"caller_nid": "scraper_service_scraperservice_run_scrape", "callee": "add", "source_file": "backend/app/services/scraper_service.py", "source_location": "L141"}, {"caller_nid": "scraper_service_scraperservice_run_scrape", "callee": "commit", "source_file": "backend/app/services/scraper_service.py", "source_location": "L142"}, {"caller_nid": "scraper_service_scraperservice_run_scrape", "callee": "info", "source_file": "backend/app/services/scraper_service.py", "source_location": "L144"}, {"caller_nid": "scraper_service_scraperservice_run_scrape", "callee": "now", "source_file": "backend/app/services/scraper_service.py", "source_location": "L150"}, {"caller_nid": "scraper_service_scraperservice_run_scrape", "callee": "int", "source_file": "backend/app/services/scraper_service.py", "source_location": "L151"}, {"caller_nid": "scraper_service_scraperservice_run_scrape", "callee": "total_seconds", "source_file": "backend/app/services/scraper_service.py", "source_location": "L152"}, {"caller_nid": "scraper_service_scraperservice_run_scrape", "callee": "commit", "source_file": "backend/app/services/scraper_service.py", "source_location": "L154"}, {"caller_nid": "scraper_service_scraperservice_run_scrape", "callee": "info", "source_file": "backend/app/services/scraper_service.py", "source_location": "L155"}, {"caller_nid": "scraper_service_scraperservice_run_scrape", "callee": "str", "source_file": "backend/app/services/scraper_service.py", "source_location": "L157"}, {"caller_nid": "scraper_service_scraperservice_run_scrape", "callee": "error", "source_file": "backend/app/services/scraper_service.py", "source_location": "L163"}, {"caller_nid": "scraper_service_scraperservice_run_scrape", "callee": "str", "source_file": "backend/app/services/scraper_service.py", "source_location": "L165"}, {"caller_nid": "scraper_service_scraperservice_run_scrape", "callee": "now", "source_file": "backend/app/services/scraper_service.py", "source_location": "L166"}, {"caller_nid": "scraper_service_scraperservice_run_scrape", "callee": "int", "source_file": "backend/app/services/scraper_service.py", "source_location": "L167"}, {"caller_nid": "scraper_service_scraperservice_run_scrape", "callee": "total_seconds", "source_file": "backend/app/services/scraper_service.py", "source_location": "L168"}, {"caller_nid": "scraper_service_scraperservice_run_scrape", "callee": "commit", "source_file": "backend/app/services/scraper_service.py", "source_location": "L170"}, {"caller_nid": "scraper_service_scraperservice_run_scrape", "callee": "str", "source_file": "backend/app/services/scraper_service.py", "source_location": "L172"}, {"caller_nid": "scraper_service_scraperservice_run_scrape", "callee": "str", "source_file": "backend/app/services/scraper_service.py", "source_location": "L174"}, {"caller_nid": "scraper_service_scraperservice_do_scrape", "callee": "LuckyCaliforniaScraper", "source_file": "backend/app/services/scraper_service.py", "source_location": "L188"}, {"caller_nid": "scraper_service_scraperservice_do_scrape", "callee": "fetch_all", "source_file": "backend/app/services/scraper_service.py", "source_location": "L192"}, {"caller_nid": "scraper_service_scraperservice_do_scrape", "callee": "cleanup", "source_file": "backend/app/services/scraper_service.py", "source_location": "L197"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "strip", "source_file": "backend/app/services/scraper_service.py", "source_location": "L203"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "get", "source_file": "backend/app/services/scraper_service.py", "source_location": "L203"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "lower", "source_file": "backend/app/services/scraper_service.py", "source_location": "L207"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "get", "source_file": "backend/app/services/scraper_service.py", "source_location": "L208"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "get", "source_file": "backend/app/services/scraper_service.py", "source_location": "L209"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "first", "source_file": "backend/app/services/scraper_service.py", "source_location": "L211"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "filter", "source_file": "backend/app/services/scraper_service.py", "source_location": "L211"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "query", "source_file": "backend/app/services/scraper_service.py", "source_location": "L211"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "Ingredient", "source_file": "backend/app/services/scraper_service.py", "source_location": "L216"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "uuid4", "source_file": "backend/app/services/scraper_service.py", "source_location": "L217"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "get", "source_file": "backend/app/services/scraper_service.py", "source_location": "L220"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "get", "source_file": "backend/app/services/scraper_service.py", "source_location": "L221"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "add", "source_file": "backend/app/services/scraper_service.py", "source_location": "L223"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "flush", "source_file": "backend/app/services/scraper_service.py", "source_location": "L224"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "first", "source_file": "backend/app/services/scraper_service.py", "source_location": "L231"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "filter", "source_file": "backend/app/services/scraper_service.py", "source_location": "L231"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "query", "source_file": "backend/app/services/scraper_service.py", "source_location": "L231"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "first", "source_file": "backend/app/services/scraper_service.py", "source_location": "L236"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "filter", "source_file": "backend/app/services/scraper_service.py", "source_location": "L236"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "query", "source_file": "backend/app/services/scraper_service.py", "source_location": "L236"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "get", "source_file": "backend/app/services/scraper_service.py", "source_location": "L238"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "get", "source_file": "backend/app/services/scraper_service.py", "source_location": "L243"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "get", "source_file": "backend/app/services/scraper_service.py", "source_location": "L244"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "get", "source_file": "backend/app/services/scraper_service.py", "source_location": "L245"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "get", "source_file": "backend/app/services/scraper_service.py", "source_location": "L246"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "get", "source_file": "backend/app/services/scraper_service.py", "source_location": "L247"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "get", "source_file": "backend/app/services/scraper_service.py", "source_location": "L248"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "get", "source_file": "backend/app/services/scraper_service.py", "source_location": "L249"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "get", "source_file": "backend/app/services/scraper_service.py", "source_location": "L250"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "bool", "source_file": "backend/app/services/scraper_service.py", "source_location": "L251"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "get", "source_file": "backend/app/services/scraper_service.py", "source_location": "L251"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "now", "source_file": "backend/app/services/scraper_service.py", "source_location": "L252"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "get", "source_file": "backend/app/services/scraper_service.py", "source_location": "L253"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "flush", "source_file": "backend/app/services/scraper_service.py", "source_location": "L256"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "GroceryItem", "source_file": "backend/app/services/scraper_service.py", "source_location": "L259"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "uuid4", "source_file": "backend/app/services/scraper_service.py", "source_location": "L260"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "get", "source_file": "backend/app/services/scraper_service.py", "source_location": "L263"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "get", "source_file": "backend/app/services/scraper_service.py", "source_location": "L264"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "get", "source_file": "backend/app/services/scraper_service.py", "source_location": "L265"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "get", "source_file": "backend/app/services/scraper_service.py", "source_location": "L266"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "get", "source_file": "backend/app/services/scraper_service.py", "source_location": "L267"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "get", "source_file": "backend/app/services/scraper_service.py", "source_location": "L268"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "get", "source_file": "backend/app/services/scraper_service.py", "source_location": "L269"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "get", "source_file": "backend/app/services/scraper_service.py", "source_location": "L270"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "bool", "source_file": "backend/app/services/scraper_service.py", "source_location": "L271"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "get", "source_file": "backend/app/services/scraper_service.py", "source_location": "L271"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "get", "source_file": "backend/app/services/scraper_service.py", "source_location": "L272"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "get", "source_file": "backend/app/services/scraper_service.py", "source_location": "L273"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "get", "source_file": "backend/app/services/scraper_service.py", "source_location": "L274"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "now", "source_file": "backend/app/services/scraper_service.py", "source_location": "L275"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "get", "source_file": "backend/app/services/scraper_service.py", "source_location": "L276"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "add", "source_file": "backend/app/services/scraper_service.py", "source_location": "L281"}, {"caller_nid": "scraper_service_scraperservice_save_grocery_item", "callee": "flush", "source_file": "backend/app/services/scraper_service.py", "source_location": "L282"}, {"caller_nid": "scraper_service_scraperservice_get_sale_items", "callee": "all", "source_file": "backend/app/services/scraper_service.py", "source_location": "L286"}, {"caller_nid": "scraper_service_scraperservice_get_sale_items", "callee": "limit", "source_file": "backend/app/services/scraper_service.py", "source_location": "L286"}, {"caller_nid": "scraper_service_scraperservice_get_sale_items", "callee": "order_by", "source_file": "backend/app/services/scraper_service.py", "source_location": "L286"}, {"caller_nid": "scraper_service_scraperservice_get_sale_items", "callee": "filter", "source_file": "backend/app/services/scraper_service.py", "source_location": "L286"}, {"caller_nid": "scraper_service_scraperservice_get_sale_items", "callee": "query", "source_file": "backend/app/services/scraper_service.py", "source_location": "L286"}, {"caller_nid": "scraper_service_scraperservice_get_sale_items", "callee": "desc", "source_file": "backend/app/services/scraper_service.py", "source_location": "L288"}, {"caller_nid": "scraper_service_scraperservice_get_sale_items", "callee": "str", "source_file": "backend/app/services/scraper_service.py", "source_location": "L292"}, {"caller_nid": "scraper_service_scraperservice_get_sale_items", "callee": "float", "source_file": "backend/app/services/scraper_service.py", "source_location": "L294"}, {"caller_nid": "scraper_service_scraperservice_get_sale_items", "callee": "float", "source_file": "backend/app/services/scraper_service.py", "source_location": "L295"}, {"caller_nid": "scraper_service_scraperservice_get_sale_items", "callee": "isoformat", "source_file": "backend/app/services/scraper_service.py", "source_location": "L300"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/ebfd841f22da56210dead9f32ba77b1580774d3282bb1eaac04719616a4800ea.json b/graphify-out/cache/ebfd841f22da56210dead9f32ba77b1580774d3282bb1eaac04719616a4800ea.json
deleted file mode 100644
index 2513c8f..0000000
--- a/graphify-out/cache/ebfd841f22da56210dead9f32ba77b1580774d3282bb1eaac04719616a4800ea.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_services_planner_generate_py", "label": "generate.py", "file_type": "code", "source_file": "backend/app/services/planner/generate.py", "source_location": "L1"}, {"id": "generate_load_match_index", "label": "_load_match_index()", "file_type": "code", "source_file": "backend/app/services/planner/generate.py", "source_location": "L32"}, {"id": "generate_load_blocklists", "label": "_load_blocklists()", "file_type": "code", "source_file": "backend/app/services/planner/generate.py", "source_location": "L55"}, {"id": "generate_load_pantry", "label": "_load_pantry()", "file_type": "code", "source_file": "backend/app/services/planner/generate.py", "source_location": "L68"}, {"id": "generate_load_last_cooked", "label": "_load_last_cooked()", "file_type": "code", "source_file": "backend/app/services/planner/generate.py", "source_location": "L76"}, {"id": "generate_generate_meal_plan", "label": "generate_meal_plan()", "file_type": "code", "source_file": "backend/app/services/planner/generate.py", "source_location": "L92"}, {"id": "generate_rationale_1", "label": "End-to-end planner orchestration: load \u2192 filter \u2192 score \u2192 select \u2192 persist.", "file_type": "rationale", "source_file": "backend/app/services/planner/generate.py", "source_location": "L1"}, {"id": "generate_rationale_33", "label": "ingredient_id \u2192 list of match dicts ordered by confidence DESC.", "file_type": "rationale", "source_file": "backend/app/services/planner/generate.py", "source_location": "L33"}], "edges": [{"source": "backend_app_services_planner_generate_py", "target": "datetime", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/generate.py", "source_location": "L4", "weight": 1.0}, {"source": "backend_app_services_planner_generate_py", "target": "decimal", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/generate.py", "source_location": "L5", "weight": 1.0}, {"source": "backend_app_services_planner_generate_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/generate.py", "source_location": "L6", "weight": 1.0}, {"source": "backend_app_services_planner_generate_py", "target": "uuid", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/generate.py", "source_location": "L7", "weight": 1.0}, {"source": "backend_app_services_planner_generate_py", "target": "sqlalchemy_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/generate.py", "source_location": "L9", "weight": 1.0}, {"source": "backend_app_services_planner_generate_py", "target": "app_models", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/generate.py", "source_location": "L11", "weight": 1.0}, {"source": "backend_app_services_planner_generate_py", "target": "app_services_planner_config", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/generate.py", "source_location": "L24", "weight": 1.0}, {"source": "backend_app_services_planner_generate_py", "target": "app_services_planner_cost", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/generate.py", "source_location": "L25", "weight": 1.0}, {"source": "backend_app_services_planner_generate_py", "target": "app_services_planner_filter", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/generate.py", "source_location": "L26", "weight": 1.0}, {"source": "backend_app_services_planner_generate_py", "target": "app_services_planner_score", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/generate.py", "source_location": "L27", "weight": 1.0}, {"source": "backend_app_services_planner_generate_py", "target": "app_services_planner_select", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/generate.py", "source_location": "L28", "weight": 1.0}, {"source": "backend_app_services_planner_generate_py", "target": "app_services_planner_types", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/generate.py", "source_location": "L29", "weight": 1.0}, {"source": "backend_app_services_planner_generate_py", "target": "generate_load_match_index", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/generate.py", "source_location": "L32", "weight": 1.0}, {"source": "backend_app_services_planner_generate_py", "target": "generate_load_blocklists", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/generate.py", "source_location": "L55", "weight": 1.0}, {"source": "backend_app_services_planner_generate_py", "target": "generate_load_pantry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/generate.py", "source_location": "L68", "weight": 1.0}, {"source": "backend_app_services_planner_generate_py", "target": "generate_load_last_cooked", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/generate.py", "source_location": "L76", "weight": 1.0}, {"source": "backend_app_services_planner_generate_py", "target": "generate_generate_meal_plan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/generate.py", "source_location": "L92", "weight": 1.0}, {"source": "generate_generate_meal_plan", "target": "generate_load_match_index", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/generate.py", "source_location": "L131", "weight": 1.0}, {"source": "generate_generate_meal_plan", "target": "generate_load_pantry", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/generate.py", "source_location": "L132", "weight": 1.0}, {"source": "generate_generate_meal_plan", "target": "generate_load_blocklists", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/generate.py", "source_location": "L133", "weight": 1.0}, {"source": "generate_generate_meal_plan", "target": "generate_load_last_cooked", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/generate.py", "source_location": "L134", "weight": 1.0}, {"source": "generate_rationale_1", "target": "backend_app_services_planner_generate_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/generate.py", "source_location": "L1", "weight": 1.0}, {"source": "generate_rationale_33", "target": "generate_load_match_index", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/services/planner/generate.py", "source_location": "L33", "weight": 1.0}], "raw_calls": [{"caller_nid": "generate_load_match_index", "callee": "all", "source_file": "backend/app/services/planner/generate.py", "source_location": "L35"}, {"caller_nid": "generate_load_match_index", "callee": "order_by", "source_file": "backend/app/services/planner/generate.py", "source_location": "L35"}, {"caller_nid": "generate_load_match_index", "callee": "join", "source_file": "backend/app/services/planner/generate.py", "source_location": "L35"}, {"caller_nid": "generate_load_match_index", "callee": "query", "source_file": "backend/app/services/planner/generate.py", "source_location": "L35"}, {"caller_nid": "generate_load_match_index", "callee": "desc", "source_file": "backend/app/services/planner/generate.py", "source_location": "L37"}, {"caller_nid": "generate_load_match_index", "callee": "append", "source_file": "backend/app/services/planner/generate.py", "source_location": "L42"}, {"caller_nid": "generate_load_match_index", "callee": "setdefault", "source_file": "backend/app/services/planner/generate.py", "source_location": "L42"}, {"caller_nid": "generate_load_match_index", "callee": "bool", "source_file": "backend/app/services/planner/generate.py", "source_location": "L48"}, {"caller_nid": "generate_load_blocklists", "callee": "set", "source_file": "backend/app/services/planner/generate.py", "source_location": "L58"}, {"caller_nid": "generate_load_blocklists", "callee": "set", "source_file": "backend/app/services/planner/generate.py", "source_location": "L59"}, {"caller_nid": "generate_load_blocklists", "callee": "all", "source_file": "backend/app/services/planner/generate.py", "source_location": "L60"}, {"caller_nid": "generate_load_blocklists", "callee": "filter", "source_file": "backend/app/services/planner/generate.py", "source_location": "L60"}, {"caller_nid": "generate_load_blocklists", "callee": "query", "source_file": "backend/app/services/planner/generate.py", "source_location": "L60"}, {"caller_nid": "generate_load_blocklists", "callee": "add", "source_file": "backend/app/services/planner/generate.py", "source_location": "L62"}, {"caller_nid": "generate_load_blocklists", "callee": "add", "source_file": "backend/app/services/planner/generate.py", "source_location": "L64"}, {"caller_nid": "generate_load_pantry", "callee": "all", "source_file": "backend/app/services/planner/generate.py", "source_location": "L71"}, {"caller_nid": "generate_load_pantry", "callee": "filter", "source_file": "backend/app/services/planner/generate.py", "source_location": "L71"}, {"caller_nid": "generate_load_pantry", "callee": "query", "source_file": "backend/app/services/planner/generate.py", "source_location": "L71"}, {"caller_nid": "generate_load_last_cooked", "callee": "all", "source_file": "backend/app/services/planner/generate.py", "source_location": "L78"}, {"caller_nid": "generate_load_last_cooked", "callee": "filter", "source_file": "backend/app/services/planner/generate.py", "source_location": "L78"}, {"caller_nid": "generate_load_last_cooked", "callee": "join", "source_file": "backend/app/services/planner/generate.py", "source_location": "L78"}, {"caller_nid": "generate_load_last_cooked", "callee": "query", "source_file": "backend/app/services/planner/generate.py", "source_location": "L78"}, {"caller_nid": "generate_generate_meal_plan", "callee": "today", "source_file": "backend/app/services/planner/generate.py", "source_location": "L100"}, {"caller_nid": "generate_generate_meal_plan", "callee": "first", "source_file": "backend/app/services/planner/generate.py", "source_location": "L101"}, {"caller_nid": "generate_generate_meal_plan", "callee": "filter", "source_file": "backend/app/services/planner/generate.py", "source_location": "L101"}, {"caller_nid": "generate_generate_meal_plan", "callee": "query", "source_file": "backend/app/services/planner/generate.py", "source_location": "L101"}, {"caller_nid": "generate_generate_meal_plan", "callee": "ValueError", "source_file": "backend/app/services/planner/generate.py", "source_location": "L103"}, {"caller_nid": "generate_generate_meal_plan", "callee": "all", "source_file": "backend/app/services/planner/generate.py", "source_location": "L105"}, {"caller_nid": "generate_generate_meal_plan", "callee": "query", "source_file": "backend/app/services/planner/generate.py", "source_location": "L105"}, {"caller_nid": "generate_generate_meal_plan", "callee": "list", "source_file": "backend/app/services/planner/generate.py", "source_location": "L114"}, {"caller_nid": "generate_generate_meal_plan", "callee": "list", "source_file": "backend/app/services/planner/generate.py", "source_location": "L115"}, {"caller_nid": "generate_generate_meal_plan", "callee": "set", "source_file": "backend/app/services/planner/generate.py", "source_location": "L122"}, {"caller_nid": "generate_generate_meal_plan", "callee": "get", "source_file": "backend/app/services/planner/generate.py", "source_location": "L124"}, {"caller_nid": "generate_generate_meal_plan", "callee": "isinstance", "source_file": "backend/app/services/planner/generate.py", "source_location": "L125"}, {"caller_nid": "generate_generate_meal_plan", "callee": "UUID", "source_file": "backend/app/services/planner/generate.py", "source_location": "L126"}, {"caller_nid": "generate_generate_meal_plan", "callee": "add", "source_file": "backend/app/services/planner/generate.py", "source_location": "L128"}, {"caller_nid": "generate_generate_meal_plan", "callee": "compute_recipe_cost", "source_file": "backend/app/services/planner/generate.py", "source_location": "L137"}, {"caller_nid": "generate_generate_meal_plan", "callee": "filter_recipes", "source_file": "backend/app/services/planner/generate.py", "source_location": "L146"}, {"caller_nid": "generate_generate_meal_plan", "callee": "score_recipes", "source_file": "backend/app/services/planner/generate.py", "source_location": "L159"}, {"caller_nid": "generate_generate_meal_plan", "callee": "select_set", "source_file": "backend/app/services/planner/generate.py", "source_location": "L166"}, {"caller_nid": "generate_generate_meal_plan", "callee": "MealPlan", "source_file": "backend/app/services/planner/generate.py", "source_location": "L168"}, {"caller_nid": "generate_generate_meal_plan", "callee": "sum", "source_file": "backend/app/services/planner/generate.py", "source_location": "L172"}, {"caller_nid": "generate_generate_meal_plan", "callee": "Decimal", "source_file": "backend/app/services/planner/generate.py", "source_location": "L173"}, {"caller_nid": "generate_generate_meal_plan", "callee": "add", "source_file": "backend/app/services/planner/generate.py", "source_location": "L176"}, {"caller_nid": "generate_generate_meal_plan", "callee": "flush", "source_file": "backend/app/services/planner/generate.py", "source_location": "L177"}, {"caller_nid": "generate_generate_meal_plan", "callee": "enumerate", "source_file": "backend/app/services/planner/generate.py", "source_location": "L179"}, {"caller_nid": "generate_generate_meal_plan", "callee": "MealPlanItem", "source_file": "backend/app/services/planner/generate.py", "source_location": "L183"}, {"caller_nid": "generate_generate_meal_plan", "callee": "add", "source_file": "backend/app/services/planner/generate.py", "source_location": "L191"}, {"caller_nid": "generate_generate_meal_plan", "callee": "commit", "source_file": "backend/app/services/planner/generate.py", "source_location": "L193"}, {"caller_nid": "generate_generate_meal_plan", "callee": "refresh", "source_file": "backend/app/services/planner/generate.py", "source_location": "L194"}, {"caller_nid": "generate_generate_meal_plan", "callee": "values", "source_file": "backend/app/services/planner/generate.py", "source_location": "L197"}, {"caller_nid": "generate_generate_meal_plan", "callee": "get", "source_file": "backend/app/services/planner/generate.py", "source_location": "L198"}, {"caller_nid": "generate_generate_meal_plan", "callee": "GenerationResult", "source_file": "backend/app/services/planner/generate.py", "source_location": "L200"}, {"caller_nid": "generate_generate_meal_plan", "callee": "len", "source_file": "backend/app/services/planner/generate.py", "source_location": "L203"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/ee7266e6daa725599329848d8ebb49b521de69e8886bde5bfefd54544f3e4444.json b/graphify-out/cache/ee7266e6daa725599329848d8ebb49b521de69e8886bde5bfefd54544f3e4444.json
deleted file mode 100644
index 543de1c..0000000
--- a/graphify-out/cache/ee7266e6daa725599329848d8ebb49b521de69e8886bde5bfefd54544f3e4444.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_schemas_ingredient_py", "label": "ingredient.py", "file_type": "code", "source_file": "backend/app/schemas/ingredient.py", "source_location": "L1"}, {"id": "ingredient_ingredientbase", "label": "IngredientBase", "file_type": "code", "source_file": "backend/app/schemas/ingredient.py", "source_location": "L10"}, {"id": "basemodel", "label": "BaseModel", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "ingredient_strip_and_drop_empty", "label": "_strip_and_drop_empty()", "file_type": "code", "source_file": "backend/app/schemas/ingredient.py", "source_location": "L19"}, {"id": "ingredient_ingredientcreate", "label": "IngredientCreate", "file_type": "code", "source_file": "backend/app/schemas/ingredient.py", "source_location": "L23"}, {"id": "ingredient_ingredientupdate", "label": "IngredientUpdate", "file_type": "code", "source_file": "backend/app/schemas/ingredient.py", "source_location": "L27"}, {"id": "ingredient_ingredientread", "label": "IngredientRead", "file_type": "code", "source_file": "backend/app/schemas/ingredient.py", "source_location": "L42"}, {"id": "ingredient_ingredientgrocerymatchread", "label": "IngredientGroceryMatchRead", "file_type": "code", "source_file": "backend/app/schemas/ingredient.py", "source_location": "L48"}], "edges": [{"source": "backend_app_schemas_ingredient_py", "target": "decimal", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/ingredient.py", "source_location": "L3", "weight": 1.0}, {"source": "backend_app_schemas_ingredient_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/ingredient.py", "source_location": "L4", "weight": 1.0}, {"source": "backend_app_schemas_ingredient_py", "target": "uuid", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/ingredient.py", "source_location": "L5", "weight": 1.0}, {"source": "backend_app_schemas_ingredient_py", "target": "pydantic", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/ingredient.py", "source_location": "L7", "weight": 1.0}, {"source": "backend_app_schemas_ingredient_py", "target": "ingredient_ingredientbase", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/ingredient.py", "source_location": "L10", "weight": 1.0}, {"source": "ingredient_ingredientbase", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/ingredient.py", "source_location": "L10", "weight": 1.0}, {"source": "backend_app_schemas_ingredient_py", "target": "ingredient_strip_and_drop_empty", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/ingredient.py", "source_location": "L19", "weight": 1.0}, {"source": "backend_app_schemas_ingredient_py", "target": "ingredient_ingredientcreate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/ingredient.py", "source_location": "L23", "weight": 1.0}, {"source": "ingredient_ingredientcreate", "target": "ingredient_ingredientbase", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/ingredient.py", "source_location": "L23", "weight": 1.0}, {"source": "backend_app_schemas_ingredient_py", "target": "ingredient_ingredientupdate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/ingredient.py", "source_location": "L27", "weight": 1.0}, {"source": "ingredient_ingredientupdate", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/ingredient.py", "source_location": "L27", "weight": 1.0}, {"source": "backend_app_schemas_ingredient_py", "target": "ingredient_strip_and_drop_empty", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/ingredient.py", "source_location": "L36", "weight": 1.0}, {"source": "backend_app_schemas_ingredient_py", "target": "ingredient_ingredientread", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/ingredient.py", "source_location": "L42", "weight": 1.0}, {"source": "ingredient_ingredientread", "target": "ingredient_ingredientbase", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/ingredient.py", "source_location": "L42", "weight": 1.0}, {"source": "backend_app_schemas_ingredient_py", "target": "ingredient_ingredientgrocerymatchread", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/ingredient.py", "source_location": "L48", "weight": 1.0}, {"source": "ingredient_ingredientgrocerymatchread", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/schemas/ingredient.py", "source_location": "L48", "weight": 1.0}], "raw_calls": [{"caller_nid": "ingredient_strip_and_drop_empty", "callee": "strip", "source_file": "backend/app/schemas/ingredient.py", "source_location": "L20"}, {"caller_nid": "ingredient_strip_and_drop_empty", "callee": "strip", "source_file": "backend/app/schemas/ingredient.py", "source_location": "L20"}, {"caller_nid": "ingredient_strip_and_drop_empty", "callee": "strip", "source_file": "backend/app/schemas/ingredient.py", "source_location": "L39"}, {"caller_nid": "ingredient_strip_and_drop_empty", "callee": "strip", "source_file": "backend/app/schemas/ingredient.py", "source_location": "L39"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/eeefe41e5fe530827ca7fad939fb8ac21ccf895d4068a27e1447c8e089a1a651.json b/graphify-out/cache/eeefe41e5fe530827ca7fad939fb8ac21ccf895d4068a27e1447c8e089a1a651.json
deleted file mode 100644
index 98ef9c2..0000000
--- a/graphify-out/cache/eeefe41e5fe530827ca7fad939fb8ac21ccf895d4068a27e1447c8e089a1a651.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_tests_test_auth_py", "label": "test_auth.py", "file_type": "code", "source_file": "backend/tests/test_auth.py", "source_location": "L1"}, {"id": "test_auth_reload_settings", "label": "_reload_settings()", "file_type": "code", "source_file": "backend/tests/test_auth.py", "source_location": "L25"}, {"id": "test_auth_test_admin_requires_token", "label": "test_admin_requires_token()", "file_type": "code", "source_file": "backend/tests/test_auth.py", "source_location": "L41"}, {"id": "test_auth_test_admin_logs_requires_token", "label": "test_admin_logs_requires_token()", "file_type": "code", "source_file": "backend/tests/test_auth.py", "source_location": "L55"}, {"id": "test_auth_test_session_required_for_mutation", "label": "test_session_required_for_mutation()", "file_type": "code", "source_file": "backend/tests/test_auth.py", "source_location": "L69"}, {"id": "test_auth_test_session_open_for_reads", "label": "test_session_open_for_reads()", "file_type": "code", "source_file": "backend/tests/test_auth.py", "source_location": "L79"}, {"id": "test_auth_test_session_login_logout", "label": "test_session_login_logout()", "file_type": "code", "source_file": "backend/tests/test_auth.py", "source_location": "L90"}, {"id": "test_auth_rationale_1", "label": "Auth gate tests for R1-B+D. Covers: - /api/admin/* requires bearer token (401 w", "file_type": "rationale", "source_file": "backend/tests/test_auth.py", "source_location": "L1"}, {"id": "test_auth_rationale_26", "label": "Force ``settings`` to re-read env (test isolation).", "file_type": "rationale", "source_file": "backend/tests/test_auth.py", "source_location": "L26"}, {"id": "test_auth_rationale_42", "label": "No bearer \u2192 401. Valid bearer \u2192 not 401 (handler runs).", "file_type": "rationale", "source_file": "backend/tests/test_auth.py", "source_location": "L42"}, {"id": "test_auth_rationale_70", "label": "POST /api/profile/members without cookie \u2192 401.", "file_type": "rationale", "source_file": "backend/tests/test_auth.py", "source_location": "L70"}, {"id": "test_auth_rationale_80", "label": "GET /api/profile is NOT auth-gated (reads stay open).", "file_type": "rationale", "source_file": "backend/tests/test_auth.py", "source_location": "L80"}], "edges": [{"source": "backend_tests_test_auth_py", "target": "os", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_auth.py", "source_location": "L12", "weight": 1.0}, {"source": "backend_tests_test_auth_py", "target": "pytest", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_auth.py", "source_location": "L14", "weight": 1.0}, {"source": "backend_tests_test_auth_py", "target": "test_auth_reload_settings", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_auth.py", "source_location": "L25", "weight": 1.0}, {"source": "backend_tests_test_auth_py", "target": "test_auth_test_admin_requires_token", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_auth.py", "source_location": "L41", "weight": 1.0}, {"source": "backend_tests_test_auth_py", "target": "test_auth_test_admin_logs_requires_token", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_auth.py", "source_location": "L55", "weight": 1.0}, {"source": "backend_tests_test_auth_py", "target": "test_auth_test_session_required_for_mutation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_auth.py", "source_location": "L69", "weight": 1.0}, {"source": "backend_tests_test_auth_py", "target": "test_auth_test_session_open_for_reads", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_auth.py", "source_location": "L79", "weight": 1.0}, {"source": "backend_tests_test_auth_py", "target": "test_auth_test_session_login_logout", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_auth.py", "source_location": "L90", "weight": 1.0}, {"source": "test_auth_rationale_1", "target": "backend_tests_test_auth_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_auth.py", "source_location": "L1", "weight": 1.0}, {"source": "test_auth_rationale_26", "target": "test_auth_reload_settings", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_auth.py", "source_location": "L26", "weight": 1.0}, {"source": "test_auth_rationale_42", "target": "test_auth_test_admin_requires_token", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_auth.py", "source_location": "L42", "weight": 1.0}, {"source": "test_auth_rationale_70", "target": "test_auth_test_session_required_for_mutation", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_auth.py", "source_location": "L70", "weight": 1.0}, {"source": "test_auth_rationale_80", "target": "test_auth_test_session_open_for_reads", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_auth.py", "source_location": "L80", "weight": 1.0}], "raw_calls": [{"caller_nid": "test_auth_reload_settings", "callee": "setenv", "source_file": "backend/tests/test_auth.py", "source_location": "L27"}, {"caller_nid": "test_auth_reload_settings", "callee": "setenv", "source_file": "backend/tests/test_auth.py", "source_location": "L28"}, {"caller_nid": "test_auth_reload_settings", "callee": "setenv", "source_file": "backend/tests/test_auth.py", "source_location": "L29"}, {"caller_nid": "test_auth_reload_settings", "callee": "Settings", "source_file": "backend/tests/test_auth.py", "source_location": "L33"}, {"caller_nid": "test_auth_test_admin_requires_token", "callee": "post", "source_file": "backend/tests/test_auth.py", "source_location": "L43"}, {"caller_nid": "test_auth_test_admin_requires_token", "callee": "post", "source_file": "backend/tests/test_auth.py", "source_location": "L46"}, {"caller_nid": "test_auth_test_admin_logs_requires_token", "callee": "get", "source_file": "backend/tests/test_auth.py", "source_location": "L56"}, {"caller_nid": "test_auth_test_admin_logs_requires_token", "callee": "get", "source_file": "backend/tests/test_auth.py", "source_location": "L59"}, {"caller_nid": "test_auth_test_session_required_for_mutation", "callee": "post", "source_file": "backend/tests/test_auth.py", "source_location": "L71"}, {"caller_nid": "test_auth_test_session_open_for_reads", "callee": "get", "source_file": "backend/tests/test_auth.py", "source_location": "L81"}, {"caller_nid": "test_auth_test_session_login_logout", "callee": "post", "source_file": "backend/tests/test_auth.py", "source_location": "L92"}, {"caller_nid": "test_auth_test_session_login_logout", "callee": "post", "source_file": "backend/tests/test_auth.py", "source_location": "L96"}, {"caller_nid": "test_auth_test_session_login_logout", "callee": "get", "source_file": "backend/tests/test_auth.py", "source_location": "L103"}, {"caller_nid": "test_auth_test_session_login_logout", "callee": "set", "source_file": "backend/tests/test_auth.py", "source_location": "L104"}, {"caller_nid": "test_auth_test_session_login_logout", "callee": "post", "source_file": "backend/tests/test_auth.py", "source_location": "L105"}, {"caller_nid": "test_auth_test_session_login_logout", "callee": "post", "source_file": "backend/tests/test_auth.py", "source_location": "L113"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/ef69cca14d5c9cda29516aad9acc8fbdb405b5ca64d9fa3c8dfc8dd9960be7c7.json b/graphify-out/cache/ef69cca14d5c9cda29516aad9acc8fbdb405b5ca64d9fa3c8dfc8dd9960be7c7.json
deleted file mode 100644
index a10154a..0000000
--- a/graphify-out/cache/ef69cca14d5c9cda29516aad9acc8fbdb405b5ca64d9fa3c8dfc8dd9960be7c7.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_scheduler_init_py", "label": "__init__.py", "file_type": "code", "source_file": "backend/app/scheduler/__init__.py", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/graphify-out/cache/efbd7f82f310ed23aa60a76a8f46476c63964612a0af1398e7a8f117bafa96e3.json b/graphify-out/cache/efbd7f82f310ed23aa60a76a8f46476c63964612a0af1398e7a8f117bafa96e3.json
deleted file mode 100644
index 0d615c7..0000000
--- a/graphify-out/cache/efbd7f82f310ed23aa60a76a8f46476c63964612a0af1398e7a8f117bafa96e3.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_tests_test_matcher_py", "label": "test_matcher.py", "file_type": "code", "source_file": "backend/tests/test_matcher.py", "source_location": "L1"}, {"id": "test_matcher_test_build_match_pool_includes_aliases", "label": "test_build_match_pool_includes_aliases()", "file_type": "code", "source_file": "backend/tests/test_matcher.py", "source_location": "L6"}, {"id": "test_matcher_test_rank_candidates_top_n_with_threshold", "label": "test_rank_candidates_top_n_with_threshold()", "file_type": "code", "source_file": "backend/tests/test_matcher.py", "source_location": "L18"}, {"id": "test_matcher_test_rank_candidates_drops_below_threshold", "label": "test_rank_candidates_drops_below_threshold()", "file_type": "code", "source_file": "backend/tests/test_matcher.py", "source_location": "L36"}], "edges": [{"source": "backend_tests_test_matcher_py", "target": "pytest", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_matcher.py", "source_location": "L1", "weight": 1.0}, {"source": "backend_tests_test_matcher_py", "target": "app_services_matcher", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_matcher.py", "source_location": "L3", "weight": 1.0}, {"source": "backend_tests_test_matcher_py", "target": "test_matcher_test_build_match_pool_includes_aliases", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_matcher.py", "source_location": "L6", "weight": 1.0}, {"source": "backend_tests_test_matcher_py", "target": "test_matcher_test_rank_candidates_top_n_with_threshold", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_matcher.py", "source_location": "L18", "weight": 1.0}, {"source": "backend_tests_test_matcher_py", "target": "test_matcher_test_rank_candidates_drops_below_threshold", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_matcher.py", "source_location": "L36", "weight": 1.0}], "raw_calls": [{"caller_nid": "test_matcher_test_build_match_pool_includes_aliases", "callee": "build_match_pool", "source_file": "backend/tests/test_matcher.py", "source_location": "L11"}, {"caller_nid": "test_matcher_test_build_match_pool_includes_aliases", "callee": "len", "source_file": "backend/tests/test_matcher.py", "source_location": "L13"}, {"caller_nid": "test_matcher_test_rank_candidates_top_n_with_threshold", "callee": "rank_candidates", "source_file": "backend/tests/test_matcher.py", "source_location": "L25"}, {"caller_nid": "test_matcher_test_rank_candidates_top_n_with_threshold", "callee": "all", "source_file": "backend/tests/test_matcher.py", "source_location": "L33"}, {"caller_nid": "test_matcher_test_rank_candidates_drops_below_threshold", "callee": "rank_candidates", "source_file": "backend/tests/test_matcher.py", "source_location": "L38"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/f10dfa8955ddc12fafe307aa3f5976d2f848ada7ce2dcca0bcd916961a24e8af.json b/graphify-out/cache/f10dfa8955ddc12fafe307aa3f5976d2f848ada7ce2dcca0bcd916961a24e8af.json
deleted file mode 100644
index 73862c3..0000000
--- a/graphify-out/cache/f10dfa8955ddc12fafe307aa3f5976d2f848ada7ce2dcca0bcd916961a24e8af.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_tests_test_match_hook_py", "label": "test_match_hook.py", "file_type": "code", "source_file": "backend/tests/test_match_hook.py", "source_location": "L1"}, {"id": "test_match_hook_test_run_match_job_persists_top_matches", "label": "test_run_match_job_persists_top_matches()", "file_type": "code", "source_file": "backend/tests/test_match_hook.py", "source_location": "L6"}, {"id": "test_match_hook_rationale_7", "label": "End-to-end: seed Ingredient + GroceryItem rows, run the matcher, verify ingr", "file_type": "rationale", "source_file": "backend/tests/test_match_hook.py", "source_location": "L7"}], "edges": [{"source": "backend_tests_test_match_hook_py", "target": "pytest", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_match_hook.py", "source_location": "L1", "weight": 1.0}, {"source": "backend_tests_test_match_hook_py", "target": "test_match_hook_test_run_match_job_persists_top_matches", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_match_hook.py", "source_location": "L6", "weight": 1.0}, {"source": "test_match_hook_rationale_7", "target": "test_match_hook_test_run_match_job_persists_top_matches", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_match_hook.py", "source_location": "L7", "weight": 1.0}], "raw_calls": [{"caller_nid": "test_match_hook_test_run_match_job_persists_top_matches", "callee": "SessionLocal", "source_file": "backend/tests/test_match_hook.py", "source_location": "L23"}, {"caller_nid": "test_match_hook_test_run_match_job_persists_top_matches", "callee": "uuid4", "source_file": "backend/tests/test_match_hook.py", "source_location": "L24"}, {"caller_nid": "test_match_hook_test_run_match_job_persists_top_matches", "callee": "uuid4", "source_file": "backend/tests/test_match_hook.py", "source_location": "L25"}, {"caller_nid": "test_match_hook_test_run_match_job_persists_top_matches", "callee": "add", "source_file": "backend/tests/test_match_hook.py", "source_location": "L27"}, {"caller_nid": "test_match_hook_test_run_match_job_persists_top_matches", "callee": "Ingredient", "source_file": "backend/tests/test_match_hook.py", "source_location": "L28"}, {"caller_nid": "test_match_hook_test_run_match_job_persists_top_matches", "callee": "add", "source_file": "backend/tests/test_match_hook.py", "source_location": "L37"}, {"caller_nid": "test_match_hook_test_run_match_job_persists_top_matches", "callee": "GroceryItem", "source_file": "backend/tests/test_match_hook.py", "source_location": "L38"}, {"caller_nid": "test_match_hook_test_run_match_job_persists_top_matches", "callee": "Decimal", "source_file": "backend/tests/test_match_hook.py", "source_location": "L43"}, {"caller_nid": "test_match_hook_test_run_match_job_persists_top_matches", "callee": "Decimal", "source_file": "backend/tests/test_match_hook.py", "source_location": "L44"}, {"caller_nid": "test_match_hook_test_run_match_job_persists_top_matches", "callee": "now", "source_file": "backend/tests/test_match_hook.py", "source_location": "L46"}, {"caller_nid": "test_match_hook_test_run_match_job_persists_top_matches", "callee": "commit", "source_file": "backend/tests/test_match_hook.py", "source_location": "L49"}, {"caller_nid": "test_match_hook_test_run_match_job_persists_top_matches", "callee": "close", "source_file": "backend/tests/test_match_hook.py", "source_location": "L51"}, {"caller_nid": "test_match_hook_test_run_match_job_persists_top_matches", "callee": "SessionLocal", "source_file": "backend/tests/test_match_hook.py", "source_location": "L53"}, {"caller_nid": "test_match_hook_test_run_match_job_persists_top_matches", "callee": "run_match_job", "source_file": "backend/tests/test_match_hook.py", "source_location": "L55"}, {"caller_nid": "test_match_hook_test_run_match_job_persists_top_matches", "callee": "all", "source_file": "backend/tests/test_match_hook.py", "source_location": "L58"}, {"caller_nid": "test_match_hook_test_run_match_job_persists_top_matches", "callee": "filter", "source_file": "backend/tests/test_match_hook.py", "source_location": "L58"}, {"caller_nid": "test_match_hook_test_run_match_job_persists_top_matches", "callee": "query", "source_file": "backend/tests/test_match_hook.py", "source_location": "L58"}, {"caller_nid": "test_match_hook_test_run_match_job_persists_top_matches", "callee": "any", "source_file": "backend/tests/test_match_hook.py", "source_location": "L62"}, {"caller_nid": "test_match_hook_test_run_match_job_persists_top_matches", "callee": "Decimal", "source_file": "backend/tests/test_match_hook.py", "source_location": "L64"}, {"caller_nid": "test_match_hook_test_run_match_job_persists_top_matches", "callee": "SessionLocal", "source_file": "backend/tests/test_match_hook.py", "source_location": "L69"}, {"caller_nid": "test_match_hook_test_run_match_job_persists_top_matches", "callee": "delete", "source_file": "backend/tests/test_match_hook.py", "source_location": "L71"}, {"caller_nid": "test_match_hook_test_run_match_job_persists_top_matches", "callee": "filter", "source_file": "backend/tests/test_match_hook.py", "source_location": "L71"}, {"caller_nid": "test_match_hook_test_run_match_job_persists_top_matches", "callee": "query", "source_file": "backend/tests/test_match_hook.py", "source_location": "L71"}, {"caller_nid": "test_match_hook_test_run_match_job_persists_top_matches", "callee": "delete", "source_file": "backend/tests/test_match_hook.py", "source_location": "L74"}, {"caller_nid": "test_match_hook_test_run_match_job_persists_top_matches", "callee": "filter", "source_file": "backend/tests/test_match_hook.py", "source_location": "L74"}, {"caller_nid": "test_match_hook_test_run_match_job_persists_top_matches", "callee": "query", "source_file": "backend/tests/test_match_hook.py", "source_location": "L74"}, {"caller_nid": "test_match_hook_test_run_match_job_persists_top_matches", "callee": "delete", "source_file": "backend/tests/test_match_hook.py", "source_location": "L75"}, {"caller_nid": "test_match_hook_test_run_match_job_persists_top_matches", "callee": "filter", "source_file": "backend/tests/test_match_hook.py", "source_location": "L75"}, {"caller_nid": "test_match_hook_test_run_match_job_persists_top_matches", "callee": "query", "source_file": "backend/tests/test_match_hook.py", "source_location": "L75"}, {"caller_nid": "test_match_hook_test_run_match_job_persists_top_matches", "callee": "commit", "source_file": "backend/tests/test_match_hook.py", "source_location": "L76"}, {"caller_nid": "test_match_hook_test_run_match_job_persists_top_matches", "callee": "close", "source_file": "backend/tests/test_match_hook.py", "source_location": "L78"}, {"caller_nid": "test_match_hook_test_run_match_job_persists_top_matches", "callee": "close", "source_file": "backend/tests/test_match_hook.py", "source_location": "L79"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/f348b3fea9995fa012399ed638d6b4e4b32ae42566b9d0efc819392ac6db18fd.json b/graphify-out/cache/f348b3fea9995fa012399ed638d6b4e4b32ae42566b9d0efc819392ac6db18fd.json
deleted file mode 100644
index 6350eea..0000000
--- a/graphify-out/cache/f348b3fea9995fa012399ed638d6b4e4b32ae42566b9d0efc819392ac6db18fd.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_services_email_py", "label": "email.py", "file_type": "code", "source_file": "backend/app/services/email.py", "source_location": "L1"}, {"id": "email_emailbackend", "label": "EmailBackend", "file_type": "code", "source_file": "backend/app/services/email.py", "source_location": "L29"}, {"id": "protocol", "label": "Protocol", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "email_emailbackend_send", "label": ".send()", "file_type": "code", "source_file": "backend/app/services/email.py", "source_location": "L30"}, {"id": "email_consoleemailbackend", "label": "ConsoleEmailBackend", "file_type": "code", "source_file": "backend/app/services/email.py", "source_location": "L40"}, {"id": "email_consoleemailbackend_send", "label": ".send()", "file_type": "code", "source_file": "backend/app/services/email.py", "source_location": "L46"}, {"id": "email_sendgridemailbackend", "label": "SendGridEmailBackend", "file_type": "code", "source_file": "backend/app/services/email.py", "source_location": "L70"}, {"id": "email_sendgridemailbackend_init", "label": ".__init__()", "file_type": "code", "source_file": "backend/app/services/email.py", "source_location": "L71"}, {"id": "email_sendgridemailbackend_send", "label": ".send()", "file_type": "code", "source_file": "backend/app/services/email.py", "source_location": "L76"}, {"id": "email_get_email_backend", "label": "get_email_backend()", "file_type": "code", "source_file": "backend/app/services/email.py", "source_location": "L98"}, {"id": "email_rationale_1", "label": "Email backends. R2-B spike: only ConsoleEmailBackend is functional. SendGrid is", "file_type": "rationale", "source_file": "backend/app/services/email.py", "source_location": "L1"}, {"id": "email_rationale_41", "label": "Dev/spike backend. Prints to stdout AND appends a JSON line to backend/var/e", "file_type": "rationale", "source_file": "backend/app/services/email.py", "source_location": "L41"}], "edges": [{"source": "backend_app_services_email_py", "target": "json", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/app/services/email.py", "source_location": "L10", "weight": 1.0}, {"source": "backend_app_services_email_py", "target": "sys", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/app/services/email.py", "source_location": "L11", "weight": 1.0}, {"source": "backend_app_services_email_py", "target": "datetime", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/email.py", "source_location": "L12", "weight": 1.0}, {"source": "backend_app_services_email_py", "target": "pathlib", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/email.py", "source_location": "L13", "weight": 1.0}, {"source": "backend_app_services_email_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/email.py", "source_location": "L14", "weight": 1.0}, {"source": "backend_app_services_email_py", "target": "sendgrid", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/email.py", "source_location": "L16", "weight": 1.0}, {"source": "backend_app_services_email_py", "target": "sendgrid_helpers_mail", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/email.py", "source_location": "L17", "weight": 1.0}, {"source": "backend_app_services_email_py", "target": "app_config", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/email.py", "source_location": "L19", "weight": 1.0}, {"source": "backend_app_services_email_py", "target": "email_emailbackend", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/email.py", "source_location": "L29", "weight": 1.0}, {"source": "email_emailbackend", "target": "protocol", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/services/email.py", "source_location": "L29", "weight": 1.0}, {"source": "email_emailbackend", "target": "email_emailbackend_send", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/app/services/email.py", "source_location": "L30", "weight": 1.0}, {"source": "backend_app_services_email_py", "target": "email_consoleemailbackend", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/email.py", "source_location": "L40", "weight": 1.0}, {"source": "email_consoleemailbackend", "target": "email_consoleemailbackend_send", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/app/services/email.py", "source_location": "L46", "weight": 1.0}, {"source": "backend_app_services_email_py", "target": "email_sendgridemailbackend", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/email.py", "source_location": "L70", "weight": 1.0}, {"source": "email_sendgridemailbackend", "target": "email_sendgridemailbackend_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/app/services/email.py", "source_location": "L71", "weight": 1.0}, {"source": "email_sendgridemailbackend", "target": "email_sendgridemailbackend_send", "relation": "method", "confidence": "EXTRACTED", "source_file": "backend/app/services/email.py", "source_location": "L76", "weight": 1.0}, {"source": "backend_app_services_email_py", "target": "email_get_email_backend", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/email.py", "source_location": "L98", "weight": 1.0}, {"source": "email_get_email_backend", "target": "email_sendgridemailbackend", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/services/email.py", "source_location": "L101", "weight": 1.0}, {"source": "email_get_email_backend", "target": "email_consoleemailbackend", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/app/services/email.py", "source_location": "L102", "weight": 1.0}, {"source": "email_rationale_1", "target": "backend_app_services_email_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/services/email.py", "source_location": "L1", "weight": 1.0}, {"source": "email_rationale_41", "target": "email_consoleemailbackend", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/services/email.py", "source_location": "L41", "weight": 1.0}], "raw_calls": [{"caller_nid": "email_consoleemailbackend_send", "callee": "isoformat", "source_file": "backend/app/services/email.py", "source_location": "L54"}, {"caller_nid": "email_consoleemailbackend_send", "callee": "now", "source_file": "backend/app/services/email.py", "source_location": "L54"}, {"caller_nid": "email_consoleemailbackend_send", "callee": "print", "source_file": "backend/app/services/email.py", "source_location": "L60"}, {"caller_nid": "email_consoleemailbackend_send", "callee": "mkdir", "source_file": "backend/app/services/email.py", "source_location": "L65"}, {"caller_nid": "email_consoleemailbackend_send", "callee": "open", "source_file": "backend/app/services/email.py", "source_location": "L66"}, {"caller_nid": "email_consoleemailbackend_send", "callee": "write", "source_file": "backend/app/services/email.py", "source_location": "L67"}, {"caller_nid": "email_consoleemailbackend_send", "callee": "dumps", "source_file": "backend/app/services/email.py", "source_location": "L67"}, {"caller_nid": "email_sendgridemailbackend_init", "callee": "SendGridAPIClient", "source_file": "backend/app/services/email.py", "source_location": "L72"}, {"caller_nid": "email_sendgridemailbackend_send", "callee": "Mail", "source_file": "backend/app/services/email.py", "source_location": "L83"}, {"caller_nid": "email_sendgridemailbackend_send", "callee": "ReplyTo", "source_file": "backend/app/services/email.py", "source_location": "L90"}, {"caller_nid": "email_sendgridemailbackend_send", "callee": "RuntimeError", "source_file": "backend/app/services/email.py", "source_location": "L93"}, {"caller_nid": "email_get_email_backend", "callee": "lower", "source_file": "backend/app/services/email.py", "source_location": "L99"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/f54bf58602e63a8ae68527aa07cecfdede6af3aa0d4db253a9865c81c02b5495.json b/graphify-out/cache/f54bf58602e63a8ae68527aa07cecfdede6af3aa0d4db253a9865c81c02b5495.json
deleted file mode 100644
index 495d9f2..0000000
--- a/graphify-out/cache/f54bf58602e63a8ae68527aa07cecfdede6af3aa0d4db253a9865c81c02b5495.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_tests_conftest_py", "label": "conftest.py", "file_type": "code", "source_file": "backend/tests/conftest.py", "source_location": "L1"}, {"id": "conftest_resolve_test_dsn", "label": "_resolve_test_dsn()", "file_type": "code", "source_file": "backend/tests/conftest.py", "source_location": "L45"}, {"id": "conftest_postgres_reachable", "label": "_postgres_reachable()", "file_type": "code", "source_file": "backend/tests/conftest.py", "source_location": "L54"}, {"id": "conftest_pytest_collection_modifyitems", "label": "pytest_collection_modifyitems()", "file_type": "code", "source_file": "backend/tests/conftest.py", "source_location": "L72"}, {"id": "conftest_pytest_configure", "label": "pytest_configure()", "file_type": "code", "source_file": "backend/tests/conftest.py", "source_location": "L84"}, {"id": "conftest_schema", "label": "_schema()", "file_type": "code", "source_file": "backend/tests/conftest.py", "source_location": "L105"}, {"id": "conftest_engine", "label": "_engine()", "file_type": "code", "source_file": "backend/tests/conftest.py", "source_location": "L129"}, {"id": "conftest_db", "label": "db()", "file_type": "code", "source_file": "backend/tests/conftest.py", "source_location": "L142"}, {"id": "conftest_db_session", "label": "db_session()", "file_type": "code", "source_file": "backend/tests/conftest.py", "source_location": "L159"}, {"id": "conftest_client", "label": "client()", "file_type": "code", "source_file": "backend/tests/conftest.py", "source_location": "L172"}, {"id": "conftest_client_no_db", "label": "client_no_db()", "file_type": "code", "source_file": "backend/tests/conftest.py", "source_location": "L193"}, {"id": "conftest_rationale_1", "label": "Pytest fixtures for MealPlanner backend. DB strategy ----------- - If env ``TES", "file_type": "rationale", "source_file": "backend/tests/conftest.py", "source_location": "L1"}, {"id": "conftest_rationale_73", "label": "Skip postgres-only tests when no live Postgres is available.", "file_type": "rationale", "source_file": "backend/tests/conftest.py", "source_location": "L73"}, {"id": "conftest_rationale_143", "label": "Per-test transactional session that rolls back at teardown.", "file_type": "rationale", "source_file": "backend/tests/conftest.py", "source_location": "L143"}, {"id": "conftest_rationale_160", "label": "Plain SessionLocal for tests that need to seed data outside the transactiona", "file_type": "rationale", "source_file": "backend/tests/conftest.py", "source_location": "L160"}, {"id": "conftest_rationale_173", "label": "TestClient with get_db overridden to yield the test session.", "file_type": "rationale", "source_file": "backend/tests/conftest.py", "source_location": "L173"}, {"id": "conftest_rationale_194", "label": "TestClient that does NOT require a live DB \u2014 for pure import/wiring smoke.", "file_type": "rationale", "source_file": "backend/tests/conftest.py", "source_location": "L194"}], "edges": [{"source": "backend_tests_conftest_py", "target": "os", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/conftest.py", "source_location": "L18", "weight": 1.0}, {"source": "backend_tests_conftest_py", "target": "sys", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/conftest.py", "source_location": "L19", "weight": 1.0}, {"source": "backend_tests_conftest_py", "target": "pathlib", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/conftest.py", "source_location": "L20", "weight": 1.0}, {"source": "backend_tests_conftest_py", "target": "subprocess", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/conftest.py", "source_location": "L21", "weight": 1.0}, {"source": "backend_tests_conftest_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/conftest.py", "source_location": "L22", "weight": 1.0}, {"source": "backend_tests_conftest_py", "target": "pytest", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/conftest.py", "source_location": "L24", "weight": 1.0}, {"source": "backend_tests_conftest_py", "target": "sqlalchemy", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/conftest.py", "source_location": "L40", "weight": 1.0}, {"source": "backend_tests_conftest_py", "target": "sqlalchemy_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/conftest.py", "source_location": "L41", "weight": 1.0}, {"source": "backend_tests_conftest_py", "target": "sqlalchemy_exc", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/conftest.py", "source_location": "L42", "weight": 1.0}, {"source": "backend_tests_conftest_py", "target": "conftest_resolve_test_dsn", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/conftest.py", "source_location": "L45", "weight": 1.0}, {"source": "backend_tests_conftest_py", "target": "conftest_postgres_reachable", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/conftest.py", "source_location": "L54", "weight": 1.0}, {"source": "backend_tests_conftest_py", "target": "conftest_pytest_collection_modifyitems", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/conftest.py", "source_location": "L72", "weight": 1.0}, {"source": "backend_tests_conftest_py", "target": "conftest_pytest_configure", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/conftest.py", "source_location": "L84", "weight": 1.0}, {"source": "backend_tests_conftest_py", "target": "conftest_schema", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/conftest.py", "source_location": "L105", "weight": 1.0}, {"source": "backend_tests_conftest_py", "target": "conftest_engine", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/conftest.py", "source_location": "L129", "weight": 1.0}, {"source": "backend_tests_conftest_py", "target": "conftest_db", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/conftest.py", "source_location": "L142", "weight": 1.0}, {"source": "backend_tests_conftest_py", "target": "conftest_db_session", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/conftest.py", "source_location": "L159", "weight": 1.0}, {"source": "backend_tests_conftest_py", "target": "conftest_client", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/conftest.py", "source_location": "L172", "weight": 1.0}, {"source": "backend_tests_conftest_py", "target": "conftest_client_no_db", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/conftest.py", "source_location": "L193", "weight": 1.0}, {"source": "conftest_rationale_1", "target": "backend_tests_conftest_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/conftest.py", "source_location": "L1", "weight": 1.0}, {"source": "conftest_rationale_73", "target": "conftest_pytest_collection_modifyitems", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/conftest.py", "source_location": "L73", "weight": 1.0}, {"source": "conftest_rationale_143", "target": "conftest_db", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/conftest.py", "source_location": "L143", "weight": 1.0}, {"source": "conftest_rationale_160", "target": "conftest_db_session", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/conftest.py", "source_location": "L160", "weight": 1.0}, {"source": "conftest_rationale_173", "target": "conftest_client", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/conftest.py", "source_location": "L173", "weight": 1.0}, {"source": "conftest_rationale_194", "target": "conftest_client_no_db", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/conftest.py", "source_location": "L194", "weight": 1.0}], "raw_calls": [{"caller_nid": "conftest_resolve_test_dsn", "callee": "get", "source_file": "backend/tests/conftest.py", "source_location": "L46"}, {"caller_nid": "conftest_resolve_test_dsn", "callee": "get", "source_file": "backend/tests/conftest.py", "source_location": "L46"}, {"caller_nid": "conftest_resolve_test_dsn", "callee": "startswith", "source_file": "backend/tests/conftest.py", "source_location": "L49"}, {"caller_nid": "conftest_postgres_reachable", "callee": "create_engine", "source_file": "backend/tests/conftest.py", "source_location": "L56"}, {"caller_nid": "conftest_postgres_reachable", "callee": "replace", "source_file": "backend/tests/conftest.py", "source_location": "L57"}, {"caller_nid": "conftest_postgres_reachable", "callee": "connect", "source_file": "backend/tests/conftest.py", "source_location": "L60"}, {"caller_nid": "conftest_postgres_reachable", "callee": "execute", "source_file": "backend/tests/conftest.py", "source_location": "L61"}, {"caller_nid": "conftest_postgres_reachable", "callee": "text", "source_file": "backend/tests/conftest.py", "source_location": "L61"}, {"caller_nid": "conftest_postgres_reachable", "callee": "dispose", "source_file": "backend/tests/conftest.py", "source_location": "L62"}, {"caller_nid": "conftest_pytest_collection_modifyitems", "callee": "skip", "source_file": "backend/tests/conftest.py", "source_location": "L76"}, {"caller_nid": "conftest_pytest_collection_modifyitems", "callee": "add_marker", "source_file": "backend/tests/conftest.py", "source_location": "L81"}, {"caller_nid": "conftest_pytest_configure", "callee": "addinivalue_line", "source_file": "backend/tests/conftest.py", "source_location": "L85"}, {"caller_nid": "conftest_pytest_configure", "callee": "addinivalue_line", "source_file": "backend/tests/conftest.py", "source_location": "L89"}, {"caller_nid": "conftest_pytest_configure", "callee": "addinivalue_line", "source_file": "backend/tests/conftest.py", "source_location": "L94"}, {"caller_nid": "conftest_schema", "callee": "copy", "source_file": "backend/tests/conftest.py", "source_location": "L109"}, {"caller_nid": "conftest_schema", "callee": "run", "source_file": "backend/tests/conftest.py", "source_location": "L112"}, {"caller_nid": "conftest_schema", "callee": "str", "source_file": "backend/tests/conftest.py", "source_location": "L114"}, {"caller_nid": "conftest_schema", "callee": "run", "source_file": "backend/tests/conftest.py", "source_location": "L120"}, {"caller_nid": "conftest_schema", "callee": "str", "source_file": "backend/tests/conftest.py", "source_location": "L122"}, {"caller_nid": "conftest_engine", "callee": "create_engine", "source_file": "backend/tests/conftest.py", "source_location": "L133"}, {"caller_nid": "conftest_engine", "callee": "replace", "source_file": "backend/tests/conftest.py", "source_location": "L134"}, {"caller_nid": "conftest_engine", "callee": "dispose", "source_file": "backend/tests/conftest.py", "source_location": "L138"}, {"caller_nid": "conftest_db", "callee": "skip", "source_file": "backend/tests/conftest.py", "source_location": "L145"}, {"caller_nid": "conftest_db", "callee": "connect", "source_file": "backend/tests/conftest.py", "source_location": "L146"}, {"caller_nid": "conftest_db", "callee": "begin", "source_file": "backend/tests/conftest.py", "source_location": "L147"}, {"caller_nid": "conftest_db", "callee": "sessionmaker", "source_file": "backend/tests/conftest.py", "source_location": "L148"}, {"caller_nid": "conftest_db", "callee": "Session", "source_file": "backend/tests/conftest.py", "source_location": "L149"}, {"caller_nid": "conftest_db", "callee": "close", "source_file": "backend/tests/conftest.py", "source_location": "L153"}, {"caller_nid": "conftest_db", "callee": "rollback", "source_file": "backend/tests/conftest.py", "source_location": "L154"}, {"caller_nid": "conftest_db", "callee": "close", "source_file": "backend/tests/conftest.py", "source_location": "L155"}, {"caller_nid": "conftest_db_session", "callee": "SessionLocal", "source_file": "backend/tests/conftest.py", "source_location": "L164"}, {"caller_nid": "conftest_db_session", "callee": "close", "source_file": "backend/tests/conftest.py", "source_location": "L168"}, {"caller_nid": "conftest_client", "callee": "TestClient", "source_file": "backend/tests/conftest.py", "source_location": "L186"}, {"caller_nid": "conftest_client", "callee": "pop", "source_file": "backend/tests/conftest.py", "source_location": "L189"}, {"caller_nid": "conftest_client_no_db", "callee": "TestClient", "source_file": "backend/tests/conftest.py", "source_location": "L215"}, {"caller_nid": "conftest_client_no_db", "callee": "pop", "source_file": "backend/tests/conftest.py", "source_location": "L218"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/f565d5f2d8cc88d29b6c560c50e0f43240258c6bdce546ba36a6c27968c29c57.json b/graphify-out/cache/f565d5f2d8cc88d29b6c560c50e0f43240258c6bdce546ba36a6c27968c29c57.json
deleted file mode 100644
index 6c89919..0000000
--- a/graphify-out/cache/f565d5f2d8cc88d29b6c560c50e0f43240258c6bdce546ba36a6c27968c29c57.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_alembic_versions_0007_seed_recipes_py", "label": "0007_seed_recipes.py", "file_type": "code", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L1"}, {"id": "0007_seed_recipes_upsert_ingredients", "label": "_upsert_ingredients()", "file_type": "code", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L82"}, {"id": "0007_seed_recipes_insert_recipes", "label": "_insert_recipes()", "file_type": "code", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L767"}, {"id": "0007_seed_recipes_delete_recipes", "label": "_delete_recipes()", "file_type": "code", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L823"}, {"id": "0007_seed_recipes_delete_ingredients", "label": "_delete_ingredients()", "file_type": "code", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L832"}, {"id": "0007_seed_recipes_upgrade", "label": "upgrade()", "file_type": "code", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L846"}, {"id": "0007_seed_recipes_downgrade", "label": "downgrade()", "file_type": "code", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L851"}, {"id": "0007_seed_recipes_rationale_1", "label": "seed canonical ingredients (and 30 starter recipes in P4-14) Revision ID: 0007", "file_type": "rationale", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L1"}, {"id": "0007_seed_recipes_rationale_833", "label": "Best-effort: only remove rows whose name_lower matches one of our seeds. Pre", "file_type": "rationale", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L833"}], "edges": [{"source": "backend_alembic_versions_0007_seed_recipes_py", "target": "json", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L7", "weight": 1.0}, {"source": "backend_alembic_versions_0007_seed_recipes_py", "target": "decimal", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L8", "weight": 1.0}, {"source": "backend_alembic_versions_0007_seed_recipes_py", "target": "alembic", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L10", "weight": 1.0}, {"source": "backend_alembic_versions_0007_seed_recipes_py", "target": "sqlalchemy", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L11", "weight": 1.0}, {"source": "backend_alembic_versions_0007_seed_recipes_py", "target": "0007_seed_recipes_upsert_ingredients", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L82", "weight": 1.0}, {"source": "backend_alembic_versions_0007_seed_recipes_py", "target": "0007_seed_recipes_insert_recipes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L767", "weight": 1.0}, {"source": "backend_alembic_versions_0007_seed_recipes_py", "target": "0007_seed_recipes_delete_recipes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L823", "weight": 1.0}, {"source": "backend_alembic_versions_0007_seed_recipes_py", "target": "0007_seed_recipes_delete_ingredients", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L832", "weight": 1.0}, {"source": "backend_alembic_versions_0007_seed_recipes_py", "target": "0007_seed_recipes_upgrade", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L846", "weight": 1.0}, {"source": "backend_alembic_versions_0007_seed_recipes_py", "target": "0007_seed_recipes_downgrade", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L851", "weight": 1.0}, {"source": "0007_seed_recipes_upgrade", "target": "0007_seed_recipes_upsert_ingredients", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L847", "weight": 1.0}, {"source": "0007_seed_recipes_upgrade", "target": "0007_seed_recipes_insert_recipes", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L848", "weight": 1.0}, {"source": "0007_seed_recipes_downgrade", "target": "0007_seed_recipes_delete_recipes", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L852", "weight": 1.0}, {"source": "0007_seed_recipes_downgrade", "target": "0007_seed_recipes_delete_ingredients", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L853", "weight": 1.0}, {"source": "0007_seed_recipes_rationale_1", "target": "backend_alembic_versions_0007_seed_recipes_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L1", "weight": 1.0}, {"source": "0007_seed_recipes_rationale_833", "target": "0007_seed_recipes_delete_ingredients", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L833", "weight": 1.0}], "raw_calls": [{"caller_nid": "0007_seed_recipes_upsert_ingredients", "callee": "get_bind", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L83"}, {"caller_nid": "0007_seed_recipes_upsert_ingredients", "callee": "execute", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L85"}, {"caller_nid": "0007_seed_recipes_upsert_ingredients", "callee": "text", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L86"}, {"caller_nid": "0007_seed_recipes_upsert_ingredients", "callee": "lower", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L101"}, {"caller_nid": "0007_seed_recipes_insert_recipes", "callee": "get_bind", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L768"}, {"caller_nid": "0007_seed_recipes_insert_recipes", "callee": "fetchall", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L771"}, {"caller_nid": "0007_seed_recipes_insert_recipes", "callee": "execute", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L771"}, {"caller_nid": "0007_seed_recipes_insert_recipes", "callee": "text", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L771"}, {"caller_nid": "0007_seed_recipes_insert_recipes", "callee": "str", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L772"}, {"caller_nid": "0007_seed_recipes_insert_recipes", "callee": "get", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L780"}, {"caller_nid": "0007_seed_recipes_insert_recipes", "callee": "lower", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L780"}, {"caller_nid": "0007_seed_recipes_insert_recipes", "callee": "RuntimeError", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L782"}, {"caller_nid": "0007_seed_recipes_insert_recipes", "callee": "append", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L786"}, {"caller_nid": "0007_seed_recipes_insert_recipes", "callee": "float", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L788"}, {"caller_nid": "0007_seed_recipes_insert_recipes", "callee": "execute", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L792"}, {"caller_nid": "0007_seed_recipes_insert_recipes", "callee": "text", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L793"}, {"caller_nid": "0007_seed_recipes_insert_recipes", "callee": "dumps", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L817"}, {"caller_nid": "0007_seed_recipes_delete_recipes", "callee": "get_bind", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L824"}, {"caller_nid": "0007_seed_recipes_delete_recipes", "callee": "execute", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L826"}, {"caller_nid": "0007_seed_recipes_delete_recipes", "callee": "text", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L827"}, {"caller_nid": "0007_seed_recipes_delete_ingredients", "callee": "get_bind", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L838"}, {"caller_nid": "0007_seed_recipes_delete_ingredients", "callee": "lower", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L839"}, {"caller_nid": "0007_seed_recipes_delete_ingredients", "callee": "execute", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L840"}, {"caller_nid": "0007_seed_recipes_delete_ingredients", "callee": "text", "source_file": "backend/alembic/versions/0007_seed_recipes.py", "source_location": "L841"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/f5f19f455e90c0cea68106921a036d3b97174e9ec9987997b533fa6a8e098275.json b/graphify-out/cache/f5f19f455e90c0cea68106921a036d3b97174e9ec9987997b533fa6a8e098275.json
deleted file mode 100644
index 26c56c0..0000000
--- a/graphify-out/cache/f5f19f455e90c0cea68106921a036d3b97174e9ec9987997b533fa6a8e098275.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_services_planner_init_py", "label": "__init__.py", "file_type": "code", "source_file": "backend/app/services/planner/__init__.py", "source_location": "L1"}], "edges": [], "raw_calls": []}
\ No newline at end of file
diff --git a/graphify-out/cache/f9bed2faf3cb1febd82ec5810aaf8d4b7471366229c13b976ec71d6a0f64db3d.json b/graphify-out/cache/f9bed2faf3cb1febd82ec5810aaf8d4b7471366229c13b976ec71d6a0f64db3d.json
deleted file mode 100644
index 32e8f4a..0000000
--- a/graphify-out/cache/f9bed2faf3cb1febd82ec5810aaf8d4b7471366229c13b976ec71d6a0f64db3d.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_services_orchestrator_steps_py", "label": "steps.py", "file_type": "code", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L1"}, {"id": "steps_step_scrape", "label": "step_scrape()", "file_type": "code", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L34"}, {"id": "steps_step_generate", "label": "step_generate()", "file_type": "code", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L67"}, {"id": "steps_step_email", "label": "step_email()", "file_type": "code", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L92"}, {"id": "steps_step_deadline", "label": "step_deadline()", "file_type": "code", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L297"}, {"id": "steps_step_finalize", "label": "step_finalize()", "file_type": "code", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L335"}, {"id": "steps_step_reminder", "label": "step_reminder()", "file_type": "code", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L460"}, {"id": "steps_rationale_1", "label": "Orchestrator step functions. Each step receives a WeeklyRun row and an open Ses", "file_type": "rationale", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L1"}], "edges": [{"source": "backend_app_services_orchestrator_steps_py", "target": "html", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L13", "weight": 1.0}, {"source": "backend_app_services_orchestrator_steps_py", "target": "logging", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L14", "weight": 1.0}, {"source": "backend_app_services_orchestrator_steps_py", "target": "uuid", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L15", "weight": 1.0}, {"source": "backend_app_services_orchestrator_steps_py", "target": "datetime", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L16", "weight": 1.0}, {"source": "backend_app_services_orchestrator_steps_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L17", "weight": 1.0}, {"source": "backend_app_services_orchestrator_steps_py", "target": "app_config", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L19", "weight": 1.0}, {"source": "backend_app_services_orchestrator_steps_py", "target": "app_models", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L20", "weight": 1.0}, {"source": "backend_app_services_orchestrator_steps_py", "target": "app_services_approval", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L21", "weight": 1.0}, {"source": "backend_app_services_orchestrator_steps_py", "target": "app_services_email", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L22", "weight": 1.0}, {"source": "backend_app_services_orchestrator_steps_py", "target": "app_services_orchestrator_alerts", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L23", "weight": 1.0}, {"source": "backend_app_services_orchestrator_steps_py", "target": "app_services_planner_generate", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L24", "weight": 1.0}, {"source": "backend_app_services_orchestrator_steps_py", "target": "app_services_scraper_service", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L25", "weight": 1.0}, {"source": "backend_app_services_orchestrator_steps_py", "target": "sqlalchemy_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L28", "weight": 1.0}, {"source": "backend_app_services_orchestrator_steps_py", "target": "app_models", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L29", "weight": 1.0}, {"source": "backend_app_services_orchestrator_steps_py", "target": "steps_step_scrape", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L34", "weight": 1.0}, {"source": "backend_app_services_orchestrator_steps_py", "target": "steps_step_generate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L67", "weight": 1.0}, {"source": "backend_app_services_orchestrator_steps_py", "target": "steps_step_email", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L92", "weight": 1.0}, {"source": "backend_app_services_orchestrator_steps_py", "target": "steps_step_deadline", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L297", "weight": 1.0}, {"source": "backend_app_services_orchestrator_steps_py", "target": "steps_step_finalize", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L335", "weight": 1.0}, {"source": "backend_app_services_orchestrator_steps_py", "target": "steps_step_reminder", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L460", "weight": 1.0}, {"source": "steps_rationale_1", "target": "backend_app_services_orchestrator_steps_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "steps_step_scrape", "callee": "info", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L36"}, {"caller_nid": "steps_step_scrape", "callee": "ScraperService", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L39"}, {"caller_nid": "steps_step_scrape", "callee": "run_scrape", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L42"}, {"caller_nid": "steps_step_scrape", "callee": "now", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L44"}, {"caller_nid": "steps_step_scrape", "callee": "commit", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L46"}, {"caller_nid": "steps_step_scrape", "callee": "info", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L47"}, {"caller_nid": "steps_step_scrape", "callee": "warning", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L49"}, {"caller_nid": "steps_step_scrape", "callee": "get", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L50"}, {"caller_nid": "steps_step_scrape", "callee": "now", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L54"}, {"caller_nid": "steps_step_scrape", "callee": "commit", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L56"}, {"caller_nid": "steps_step_scrape", "callee": "send_admin_alert", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L57"}, {"caller_nid": "steps_step_scrape", "callee": "get", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L61"}, {"caller_nid": "steps_step_scrape", "callee": "warning", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L64"}, {"caller_nid": "steps_step_generate", "callee": "info", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L69"}, {"caller_nid": "steps_step_generate", "callee": "generate_meal_plan", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L73"}, {"caller_nid": "steps_step_generate", "callee": "now", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L78"}, {"caller_nid": "steps_step_generate", "callee": "commit", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L79"}, {"caller_nid": "steps_step_generate", "callee": "info", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L80"}, {"caller_nid": "steps_step_generate", "callee": "str", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L83"}, {"caller_nid": "steps_step_generate", "callee": "commit", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L84"}, {"caller_nid": "steps_step_generate", "callee": "send_admin_alert", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L85"}, {"caller_nid": "steps_step_generate", "callee": "str", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L87"}, {"caller_nid": "steps_step_email", "callee": "info", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L94"}, {"caller_nid": "steps_step_email", "callee": "first", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L98"}, {"caller_nid": "steps_step_email", "callee": "filter", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L98"}, {"caller_nid": "steps_step_email", "callee": "query", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L98"}, {"caller_nid": "steps_step_email", "callee": "RuntimeError", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L106"}, {"caller_nid": "steps_step_email", "callee": "all", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L111"}, {"caller_nid": "steps_step_email", "callee": "filter", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L111"}, {"caller_nid": "steps_step_email", "callee": "query", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L111"}, {"caller_nid": "steps_step_email", "callee": "isnot", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L114"}, {"caller_nid": "steps_step_email", "callee": "set", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L127"}, {"caller_nid": "steps_step_email", "callee": "add", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L132"}, {"caller_nid": "steps_step_email", "callee": "all", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L136"}, {"caller_nid": "steps_step_email", "callee": "filter", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L136"}, {"caller_nid": "steps_step_email", "callee": "query", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L136"}, {"caller_nid": "steps_step_email", "callee": "in_", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L137"}, {"caller_nid": "steps_step_email", "callee": "UUID", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L137"}, {"caller_nid": "steps_step_email", "callee": "str", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L137"}, {"caller_nid": "steps_step_email", "callee": "str", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L139"}, {"caller_nid": "steps_step_email", "callee": "strip", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L147"}, {"caller_nid": "steps_step_email", "callee": "get", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L147"}, {"caller_nid": "steps_step_email", "callee": "str", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L147"}, {"caller_nid": "steps_step_email", "callee": "get", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L147"}, {"caller_nid": "steps_step_email", "callee": "get", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L147"}, {"caller_nid": "steps_step_email", "callee": "first", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L151"}, {"caller_nid": "steps_step_email", "callee": "order_by", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L151"}, {"caller_nid": "steps_step_email", "callee": "filter", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L151"}, {"caller_nid": "steps_step_email", "callee": "join", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L151"}, {"caller_nid": "steps_step_email", "callee": "query", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L151"}, {"caller_nid": "steps_step_email", "callee": "lower", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L153"}, {"caller_nid": "steps_step_email", "callee": "desc", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L154"}, {"caller_nid": "steps_step_email", "callee": "float", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L159"}, {"caller_nid": "steps_step_email", "callee": "get", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L164"}, {"caller_nid": "steps_step_email", "callee": "get", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L165"}, {"caller_nid": "steps_step_email", "callee": "join", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L171"}, {"caller_nid": "steps_step_email", "callee": "escape", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L172"}, {"caller_nid": "steps_step_email", "callee": "escape", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L173"}, {"caller_nid": "steps_step_email", "callee": "str", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L173"}, {"caller_nid": "steps_step_email", "callee": "escape", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L173"}, {"caller_nid": "steps_step_email", "callee": "str", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L173"}, {"caller_nid": "steps_step_email", "callee": "escape", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L174"}, {"caller_nid": "steps_step_email", "callee": "str", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L174"}, {"caller_nid": "steps_step_email", "callee": "escape", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L175"}, {"caller_nid": "steps_step_email", "callee": "str", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L175"}, {"caller_nid": "steps_step_email", "callee": "items", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L176"}, {"caller_nid": "steps_step_email", "callee": "get_email_backend", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L192"}, {"caller_nid": "steps_step_email", "callee": "issue_token", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L198"}, {"caller_nid": "steps_step_email", "callee": "escape", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L202"}, {"caller_nid": "steps_step_email", "callee": "str", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L203"}, {"caller_nid": "steps_step_email", "callee": "escape", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L208"}, {"caller_nid": "steps_step_email", "callee": "join", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L215"}, {"caller_nid": "steps_step_email", "callee": "escape", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L216"}, {"caller_nid": "steps_step_email", "callee": "str", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L216"}, {"caller_nid": "steps_step_email", "callee": "get", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L216"}, {"caller_nid": "steps_step_email", "callee": "escape", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L217"}, {"caller_nid": "steps_step_email", "callee": "str", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L217"}, {"caller_nid": "steps_step_email", "callee": "get", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L217"}, {"caller_nid": "steps_step_email", "callee": "escape", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L218"}, {"caller_nid": "steps_step_email", "callee": "get", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L218"}, {"caller_nid": "steps_step_email", "callee": "str", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L218"}, {"caller_nid": "steps_step_email", "callee": "get", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L218"}, {"caller_nid": "steps_step_email", "callee": "get", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L218"}, {"caller_nid": "steps_step_email", "callee": "join", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L228"}, {"caller_nid": "steps_step_email", "callee": "escape", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L229"}, {"caller_nid": "steps_step_email", "callee": "str", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L229"}, {"caller_nid": "steps_step_email", "callee": "len", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L235"}, {"caller_nid": "steps_step_email", "callee": "lower", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L244"}, {"caller_nid": "steps_step_email", "callee": "get", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L244"}, {"caller_nid": "steps_step_email", "callee": "str", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L244"}, {"caller_nid": "steps_step_email", "callee": "get", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L244"}, {"caller_nid": "steps_step_email", "callee": "get", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L244"}, {"caller_nid": "steps_step_email", "callee": "first", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L246"}, {"caller_nid": "steps_step_email", "callee": "order_by", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L246"}, {"caller_nid": "steps_step_email", "callee": "filter", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L246"}, {"caller_nid": "steps_step_email", "callee": "join", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L246"}, {"caller_nid": "steps_step_email", "callee": "query", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L246"}, {"caller_nid": "steps_step_email", "callee": "desc", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L249"}, {"caller_nid": "steps_step_email", "callee": "float", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L253"}, {"caller_nid": "steps_step_email", "callee": "append", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L260"}, {"caller_nid": "steps_step_email", "callee": "escape", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L280"}, {"caller_nid": "steps_step_email", "callee": "join", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L282"}, {"caller_nid": "steps_step_email", "callee": "send", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L286"}, {"caller_nid": "steps_step_email", "callee": "info", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L291"}, {"caller_nid": "steps_step_email", "callee": "now", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L293"}, {"caller_nid": "steps_step_email", "callee": "commit", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L294"}, {"caller_nid": "steps_step_deadline", "callee": "info", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L299"}, {"caller_nid": "steps_step_deadline", "callee": "first", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L303"}, {"caller_nid": "steps_step_deadline", "callee": "filter", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L303"}, {"caller_nid": "steps_step_deadline", "callee": "query", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L303"}, {"caller_nid": "steps_step_deadline", "callee": "now", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L311"}, {"caller_nid": "steps_step_deadline", "callee": "commit", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L312"}, {"caller_nid": "steps_step_deadline", "callee": "first", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L315"}, {"caller_nid": "steps_step_deadline", "callee": "filter", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L315"}, {"caller_nid": "steps_step_deadline", "callee": "query", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L315"}, {"caller_nid": "steps_step_deadline", "callee": "now", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L328"}, {"caller_nid": "steps_step_deadline", "callee": "commit", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L329"}, {"caller_nid": "steps_step_deadline", "callee": "info", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L330"}, {"caller_nid": "steps_step_finalize", "callee": "info", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L337"}, {"caller_nid": "steps_step_finalize", "callee": "first", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L343"}, {"caller_nid": "steps_step_finalize", "callee": "filter", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L343"}, {"caller_nid": "steps_step_finalize", "callee": "query", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L343"}, {"caller_nid": "steps_step_finalize", "callee": "all", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L358"}, {"caller_nid": "steps_step_finalize", "callee": "filter", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L358"}, {"caller_nid": "steps_step_finalize", "callee": "query", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L358"}, {"caller_nid": "steps_step_finalize", "callee": "isnot", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L361"}, {"caller_nid": "steps_step_finalize", "callee": "set", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L367"}, {"caller_nid": "steps_step_finalize", "callee": "add", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L372"}, {"caller_nid": "steps_step_finalize", "callee": "all", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L375"}, {"caller_nid": "steps_step_finalize", "callee": "filter", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L375"}, {"caller_nid": "steps_step_finalize", "callee": "query", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L375"}, {"caller_nid": "steps_step_finalize", "callee": "in_", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L376"}, {"caller_nid": "steps_step_finalize", "callee": "UUID", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L376"}, {"caller_nid": "steps_step_finalize", "callee": "str", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L376"}, {"caller_nid": "steps_step_finalize", "callee": "str", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L378"}, {"caller_nid": "steps_step_finalize", "callee": "escape", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L386"}, {"caller_nid": "steps_step_finalize", "callee": "str", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L389"}, {"caller_nid": "steps_step_finalize", "callee": "get", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L389"}, {"caller_nid": "steps_step_finalize", "callee": "get", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L390"}, {"caller_nid": "steps_step_finalize", "callee": "get", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L393"}, {"caller_nid": "steps_step_finalize", "callee": "get", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L394"}, {"caller_nid": "steps_step_finalize", "callee": "first", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L397"}, {"caller_nid": "steps_step_finalize", "callee": "order_by", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L397"}, {"caller_nid": "steps_step_finalize", "callee": "filter", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L397"}, {"caller_nid": "steps_step_finalize", "callee": "join", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L397"}, {"caller_nid": "steps_step_finalize", "callee": "query", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L397"}, {"caller_nid": "steps_step_finalize", "callee": "UUID", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L399"}, {"caller_nid": "steps_step_finalize", "callee": "desc", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L400"}, {"caller_nid": "steps_step_finalize", "callee": "escape", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L404"}, {"caller_nid": "steps_step_finalize", "callee": "float", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L405"}, {"caller_nid": "steps_step_finalize", "callee": "escape", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L414"}, {"caller_nid": "steps_step_finalize", "callee": "escape", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L415"}, {"caller_nid": "steps_step_finalize", "callee": "str", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L415"}, {"caller_nid": "steps_step_finalize", "callee": "escape", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L415"}, {"caller_nid": "steps_step_finalize", "callee": "str", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L415"}, {"caller_nid": "steps_step_finalize", "callee": "len", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L437"}, {"caller_nid": "steps_step_finalize", "callee": "get_email_backend", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L445"}, {"caller_nid": "steps_step_finalize", "callee": "send", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L447"}, {"caller_nid": "steps_step_finalize", "callee": "info", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L452"}, {"caller_nid": "steps_step_finalize", "callee": "now", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L454"}, {"caller_nid": "steps_step_finalize", "callee": "commit", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L456"}, {"caller_nid": "steps_step_finalize", "callee": "info", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L457"}, {"caller_nid": "steps_step_finalize", "callee": "len", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L457"}, {"caller_nid": "steps_step_reminder", "callee": "info", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L462"}, {"caller_nid": "steps_step_reminder", "callee": "info", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L466"}, {"caller_nid": "steps_step_reminder", "callee": "first", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L470"}, {"caller_nid": "steps_step_reminder", "callee": "filter", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L470"}, {"caller_nid": "steps_step_reminder", "callee": "query", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L470"}, {"caller_nid": "steps_step_reminder", "callee": "now", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L478"}, {"caller_nid": "steps_step_reminder", "callee": "commit", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L479"}, {"caller_nid": "steps_step_reminder", "callee": "now", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L488"}, {"caller_nid": "steps_step_reminder", "callee": "commit", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L489"}, {"caller_nid": "steps_step_reminder", "callee": "all", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L493"}, {"caller_nid": "steps_step_reminder", "callee": "filter", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L493"}, {"caller_nid": "steps_step_reminder", "callee": "query", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L493"}, {"caller_nid": "steps_step_reminder", "callee": "isnot", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L496"}, {"caller_nid": "steps_step_reminder", "callee": "get_email_backend", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L501"}, {"caller_nid": "steps_step_reminder", "callee": "all", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L505"}, {"caller_nid": "steps_step_reminder", "callee": "filter", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L505"}, {"caller_nid": "steps_step_reminder", "callee": "query", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L505"}, {"caller_nid": "steps_step_reminder", "callee": "in_", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L507"}, {"caller_nid": "steps_step_reminder", "callee": "issue_token", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L523"}, {"caller_nid": "steps_step_reminder", "callee": "escape", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L527"}, {"caller_nid": "steps_step_reminder", "callee": "str", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L528"}, {"caller_nid": "steps_step_reminder", "callee": "append", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L530"}, {"caller_nid": "steps_step_reminder", "callee": "escape", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L536"}, {"caller_nid": "steps_step_reminder", "callee": "join", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L538"}, {"caller_nid": "steps_step_reminder", "callee": "send", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L540"}, {"caller_nid": "steps_step_reminder", "callee": "info", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L545"}, {"caller_nid": "steps_step_reminder", "callee": "now", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L547"}, {"caller_nid": "steps_step_reminder", "callee": "commit", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L548"}, {"caller_nid": "steps_step_reminder", "callee": "info", "source_file": "backend/app/services/orchestrator/steps.py", "source_location": "L549"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/fa72227e1730d3462755ca938a96fc2c79e11b69604f88c24470428a34ac2d6c.json b/graphify-out/cache/fa72227e1730d3462755ca938a96fc2c79e11b69604f88c24470428a34ac2d6c.json
deleted file mode 100644
index 9431371..0000000
--- a/graphify-out/cache/fa72227e1730d3462755ca938a96fc2c79e11b69604f88c24470428a34ac2d6c.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_api_meals_py", "label": "meals.py", "file_type": "code", "source_file": "backend/app/api/meals.py", "source_location": "L1"}, {"id": "meals_get_planned_meals", "label": "get_planned_meals()", "file_type": "code", "source_file": "backend/app/api/meals.py", "source_location": "L30"}, {"id": "meals_create_meal_plan", "label": "create_meal_plan()", "file_type": "code", "source_file": "backend/app/api/meals.py", "source_location": "L46"}, {"id": "meals_get_meal_plan", "label": "get_meal_plan()", "file_type": "code", "source_file": "backend/app/api/meals.py", "source_location": "L85"}, {"id": "meals_lock_meal_plan", "label": "lock_meal_plan()", "file_type": "code", "source_file": "backend/app/api/meals.py", "source_location": "L93"}, {"id": "meals_votesubmission", "label": "VoteSubmission", "file_type": "code", "source_file": "backend/app/api/meals.py", "source_location": "L109"}, {"id": "basemodel", "label": "BaseModel", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "meals_get_vote_page", "label": "get_vote_page()", "file_type": "code", "source_file": "backend/app/api/meals.py", "source_location": "L119"}, {"id": "meals_submit_vote", "label": "submit_vote()", "file_type": "code", "source_file": "backend/app/api/meals.py", "source_location": "L251"}, {"id": "meals_get_meal_item", "label": "get_meal_item()", "file_type": "code", "source_file": "backend/app/api/meals.py", "source_location": "L301"}, {"id": "meals_swap_meal_item", "label": "swap_meal_item()", "file_type": "code", "source_file": "backend/app/api/meals.py", "source_location": "L323"}, {"id": "meals_approve_meal_item", "label": "approve_meal_item()", "file_type": "code", "source_file": "backend/app/api/meals.py", "source_location": "L342"}, {"id": "meals_deny_meal_item", "label": "deny_meal_item()", "file_type": "code", "source_file": "backend/app/api/meals.py", "source_location": "L353"}, {"id": "meals_generate_single_item", "label": "generate_single_item()", "file_type": "code", "source_file": "backend/app/api/meals.py", "source_location": "L364"}, {"id": "meals_move_meal_item", "label": "move_meal_item()", "file_type": "code", "source_file": "backend/app/api/meals.py", "source_location": "L413"}, {"id": "meals_rationale_110", "label": "Body for POST /vote/{item_id}?token=... Spec body: {\"vote\": \"approve\" | \"de", "file_type": "rationale", "source_file": "backend/app/api/meals.py", "source_location": "L110"}, {"id": "meals_rationale_124", "label": "Render the per-voter approval confirmation page. Verifies the signed token", "file_type": "rationale", "source_file": "backend/app/api/meals.py", "source_location": "L124"}, {"id": "meals_rationale_257", "label": "Record a per-voter vote and apply the approval rule. - Single-use enforceme", "file_type": "rationale", "source_file": "backend/app/api/meals.py", "source_location": "L257"}, {"id": "meals_rationale_343", "label": "Directly approve a meal plan item from the dashboard.", "file_type": "rationale", "source_file": "backend/app/api/meals.py", "source_location": "L343"}, {"id": "meals_rationale_354", "label": "Directly deny a meal plan item from the dashboard.", "file_type": "rationale", "source_file": "backend/app/api/meals.py", "source_location": "L354"}, {"id": "meals_rationale_370", "label": "Generate a single meal for an empty slot.", "file_type": "rationale", "source_file": "backend/app/api/meals.py", "source_location": "L370"}, {"id": "meals_rationale_419", "label": "Move a meal to a new day/type slot. If the target slot is occupied by anoth", "file_type": "rationale", "source_file": "backend/app/api/meals.py", "source_location": "L419"}], "edges": [{"source": "backend_app_api_meals_py", "target": "fastapi", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/meals.py", "source_location": "L1", "weight": 1.0}, {"source": "backend_app_api_meals_py", "target": "fastapi_responses", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/meals.py", "source_location": "L2", "weight": 1.0}, {"source": "backend_app_api_meals_py", "target": "html", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/meals.py", "source_location": "L3", "weight": 1.0}, {"source": "backend_app_api_meals_py", "target": "pydantic", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/meals.py", "source_location": "L4", "weight": 1.0}, {"source": "backend_app_api_meals_py", "target": "sqlalchemy", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/meals.py", "source_location": "L5", "weight": 1.0}, {"source": "backend_app_api_meals_py", "target": "sqlalchemy_orm", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/meals.py", "source_location": "L6", "weight": 1.0}, {"source": "backend_app_api_meals_py", "target": "app_database", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/meals.py", "source_location": "L7", "weight": 1.0}, {"source": "backend_app_api_meals_py", "target": "app_models", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/meals.py", "source_location": "L8", "weight": 1.0}, {"source": "backend_app_api_meals_py", "target": "app_schemas", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/meals.py", "source_location": "L13", "weight": 1.0}, {"source": "backend_app_api_meals_py", "target": "app_security", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/meals.py", "source_location": "L17", "weight": 1.0}, {"source": "backend_app_api_meals_py", "target": "app_services", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/meals.py", "source_location": "L18", "weight": 1.0}, {"source": "backend_app_api_meals_py", "target": "uuid", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/meals.py", "source_location": "L19", "weight": 1.0}, {"source": "backend_app_api_meals_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/meals.py", "source_location": "L20", "weight": 1.0}, {"source": "backend_app_api_meals_py", "target": "datetime", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/meals.py", "source_location": "L21", "weight": 1.0}, {"source": "backend_app_api_meals_py", "target": "uuid", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/meals.py", "source_location": "L22", "weight": 1.0}, {"source": "backend_app_api_meals_py", "target": "typing", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/api/meals.py", "source_location": "L23", "weight": 1.0}, {"source": "backend_app_api_meals_py", "target": "random", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/app/api/meals.py", "source_location": "L24", "weight": 1.0}, {"source": "backend_app_api_meals_py", "target": "meals_get_planned_meals", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/meals.py", "source_location": "L30", "weight": 1.0}, {"source": "backend_app_api_meals_py", "target": "meals_create_meal_plan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/meals.py", "source_location": "L46", "weight": 1.0}, {"source": "backend_app_api_meals_py", "target": "meals_get_meal_plan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/meals.py", "source_location": "L85", "weight": 1.0}, {"source": "backend_app_api_meals_py", "target": "meals_lock_meal_plan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/meals.py", "source_location": "L93", "weight": 1.0}, {"source": "backend_app_api_meals_py", "target": "meals_votesubmission", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/meals.py", "source_location": "L109", "weight": 1.0}, {"source": "meals_votesubmission", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "backend/app/api/meals.py", "source_location": "L109", "weight": 1.0}, {"source": "backend_app_api_meals_py", "target": "meals_get_vote_page", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/meals.py", "source_location": "L119", "weight": 1.0}, {"source": "backend_app_api_meals_py", "target": "meals_submit_vote", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/meals.py", "source_location": "L251", "weight": 1.0}, {"source": "backend_app_api_meals_py", "target": "meals_get_meal_item", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/meals.py", "source_location": "L301", "weight": 1.0}, {"source": "backend_app_api_meals_py", "target": "meals_swap_meal_item", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/meals.py", "source_location": "L323", "weight": 1.0}, {"source": "backend_app_api_meals_py", "target": "meals_approve_meal_item", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/meals.py", "source_location": "L342", "weight": 1.0}, {"source": "backend_app_api_meals_py", "target": "meals_deny_meal_item", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/meals.py", "source_location": "L353", "weight": 1.0}, {"source": "backend_app_api_meals_py", "target": "meals_generate_single_item", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/meals.py", "source_location": "L364", "weight": 1.0}, {"source": "backend_app_api_meals_py", "target": "meals_move_meal_item", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/app/api/meals.py", "source_location": "L413", "weight": 1.0}, {"source": "meals_rationale_110", "target": "meals_votesubmission", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/api/meals.py", "source_location": "L110", "weight": 1.0}, {"source": "meals_rationale_124", "target": "meals_get_vote_page", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/api/meals.py", "source_location": "L124", "weight": 1.0}, {"source": "meals_rationale_257", "target": "meals_submit_vote", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/api/meals.py", "source_location": "L257", "weight": 1.0}, {"source": "meals_rationale_343", "target": "meals_approve_meal_item", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/api/meals.py", "source_location": "L343", "weight": 1.0}, {"source": "meals_rationale_354", "target": "meals_deny_meal_item", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/api/meals.py", "source_location": "L354", "weight": 1.0}, {"source": "meals_rationale_370", "target": "meals_generate_single_item", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/api/meals.py", "source_location": "L370", "weight": 1.0}, {"source": "meals_rationale_419", "target": "meals_move_meal_item", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/api/meals.py", "source_location": "L419", "weight": 1.0}], "raw_calls": [{"caller_nid": "meals_get_planned_meals", "callee": "first", "source_file": "backend/app/api/meals.py", "source_location": "L31"}, {"caller_nid": "meals_get_planned_meals", "callee": "query", "source_file": "backend/app/api/meals.py", "source_location": "L31"}, {"caller_nid": "meals_get_planned_meals", "callee": "HTTPException", "source_file": "backend/app/api/meals.py", "source_location": "L33"}, {"caller_nid": "meals_get_planned_meals", "callee": "first", "source_file": "backend/app/api/meals.py", "source_location": "L35"}, {"caller_nid": "meals_get_planned_meals", "callee": "order_by", "source_file": "backend/app/api/meals.py", "source_location": "L35"}, {"caller_nid": "meals_get_planned_meals", "callee": "filter", "source_file": "backend/app/api/meals.py", "source_location": "L35"}, {"caller_nid": "meals_get_planned_meals", "callee": "query", "source_file": "backend/app/api/meals.py", "source_location": "L35"}, {"caller_nid": "meals_get_planned_meals", "callee": "desc", "source_file": "backend/app/api/meals.py", "source_location": "L37"}, {"caller_nid": "meals_create_meal_plan", "callee": "first", "source_file": "backend/app/api/meals.py", "source_location": "L47"}, {"caller_nid": "meals_create_meal_plan", "callee": "query", "source_file": "backend/app/api/meals.py", "source_location": "L47"}, {"caller_nid": "meals_create_meal_plan", "callee": "HTTPException", "source_file": "backend/app/api/meals.py", "source_location": "L49"}, {"caller_nid": "meals_create_meal_plan", "callee": "first", "source_file": "backend/app/api/meals.py", "source_location": "L51"}, {"caller_nid": "meals_create_meal_plan", "callee": "filter", "source_file": "backend/app/api/meals.py", "source_location": "L51"}, {"caller_nid": "meals_create_meal_plan", "callee": "query", "source_file": "backend/app/api/meals.py", "source_location": "L51"}, {"caller_nid": "meals_create_meal_plan", "callee": "HTTPException", "source_file": "backend/app/api/meals.py", "source_location": "L56"}, {"caller_nid": "meals_create_meal_plan", "callee": "MealPlan", "source_file": "backend/app/api/meals.py", "source_location": "L58"}, {"caller_nid": "meals_create_meal_plan", "callee": "upper", "source_file": "backend/app/api/meals.py", "source_location": "L61"}, {"caller_nid": "meals_create_meal_plan", "callee": "add", "source_file": "backend/app/api/meals.py", "source_location": "L66"}, {"caller_nid": "meals_create_meal_plan", "callee": "flush", "source_file": "backend/app/api/meals.py", "source_location": "L67"}, {"caller_nid": "meals_create_meal_plan", "callee": "MealPlanItem", "source_file": "backend/app/api/meals.py", "source_location": "L70"}, {"caller_nid": "meals_create_meal_plan", "callee": "upper", "source_file": "backend/app/api/meals.py", "source_location": "L74"}, {"caller_nid": "meals_create_meal_plan", "callee": "add", "source_file": "backend/app/api/meals.py", "source_location": "L77"}, {"caller_nid": "meals_create_meal_plan", "callee": "commit", "source_file": "backend/app/api/meals.py", "source_location": "L79"}, {"caller_nid": "meals_create_meal_plan", "callee": "refresh", "source_file": "backend/app/api/meals.py", "source_location": "L80"}, {"caller_nid": "meals_get_meal_plan", "callee": "first", "source_file": "backend/app/api/meals.py", "source_location": "L86"}, {"caller_nid": "meals_get_meal_plan", "callee": "filter", "source_file": "backend/app/api/meals.py", "source_location": "L86"}, {"caller_nid": "meals_get_meal_plan", "callee": "query", "source_file": "backend/app/api/meals.py", "source_location": "L86"}, {"caller_nid": "meals_get_meal_plan", "callee": "HTTPException", "source_file": "backend/app/api/meals.py", "source_location": "L88"}, {"caller_nid": "meals_lock_meal_plan", "callee": "first", "source_file": "backend/app/api/meals.py", "source_location": "L94"}, {"caller_nid": "meals_lock_meal_plan", "callee": "filter", "source_file": "backend/app/api/meals.py", "source_location": "L94"}, {"caller_nid": "meals_lock_meal_plan", "callee": "query", "source_file": "backend/app/api/meals.py", "source_location": "L94"}, {"caller_nid": "meals_lock_meal_plan", "callee": "HTTPException", "source_file": "backend/app/api/meals.py", "source_location": "L96"}, {"caller_nid": "meals_lock_meal_plan", "callee": "commit", "source_file": "backend/app/api/meals.py", "source_location": "L99"}, {"caller_nid": "meals_get_vote_page", "callee": "verify_token", "source_file": "backend/app/api/meals.py", "source_location": "L129"}, {"caller_nid": "meals_get_vote_page", "callee": "str", "source_file": "backend/app/api/meals.py", "source_location": "L130"}, {"caller_nid": "meals_get_vote_page", "callee": "get", "source_file": "backend/app/api/meals.py", "source_location": "L130"}, {"caller_nid": "meals_get_vote_page", "callee": "str", "source_file": "backend/app/api/meals.py", "source_location": "L130"}, {"caller_nid": "meals_get_vote_page", "callee": "HTTPException", "source_file": "backend/app/api/meals.py", "source_location": "L131"}, {"caller_nid": "meals_get_vote_page", "callee": "first", "source_file": "backend/app/api/meals.py", "source_location": "L134"}, {"caller_nid": "meals_get_vote_page", "callee": "filter", "source_file": "backend/app/api/meals.py", "source_location": "L134"}, {"caller_nid": "meals_get_vote_page", "callee": "query", "source_file": "backend/app/api/meals.py", "source_location": "L134"}, {"caller_nid": "meals_get_vote_page", "callee": "UUID", "source_file": "backend/app/api/meals.py", "source_location": "L135"}, {"caller_nid": "meals_get_vote_page", "callee": "str", "source_file": "backend/app/api/meals.py", "source_location": "L135"}, {"caller_nid": "meals_get_vote_page", "callee": "HTTPException", "source_file": "backend/app/api/meals.py", "source_location": "L139"}, {"caller_nid": "meals_get_vote_page", "callee": "first", "source_file": "backend/app/api/meals.py", "source_location": "L142"}, {"caller_nid": "meals_get_vote_page", "callee": "filter", "source_file": "backend/app/api/meals.py", "source_location": "L142"}, {"caller_nid": "meals_get_vote_page", "callee": "options", "source_file": "backend/app/api/meals.py", "source_location": "L142"}, {"caller_nid": "meals_get_vote_page", "callee": "query", "source_file": "backend/app/api/meals.py", "source_location": "L142"}, {"caller_nid": "meals_get_vote_page", "callee": "joinedload", "source_file": "backend/app/api/meals.py", "source_location": "L143"}, {"caller_nid": "meals_get_vote_page", "callee": "HTTPException", "source_file": "backend/app/api/meals.py", "source_location": "L148"}, {"caller_nid": "meals_get_vote_page", "callee": "get", "source_file": "backend/app/api/meals.py", "source_location": "L151"}, {"caller_nid": "meals_get_vote_page", "callee": "int", "source_file": "backend/app/api/meals.py", "source_location": "L151"}, {"caller_nid": "meals_get_vote_page", "callee": "str", "source_file": "backend/app/api/meals.py", "source_location": "L151"}, {"caller_nid": "meals_get_vote_page", "callee": "_html_escape", "source_file": "backend/app/api/meals.py", "source_location": "L157"}, {"caller_nid": "meals_get_vote_page", "callee": "_html_escape", "source_file": "backend/app/api/meals.py", "source_location": "L158"}, {"caller_nid": "meals_get_vote_page", "callee": "_html_escape", "source_file": "backend/app/api/meals.py", "source_location": "L159"}, {"caller_nid": "meals_get_vote_page", "callee": "_html_escape", "source_file": "backend/app/api/meals.py", "source_location": "L160"}, {"caller_nid": "meals_get_vote_page", "callee": "_html_escape", "source_file": "backend/app/api/meals.py", "source_location": "L161"}, {"caller_nid": "meals_get_vote_page", "callee": "first", "source_file": "backend/app/api/meals.py", "source_location": "L163"}, {"caller_nid": "meals_get_vote_page", "callee": "filter", "source_file": "backend/app/api/meals.py", "source_location": "L163"}, {"caller_nid": "meals_get_vote_page", "callee": "query", "source_file": "backend/app/api/meals.py", "source_location": "L163"}, {"caller_nid": "meals_get_vote_page", "callee": "HTMLResponse", "source_file": "backend/app/api/meals.py", "source_location": "L193"}, {"caller_nid": "meals_get_vote_page", "callee": "HTMLResponse", "source_file": "backend/app/api/meals.py", "source_location": "L247"}, {"caller_nid": "meals_submit_vote", "callee": "consume_token", "source_file": "backend/app/api/meals.py", "source_location": "L263"}, {"caller_nid": "meals_submit_vote", "callee": "first", "source_file": "backend/app/api/meals.py", "source_location": "L265"}, {"caller_nid": "meals_submit_vote", "callee": "filter", "source_file": "backend/app/api/meals.py", "source_location": "L265"}, {"caller_nid": "meals_submit_vote", "callee": "query", "source_file": "backend/app/api/meals.py", "source_location": "L265"}, {"caller_nid": "meals_submit_vote", "callee": "HTTPException", "source_file": "backend/app/api/meals.py", "source_location": "L267"}, {"caller_nid": "meals_submit_vote", "callee": "add", "source_file": "backend/app/api/meals.py", "source_location": "L270"}, {"caller_nid": "meals_submit_vote", "callee": "MealPlanVote", "source_file": "backend/app/api/meals.py", "source_location": "L270"}, {"caller_nid": "meals_submit_vote", "callee": "flush", "source_file": "backend/app/api/meals.py", "source_location": "L275"}, {"caller_nid": "meals_submit_vote", "callee": "all", "source_file": "backend/app/api/meals.py", "source_location": "L281"}, {"caller_nid": "meals_submit_vote", "callee": "filter", "source_file": "backend/app/api/meals.py", "source_location": "L281"}, {"caller_nid": "meals_submit_vote", "callee": "query", "source_file": "backend/app/api/meals.py", "source_location": "L281"}, {"caller_nid": "meals_submit_vote", "callee": "all", "source_file": "backend/app/api/meals.py", "source_location": "L285"}, {"caller_nid": "meals_submit_vote", "callee": "filter", "source_file": "backend/app/api/meals.py", "source_location": "L285"}, {"caller_nid": "meals_submit_vote", "callee": "query", "source_file": "backend/app/api/meals.py", "source_location": "L285"}, {"caller_nid": "meals_submit_vote", "callee": "any", "source_file": "backend/app/api/meals.py", "source_location": "L289"}, {"caller_nid": "meals_submit_vote", "callee": "commit", "source_file": "backend/app/api/meals.py", "source_location": "L296"}, {"caller_nid": "meals_get_meal_item", "callee": "first", "source_file": "backend/app/api/meals.py", "source_location": "L302"}, {"caller_nid": "meals_get_meal_item", "callee": "filter", "source_file": "backend/app/api/meals.py", "source_location": "L302"}, {"caller_nid": "meals_get_meal_item", "callee": "options", "source_file": "backend/app/api/meals.py", "source_location": "L302"}, {"caller_nid": "meals_get_meal_item", "callee": "query", "source_file": "backend/app/api/meals.py", "source_location": "L302"}, {"caller_nid": "meals_get_meal_item", "callee": "joinedload", "source_file": "backend/app/api/meals.py", "source_location": "L302"}, {"caller_nid": "meals_get_meal_item", "callee": "HTTPException", "source_file": "backend/app/api/meals.py", "source_location": "L306"}, {"caller_nid": "meals_get_meal_item", "callee": "get", "source_file": "backend/app/api/meals.py", "source_location": "L310"}, {"caller_nid": "meals_get_meal_item", "callee": "get", "source_file": "backend/app/api/meals.py", "source_location": "L310"}, {"caller_nid": "meals_get_meal_item", "callee": "all", "source_file": "backend/app/api/meals.py", "source_location": "L312"}, {"caller_nid": "meals_get_meal_item", "callee": "filter", "source_file": "backend/app/api/meals.py", "source_location": "L312"}, {"caller_nid": "meals_get_meal_item", "callee": "query", "source_file": "backend/app/api/meals.py", "source_location": "L312"}, {"caller_nid": "meals_get_meal_item", "callee": "in_", "source_file": "backend/app/api/meals.py", "source_location": "L312"}, {"caller_nid": "meals_get_meal_item", "callee": "str", "source_file": "backend/app/api/meals.py", "source_location": "L313"}, {"caller_nid": "meals_get_meal_item", "callee": "str", "source_file": "backend/app/api/meals.py", "source_location": "L315"}, {"caller_nid": "meals_get_meal_item", "callee": "get", "source_file": "backend/app/api/meals.py", "source_location": "L315"}, {"caller_nid": "meals_get_meal_item", "callee": "get", "source_file": "backend/app/api/meals.py", "source_location": "L316"}, {"caller_nid": "meals_swap_meal_item", "callee": "first", "source_file": "backend/app/api/meals.py", "source_location": "L324"}, {"caller_nid": "meals_swap_meal_item", "callee": "filter", "source_file": "backend/app/api/meals.py", "source_location": "L324"}, {"caller_nid": "meals_swap_meal_item", "callee": "query", "source_file": "backend/app/api/meals.py", "source_location": "L324"}, {"caller_nid": "meals_swap_meal_item", "callee": "HTTPException", "source_file": "backend/app/api/meals.py", "source_location": "L326"}, {"caller_nid": "meals_swap_meal_item", "callee": "first", "source_file": "backend/app/api/meals.py", "source_location": "L328"}, {"caller_nid": "meals_swap_meal_item", "callee": "filter", "source_file": "backend/app/api/meals.py", "source_location": "L328"}, {"caller_nid": "meals_swap_meal_item", "callee": "query", "source_file": "backend/app/api/meals.py", "source_location": "L328"}, {"caller_nid": "meals_swap_meal_item", "callee": "HTTPException", "source_file": "backend/app/api/meals.py", "source_location": "L330"}, {"caller_nid": "meals_swap_meal_item", "callee": "commit", "source_file": "backend/app/api/meals.py", "source_location": "L337"}, {"caller_nid": "meals_approve_meal_item", "callee": "first", "source_file": "backend/app/api/meals.py", "source_location": "L344"}, {"caller_nid": "meals_approve_meal_item", "callee": "filter", "source_file": "backend/app/api/meals.py", "source_location": "L344"}, {"caller_nid": "meals_approve_meal_item", "callee": "query", "source_file": "backend/app/api/meals.py", "source_location": "L344"}, {"caller_nid": "meals_approve_meal_item", "callee": "HTTPException", "source_file": "backend/app/api/meals.py", "source_location": "L346"}, {"caller_nid": "meals_approve_meal_item", "callee": "commit", "source_file": "backend/app/api/meals.py", "source_location": "L348"}, {"caller_nid": "meals_deny_meal_item", "callee": "first", "source_file": "backend/app/api/meals.py", "source_location": "L355"}, {"caller_nid": "meals_deny_meal_item", "callee": "filter", "source_file": "backend/app/api/meals.py", "source_location": "L355"}, {"caller_nid": "meals_deny_meal_item", "callee": "query", "source_file": "backend/app/api/meals.py", "source_location": "L355"}, {"caller_nid": "meals_deny_meal_item", "callee": "HTTPException", "source_file": "backend/app/api/meals.py", "source_location": "L357"}, {"caller_nid": "meals_deny_meal_item", "callee": "commit", "source_file": "backend/app/api/meals.py", "source_location": "L359"}, {"caller_nid": "meals_generate_single_item", "callee": "first", "source_file": "backend/app/api/meals.py", "source_location": "L371"}, {"caller_nid": "meals_generate_single_item", "callee": "filter", "source_file": "backend/app/api/meals.py", "source_location": "L371"}, {"caller_nid": "meals_generate_single_item", "callee": "query", "source_file": "backend/app/api/meals.py", "source_location": "L371"}, {"caller_nid": "meals_generate_single_item", "callee": "HTTPException", "source_file": "backend/app/api/meals.py", "source_location": "L373"}, {"caller_nid": "meals_generate_single_item", "callee": "first", "source_file": "backend/app/api/meals.py", "source_location": "L377"}, {"caller_nid": "meals_generate_single_item", "callee": "filter", "source_file": "backend/app/api/meals.py", "source_location": "L377"}, {"caller_nid": "meals_generate_single_item", "callee": "query", "source_file": "backend/app/api/meals.py", "source_location": "L377"}, {"caller_nid": "meals_generate_single_item", "callee": "HTTPException", "source_file": "backend/app/api/meals.py", "source_location": "L386"}, {"caller_nid": "meals_generate_single_item", "callee": "all", "source_file": "backend/app/api/meals.py", "source_location": "L389"}, {"caller_nid": "meals_generate_single_item", "callee": "query", "source_file": "backend/app/api/meals.py", "source_location": "L389"}, {"caller_nid": "meals_generate_single_item", "callee": "choice", "source_file": "backend/app/api/meals.py", "source_location": "L397"}, {"caller_nid": "meals_generate_single_item", "callee": "MealPlanItem", "source_file": "backend/app/api/meals.py", "source_location": "L399"}, {"caller_nid": "meals_generate_single_item", "callee": "upper", "source_file": "backend/app/api/meals.py", "source_location": "L403"}, {"caller_nid": "meals_generate_single_item", "callee": "add", "source_file": "backend/app/api/meals.py", "source_location": "L406"}, {"caller_nid": "meals_generate_single_item", "callee": "commit", "source_file": "backend/app/api/meals.py", "source_location": "L407"}, {"caller_nid": "meals_generate_single_item", "callee": "refresh", "source_file": "backend/app/api/meals.py", "source_location": "L408"}, {"caller_nid": "meals_move_meal_item", "callee": "first", "source_file": "backend/app/api/meals.py", "source_location": "L424"}, {"caller_nid": "meals_move_meal_item", "callee": "filter", "source_file": "backend/app/api/meals.py", "source_location": "L424"}, {"caller_nid": "meals_move_meal_item", "callee": "query", "source_file": "backend/app/api/meals.py", "source_location": "L424"}, {"caller_nid": "meals_move_meal_item", "callee": "HTTPException", "source_file": "backend/app/api/meals.py", "source_location": "L426"}, {"caller_nid": "meals_move_meal_item", "callee": "first", "source_file": "backend/app/api/meals.py", "source_location": "L430"}, {"caller_nid": "meals_move_meal_item", "callee": "filter", "source_file": "backend/app/api/meals.py", "source_location": "L430"}, {"caller_nid": "meals_move_meal_item", "callee": "query", "source_file": "backend/app/api/meals.py", "source_location": "L430"}, {"caller_nid": "meals_move_meal_item", "callee": "execute", "source_file": "backend/app/api/meals.py", "source_location": "L443"}, {"caller_nid": "meals_move_meal_item", "callee": "text", "source_file": "backend/app/api/meals.py", "source_location": "L444"}, {"caller_nid": "meals_move_meal_item", "callee": "str", "source_file": "backend/app/api/meals.py", "source_location": "L459"}, {"caller_nid": "meals_move_meal_item", "callee": "str", "source_file": "backend/app/api/meals.py", "source_location": "L460"}, {"caller_nid": "meals_move_meal_item", "callee": "commit", "source_file": "backend/app/api/meals.py", "source_location": "L467"}, {"caller_nid": "meals_move_meal_item", "callee": "refresh", "source_file": "backend/app/api/meals.py", "source_location": "L468"}, {"caller_nid": "meals_move_meal_item", "callee": "commit", "source_file": "backend/app/api/meals.py", "source_location": "L474"}, {"caller_nid": "meals_move_meal_item", "callee": "refresh", "source_file": "backend/app/api/meals.py", "source_location": "L475"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/fb275b0ad51929984f7e3dbc3129948d27630a989a1b931e5220510737307131.json b/graphify-out/cache/fb275b0ad51929984f7e3dbc3129948d27630a989a1b931e5220510737307131.json
deleted file mode 100644
index 78d4da9..0000000
--- a/graphify-out/cache/fb275b0ad51929984f7e3dbc3129948d27630a989a1b931e5220510737307131.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_tests_test_swiftly_api_py", "label": "test_swiftly_api.py", "file_type": "code", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L1"}, {"id": "test_swiftly_api_test_parse_categories_fixture", "label": "test_parse_categories_fixture()", "file_type": "code", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L40"}, {"id": "test_swiftly_api_test_parse_category_response_fixture", "label": "test_parse_category_response_fixture()", "file_type": "code", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L57"}, {"id": "test_swiftly_api_test_map_product_returns_none_for_unparseable", "label": "test_map_product_returns_none_for_unparseable()", "file_type": "code", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L107"}, {"id": "test_swiftly_api_mock_response", "label": "_mock_response()", "file_type": "code", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L121"}, {"id": "test_swiftly_api_test_swiftly_auth_error_on_401_from_api", "label": "test_swiftly_auth_error_on_401_from_api()", "file_type": "code", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L135"}, {"id": "test_swiftly_api_test_fetch_category_mints_token_when_none_pinned", "label": "test_fetch_category_mints_token_when_none_pinned()", "file_type": "code", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L146"}, {"id": "test_swiftly_api_test_background_runner_writes_failed_with_token_message", "label": "test_background_runner_writes_failed_with_token_message()", "file_type": "code", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L171"}, {"id": "test_swiftly_api_rationale_1", "label": "Offline tests for the Swiftly product-API client (R3-0). All tests run against", "file_type": "rationale", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L1"}, {"id": "test_swiftly_api_rationale_41", "label": "Parser returns >=10 distinct API slugs from the captured page.", "file_type": "rationale", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L41"}, {"id": "test_swiftly_api_rationale_58", "label": "Parser returns >=10 product dicts each with the mapped fields populated.", "file_type": "rationale", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L58"}, {"id": "test_swiftly_api_rationale_108", "label": "Products with no name AND no parseable price are dropped.", "file_type": "rationale", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L108"}, {"id": "test_swiftly_api_rationale_136", "label": "A 401 from the API host raises SwiftlyAuthError before raise_for_status.", "file_type": "rationale", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L136"}, {"id": "test_swiftly_api_rationale_147", "label": "With no explicit bearer_token, fetch_category calls swiftly_auth.get_token()", "file_type": "rationale", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L147"}, {"id": "test_swiftly_api_rationale_172", "label": "A 401 during the background scrape lands in ScrapeLog as FAILED + message.", "file_type": "rationale", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L172"}], "edges": [{"source": "backend_tests_test_swiftly_api_py", "target": "json", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L9", "weight": 1.0}, {"source": "backend_tests_test_swiftly_api_py", "target": "sys", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L10", "weight": 1.0}, {"source": "backend_tests_test_swiftly_api_py", "target": "uuid", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L11", "weight": 1.0}, {"source": "backend_tests_test_swiftly_api_py", "target": "decimal", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L12", "weight": 1.0}, {"source": "backend_tests_test_swiftly_api_py", "target": "pathlib", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L13", "weight": 1.0}, {"source": "backend_tests_test_swiftly_api_py", "target": "unittest_mock", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L14", "weight": 1.0}, {"source": "backend_tests_test_swiftly_api_py", "target": "pytest", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L16", "weight": 1.0}, {"source": "backend_tests_test_swiftly_api_py", "target": "requests", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L17", "weight": 1.0}, {"source": "backend_tests_test_swiftly_api_py", "target": "app_scraper_lucky_ca_scraper", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L24", "weight": 1.0}, {"source": "backend_tests_test_swiftly_api_py", "target": "test_swiftly_api_test_parse_categories_fixture", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L40", "weight": 1.0}, {"source": "backend_tests_test_swiftly_api_py", "target": "test_swiftly_api_test_parse_category_response_fixture", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L57", "weight": 1.0}, {"source": "backend_tests_test_swiftly_api_py", "target": "test_swiftly_api_test_map_product_returns_none_for_unparseable", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L107", "weight": 1.0}, {"source": "backend_tests_test_swiftly_api_py", "target": "test_swiftly_api_mock_response", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L121", "weight": 1.0}, {"source": "backend_tests_test_swiftly_api_py", "target": "test_swiftly_api_test_swiftly_auth_error_on_401_from_api", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L135", "weight": 1.0}, {"source": "backend_tests_test_swiftly_api_py", "target": "test_swiftly_api_test_fetch_category_mints_token_when_none_pinned", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L146", "weight": 1.0}, {"source": "backend_tests_test_swiftly_api_py", "target": "test_swiftly_api_test_background_runner_writes_failed_with_token_message", "relation": "contains", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L171", "weight": 1.0}, {"source": "test_swiftly_api_test_swiftly_auth_error_on_401_from_api", "target": "test_swiftly_api_mock_response", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L139", "weight": 1.0}, {"source": "test_swiftly_api_test_fetch_category_mints_token_when_none_pinned", "target": "test_swiftly_api_mock_response", "relation": "calls", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L159", "weight": 1.0}, {"source": "test_swiftly_api_rationale_1", "target": "backend_tests_test_swiftly_api_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L1", "weight": 1.0}, {"source": "test_swiftly_api_rationale_41", "target": "test_swiftly_api_test_parse_categories_fixture", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L41", "weight": 1.0}, {"source": "test_swiftly_api_rationale_58", "target": "test_swiftly_api_test_parse_category_response_fixture", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L58", "weight": 1.0}, {"source": "test_swiftly_api_rationale_108", "target": "test_swiftly_api_test_map_product_returns_none_for_unparseable", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L108", "weight": 1.0}, {"source": "test_swiftly_api_rationale_136", "target": "test_swiftly_api_test_swiftly_auth_error_on_401_from_api", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L136", "weight": 1.0}, {"source": "test_swiftly_api_rationale_147", "target": "test_swiftly_api_test_fetch_category_mints_token_when_none_pinned", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L147", "weight": 1.0}, {"source": "test_swiftly_api_rationale_172", "target": "test_swiftly_api_test_background_runner_writes_failed_with_token_message", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L172", "weight": 1.0}], "raw_calls": [{"caller_nid": "test_swiftly_api_test_parse_categories_fixture", "callee": "exists", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L42"}, {"caller_nid": "test_swiftly_api_test_parse_categories_fixture", "callee": "skip", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L43"}, {"caller_nid": "test_swiftly_api_test_parse_categories_fixture", "callee": "read_text", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L44"}, {"caller_nid": "test_swiftly_api_test_parse_categories_fixture", "callee": "parse_categories_html", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L46"}, {"caller_nid": "test_swiftly_api_test_parse_categories_fixture", "callee": "len", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L48"}, {"caller_nid": "test_swiftly_api_test_parse_categories_fixture", "callee": "len", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L48"}, {"caller_nid": "test_swiftly_api_test_parse_categories_fixture", "callee": "len", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L49"}, {"caller_nid": "test_swiftly_api_test_parse_categories_fixture", "callee": "set", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L49"}, {"caller_nid": "test_swiftly_api_test_parse_categories_fixture", "callee": "len", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L49"}, {"caller_nid": "test_swiftly_api_test_parse_categories_fixture", "callee": "startswith", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L52"}, {"caller_nid": "test_swiftly_api_test_parse_category_response_fixture", "callee": "exists", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L59"}, {"caller_nid": "test_swiftly_api_test_parse_category_response_fixture", "callee": "skip", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L60"}, {"caller_nid": "test_swiftly_api_test_parse_category_response_fixture", "callee": "loads", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L61"}, {"caller_nid": "test_swiftly_api_test_parse_category_response_fixture", "callee": "read_text", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L61"}, {"caller_nid": "test_swiftly_api_test_parse_category_response_fixture", "callee": "parse_category_response", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L63"}, {"caller_nid": "test_swiftly_api_test_parse_category_response_fixture", "callee": "len", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L64"}, {"caller_nid": "test_swiftly_api_test_parse_category_response_fixture", "callee": "len", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L64"}, {"caller_nid": "test_swiftly_api_test_parse_category_response_fixture", "callee": "map_product", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L68"}, {"caller_nid": "test_swiftly_api_test_parse_category_response_fixture", "callee": "append", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L72"}, {"caller_nid": "test_swiftly_api_test_parse_category_response_fixture", "callee": "len", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L74"}, {"caller_nid": "test_swiftly_api_test_parse_category_response_fixture", "callee": "len", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L75"}, {"caller_nid": "test_swiftly_api_test_parse_category_response_fixture", "callee": "len", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L76"}, {"caller_nid": "test_swiftly_api_test_parse_category_response_fixture", "callee": "isinstance", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L95"}, {"caller_nid": "test_swiftly_api_test_parse_category_response_fixture", "callee": "isinstance", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L96"}, {"caller_nid": "test_swiftly_api_test_parse_category_response_fixture", "callee": "strip", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L96"}, {"caller_nid": "test_swiftly_api_test_parse_category_response_fixture", "callee": "isinstance", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L97"}, {"caller_nid": "test_swiftly_api_test_parse_category_response_fixture", "callee": "isinstance", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L99"}, {"caller_nid": "test_swiftly_api_test_parse_category_response_fixture", "callee": "any", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L103"}, {"caller_nid": "test_swiftly_api_test_parse_category_response_fixture", "callee": "any", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L104"}, {"caller_nid": "test_swiftly_api_test_map_product_returns_none_for_unparseable", "callee": "map_product", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L109"}, {"caller_nid": "test_swiftly_api_test_map_product_returns_none_for_unparseable", "callee": "map_product", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L111"}, {"caller_nid": "test_swiftly_api_mock_response", "callee": "MagicMock", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L122"}, {"caller_nid": "test_swiftly_api_mock_response", "callee": "HTTPError", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L127"}, {"caller_nid": "test_swiftly_api_test_swiftly_auth_error_on_401_from_api", "callee": "LuckyCaliforniaScraper", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L137"}, {"caller_nid": "test_swiftly_api_test_swiftly_auth_error_on_401_from_api", "callee": "object", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L139"}, {"caller_nid": "test_swiftly_api_test_swiftly_auth_error_on_401_from_api", "callee": "raises", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L140"}, {"caller_nid": "test_swiftly_api_test_swiftly_auth_error_on_401_from_api", "callee": "fetch_category", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L141"}, {"caller_nid": "test_swiftly_api_test_swiftly_auth_error_on_401_from_api", "callee": "str", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L143"}, {"caller_nid": "test_swiftly_api_test_fetch_category_mints_token_when_none_pinned", "callee": "LuckyCaliforniaScraper", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L152"}, {"caller_nid": "test_swiftly_api_test_fetch_category_mints_token_when_none_pinned", "callee": "object", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L155"}, {"caller_nid": "test_swiftly_api_test_fetch_category_mints_token_when_none_pinned", "callee": "object", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L156"}, {"caller_nid": "test_swiftly_api_test_fetch_category_mints_token_when_none_pinned", "callee": "fetch_category", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L163"}, {"caller_nid": "test_swiftly_api_test_fetch_category_mints_token_when_none_pinned", "callee": "assert_called_once", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L165"}, {"caller_nid": "test_swiftly_api_test_background_runner_writes_failed_with_token_message", "callee": "uuid4", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L184"}, {"caller_nid": "test_swiftly_api_test_background_runner_writes_failed_with_token_message", "callee": "SessionLocal", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L185"}, {"caller_nid": "test_swiftly_api_test_background_runner_writes_failed_with_token_message", "callee": "add", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L187"}, {"caller_nid": "test_swiftly_api_test_background_runner_writes_failed_with_token_message", "callee": "ScrapeLog", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L188"}, {"caller_nid": "test_swiftly_api_test_background_runner_writes_failed_with_token_message", "callee": "now", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L193"}, {"caller_nid": "test_swiftly_api_test_background_runner_writes_failed_with_token_message", "callee": "commit", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L196"}, {"caller_nid": "test_swiftly_api_test_background_runner_writes_failed_with_token_message", "callee": "close", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L198"}, {"caller_nid": "test_swiftly_api_test_background_runner_writes_failed_with_token_message", "callee": "setattr", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L206"}, {"caller_nid": "test_swiftly_api_test_background_runner_writes_failed_with_token_message", "callee": "_run_scrape_in_background", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L209"}, {"caller_nid": "test_swiftly_api_test_background_runner_writes_failed_with_token_message", "callee": "SessionLocal", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L213"}, {"caller_nid": "test_swiftly_api_test_background_runner_writes_failed_with_token_message", "callee": "first", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L216"}, {"caller_nid": "test_swiftly_api_test_background_runner_writes_failed_with_token_message", "callee": "filter", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L216"}, {"caller_nid": "test_swiftly_api_test_background_runner_writes_failed_with_token_message", "callee": "query", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L216"}, {"caller_nid": "test_swiftly_api_test_background_runner_writes_failed_with_token_message", "callee": "close", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L225"}, {"caller_nid": "test_swiftly_api_test_background_runner_writes_failed_with_token_message", "callee": "SessionLocal", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L227"}, {"caller_nid": "test_swiftly_api_test_background_runner_writes_failed_with_token_message", "callee": "delete", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L229"}, {"caller_nid": "test_swiftly_api_test_background_runner_writes_failed_with_token_message", "callee": "filter", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L229"}, {"caller_nid": "test_swiftly_api_test_background_runner_writes_failed_with_token_message", "callee": "query", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L229"}, {"caller_nid": "test_swiftly_api_test_background_runner_writes_failed_with_token_message", "callee": "commit", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L230"}, {"caller_nid": "test_swiftly_api_test_background_runner_writes_failed_with_token_message", "callee": "close", "source_file": "backend/tests/test_swiftly_api.py", "source_location": "L232"}]}
\ No newline at end of file
diff --git a/graphify-out/cache/fea2cf4df4a228689b019f79ee649a5c46c8896231a28b27f3202e2c8d9b265c.json b/graphify-out/cache/fea2cf4df4a228689b019f79ee649a5c46c8896231a28b27f3202e2c8d9b265c.json
deleted file mode 100644
index 7a89b4f..0000000
--- a/graphify-out/cache/fea2cf4df4a228689b019f79ee649a5c46c8896231a28b27f3202e2c8d9b265c.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nodes": [{"id": "backend_app_scheduler_main_py", "label": "__main__.py", "file_type": "code", "source_file": "backend/app/scheduler/__main__.py", "source_location": "L1"}, {"id": "main_rationale_1", "label": "APScheduler entry point for the scheduler container. Run: python -m app.schedul", "file_type": "rationale", "source_file": "backend/app/scheduler/__main__.py", "source_location": "L1"}], "edges": [{"source": "backend_app_scheduler_main_py", "target": "logging", "relation": "imports", "confidence": "EXTRACTED", "source_file": "backend/app/scheduler/__main__.py", "source_location": "L14", "weight": 1.0}, {"source": "backend_app_scheduler_main_py", "target": "apscheduler_schedulers_blocking", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/scheduler/__main__.py", "source_location": "L16", "weight": 1.0}, {"source": "backend_app_scheduler_main_py", "target": "apscheduler_triggers_cron", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/scheduler/__main__.py", "source_location": "L17", "weight": 1.0}, {"source": "backend_app_scheduler_main_py", "target": "app_services_orchestrator_runner", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "backend/app/scheduler/__main__.py", "source_location": "L19", "weight": 1.0}, {"source": "main_rationale_1", "target": "backend_app_scheduler_main_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "backend/app/scheduler/__main__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []}
\ No newline at end of file
diff --git a/graphify-out/graph.html b/graphify-out/graph.html
deleted file mode 100644
index 00d2b78..0000000
--- a/graphify-out/graph.html
+++ /dev/null
@@ -1,257 +0,0 @@
-
-
-
-
-graphify - graphify-out/graph.html
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/graphify-out/graph.json b/graphify-out/graph.json
deleted file mode 100644
index 98b5053..0000000
--- a/graphify-out/graph.json
+++ /dev/null
@@ -1,33619 +0,0 @@
-{
- "directed": false,
- "multigraph": false,
- "graph": {},
- "nodes": [
- {
- "label": "database.py",
- "file_type": "code",
- "source_file": "backend/app/database.py",
- "source_location": "L1",
- "community": 27,
- "norm_label": "database.py",
- "id": "backend_app_database_py"
- },
- {
- "label": "get_db()",
- "file_type": "code",
- "source_file": "backend/app/database.py",
- "source_location": "L11",
- "community": 27,
- "norm_label": "get_db()",
- "id": "database_get_db"
- },
- {
- "label": "security.py",
- "file_type": "code",
- "source_file": "backend/app/security.py",
- "source_location": "L1",
- "community": 27,
- "norm_label": "security.py",
- "id": "backend_app_security_py"
- },
- {
- "label": "require_admin()",
- "file_type": "code",
- "source_file": "backend/app/security.py",
- "source_location": "L29",
- "community": 27,
- "norm_label": "require_admin()",
- "id": "security_require_admin"
- },
- {
- "label": "_signer()",
- "file_type": "code",
- "source_file": "backend/app/security.py",
- "source_location": "L45",
- "community": 27,
- "norm_label": "_signer()",
- "id": "security_signer"
- },
- {
- "label": "issue_session()",
- "file_type": "code",
- "source_file": "backend/app/security.py",
- "source_location": "L49",
- "community": 27,
- "norm_label": "issue_session()",
- "id": "security_issue_session"
- },
- {
- "label": "require_session()",
- "file_type": "code",
- "source_file": "backend/app/security.py",
- "source_location": "L54",
- "community": 27,
- "norm_label": "require_session()",
- "id": "security_require_session"
- },
- {
- "label": "Auth dependencies for the MealPlanner backend. Two flavors: - ``require_admin``",
- "file_type": "rationale",
- "source_file": "backend/app/security.py",
- "source_location": "L1",
- "community": 27,
- "norm_label": "auth dependencies for the mealplanner backend. two flavors: - ``require_admin``",
- "id": "security_rationale_1"
- },
- {
- "label": "Enforce a shared bearer token. 401 on bad/missing token, 503 if unset.",
- "file_type": "rationale",
- "source_file": "backend/app/security.py",
- "source_location": "L30",
- "community": 27,
- "norm_label": "enforce a shared bearer token. 401 on bad/missing token, 503 if unset.",
- "id": "security_rationale_30"
- },
- {
- "label": "Sign the family_profile_id and return the cookie value.",
- "file_type": "rationale",
- "source_file": "backend/app/security.py",
- "source_location": "L50",
- "community": 27,
- "norm_label": "sign the family_profile_id and return the cookie value.",
- "id": "security_rationale_50"
- },
- {
- "label": "Auto-authenticate: return the first family_profile_id from the DB. No cooki",
- "file_type": "rationale",
- "source_file": "backend/app/security.py",
- "source_location": "L55",
- "community": 27,
- "norm_label": "auto-authenticate: return the first family_profile_id from the db. no cooki",
- "id": "security_rationale_55"
- },
- {
- "label": "main.py",
- "file_type": "code",
- "source_file": "backend/app/main.py",
- "source_location": "L1",
- "community": 0,
- "norm_label": "main.py",
- "id": "backend_app_main_py"
- },
- {
- "label": "health_check()",
- "file_type": "code",
- "source_file": "backend/app/main.py",
- "source_location": "L19",
- "community": 0,
- "norm_label": "health_check()",
- "id": "main_health_check"
- },
- {
- "label": "health_check_db()",
- "file_type": "code",
- "source_file": "backend/app/main.py",
- "source_location": "L24",
- "community": 0,
- "norm_label": "health_check_db()",
- "id": "main_health_check_db"
- },
- {
- "label": "config.py",
- "file_type": "code",
- "source_file": "backend/app/config.py",
- "source_location": "L1",
- "community": 20,
- "norm_label": "config.py",
- "id": "backend_app_config_py"
- },
- {
- "label": "Settings",
- "file_type": "code",
- "source_file": "backend/app/config.py",
- "source_location": "L6",
- "community": 20,
- "norm_label": "settings",
- "id": "config_settings"
- },
- {
- "label": "BaseSettings",
- "file_type": "code",
- "source_file": "",
- "source_location": "",
- "community": 20,
- "norm_label": "basesettings",
- "id": "basesettings"
- },
- {
- "label": "Config",
- "file_type": "code",
- "source_file": "backend/app/config.py",
- "source_location": "L41",
- "community": 20,
- "norm_label": "config",
- "id": "config_config"
- },
- {
- "label": "_require_database_url()",
- "file_type": "code",
- "source_file": "backend/app/config.py",
- "source_location": "L45",
- "community": 20,
- "norm_label": "_require_database_url()",
- "id": "config_require_database_url"
- },
- {
- "label": "__init__.py",
- "file_type": "code",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L1",
- "community": 0,
- "norm_label": "__init__.py",
- "id": "backend_app_models_init_py"
- },
- {
- "label": "DayOfWeek",
- "file_type": "code",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L13",
- "community": 0,
- "norm_label": "dayofweek",
- "id": "init_dayofweek"
- },
- {
- "label": "MealType",
- "file_type": "code",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L23",
- "community": 0,
- "norm_label": "mealtype",
- "id": "init_mealtype"
- },
- {
- "label": "MealPlanStatus",
- "file_type": "code",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L29",
- "community": 0,
- "norm_label": "mealplanstatus",
- "id": "init_mealplanstatus"
- },
- {
- "label": "MealPlanItemStatus",
- "file_type": "code",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L36",
- "community": 0,
- "norm_label": "mealplanitemstatus",
- "id": "init_mealplanitemstatus"
- },
- {
- "label": "str",
- "file_type": "code",
- "source_file": "",
- "source_location": "",
- "community": 0,
- "norm_label": "str",
- "id": "str"
- },
- {
- "label": "ApprovalTokenStatus",
- "file_type": "code",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L43",
- "community": 0,
- "norm_label": "approvaltokenstatus",
- "id": "init_approvaltokenstatus"
- },
- {
- "label": "FamilyMemberRole",
- "file_type": "code",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L49",
- "community": 0,
- "norm_label": "familymemberrole",
- "id": "init_familymemberrole"
- },
- {
- "label": "DenialReason",
- "file_type": "code",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L54",
- "community": 0,
- "norm_label": "denialreason",
- "id": "init_denialreason"
- },
- {
- "label": "NeverSuggestReason",
- "file_type": "code",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L62",
- "community": 0,
- "norm_label": "neversuggestreason",
- "id": "init_neversuggestreason"
- },
- {
- "label": "ScrapeStatus",
- "file_type": "code",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L69",
- "community": 0,
- "norm_label": "scrapestatus",
- "id": "init_scrapestatus"
- },
- {
- "label": "EmailStatus",
- "file_type": "code",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L75",
- "community": 0,
- "norm_label": "emailstatus",
- "id": "init_emailstatus"
- },
- {
- "label": "IngredientMatchSource",
- "file_type": "code",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L82",
- "community": 0,
- "norm_label": "ingredientmatchsource",
- "id": "init_ingredientmatchsource"
- },
- {
- "label": "FamilyProfile",
- "file_type": "code",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L88",
- "community": 0,
- "norm_label": "familyprofile",
- "id": "init_familyprofile"
- },
- {
- "label": "Base",
- "file_type": "code",
- "source_file": "",
- "source_location": "",
- "community": 0,
- "norm_label": "base",
- "id": "base"
- },
- {
- "label": "FamilyMember",
- "file_type": "code",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L120",
- "community": 0,
- "norm_label": "familymember",
- "id": "init_familymember"
- },
- {
- "label": "Ingredient",
- "file_type": "code",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L141",
- "community": 0,
- "norm_label": "ingredient",
- "id": "init_ingredient"
- },
- {
- "label": "Recipe",
- "file_type": "code",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L161",
- "community": 0,
- "norm_label": "recipe",
- "id": "init_recipe"
- },
- {
- "label": "total_time_minutes()",
- "file_type": "code",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L191",
- "community": 0,
- "norm_label": "total_time_minutes()",
- "id": "init_total_time_minutes"
- },
- {
- "label": "MealPlan",
- "file_type": "code",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L195",
- "community": 0,
- "norm_label": "mealplan",
- "id": "init_mealplan"
- },
- {
- "label": "MealPlanItem",
- "file_type": "code",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L216",
- "community": 0,
- "norm_label": "mealplanitem",
- "id": "init_mealplanitem"
- },
- {
- "label": "MealPlanVote",
- "file_type": "code",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L243",
- "community": 5,
- "norm_label": "mealplanvote",
- "id": "init_mealplanvote"
- },
- {
- "label": "ApprovalToken",
- "file_type": "code",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L260",
- "community": 0,
- "norm_label": "approvaltoken",
- "id": "init_approvaltoken"
- },
- {
- "label": "HomePantry",
- "file_type": "code",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L280",
- "community": 0,
- "norm_label": "homepantry",
- "id": "init_homepantry"
- },
- {
- "label": "Feedback",
- "file_type": "code",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L300",
- "community": 0,
- "norm_label": "feedback",
- "id": "init_feedback"
- },
- {
- "label": "NeverSuggest",
- "file_type": "code",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L322",
- "community": 0,
- "norm_label": "neversuggest",
- "id": "init_neversuggest"
- },
- {
- "label": "GroceryItem",
- "file_type": "code",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L337",
- "community": 0,
- "norm_label": "groceryitem",
- "id": "init_groceryitem"
- },
- {
- "label": "ScrapeLog",
- "file_type": "code",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L364",
- "community": 0,
- "norm_label": "scrapelog",
- "id": "init_scrapelog"
- },
- {
- "label": "EmailLog",
- "file_type": "code",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L378",
- "community": 0,
- "norm_label": "emaillog",
- "id": "init_emaillog"
- },
- {
- "label": "IngredientGroceryMatch",
- "file_type": "code",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L397",
- "community": 0,
- "norm_label": "ingredientgrocerymatch",
- "id": "init_ingredientgrocerymatch"
- },
- {
- "label": "WeeklyRun",
- "file_type": "code",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L415",
- "community": 5,
- "norm_label": "weeklyrun",
- "id": "init_weeklyrun"
- },
- {
- "label": "__init__.py",
- "file_type": "code",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L1",
- "community": 2,
- "norm_label": "__init__.py",
- "id": "backend_app_schemas_init_py"
- },
- {
- "label": "Enum",
- "file_type": "code",
- "source_file": "",
- "source_location": "",
- "community": 0,
- "norm_label": "enum",
- "id": "enum"
- },
- {
- "label": "IngredientBase",
- "file_type": "code",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L48",
- "community": 2,
- "norm_label": "ingredientbase",
- "id": "init_ingredientbase"
- },
- {
- "label": "BaseModel",
- "file_type": "code",
- "source_file": "",
- "source_location": "",
- "community": 2,
- "norm_label": "basemodel",
- "id": "basemodel"
- },
- {
- "label": "IngredientResponse",
- "file_type": "code",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L58",
- "community": 2,
- "norm_label": "ingredientresponse",
- "id": "init_ingredientresponse"
- },
- {
- "label": "Config",
- "file_type": "code",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L62",
- "community": 2,
- "norm_label": "config",
- "id": "init_config"
- },
- {
- "label": "IngredientCreate",
- "file_type": "code",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L66",
- "community": 2,
- "norm_label": "ingredientcreate",
- "id": "init_ingredientcreate"
- },
- {
- "label": "FamilyMemberBase",
- "file_type": "code",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L70",
- "community": 2,
- "norm_label": "familymemberbase",
- "id": "init_familymemberbase"
- },
- {
- "label": "FamilyMemberResponse",
- "file_type": "code",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L77",
- "community": 2,
- "norm_label": "familymemberresponse",
- "id": "init_familymemberresponse"
- },
- {
- "label": "FamilyMemberCreate",
- "file_type": "code",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L87",
- "community": 2,
- "norm_label": "familymembercreate",
- "id": "init_familymembercreate"
- },
- {
- "label": "FamilyProfileBase",
- "file_type": "code",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L91",
- "community": 2,
- "norm_label": "familyprofilebase",
- "id": "init_familyprofilebase"
- },
- {
- "label": "FamilyProfileResponse",
- "file_type": "code",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L100",
- "community": 2,
- "norm_label": "familyprofileresponse",
- "id": "init_familyprofileresponse"
- },
- {
- "label": "FamilyProfileCreate",
- "file_type": "code",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L110",
- "community": 2,
- "norm_label": "familyprofilecreate",
- "id": "init_familyprofilecreate"
- },
- {
- "label": "FamilyProfileUpdate",
- "file_type": "code",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L114",
- "community": 2,
- "norm_label": "familyprofileupdate",
- "id": "init_familyprofileupdate"
- },
- {
- "label": "RecipeIngredient",
- "file_type": "code",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L123",
- "community": 2,
- "norm_label": "recipeingredient",
- "id": "init_recipeingredient"
- },
- {
- "label": "_normalize()",
- "file_type": "code",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L133",
- "community": 2,
- "norm_label": "_normalize()",
- "id": "init_normalize"
- },
- {
- "label": "RecipeBase",
- "file_type": "code",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L142",
- "community": 2,
- "norm_label": "recipebase",
- "id": "init_recipebase"
- },
- {
- "label": "RecipeResponse",
- "file_type": "code",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L161",
- "community": 2,
- "norm_label": "reciperesponse",
- "id": "init_reciperesponse"
- },
- {
- "label": "RecipeCreate",
- "file_type": "code",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L173",
- "community": 2,
- "norm_label": "recipecreate",
- "id": "init_recipecreate"
- },
- {
- "label": "MealPlanItemBase",
- "file_type": "code",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L177",
- "community": 2,
- "norm_label": "mealplanitembase",
- "id": "init_mealplanitembase"
- },
- {
- "label": "MealPlanItemResponse",
- "file_type": "code",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L184",
- "community": 2,
- "norm_label": "mealplanitemresponse",
- "id": "init_mealplanitemresponse"
- },
- {
- "label": "MealPlanItemCreate",
- "file_type": "code",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L199",
- "community": 2,
- "norm_label": "mealplanitemcreate",
- "id": "init_mealplanitemcreate"
- },
- {
- "label": "MealPlanBase",
- "file_type": "code",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L203",
- "community": 2,
- "norm_label": "mealplanbase",
- "id": "init_mealplanbase"
- },
- {
- "label": "MealPlanResponse",
- "file_type": "code",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L210",
- "community": 2,
- "norm_label": "mealplanresponse",
- "id": "init_mealplanresponse"
- },
- {
- "label": "MealPlanCreate",
- "file_type": "code",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L222",
- "community": 2,
- "norm_label": "mealplancreate",
- "id": "init_mealplancreate"
- },
- {
- "label": "VoteRequest",
- "file_type": "code",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L226",
- "community": 2,
- "norm_label": "voterequest",
- "id": "init_voterequest"
- },
- {
- "label": "VoteResponse",
- "file_type": "code",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L232",
- "community": 2,
- "norm_label": "voteresponse",
- "id": "init_voteresponse"
- },
- {
- "label": "HomePantryBase",
- "file_type": "code",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L243",
- "community": 2,
- "norm_label": "homepantrybase",
- "id": "init_homepantrybase"
- },
- {
- "label": "HomePantryResponse",
- "file_type": "code",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L250",
- "community": 2,
- "norm_label": "homepantryresponse",
- "id": "init_homepantryresponse"
- },
- {
- "label": "HomePantryCreate",
- "file_type": "code",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L261",
- "community": 2,
- "norm_label": "homepantrycreate",
- "id": "init_homepantrycreate"
- },
- {
- "label": "FeedbackBase",
- "file_type": "code",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L265",
- "community": 2,
- "norm_label": "feedbackbase",
- "id": "init_feedbackbase"
- },
- {
- "label": "FeedbackResponse",
- "file_type": "code",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L272",
- "community": 2,
- "norm_label": "feedbackresponse",
- "id": "init_feedbackresponse"
- },
- {
- "label": "FeedbackCreate",
- "file_type": "code",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L283",
- "community": 2,
- "norm_label": "feedbackcreate",
- "id": "init_feedbackcreate"
- },
- {
- "label": "ShoppingListItem",
- "file_type": "code",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L287",
- "community": 2,
- "norm_label": "shoppinglistitem",
- "id": "init_shoppinglistitem"
- },
- {
- "label": "ShoppingListResponse",
- "file_type": "code",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L300",
- "community": 2,
- "norm_label": "shoppinglistresponse",
- "id": "init_shoppinglistresponse"
- },
- {
- "label": "ingredient.py",
- "file_type": "code",
- "source_file": "backend/app/schemas/ingredient.py",
- "source_location": "L1",
- "community": 2,
- "norm_label": "ingredient.py",
- "id": "backend_app_schemas_ingredient_py"
- },
- {
- "label": "IngredientBase",
- "file_type": "code",
- "source_file": "backend/app/schemas/ingredient.py",
- "source_location": "L10",
- "community": 2,
- "norm_label": "ingredientbase",
- "id": "ingredient_ingredientbase"
- },
- {
- "label": "_strip_and_drop_empty()",
- "file_type": "code",
- "source_file": "backend/app/schemas/ingredient.py",
- "source_location": "L19",
- "community": 2,
- "norm_label": "_strip_and_drop_empty()",
- "id": "ingredient_strip_and_drop_empty"
- },
- {
- "label": "IngredientCreate",
- "file_type": "code",
- "source_file": "backend/app/schemas/ingredient.py",
- "source_location": "L23",
- "community": 2,
- "norm_label": "ingredientcreate",
- "id": "ingredient_ingredientcreate"
- },
- {
- "label": "IngredientUpdate",
- "file_type": "code",
- "source_file": "backend/app/schemas/ingredient.py",
- "source_location": "L27",
- "community": 2,
- "norm_label": "ingredientupdate",
- "id": "ingredient_ingredientupdate"
- },
- {
- "label": "IngredientRead",
- "file_type": "code",
- "source_file": "backend/app/schemas/ingredient.py",
- "source_location": "L42",
- "community": 2,
- "norm_label": "ingredientread",
- "id": "ingredient_ingredientread"
- },
- {
- "label": "IngredientGroceryMatchRead",
- "file_type": "code",
- "source_file": "backend/app/schemas/ingredient.py",
- "source_location": "L48",
- "community": 2,
- "norm_label": "ingredientgrocerymatchread",
- "id": "ingredient_ingredientgrocerymatchread"
- },
- {
- "label": "recipe.py",
- "file_type": "code",
- "source_file": "backend/app/schemas/recipe.py",
- "source_location": "L1",
- "community": 2,
- "norm_label": "recipe.py",
- "id": "backend_app_schemas_recipe_py"
- },
- {
- "label": "RecipeIngredientRef",
- "file_type": "code",
- "source_file": "backend/app/schemas/recipe.py",
- "source_location": "L10",
- "community": 2,
- "norm_label": "recipeingredientref",
- "id": "recipe_recipeingredientref"
- },
- {
- "label": "RecipeBase",
- "file_type": "code",
- "source_file": "backend/app/schemas/recipe.py",
- "source_location": "L17",
- "community": 2,
- "norm_label": "recipebase",
- "id": "recipe_recipebase"
- },
- {
- "label": "RecipeCreate",
- "file_type": "code",
- "source_file": "backend/app/schemas/recipe.py",
- "source_location": "L34",
- "community": 2,
- "norm_label": "recipecreate",
- "id": "recipe_recipecreate"
- },
- {
- "label": "RecipeUpdate",
- "file_type": "code",
- "source_file": "backend/app/schemas/recipe.py",
- "source_location": "L38",
- "community": 2,
- "norm_label": "recipeupdate",
- "id": "recipe_recipeupdate"
- },
- {
- "label": "RecipeRead",
- "file_type": "code",
- "source_file": "backend/app/schemas/recipe.py",
- "source_location": "L54",
- "community": 2,
- "norm_label": "reciperead",
- "id": "recipe_reciperead"
- },
- {
- "label": "ResolveIngredientRequest",
- "file_type": "code",
- "source_file": "backend/app/schemas/recipe.py",
- "source_location": "L60",
- "community": 2,
- "norm_label": "resolveingredientrequest",
- "id": "recipe_resolveingredientrequest"
- },
- {
- "label": "ResolveIngredientCandidate",
- "file_type": "code",
- "source_file": "backend/app/schemas/recipe.py",
- "source_location": "L64",
- "community": 2,
- "norm_label": "resolveingredientcandidate",
- "id": "recipe_resolveingredientcandidate"
- },
- {
- "label": "ResolveIngredientResponse",
- "file_type": "code",
- "source_file": "backend/app/schemas/recipe.py",
- "source_location": "L71",
- "community": 2,
- "norm_label": "resolveingredientresponse",
- "id": "recipe_resolveingredientresponse"
- },
- {
- "label": "never_suggest.py",
- "file_type": "code",
- "source_file": "backend/app/schemas/never_suggest.py",
- "source_location": "L1",
- "community": 2,
- "norm_label": "never_suggest.py",
- "id": "backend_app_schemas_never_suggest_py"
- },
- {
- "label": "NeverSuggestCreate",
- "file_type": "code",
- "source_file": "backend/app/schemas/never_suggest.py",
- "source_location": "L9",
- "community": 2,
- "norm_label": "neversuggestcreate",
- "id": "never_suggest_neversuggestcreate"
- },
- {
- "label": "_exactly_one_target()",
- "file_type": "code",
- "source_file": "backend/app/schemas/never_suggest.py",
- "source_location": "L17",
- "community": 2,
- "norm_label": "_exactly_one_target()",
- "id": "never_suggest_exactly_one_target"
- },
- {
- "label": "NeverSuggestRead",
- "file_type": "code",
- "source_file": "backend/app/schemas/never_suggest.py",
- "source_location": "L24",
- "community": 2,
- "norm_label": "neversuggestread",
- "id": "never_suggest_neversuggestread"
- },
- {
- "label": "meal_plan_generation.py",
- "file_type": "code",
- "source_file": "backend/app/schemas/meal_plan_generation.py",
- "source_location": "L1",
- "community": 2,
- "norm_label": "meal_plan_generation.py",
- "id": "backend_app_schemas_meal_plan_generation_py"
- },
- {
- "label": "GenerateRequest",
- "file_type": "code",
- "source_file": "backend/app/schemas/meal_plan_generation.py",
- "source_location": "L11",
- "community": 2,
- "norm_label": "generaterequest",
- "id": "meal_plan_generation_generaterequest"
- },
- {
- "label": "RegenerateRequest",
- "file_type": "code",
- "source_file": "backend/app/schemas/meal_plan_generation.py",
- "source_location": "L16",
- "community": 2,
- "norm_label": "regeneraterequest",
- "id": "meal_plan_generation_regeneraterequest"
- },
- {
- "label": "GenerationItem",
- "file_type": "code",
- "source_file": "backend/app/schemas/meal_plan_generation.py",
- "source_location": "L25",
- "community": 2,
- "norm_label": "generationitem",
- "id": "meal_plan_generation_generationitem"
- },
- {
- "label": "GenerationDebug",
- "file_type": "code",
- "source_file": "backend/app/schemas/meal_plan_generation.py",
- "source_location": "L33",
- "community": 2,
- "norm_label": "generationdebug",
- "id": "meal_plan_generation_generationdebug"
- },
- {
- "label": "GenerationResponse",
- "file_type": "code",
- "source_file": "backend/app/schemas/meal_plan_generation.py",
- "source_location": "L39",
- "community": 2,
- "norm_label": "generationresponse",
- "id": "meal_plan_generation_generationresponse"
- },
- {
- "label": "profile.py",
- "file_type": "code",
- "source_file": "backend/app/api/profile.py",
- "source_location": "L1",
- "community": 0,
- "norm_label": "profile.py",
- "id": "backend_app_api_profile_py"
- },
- {
- "label": "get_profile()",
- "file_type": "code",
- "source_file": "backend/app/api/profile.py",
- "source_location": "L17",
- "community": 0,
- "norm_label": "get_profile()",
- "id": "profile_get_profile"
- },
- {
- "label": "update_profile()",
- "file_type": "code",
- "source_file": "backend/app/api/profile.py",
- "source_location": "L25",
- "community": 0,
- "norm_label": "update_profile()",
- "id": "profile_update_profile"
- },
- {
- "label": "get_members()",
- "file_type": "code",
- "source_file": "backend/app/api/profile.py",
- "source_location": "L40",
- "community": 0,
- "norm_label": "get_members()",
- "id": "profile_get_members"
- },
- {
- "label": "add_member()",
- "file_type": "code",
- "source_file": "backend/app/api/profile.py",
- "source_location": "L48",
- "community": 0,
- "norm_label": "add_member()",
- "id": "profile_add_member"
- },
- {
- "label": "delete_member()",
- "file_type": "code",
- "source_file": "backend/app/api/profile.py",
- "source_location": "L74",
- "community": 0,
- "norm_label": "delete_member()",
- "id": "profile_delete_member"
- },
- {
- "label": "pantry.py",
- "file_type": "code",
- "source_file": "backend/app/api/pantry.py",
- "source_location": "L1",
- "community": 0,
- "norm_label": "pantry.py",
- "id": "backend_app_api_pantry_py"
- },
- {
- "label": "get_pantry_items()",
- "file_type": "code",
- "source_file": "backend/app/api/pantry.py",
- "source_location": "L14",
- "community": 0,
- "norm_label": "get_pantry_items()",
- "id": "pantry_get_pantry_items"
- },
- {
- "label": "add_pantry_item()",
- "file_type": "code",
- "source_file": "backend/app/api/pantry.py",
- "source_location": "L26",
- "community": 0,
- "norm_label": "add_pantry_item()",
- "id": "pantry_add_pantry_item"
- },
- {
- "label": "remove_pantry_item()",
- "file_type": "code",
- "source_file": "backend/app/api/pantry.py",
- "source_location": "L59",
- "community": 0,
- "norm_label": "remove_pantry_item()",
- "id": "pantry_remove_pantry_item"
- },
- {
- "label": "update_pantry_item()",
- "file_type": "code",
- "source_file": "backend/app/api/pantry.py",
- "source_location": "L70",
- "community": 0,
- "norm_label": "update_pantry_item()",
- "id": "pantry_update_pantry_item"
- },
- {
- "label": "auth.py",
- "file_type": "code",
- "source_file": "backend/app/api/auth.py",
- "source_location": "L1",
- "community": 27,
- "norm_label": "auth.py",
- "id": "backend_app_api_auth_py"
- },
- {
- "label": "LoginRequest",
- "file_type": "code",
- "source_file": "backend/app/api/auth.py",
- "source_location": "L26",
- "community": 27,
- "norm_label": "loginrequest",
- "id": "auth_loginrequest"
- },
- {
- "label": "login()",
- "file_type": "code",
- "source_file": "backend/app/api/auth.py",
- "source_location": "L31",
- "community": 27,
- "norm_label": "login()",
- "id": "auth_login"
- },
- {
- "label": "logout()",
- "file_type": "code",
- "source_file": "backend/app/api/auth.py",
- "source_location": "L64",
- "community": 27,
- "norm_label": "logout()",
- "id": "auth_logout"
- },
- {
- "label": "Family-shared session login. POST /api/auth/login \u2014 body ``{\"password\": \"...\"}`",
- "file_type": "rationale",
- "source_file": "backend/app/api/auth.py",
- "source_location": "L1",
- "community": 27,
- "norm_label": "family-shared session login. post /api/auth/login \u2014 body ``{\"password\": \"...\"}`",
- "id": "auth_rationale_1"
- },
- {
- "label": "shopping_list.py",
- "file_type": "code",
- "source_file": "backend/app/api/shopping_list.py",
- "source_location": "L1",
- "community": 2,
- "norm_label": "shopping_list.py",
- "id": "backend_app_api_shopping_list_py"
- },
- {
- "label": "_parse_uuid()",
- "file_type": "code",
- "source_file": "backend/app/api/shopping_list.py",
- "source_location": "L18",
- "community": 2,
- "norm_label": "_parse_uuid()",
- "id": "shopping_list_parse_uuid"
- },
- {
- "label": "get_shopping_list()",
- "file_type": "code",
- "source_file": "backend/app/api/shopping_list.py",
- "source_location": "L28",
- "community": 2,
- "norm_label": "get_shopping_list()",
- "id": "shopping_list_get_shopping_list"
- },
- {
- "label": "print_shopping_list()",
- "file_type": "code",
- "source_file": "backend/app/api/shopping_list.py",
- "source_location": "L155",
- "community": 2,
- "norm_label": "print_shopping_list()",
- "id": "shopping_list_print_shopping_list"
- },
- {
- "label": "recipes.py",
- "file_type": "code",
- "source_file": "backend/app/api/recipes.py",
- "source_location": "L1",
- "community": 2,
- "norm_label": "recipes.py",
- "id": "backend_app_api_recipes_py"
- },
- {
- "label": "_validate_ingredient_ids()",
- "file_type": "code",
- "source_file": "backend/app/api/recipes.py",
- "source_location": "L32",
- "community": 2,
- "norm_label": "_validate_ingredient_ids()",
- "id": "recipes_validate_ingredient_ids"
- },
- {
- "label": "_serialize()",
- "file_type": "code",
- "source_file": "backend/app/api/recipes.py",
- "source_location": "L46",
- "community": 2,
- "norm_label": "_serialize()",
- "id": "recipes_serialize"
- },
- {
- "label": "list_recipes()",
- "file_type": "code",
- "source_file": "backend/app/api/recipes.py",
- "source_location": "L67",
- "community": 2,
- "norm_label": "list_recipes()",
- "id": "recipes_list_recipes"
- },
- {
- "label": "get_recipe()",
- "file_type": "code",
- "source_file": "backend/app/api/recipes.py",
- "source_location": "L81",
- "community": 2,
- "norm_label": "get_recipe()",
- "id": "recipes_get_recipe"
- },
- {
- "label": "create_recipe()",
- "file_type": "code",
- "source_file": "backend/app/api/recipes.py",
- "source_location": "L89",
- "community": 2,
- "norm_label": "create_recipe()",
- "id": "recipes_create_recipe"
- },
- {
- "label": "update_recipe()",
- "file_type": "code",
- "source_file": "backend/app/api/recipes.py",
- "source_location": "L115",
- "community": 2,
- "norm_label": "update_recipe()",
- "id": "recipes_update_recipe"
- },
- {
- "label": "delete_recipe()",
- "file_type": "code",
- "source_file": "backend/app/api/recipes.py",
- "source_location": "L132",
- "community": 2,
- "norm_label": "delete_recipe()",
- "id": "recipes_delete_recipe"
- },
- {
- "label": "_parse_qty_unit()",
- "file_type": "code",
- "source_file": "backend/app/api/recipes.py",
- "source_location": "L152",
- "community": 2,
- "norm_label": "_parse_qty_unit()",
- "id": "recipes_parse_qty_unit"
- },
- {
- "label": "resolve_ingredient()",
- "file_type": "code",
- "source_file": "backend/app/api/recipes.py",
- "source_location": "L171",
- "community": 2,
- "norm_label": "resolve_ingredient()",
- "id": "recipes_resolve_ingredient"
- },
- {
- "label": "ingredients.py",
- "file_type": "code",
- "source_file": "backend/app/api/ingredients.py",
- "source_location": "L1",
- "community": 0,
- "norm_label": "ingredients.py",
- "id": "backend_app_api_ingredients_py"
- },
- {
- "label": "list_ingredients()",
- "file_type": "code",
- "source_file": "backend/app/api/ingredients.py",
- "source_location": "L33",
- "community": 0,
- "norm_label": "list_ingredients()",
- "id": "ingredients_list_ingredients"
- },
- {
- "label": "get_ingredient()",
- "file_type": "code",
- "source_file": "backend/app/api/ingredients.py",
- "source_location": "L51",
- "community": 0,
- "norm_label": "get_ingredient()",
- "id": "ingredients_get_ingredient"
- },
- {
- "label": "create_ingredient()",
- "file_type": "code",
- "source_file": "backend/app/api/ingredients.py",
- "source_location": "L59",
- "community": 0,
- "norm_label": "create_ingredient()",
- "id": "ingredients_create_ingredient"
- },
- {
- "label": "update_ingredient()",
- "file_type": "code",
- "source_file": "backend/app/api/ingredients.py",
- "source_location": "L79",
- "community": 0,
- "norm_label": "update_ingredient()",
- "id": "ingredients_update_ingredient"
- },
- {
- "label": "delete_ingredient()",
- "file_type": "code",
- "source_file": "backend/app/api/ingredients.py",
- "source_location": "L108",
- "community": 0,
- "norm_label": "delete_ingredient()",
- "id": "ingredients_delete_ingredient"
- },
- {
- "label": "_PinMatchBody",
- "file_type": "code",
- "source_file": "backend/app/api/ingredients.py",
- "source_location": "L117",
- "community": 2,
- "norm_label": "_pinmatchbody",
- "id": "ingredients_pinmatchbody"
- },
- {
- "label": "pin_match()",
- "file_type": "code",
- "source_file": "backend/app/api/ingredients.py",
- "source_location": "L127",
- "community": 0,
- "norm_label": "pin_match()",
- "id": "ingredients_pin_match"
- },
- {
- "label": "unpin_match()",
- "file_type": "code",
- "source_file": "backend/app/api/ingredients.py",
- "source_location": "L170",
- "community": 0,
- "norm_label": "unpin_match()",
- "id": "ingredients_unpin_match"
- },
- {
- "label": "never_suggest.py",
- "file_type": "code",
- "source_file": "backend/app/api/never_suggest.py",
- "source_location": "L1",
- "community": 0,
- "norm_label": "never_suggest.py",
- "id": "backend_app_api_never_suggest_py"
- },
- {
- "label": "_coerce_reason()",
- "file_type": "code",
- "source_file": "backend/app/api/never_suggest.py",
- "source_location": "L23",
- "community": 0,
- "norm_label": "_coerce_reason()",
- "id": "never_suggest_coerce_reason"
- },
- {
- "label": "list_for_family()",
- "file_type": "code",
- "source_file": "backend/app/api/never_suggest.py",
- "source_location": "L33",
- "community": 0,
- "norm_label": "list_for_family()",
- "id": "never_suggest_list_for_family"
- },
- {
- "label": "block()",
- "file_type": "code",
- "source_file": "backend/app/api/never_suggest.py",
- "source_location": "L45",
- "community": 0,
- "norm_label": "block()",
- "id": "never_suggest_block"
- },
- {
- "label": "unblock()",
- "file_type": "code",
- "source_file": "backend/app/api/never_suggest.py",
- "source_location": "L64",
- "community": 0,
- "norm_label": "unblock()",
- "id": "never_suggest_unblock"
- },
- {
- "label": "meal_plans.py",
- "file_type": "code",
- "source_file": "backend/app/api/meal_plans.py",
- "source_location": "L1",
- "community": 2,
- "norm_label": "meal_plans.py",
- "id": "backend_app_api_meal_plans_py"
- },
- {
- "label": "_to_response()",
- "file_type": "code",
- "source_file": "backend/app/api/meal_plans.py",
- "source_location": "L33",
- "community": 2,
- "norm_label": "_to_response()",
- "id": "meal_plans_to_response"
- },
- {
- "label": "generate()",
- "file_type": "code",
- "source_file": "backend/app/api/meal_plans.py",
- "source_location": "L60",
- "community": 2,
- "norm_label": "generate()",
- "id": "meal_plans_generate"
- },
- {
- "label": "regenerate()",
- "file_type": "code",
- "source_file": "backend/app/api/meal_plans.py",
- "source_location": "L82",
- "community": 2,
- "norm_label": "regenerate()",
- "id": "meal_plans_regenerate"
- },
- {
- "label": "get_plan()",
- "file_type": "code",
- "source_file": "backend/app/api/meal_plans.py",
- "source_location": "L120",
- "community": 2,
- "norm_label": "get_plan()",
- "id": "meal_plans_get_plan"
- },
- {
- "label": "admin.py",
- "file_type": "code",
- "source_file": "backend/app/api/admin.py",
- "source_location": "L1",
- "community": 0,
- "norm_label": "admin.py",
- "id": "backend_app_api_admin_py"
- },
- {
- "label": "trigger_scrape()",
- "file_type": "code",
- "source_file": "backend/app/api/admin.py",
- "source_location": "L14",
- "community": 0,
- "norm_label": "trigger_scrape()",
- "id": "admin_trigger_scrape"
- },
- {
- "label": "get_logs()",
- "file_type": "code",
- "source_file": "backend/app/api/admin.py",
- "source_location": "L30",
- "community": 0,
- "norm_label": "get_logs()",
- "id": "admin_get_logs"
- },
- {
- "label": "get_log()",
- "file_type": "code",
- "source_file": "backend/app/api/admin.py",
- "source_location": "L60",
- "community": 0,
- "norm_label": "get_log()",
- "id": "admin_get_log"
- },
- {
- "label": "get_email_logs()",
- "file_type": "code",
- "source_file": "backend/app/api/admin.py",
- "source_location": "L78",
- "community": 0,
- "norm_label": "get_email_logs()",
- "id": "admin_get_email_logs"
- },
- {
- "label": "get_all_meal_plans()",
- "file_type": "code",
- "source_file": "backend/app/api/admin.py",
- "source_location": "L107",
- "community": 0,
- "norm_label": "get_all_meal_plans()",
- "id": "admin_get_all_meal_plans"
- },
- {
- "label": "test_email()",
- "file_type": "code",
- "source_file": "backend/app/api/admin.py",
- "source_location": "L134",
- "community": 0,
- "norm_label": "test_email()",
- "id": "admin_test_email"
- },
- {
- "label": "get_stats()",
- "file_type": "code",
- "source_file": "backend/app/api/admin.py",
- "source_location": "L171",
- "community": 0,
- "norm_label": "get_stats()",
- "id": "admin_get_stats"
- },
- {
- "label": "feedback.py",
- "file_type": "code",
- "source_file": "backend/app/api/feedback.py",
- "source_location": "L1",
- "community": 0,
- "norm_label": "feedback.py",
- "id": "backend_app_api_feedback_py"
- },
- {
- "label": "get_feedback()",
- "file_type": "code",
- "source_file": "backend/app/api/feedback.py",
- "source_location": "L17",
- "community": 0,
- "norm_label": "get_feedback()",
- "id": "feedback_get_feedback"
- },
- {
- "label": "create_feedback()",
- "file_type": "code",
- "source_file": "backend/app/api/feedback.py",
- "source_location": "L39",
- "community": 0,
- "norm_label": "create_feedback()",
- "id": "feedback_create_feedback"
- },
- {
- "label": "Get existing feedback for a meal plan item.",
- "file_type": "rationale",
- "source_file": "backend/app/api/feedback.py",
- "source_location": "L22",
- "community": 0,
- "norm_label": "get existing feedback for a meal plan item.",
- "id": "feedback_rationale_22"
- },
- {
- "label": "Create or update feedback for a meal plan item.",
- "file_type": "rationale",
- "source_file": "backend/app/api/feedback.py",
- "source_location": "L44",
- "community": 0,
- "norm_label": "create or update feedback for a meal plan item.",
- "id": "feedback_rationale_44"
- },
- {
- "label": "meals.py",
- "file_type": "code",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L1",
- "community": 10,
- "norm_label": "meals.py",
- "id": "backend_app_api_meals_py"
- },
- {
- "label": "get_planned_meals()",
- "file_type": "code",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L30",
- "community": 10,
- "norm_label": "get_planned_meals()",
- "id": "meals_get_planned_meals"
- },
- {
- "label": "create_meal_plan()",
- "file_type": "code",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L46",
- "community": 0,
- "norm_label": "create_meal_plan()",
- "id": "meals_create_meal_plan"
- },
- {
- "label": "get_meal_plan()",
- "file_type": "code",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L85",
- "community": 10,
- "norm_label": "get_meal_plan()",
- "id": "meals_get_meal_plan"
- },
- {
- "label": "lock_meal_plan()",
- "file_type": "code",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L93",
- "community": 10,
- "norm_label": "lock_meal_plan()",
- "id": "meals_lock_meal_plan"
- },
- {
- "label": "VoteSubmission",
- "file_type": "code",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L109",
- "community": 10,
- "norm_label": "votesubmission",
- "id": "meals_votesubmission"
- },
- {
- "label": "get_vote_page()",
- "file_type": "code",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L119",
- "community": 10,
- "norm_label": "get_vote_page()",
- "id": "meals_get_vote_page"
- },
- {
- "label": "submit_vote()",
- "file_type": "code",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L251",
- "community": 10,
- "norm_label": "submit_vote()",
- "id": "meals_submit_vote"
- },
- {
- "label": "get_meal_item()",
- "file_type": "code",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L301",
- "community": 10,
- "norm_label": "get_meal_item()",
- "id": "meals_get_meal_item"
- },
- {
- "label": "swap_meal_item()",
- "file_type": "code",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L323",
- "community": 10,
- "norm_label": "swap_meal_item()",
- "id": "meals_swap_meal_item"
- },
- {
- "label": "approve_meal_item()",
- "file_type": "code",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L342",
- "community": 10,
- "norm_label": "approve_meal_item()",
- "id": "meals_approve_meal_item"
- },
- {
- "label": "deny_meal_item()",
- "file_type": "code",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L353",
- "community": 10,
- "norm_label": "deny_meal_item()",
- "id": "meals_deny_meal_item"
- },
- {
- "label": "generate_single_item()",
- "file_type": "code",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L364",
- "community": 0,
- "norm_label": "generate_single_item()",
- "id": "meals_generate_single_item"
- },
- {
- "label": "move_meal_item()",
- "file_type": "code",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L413",
- "community": 10,
- "norm_label": "move_meal_item()",
- "id": "meals_move_meal_item"
- },
- {
- "label": "Body for POST /vote/{item_id}?token=... Spec body: {\"vote\": \"approve\" | \"de",
- "file_type": "rationale",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L110",
- "community": 10,
- "norm_label": "body for post /vote/{item_id}?token=... spec body: {\"vote\": \"approve\" | \"de",
- "id": "meals_rationale_110"
- },
- {
- "label": "Render the per-voter approval confirmation page. Verifies the signed token",
- "file_type": "rationale",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L124",
- "community": 10,
- "norm_label": "render the per-voter approval confirmation page. verifies the signed token",
- "id": "meals_rationale_124"
- },
- {
- "label": "Record a per-voter vote and apply the approval rule. - Single-use enforceme",
- "file_type": "rationale",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L257",
- "community": 10,
- "norm_label": "record a per-voter vote and apply the approval rule. - single-use enforceme",
- "id": "meals_rationale_257"
- },
- {
- "label": "Directly approve a meal plan item from the dashboard.",
- "file_type": "rationale",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L343",
- "community": 10,
- "norm_label": "directly approve a meal plan item from the dashboard.",
- "id": "meals_rationale_343"
- },
- {
- "label": "Directly deny a meal plan item from the dashboard.",
- "file_type": "rationale",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L354",
- "community": 10,
- "norm_label": "directly deny a meal plan item from the dashboard.",
- "id": "meals_rationale_354"
- },
- {
- "label": "Generate a single meal for an empty slot.",
- "file_type": "rationale",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L370",
- "community": 0,
- "norm_label": "generate a single meal for an empty slot.",
- "id": "meals_rationale_370"
- },
- {
- "label": "Move a meal to a new day/type slot. If the target slot is occupied by anoth",
- "file_type": "rationale",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L419",
- "community": 10,
- "norm_label": "move a meal to a new day/type slot. if the target slot is occupied by anoth",
- "id": "meals_rationale_419"
- },
- {
- "label": "orchestrate.py",
- "file_type": "code",
- "source_file": "backend/app/api/orchestrate.py",
- "source_location": "L1",
- "community": 0,
- "norm_label": "orchestrate.py",
- "id": "backend_app_api_orchestrate_py"
- },
- {
- "label": "orchestrate_status()",
- "file_type": "code",
- "source_file": "backend/app/api/orchestrate.py",
- "source_location": "L15",
- "community": 0,
- "norm_label": "orchestrate_status()",
- "id": "orchestrate_orchestrate_status"
- },
- {
- "label": "orchestrate_run_week()",
- "file_type": "code",
- "source_file": "backend/app/api/orchestrate.py",
- "source_location": "L41",
- "community": 0,
- "norm_label": "orchestrate_run_week()",
- "id": "orchestrate_orchestrate_run_week"
- },
- {
- "label": "orchestrate_step()",
- "file_type": "code",
- "source_file": "backend/app/api/orchestrate.py",
- "source_location": "L51",
- "community": 0,
- "norm_label": "orchestrate_step()",
- "id": "orchestrate_orchestrate_step"
- },
- {
- "label": "__init__.py",
- "file_type": "code",
- "source_file": "backend/app/services/__init__.py",
- "source_location": "L1",
- "community": 8,
- "norm_label": "__init__.py",
- "id": "backend_app_services_init_py"
- },
- {
- "label": "approval.py",
- "file_type": "code",
- "source_file": "backend/app/services/approval.py",
- "source_location": "L1",
- "community": 10,
- "norm_label": "approval.py",
- "id": "backend_app_services_approval_py"
- },
- {
- "label": "_serializer()",
- "file_type": "code",
- "source_file": "backend/app/services/approval.py",
- "source_location": "L33",
- "community": 10,
- "norm_label": "_serializer()",
- "id": "approval_serializer"
- },
- {
- "label": "issue_token()",
- "file_type": "code",
- "source_file": "backend/app/services/approval.py",
- "source_location": "L37",
- "community": 10,
- "norm_label": "issue_token()",
- "id": "approval_issue_token"
- },
- {
- "label": "verify_token()",
- "file_type": "code",
- "source_file": "backend/app/services/approval.py",
- "source_location": "L45",
- "community": 10,
- "norm_label": "verify_token()",
- "id": "approval_verify_token"
- },
- {
- "label": "consume_token()",
- "file_type": "code",
- "source_file": "backend/app/services/approval.py",
- "source_location": "L57",
- "community": 10,
- "norm_label": "consume_token()",
- "id": "approval_consume_token"
- },
- {
- "label": "Per-voter approval tokens. Stateless signed tokens (itsdangerous) keyed on sett",
- "file_type": "rationale",
- "source_file": "backend/app/services/approval.py",
- "source_location": "L1",
- "community": 10,
- "norm_label": "per-voter approval tokens. stateless signed tokens (itsdangerous) keyed on sett",
- "id": "approval_rationale_1"
- },
- {
- "label": "Verify + match URL + enforce single-use. Returns the voter on success. Sing",
- "file_type": "rationale",
- "source_file": "backend/app/services/approval.py",
- "source_location": "L63",
- "community": 10,
- "norm_label": "verify + match url + enforce single-use. returns the voter on success. sing",
- "id": "approval_rationale_63"
- },
- {
- "label": "swiftly_auth.py",
- "file_type": "code",
- "source_file": "backend/app/services/swiftly_auth.py",
- "source_location": "L1",
- "community": 4,
- "norm_label": "swiftly_auth.py",
- "id": "backend_app_services_swiftly_auth_py"
- },
- {
- "label": "SwiftlyAuthMintError",
- "file_type": "code",
- "source_file": "backend/app/services/swiftly_auth.py",
- "source_location": "L28",
- "community": 4,
- "norm_label": "swiftlyauthminterror",
- "id": "swiftly_auth_swiftlyauthminterror"
- },
- {
- "label": "Exception",
- "file_type": "code",
- "source_file": "",
- "source_location": "",
- "community": 4,
- "norm_label": "exception",
- "id": "exception"
- },
- {
- "label": "_reset_cache_for_tests()",
- "file_type": "code",
- "source_file": "backend/app/services/swiftly_auth.py",
- "source_location": "L51",
- "community": 4,
- "norm_label": "_reset_cache_for_tests()",
- "id": "swiftly_auth_reset_cache_for_tests"
- },
- {
- "label": "_decode_jwt_payload()",
- "file_type": "code",
- "source_file": "backend/app/services/swiftly_auth.py",
- "source_location": "L59",
- "community": 4,
- "norm_label": "_decode_jwt_payload()",
- "id": "swiftly_auth_decode_jwt_payload"
- },
- {
- "label": "_fetch_firebase_api_key()",
- "file_type": "code",
- "source_file": "backend/app/services/swiftly_auth.py",
- "source_location": "L72",
- "community": 4,
- "norm_label": "_fetch_firebase_api_key()",
- "id": "swiftly_auth_fetch_firebase_api_key"
- },
- {
- "label": "mint_anonymous_token()",
- "file_type": "code",
- "source_file": "backend/app/services/swiftly_auth.py",
- "source_location": "L105",
- "community": 4,
- "norm_label": "mint_anonymous_token()",
- "id": "swiftly_auth_mint_anonymous_token"
- },
- {
- "label": "get_token()",
- "file_type": "code",
- "source_file": "backend/app/services/swiftly_auth.py",
- "source_location": "L160",
- "community": 4,
- "norm_label": "get_token()",
- "id": "swiftly_auth_get_token"
- },
- {
- "label": "Swiftly bearer-JWT auto-mint via Firebase REST. Replaces the static ``SWIFTLY_B",
- "file_type": "rationale",
- "source_file": "backend/app/services/swiftly_auth.py",
- "source_location": "L1",
- "community": 4,
- "norm_label": "swiftly bearer-jwt auto-mint via firebase rest. replaces the static ``swiftly_b",
- "id": "swiftly_auth_rationale_1"
- },
- {
- "label": "Raised when minting a fresh Swiftly JWT fails. Surface the message verbatim",
- "file_type": "rationale",
- "source_file": "backend/app/services/swiftly_auth.py",
- "source_location": "L29",
- "community": 4,
- "norm_label": "raised when minting a fresh swiftly jwt fails. surface the message verbatim",
- "id": "swiftly_auth_rationale_29"
- },
- {
- "label": "Clear the process-local cache. Test-only helper.",
- "file_type": "rationale",
- "source_file": "backend/app/services/swiftly_auth.py",
- "source_location": "L52",
- "community": 4,
- "norm_label": "clear the process-local cache. test-only helper.",
- "id": "swiftly_auth_rationale_52"
- },
- {
- "label": "Mint a fresh anonymous Firebase ID token. Returns ``(token, exp_epoch_secon",
- "file_type": "rationale",
- "source_file": "backend/app/services/swiftly_auth.py",
- "source_location": "L106",
- "community": 4,
- "norm_label": "mint a fresh anonymous firebase id token. returns ``(token, exp_epoch_secon",
- "id": "swiftly_auth_rationale_106"
- },
- {
- "label": "Return a valid Swiftly bearer JWT, minting one if needed. A cached token is",
- "file_type": "rationale",
- "source_file": "backend/app/services/swiftly_auth.py",
- "source_location": "L161",
- "community": 4,
- "norm_label": "return a valid swiftly bearer jwt, minting one if needed. a cached token is",
- "id": "swiftly_auth_rationale_161"
- },
- {
- "label": "email.py",
- "file_type": "code",
- "source_file": "backend/app/services/email.py",
- "source_location": "L1",
- "community": 5,
- "norm_label": "email.py",
- "id": "backend_app_services_email_py"
- },
- {
- "label": "EmailBackend",
- "file_type": "code",
- "source_file": "backend/app/services/email.py",
- "source_location": "L29",
- "community": 5,
- "norm_label": "emailbackend",
- "id": "email_emailbackend"
- },
- {
- "label": "Protocol",
- "file_type": "code",
- "source_file": "",
- "source_location": "",
- "community": 5,
- "norm_label": "protocol",
- "id": "protocol"
- },
- {
- "label": ".send()",
- "file_type": "code",
- "source_file": "backend/app/services/email.py",
- "source_location": "L30",
- "community": 5,
- "norm_label": ".send()",
- "id": "email_emailbackend_send"
- },
- {
- "label": "ConsoleEmailBackend",
- "file_type": "code",
- "source_file": "backend/app/services/email.py",
- "source_location": "L40",
- "community": 5,
- "norm_label": "consoleemailbackend",
- "id": "email_consoleemailbackend"
- },
- {
- "label": ".send()",
- "file_type": "code",
- "source_file": "backend/app/services/email.py",
- "source_location": "L46",
- "community": 5,
- "norm_label": ".send()",
- "id": "email_consoleemailbackend_send"
- },
- {
- "label": "SendGridEmailBackend",
- "file_type": "code",
- "source_file": "backend/app/services/email.py",
- "source_location": "L70",
- "community": 5,
- "norm_label": "sendgridemailbackend",
- "id": "email_sendgridemailbackend"
- },
- {
- "label": ".__init__()",
- "file_type": "code",
- "source_file": "backend/app/services/email.py",
- "source_location": "L71",
- "community": 5,
- "norm_label": ".__init__()",
- "id": "email_sendgridemailbackend_init"
- },
- {
- "label": ".send()",
- "file_type": "code",
- "source_file": "backend/app/services/email.py",
- "source_location": "L76",
- "community": 5,
- "norm_label": ".send()",
- "id": "email_sendgridemailbackend_send"
- },
- {
- "label": "get_email_backend()",
- "file_type": "code",
- "source_file": "backend/app/services/email.py",
- "source_location": "L98",
- "community": 5,
- "norm_label": "get_email_backend()",
- "id": "email_get_email_backend"
- },
- {
- "label": "Email backends. R2-B spike: only ConsoleEmailBackend is functional. SendGrid is",
- "file_type": "rationale",
- "source_file": "backend/app/services/email.py",
- "source_location": "L1",
- "community": 5,
- "norm_label": "email backends. r2-b spike: only consoleemailbackend is functional. sendgrid is",
- "id": "email_rationale_1"
- },
- {
- "label": "Dev/spike backend. Prints to stdout AND appends a JSON line to backend/var/e",
- "file_type": "rationale",
- "source_file": "backend/app/services/email.py",
- "source_location": "L41",
- "community": 5,
- "norm_label": "dev/spike backend. prints to stdout and appends a json line to backend/var/e",
- "id": "email_rationale_41"
- },
- {
- "label": "matcher.py",
- "file_type": "code",
- "source_file": "backend/app/services/matcher.py",
- "source_location": "L1",
- "community": 24,
- "norm_label": "matcher.py",
- "id": "backend_app_services_matcher_py"
- },
- {
- "label": "_singularize()",
- "file_type": "code",
- "source_file": "backend/app/services/matcher.py",
- "source_location": "L42",
- "community": 24,
- "norm_label": "_singularize()",
- "id": "matcher_singularize"
- },
- {
- "label": "MatchResult",
- "file_type": "code",
- "source_file": "backend/app/services/matcher.py",
- "source_location": "L87",
- "community": 24,
- "norm_label": "matchresult",
- "id": "matcher_matchresult"
- },
- {
- "label": "_sig_words()",
- "file_type": "code",
- "source_file": "backend/app/services/matcher.py",
- "source_location": "L93",
- "community": 24,
- "norm_label": "_sig_words()",
- "id": "matcher_sig_words"
- },
- {
- "label": "run_match_job()",
- "file_type": "code",
- "source_file": "backend/app/services/matcher.py",
- "source_location": "L103",
- "community": 0,
- "norm_label": "run_match_job()",
- "id": "matcher_run_match_job"
- },
- {
- "label": "Fuzzy ingredient\u2192grocery_item matcher. Ingredient-centric: for each ingredient,",
- "file_type": "rationale",
- "source_file": "backend/app/services/matcher.py",
- "source_location": "L1",
- "community": 24,
- "norm_label": "fuzzy ingredient\u2192grocery_item matcher. ingredient-centric: for each ingredient,",
- "id": "matcher_rationale_1"
- },
- {
- "label": "Best-effort English singularization for grocery product names. Handles 'tor",
- "file_type": "rationale",
- "source_file": "backend/app/services/matcher.py",
- "source_location": "L43",
- "community": 24,
- "norm_label": "best-effort english singularization for grocery product names. handles 'tor",
- "id": "matcher_rationale_43"
- },
- {
- "label": "Lowercase alpha tokens >2 chars, stop-words removed, plurals normalized.",
- "file_type": "rationale",
- "source_file": "backend/app/services/matcher.py",
- "source_location": "L94",
- "community": 24,
- "norm_label": "lowercase alpha tokens >2 chars, stop-words removed, plurals normalized.",
- "id": "matcher_rationale_94"
- },
- {
- "label": "Refresh AUTO ingredient_grocery_match rows for grocery items from `source_filter",
- "file_type": "rationale",
- "source_file": "backend/app/services/matcher.py",
- "source_location": "L109",
- "community": 0,
- "norm_label": "refresh auto ingredient_grocery_match rows for grocery items from `source_filter",
- "id": "matcher_rationale_109"
- },
- {
- "label": "scraper_service.py",
- "file_type": "code",
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L1",
- "community": 0,
- "norm_label": "scraper_service.py",
- "id": "backend_app_services_scraper_service_py"
- },
- {
- "label": "enqueue_scrape()",
- "file_type": "code",
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L36",
- "community": 0,
- "norm_label": "enqueue_scrape()",
- "id": "scraper_service_enqueue_scrape"
- },
- {
- "label": "_run_scrape_in_background()",
- "file_type": "code",
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L65",
- "community": 4,
- "norm_label": "_run_scrape_in_background()",
- "id": "scraper_service_run_scrape_in_background"
- },
- {
- "label": "ScraperService",
- "file_type": "code",
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L123",
- "community": 0,
- "norm_label": "scraperservice",
- "id": "scraper_service_scraperservice"
- },
- {
- "label": ".__init__()",
- "file_type": "code",
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L124",
- "community": 0,
- "norm_label": ".__init__()",
- "id": "scraper_service_scraperservice_init"
- },
- {
- "label": ".run_scrape()",
- "file_type": "code",
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L127",
- "community": 0,
- "norm_label": ".run_scrape()",
- "id": "scraper_service_scraperservice_run_scrape"
- },
- {
- "label": "._do_scrape()",
- "file_type": "code",
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L180",
- "community": 4,
- "norm_label": "._do_scrape()",
- "id": "scraper_service_scraperservice_do_scrape"
- },
- {
- "label": "._save_grocery_item()",
- "file_type": "code",
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L200",
- "community": 0,
- "norm_label": "._save_grocery_item()",
- "id": "scraper_service_scraperservice_save_grocery_item"
- },
- {
- "label": ".get_sale_items()",
- "file_type": "code",
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L285",
- "community": 0,
- "norm_label": ".get_sale_items()",
- "id": "scraper_service_scraperservice_get_sale_items"
- },
- {
- "label": "Scraper service. Two entry points: - ``enqueue_scrape(db, source, scrape_type,",
- "file_type": "rationale",
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L1",
- "community": 0,
- "norm_label": "scraper service. two entry points: - ``enqueue_scrape(db, source, scrape_type,",
- "id": "scraper_service_rationale_1"
- },
- {
- "label": "Create the ScrapeLog row, commit, and schedule the background scrape. Retur",
- "file_type": "rationale",
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L43",
- "community": 0,
- "norm_label": "create the scrapelog row, commit, and schedule the background scrape. retur",
- "id": "scraper_service_rationale_43"
- },
- {
- "label": "Background entry point. Opens a fresh DB session \u2014 the request-scoped sessio",
- "file_type": "rationale",
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L68",
- "community": 4,
- "norm_label": "background entry point. opens a fresh db session \u2014 the request-scoped sessio",
- "id": "scraper_service_rationale_68"
- },
- {
- "label": "Synchronous end-to-end scrape (legacy path). Creates the log row, runs t",
- "file_type": "rationale",
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L130",
- "community": 0,
- "norm_label": "synchronous end-to-end scrape (legacy path). creates the log row, runs t",
- "id": "scraper_service_rationale_130"
- },
- {
- "label": "Run the scraper and persist items. Returns (saved, found). Raises any s",
- "file_type": "rationale",
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L181",
- "community": 4,
- "norm_label": "run the scraper and persist items. returns (saved, found). raises any s",
- "id": "scraper_service_rationale_181"
- },
- {
- "label": "llm_matcher.py",
- "file_type": "code",
- "source_file": "backend/app/services/llm_matcher.py",
- "source_location": "L1",
- "community": 24,
- "norm_label": "llm_matcher.py",
- "id": "backend_app_services_llm_matcher_py"
- },
- {
- "label": "_get_candidates()",
- "file_type": "code",
- "source_file": "backend/app/services/llm_matcher.py",
- "source_location": "L38",
- "community": 24,
- "norm_label": "_get_candidates()",
- "id": "llm_matcher_get_candidates"
- },
- {
- "label": "_get_unmatched_ingredients()",
- "file_type": "code",
- "source_file": "backend/app/services/llm_matcher.py",
- "source_location": "L86",
- "community": 24,
- "norm_label": "_get_unmatched_ingredients()",
- "id": "llm_matcher_get_unmatched_ingredients"
- },
- {
- "label": "_ask_ollama()",
- "file_type": "code",
- "source_file": "backend/app/services/llm_matcher.py",
- "source_location": "L97",
- "community": 24,
- "norm_label": "_ask_ollama()",
- "id": "llm_matcher_ask_ollama"
- },
- {
- "label": "run_llm_match_job()",
- "file_type": "code",
- "source_file": "backend/app/services/llm_matcher.py",
- "source_location": "L147",
- "community": 24,
- "norm_label": "run_llm_match_job()",
- "id": "llm_matcher_run_llm_match_job"
- },
- {
- "label": "LLM-powered second-pass ingredient\u2192grocery matcher. After the deterministic AUT",
- "file_type": "rationale",
- "source_file": "backend/app/services/llm_matcher.py",
- "source_location": "L1",
- "community": 24,
- "norm_label": "llm-powered second-pass ingredient\u2192grocery matcher. after the deterministic aut",
- "id": "llm_matcher_rationale_1"
- },
- {
- "label": "Return up to ``_CANDIDATE_LIMIT`` grocery items ranked by fuzzy\u00d7precision.",
- "file_type": "rationale",
- "source_file": "backend/app/services/llm_matcher.py",
- "source_location": "L42",
- "community": 24,
- "norm_label": "return up to ``_candidate_limit`` grocery items ranked by fuzzy\u00d7precision.",
- "id": "llm_matcher_rationale_42"
- },
- {
- "label": "Ingredients with no existing match in ingredient_grocery_match.",
- "file_type": "rationale",
- "source_file": "backend/app/services/llm_matcher.py",
- "source_location": "L87",
- "community": 24,
- "norm_label": "ingredients with no existing match in ingredient_grocery_match.",
- "id": "llm_matcher_rationale_87"
- },
- {
- "label": "Ask the LLM to pick the best grocery item for the ingredient. Returns the 0",
- "file_type": "rationale",
- "source_file": "backend/app/services/llm_matcher.py",
- "source_location": "L98",
- "community": 24,
- "norm_label": "ask the llm to pick the best grocery item for the ingredient. returns the 0",
- "id": "llm_matcher_rationale_98"
- },
- {
- "label": "LLM second pass: match remaining unmatched ingredients. For each ingredient",
- "file_type": "rationale",
- "source_file": "backend/app/services/llm_matcher.py",
- "source_location": "L152",
- "community": 24,
- "norm_label": "llm second pass: match remaining unmatched ingredients. for each ingredient",
- "id": "llm_matcher_rationale_152"
- },
- {
- "label": "__init__.py",
- "file_type": "code",
- "source_file": "backend/app/services/planner/__init__.py",
- "source_location": "L1",
- "community": 8,
- "norm_label": "__init__.py",
- "id": "backend_app_services_planner_init_py"
- },
- {
- "label": "config.py",
- "file_type": "code",
- "source_file": "backend/app/services/planner/config.py",
- "source_location": "L1",
- "community": 6,
- "norm_label": "config.py",
- "id": "backend_app_services_planner_config_py"
- },
- {
- "label": "PlannerConfig",
- "file_type": "code",
- "source_file": "backend/app/services/planner/config.py",
- "source_location": "L8",
- "community": 6,
- "norm_label": "plannerconfig",
- "id": "config_plannerconfig"
- },
- {
- "label": ".validate()",
- "file_type": "code",
- "source_file": "backend/app/services/planner/config.py",
- "source_location": "L35",
- "community": 6,
- "norm_label": ".validate()",
- "id": "config_plannerconfig_validate"
- },
- {
- "label": "Planner constants. Tune here without touching algorithm code.",
- "file_type": "rationale",
- "source_file": "backend/app/services/planner/config.py",
- "source_location": "L1",
- "community": 6,
- "norm_label": "planner constants. tune here without touching algorithm code.",
- "id": "config_rationale_1"
- },
- {
- "label": "types.py",
- "file_type": "code",
- "source_file": "backend/app/services/planner/types.py",
- "source_location": "L1",
- "community": 6,
- "norm_label": "types.py",
- "id": "backend_app_services_planner_types_py"
- },
- {
- "label": "IngredientCost",
- "file_type": "code",
- "source_file": "backend/app/services/planner/types.py",
- "source_location": "L11",
- "community": 32,
- "norm_label": "ingredientcost",
- "id": "types_ingredientcost"
- },
- {
- "label": "RecipeCost",
- "file_type": "code",
- "source_file": "backend/app/services/planner/types.py",
- "source_location": "L26",
- "community": 6,
- "norm_label": "recipecost",
- "id": "types_recipecost"
- },
- {
- "label": "sale_coverage_pct()",
- "file_type": "code",
- "source_file": "backend/app/services/planner/types.py",
- "source_location": "L37",
- "community": 6,
- "norm_label": "sale_coverage_pct()",
- "id": "types_sale_coverage_pct"
- },
- {
- "label": "pantry_hit_pct()",
- "file_type": "code",
- "source_file": "backend/app/services/planner/types.py",
- "source_location": "L43",
- "community": 6,
- "norm_label": "pantry_hit_pct()",
- "id": "types_pantry_hit_pct"
- },
- {
- "label": "FilterResult",
- "file_type": "code",
- "source_file": "backend/app/services/planner/types.py",
- "source_location": "L50",
- "community": 6,
- "norm_label": "filterresult",
- "id": "types_filterresult"
- },
- {
- "label": "ScoredRecipe",
- "file_type": "code",
- "source_file": "backend/app/services/planner/types.py",
- "source_location": "L56",
- "community": 6,
- "norm_label": "scoredrecipe",
- "id": "types_scoredrecipe"
- },
- {
- "label": "GenerationResult",
- "file_type": "code",
- "source_file": "backend/app/services/planner/types.py",
- "source_location": "L66",
- "community": 6,
- "norm_label": "generationresult",
- "id": "types_generationresult"
- },
- {
- "label": "Shared planner data structures.",
- "file_type": "rationale",
- "source_file": "backend/app/services/planner/types.py",
- "source_location": "L1",
- "community": 6,
- "norm_label": "shared planner data structures.",
- "id": "types_rationale_1"
- },
- {
- "label": "cost.py",
- "file_type": "code",
- "source_file": "backend/app/services/planner/cost.py",
- "source_location": "L1",
- "community": 32,
- "norm_label": "cost.py",
- "id": "backend_app_services_planner_cost_py"
- },
- {
- "label": "_decimal()",
- "file_type": "code",
- "source_file": "backend/app/services/planner/cost.py",
- "source_location": "L30",
- "community": 32,
- "norm_label": "_decimal()",
- "id": "cost_decimal"
- },
- {
- "label": "_scale()",
- "file_type": "code",
- "source_file": "backend/app/services/planner/cost.py",
- "source_location": "L36",
- "community": 32,
- "norm_label": "_scale()",
- "id": "cost_scale"
- },
- {
- "label": "compute_recipe_cost()",
- "file_type": "code",
- "source_file": "backend/app/services/planner/cost.py",
- "source_location": "L40",
- "community": 32,
- "norm_label": "compute_recipe_cost()",
- "id": "cost_compute_recipe_cost"
- },
- {
- "label": "Compute per-recipe cost and savings against ingredient_grocery_match. Inputs:",
- "file_type": "rationale",
- "source_file": "backend/app/services/planner/cost.py",
- "source_location": "L1",
- "community": 32,
- "norm_label": "compute per-recipe cost and savings against ingredient_grocery_match. inputs:",
- "id": "cost_rationale_1"
- },
- {
- "label": "filter.py",
- "file_type": "code",
- "source_file": "backend/app/services/planner/filter.py",
- "source_location": "L1",
- "community": 6,
- "norm_label": "filter.py",
- "id": "backend_app_services_planner_filter_py"
- },
- {
- "label": "_calorie_band()",
- "file_type": "code",
- "source_file": "backend/app/services/planner/filter.py",
- "source_location": "L12",
- "community": 6,
- "norm_label": "_calorie_band()",
- "id": "filter_calorie_band"
- },
- {
- "label": "filter_recipes()",
- "file_type": "code",
- "source_file": "backend/app/services/planner/filter.py",
- "source_location": "L17",
- "community": 6,
- "norm_label": "filter_recipes()",
- "id": "filter_filter_recipes"
- },
- {
- "label": "Hard-constraint filter (constraints #1-#6 from the spec).",
- "file_type": "rationale",
- "source_file": "backend/app/services/planner/filter.py",
- "source_location": "L1",
- "community": 6,
- "norm_label": "hard-constraint filter (constraints #1-#6 from the spec).",
- "id": "filter_rationale_1"
- },
- {
- "label": "score.py",
- "file_type": "code",
- "source_file": "backend/app/services/planner/score.py",
- "source_location": "L1",
- "community": 6,
- "norm_label": "score.py",
- "id": "backend_app_services_planner_score_py"
- },
- {
- "label": "time_bonus()",
- "file_type": "code",
- "source_file": "backend/app/services/planner/score.py",
- "source_location": "L13",
- "community": 6,
- "norm_label": "time_bonus()",
- "id": "score_time_bonus"
- },
- {
- "label": "recency_bonus()",
- "file_type": "code",
- "source_file": "backend/app/services/planner/score.py",
- "source_location": "L23",
- "community": 6,
- "norm_label": "recency_bonus()",
- "id": "score_recency_bonus"
- },
- {
- "label": "normalize_savings()",
- "file_type": "code",
- "source_file": "backend/app/services/planner/score.py",
- "source_location": "L42",
- "community": 6,
- "norm_label": "normalize_savings()",
- "id": "score_normalize_savings"
- },
- {
- "label": "score_recipes()",
- "file_type": "code",
- "source_file": "backend/app/services/planner/score.py",
- "source_location": "L52",
- "community": 6,
- "norm_label": "score_recipes()",
- "id": "score_score_recipes"
- },
- {
- "label": "Per-recipe scoring with the 5 weighted signals from the spec.",
- "file_type": "rationale",
- "source_file": "backend/app/services/planner/score.py",
- "source_location": "L1",
- "community": 6,
- "norm_label": "per-recipe scoring with the 5 weighted signals from the spec.",
- "id": "score_rationale_1"
- },
- {
- "label": "Returns recipes scored DESC. Caller passes only the feasible set.",
- "file_type": "rationale",
- "source_file": "backend/app/services/planner/score.py",
- "source_location": "L60",
- "community": 6,
- "norm_label": "returns recipes scored desc. caller passes only the feasible set.",
- "id": "score_rationale_60"
- },
- {
- "label": "select.py",
- "file_type": "code",
- "source_file": "backend/app/services/planner/select.py",
- "source_location": "L1",
- "community": 6,
- "norm_label": "select.py",
- "id": "backend_app_services_planner_select_py"
- },
- {
- "label": "set_diversity_penalty()",
- "file_type": "code",
- "source_file": "backend/app/services/planner/select.py",
- "source_location": "L16",
- "community": 6,
- "norm_label": "set_diversity_penalty()",
- "id": "select_set_diversity_penalty"
- },
- {
- "label": "_set_score()",
- "file_type": "code",
- "source_file": "backend/app/services/planner/select.py",
- "source_location": "L29",
- "community": 6,
- "norm_label": "_set_score()",
- "id": "select_set_score"
- },
- {
- "label": "select_set()",
- "file_type": "code",
- "source_file": "backend/app/services/planner/select.py",
- "source_location": "L33",
- "community": 6,
- "norm_label": "select_set()",
- "id": "select_select_set"
- },
- {
- "label": "Top-K set enumeration with diversity penalty. Takes the top K (=20) scored reci",
- "file_type": "rationale",
- "source_file": "backend/app/services/planner/select.py",
- "source_location": "L1",
- "community": 6,
- "norm_label": "top-k set enumeration with diversity penalty. takes the top k (=20) scored reci",
- "id": "select_rationale_1"
- },
- {
- "label": "generate.py",
- "file_type": "code",
- "source_file": "backend/app/services/planner/generate.py",
- "source_location": "L1",
- "community": 6,
- "norm_label": "generate.py",
- "id": "backend_app_services_planner_generate_py"
- },
- {
- "label": "_load_match_index()",
- "file_type": "code",
- "source_file": "backend/app/services/planner/generate.py",
- "source_location": "L32",
- "community": 6,
- "norm_label": "_load_match_index()",
- "id": "generate_load_match_index"
- },
- {
- "label": "_load_blocklists()",
- "file_type": "code",
- "source_file": "backend/app/services/planner/generate.py",
- "source_location": "L55",
- "community": 6,
- "norm_label": "_load_blocklists()",
- "id": "generate_load_blocklists"
- },
- {
- "label": "_load_pantry()",
- "file_type": "code",
- "source_file": "backend/app/services/planner/generate.py",
- "source_location": "L68",
- "community": 6,
- "norm_label": "_load_pantry()",
- "id": "generate_load_pantry"
- },
- {
- "label": "_load_last_cooked()",
- "file_type": "code",
- "source_file": "backend/app/services/planner/generate.py",
- "source_location": "L76",
- "community": 6,
- "norm_label": "_load_last_cooked()",
- "id": "generate_load_last_cooked"
- },
- {
- "label": "generate_meal_plan()",
- "file_type": "code",
- "source_file": "backend/app/services/planner/generate.py",
- "source_location": "L92",
- "community": 6,
- "norm_label": "generate_meal_plan()",
- "id": "generate_generate_meal_plan"
- },
- {
- "label": "End-to-end planner orchestration: load \u2192 filter \u2192 score \u2192 select \u2192 persist.",
- "file_type": "rationale",
- "source_file": "backend/app/services/planner/generate.py",
- "source_location": "L1",
- "community": 6,
- "norm_label": "end-to-end planner orchestration: load \u2192 filter \u2192 score \u2192 select \u2192 persist.",
- "id": "generate_rationale_1"
- },
- {
- "label": "ingredient_id \u2192 list of match dicts ordered by confidence DESC.",
- "file_type": "rationale",
- "source_file": "backend/app/services/planner/generate.py",
- "source_location": "L33",
- "community": 6,
- "norm_label": "ingredient_id \u2192 list of match dicts ordered by confidence desc.",
- "id": "generate_rationale_33"
- },
- {
- "label": "__init__.py",
- "file_type": "code",
- "source_file": "backend/app/services/orchestrator/__init__.py",
- "source_location": "L1",
- "community": 8,
- "norm_label": "__init__.py",
- "id": "backend_app_services_orchestrator_init_py"
- },
- {
- "label": "alerts.py",
- "file_type": "code",
- "source_file": "backend/app/services/orchestrator/alerts.py",
- "source_location": "L1",
- "community": 5,
- "norm_label": "alerts.py",
- "id": "backend_app_services_orchestrator_alerts_py"
- },
- {
- "label": "send_admin_alert()",
- "file_type": "code",
- "source_file": "backend/app/services/orchestrator/alerts.py",
- "source_location": "L9",
- "community": 5,
- "norm_label": "send_admin_alert()",
- "id": "alerts_send_admin_alert"
- },
- {
- "label": "runner.py",
- "file_type": "code",
- "source_file": "backend/app/services/orchestrator/runner.py",
- "source_location": "L1",
- "community": 5,
- "norm_label": "runner.py",
- "id": "backend_app_services_orchestrator_runner_py"
- },
- {
- "label": "_current_week_start()",
- "file_type": "code",
- "source_file": "backend/app/services/orchestrator/runner.py",
- "source_location": "L20",
- "community": 5,
- "norm_label": "_current_week_start()",
- "id": "runner_current_week_start"
- },
- {
- "label": "_get_or_create_run()",
- "file_type": "code",
- "source_file": "backend/app/services/orchestrator/runner.py",
- "source_location": "L27",
- "community": 5,
- "norm_label": "_get_or_create_run()",
- "id": "runner_get_or_create_run"
- },
- {
- "label": "run_step()",
- "file_type": "code",
- "source_file": "backend/app/services/orchestrator/runner.py",
- "source_location": "L50",
- "community": 5,
- "norm_label": "run_step()",
- "id": "runner_run_step"
- },
- {
- "label": "run_week()",
- "file_type": "code",
- "source_file": "backend/app/services/orchestrator/runner.py",
- "source_location": "L84",
- "community": 5,
- "norm_label": "run_week()",
- "id": "runner_run_week"
- },
- {
- "label": "Orchestrator runner. run_step(step_name, week_start_date) \u2014 execute one step f",
- "file_type": "rationale",
- "source_file": "backend/app/services/orchestrator/runner.py",
- "source_location": "L1",
- "community": 5,
- "norm_label": "orchestrator runner. run_step(step_name, week_start_date) \u2014 execute one step f",
- "id": "runner_rationale_1"
- },
- {
- "label": "Return the most recent Friday (today if today is Friday).",
- "file_type": "rationale",
- "source_file": "backend/app/services/orchestrator/runner.py",
- "source_location": "L21",
- "community": 5,
- "norm_label": "return the most recent friday (today if today is friday).",
- "id": "runner_rationale_21"
- },
- {
- "label": "steps.py",
- "file_type": "code",
- "source_file": "backend/app/services/orchestrator/steps.py",
- "source_location": "L1",
- "community": 5,
- "norm_label": "steps.py",
- "id": "backend_app_services_orchestrator_steps_py"
- },
- {
- "label": "step_scrape()",
- "file_type": "code",
- "source_file": "backend/app/services/orchestrator/steps.py",
- "source_location": "L34",
- "community": 5,
- "norm_label": "step_scrape()",
- "id": "steps_step_scrape"
- },
- {
- "label": "step_generate()",
- "file_type": "code",
- "source_file": "backend/app/services/orchestrator/steps.py",
- "source_location": "L67",
- "community": 5,
- "norm_label": "step_generate()",
- "id": "steps_step_generate"
- },
- {
- "label": "step_email()",
- "file_type": "code",
- "source_file": "backend/app/services/orchestrator/steps.py",
- "source_location": "L92",
- "community": 5,
- "norm_label": "step_email()",
- "id": "steps_step_email"
- },
- {
- "label": "step_deadline()",
- "file_type": "code",
- "source_file": "backend/app/services/orchestrator/steps.py",
- "source_location": "L297",
- "community": 5,
- "norm_label": "step_deadline()",
- "id": "steps_step_deadline"
- },
- {
- "label": "step_finalize()",
- "file_type": "code",
- "source_file": "backend/app/services/orchestrator/steps.py",
- "source_location": "L335",
- "community": 5,
- "norm_label": "step_finalize()",
- "id": "steps_step_finalize"
- },
- {
- "label": "step_reminder()",
- "file_type": "code",
- "source_file": "backend/app/services/orchestrator/steps.py",
- "source_location": "L460",
- "community": 5,
- "norm_label": "step_reminder()",
- "id": "steps_step_reminder"
- },
- {
- "label": "Orchestrator step functions. Each step receives a WeeklyRun row and an open Ses",
- "file_type": "rationale",
- "source_file": "backend/app/services/orchestrator/steps.py",
- "source_location": "L1",
- "community": 5,
- "norm_label": "orchestrator step functions. each step receives a weeklyrun row and an open ses",
- "id": "steps_rationale_1"
- },
- {
- "label": "base.py",
- "file_type": "code",
- "source_file": "backend/app/scraper/base.py",
- "source_location": "L1",
- "community": 25,
- "norm_label": "base.py",
- "id": "backend_app_scraper_base_py"
- },
- {
- "label": "BaseScraper",
- "file_type": "code",
- "source_file": "backend/app/scraper/base.py",
- "source_location": "L14",
- "community": 25,
- "norm_label": "basescraper",
- "id": "base_basescraper"
- },
- {
- "label": "ABC",
- "file_type": "code",
- "source_file": "",
- "source_location": "",
- "community": 25,
- "norm_label": "abc",
- "id": "abc"
- },
- {
- "label": ".__init__()",
- "file_type": "code",
- "source_file": "backend/app/scraper/base.py",
- "source_location": "L15",
- "community": 25,
- "norm_label": ".__init__()",
- "id": "base_basescraper_init"
- },
- {
- "label": "._create_session()",
- "file_type": "code",
- "source_file": "backend/app/scraper/base.py",
- "source_location": "L29",
- "community": 25,
- "norm_label": "._create_session()",
- "id": "base_basescraper_create_session"
- },
- {
- "label": "._rate_limit()",
- "file_type": "code",
- "source_file": "backend/app/scraper/base.py",
- "source_location": "L51",
- "community": 25,
- "norm_label": "._rate_limit()",
- "id": "base_basescraper_rate_limit"
- },
- {
- "label": "._get()",
- "file_type": "code",
- "source_file": "backend/app/scraper/base.py",
- "source_location": "L59",
- "community": 25,
- "norm_label": "._get()",
- "id": "base_basescraper_get"
- },
- {
- "label": "._post()",
- "file_type": "code",
- "source_file": "backend/app/scraper/base.py",
- "source_location": "L80",
- "community": 25,
- "norm_label": "._post()",
- "id": "base_basescraper_post"
- },
- {
- "label": "scrape()",
- "file_type": "code",
- "source_file": "backend/app/scraper/base.py",
- "source_location": "L102",
- "community": 25,
- "norm_label": "scrape()",
- "id": "base_scrape"
- },
- {
- "label": ".log_scrape()",
- "file_type": "code",
- "source_file": "backend/app/scraper/base.py",
- "source_location": "L105",
- "community": 25,
- "norm_label": ".log_scrape()",
- "id": "base_basescraper_log_scrape"
- },
- {
- "label": "SeleniumScraper",
- "file_type": "code",
- "source_file": "backend/app/scraper/base.py",
- "source_location": "L109",
- "community": 25,
- "norm_label": "seleniumscraper",
- "id": "base_seleniumscraper"
- },
- {
- "label": ".__init__()",
- "file_type": "code",
- "source_file": "backend/app/scraper/base.py",
- "source_location": "L110",
- "community": 25,
- "norm_label": ".__init__()",
- "id": "base_seleniumscraper_init"
- },
- {
- "label": "._init_playwright()",
- "file_type": "code",
- "source_file": "backend/app/scraper/base.py",
- "source_location": "L114",
- "community": 25,
- "norm_label": "._init_playwright()",
- "id": "base_seleniumscraper_init_playwright"
- },
- {
- "label": "._get_playwright()",
- "file_type": "code",
- "source_file": "backend/app/scraper/base.py",
- "source_location": "L123",
- "community": 25,
- "norm_label": "._get_playwright()",
- "id": "base_seleniumscraper_get_playwright"
- },
- {
- "label": ".get_browser_page()",
- "file_type": "code",
- "source_file": "backend/app/scraper/base.py",
- "source_location": "L127",
- "community": 25,
- "norm_label": ".get_browser_page()",
- "id": "base_seleniumscraper_get_browser_page"
- },
- {
- "label": ".cleanup()",
- "file_type": "code",
- "source_file": "backend/app/scraper/base.py",
- "source_location": "L133",
- "community": 25,
- "norm_label": ".cleanup()",
- "id": "base_seleniumscraper_cleanup"
- },
- {
- "label": "__init__.py",
- "file_type": "code",
- "source_file": "backend/app/scraper/__init__.py",
- "source_location": "L1",
- "community": 25,
- "norm_label": "__init__.py",
- "id": "backend_app_scraper_init_py"
- },
- {
- "label": "lucky_ca_scraper.py",
- "file_type": "code",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L1",
- "community": 4,
- "norm_label": "lucky_ca_scraper.py",
- "id": "backend_app_scraper_lucky_ca_scraper_py"
- },
- {
- "label": "SwiftlyAuthError",
- "file_type": "code",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L49",
- "community": 4,
- "norm_label": "swiftlyautherror",
- "id": "lucky_ca_scraper_swiftlyautherror"
- },
- {
- "label": "LuckyCaliforniaScraper",
- "file_type": "code",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L67",
- "community": 4,
- "norm_label": "luckycaliforniascraper",
- "id": "lucky_ca_scraper_luckycaliforniascraper"
- },
- {
- "label": ".__init__()",
- "file_type": "code",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L86",
- "community": 4,
- "norm_label": ".__init__()",
- "id": "lucky_ca_scraper_luckycaliforniascraper_init"
- },
- {
- "label": ".cleanup()",
- "file_type": "code",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L129",
- "community": 4,
- "norm_label": ".cleanup()",
- "id": "lucky_ca_scraper_luckycaliforniascraper_cleanup"
- },
- {
- "label": ".scrape()",
- "file_type": "code",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L138",
- "community": 4,
- "norm_label": ".scrape()",
- "id": "lucky_ca_scraper_luckycaliforniascraper_scrape"
- },
- {
- "label": ".fetch_all()",
- "file_type": "code",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L157",
- "community": 4,
- "norm_label": ".fetch_all()",
- "id": "lucky_ca_scraper_luckycaliforniascraper_fetch_all"
- },
- {
- "label": ".discover_categories()",
- "file_type": "code",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L179",
- "community": 4,
- "norm_label": ".discover_categories()",
- "id": "lucky_ca_scraper_luckycaliforniascraper_discover_categories"
- },
- {
- "label": "parse_categories_html()",
- "file_type": "code",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L191",
- "community": 4,
- "norm_label": "parse_categories_html()",
- "id": "lucky_ca_scraper_parse_categories_html"
- },
- {
- "label": ".fetch_category()",
- "file_type": "code",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L208",
- "community": 4,
- "norm_label": ".fetch_category()",
- "id": "lucky_ca_scraper_luckycaliforniascraper_fetch_category"
- },
- {
- "label": "parse_category_response()",
- "file_type": "code",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L226",
- "community": 4,
- "norm_label": "parse_category_response()",
- "id": "lucky_ca_scraper_parse_category_response"
- },
- {
- "label": "map_product()",
- "file_type": "code",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L240",
- "community": 4,
- "norm_label": "map_product()",
- "id": "lucky_ca_scraper_map_product"
- },
- {
- "label": "_parse_price()",
- "file_type": "code",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L297",
- "community": 4,
- "norm_label": "_parse_price()",
- "id": "lucky_ca_scraper_parse_price"
- },
- {
- "label": "_aisle_from_slug()",
- "file_type": "code",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L317",
- "community": 4,
- "norm_label": "_aisle_from_slug()",
- "id": "lucky_ca_scraper_aisle_from_slug"
- },
- {
- "label": "._rate_limit()",
- "file_type": "code",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L325",
- "community": 4,
- "norm_label": "._rate_limit()",
- "id": "lucky_ca_scraper_luckycaliforniascraper_rate_limit"
- },
- {
- "label": "Lucky California / Swiftly product API client. Replaces the prior Playwright +",
- "file_type": "rationale",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L1",
- "community": 4,
- "norm_label": "lucky california / swiftly product api client. replaces the prior playwright +",
- "id": "lucky_ca_scraper_rationale_1"
- },
- {
- "label": "Raised when the Swiftly API returns 401. The exception message is surfaced",
- "file_type": "rationale",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L50",
- "community": 4,
- "norm_label": "raised when the swiftly api returns 401. the exception message is surfaced",
- "id": "lucky_ca_scraper_rationale_50"
- },
- {
- "label": "Swiftly product-API client for the Lucky California banner. The class name",
- "file_type": "rationale",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L68",
- "community": 4,
- "norm_label": "swiftly product-api client for the lucky california banner. the class name",
- "id": "lucky_ca_scraper_rationale_68"
- },
- {
- "label": "Synchronous top-level scrape. Kept for the legacy ``ScraperService.run_",
- "file_type": "rationale",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L139",
- "community": 4,
- "norm_label": "synchronous top-level scrape. kept for the legacy ``scraperservice.run_",
- "id": "lucky_ca_scraper_rationale_139"
- },
- {
- "label": "Yield mapped product dicts across every discovered category.",
- "file_type": "rationale",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L158",
- "community": 4,
- "norm_label": "yield mapped product dicts across every discovered category.",
- "id": "lucky_ca_scraper_rationale_158"
- },
- {
- "label": "Fetch the categories page and return the list of API slugs. The slugs l",
- "file_type": "rationale",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L180",
- "community": 4,
- "norm_label": "fetch the categories page and return the list of api slugs. the slugs l",
- "id": "lucky_ca_scraper_rationale_180"
- },
- {
- "label": "Pure parser used by tests against a saved fixture.",
- "file_type": "rationale",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L192",
- "community": 4,
- "norm_label": "pure parser used by tests against a saved fixture.",
- "id": "lucky_ca_scraper_rationale_192"
- },
- {
- "label": "Fetch every product in a category. Raises ``SwiftlyAuthError`` on 401.",
- "file_type": "rationale",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L209",
- "community": 4,
- "norm_label": "fetch every product in a category. raises ``swiftlyautherror`` on 401.",
- "id": "lucky_ca_scraper_rationale_209"
- },
- {
- "label": "Pure parser used by tests against a saved fixture.",
- "file_type": "rationale",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L227",
- "community": 4,
- "norm_label": "pure parser used by tests against a saved fixture.",
- "id": "lucky_ca_scraper_rationale_227"
- },
- {
- "label": "Convert one Swiftly product dict to a grocery_item-ready dict. Returns",
- "file_type": "rationale",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L247",
- "community": 4,
- "norm_label": "convert one swiftly product dict to a grocery_item-ready dict. returns",
- "id": "lucky_ca_scraper_rationale_247"
- },
- {
- "label": "Extract ``(price, unit)`` from strings like ``\"$3.49 /lb\"``. Returns ``",
- "file_type": "rationale",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L298",
- "community": 4,
- "norm_label": "extract ``(price, unit)`` from strings like ``\"$3.49 /lb\"``. returns ``",
- "id": "lucky_ca_scraper_rationale_298"
- },
- {
- "label": "``Product/meat_seafood`` \u2192 ``meat_seafood``.",
- "file_type": "rationale",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L318",
- "community": 4,
- "norm_label": "``product/meat_seafood`` \u2192 ``meat_seafood``.",
- "id": "lucky_ca_scraper_rationale_318"
- },
- {
- "label": "__init__.py",
- "file_type": "code",
- "source_file": "backend/app/scheduler/__init__.py",
- "source_location": "L1",
- "community": 8,
- "norm_label": "__init__.py",
- "id": "backend_app_scheduler_init_py"
- },
- {
- "label": "__main__.py",
- "file_type": "code",
- "source_file": "backend/app/scheduler/__main__.py",
- "source_location": "L1",
- "community": 8,
- "norm_label": "__main__.py",
- "id": "backend_app_scheduler_main_py"
- },
- {
- "label": "APScheduler entry point for the scheduler container. Run: python -m app.schedul",
- "file_type": "rationale",
- "source_file": "backend/app/scheduler/__main__.py",
- "source_location": "L1",
- "community": 8,
- "norm_label": "apscheduler entry point for the scheduler container. run: python -m app.schedul",
- "id": "main_rationale_1"
- },
- {
- "label": "env.py",
- "file_type": "code",
- "source_file": "backend/alembic/env.py",
- "source_location": "L1",
- "community": 53,
- "norm_label": "env.py",
- "id": "backend_alembic_env_py"
- },
- {
- "label": "run_migrations_offline()",
- "file_type": "code",
- "source_file": "backend/alembic/env.py",
- "source_location": "L22",
- "community": 53,
- "norm_label": "run_migrations_offline()",
- "id": "env_run_migrations_offline"
- },
- {
- "label": "run_migrations_online()",
- "file_type": "code",
- "source_file": "backend/alembic/env.py",
- "source_location": "L35",
- "community": 53,
- "norm_label": "run_migrations_online()",
- "id": "env_run_migrations_online"
- },
- {
- "label": "0003_grocery_item_description.py",
- "file_type": "code",
- "source_file": "backend/alembic/versions/0003_grocery_item_description.py",
- "source_location": "L1",
- "community": 44,
- "norm_label": "0003_grocery_item_description.py",
- "id": "backend_alembic_versions_0003_grocery_item_description_py"
- },
- {
- "label": "upgrade()",
- "file_type": "code",
- "source_file": "backend/alembic/versions/0003_grocery_item_description.py",
- "source_location": "L24",
- "community": 44,
- "norm_label": "upgrade()",
- "id": "0003_grocery_item_description_upgrade"
- },
- {
- "label": "downgrade()",
- "file_type": "code",
- "source_file": "backend/alembic/versions/0003_grocery_item_description.py",
- "source_location": "L31",
- "community": 44,
- "norm_label": "downgrade()",
- "id": "0003_grocery_item_description_downgrade"
- },
- {
- "label": "Add nullable description column to grocery_item. The Lucky California parser pr",
- "file_type": "rationale",
- "source_file": "backend/alembic/versions/0003_grocery_item_description.py",
- "source_location": "L1",
- "community": 44,
- "norm_label": "add nullable description column to grocery_item. the lucky california parser pr",
- "id": "0003_grocery_item_description_rationale_1"
- },
- {
- "label": "0002_seed_data.py",
- "file_type": "code",
- "source_file": "backend/alembic/versions/0002_seed_data.py",
- "source_location": "L1",
- "community": 45,
- "norm_label": "0002_seed_data.py",
- "id": "backend_alembic_versions_0002_seed_data_py"
- },
- {
- "label": "upgrade()",
- "file_type": "code",
- "source_file": "backend/alembic/versions/0002_seed_data.py",
- "source_location": "L17",
- "community": 45,
- "norm_label": "upgrade()",
- "id": "0002_seed_data_upgrade"
- },
- {
- "label": "downgrade()",
- "file_type": "code",
- "source_file": "backend/alembic/versions/0002_seed_data.py",
- "source_location": "L112",
- "community": 45,
- "norm_label": "downgrade()",
- "id": "0002_seed_data_downgrade"
- },
- {
- "label": "Seed initial data Revision ID: 0002 Revises: 0001 Create Date: 2026-05-04",
- "file_type": "rationale",
- "source_file": "backend/alembic/versions/0002_seed_data.py",
- "source_location": "L1",
- "community": 45,
- "norm_label": "seed initial data revision id: 0002 revises: 0001 create date: 2026-05-04",
- "id": "0002_seed_data_rationale_1"
- },
- {
- "label": "0004_family_profile_calorie_target.py",
- "file_type": "code",
- "source_file": "backend/alembic/versions/0004_family_profile_calorie_target.py",
- "source_location": "L1",
- "community": 46,
- "norm_label": "0004_family_profile_calorie_target.py",
- "id": "backend_alembic_versions_0004_family_profile_calorie_target_py"
- },
- {
- "label": "upgrade()",
- "file_type": "code",
- "source_file": "backend/alembic/versions/0004_family_profile_calorie_target.py",
- "source_location": "L22",
- "community": 46,
- "norm_label": "upgrade()",
- "id": "0004_family_profile_calorie_target_upgrade"
- },
- {
- "label": "downgrade()",
- "file_type": "code",
- "source_file": "backend/alembic/versions/0004_family_profile_calorie_target.py",
- "source_location": "L29",
- "community": 46,
- "norm_label": "downgrade()",
- "id": "0004_family_profile_calorie_target_downgrade"
- },
- {
- "label": "Add calorie_target to family_profile Revision ID: 0004 Revises: 0003 Create Dat",
- "file_type": "rationale",
- "source_file": "backend/alembic/versions/0004_family_profile_calorie_target.py",
- "source_location": "L1",
- "community": 46,
- "norm_label": "add calorie_target to family_profile revision id: 0004 revises: 0003 create dat",
- "id": "0004_family_profile_calorie_target_rationale_1"
- },
- {
- "label": "0001_initial_migration.py",
- "file_type": "code",
- "source_file": "backend/alembic/versions/0001_initial_migration.py",
- "source_location": "L1",
- "community": 0,
- "norm_label": "0001_initial_migration.py",
- "id": "backend_alembic_versions_0001_initial_migration_py"
- },
- {
- "label": "upgrade()",
- "file_type": "code",
- "source_file": "backend/alembic/versions/0001_initial_migration.py",
- "source_location": "L18",
- "community": 0,
- "norm_label": "upgrade()",
- "id": "0001_initial_migration_upgrade"
- },
- {
- "label": "downgrade()",
- "file_type": "code",
- "source_file": "backend/alembic/versions/0001_initial_migration.py",
- "source_location": "L288",
- "community": 0,
- "norm_label": "downgrade()",
- "id": "0001_initial_migration_downgrade"
- },
- {
- "label": "Initial migration Revision ID: 0001 Revises: Create Date: 2026-05-04",
- "file_type": "rationale",
- "source_file": "backend/alembic/versions/0001_initial_migration.py",
- "source_location": "L1",
- "community": 0,
- "norm_label": "initial migration revision id: 0001 revises: create date: 2026-05-04",
- "id": "0001_initial_migration_rationale_1"
- },
- {
- "label": "0005_grocery_item_external_id.py",
- "file_type": "code",
- "source_file": "backend/alembic/versions/0005_grocery_item_external_id.py",
- "source_location": "L1",
- "community": 47,
- "norm_label": "0005_grocery_item_external_id.py",
- "id": "backend_alembic_versions_0005_grocery_item_external_id_py"
- },
- {
- "label": "upgrade()",
- "file_type": "code",
- "source_file": "backend/alembic/versions/0005_grocery_item_external_id.py",
- "source_location": "L26",
- "community": 47,
- "norm_label": "upgrade()",
- "id": "0005_grocery_item_external_id_upgrade"
- },
- {
- "label": "downgrade()",
- "file_type": "code",
- "source_file": "backend/alembic/versions/0005_grocery_item_external_id.py",
- "source_location": "L45",
- "community": 47,
- "norm_label": "downgrade()",
- "id": "0005_grocery_item_external_id_downgrade"
- },
- {
- "label": "Add nullable indexed external_id and source columns to grocery_item. The Swiftl",
- "file_type": "rationale",
- "source_file": "backend/alembic/versions/0005_grocery_item_external_id.py",
- "source_location": "L1",
- "community": 47,
- "norm_label": "add nullable indexed external_id and source columns to grocery_item. the swiftl",
- "id": "0005_grocery_item_external_id_rationale_1"
- },
- {
- "label": "0006_recipe_engine_thin.py",
- "file_type": "code",
- "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py",
- "source_location": "L1",
- "community": 0,
- "norm_label": "0006_recipe_engine_thin.py",
- "id": "backend_alembic_versions_0006_recipe_engine_thin_py"
- },
- {
- "label": "upgrade()",
- "file_type": "code",
- "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py",
- "source_location": "L19",
- "community": 0,
- "norm_label": "upgrade()",
- "id": "0006_recipe_engine_thin_upgrade"
- },
- {
- "label": "downgrade()",
- "file_type": "code",
- "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py",
- "source_location": "L88",
- "community": 0,
- "norm_label": "downgrade()",
- "id": "0006_recipe_engine_thin_downgrade"
- },
- {
- "label": "thin phase 4: ingredient.aliases, recipe.calories_per_serving, ingredient_grocer",
- "file_type": "rationale",
- "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py",
- "source_location": "L1",
- "community": 0,
- "norm_label": "thin phase 4: ingredient.aliases, recipe.calories_per_serving, ingredient_grocer",
- "id": "0006_recipe_engine_thin_rationale_1"
- },
- {
- "label": "0007_seed_recipes.py",
- "file_type": "code",
- "source_file": "backend/alembic/versions/0007_seed_recipes.py",
- "source_location": "L1",
- "community": 35,
- "norm_label": "0007_seed_recipes.py",
- "id": "backend_alembic_versions_0007_seed_recipes_py"
- },
- {
- "label": "_upsert_ingredients()",
- "file_type": "code",
- "source_file": "backend/alembic/versions/0007_seed_recipes.py",
- "source_location": "L82",
- "community": 35,
- "norm_label": "_upsert_ingredients()",
- "id": "0007_seed_recipes_upsert_ingredients"
- },
- {
- "label": "_insert_recipes()",
- "file_type": "code",
- "source_file": "backend/alembic/versions/0007_seed_recipes.py",
- "source_location": "L767",
- "community": 35,
- "norm_label": "_insert_recipes()",
- "id": "0007_seed_recipes_insert_recipes"
- },
- {
- "label": "_delete_recipes()",
- "file_type": "code",
- "source_file": "backend/alembic/versions/0007_seed_recipes.py",
- "source_location": "L823",
- "community": 35,
- "norm_label": "_delete_recipes()",
- "id": "0007_seed_recipes_delete_recipes"
- },
- {
- "label": "_delete_ingredients()",
- "file_type": "code",
- "source_file": "backend/alembic/versions/0007_seed_recipes.py",
- "source_location": "L832",
- "community": 35,
- "norm_label": "_delete_ingredients()",
- "id": "0007_seed_recipes_delete_ingredients"
- },
- {
- "label": "upgrade()",
- "file_type": "code",
- "source_file": "backend/alembic/versions/0007_seed_recipes.py",
- "source_location": "L846",
- "community": 35,
- "norm_label": "upgrade()",
- "id": "0007_seed_recipes_upgrade"
- },
- {
- "label": "downgrade()",
- "file_type": "code",
- "source_file": "backend/alembic/versions/0007_seed_recipes.py",
- "source_location": "L851",
- "community": 35,
- "norm_label": "downgrade()",
- "id": "0007_seed_recipes_downgrade"
- },
- {
- "label": "seed canonical ingredients (and 30 starter recipes in P4-14) Revision ID: 0007",
- "file_type": "rationale",
- "source_file": "backend/alembic/versions/0007_seed_recipes.py",
- "source_location": "L1",
- "community": 35,
- "norm_label": "seed canonical ingredients (and 30 starter recipes in p4-14) revision id: 0007",
- "id": "0007_seed_recipes_rationale_1"
- },
- {
- "label": "Best-effort: only remove rows whose name_lower matches one of our seeds. Pre",
- "file_type": "rationale",
- "source_file": "backend/alembic/versions/0007_seed_recipes.py",
- "source_location": "L833",
- "community": 35,
- "norm_label": "best-effort: only remove rows whose name_lower matches one of our seeds. pre",
- "id": "0007_seed_recipes_rationale_833"
- },
- {
- "label": "0008_phase5_orchestration.py",
- "file_type": "code",
- "source_file": "backend/alembic/versions/0008_phase5_orchestration.py",
- "source_location": "L1",
- "community": 48,
- "norm_label": "0008_phase5_orchestration.py",
- "id": "backend_alembic_versions_0008_phase5_orchestration_py"
- },
- {
- "label": "upgrade()",
- "file_type": "code",
- "source_file": "backend/alembic/versions/0008_phase5_orchestration.py",
- "source_location": "L17",
- "community": 48,
- "norm_label": "upgrade()",
- "id": "0008_phase5_orchestration_upgrade"
- },
- {
- "label": "downgrade()",
- "file_type": "code",
- "source_file": "backend/alembic/versions/0008_phase5_orchestration.py",
- "source_location": "L67",
- "community": 48,
- "norm_label": "downgrade()",
- "id": "0008_phase5_orchestration_downgrade"
- },
- {
- "label": "Phase 5 orchestration: weekly_run table + pending_approval_policy Revision ID:",
- "file_type": "rationale",
- "source_file": "backend/alembic/versions/0008_phase5_orchestration.py",
- "source_location": "L1",
- "community": 48,
- "norm_label": "phase 5 orchestration: weekly_run table + pending_approval_policy revision id:",
- "id": "0008_phase5_orchestration_rationale_1"
- },
- {
- "label": "0009_phase6_reminded_at.py",
- "file_type": "code",
- "source_file": "backend/alembic/versions/0009_phase6_reminded_at.py",
- "source_location": "L1",
- "community": 49,
- "norm_label": "0009_phase6_reminded_at.py",
- "id": "backend_alembic_versions_0009_phase6_reminded_at_py"
- },
- {
- "label": "upgrade()",
- "file_type": "code",
- "source_file": "backend/alembic/versions/0009_phase6_reminded_at.py",
- "source_location": "L16",
- "community": 49,
- "norm_label": "upgrade()",
- "id": "0009_phase6_reminded_at_upgrade"
- },
- {
- "label": "downgrade()",
- "file_type": "code",
- "source_file": "backend/alembic/versions/0009_phase6_reminded_at.py",
- "source_location": "L23",
- "community": 49,
- "norm_label": "downgrade()",
- "id": "0009_phase6_reminded_at_downgrade"
- },
- {
- "label": "Phase 6: add reminded_at to weekly_run Revision ID: 0009 Revises: 0008 Create D",
- "file_type": "rationale",
- "source_file": "backend/alembic/versions/0009_phase6_reminded_at.py",
- "source_location": "L1",
- "community": 49,
- "norm_label": "phase 6: add reminded_at to weekly_run revision id: 0009 revises: 0008 create d",
- "id": "0009_phase6_reminded_at_rationale_1"
- },
- {
- "label": "0010_auto_llm_source.py",
- "file_type": "code",
- "source_file": "backend/alembic/versions/0010_auto_llm_source.py",
- "source_location": "L1",
- "community": 50,
- "norm_label": "0010_auto_llm_source.py",
- "id": "backend_alembic_versions_0010_auto_llm_source_py"
- },
- {
- "label": "upgrade()",
- "file_type": "code",
- "source_file": "backend/alembic/versions/0010_auto_llm_source.py",
- "source_location": "L15",
- "community": 50,
- "norm_label": "upgrade()",
- "id": "0010_auto_llm_source_upgrade"
- },
- {
- "label": "downgrade()",
- "file_type": "code",
- "source_file": "backend/alembic/versions/0010_auto_llm_source.py",
- "source_location": "L21",
- "community": 50,
- "norm_label": "downgrade()",
- "id": "0010_auto_llm_source_downgrade"
- },
- {
- "label": "Add auto_llm to ingredient_match_source_enum Revision ID: 0010 Revises: 0009 Cr",
- "file_type": "rationale",
- "source_file": "backend/alembic/versions/0010_auto_llm_source.py",
- "source_location": "L1",
- "community": 50,
- "norm_label": "add auto_llm to ingredient_match_source_enum revision id: 0010 revises: 0009 cr",
- "id": "0010_auto_llm_source_rationale_1"
- },
- {
- "label": "__init__.py",
- "file_type": "code",
- "source_file": "backend/tests/__init__.py",
- "source_location": "L1",
- "community": 8,
- "norm_label": "__init__.py",
- "id": "backend_tests_init_py"
- },
- {
- "label": "test_alembic.py",
- "file_type": "code",
- "source_file": "backend/tests/test_alembic.py",
- "source_location": "L1",
- "community": 0,
- "norm_label": "test_alembic.py",
- "id": "backend_tests_test_alembic_py"
- },
- {
- "label": "test_alembic_upgrade_head_roundtrip()",
- "file_type": "code",
- "source_file": "backend/tests/test_alembic.py",
- "source_location": "L21",
- "community": 0,
- "norm_label": "test_alembic_upgrade_head_roundtrip()",
- "id": "test_alembic_test_alembic_upgrade_head_roundtrip"
- },
- {
- "label": "Alembic round-trip test. Verifies that ``alembic upgrade head`` followed by ``a",
- "file_type": "rationale",
- "source_file": "backend/tests/test_alembic.py",
- "source_location": "L1",
- "community": 0,
- "norm_label": "alembic round-trip test. verifies that ``alembic upgrade head`` followed by ``a",
- "id": "test_alembic_rationale_1"
- },
- {
- "label": "test_smoke.py",
- "file_type": "code",
- "source_file": "backend/tests/test_smoke.py",
- "source_location": "L1",
- "community": 36,
- "norm_label": "test_smoke.py",
- "id": "backend_tests_test_smoke_py"
- },
- {
- "label": "test_app_imports()",
- "file_type": "code",
- "source_file": "backend/tests/test_smoke.py",
- "source_location": "L15",
- "community": 36,
- "norm_label": "test_app_imports()",
- "id": "test_smoke_test_app_imports"
- },
- {
- "label": "test_health()",
- "file_type": "code",
- "source_file": "backend/tests/test_smoke.py",
- "source_location": "L21",
- "community": 36,
- "norm_label": "test_health()",
- "id": "test_smoke_test_health"
- },
- {
- "label": "test_health_db()",
- "file_type": "code",
- "source_file": "backend/tests/test_smoke.py",
- "source_location": "L28",
- "community": 36,
- "norm_label": "test_health_db()",
- "id": "test_smoke_test_health_db"
- },
- {
- "label": "test_router_list_endpoints()",
- "file_type": "code",
- "source_file": "backend/tests/test_smoke.py",
- "source_location": "L49",
- "community": 36,
- "norm_label": "test_router_list_endpoints()",
- "id": "test_smoke_test_router_list_endpoints"
- },
- {
- "label": "Smoke tests: app boots, routers wire up, no import-time crashes. The router-lis",
- "file_type": "rationale",
- "source_file": "backend/tests/test_smoke.py",
- "source_location": "L1",
- "community": 36,
- "norm_label": "smoke tests: app boots, routers wire up, no import-time crashes. the router-lis",
- "id": "test_smoke_rationale_1"
- },
- {
- "label": "Each canonical GET must respond. 200 (handled), 401 (admin-gated), 404 (hand",
- "file_type": "rationale",
- "source_file": "backend/tests/test_smoke.py",
- "source_location": "L50",
- "community": 36,
- "norm_label": "each canonical get must respond. 200 (handled), 401 (admin-gated), 404 (hand",
- "id": "test_smoke_rationale_50"
- },
- {
- "label": "test_auth.py",
- "file_type": "code",
- "source_file": "backend/tests/test_auth.py",
- "source_location": "L1",
- "community": 20,
- "norm_label": "test_auth.py",
- "id": "backend_tests_test_auth_py"
- },
- {
- "label": "_reload_settings()",
- "file_type": "code",
- "source_file": "backend/tests/test_auth.py",
- "source_location": "L25",
- "community": 20,
- "norm_label": "_reload_settings()",
- "id": "test_auth_reload_settings"
- },
- {
- "label": "test_admin_requires_token()",
- "file_type": "code",
- "source_file": "backend/tests/test_auth.py",
- "source_location": "L41",
- "community": 20,
- "norm_label": "test_admin_requires_token()",
- "id": "test_auth_test_admin_requires_token"
- },
- {
- "label": "test_admin_logs_requires_token()",
- "file_type": "code",
- "source_file": "backend/tests/test_auth.py",
- "source_location": "L55",
- "community": 20,
- "norm_label": "test_admin_logs_requires_token()",
- "id": "test_auth_test_admin_logs_requires_token"
- },
- {
- "label": "test_session_required_for_mutation()",
- "file_type": "code",
- "source_file": "backend/tests/test_auth.py",
- "source_location": "L69",
- "community": 20,
- "norm_label": "test_session_required_for_mutation()",
- "id": "test_auth_test_session_required_for_mutation"
- },
- {
- "label": "test_session_open_for_reads()",
- "file_type": "code",
- "source_file": "backend/tests/test_auth.py",
- "source_location": "L79",
- "community": 20,
- "norm_label": "test_session_open_for_reads()",
- "id": "test_auth_test_session_open_for_reads"
- },
- {
- "label": "test_session_login_logout()",
- "file_type": "code",
- "source_file": "backend/tests/test_auth.py",
- "source_location": "L90",
- "community": 20,
- "norm_label": "test_session_login_logout()",
- "id": "test_auth_test_session_login_logout"
- },
- {
- "label": "Auth gate tests for R1-B+D. Covers: - /api/admin/* requires bearer token (401 w",
- "file_type": "rationale",
- "source_file": "backend/tests/test_auth.py",
- "source_location": "L1",
- "community": 20,
- "norm_label": "auth gate tests for r1-b+d. covers: - /api/admin/* requires bearer token (401 w",
- "id": "test_auth_rationale_1"
- },
- {
- "label": "Force ``settings`` to re-read env (test isolation).",
- "file_type": "rationale",
- "source_file": "backend/tests/test_auth.py",
- "source_location": "L26",
- "community": 20,
- "norm_label": "force ``settings`` to re-read env (test isolation).",
- "id": "test_auth_rationale_26"
- },
- {
- "label": "No bearer \u2192 401. Valid bearer \u2192 not 401 (handler runs).",
- "file_type": "rationale",
- "source_file": "backend/tests/test_auth.py",
- "source_location": "L42",
- "community": 20,
- "norm_label": "no bearer \u2192 401. valid bearer \u2192 not 401 (handler runs).",
- "id": "test_auth_rationale_42"
- },
- {
- "label": "POST /api/profile/members without cookie \u2192 401.",
- "file_type": "rationale",
- "source_file": "backend/tests/test_auth.py",
- "source_location": "L70",
- "community": 20,
- "norm_label": "post /api/profile/members without cookie \u2192 401.",
- "id": "test_auth_rationale_70"
- },
- {
- "label": "GET /api/profile is NOT auth-gated (reads stay open).",
- "file_type": "rationale",
- "source_file": "backend/tests/test_auth.py",
- "source_location": "L80",
- "community": 20,
- "norm_label": "get /api/profile is not auth-gated (reads stay open).",
- "id": "test_auth_rationale_80"
- },
- {
- "label": "test_scrape_endpoint.py",
- "file_type": "code",
- "source_file": "backend/tests/test_scrape_endpoint.py",
- "source_location": "L1",
- "community": 40,
- "norm_label": "test_scrape_endpoint.py",
- "id": "backend_tests_test_scrape_endpoint_py"
- },
- {
- "label": "_admin_token()",
- "file_type": "code",
- "source_file": "backend/tests/test_scrape_endpoint.py",
- "source_location": "L20",
- "community": 40,
- "norm_label": "_admin_token()",
- "id": "test_scrape_endpoint_admin_token"
- },
- {
- "label": "test_scrape_returns_202_and_log_id()",
- "file_type": "code",
- "source_file": "backend/tests/test_scrape_endpoint.py",
- "source_location": "L26",
- "community": 40,
- "norm_label": "test_scrape_returns_202_and_log_id()",
- "id": "test_scrape_endpoint_test_scrape_returns_202_and_log_id"
- },
- {
- "label": "Async scrape endpoint contract. Verifies that ``POST /api/admin/scrape``: - r",
- "file_type": "rationale",
- "source_file": "backend/tests/test_scrape_endpoint.py",
- "source_location": "L1",
- "community": 40,
- "norm_label": "async scrape endpoint contract. verifies that ``post /api/admin/scrape``: - r",
- "id": "test_scrape_endpoint_rationale_1"
- },
- {
- "label": "Endpoint enqueues the scrape and returns 202 + scrape_log_id. We replace th",
- "file_type": "rationale",
- "source_file": "backend/tests/test_scrape_endpoint.py",
- "source_location": "L27",
- "community": 40,
- "norm_label": "endpoint enqueues the scrape and returns 202 + scrape_log_id. we replace th",
- "id": "test_scrape_endpoint_rationale_27"
- },
- {
- "label": "test_approval.py",
- "file_type": "code",
- "source_file": "backend/tests/test_approval.py",
- "source_location": "L1",
- "community": 10,
- "norm_label": "test_approval.py",
- "id": "backend_tests_test_approval_py"
- },
- {
- "label": "test_issue_and_verify_token_roundtrip()",
- "file_type": "code",
- "source_file": "backend/tests/test_approval.py",
- "source_location": "L23",
- "community": 10,
- "norm_label": "test_issue_and_verify_token_roundtrip()",
- "id": "test_approval_test_issue_and_verify_token_roundtrip"
- },
- {
- "label": "test_verify_rejects_tampered_token()",
- "file_type": "code",
- "source_file": "backend/tests/test_approval.py",
- "source_location": "L32",
- "community": 10,
- "norm_label": "test_verify_rejects_tampered_token()",
- "id": "test_approval_test_verify_rejects_tampered_token"
- },
- {
- "label": "test_verify_rejects_expired_token()",
- "file_type": "code",
- "source_file": "backend/tests/test_approval.py",
- "source_location": "L42",
- "community": 10,
- "norm_label": "test_verify_rejects_expired_token()",
- "id": "test_approval_test_verify_rejects_expired_token"
- },
- {
- "label": "scenario()",
- "file_type": "code",
- "source_file": "backend/tests/test_approval.py",
- "source_location": "L74",
- "community": 0,
- "norm_label": "scenario()",
- "id": "test_approval_scenario"
- },
- {
- "label": "test_consume_token_single_use()",
- "file_type": "code",
- "source_file": "backend/tests/test_approval.py",
- "source_location": "L159",
- "community": 10,
- "norm_label": "test_consume_token_single_use()",
- "id": "test_approval_test_consume_token_single_use"
- },
- {
- "label": "test_vote_get_renders_html()",
- "file_type": "code",
- "source_file": "backend/tests/test_approval.py",
- "source_location": "L186",
- "community": 10,
- "norm_label": "test_vote_get_renders_html()",
- "id": "test_approval_test_vote_get_renders_html"
- },
- {
- "label": "test_vote_post_records_and_decides()",
- "file_type": "code",
- "source_file": "backend/tests/test_approval.py",
- "source_location": "L207",
- "community": 10,
- "norm_label": "test_vote_post_records_and_decides()",
- "id": "test_approval_test_vote_post_records_and_decides"
- },
- {
- "label": "R2-B: approval-token + per-voter vote round-trip tests. - Pure unit tests for `",
- "file_type": "rationale",
- "source_file": "backend/tests/test_approval.py",
- "source_location": "L1",
- "community": 10,
- "norm_label": "r2-b: approval-token + per-voter vote round-trip tests. - pure unit tests for `",
- "id": "test_approval_rationale_1"
- },
- {
- "label": "itsdangerous reads `time.time()` \u2014 patch the time module's `time` attribute",
- "file_type": "rationale",
- "source_file": "backend/tests/test_approval.py",
- "source_location": "L43",
- "community": 10,
- "norm_label": "itsdangerous reads `time.time()` \u2014 patch the time module's `time` attribute",
- "id": "test_approval_rationale_43"
- },
- {
- "label": "Create profile + 2 voters + recipe + plan + item, all in one shot. Uses the",
- "file_type": "rationale",
- "source_file": "backend/tests/test_approval.py",
- "source_location": "L75",
- "community": 0,
- "norm_label": "create profile + 2 voters + recipe + plan + item, all in one shot. uses the",
- "id": "test_approval_rationale_75"
- },
- {
- "label": "First voter approves -> still pending (Bob hasn't voted). Then Bob approves",
- "file_type": "rationale",
- "source_file": "backend/tests/test_approval.py",
- "source_location": "L208",
- "community": 10,
- "norm_label": "first voter approves -> still pending (bob hasn't voted). then bob approves",
- "id": "test_approval_rationale_208"
- },
- {
- "label": "test_config.py",
- "file_type": "code",
- "source_file": "backend/tests/test_config.py",
- "source_location": "L1",
- "community": 20,
- "norm_label": "test_config.py",
- "id": "backend_tests_test_config_py"
- },
- {
- "label": "test_database_url_required()",
- "file_type": "code",
- "source_file": "backend/tests/test_config.py",
- "source_location": "L12",
- "community": 20,
- "norm_label": "test_database_url_required()",
- "id": "test_config_test_database_url_required"
- },
- {
- "label": "Config fail-fast: importing app.config with DATABASE_URL unset must raise.",
- "file_type": "rationale",
- "source_file": "backend/tests/test_config.py",
- "source_location": "L1",
- "community": 20,
- "norm_label": "config fail-fast: importing app.config with database_url unset must raise.",
- "id": "test_config_rationale_1"
- },
- {
- "label": "Settings() with empty DATABASE_URL \u2192 RuntimeError at instantiation.",
- "file_type": "rationale",
- "source_file": "backend/tests/test_config.py",
- "source_location": "L13",
- "community": 20,
- "norm_label": "settings() with empty database_url \u2192 runtimeerror at instantiation.",
- "id": "test_config_rationale_13"
- },
- {
- "label": "test_ingredient_schema.py",
- "file_type": "code",
- "source_file": "backend/tests/test_ingredient_schema.py",
- "source_location": "L1",
- "community": 2,
- "norm_label": "test_ingredient_schema.py",
- "id": "backend_tests_test_ingredient_schema_py"
- },
- {
- "label": "test_ingredient_create_normalizes_aliases()",
- "file_type": "code",
- "source_file": "backend/tests/test_ingredient_schema.py",
- "source_location": "L7",
- "community": 2,
- "norm_label": "test_ingredient_create_normalizes_aliases()",
- "id": "test_ingredient_schema_test_ingredient_create_normalizes_aliases"
- },
- {
- "label": "test_ingredient_match_read_round_trip()",
- "file_type": "code",
- "source_file": "backend/tests/test_ingredient_schema.py",
- "source_location": "L18",
- "community": 2,
- "norm_label": "test_ingredient_match_read_round_trip()",
- "id": "test_ingredient_schema_test_ingredient_match_read_round_trip"
- },
- {
- "label": "test_recipe_schema.py",
- "file_type": "code",
- "source_file": "backend/tests/test_recipe_schema.py",
- "source_location": "L1",
- "community": 2,
- "norm_label": "test_recipe_schema.py",
- "id": "backend_tests_test_recipe_schema_py"
- },
- {
- "label": "test_recipe_create_requires_canonical_ingredient_ids()",
- "file_type": "code",
- "source_file": "backend/tests/test_recipe_schema.py",
- "source_location": "L9",
- "community": 2,
- "norm_label": "test_recipe_create_requires_canonical_ingredient_ids()",
- "id": "test_recipe_schema_test_recipe_create_requires_canonical_ingredient_ids"
- },
- {
- "label": "test_recipe_create_rejects_empty_ingredients()",
- "file_type": "code",
- "source_file": "backend/tests/test_recipe_schema.py",
- "source_location": "L25",
- "community": 2,
- "norm_label": "test_recipe_create_rejects_empty_ingredients()",
- "id": "test_recipe_schema_test_recipe_create_rejects_empty_ingredients"
- },
- {
- "label": "test_resolve_ingredient_request_round_trip()",
- "file_type": "code",
- "source_file": "backend/tests/test_recipe_schema.py",
- "source_location": "L39",
- "community": 2,
- "norm_label": "test_resolve_ingredient_request_round_trip()",
- "id": "test_recipe_schema_test_resolve_ingredient_request_round_trip"
- },
- {
- "label": "test_recipe_api.py",
- "file_type": "code",
- "source_file": "backend/tests/test_recipe_api.py",
- "source_location": "L1",
- "community": 37,
- "norm_label": "test_recipe_api.py",
- "id": "backend_tests_test_recipe_api_py"
- },
- {
- "label": "_admin_headers()",
- "file_type": "code",
- "source_file": "backend/tests/test_recipe_api.py",
- "source_location": "L6",
- "community": 37,
- "norm_label": "_admin_headers()",
- "id": "test_recipe_api_admin_headers"
- },
- {
- "label": "_new_ingredient()",
- "file_type": "code",
- "source_file": "backend/tests/test_recipe_api.py",
- "source_location": "L10",
- "community": 37,
- "norm_label": "_new_ingredient()",
- "id": "test_recipe_api_new_ingredient"
- },
- {
- "label": "test_create_recipe_with_canonical_ingredients()",
- "file_type": "code",
- "source_file": "backend/tests/test_recipe_api.py",
- "source_location": "L20",
- "community": 37,
- "norm_label": "test_create_recipe_with_canonical_ingredients()",
- "id": "test_recipe_api_test_create_recipe_with_canonical_ingredients"
- },
- {
- "label": "test_create_recipe_rejects_unknown_ingredient_id()",
- "file_type": "code",
- "source_file": "backend/tests/test_recipe_api.py",
- "source_location": "L45",
- "community": 37,
- "norm_label": "test_create_recipe_rejects_unknown_ingredient_id()",
- "id": "test_recipe_api_test_create_recipe_rejects_unknown_ingredient_id"
- },
- {
- "label": "test_list_recipes_returns_seeded_data()",
- "file_type": "code",
- "source_file": "backend/tests/test_recipe_api.py",
- "source_location": "L63",
- "community": 37,
- "norm_label": "test_list_recipes_returns_seeded_data()",
- "id": "test_recipe_api_test_list_recipes_returns_seeded_data"
- },
- {
- "label": "test_resolve_ingredient.py",
- "file_type": "code",
- "source_file": "backend/tests/test_resolve_ingredient.py",
- "source_location": "L1",
- "community": 41,
- "norm_label": "test_resolve_ingredient.py",
- "id": "backend_tests_test_resolve_ingredient_py"
- },
- {
- "label": "_admin()",
- "file_type": "code",
- "source_file": "backend/tests/test_resolve_ingredient.py",
- "source_location": "L6",
- "community": 41,
- "norm_label": "_admin()",
- "id": "test_resolve_ingredient_admin"
- },
- {
- "label": "_seed_ingredient()",
- "file_type": "code",
- "source_file": "backend/tests/test_resolve_ingredient.py",
- "source_location": "L10",
- "community": 41,
- "norm_label": "_seed_ingredient()",
- "id": "test_resolve_ingredient_seed_ingredient"
- },
- {
- "label": "test_resolve_ingredient_returns_top_three_candidates()",
- "file_type": "code",
- "source_file": "backend/tests/test_resolve_ingredient.py",
- "source_location": "L19",
- "community": 41,
- "norm_label": "test_resolve_ingredient_returns_top_three_candidates()",
- "id": "test_resolve_ingredient_test_resolve_ingredient_returns_top_three_candidates"
- },
- {
- "label": "test_resolve_ingredient_handles_no_unit()",
- "file_type": "code",
- "source_file": "backend/tests/test_resolve_ingredient.py",
- "source_location": "L38",
- "community": 41,
- "norm_label": "test_resolve_ingredient_handles_no_unit()",
- "id": "test_resolve_ingredient_test_resolve_ingredient_handles_no_unit"
- },
- {
- "label": "test_matcher.py",
- "file_type": "code",
- "source_file": "backend/tests/test_matcher.py",
- "source_location": "L1",
- "community": 51,
- "norm_label": "test_matcher.py",
- "id": "backend_tests_test_matcher_py"
- },
- {
- "label": "test_build_match_pool_includes_aliases()",
- "file_type": "code",
- "source_file": "backend/tests/test_matcher.py",
- "source_location": "L6",
- "community": 51,
- "norm_label": "test_build_match_pool_includes_aliases()",
- "id": "test_matcher_test_build_match_pool_includes_aliases"
- },
- {
- "label": "test_rank_candidates_top_n_with_threshold()",
- "file_type": "code",
- "source_file": "backend/tests/test_matcher.py",
- "source_location": "L18",
- "community": 51,
- "norm_label": "test_rank_candidates_top_n_with_threshold()",
- "id": "test_matcher_test_rank_candidates_top_n_with_threshold"
- },
- {
- "label": "test_rank_candidates_drops_below_threshold()",
- "file_type": "code",
- "source_file": "backend/tests/test_matcher.py",
- "source_location": "L36",
- "community": 51,
- "norm_label": "test_rank_candidates_drops_below_threshold()",
- "id": "test_matcher_test_rank_candidates_drops_below_threshold"
- },
- {
- "label": "test_match_hook.py",
- "file_type": "code",
- "source_file": "backend/tests/test_match_hook.py",
- "source_location": "L1",
- "community": 0,
- "norm_label": "test_match_hook.py",
- "id": "backend_tests_test_match_hook_py"
- },
- {
- "label": "test_run_match_job_persists_top_matches()",
- "file_type": "code",
- "source_file": "backend/tests/test_match_hook.py",
- "source_location": "L6",
- "community": 0,
- "norm_label": "test_run_match_job_persists_top_matches()",
- "id": "test_match_hook_test_run_match_job_persists_top_matches"
- },
- {
- "label": "End-to-end: seed Ingredient + GroceryItem rows, run the matcher, verify ingr",
- "file_type": "rationale",
- "source_file": "backend/tests/test_match_hook.py",
- "source_location": "L7",
- "community": 0,
- "norm_label": "end-to-end: seed ingredient + groceryitem rows, run the matcher, verify ingr",
- "id": "test_match_hook_rationale_7"
- },
- {
- "label": "conftest.py",
- "file_type": "code",
- "source_file": "backend/tests/conftest.py",
- "source_location": "L1",
- "community": 26,
- "norm_label": "conftest.py",
- "id": "backend_tests_conftest_py"
- },
- {
- "label": "_resolve_test_dsn()",
- "file_type": "code",
- "source_file": "backend/tests/conftest.py",
- "source_location": "L45",
- "community": 26,
- "norm_label": "_resolve_test_dsn()",
- "id": "conftest_resolve_test_dsn"
- },
- {
- "label": "_postgres_reachable()",
- "file_type": "code",
- "source_file": "backend/tests/conftest.py",
- "source_location": "L54",
- "community": 26,
- "norm_label": "_postgres_reachable()",
- "id": "conftest_postgres_reachable"
- },
- {
- "label": "pytest_collection_modifyitems()",
- "file_type": "code",
- "source_file": "backend/tests/conftest.py",
- "source_location": "L72",
- "community": 26,
- "norm_label": "pytest_collection_modifyitems()",
- "id": "conftest_pytest_collection_modifyitems"
- },
- {
- "label": "pytest_configure()",
- "file_type": "code",
- "source_file": "backend/tests/conftest.py",
- "source_location": "L84",
- "community": 26,
- "norm_label": "pytest_configure()",
- "id": "conftest_pytest_configure"
- },
- {
- "label": "_schema()",
- "file_type": "code",
- "source_file": "backend/tests/conftest.py",
- "source_location": "L105",
- "community": 26,
- "norm_label": "_schema()",
- "id": "conftest_schema"
- },
- {
- "label": "_engine()",
- "file_type": "code",
- "source_file": "backend/tests/conftest.py",
- "source_location": "L129",
- "community": 26,
- "norm_label": "_engine()",
- "id": "conftest_engine"
- },
- {
- "label": "db()",
- "file_type": "code",
- "source_file": "backend/tests/conftest.py",
- "source_location": "L142",
- "community": 26,
- "norm_label": "db()",
- "id": "conftest_db"
- },
- {
- "label": "db_session()",
- "file_type": "code",
- "source_file": "backend/tests/conftest.py",
- "source_location": "L159",
- "community": 26,
- "norm_label": "db_session()",
- "id": "conftest_db_session"
- },
- {
- "label": "client()",
- "file_type": "code",
- "source_file": "backend/tests/conftest.py",
- "source_location": "L172",
- "community": 26,
- "norm_label": "client()",
- "id": "conftest_client"
- },
- {
- "label": "client_no_db()",
- "file_type": "code",
- "source_file": "backend/tests/conftest.py",
- "source_location": "L193",
- "community": 26,
- "norm_label": "client_no_db()",
- "id": "conftest_client_no_db"
- },
- {
- "label": "Pytest fixtures for MealPlanner backend. DB strategy ----------- - If env ``TES",
- "file_type": "rationale",
- "source_file": "backend/tests/conftest.py",
- "source_location": "L1",
- "community": 26,
- "norm_label": "pytest fixtures for mealplanner backend. db strategy ----------- - if env ``tes",
- "id": "conftest_rationale_1"
- },
- {
- "label": "Skip postgres-only tests when no live Postgres is available.",
- "file_type": "rationale",
- "source_file": "backend/tests/conftest.py",
- "source_location": "L73",
- "community": 26,
- "norm_label": "skip postgres-only tests when no live postgres is available.",
- "id": "conftest_rationale_73"
- },
- {
- "label": "Per-test transactional session that rolls back at teardown.",
- "file_type": "rationale",
- "source_file": "backend/tests/conftest.py",
- "source_location": "L143",
- "community": 26,
- "norm_label": "per-test transactional session that rolls back at teardown.",
- "id": "conftest_rationale_143"
- },
- {
- "label": "Plain SessionLocal for tests that need to seed data outside the transactiona",
- "file_type": "rationale",
- "source_file": "backend/tests/conftest.py",
- "source_location": "L160",
- "community": 26,
- "norm_label": "plain sessionlocal for tests that need to seed data outside the transactiona",
- "id": "conftest_rationale_160"
- },
- {
- "label": "TestClient with get_db overridden to yield the test session.",
- "file_type": "rationale",
- "source_file": "backend/tests/conftest.py",
- "source_location": "L173",
- "community": 26,
- "norm_label": "testclient with get_db overridden to yield the test session.",
- "id": "conftest_rationale_173"
- },
- {
- "label": "TestClient that does NOT require a live DB \u2014 for pure import/wiring smoke.",
- "file_type": "rationale",
- "source_file": "backend/tests/conftest.py",
- "source_location": "L194",
- "community": 26,
- "norm_label": "testclient that does not require a live db \u2014 for pure import/wiring smoke.",
- "id": "conftest_rationale_194"
- },
- {
- "label": "test_ingredient_api.py",
- "file_type": "code",
- "source_file": "backend/tests/test_ingredient_api.py",
- "source_location": "L1",
- "community": 34,
- "norm_label": "test_ingredient_api.py",
- "id": "backend_tests_test_ingredient_api_py"
- },
- {
- "label": "_admin_headers()",
- "file_type": "code",
- "source_file": "backend/tests/test_ingredient_api.py",
- "source_location": "L6",
- "community": 34,
- "norm_label": "_admin_headers()",
- "id": "test_ingredient_api_admin_headers"
- },
- {
- "label": "test_create_ingredient_returns_201_with_id()",
- "file_type": "code",
- "source_file": "backend/tests/test_ingredient_api.py",
- "source_location": "L10",
- "community": 34,
- "norm_label": "test_create_ingredient_returns_201_with_id()",
- "id": "test_ingredient_api_test_create_ingredient_returns_201_with_id"
- },
- {
- "label": "test_create_ingredient_rejects_duplicate_name()",
- "file_type": "code",
- "source_file": "backend/tests/test_ingredient_api.py",
- "source_location": "L24",
- "community": 34,
- "norm_label": "test_create_ingredient_rejects_duplicate_name()",
- "id": "test_ingredient_api_test_create_ingredient_rejects_duplicate_name"
- },
- {
- "label": "test_list_ingredients_supports_search()",
- "file_type": "code",
- "source_file": "backend/tests/test_ingredient_api.py",
- "source_location": "L32",
- "community": 34,
- "norm_label": "test_list_ingredients_supports_search()",
- "id": "test_ingredient_api_test_list_ingredients_supports_search"
- },
- {
- "label": "test_create_ingredient_requires_admin_token()",
- "file_type": "code",
- "source_file": "backend/tests/test_ingredient_api.py",
- "source_location": "L44",
- "community": 34,
- "norm_label": "test_create_ingredient_requires_admin_token()",
- "id": "test_ingredient_api_test_create_ingredient_requires_admin_token"
- },
- {
- "label": "test_update_ingredient_replaces_aliases()",
- "file_type": "code",
- "source_file": "backend/tests/test_ingredient_api.py",
- "source_location": "L50",
- "community": 34,
- "norm_label": "test_update_ingredient_replaces_aliases()",
- "id": "test_ingredient_api_test_update_ingredient_replaces_aliases"
- },
- {
- "label": "_seed_grocery()",
- "file_type": "code",
- "source_file": "backend/tests/test_ingredient_api.py",
- "source_location": "L66",
- "community": 34,
- "norm_label": "_seed_grocery()",
- "id": "test_ingredient_api_seed_grocery"
- },
- {
- "label": "test_pin_manual_match()",
- "file_type": "code",
- "source_file": "backend/tests/test_ingredient_api.py",
- "source_location": "L90",
- "community": 34,
- "norm_label": "test_pin_manual_match()",
- "id": "test_ingredient_api_test_pin_manual_match"
- },
- {
- "label": "test_unpin_manual_match()",
- "file_type": "code",
- "source_file": "backend/tests/test_ingredient_api.py",
- "source_location": "L110",
- "community": 34,
- "norm_label": "test_unpin_manual_match()",
- "id": "test_ingredient_api_test_unpin_manual_match"
- },
- {
- "label": "test_delete_ingredient_removes_row()",
- "file_type": "code",
- "source_file": "backend/tests/test_ingredient_api.py",
- "source_location": "L128",
- "community": 34,
- "norm_label": "test_delete_ingredient_removes_row()",
- "id": "test_ingredient_api_test_delete_ingredient_removes_row"
- },
- {
- "label": "test_never_suggest_api.py",
- "file_type": "code",
- "source_file": "backend/tests/test_never_suggest_api.py",
- "source_location": "L1",
- "community": 0,
- "norm_label": "test_never_suggest_api.py",
- "id": "backend_tests_test_never_suggest_api_py"
- },
- {
- "label": "_admin()",
- "file_type": "code",
- "source_file": "backend/tests/test_never_suggest_api.py",
- "source_location": "L6",
- "community": 0,
- "norm_label": "_admin()",
- "id": "test_never_suggest_api_admin"
- },
- {
- "label": "_seed_family()",
- "file_type": "code",
- "source_file": "backend/tests/test_never_suggest_api.py",
- "source_location": "L10",
- "community": 0,
- "norm_label": "_seed_family()",
- "id": "test_never_suggest_api_seed_family"
- },
- {
- "label": "test_block_ingredient()",
- "file_type": "code",
- "source_file": "backend/tests/test_never_suggest_api.py",
- "source_location": "L29",
- "community": 0,
- "norm_label": "test_block_ingredient()",
- "id": "test_never_suggest_api_test_block_ingredient"
- },
- {
- "label": "test_list_never_suggest_for_family()",
- "file_type": "code",
- "source_file": "backend/tests/test_never_suggest_api.py",
- "source_location": "L46",
- "community": 0,
- "norm_label": "test_list_never_suggest_for_family()",
- "id": "test_never_suggest_api_test_list_never_suggest_for_family"
- },
- {
- "label": "test_unblock_removes_row()",
- "file_type": "code",
- "source_file": "backend/tests/test_never_suggest_api.py",
- "source_location": "L63",
- "community": 0,
- "norm_label": "test_unblock_removes_row()",
- "id": "test_never_suggest_api_test_unblock_removes_row"
- },
- {
- "label": "test_thin_phase4_smoke.py",
- "file_type": "code",
- "source_file": "backend/tests/test_thin_phase4_smoke.py",
- "source_location": "L1",
- "community": 38,
- "norm_label": "test_thin_phase4_smoke.py",
- "id": "backend_tests_test_thin_phase4_smoke_py"
- },
- {
- "label": "_admin()",
- "file_type": "code",
- "source_file": "backend/tests/test_thin_phase4_smoke.py",
- "source_location": "L7",
- "community": 38,
- "norm_label": "_admin()",
- "id": "test_thin_phase4_smoke_admin"
- },
- {
- "label": "test_seed_data_present_and_resolvable()",
- "file_type": "code",
- "source_file": "backend/tests/test_thin_phase4_smoke.py",
- "source_location": "L11",
- "community": 38,
- "norm_label": "test_seed_data_present_and_resolvable()",
- "id": "test_thin_phase4_smoke_test_seed_data_present_and_resolvable"
- },
- {
- "label": "test_resolve_against_seeded_ingredients()",
- "file_type": "code",
- "source_file": "backend/tests/test_thin_phase4_smoke.py",
- "source_location": "L18",
- "community": 38,
- "norm_label": "test_resolve_against_seeded_ingredients()",
- "id": "test_thin_phase4_smoke_test_resolve_against_seeded_ingredients"
- },
- {
- "label": "test_match_job_runs_against_seeded_data()",
- "file_type": "code",
- "source_file": "backend/tests/test_thin_phase4_smoke.py",
- "source_location": "L30",
- "community": 38,
- "norm_label": "test_match_job_runs_against_seeded_data()",
- "id": "test_thin_phase4_smoke_test_match_job_runs_against_seeded_data"
- },
- {
- "label": "End-to-end: ingredient + recipe + match all wired together.",
- "file_type": "rationale",
- "source_file": "backend/tests/test_thin_phase4_smoke.py",
- "source_location": "L1",
- "community": 38,
- "norm_label": "end-to-end: ingredient + recipe + match all wired together.",
- "id": "test_thin_phase4_smoke_rationale_1"
- },
- {
- "label": "test_planner_cost.py",
- "file_type": "code",
- "source_file": "backend/tests/test_planner_cost.py",
- "source_location": "L1",
- "community": 32,
- "norm_label": "test_planner_cost.py",
- "id": "backend_tests_test_planner_cost_py"
- },
- {
- "label": "_ingredient()",
- "file_type": "code",
- "source_file": "backend/tests/test_planner_cost.py",
- "source_location": "L10",
- "community": 32,
- "norm_label": "_ingredient()",
- "id": "test_planner_cost_ingredient"
- },
- {
- "label": "_match()",
- "file_type": "code",
- "source_file": "backend/tests/test_planner_cost.py",
- "source_location": "L14",
- "community": 32,
- "norm_label": "_match()",
- "id": "test_planner_cost_match"
- },
- {
- "label": "test_compute_recipe_cost_sums_ingredient_costs()",
- "file_type": "code",
- "source_file": "backend/tests/test_planner_cost.py",
- "source_location": "L25",
- "community": 32,
- "norm_label": "test_compute_recipe_cost_sums_ingredient_costs()",
- "id": "test_planner_cost_test_compute_recipe_cost_sums_ingredient_costs"
- },
- {
- "label": "test_unmatched_ingredient_zero_cost_and_savings()",
- "file_type": "code",
- "source_file": "backend/tests/test_planner_cost.py",
- "source_location": "L51",
- "community": 32,
- "norm_label": "test_unmatched_ingredient_zero_cost_and_savings()",
- "id": "test_planner_cost_test_unmatched_ingredient_zero_cost_and_savings"
- },
- {
- "label": "test_pantry_hits_counted()",
- "file_type": "code",
- "source_file": "backend/tests/test_planner_cost.py",
- "source_location": "L65",
- "community": 32,
- "norm_label": "test_pantry_hits_counted()",
- "id": "test_planner_cost_test_pantry_hits_counted"
- },
- {
- "label": "test_planner_filter.py",
- "file_type": "code",
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L1",
- "community": 6,
- "norm_label": "test_planner_filter.py",
- "id": "backend_tests_test_planner_filter_py"
- },
- {
- "label": "_recipe()",
- "file_type": "code",
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L15",
- "community": 6,
- "norm_label": "_recipe()",
- "id": "test_planner_filter_recipe"
- },
- {
- "label": "_cost()",
- "file_type": "code",
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L35",
- "community": 6,
- "norm_label": "_cost()",
- "id": "test_planner_filter_cost"
- },
- {
- "label": "test_filter_blocks_by_never_suggest_ingredient()",
- "file_type": "code",
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L48",
- "community": 6,
- "norm_label": "test_filter_blocks_by_never_suggest_ingredient()",
- "id": "test_planner_filter_test_filter_blocks_by_never_suggest_ingredient"
- },
- {
- "label": "test_filter_blocks_by_never_suggest_recipe()",
- "file_type": "code",
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L70",
- "community": 6,
- "norm_label": "test_filter_blocks_by_never_suggest_recipe()",
- "id": "test_planner_filter_test_filter_blocks_by_never_suggest_recipe"
- },
- {
- "label": "test_filter_blocks_by_recency()",
- "file_type": "code",
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L87",
- "community": 6,
- "norm_label": "test_filter_blocks_by_recency()",
- "id": "test_planner_filter_test_filter_blocks_by_recency"
- },
- {
- "label": "test_filter_blocks_by_calories()",
- "file_type": "code",
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L104",
- "community": 6,
- "norm_label": "test_filter_blocks_by_calories()",
- "id": "test_planner_filter_test_filter_blocks_by_calories"
- },
- {
- "label": "test_filter_blocks_by_time()",
- "file_type": "code",
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L122",
- "community": 6,
- "norm_label": "test_filter_blocks_by_time()",
- "id": "test_planner_filter_test_filter_blocks_by_time"
- },
- {
- "label": "test_filter_blocks_by_cost()",
- "file_type": "code",
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L140",
- "community": 6,
- "norm_label": "test_filter_blocks_by_cost()",
- "id": "test_planner_filter_test_filter_blocks_by_cost"
- },
- {
- "label": "test_filter_passes_when_calorie_target_is_none()",
- "file_type": "code",
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L158",
- "community": 6,
- "norm_label": "test_filter_passes_when_calorie_target_is_none()",
- "id": "test_planner_filter_test_filter_passes_when_calorie_target_is_none"
- },
- {
- "label": "test_filter_blocks_recipe_with_null_calories_when_target_set()",
- "file_type": "code",
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L174",
- "community": 6,
- "norm_label": "test_filter_blocks_recipe_with_null_calories_when_target_set()",
- "id": "test_planner_filter_test_filter_blocks_recipe_with_null_calories_when_target_set"
- },
- {
- "label": "test_planner_score.py",
- "file_type": "code",
- "source_file": "backend/tests/test_planner_score.py",
- "source_location": "L1",
- "community": 6,
- "norm_label": "test_planner_score.py",
- "id": "backend_tests_test_planner_score_py"
- },
- {
- "label": "test_time_bonus_capped_at_ideal()",
- "file_type": "code",
- "source_file": "backend/tests/test_planner_score.py",
- "source_location": "L18",
- "community": 6,
- "norm_label": "test_time_bonus_capped_at_ideal()",
- "id": "test_planner_score_test_time_bonus_capped_at_ideal"
- },
- {
- "label": "test_time_bonus_decays_to_zero_at_full()",
- "file_type": "code",
- "source_file": "backend/tests/test_planner_score.py",
- "source_location": "L23",
- "community": 6,
- "norm_label": "test_time_bonus_decays_to_zero_at_full()",
- "id": "test_planner_score_test_time_bonus_decays_to_zero_at_full"
- },
- {
- "label": "test_time_bonus_linear_midpoint()",
- "file_type": "code",
- "source_file": "backend/tests/test_planner_score.py",
- "source_location": "L27",
- "community": 6,
- "norm_label": "test_time_bonus_linear_midpoint()",
- "id": "test_planner_score_test_time_bonus_linear_midpoint"
- },
- {
- "label": "test_recency_bonus_full_when_long_ago()",
- "file_type": "code",
- "source_file": "backend/tests/test_planner_score.py",
- "source_location": "L32",
- "community": 6,
- "norm_label": "test_recency_bonus_full_when_long_ago()",
- "id": "test_planner_score_test_recency_bonus_full_when_long_ago"
- },
- {
- "label": "test_recency_bonus_zero_when_just_eligible()",
- "file_type": "code",
- "source_file": "backend/tests/test_planner_score.py",
- "source_location": "L38",
- "community": 6,
- "norm_label": "test_recency_bonus_zero_when_just_eligible()",
- "id": "test_planner_score_test_recency_bonus_zero_when_just_eligible"
- },
- {
- "label": "test_recency_bonus_full_when_never_cooked()",
- "file_type": "code",
- "source_file": "backend/tests/test_planner_score.py",
- "source_location": "L45",
- "community": 6,
- "norm_label": "test_recency_bonus_full_when_never_cooked()",
- "id": "test_planner_score_test_recency_bonus_full_when_never_cooked"
- },
- {
- "label": "test_normalize_savings_minmax()",
- "file_type": "code",
- "source_file": "backend/tests/test_planner_score.py",
- "source_location": "L49",
- "community": 6,
- "norm_label": "test_normalize_savings_minmax()",
- "id": "test_planner_score_test_normalize_savings_minmax"
- },
- {
- "label": "test_normalize_savings_uniform_returns_zeros()",
- "file_type": "code",
- "source_file": "backend/tests/test_planner_score.py",
- "source_location": "L54",
- "community": 6,
- "norm_label": "test_normalize_savings_uniform_returns_zeros()",
- "id": "test_planner_score_test_normalize_savings_uniform_returns_zeros"
- },
- {
- "label": "test_score_recipes_orders_by_combined_score()",
- "file_type": "code",
- "source_file": "backend/tests/test_planner_score.py",
- "source_location": "L59",
- "community": 6,
- "norm_label": "test_score_recipes_orders_by_combined_score()",
- "id": "test_planner_score_test_score_recipes_orders_by_combined_score"
- },
- {
- "label": "test_planner_select.py",
- "file_type": "code",
- "source_file": "backend/tests/test_planner_select.py",
- "source_location": "L1",
- "community": 6,
- "norm_label": "test_planner_select.py",
- "id": "backend_tests_test_planner_select_py"
- },
- {
- "label": "_mk()",
- "file_type": "code",
- "source_file": "backend/tests/test_planner_select.py",
- "source_location": "L12",
- "community": 6,
- "norm_label": "_mk()",
- "id": "test_planner_select_mk"
- },
- {
- "label": "test_diversity_penalty_zero_when_all_unique()",
- "file_type": "code",
- "source_file": "backend/tests/test_planner_select.py",
- "source_location": "L33",
- "community": 6,
- "norm_label": "test_diversity_penalty_zero_when_all_unique()",
- "id": "test_planner_select_test_diversity_penalty_zero_when_all_unique"
- },
- {
- "label": "test_diversity_penalty_three_chickens()",
- "file_type": "code",
- "source_file": "backend/tests/test_planner_select.py",
- "source_location": "L40",
- "community": 6,
- "norm_label": "test_diversity_penalty_three_chickens()",
- "id": "test_planner_select_test_diversity_penalty_three_chickens"
- },
- {
- "label": "test_select_set_picks_diverse_over_homogeneous()",
- "file_type": "code",
- "source_file": "backend/tests/test_planner_select.py",
- "source_location": "L49",
- "community": 6,
- "norm_label": "test_select_set_picks_diverse_over_homogeneous()",
- "id": "test_planner_select_test_select_set_picks_diverse_over_homogeneous"
- },
- {
- "label": "test_select_set_handles_too_few()",
- "file_type": "code",
- "source_file": "backend/tests/test_planner_select.py",
- "source_location": "L68",
- "community": 6,
- "norm_label": "test_select_set_handles_too_few()",
- "id": "test_planner_select_test_select_set_handles_too_few"
- },
- {
- "label": "test_select_set_empty_input()",
- "file_type": "code",
- "source_file": "backend/tests/test_planner_select.py",
- "source_location": "L75",
- "community": 6,
- "norm_label": "test_select_set_empty_input()",
- "id": "test_planner_select_test_select_set_empty_input"
- },
- {
- "label": "Three chicken/american (each 0.95) lose to fully-diverse mixed (each 0.90) o",
- "file_type": "rationale",
- "source_file": "backend/tests/test_planner_select.py",
- "source_location": "L50",
- "community": 6,
- "norm_label": "three chicken/american (each 0.95) lose to fully-diverse mixed (each 0.90) o",
- "id": "test_planner_select_rationale_50"
- },
- {
- "label": "test_planner_generate.py",
- "file_type": "code",
- "source_file": "backend/tests/test_planner_generate.py",
- "source_location": "L1",
- "community": 0,
- "norm_label": "test_planner_generate.py",
- "id": "backend_tests_test_planner_generate_py"
- },
- {
- "label": "test_generate_meal_plan_against_seeded_data()",
- "file_type": "code",
- "source_file": "backend/tests/test_planner_generate.py",
- "source_location": "L10",
- "community": 0,
- "norm_label": "test_generate_meal_plan_against_seeded_data()",
- "id": "test_planner_generate_test_generate_meal_plan_against_seeded_data"
- },
- {
- "label": "Smoke test: with the seeded 30 recipes and a seeded grocery scrape, generate",
- "file_type": "rationale",
- "source_file": "backend/tests/test_planner_generate.py",
- "source_location": "L11",
- "community": 0,
- "norm_label": "smoke test: with the seeded 30 recipes and a seeded grocery scrape, generate",
- "id": "test_planner_generate_rationale_11"
- },
- {
- "label": "test_meal_plan_generate_api.py",
- "file_type": "code",
- "source_file": "backend/tests/test_meal_plan_generate_api.py",
- "source_location": "L1",
- "community": 0,
- "norm_label": "test_meal_plan_generate_api.py",
- "id": "backend_tests_test_meal_plan_generate_api_py"
- },
- {
- "label": "_admin()",
- "file_type": "code",
- "source_file": "backend/tests/test_meal_plan_generate_api.py",
- "source_location": "L10",
- "community": 0,
- "norm_label": "_admin()",
- "id": "test_meal_plan_generate_api_admin"
- },
- {
- "label": "family_with_groceries()",
- "file_type": "code",
- "source_file": "backend/tests/test_meal_plan_generate_api.py",
- "source_location": "L15",
- "community": 0,
- "norm_label": "family_with_groceries()",
- "id": "test_meal_plan_generate_api_family_with_groceries"
- },
- {
- "label": "test_generate_endpoint_returns_meal_plan()",
- "file_type": "code",
- "source_file": "backend/tests/test_meal_plan_generate_api.py",
- "source_location": "L50",
- "community": 0,
- "norm_label": "test_generate_endpoint_returns_meal_plan()",
- "id": "test_meal_plan_generate_api_test_generate_endpoint_returns_meal_plan"
- },
- {
- "label": "test_generate_endpoint_requires_admin_token()",
- "file_type": "code",
- "source_file": "backend/tests/test_meal_plan_generate_api.py",
- "source_location": "L64",
- "community": 0,
- "norm_label": "test_generate_endpoint_requires_admin_token()",
- "id": "test_meal_plan_generate_api_test_generate_endpoint_requires_admin_token"
- },
- {
- "label": "test_generate_endpoint_returns_404_for_unknown_family()",
- "file_type": "code",
- "source_file": "backend/tests/test_meal_plan_generate_api.py",
- "source_location": "L73",
- "community": 0,
- "norm_label": "test_generate_endpoint_returns_404_for_unknown_family()",
- "id": "test_meal_plan_generate_api_test_generate_endpoint_returns_404_for_unknown_family"
- },
- {
- "label": "test_swiftly_auth.py",
- "file_type": "code",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L1",
- "community": 4,
- "norm_label": "test_swiftly_auth.py",
- "id": "backend_tests_test_swiftly_auth_py"
- },
- {
- "label": "_clear_cache()",
- "file_type": "code",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L34",
- "community": 4,
- "norm_label": "_clear_cache()",
- "id": "test_swiftly_auth_clear_cache"
- },
- {
- "label": "_b64url()",
- "file_type": "code",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L40",
- "community": 4,
- "norm_label": "_b64url()",
- "id": "test_swiftly_auth_b64url"
- },
- {
- "label": "_make_jwt()",
- "file_type": "code",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L44",
- "community": 4,
- "norm_label": "_make_jwt()",
- "id": "test_swiftly_auth_make_jwt"
- },
- {
- "label": "_config_response()",
- "file_type": "code",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L53",
- "community": 4,
- "norm_label": "_config_response()",
- "id": "test_swiftly_auth_config_response"
- },
- {
- "label": "_signup_response()",
- "file_type": "code",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L60",
- "community": 4,
- "norm_label": "_signup_response()",
- "id": "test_swiftly_auth_signup_response"
- },
- {
- "label": "test_get_token_mints_fresh_when_cache_empty()",
- "file_type": "code",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L71",
- "community": 4,
- "norm_label": "test_get_token_mints_fresh_when_cache_empty()",
- "id": "test_swiftly_auth_test_get_token_mints_fresh_when_cache_empty"
- },
- {
- "label": "test_get_token_returns_cached_without_reminting()",
- "file_type": "code",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L99",
- "community": 4,
- "norm_label": "test_get_token_returns_cached_without_reminting()",
- "id": "test_swiftly_auth_test_get_token_returns_cached_without_reminting"
- },
- {
- "label": "test_get_token_remints_when_cached_token_near_expiry()",
- "file_type": "code",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L118",
- "community": 4,
- "norm_label": "test_get_token_remints_when_cached_token_near_expiry()",
- "id": "test_swiftly_auth_test_get_token_remints_when_cached_token_near_expiry"
- },
- {
- "label": "test_mint_raises_on_firebase_non_200()",
- "file_type": "code",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L140",
- "community": 4,
- "norm_label": "test_mint_raises_on_firebase_non_200()",
- "id": "test_swiftly_auth_test_mint_raises_on_firebase_non_200"
- },
- {
- "label": "Offline tests for swiftly_auth \u2014 Firebase REST anon-signUp + cache. All tests r",
- "file_type": "rationale",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L1",
- "community": 4,
- "norm_label": "offline tests for swiftly_auth \u2014 firebase rest anon-signup + cache. all tests r",
- "id": "test_swiftly_auth_rationale_1"
- },
- {
- "label": "First call fetches config.json, posts to Firebase, returns idToken.",
- "file_type": "rationale",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L72",
- "community": 4,
- "norm_label": "first call fetches config.json, posts to firebase, returns idtoken.",
- "id": "test_swiftly_auth_rationale_72"
- },
- {
- "label": "Second call within the refresh window does NOT re-hit Firebase.",
- "file_type": "rationale",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L100",
- "community": 4,
- "norm_label": "second call within the refresh window does not re-hit firebase.",
- "id": "test_swiftly_auth_rationale_100"
- },
- {
- "label": "A cached token within the refresh-margin window triggers a re-mint.",
- "file_type": "rationale",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L119",
- "community": 4,
- "norm_label": "a cached token within the refresh-margin window triggers a re-mint.",
- "id": "test_swiftly_auth_rationale_119"
- },
- {
- "label": "Firebase 403/400/etc. surfaces as SwiftlyAuthMintError with status detail.",
- "file_type": "rationale",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L141",
- "community": 4,
- "norm_label": "firebase 403/400/etc. surfaces as swiftlyauthminterror with status detail.",
- "id": "test_swiftly_auth_rationale_141"
- },
- {
- "label": "test_swiftly_api.py",
- "file_type": "code",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L1",
- "community": 4,
- "norm_label": "test_swiftly_api.py",
- "id": "backend_tests_test_swiftly_api_py"
- },
- {
- "label": "test_parse_categories_fixture()",
- "file_type": "code",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L40",
- "community": 4,
- "norm_label": "test_parse_categories_fixture()",
- "id": "test_swiftly_api_test_parse_categories_fixture"
- },
- {
- "label": "test_parse_category_response_fixture()",
- "file_type": "code",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L57",
- "community": 4,
- "norm_label": "test_parse_category_response_fixture()",
- "id": "test_swiftly_api_test_parse_category_response_fixture"
- },
- {
- "label": "test_map_product_returns_none_for_unparseable()",
- "file_type": "code",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L107",
- "community": 4,
- "norm_label": "test_map_product_returns_none_for_unparseable()",
- "id": "test_swiftly_api_test_map_product_returns_none_for_unparseable"
- },
- {
- "label": "_mock_response()",
- "file_type": "code",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L121",
- "community": 4,
- "norm_label": "_mock_response()",
- "id": "test_swiftly_api_mock_response"
- },
- {
- "label": "test_swiftly_auth_error_on_401_from_api()",
- "file_type": "code",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L135",
- "community": 4,
- "norm_label": "test_swiftly_auth_error_on_401_from_api()",
- "id": "test_swiftly_api_test_swiftly_auth_error_on_401_from_api"
- },
- {
- "label": "test_fetch_category_mints_token_when_none_pinned()",
- "file_type": "code",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L146",
- "community": 4,
- "norm_label": "test_fetch_category_mints_token_when_none_pinned()",
- "id": "test_swiftly_api_test_fetch_category_mints_token_when_none_pinned"
- },
- {
- "label": "test_background_runner_writes_failed_with_token_message()",
- "file_type": "code",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L171",
- "community": 4,
- "norm_label": "test_background_runner_writes_failed_with_token_message()",
- "id": "test_swiftly_api_test_background_runner_writes_failed_with_token_message"
- },
- {
- "label": "Offline tests for the Swiftly product-API client (R3-0). All tests run against",
- "file_type": "rationale",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L1",
- "community": 4,
- "norm_label": "offline tests for the swiftly product-api client (r3-0). all tests run against",
- "id": "test_swiftly_api_rationale_1"
- },
- {
- "label": "Parser returns >=10 distinct API slugs from the captured page.",
- "file_type": "rationale",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L41",
- "community": 4,
- "norm_label": "parser returns >=10 distinct api slugs from the captured page.",
- "id": "test_swiftly_api_rationale_41"
- },
- {
- "label": "Parser returns >=10 product dicts each with the mapped fields populated.",
- "file_type": "rationale",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L58",
- "community": 4,
- "norm_label": "parser returns >=10 product dicts each with the mapped fields populated.",
- "id": "test_swiftly_api_rationale_58"
- },
- {
- "label": "Products with no name AND no parseable price are dropped.",
- "file_type": "rationale",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L108",
- "community": 4,
- "norm_label": "products with no name and no parseable price are dropped.",
- "id": "test_swiftly_api_rationale_108"
- },
- {
- "label": "A 401 from the API host raises SwiftlyAuthError before raise_for_status.",
- "file_type": "rationale",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L136",
- "community": 4,
- "norm_label": "a 401 from the api host raises swiftlyautherror before raise_for_status.",
- "id": "test_swiftly_api_rationale_136"
- },
- {
- "label": "With no explicit bearer_token, fetch_category calls swiftly_auth.get_token()",
- "file_type": "rationale",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L147",
- "community": 4,
- "norm_label": "with no explicit bearer_token, fetch_category calls swiftly_auth.get_token()",
- "id": "test_swiftly_api_rationale_147"
- },
- {
- "label": "A 401 during the background scrape lands in ScrapeLog as FAILED + message.",
- "file_type": "rationale",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L172",
- "community": 4,
- "norm_label": "a 401 during the background scrape lands in scrapelog as failed + message.",
- "id": "test_swiftly_api_rationale_172"
- },
- {
- "label": "test_email_backend.py",
- "file_type": "code",
- "source_file": "backend/tests/test_email_backend.py",
- "source_location": "L1",
- "community": 5,
- "norm_label": "test_email_backend.py",
- "id": "backend_tests_test_email_backend_py"
- },
- {
- "label": "test_sendgrid_send_calls_api()",
- "file_type": "code",
- "source_file": "backend/tests/test_email_backend.py",
- "source_location": "L5",
- "community": 5,
- "norm_label": "test_sendgrid_send_calls_api()",
- "id": "test_email_backend_test_sendgrid_send_calls_api"
- },
- {
- "label": "test_sendgrid_raises_on_4xx()",
- "file_type": "code",
- "source_file": "backend/tests/test_email_backend.py",
- "source_location": "L26",
- "community": 5,
- "norm_label": "test_sendgrid_raises_on_4xx()",
- "id": "test_email_backend_test_sendgrid_raises_on_4xx"
- },
- {
- "label": "Unit tests for SendGridEmailBackend \u2014 no Postgres needed.",
- "file_type": "rationale",
- "source_file": "backend/tests/test_email_backend.py",
- "source_location": "L1",
- "community": 5,
- "norm_label": "unit tests for sendgridemailbackend \u2014 no postgres needed.",
- "id": "test_email_backend_rationale_1"
- },
- {
- "label": "test_orchestrator.py",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L1",
- "community": 5,
- "norm_label": "test_orchestrator.py",
- "id": "backend_tests_test_orchestrator_py"
- },
- {
- "label": "family()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L15",
- "community": 0,
- "norm_label": "family()",
- "id": "test_orchestrator_family"
- },
- {
- "label": "member()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L31",
- "community": 0,
- "norm_label": "member()",
- "id": "test_orchestrator_member"
- },
- {
- "label": "weekly_run()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L46",
- "community": 5,
- "norm_label": "weekly_run()",
- "id": "test_orchestrator_weekly_run"
- },
- {
- "label": "weekly_run_scraped()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L55",
- "community": 5,
- "norm_label": "weekly_run_scraped()",
- "id": "test_orchestrator_weekly_run_scraped"
- },
- {
- "label": "weekly_run_generated()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L69",
- "community": 5,
- "norm_label": "weekly_run_generated()",
- "id": "test_orchestrator_weekly_run_generated"
- },
- {
- "label": "meal_plan()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L84",
- "community": 0,
- "norm_label": "meal_plan()",
- "id": "test_orchestrator_meal_plan"
- },
- {
- "label": "pending_item()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L98",
- "community": 0,
- "norm_label": "pending_item()",
- "id": "test_orchestrator_pending_item"
- },
- {
- "label": "weekly_run_emailed()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L123",
- "community": 5,
- "norm_label": "weekly_run_emailed()",
- "id": "test_orchestrator_weekly_run_emailed"
- },
- {
- "label": "weekly_run_reminded()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L139",
- "community": 5,
- "norm_label": "weekly_run_reminded()",
- "id": "test_orchestrator_weekly_run_reminded"
- },
- {
- "label": "test_send_admin_alert_noop_when_email_unset()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L159",
- "community": 5,
- "norm_label": "test_send_admin_alert_noop_when_email_unset()",
- "id": "test_orchestrator_test_send_admin_alert_noop_when_email_unset"
- },
- {
- "label": "test_send_admin_alert_calls_backend()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L168",
- "community": 5,
- "norm_label": "test_send_admin_alert_calls_backend()",
- "id": "test_orchestrator_test_send_admin_alert_calls_backend"
- },
- {
- "label": "test_step_scrape_idempotent()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L194",
- "community": 5,
- "norm_label": "test_step_scrape_idempotent()",
- "id": "test_orchestrator_test_step_scrape_idempotent"
- },
- {
- "label": "test_step_scrape_success()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L201",
- "community": 5,
- "norm_label": "test_step_scrape_success()",
- "id": "test_orchestrator_test_step_scrape_success"
- },
- {
- "label": "test_step_scrape_both_fail_marks_stale()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L212",
- "community": 5,
- "norm_label": "test_step_scrape_both_fail_marks_stale()",
- "id": "test_orchestrator_test_step_scrape_both_fail_marks_stale"
- },
- {
- "label": "test_step_generate_idempotent()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L231",
- "community": 5,
- "norm_label": "test_step_generate_idempotent()",
- "id": "test_orchestrator_test_step_generate_idempotent"
- },
- {
- "label": "test_step_generate_creates_plan()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L238",
- "community": 5,
- "norm_label": "test_step_generate_creates_plan()",
- "id": "test_orchestrator_test_step_generate_creates_plan"
- },
- {
- "label": "test_step_generate_records_error_on_failure()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L257",
- "community": 5,
- "norm_label": "test_step_generate_records_error_on_failure()",
- "id": "test_orchestrator_test_step_generate_records_error_on_failure"
- },
- {
- "label": "test_step_email_idempotent()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L276",
- "community": 5,
- "norm_label": "test_step_email_idempotent()",
- "id": "test_orchestrator_test_step_email_idempotent"
- },
- {
- "label": "test_step_email_sends_per_member()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L283",
- "community": 5,
- "norm_label": "test_step_email_sends_per_member()",
- "id": "test_orchestrator_test_step_email_sends_per_member"
- },
- {
- "label": "test_step_email_stale_banner()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L302",
- "community": 5,
- "norm_label": "test_step_email_stale_banner()",
- "id": "test_orchestrator_test_step_email_stale_banner"
- },
- {
- "label": "test_step_email_escapes_recipe_name()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L319",
- "community": 5,
- "norm_label": "test_step_email_escapes_recipe_name()",
- "id": "test_orchestrator_test_step_email_escapes_recipe_name"
- },
- {
- "label": "test_step_reminder_idempotent()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L345",
- "community": 5,
- "norm_label": "test_step_reminder_idempotent()",
- "id": "test_orchestrator_test_step_reminder_idempotent"
- },
- {
- "label": "test_step_reminder_skips_when_not_emailed()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L352",
- "community": 5,
- "norm_label": "test_step_reminder_skips_when_not_emailed()",
- "id": "test_orchestrator_test_step_reminder_skips_when_not_emailed"
- },
- {
- "label": "test_step_reminder_sends_to_non_voter()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L370",
- "community": 5,
- "norm_label": "test_step_reminder_sends_to_non_voter()",
- "id": "test_orchestrator_test_step_reminder_sends_to_non_voter"
- },
- {
- "label": "test_step_reminder_skips_voter()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L391",
- "community": 5,
- "norm_label": "test_step_reminder_skips_voter()",
- "id": "test_orchestrator_test_step_reminder_skips_voter"
- },
- {
- "label": "test_step_reminder_no_sends_when_all_voted()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L420",
- "community": 5,
- "norm_label": "test_step_reminder_no_sends_when_all_voted()",
- "id": "test_orchestrator_test_step_reminder_no_sends_when_all_voted"
- },
- {
- "label": "test_step_deadline_idempotent()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L454",
- "community": 5,
- "norm_label": "test_step_deadline_idempotent()",
- "id": "test_orchestrator_test_step_deadline_idempotent"
- },
- {
- "label": "test_step_deadline_resolves_pending_to_approved()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L463",
- "community": 5,
- "norm_label": "test_step_deadline_resolves_pending_to_approved()",
- "id": "test_orchestrator_test_step_deadline_resolves_pending_to_approved"
- },
- {
- "label": "test_step_deadline_resolves_pending_to_denied()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L474",
- "community": 5,
- "norm_label": "test_step_deadline_resolves_pending_to_denied()",
- "id": "test_orchestrator_test_step_deadline_resolves_pending_to_denied"
- },
- {
- "label": "weekly_run_deadline_passed()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L489",
- "community": 5,
- "norm_label": "weekly_run_deadline_passed()",
- "id": "test_orchestrator_weekly_run_deadline_passed"
- },
- {
- "label": "approved_item()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L506",
- "community": 0,
- "norm_label": "approved_item()",
- "id": "test_orchestrator_approved_item"
- },
- {
- "label": "test_step_finalize_idempotent()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L530",
- "community": 5,
- "norm_label": "test_step_finalize_idempotent()",
- "id": "test_orchestrator_test_step_finalize_idempotent"
- },
- {
- "label": "test_step_finalize_sends_shopping_list()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L539",
- "community": 5,
- "norm_label": "test_step_finalize_sends_shopping_list()",
- "id": "test_orchestrator_test_step_finalize_sends_shopping_list"
- },
- {
- "label": "test_step_finalize_no_approved_sends_empty_message()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L559",
- "community": 5,
- "norm_label": "test_step_finalize_no_approved_sends_empty_message()",
- "id": "test_orchestrator_test_step_finalize_no_approved_sends_empty_message"
- },
- {
- "label": "test_run_step_upserts_weekly_run()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L580",
- "community": 5,
- "norm_label": "test_run_step_upserts_weekly_run()",
- "id": "test_orchestrator_test_run_step_upserts_weekly_run"
- },
- {
- "label": "test_run_step_invalid_raises()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L606",
- "community": 5,
- "norm_label": "test_run_step_invalid_raises()",
- "id": "test_orchestrator_test_run_step_invalid_raises"
- },
- {
- "label": "test_run_week_calls_all_steps()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L612",
- "community": 5,
- "norm_label": "test_run_week_calls_all_steps()",
- "id": "test_orchestrator_test_run_week_calls_all_steps"
- },
- {
- "label": "admin_client()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L632",
- "community": 5,
- "norm_label": "admin_client()",
- "id": "test_orchestrator_admin_client"
- },
- {
- "label": "test_orchestrate_status_returns_list()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L646",
- "community": 5,
- "norm_label": "test_orchestrate_status_returns_list()",
- "id": "test_orchestrator_test_orchestrate_status_returns_list"
- },
- {
- "label": "test_orchestrate_step_invalid_returns_400()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L654",
- "community": 5,
- "norm_label": "test_orchestrate_step_invalid_returns_400()",
- "id": "test_orchestrator_test_orchestrate_step_invalid_returns_400"
- },
- {
- "label": "test_orchestrate_run_week_returns_202()",
- "file_type": "code",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L663",
- "community": 5,
- "norm_label": "test_orchestrate_run_week_returns_202()",
- "id": "test_orchestrator_test_orchestrate_run_week_returns_202"
- },
- {
- "label": "Tests for the Phase 5 weekly orchestration.",
- "file_type": "rationale",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L1",
- "community": 5,
- "norm_label": "tests for the phase 5 weekly orchestration.",
- "id": "test_orchestrator_rationale_1"
- },
- {
- "label": "vite.config.ts",
- "file_type": "code",
- "source_file": "frontend/vite.config.ts",
- "source_location": "L1",
- "community": 8,
- "norm_label": "vite.config.ts",
- "id": "frontend_vite_config_ts"
- },
- {
- "label": "tailwind.config.js",
- "file_type": "code",
- "source_file": "frontend/tailwind.config.js",
- "source_location": "L1",
- "community": 8,
- "norm_label": "tailwind.config.js",
- "id": "frontend_tailwind_config_js"
- },
- {
- "label": "postcss.config.js",
- "file_type": "code",
- "source_file": "frontend/postcss.config.js",
- "source_location": "L1",
- "community": 8,
- "norm_label": "postcss.config.js",
- "id": "frontend_postcss_config_js"
- },
- {
- "label": "main.tsx",
- "file_type": "code",
- "source_file": "frontend/src/main.tsx",
- "source_location": "L1",
- "community": 8,
- "norm_label": "main.tsx",
- "id": "frontend_src_main_tsx"
- },
- {
- "label": "vite-env.d.ts",
- "file_type": "code",
- "source_file": "frontend/src/vite-env.d.ts",
- "source_location": "L1",
- "community": 8,
- "norm_label": "vite-env.d.ts",
- "id": "frontend_src_vite_env_d_ts"
- },
- {
- "label": "App.tsx",
- "file_type": "code",
- "source_file": "frontend/src/App.tsx",
- "source_location": "L1",
- "community": 54,
- "norm_label": "app.tsx",
- "id": "frontend_src_app_tsx"
- },
- {
- "label": "isActive()",
- "file_type": "code",
- "source_file": "frontend/src/App.tsx",
- "source_location": "L13",
- "community": 54,
- "norm_label": "isactive()",
- "id": "app_isactive"
- },
- {
- "label": "linkClass()",
- "file_type": "code",
- "source_file": "frontend/src/App.tsx",
- "source_location": "L15",
- "community": 54,
- "norm_label": "linkclass()",
- "id": "app_linkclass"
- },
- {
- "label": "ErrorBoundary.tsx",
- "file_type": "code",
- "source_file": "frontend/src/components/ErrorBoundary.tsx",
- "source_location": "L1",
- "community": 55,
- "norm_label": "errorboundary.tsx",
- "id": "frontend_src_components_errorboundary_tsx"
- },
- {
- "label": "getDerivedStateFromError()",
- "file_type": "code",
- "source_file": "frontend/src/components/ErrorBoundary.tsx",
- "source_location": "L19",
- "community": 55,
- "norm_label": "getderivedstatefromerror()",
- "id": "errorboundary_getderivedstatefromerror"
- },
- {
- "label": "componentDidCatch()",
- "file_type": "code",
- "source_file": "frontend/src/components/ErrorBoundary.tsx",
- "source_location": "L23",
- "community": 55,
- "norm_label": "componentdidcatch()",
- "id": "errorboundary_componentdidcatch"
- },
- {
- "label": "Button.tsx",
- "file_type": "code",
- "source_file": "frontend/src/components/ui/Button.tsx",
- "source_location": "L1",
- "community": 8,
- "norm_label": "button.tsx",
- "id": "frontend_src_components_ui_button_tsx"
- },
- {
- "label": "Button()",
- "file_type": "code",
- "source_file": "frontend/src/components/ui/Button.tsx",
- "source_location": "L11",
- "community": 8,
- "norm_label": "button()",
- "id": "button_button"
- },
- {
- "label": "Badge.tsx",
- "file_type": "code",
- "source_file": "frontend/src/components/ui/Badge.tsx",
- "source_location": "L1",
- "community": 8,
- "norm_label": "badge.tsx",
- "id": "frontend_src_components_ui_badge_tsx"
- },
- {
- "label": "Badge()",
- "file_type": "code",
- "source_file": "frontend/src/components/ui/Badge.tsx",
- "source_location": "L9",
- "community": 8,
- "norm_label": "badge()",
- "id": "badge_badge"
- },
- {
- "label": "Card.tsx",
- "file_type": "code",
- "source_file": "frontend/src/components/ui/Card.tsx",
- "source_location": "L1",
- "community": 42,
- "norm_label": "card.tsx",
- "id": "frontend_src_components_ui_card_tsx"
- },
- {
- "label": "Card()",
- "file_type": "code",
- "source_file": "frontend/src/components/ui/Card.tsx",
- "source_location": "L8",
- "community": 42,
- "norm_label": "card()",
- "id": "card_card"
- },
- {
- "label": "CardHeader()",
- "file_type": "code",
- "source_file": "frontend/src/components/ui/Card.tsx",
- "source_location": "L17",
- "community": 42,
- "norm_label": "cardheader()",
- "id": "card_cardheader"
- },
- {
- "label": "CardBody()",
- "file_type": "code",
- "source_file": "frontend/src/components/ui/Card.tsx",
- "source_location": "L26",
- "community": 42,
- "norm_label": "cardbody()",
- "id": "card_cardbody"
- },
- {
- "label": "CardFooter()",
- "file_type": "code",
- "source_file": "frontend/src/components/ui/Card.tsx",
- "source_location": "L35",
- "community": 42,
- "norm_label": "cardfooter()",
- "id": "card_cardfooter"
- },
- {
- "label": "Input.tsx",
- "file_type": "code",
- "source_file": "frontend/src/components/ui/Input.tsx",
- "source_location": "L1",
- "community": 8,
- "norm_label": "input.tsx",
- "id": "frontend_src_components_ui_input_tsx"
- },
- {
- "label": "cn()",
- "file_type": "code",
- "source_file": "frontend/src/components/ui/Input.tsx",
- "source_location": "L17",
- "community": 8,
- "norm_label": "cn()",
- "id": "input_cn"
- },
- {
- "label": "EmptyState.tsx",
- "file_type": "code",
- "source_file": "frontend/src/components/ui/EmptyState.tsx",
- "source_location": "L1",
- "community": 8,
- "norm_label": "emptystate.tsx",
- "id": "frontend_src_components_ui_emptystate_tsx"
- },
- {
- "label": "Skeleton.tsx",
- "file_type": "code",
- "source_file": "frontend/src/components/ui/Skeleton.tsx",
- "source_location": "L1",
- "community": 8,
- "norm_label": "skeleton.tsx",
- "id": "frontend_src_components_ui_skeleton_tsx"
- },
- {
- "label": "LoadingSpinner.tsx",
- "file_type": "code",
- "source_file": "frontend/src/components/ui/LoadingSpinner.tsx",
- "source_location": "L1",
- "community": 8,
- "norm_label": "loadingspinner.tsx",
- "id": "frontend_src_components_ui_loadingspinner_tsx"
- },
- {
- "label": "LoadingSpinner()",
- "file_type": "code",
- "source_file": "frontend/src/components/ui/LoadingSpinner.tsx",
- "source_location": "L10",
- "community": 8,
- "norm_label": "loadingspinner()",
- "id": "loadingspinner_loadingspinner"
- },
- {
- "label": "Select.tsx",
- "file_type": "code",
- "source_file": "frontend/src/components/ui/Select.tsx",
- "source_location": "L1",
- "community": 8,
- "norm_label": "select.tsx",
- "id": "frontend_src_components_ui_select_tsx"
- },
- {
- "label": "Textarea.tsx",
- "file_type": "code",
- "source_file": "frontend/src/components/ui/Textarea.tsx",
- "source_location": "L1",
- "community": 8,
- "norm_label": "textarea.tsx",
- "id": "frontend_src_components_ui_textarea_tsx"
- },
- {
- "label": "cn()",
- "file_type": "code",
- "source_file": "frontend/src/components/ui/Textarea.tsx",
- "source_location": "L17",
- "community": 8,
- "norm_label": "cn()",
- "id": "textarea_cn"
- },
- {
- "label": "Dashboard.tsx",
- "file_type": "code",
- "source_file": "frontend/src/pages/Dashboard.tsx",
- "source_location": "L1",
- "community": 8,
- "norm_label": "dashboard.tsx",
- "id": "frontend_src_pages_dashboard_tsx"
- },
- {
- "label": "handleSend()",
- "file_type": "code",
- "source_file": "frontend/src/pages/Dashboard.tsx",
- "source_location": "L282",
- "community": 8,
- "norm_label": "handlesend()",
- "id": "dashboard_handlesend"
- },
- {
- "label": "MealDetail.tsx",
- "file_type": "code",
- "source_file": "frontend/src/pages/MealDetail.tsx",
- "source_location": "L1",
- "community": 8,
- "norm_label": "mealdetail.tsx",
- "id": "frontend_src_pages_mealdetail_tsx"
- },
- {
- "label": "Pantry.tsx",
- "file_type": "code",
- "source_file": "frontend/src/pages/Pantry.tsx",
- "source_location": "L1",
- "community": 8,
- "norm_label": "pantry.tsx",
- "id": "frontend_src_pages_pantry_tsx"
- },
- {
- "label": "handleAdd()",
- "file_type": "code",
- "source_file": "frontend/src/pages/Pantry.tsx",
- "source_location": "L59",
- "community": 8,
- "norm_label": "handleadd()",
- "id": "pantry_handleadd"
- },
- {
- "label": "ShoppingList.tsx",
- "file_type": "code",
- "source_file": "frontend/src/pages/ShoppingList.tsx",
- "source_location": "L1",
- "community": 39,
- "norm_label": "shoppinglist.tsx",
- "id": "frontend_src_pages_shoppinglist_tsx"
- },
- {
- "label": "ShoppingListSkeleton()",
- "file_type": "code",
- "source_file": "frontend/src/pages/ShoppingList.tsx",
- "source_location": "L12",
- "community": 39,
- "norm_label": "shoppinglistskeleton()",
- "id": "shoppinglist_shoppinglistskeleton"
- },
- {
- "label": "SkeletonCard()",
- "file_type": "code",
- "source_file": "frontend/src/pages/ShoppingList.tsx",
- "source_location": "L33",
- "community": 39,
- "norm_label": "skeletoncard()",
- "id": "shoppinglist_skeletoncard"
- },
- {
- "label": "storageKey()",
- "file_type": "code",
- "source_file": "frontend/src/pages/ShoppingList.tsx",
- "source_location": "L44",
- "community": 39,
- "norm_label": "storagekey()",
- "id": "shoppinglist_storagekey"
- },
- {
- "label": "toggle()",
- "file_type": "code",
- "source_file": "frontend/src/pages/ShoppingList.tsx",
- "source_location": "L77",
- "community": 39,
- "norm_label": "toggle()",
- "id": "shoppinglist_toggle"
- },
- {
- "label": "clearAll()",
- "file_type": "code",
- "source_file": "frontend/src/pages/ShoppingList.tsx",
- "source_location": "L86",
- "community": 39,
- "norm_label": "clearall()",
- "id": "shoppinglist_clearall"
- },
- {
- "label": "Login.tsx",
- "file_type": "code",
- "source_file": "frontend/src/pages/Login.tsx",
- "source_location": "L1",
- "community": 8,
- "norm_label": "login.tsx",
- "id": "frontend_src_pages_login_tsx"
- },
- {
- "label": "Login()",
- "file_type": "code",
- "source_file": "frontend/src/pages/Login.tsx",
- "source_location": "L8",
- "community": 8,
- "norm_label": "login()",
- "id": "login_login"
- },
- {
- "label": "index.ts",
- "file_type": "code",
- "source_file": "frontend/src/api/index.ts",
- "source_location": "L1",
- "community": 8,
- "norm_label": "index.ts",
- "id": "frontend_src_api_index_ts"
- },
- {
- "label": "index.ts",
- "file_type": "code",
- "source_file": "frontend/src/types/index.ts",
- "source_location": "L1",
- "community": 8,
- "norm_label": "index.ts",
- "id": "frontend_src_types_index_ts"
- },
- {
- "label": "utils.ts",
- "file_type": "code",
- "source_file": "frontend/src/lib/utils.ts",
- "source_location": "L1",
- "community": 8,
- "norm_label": "utils.ts",
- "id": "frontend_src_lib_utils_ts"
- },
- {
- "label": "cn()",
- "file_type": "code",
- "source_file": "frontend/src/lib/utils.ts",
- "source_location": "L4",
- "community": 8,
- "norm_label": "cn()",
- "id": "utils_cn"
- },
- {
- "label": "toast.ts",
- "file_type": "code",
- "source_file": "frontend/src/lib/toast.ts",
- "source_location": "L1",
- "community": 8,
- "norm_label": "toast.ts",
- "id": "frontend_src_lib_toast_ts"
- },
- {
- "label": "spike_lucky_scrape.py",
- "file_type": "code",
- "source_file": "scripts/spike_lucky_scrape.py",
- "source_location": "L1",
- "community": 4,
- "norm_label": "spike_lucky_scrape.py",
- "id": "scripts_spike_lucky_scrape_py"
- },
- {
- "label": "main()",
- "file_type": "code",
- "source_file": "scripts/spike_lucky_scrape.py",
- "source_location": "L38",
- "community": 4,
- "norm_label": "main()",
- "id": "spike_lucky_scrape_main"
- },
- {
- "label": "R2-A live-scrape spike for Lucky California weekly ad. Performs ONE live fetch",
- "file_type": "rationale",
- "source_file": "scripts/spike_lucky_scrape.py",
- "source_location": "L1",
- "community": 4,
- "norm_label": "r2-a live-scrape spike for lucky california weekly ad. performs one live fetch",
- "id": "spike_lucky_scrape_rationale_1"
- },
- {
- "label": "send_test_approval.py",
- "file_type": "code",
- "source_file": "scripts/send_test_approval.py",
- "source_location": "L1",
- "community": 0,
- "norm_label": "send_test_approval.py",
- "id": "scripts_send_test_approval_py"
- },
- {
- "label": "main()",
- "file_type": "code",
- "source_file": "scripts/send_test_approval.py",
- "source_location": "L44",
- "community": 0,
- "norm_label": "main()",
- "id": "send_test_approval_main"
- },
- {
- "label": "spike_swiftly_ingest.py",
- "file_type": "code",
- "source_file": "scripts/spike_swiftly_ingest.py",
- "source_location": "L1",
- "community": 4,
- "norm_label": "spike_swiftly_ingest.py",
- "id": "scripts_spike_swiftly_ingest_py"
- },
- {
- "label": "main()",
- "file_type": "code",
- "source_file": "scripts/spike_swiftly_ingest.py",
- "source_location": "L33",
- "community": 4,
- "norm_label": "main()",
- "id": "spike_swiftly_ingest_main"
- },
- {
- "label": "Live spike for the Swiftly product API (R3-0, ad-hoc admin tool). Usage: py",
- "file_type": "rationale",
- "source_file": "scripts/spike_swiftly_ingest.py",
- "source_location": "L1",
- "community": 4,
- "norm_label": "live spike for the swiftly product api (r3-0, ad-hoc admin tool). usage: py",
- "id": "spike_swiftly_ingest_rationale_1"
- },
- {
- "label": "seed_family.py",
- "file_type": "code",
- "source_file": "scripts/seed_family.py",
- "source_location": "L1",
- "community": 8,
- "norm_label": "seed_family.py",
- "id": "scripts_seed_family_py"
- },
- {
- "label": "enrich_recipes_spoonacular.py",
- "file_type": "code",
- "source_file": "scripts/enrich_recipes_spoonacular.py",
- "source_location": "L1",
- "community": 52,
- "norm_label": "enrich_recipes_spoonacular.py",
- "id": "scripts_enrich_recipes_spoonacular_py"
- },
- {
- "label": "strip_html()",
- "file_type": "code",
- "source_file": "scripts/enrich_recipes_spoonacular.py",
- "source_location": "L30",
- "community": 52,
- "norm_label": "strip_html()",
- "id": "enrich_recipes_spoonacular_strip_html"
- },
- {
- "label": "search_recipe()",
- "file_type": "code",
- "source_file": "scripts/enrich_recipes_spoonacular.py",
- "source_location": "L34",
- "community": 52,
- "norm_label": "search_recipe()",
- "id": "enrich_recipes_spoonacular_search_recipe"
- },
- {
- "label": "main()",
- "file_type": "code",
- "source_file": "scripts/enrich_recipes_spoonacular.py",
- "source_location": "L53",
- "community": 52,
- "norm_label": "main()",
- "id": "enrich_recipes_spoonacular_main"
- },
- {
- "label": "meal-planner-plan.md",
- "file_type": "document",
- "source_file": "meal-planner-plan.md",
- "source_location": null,
- "community": 28,
- "norm_label": "meal-planner-plan.md",
- "id": "meal_planner_plan_md"
- },
- {
- "label": "Meal Planner System",
- "file_type": "document",
- "source_file": "meal-planner-plan.md",
- "source_location": "L1",
- "community": 28,
- "norm_label": "meal planner system",
- "id": "meal_planner_plan_md_meal_planner_system"
- },
- {
- "label": "Goal",
- "file_type": "document",
- "source_file": "meal-planner-plan.md",
- "source_location": "L3",
- "community": 28,
- "norm_label": "goal",
- "id": "meal_planner_plan_md_goal"
- },
- {
- "label": "Architecture",
- "file_type": "document",
- "source_file": "meal-planner-plan.md",
- "source_location": "L6",
- "community": 28,
- "norm_label": "architecture",
- "id": "meal_planner_plan_md_architecture"
- },
- {
- "label": "Tech Stack",
- "file_type": "document",
- "source_file": "meal-planner-plan.md",
- "source_location": "L26",
- "community": 28,
- "norm_label": "tech stack",
- "id": "meal_planner_plan_md_tech_stack"
- },
- {
- "label": "Project Structure",
- "file_type": "document",
- "source_file": "meal-planner-plan.md",
- "source_location": "L35",
- "community": 28,
- "norm_label": "project structure",
- "id": "meal_planner_plan_md_project_structure"
- },
- {
- "label": "Tasks",
- "file_type": "document",
- "source_file": "meal-planner-plan.md",
- "source_location": "L54",
- "community": 28,
- "norm_label": "tasks",
- "id": "meal_planner_plan_md_tasks"
- },
- {
- "label": "Phase 1: Foundation",
- "file_type": "document",
- "source_file": "meal-planner-plan.md",
- "source_location": "L56",
- "community": 28,
- "norm_label": "phase 1: foundation",
- "id": "meal_planner_plan_md_phase_1_foundation"
- },
- {
- "label": "Phase 2: Scraping",
- "file_type": "document",
- "source_file": "meal-planner-plan.md",
- "source_location": "L62",
- "community": 28,
- "norm_label": "phase 2: scraping",
- "id": "meal_planner_plan_md_phase_2_scraping"
- },
- {
- "label": "Phase 3: Recipe & Meal Engine",
- "file_type": "document",
- "source_file": "meal-planner-plan.md",
- "source_location": "L67",
- "community": 28,
- "norm_label": "phase 3: recipe & meal engine",
- "id": "meal_planner_plan_md_phase_3_recipe_meal_engine"
- },
- {
- "label": "Phase 4: Notifications & Approval",
- "file_type": "document",
- "source_file": "meal-planner-plan.md",
- "source_location": "L73",
- "community": 28,
- "norm_label": "phase 4: notifications & approval",
- "id": "meal_planner_plan_md_phase_4_notifications_approval"
- },
- {
- "label": "Phase 5: Shopping List & UI",
- "file_type": "document",
- "source_file": "meal-planner-plan.md",
- "source_location": "L79",
- "community": 28,
- "norm_label": "phase 5: shopping list & ui",
- "id": "meal_planner_plan_md_phase_5_shopping_list_ui"
- },
- {
- "label": "Phase 6: Polish",
- "file_type": "document",
- "source_file": "meal-planner-plan.md",
- "source_location": "L85",
- "community": 28,
- "norm_label": "phase 6: polish",
- "id": "meal_planner_plan_md_phase_6_polish"
- },
- {
- "label": "Done When",
- "file_type": "document",
- "source_file": "meal-planner-plan.md",
- "source_location": "L90",
- "community": 28,
- "norm_label": "done when",
- "id": "meal_planner_plan_md_done_when"
- },
- {
- "label": "README.md",
- "file_type": "document",
- "source_file": "README.md",
- "source_location": null,
- "community": 7,
- "norm_label": "readme.md",
- "id": "readme_md"
- },
- {
- "label": "Meal Planner",
- "file_type": "document",
- "source_file": "README.md",
- "source_location": "L1",
- "community": 7,
- "norm_label": "meal planner",
- "id": "readme_md_meal_planner"
- },
- {
- "label": "Background",
- "file_type": "document",
- "source_file": "README.md",
- "source_location": "L5",
- "community": 7,
- "norm_label": "background",
- "id": "readme_md_background"
- },
- {
- "label": "Features",
- "file_type": "document",
- "source_file": "README.md",
- "source_location": "L13",
- "community": 7,
- "norm_label": "features",
- "id": "readme_md_features"
- },
- {
- "label": "Architecture",
- "file_type": "document",
- "source_file": "README.md",
- "source_location": "L23",
- "community": 7,
- "norm_label": "architecture",
- "id": "readme_md_architecture"
- },
- {
- "label": "Documentation",
- "file_type": "document",
- "source_file": "README.md",
- "source_location": "L31",
- "community": 7,
- "norm_label": "documentation",
- "id": "readme_md_documentation"
- },
- {
- "label": "Quick Start",
- "file_type": "document",
- "source_file": "README.md",
- "source_location": "L39",
- "community": 7,
- "norm_label": "quick start",
- "id": "readme_md_quick_start"
- },
- {
- "label": "Clone and start",
- "file_type": "document",
- "source_file": "README.md",
- "source_location": "L42",
- "community": 7,
- "norm_label": "clone and start",
- "id": "readme_md_clone_and_start"
- },
- {
- "label": "View logs",
- "file_type": "document",
- "source_file": "README.md",
- "source_location": "L45",
- "community": 7,
- "norm_label": "view logs",
- "id": "readme_md_view_logs"
- },
- {
- "label": "Stop",
- "file_type": "document",
- "source_file": "README.md",
- "source_location": "L48",
- "community": 7,
- "norm_label": "stop",
- "id": "readme_md_stop"
- },
- {
- "label": "Family Profile",
- "file_type": "document",
- "source_file": "README.md",
- "source_location": "L52",
- "community": 7,
- "norm_label": "family profile",
- "id": "readme_md_family_profile"
- },
- {
- "label": "Approval Workflow",
- "file_type": "document",
- "source_file": "README.md",
- "source_location": "L60",
- "community": 7,
- "norm_label": "approval workflow",
- "id": "readme_md_approval_workflow"
- },
- {
- "label": "Tech Stack",
- "file_type": "document",
- "source_file": "README.md",
- "source_location": "L67",
- "community": 7,
- "norm_label": "tech stack",
- "id": "readme_md_tech_stack"
- },
- {
- "label": "CLAUDE.md",
- "file_type": "document",
- "source_file": "CLAUDE.md",
- "source_location": null,
- "community": 29,
- "norm_label": "claude.md",
- "id": "claude_md"
- },
- {
- "label": "context-mode \u2014 MANDATORY routing rules",
- "file_type": "document",
- "source_file": "CLAUDE.md",
- "source_location": "L1",
- "community": 29,
- "norm_label": "context-mode \u2014 mandatory routing rules",
- "id": "claude_md_context_mode_mandatory_routing_rules"
- },
- {
- "label": "BLOCKED commands \u2014 do NOT attempt these",
- "file_type": "document",
- "source_file": "CLAUDE.md",
- "source_location": "L5",
- "community": 29,
- "norm_label": "blocked commands \u2014 do not attempt these",
- "id": "claude_md_blocked_commands_do_not_attempt_these"
- },
- {
- "label": "curl / wget \u2014 BLOCKED",
- "file_type": "document",
- "source_file": "CLAUDE.md",
- "source_location": "L7",
- "community": 29,
- "norm_label": "curl / wget \u2014 blocked",
- "id": "claude_md_curl_wget_blocked"
- },
- {
- "label": "Inline HTTP \u2014 BLOCKED",
- "file_type": "document",
- "source_file": "CLAUDE.md",
- "source_location": "L13",
- "community": 29,
- "norm_label": "inline http \u2014 blocked",
- "id": "claude_md_inline_http_blocked"
- },
- {
- "label": "WebFetch \u2014 BLOCKED",
- "file_type": "document",
- "source_file": "CLAUDE.md",
- "source_location": "L18",
- "community": 29,
- "norm_label": "webfetch \u2014 blocked",
- "id": "claude_md_webfetch_blocked"
- },
- {
- "label": "REDIRECTED tools \u2014 use sandbox equivalents",
- "file_type": "document",
- "source_file": "CLAUDE.md",
- "source_location": "L23",
- "community": 29,
- "norm_label": "redirected tools \u2014 use sandbox equivalents",
- "id": "claude_md_redirected_tools_use_sandbox_equivalents"
- },
- {
- "label": "Bash (>20 lines output)",
- "file_type": "document",
- "source_file": "CLAUDE.md",
- "source_location": "L25",
- "community": 29,
- "norm_label": "bash (>20 lines output)",
- "id": "claude_md_bash_20_lines_output"
- },
- {
- "label": "Read (for analysis)",
- "file_type": "document",
- "source_file": "CLAUDE.md",
- "source_location": "L31",
- "community": 29,
- "norm_label": "read (for analysis)",
- "id": "claude_md_read_for_analysis"
- },
- {
- "label": "Grep (large results)",
- "file_type": "document",
- "source_file": "CLAUDE.md",
- "source_location": "L35",
- "community": 29,
- "norm_label": "grep (large results)",
- "id": "claude_md_grep_large_results"
- },
- {
- "label": "Tool selection hierarchy",
- "file_type": "document",
- "source_file": "CLAUDE.md",
- "source_location": "L38",
- "community": 29,
- "norm_label": "tool selection hierarchy",
- "id": "claude_md_tool_selection_hierarchy"
- },
- {
- "label": "Subagent routing",
- "file_type": "document",
- "source_file": "CLAUDE.md",
- "source_location": "L46",
- "community": 29,
- "norm_label": "subagent routing",
- "id": "claude_md_subagent_routing"
- },
- {
- "label": "Output constraints",
- "file_type": "document",
- "source_file": "CLAUDE.md",
- "source_location": "L50",
- "community": 29,
- "norm_label": "output constraints",
- "id": "claude_md_output_constraints"
- },
- {
- "label": "ctx commands",
- "file_type": "document",
- "source_file": "CLAUDE.md",
- "source_location": "L56",
- "community": 29,
- "norm_label": "ctx commands",
- "id": "claude_md_ctx_commands"
- },
- {
- "label": "SPEC.md",
- "file_type": "document",
- "source_file": "docs/SPEC.md",
- "source_location": null,
- "community": 12,
- "norm_label": "spec.md",
- "id": "docs_spec_md"
- },
- {
- "label": "Meal Planner - Project Specification",
- "file_type": "document",
- "source_file": "docs/SPEC.md",
- "source_location": "L1",
- "community": 12,
- "norm_label": "meal planner - project specification",
- "id": "docs_spec_md_meal_planner_project_specification"
- },
- {
- "label": "1. Overview",
- "file_type": "document",
- "source_file": "docs/SPEC.md",
- "source_location": "L3",
- "community": 12,
- "norm_label": "1. overview",
- "id": "docs_spec_md_1_overview"
- },
- {
- "label": "2. Problem Statement",
- "file_type": "document",
- "source_file": "docs/SPEC.md",
- "source_location": "L12",
- "community": 12,
- "norm_label": "2. problem statement",
- "id": "docs_spec_md_2_problem_statement"
- },
- {
- "label": "3. Goals",
- "file_type": "document",
- "source_file": "docs/SPEC.md",
- "source_location": "L29",
- "community": 12,
- "norm_label": "3. goals",
- "id": "docs_spec_md_3_goals"
- },
- {
- "label": "Primary Goals",
- "file_type": "document",
- "source_file": "docs/SPEC.md",
- "source_location": "L31",
- "community": 12,
- "norm_label": "primary goals",
- "id": "docs_spec_md_primary_goals"
- },
- {
- "label": "Secondary Goals",
- "file_type": "document",
- "source_file": "docs/SPEC.md",
- "source_location": "L40",
- "community": 12,
- "norm_label": "secondary goals",
- "id": "docs_spec_md_secondary_goals"
- },
- {
- "label": "4. Non-Goals (Out of Scope)",
- "file_type": "document",
- "source_file": "docs/SPEC.md",
- "source_location": "L48",
- "community": 12,
- "norm_label": "4. non-goals (out of scope)",
- "id": "docs_spec_md_4_non_goals_out_of_scope"
- },
- {
- "label": "5. User Stories",
- "file_type": "document",
- "source_file": "docs/SPEC.md",
- "source_location": "L59",
- "community": 12,
- "norm_label": "5. user stories",
- "id": "docs_spec_md_5_user_stories"
- },
- {
- "label": "As a family member, I can:",
- "file_type": "document",
- "source_file": "docs/SPEC.md",
- "source_location": "L61",
- "community": 12,
- "norm_label": "as a family member, i can:",
- "id": "docs_spec_md_as_a_family_member_i_can"
- },
- {
- "label": "As the system administrator, I can:",
- "file_type": "document",
- "source_file": "docs/SPEC.md",
- "source_location": "L69",
- "community": 12,
- "norm_label": "as the system administrator, i can:",
- "id": "docs_spec_md_as_the_system_administrator_i_can"
- },
- {
- "label": "6. Family Profile",
- "file_type": "document",
- "source_file": "docs/SPEC.md",
- "source_location": "L77",
- "community": 12,
- "norm_label": "6. family profile",
- "id": "docs_spec_md_6_family_profile"
- },
- {
- "label": "Household",
- "file_type": "document",
- "source_file": "docs/SPEC.md",
- "source_location": "L79",
- "community": 12,
- "norm_label": "household",
- "id": "docs_spec_md_household"
- },
- {
- "label": "Family Members",
- "file_type": "document",
- "source_file": "docs/SPEC.md",
- "source_location": "L84",
- "community": 12,
- "norm_label": "family members",
- "id": "docs_spec_md_family_members"
- },
- {
- "label": "Dietary Constraints",
- "file_type": "document",
- "source_file": "docs/SPEC.md",
- "source_location": "L92",
- "community": 12,
- "norm_label": "dietary constraints",
- "id": "docs_spec_md_dietary_constraints"
- },
- {
- "label": "Preference Signals",
- "file_type": "document",
- "source_file": "docs/SPEC.md",
- "source_location": "L96",
- "community": 12,
- "norm_label": "preference signals",
- "id": "docs_spec_md_preference_signals"
- },
- {
- "label": "7. Approval Workflow",
- "file_type": "document",
- "source_file": "docs/SPEC.md",
- "source_location": "L104",
- "community": 12,
- "norm_label": "7. approval workflow",
- "id": "docs_spec_md_7_approval_workflow"
- },
- {
- "label": "Weekly Flow",
- "file_type": "document",
- "source_file": "docs/SPEC.md",
- "source_location": "L106",
- "community": 12,
- "norm_label": "weekly flow",
- "id": "docs_spec_md_weekly_flow"
- },
- {
- "label": "Approval Token Security",
- "file_type": "document",
- "source_file": "docs/SPEC.md",
- "source_location": "L138",
- "community": 12,
- "norm_label": "approval token security",
- "id": "docs_spec_md_approval_token_security"
- },
- {
- "label": "8. Technical Constraints",
- "file_type": "document",
- "source_file": "docs/SPEC.md",
- "source_location": "L146",
- "community": 12,
- "norm_label": "8. technical constraints",
- "id": "docs_spec_md_8_technical_constraints"
- },
- {
- "label": "Self-Hosting Requirements",
- "file_type": "document",
- "source_file": "docs/SPEC.md",
- "source_location": "L148",
- "community": 12,
- "norm_label": "self-hosting requirements",
- "id": "docs_spec_md_self_hosting_requirements"
- },
- {
- "label": "Authentication & Authorization",
- "file_type": "document",
- "source_file": "docs/SPEC.md",
- "source_location": "L153",
- "community": 12,
- "norm_label": "authentication & authorization",
- "id": "docs_spec_md_authentication_authorization"
- },
- {
- "label": "Lucky California Integration",
- "file_type": "document",
- "source_file": "docs/SPEC.md",
- "source_location": "L159",
- "community": 12,
- "norm_label": "lucky california integration",
- "id": "docs_spec_md_lucky_california_integration"
- },
- {
- "label": "Email",
- "file_type": "document",
- "source_file": "docs/SPEC.md",
- "source_location": "L166",
- "community": 12,
- "norm_label": "email",
- "id": "docs_spec_md_email"
- },
- {
- "label": "External Dependencies",
- "file_type": "document",
- "source_file": "docs/SPEC.md",
- "source_location": "L172",
- "community": 12,
- "norm_label": "external dependencies",
- "id": "docs_spec_md_external_dependencies"
- },
- {
- "label": "9. Accessibility (WCAG 2.1 AA)",
- "file_type": "document",
- "source_file": "docs/SPEC.md",
- "source_location": "L182",
- "community": 12,
- "norm_label": "9. accessibility (wcag 2.1 aa)",
- "id": "docs_spec_md_9_accessibility_wcag_2_1_aa"
- },
- {
- "label": "Web UI",
- "file_type": "document",
- "source_file": "docs/SPEC.md",
- "source_location": "L184",
- "community": 12,
- "norm_label": "web ui",
- "id": "docs_spec_md_web_ui"
- },
- {
- "label": "10. Data Retention",
- "file_type": "document",
- "source_file": "docs/SPEC.md",
- "source_location": "L199",
- "community": 12,
- "norm_label": "10. data retention",
- "id": "docs_spec_md_10_data_retention"
- },
- {
- "label": "Stored Data",
- "file_type": "document",
- "source_file": "docs/SPEC.md",
- "source_location": "L201",
- "community": 12,
- "norm_label": "stored data",
- "id": "docs_spec_md_stored_data"
- },
- {
- "label": "Retention Period",
- "file_type": "document",
- "source_file": "docs/SPEC.md",
- "source_location": "L208",
- "community": 12,
- "norm_label": "retention period",
- "id": "docs_spec_md_retention_period"
- },
- {
- "label": "11. Success Metrics",
- "file_type": "document",
- "source_file": "docs/SPEC.md",
- "source_location": "L215",
- "community": 12,
- "norm_label": "11. success metrics",
- "id": "docs_spec_md_11_success_metrics"
- },
- {
- "label": "12. Future Considerations",
- "file_type": "document",
- "source_file": "docs/SPEC.md",
- "source_location": "L225",
- "community": 12,
- "norm_label": "12. future considerations",
- "id": "docs_spec_md_12_future_considerations"
- },
- {
- "label": "ARCHITECTURE.md",
- "file_type": "document",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": null,
- "community": 13,
- "norm_label": "architecture.md",
- "id": "docs_architecture_md"
- },
- {
- "label": "Meal Planner - Architecture",
- "file_type": "document",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L1",
- "community": 13,
- "norm_label": "meal planner - architecture",
- "id": "docs_architecture_md_meal_planner_architecture"
- },
- {
- "label": "1. System Overview",
- "file_type": "document",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L3",
- "community": 13,
- "norm_label": "1. system overview",
- "id": "docs_architecture_md_1_system_overview"
- },
- {
- "label": "2. Component Descriptions",
- "file_type": "document",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L52",
- "community": 13,
- "norm_label": "2. component descriptions",
- "id": "docs_architecture_md_2_component_descriptions"
- },
- {
- "label": "2.1 Scraper Service",
- "file_type": "document",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L54",
- "community": 13,
- "norm_label": "2.1 scraper service",
- "id": "docs_architecture_md_2_1_scraper_service"
- },
- {
- "label": "2.2 Recipe Engine",
- "file_type": "document",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L76",
- "community": 13,
- "norm_label": "2.2 recipe engine",
- "id": "docs_architecture_md_2_2_recipe_engine"
- },
- {
- "label": "2.3 Meal Planner Service",
- "file_type": "document",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L91",
- "community": 13,
- "norm_label": "2.3 meal planner service",
- "id": "docs_architecture_md_2_3_meal_planner_service"
- },
- {
- "label": "2.4 Notification Service",
- "file_type": "document",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L112",
- "community": 13,
- "norm_label": "2.4 notification service",
- "id": "docs_architecture_md_2_4_notification_service"
- },
- {
- "label": "2.5 Feedback Service",
- "file_type": "document",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L147",
- "community": 13,
- "norm_label": "2.5 feedback service",
- "id": "docs_architecture_md_2_5_feedback_service"
- },
- {
- "label": "2.6 Web UI (React + Tailwind)",
- "file_type": "document",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L164",
- "community": 13,
- "norm_label": "2.6 web ui (react + tailwind)",
- "id": "docs_architecture_md_2_6_web_ui_react_tailwind"
- },
- {
- "label": "3. Data Architecture",
- "file_type": "document",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L183",
- "community": 13,
- "norm_label": "3. data architecture",
- "id": "docs_architecture_md_3_data_architecture"
- },
- {
- "label": "3.1 PostgreSQL Schema Overview",
- "file_type": "document",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L185",
- "community": 13,
- "norm_label": "3.1 postgresql schema overview",
- "id": "docs_architecture_md_3_1_postgresql_schema_overview"
- },
- {
- "label": "3.2 Key Relationships",
- "file_type": "document",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L267",
- "community": 13,
- "norm_label": "3.2 key relationships",
- "id": "docs_architecture_md_3_2_key_relationships"
- },
- {
- "label": "4. API Design",
- "file_type": "document",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L284",
- "community": 13,
- "norm_label": "4. api design",
- "id": "docs_architecture_md_4_api_design"
- },
- {
- "label": "4.1 Core Endpoints",
- "file_type": "document",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L286",
- "community": 13,
- "norm_label": "4.1 core endpoints",
- "id": "docs_architecture_md_4_1_core_endpoints"
- },
- {
- "label": "4.2 Email Approval Links",
- "file_type": "document",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L306",
- "community": 13,
- "norm_label": "4.2 email approval links",
- "id": "docs_architecture_md_4_2_email_approval_links"
- },
- {
- "label": "5. Deployment Architecture",
- "file_type": "document",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L313",
- "community": 13,
- "norm_label": "5. deployment architecture",
- "id": "docs_architecture_md_5_deployment_architecture"
- },
- {
- "label": "5.1 Docker Compose Services",
- "file_type": "document",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L315",
- "community": 13,
- "norm_label": "5.1 docker compose services",
- "id": "docs_architecture_md_5_1_docker_compose_services"
- },
- {
- "label": "5.2 Reverse Proxy (Nginx)",
- "file_type": "document",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L365",
- "community": 13,
- "norm_label": "5.2 reverse proxy (nginx)",
- "id": "docs_architecture_md_5_2_reverse_proxy_nginx"
- },
- {
- "label": "5.3 Remote Access Security",
- "file_type": "document",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L373",
- "community": 13,
- "norm_label": "5.3 remote access security",
- "id": "docs_architecture_md_5_3_remote_access_security"
- },
- {
- "label": "6. Image Strategy",
- "file_type": "document",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L380",
- "community": 13,
- "norm_label": "6. image strategy",
- "id": "docs_architecture_md_6_image_strategy"
- },
- {
- "label": "6.1 Primary: Scraped Images",
- "file_type": "document",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L382",
- "community": 13,
- "norm_label": "6.1 primary: scraped images",
- "id": "docs_architecture_md_6_1_primary_scraped_images"
- },
- {
- "label": "6.2 Fallback: AI Generation",
- "file_type": "document",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L387",
- "community": 13,
- "norm_label": "6.2 fallback: ai generation",
- "id": "docs_architecture_md_6_2_fallback_ai_generation"
- },
- {
- "label": "6.3 Email Image Handling",
- "file_type": "document",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L393",
- "community": 13,
- "norm_label": "6.3 email image handling",
- "id": "docs_architecture_md_6_3_email_image_handling"
- },
- {
- "label": "7. Error Handling Strategy",
- "file_type": "document",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L400",
- "community": 13,
- "norm_label": "7. error handling strategy",
- "id": "docs_architecture_md_7_error_handling_strategy"
- },
- {
- "label": "7.1 Scraper Failures",
- "file_type": "document",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L402",
- "community": 13,
- "norm_label": "7.1 scraper failures",
- "id": "docs_architecture_md_7_1_scraper_failures"
- },
- {
- "label": "7.2 Email Failures",
- "file_type": "document",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L409",
- "community": 13,
- "norm_label": "7.2 email failures",
- "id": "docs_architecture_md_7_2_email_failures"
- },
- {
- "label": "7.3 Database Failures",
- "file_type": "document",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L415",
- "community": 13,
- "norm_label": "7.3 database failures",
- "id": "docs_architecture_md_7_3_database_failures"
- },
- {
- "label": "8. Logging & Monitoring",
- "file_type": "document",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L422",
- "community": 13,
- "norm_label": "8. logging & monitoring",
- "id": "docs_architecture_md_8_logging_monitoring"
- },
- {
- "label": "8.1 Log Categories",
- "file_type": "document",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L424",
- "community": 13,
- "norm_label": "8.1 log categories",
- "id": "docs_architecture_md_8_1_log_categories"
- },
- {
- "label": "8.2 Log Storage",
- "file_type": "document",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L431",
- "community": 13,
- "norm_label": "8.2 log storage",
- "id": "docs_architecture_md_8_2_log_storage"
- },
- {
- "label": "8.3 Monitoring (Future)",
- "file_type": "document",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L436",
- "community": 13,
- "norm_label": "8.3 monitoring (future)",
- "id": "docs_architecture_md_8_3_monitoring_future"
- },
- {
- "label": "database-schema.md",
- "file_type": "document",
- "source_file": "docs/database-schema.md",
- "source_location": null,
- "community": 7,
- "norm_label": "database-schema.md",
- "id": "docs_database_schema_md"
- },
- {
- "label": "Meal Planner - Database Schema",
- "file_type": "document",
- "source_file": "docs/database-schema.md",
- "source_location": "L1",
- "community": 7,
- "norm_label": "meal planner - database schema",
- "id": "docs_database_schema_md_meal_planner_database_schema"
- },
- {
- "label": "1. Schema Overview",
- "file_type": "document",
- "source_file": "docs/database-schema.md",
- "source_location": "L3",
- "community": 7,
- "norm_label": "1. schema overview",
- "id": "docs_database_schema_md_1_schema_overview"
- },
- {
- "label": "2. Enums",
- "file_type": "document",
- "source_file": "docs/database-schema.md",
- "source_location": "L11",
- "community": 7,
- "norm_label": "2. enums",
- "id": "docs_database_schema_md_2_enums"
- },
- {
- "label": "3. Tables",
- "file_type": "document",
- "source_file": "docs/database-schema.md",
- "source_location": "L27",
- "community": 7,
- "norm_label": "3. tables",
- "id": "docs_database_schema_md_3_tables"
- },
- {
- "label": "3.1 `family_profile`",
- "file_type": "document",
- "source_file": "docs/database-schema.md",
- "source_location": "L29",
- "community": 7,
- "norm_label": "3.1 `family_profile`",
- "id": "docs_database_schema_md_3_1_family_profile"
- },
- {
- "label": "3.2 `family_member`",
- "file_type": "document",
- "source_file": "docs/database-schema.md",
- "source_location": "L49",
- "community": 7,
- "norm_label": "3.2 `family_member`",
- "id": "docs_database_schema_md_3_2_family_member"
- },
- {
- "label": "3.3 `ingredient`",
- "file_type": "document",
- "source_file": "docs/database-schema.md",
- "source_location": "L66",
- "community": 7,
- "norm_label": "3.3 `ingredient`",
- "id": "docs_database_schema_md_3_3_ingredient"
- },
- {
- "label": "3.4 `recipe`",
- "file_type": "document",
- "source_file": "docs/database-schema.md",
- "source_location": "L82",
- "community": 7,
- "norm_label": "3.4 `recipe`",
- "id": "docs_database_schema_md_3_4_recipe"
- },
- {
- "label": "3.5 `meal_plan`",
- "file_type": "document",
- "source_file": "docs/database-schema.md",
- "source_location": "L112",
- "community": 7,
- "norm_label": "3.5 `meal_plan`",
- "id": "docs_database_schema_md_3_5_meal_plan"
- },
- {
- "label": "3.6 `meal_plan_item`",
- "file_type": "document",
- "source_file": "docs/database-schema.md",
- "source_location": "L130",
- "community": 7,
- "norm_label": "3.6 `meal_plan_item`",
- "id": "docs_database_schema_md_3_6_meal_plan_item"
- },
- {
- "label": "3.7 `meal_plan_vote`",
- "file_type": "document",
- "source_file": "docs/database-schema.md",
- "source_location": "L151",
- "community": 7,
- "norm_label": "3.7 `meal_plan_vote`",
- "id": "docs_database_schema_md_3_7_meal_plan_vote"
- },
- {
- "label": "3.8 `approval_token`",
- "file_type": "document",
- "source_file": "docs/database-schema.md",
- "source_location": "L165",
- "community": 7,
- "norm_label": "3.8 `approval_token`",
- "id": "docs_database_schema_md_3_8_approval_token"
- },
- {
- "label": "3.9 `home_pantry`",
- "file_type": "document",
- "source_file": "docs/database-schema.md",
- "source_location": "L182",
- "community": 7,
- "norm_label": "3.9 `home_pantry`",
- "id": "docs_database_schema_md_3_9_home_pantry"
- },
- {
- "label": "3.10 `feedback`",
- "file_type": "document",
- "source_file": "docs/database-schema.md",
- "source_location": "L199",
- "community": 7,
- "norm_label": "3.10 `feedback`",
- "id": "docs_database_schema_md_3_10_feedback"
- },
- {
- "label": "3.11 `never_suggest`",
- "file_type": "document",
- "source_file": "docs/database-schema.md",
- "source_location": "L217",
- "community": 7,
- "norm_label": "3.11 `never_suggest`",
- "id": "docs_database_schema_md_3_11_never_suggest"
- },
- {
- "label": "3.12 `grocery_item`",
- "file_type": "document",
- "source_file": "docs/database-schema.md",
- "source_location": "L231",
- "community": 7,
- "norm_label": "3.12 `grocery_item`",
- "id": "docs_database_schema_md_3_12_grocery_item"
- },
- {
- "label": "3.13 `scrape_log`",
- "file_type": "document",
- "source_file": "docs/database-schema.md",
- "source_location": "L254",
- "community": 7,
- "norm_label": "3.13 `scrape_log`",
- "id": "docs_database_schema_md_3_13_scrape_log"
- },
- {
- "label": "3.14 `email_log`",
- "file_type": "document",
- "source_file": "docs/database-schema.md",
- "source_location": "L270",
- "community": 7,
- "norm_label": "3.14 `email_log`",
- "id": "docs_database_schema_md_3_14_email_log"
- },
- {
- "label": "4. Indexes",
- "file_type": "document",
- "source_file": "docs/database-schema.md",
- "source_location": "L290",
- "community": 7,
- "norm_label": "4. indexes",
- "id": "docs_database_schema_md_4_indexes"
- },
- {
- "label": "4.1 Primary Indexes",
- "file_type": "document",
- "source_file": "docs/database-schema.md",
- "source_location": "L292",
- "community": 7,
- "norm_label": "4.1 primary indexes",
- "id": "docs_database_schema_md_4_1_primary_indexes"
- },
- {
- "label": "4.2 Foreign Key Indexes",
- "file_type": "document",
- "source_file": "docs/database-schema.md",
- "source_location": "L295",
- "community": 7,
- "norm_label": "4.2 foreign key indexes",
- "id": "docs_database_schema_md_4_2_foreign_key_indexes"
- },
- {
- "label": "4.3 Full-Text Search Indexes",
- "file_type": "document",
- "source_file": "docs/database-schema.md",
- "source_location": "L316",
- "community": 7,
- "norm_label": "4.3 full-text search indexes",
- "id": "docs_database_schema_md_4_3_full_text_search_indexes"
- },
- {
- "label": "5. Day of Week Convention",
- "file_type": "document",
- "source_file": "docs/database-schema.md",
- "source_location": "L324",
- "community": 7,
- "norm_label": "5. day of week convention",
- "id": "docs_database_schema_md_5_day_of_week_convention"
- },
- {
- "label": "6. Data Migration Strategy",
- "file_type": "document",
- "source_file": "docs/database-schema.md",
- "source_location": "L341",
- "community": 7,
- "norm_label": "6. data migration strategy",
- "id": "docs_database_schema_md_6_data_migration_strategy"
- },
- {
- "label": "6.1 Initial Schema",
- "file_type": "document",
- "source_file": "docs/database-schema.md",
- "source_location": "L343",
- "community": 7,
- "norm_label": "6.1 initial schema",
- "id": "docs_database_schema_md_6_1_initial_schema"
- },
- {
- "label": "6.2 Migration Policy",
- "file_type": "document",
- "source_file": "docs/database-schema.md",
- "source_location": "L346",
- "community": 7,
- "norm_label": "6.2 migration policy",
- "id": "docs_database_schema_md_6_2_migration_policy"
- },
- {
- "label": "6.3 Seed Data",
- "file_type": "document",
- "source_file": "docs/database-schema.md",
- "source_location": "L351",
- "community": 7,
- "norm_label": "6.3 seed data",
- "id": "docs_database_schema_md_6_3_seed_data"
- },
- {
- "label": "7. Data Retention",
- "file_type": "document",
- "source_file": "docs/database-schema.md",
- "source_location": "L359",
- "community": 7,
- "norm_label": "7. data retention",
- "id": "docs_database_schema_md_7_data_retention"
- },
- {
- "label": "8. Row-Level Security (Future)",
- "file_type": "document",
- "source_file": "docs/database-schema.md",
- "source_location": "L374",
- "community": 7,
- "norm_label": "8. row-level security (future)",
- "id": "docs_database_schema_md_8_row_level_security_future"
- },
- {
- "label": "implementation-plan.md",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": null,
- "community": 3,
- "norm_label": "implementation-plan.md",
- "id": "docs_implementation_plan_md"
- },
- {
- "label": "Meal Planner - Implementation Plan",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L1",
- "community": 3,
- "norm_label": "meal planner - implementation plan",
- "id": "docs_implementation_plan_md_meal_planner_implementation_plan"
- },
- {
- "label": "Overview",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L3",
- "community": 3,
- "norm_label": "overview",
- "id": "docs_implementation_plan_md_overview"
- },
- {
- "label": "Phase 1: Infrastructure & Foundation",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L9",
- "community": 3,
- "norm_label": "phase 1: infrastructure & foundation",
- "id": "docs_implementation_plan_md_phase_1_infrastructure_foundation"
- },
- {
- "label": "1.1 Project Setup",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L11",
- "community": 3,
- "norm_label": "1.1 project setup",
- "id": "docs_implementation_plan_md_1_1_project_setup"
- },
- {
- "label": "1.2 Backend Skeleton",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L21",
- "community": 3,
- "norm_label": "1.2 backend skeleton",
- "id": "docs_implementation_plan_md_1_2_backend_skeleton"
- },
- {
- "label": "1.3 Frontend Skeleton",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L42",
- "community": 3,
- "norm_label": "1.3 frontend skeleton",
- "id": "docs_implementation_plan_md_1_3_frontend_skeleton"
- },
- {
- "label": "1.4 Reverse Proxy (Nginx)",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L59",
- "community": 3,
- "norm_label": "1.4 reverse proxy (nginx)",
- "id": "docs_implementation_plan_md_1_4_reverse_proxy_nginx"
- },
- {
- "label": "Phase 2: Database & Models",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L70",
- "community": 3,
- "norm_label": "phase 2: database & models",
- "id": "docs_implementation_plan_md_phase_2_database_models"
- },
- {
- "label": "2.1 SQLAlchemy Models",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L72",
- "community": 3,
- "norm_label": "2.1 sqlalchemy models",
- "id": "docs_implementation_plan_md_2_1_sqlalchemy_models"
- },
- {
- "label": "2.2 Pydantic Schemas",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L86",
- "community": 3,
- "norm_label": "2.2 pydantic schemas",
- "id": "docs_implementation_plan_md_2_2_pydantic_schemas"
- },
- {
- "label": "2.3 Database Migrations",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L91",
- "community": 3,
- "norm_label": "2.3 database migrations",
- "id": "docs_implementation_plan_md_2_3_database_migrations"
- },
- {
- "label": "Phase 3: API Endpoints",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L100",
- "community": 3,
- "norm_label": "phase 3: api endpoints",
- "id": "docs_implementation_plan_md_phase_3_api_endpoints"
- },
- {
- "label": "3.1 Core CRUD Endpoints",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L102",
- "community": 3,
- "norm_label": "3.1 core crud endpoints",
- "id": "docs_implementation_plan_md_3_1_core_crud_endpoints"
- },
- {
- "label": "3.2 Meal Plan Endpoints",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L110",
- "community": 3,
- "norm_label": "3.2 meal plan endpoints",
- "id": "docs_implementation_plan_md_3_2_meal_plan_endpoints"
- },
- {
- "label": "3.3 Shopping List Endpoints",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L116",
- "community": 3,
- "norm_label": "3.3 shopping list endpoints",
- "id": "docs_implementation_plan_md_3_3_shopping_list_endpoints"
- },
- {
- "label": "3.4 Feedback Endpoints",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L120",
- "community": 3,
- "norm_label": "3.4 feedback endpoints",
- "id": "docs_implementation_plan_md_3_4_feedback_endpoints"
- },
- {
- "label": "3.5 Admin Endpoints",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L124",
- "community": 3,
- "norm_label": "3.5 admin endpoints",
- "id": "docs_implementation_plan_md_3_5_admin_endpoints"
- },
- {
- "label": "Phase 4: Lucky California Scraper",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L132",
- "community": 3,
- "norm_label": "phase 4: lucky california scraper",
- "id": "docs_implementation_plan_md_phase_4_lucky_california_scraper"
- },
- {
- "label": "4.1 Scraper Infrastructure",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L134",
- "community": 3,
- "norm_label": "4.1 scraper infrastructure",
- "id": "docs_implementation_plan_md_4_1_scraper_infrastructure"
- },
- {
- "label": "4.2 Weekly Ad Scraper",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L141",
- "community": 3,
- "norm_label": "4.2 weekly ad scraper",
- "id": "docs_implementation_plan_md_4_2_weekly_ad_scraper"
- },
- {
- "label": "4.3 Product Catalog Scraper (Future)",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L148",
- "community": 3,
- "norm_label": "4.3 product catalog scraper (future)",
- "id": "docs_implementation_plan_md_4_3_product_catalog_scraper_future"
- },
- {
- "label": "4.4 Scrape Scheduling",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L153",
- "community": 3,
- "norm_label": "4.4 scrape scheduling",
- "id": "docs_implementation_plan_md_4_4_scrape_scheduling"
- },
- {
- "label": "4.5 Error Handling",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L158",
- "community": 3,
- "norm_label": "4.5 error handling",
- "id": "docs_implementation_plan_md_4_5_error_handling"
- },
- {
- "label": "Phase 5: Recipe Engine",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L167",
- "community": 3,
- "norm_label": "phase 5: recipe engine",
- "id": "docs_implementation_plan_md_phase_5_recipe_engine"
- },
- {
- "label": "5.1 Recipe Database",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L169",
- "community": 3,
- "norm_label": "5.1 recipe database",
- "id": "docs_implementation_plan_md_5_1_recipe_database"
- },
- {
- "label": "5.2 Recipe Importing",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L175",
- "community": 3,
- "norm_label": "5.2 recipe importing",
- "id": "docs_implementation_plan_md_5_2_recipe_importing"
- },
- {
- "label": "5.3 Ingredient Mapping",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L180",
- "community": 3,
- "norm_label": "5.3 ingredient mapping",
- "id": "docs_implementation_plan_md_5_3_ingredient_mapping"
- },
- {
- "label": "Phase 6: Meal Planner Engine",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L189",
- "community": 3,
- "norm_label": "phase 6: meal planner engine",
- "id": "docs_implementation_plan_md_phase_6_meal_planner_engine"
- },
- {
- "label": "6.1 Plan Generation Algorithm",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L191",
- "community": 3,
- "norm_label": "6.1 plan generation algorithm",
- "id": "docs_implementation_plan_md_6_1_plan_generation_algorithm"
- },
- {
- "label": "6.2 Substitution Logic",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L200",
- "community": 3,
- "norm_label": "6.2 substitution logic",
- "id": "docs_implementation_plan_md_6_2_substitution_logic"
- },
- {
- "label": "6.3 Cost Calculation",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L205",
- "community": 3,
- "norm_label": "6.3 cost calculation",
- "id": "docs_implementation_plan_md_6_3_cost_calculation"
- },
- {
- "label": "6.4 Plan Persistence",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L210",
- "community": 3,
- "norm_label": "6.4 plan persistence",
- "id": "docs_implementation_plan_md_6_4_plan_persistence"
- },
- {
- "label": "Phase 7: SendGrid Email Integration",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L219",
- "community": 3,
- "norm_label": "phase 7: sendgrid email integration",
- "id": "docs_implementation_plan_md_phase_7_sendgrid_email_integration"
- },
- {
- "label": "7.1 SendGrid Setup",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L221",
- "community": 3,
- "norm_label": "7.1 sendgrid setup",
- "id": "docs_implementation_plan_md_7_1_sendgrid_setup"
- },
- {
- "label": "7.2 Meal Proposal Email",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L227",
- "community": 3,
- "norm_label": "7.2 meal proposal email",
- "id": "docs_implementation_plan_md_7_2_meal_proposal_email"
- },
- {
- "label": "7.3 Reminder Email",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L236",
- "community": 3,
- "norm_label": "7.3 reminder email",
- "id": "docs_implementation_plan_md_7_3_reminder_email"
- },
- {
- "label": "7.4 Confirmation Email",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L241",
- "community": 3,
- "norm_label": "7.4 confirmation email",
- "id": "docs_implementation_plan_md_7_4_confirmation_email"
- },
- {
- "label": "Phase 8: Web UI - Core Features",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L250",
- "community": 3,
- "norm_label": "phase 8: web ui - core features",
- "id": "docs_implementation_plan_md_phase_8_web_ui_core_features"
- },
- {
- "label": "8.1 Dashboard",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L252",
- "community": 3,
- "norm_label": "8.1 dashboard",
- "id": "docs_implementation_plan_md_8_1_dashboard"
- },
- {
- "label": "8.2 Meal Detail Page",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L259",
- "community": 3,
- "norm_label": "8.2 meal detail page",
- "id": "docs_implementation_plan_md_8_2_meal_detail_page"
- },
- {
- "label": "8.3 Approval Center",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L266",
- "community": 3,
- "norm_label": "8.3 approval center",
- "id": "docs_implementation_plan_md_8_3_approval_center"
- },
- {
- "label": "8.4 Pantry Manager",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L272",
- "community": 3,
- "norm_label": "8.4 pantry manager",
- "id": "docs_implementation_plan_md_8_4_pantry_manager"
- },
- {
- "label": "Phase 9: Web UI - Feedback & Learning",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L282",
- "community": 3,
- "norm_label": "phase 9: web ui - feedback & learning",
- "id": "docs_implementation_plan_md_phase_9_web_ui_feedback_learning"
- },
- {
- "label": "9.1 Feedback Portal",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L284",
- "community": 3,
- "norm_label": "9.1 feedback portal",
- "id": "docs_implementation_plan_md_9_1_feedback_portal"
- },
- {
- "label": "9.2 Learning Integration",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L290",
- "community": 3,
- "norm_label": "9.2 learning integration",
- "id": "docs_implementation_plan_md_9_2_learning_integration"
- },
- {
- "label": "9.3 Recipe Discovery",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L295",
- "community": 3,
- "norm_label": "9.3 recipe discovery",
- "id": "docs_implementation_plan_md_9_3_recipe_discovery"
- },
- {
- "label": "Phase 10: Shopping List & Print",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L305",
- "community": 3,
- "norm_label": "phase 10: shopping list & print",
- "id": "docs_implementation_plan_md_phase_10_shopping_list_print"
- },
- {
- "label": "10.1 Shopping List Generation",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L307",
- "community": 3,
- "norm_label": "10.1 shopping list generation",
- "id": "docs_implementation_plan_md_10_1_shopping_list_generation"
- },
- {
- "label": "10.2 Printable Shopping List",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L314",
- "community": 3,
- "norm_label": "10.2 printable shopping list",
- "id": "docs_implementation_plan_md_10_2_printable_shopping_list"
- },
- {
- "label": "10.3 Web UI Shopping List View",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L320",
- "community": 3,
- "norm_label": "10.3 web ui shopping list view",
- "id": "docs_implementation_plan_md_10_3_web_ui_shopping_list_view"
- },
- {
- "label": "Phase 11: Image Strategy Implementation",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L331",
- "community": 3,
- "norm_label": "phase 11: image strategy implementation",
- "id": "docs_implementation_plan_md_phase_11_image_strategy_implementation"
- },
- {
- "label": "11.1 Scraped Images",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L333",
- "community": 3,
- "norm_label": "11.1 scraped images",
- "id": "docs_implementation_plan_md_11_1_scraped_images"
- },
- {
- "label": "11.2 AI Image Generation (Fallback)",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L338",
- "community": 3,
- "norm_label": "11.2 ai image generation (fallback)",
- "id": "docs_implementation_plan_md_11_2_ai_image_generation_fallback"
- },
- {
- "label": "11.3 Email Image Handling",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L345",
- "community": 3,
- "norm_label": "11.3 email image handling",
- "id": "docs_implementation_plan_md_11_3_email_image_handling"
- },
- {
- "label": "Phase 12: Polish & Future Features",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L354",
- "community": 3,
- "norm_label": "phase 12: polish & future features",
- "id": "docs_implementation_plan_md_phase_12_polish_future_features"
- },
- {
- "label": "12.1 Variety Analysis",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L356",
- "community": 3,
- "norm_label": "12.1 variety analysis",
- "id": "docs_implementation_plan_md_12_1_variety_analysis"
- },
- {
- "label": "12.2 Budget Tracking",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L361",
- "community": 3,
- "norm_label": "12.2 budget tracking",
- "id": "docs_implementation_plan_md_12_2_budget_tracking"
- },
- {
- "label": "12.3 WhatsApp Integration (Future)",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L366",
- "community": 3,
- "norm_label": "12.3 whatsapp integration (future)",
- "id": "docs_implementation_plan_md_12_3_whatsapp_integration_future"
- },
- {
- "label": "12.4 Recipe Scraping (Future)",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L371",
- "community": 3,
- "norm_label": "12.4 recipe scraping (future)",
- "id": "docs_implementation_plan_md_12_4_recipe_scraping_future"
- },
- {
- "label": "Verification Commands",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L378",
- "community": 3,
- "norm_label": "verification commands",
- "id": "docs_implementation_plan_md_verification_commands"
- },
- {
- "label": "Backend Tests",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L380",
- "community": 3,
- "norm_label": "backend tests",
- "id": "docs_implementation_plan_md_backend_tests"
- },
- {
- "label": "Health check",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L382",
- "community": 3,
- "norm_label": "health check",
- "id": "docs_implementation_plan_md_health_check"
- },
- {
- "label": "API tests",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L385",
- "community": 3,
- "norm_label": "api tests",
- "id": "docs_implementation_plan_md_api_tests"
- },
- {
- "label": "Frontend Tests",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L391",
- "community": 3,
- "norm_label": "frontend tests",
- "id": "docs_implementation_plan_md_frontend_tests"
- },
- {
- "label": "Build test",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L393",
- "community": 3,
- "norm_label": "build test",
- "id": "docs_implementation_plan_md_build_test"
- },
- {
- "label": "Dev server",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L396",
- "community": 3,
- "norm_label": "dev server",
- "id": "docs_implementation_plan_md_dev_server"
- },
- {
- "label": "Full Stack Tests",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L400",
- "community": 3,
- "norm_label": "full stack tests",
- "id": "docs_implementation_plan_md_full_stack_tests"
- },
- {
- "label": "Start all services",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L402",
- "community": 3,
- "norm_label": "start all services",
- "id": "docs_implementation_plan_md_start_all_services"
- },
- {
- "label": "Check all services running",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L405",
- "community": 3,
- "norm_label": "check all services running",
- "id": "docs_implementation_plan_md_check_all_services_running"
- },
- {
- "label": "View logs",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L408",
- "community": 3,
- "norm_label": "view logs",
- "id": "docs_implementation_plan_md_view_logs"
- },
- {
- "label": "Stop all services",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L411",
- "community": 3,
- "norm_label": "stop all services",
- "id": "docs_implementation_plan_md_stop_all_services"
- },
- {
- "label": "File Structure",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L417",
- "community": 3,
- "norm_label": "file structure",
- "id": "docs_implementation_plan_md_file_structure"
- },
- {
- "label": "Dependencies",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L484",
- "community": 3,
- "norm_label": "dependencies",
- "id": "docs_implementation_plan_md_dependencies"
- },
- {
- "label": "Backend (Python 3.11+)",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L486",
- "community": 3,
- "norm_label": "backend (python 3.11+)",
- "id": "docs_implementation_plan_md_backend_python_3_11"
- },
- {
- "label": "Frontend (Node 18+)",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L500",
- "community": 3,
- "norm_label": "frontend (node 18+)",
- "id": "docs_implementation_plan_md_frontend_node_18"
- },
- {
- "label": "Environment Variables",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L516",
- "community": 3,
- "norm_label": "environment variables",
- "id": "docs_implementation_plan_md_environment_variables"
- },
- {
- "label": "Backend",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L519",
- "community": 3,
- "norm_label": "backend",
- "id": "docs_implementation_plan_md_backend"
- },
- {
- "label": "Frontend",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L528",
- "community": 3,
- "norm_label": "frontend",
- "id": "docs_implementation_plan_md_frontend"
- },
- {
- "label": "Docker",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L531",
- "community": 3,
- "norm_label": "docker",
- "id": "docs_implementation_plan_md_docker"
- },
- {
- "label": "Notes",
- "file_type": "document",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L537",
- "community": 3,
- "norm_label": "notes",
- "id": "docs_implementation_plan_md_notes"
- },
- {
- "label": "RUNNING.md",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": null,
- "community": 1,
- "norm_label": "running.md",
- "id": "docs_running_md"
- },
- {
- "label": "Running the Meal Planner",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L1",
- "community": 1,
- "norm_label": "running the meal planner",
- "id": "docs_running_md_running_the_meal_planner"
- },
- {
- "label": "Prerequisites",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L3",
- "community": 1,
- "norm_label": "prerequisites",
- "id": "docs_running_md_prerequisites"
- },
- {
- "label": "Environment Setup",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L10",
- "community": 1,
- "norm_label": "environment setup",
- "id": "docs_running_md_environment_setup"
- },
- {
- "label": "1. Clone Repository",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L12",
- "community": 1,
- "norm_label": "1. clone repository",
- "id": "docs_running_md_1_clone_repository"
- },
- {
- "label": "2. Create Environment File",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L19",
- "community": 1,
- "norm_label": "2. create environment file",
- "id": "docs_running_md_2_create_environment_file"
- },
- {
- "label": "Database",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L28",
- "community": 1,
- "norm_label": "database",
- "id": "docs_running_md_database"
- },
- {
- "label": "SendGrid",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L31",
- "community": 1,
- "norm_label": "sendgrid",
- "id": "docs_running_md_sendgrid"
- },
- {
- "label": "Family Emails",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L34",
- "community": 1,
- "norm_label": "family emails",
- "id": "docs_running_md_family_emails"
- },
- {
- "label": "Lucky California (for scraping)",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L38",
- "community": 1,
- "norm_label": "lucky california (for scraping)",
- "id": "docs_running_md_lucky_california_for_scraping"
- },
- {
- "label": "AI Images (optional)",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L41",
- "community": 1,
- "norm_label": "ai images (optional)",
- "id": "docs_running_md_ai_images_optional"
- },
- {
- "label": "3. Create SSL Certificates (for remote access)",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L47",
- "community": 1,
- "norm_label": "3. create ssl certificates (for remote access)",
- "id": "docs_running_md_3_create_ssl_certificates_for_remote_acc"
- },
- {
- "label": "Option 1: Let's Encrypt with Certbot",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L51",
- "community": 1,
- "norm_label": "option 1: let's encrypt with certbot",
- "id": "docs_running_md_option_1_let_s_encrypt_with_certbot"
- },
- {
- "label": "Option 2: Self-signed for local testing",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L54",
- "community": 1,
- "norm_label": "option 2: self-signed for local testing",
- "id": "docs_running_md_option_2_self_signed_for_local_testing"
- },
- {
- "label": "Starting Services",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L59",
- "community": 1,
- "norm_label": "starting services",
- "id": "docs_running_md_starting_services"
- },
- {
- "label": "Local Development",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L61",
- "community": 1,
- "norm_label": "local development",
- "id": "docs_running_md_local_development"
- },
- {
- "label": "Start all services",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L64",
- "community": 1,
- "norm_label": "start all services",
- "id": "docs_running_md_start_all_services"
- },
- {
- "label": "View logs",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L67",
- "community": 1,
- "norm_label": "view logs",
- "id": "docs_running_md_view_logs"
- },
- {
- "label": "Stop all services",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L71",
- "community": 1,
- "norm_label": "stop all services",
- "id": "docs_running_md_stop_all_services"
- },
- {
- "label": "Production Deployment",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L75",
- "community": 1,
- "norm_label": "production deployment",
- "id": "docs_running_md_production_deployment"
- },
- {
- "label": "Start with production settings",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L78",
- "community": 1,
- "norm_label": "start with production settings",
- "id": "docs_running_md_start_with_production_settings"
- },
- {
- "label": "Check service status",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L81",
- "community": 1,
- "norm_label": "check service status",
- "id": "docs_running_md_check_service_status"
- },
- {
- "label": "View resource usage",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L84",
- "community": 1,
- "norm_label": "view resource usage",
- "id": "docs_running_md_view_resource_usage"
- },
- {
- "label": "Accessing the Application",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L88",
- "community": 1,
- "norm_label": "accessing the application",
- "id": "docs_running_md_accessing_the_application"
- },
- {
- "label": "Local Access",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L90",
- "community": 1,
- "norm_label": "local access",
- "id": "docs_running_md_local_access"
- },
- {
- "label": "Remote Access (with reverse proxy)",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L96",
- "community": 1,
- "norm_label": "remote access (with reverse proxy)",
- "id": "docs_running_md_remote_access_with_reverse_proxy"
- },
- {
- "label": "Database Management",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L102",
- "community": 1,
- "norm_label": "database management",
- "id": "docs_running_md_database_management"
- },
- {
- "label": "Initial Migration",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L104",
- "community": 1,
- "norm_label": "initial migration",
- "id": "docs_running_md_initial_migration"
- },
- {
- "label": "Run migrations",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L107",
- "community": 1,
- "norm_label": "run migrations",
- "id": "docs_running_md_run_migrations"
- },
- {
- "label": "Check current migration",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L110",
- "community": 1,
- "norm_label": "check current migration",
- "id": "docs_running_md_check_current_migration"
- },
- {
- "label": "Create new migration after model changes",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L113",
- "community": 1,
- "norm_label": "create new migration after model changes",
- "id": "docs_running_md_create_new_migration_after_model_changes"
- },
- {
- "label": "Backup Database",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L117",
- "community": 1,
- "norm_label": "backup database",
- "id": "docs_running_md_backup_database"
- },
- {
- "label": "Backup to file",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L120",
- "community": 1,
- "norm_label": "backup to file",
- "id": "docs_running_md_backup_to_file"
- },
- {
- "label": "Restore from backup",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L123",
- "community": 1,
- "norm_label": "restore from backup",
- "id": "docs_running_md_restore_from_backup"
- },
- {
- "label": "Reset Database",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L127",
- "community": 1,
- "norm_label": "reset database",
- "id": "docs_running_md_reset_database"
- },
- {
- "label": "Danger: Drops and recreates all data",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L130",
- "community": 1,
- "norm_label": "danger: drops and recreates all data",
- "id": "docs_running_md_danger_drops_and_recreates_all_data"
- },
- {
- "label": "Scraping",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L136",
- "community": 1,
- "norm_label": "scraping",
- "id": "docs_running_md_scraping"
- },
- {
- "label": "Manual Scrape Trigger",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L138",
- "community": 1,
- "norm_label": "manual scrape trigger",
- "id": "docs_running_md_manual_scrape_trigger"
- },
- {
- "label": "Scrape Lucky California weekly ad",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L141",
- "community": 1,
- "norm_label": "scrape lucky california weekly ad",
- "id": "docs_running_md_scrape_lucky_california_weekly_ad"
- },
- {
- "label": "Check Scrape Logs",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L147",
- "community": 1,
- "norm_label": "check scrape logs",
- "id": "docs_running_md_check_scrape_logs"
- },
- {
- "label": "View recent scrape operations",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L150",
- "community": 1,
- "norm_label": "view recent scrape operations",
- "id": "docs_running_md_view_recent_scrape_operations"
- },
- {
- "label": "Scheduling",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L154",
- "community": 1,
- "norm_label": "scheduling",
- "id": "docs_running_md_scheduling"
- },
- {
- "label": "Email Testing",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L160",
- "community": 1,
- "norm_label": "email testing",
- "id": "docs_running_md_email_testing"
- },
- {
- "label": "Test Email Send",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L162",
- "community": 1,
- "norm_label": "test email send",
- "id": "docs_running_md_test_email_send"
- },
- {
- "label": "Send test email",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L165",
- "community": 1,
- "norm_label": "send test email",
- "id": "docs_running_md_send_test_email"
- },
- {
- "label": "View Email Logs",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L171",
- "community": 1,
- "norm_label": "view email logs",
- "id": "docs_running_md_view_email_logs"
- },
- {
- "label": "Troubleshooting",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L177",
- "community": 1,
- "norm_label": "troubleshooting",
- "id": "docs_running_md_troubleshooting"
- },
- {
- "label": "Backend Won't Start",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L179",
- "community": 1,
- "norm_label": "backend won't start",
- "id": "docs_running_md_backend_won_t_start"
- },
- {
- "label": "Check logs",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L182",
- "community": 1,
- "norm_label": "check logs",
- "id": "docs_running_md_check_logs"
- },
- {
- "label": "Common issues:",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L185",
- "community": 1,
- "norm_label": "common issues:",
- "id": "docs_running_md_common_issues"
- },
- {
- "label": "- Database not ready: wait for db to be healthy",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L186",
- "community": 1,
- "norm_label": "- database not ready: wait for db to be healthy",
- "id": "docs_running_md_database_not_ready_wait_for_db_to_be_hea"
- },
- {
- "label": "- Port conflict: check if port 8000 is in use",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L187",
- "community": 1,
- "norm_label": "- port conflict: check if port 8000 is in use",
- "id": "docs_running_md_port_conflict_check_if_port_8000_is_in_u"
- },
- {
- "label": "- Missing env vars: verify .env file exists and is valid",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L188",
- "community": 1,
- "norm_label": "- missing env vars: verify .env file exists and is valid",
- "id": "docs_running_md_missing_env_vars_verify_env_file_exists_"
- },
- {
- "label": "Frontend Build Fails",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L191",
- "community": 1,
- "norm_label": "frontend build fails",
- "id": "docs_running_md_frontend_build_fails"
- },
- {
- "label": "Check for Node version issues",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L194",
- "community": 1,
- "norm_label": "check for node version issues",
- "id": "docs_running_md_check_for_node_version_issues"
- },
- {
- "label": "Clear cache and rebuild",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L197",
- "community": 1,
- "norm_label": "clear cache and rebuild",
- "id": "docs_running_md_clear_cache_and_rebuild"
- },
- {
- "label": "Database Connection Errors",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L203",
- "community": 1,
- "norm_label": "database connection errors",
- "id": "docs_running_md_database_connection_errors"
- },
- {
- "label": "Verify database is running",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L206",
- "community": 1,
- "norm_label": "verify database is running",
- "id": "docs_running_md_verify_database_is_running"
- },
- {
- "label": "Test connection from backend",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L209",
- "community": 1,
- "norm_label": "test connection from backend",
- "id": "docs_running_md_test_connection_from_backend"
- },
- {
- "label": "Check credentials",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L212",
- "community": 1,
- "norm_label": "check credentials",
- "id": "docs_running_md_check_credentials"
- },
- {
- "label": "Scraping Failures",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L216",
- "community": 1,
- "norm_label": "scraping failures",
- "id": "docs_running_md_scraping_failures"
- },
- {
- "label": "Check Lucky California is accessible",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L219",
- "community": 1,
- "norm_label": "check lucky california is accessible",
- "id": "docs_running_md_check_lucky_california_is_accessible"
- },
- {
- "label": "Verify Playwright browser installed",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L222",
- "community": 1,
- "norm_label": "verify playwright browser installed",
- "id": "docs_running_md_verify_playwright_browser_installed"
- },
- {
- "label": "Manual retry",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L225",
- "community": 1,
- "norm_label": "manual retry",
- "id": "docs_running_md_manual_retry"
- },
- {
- "label": "Email Not Sending",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L229",
- "community": 1,
- "norm_label": "email not sending",
- "id": "docs_running_md_email_not_sending"
- },
- {
- "label": "Verify SendGrid API key",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L232",
- "community": 1,
- "norm_label": "verify sendgrid api key",
- "id": "docs_running_md_verify_sendgrid_api_key"
- },
- {
- "label": "Check SendGrid dashboard for failures",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L235",
- "community": 1,
- "norm_label": "check sendgrid dashboard for failures",
- "id": "docs_running_md_check_sendgrid_dashboard_for_failures"
- },
- {
- "label": "Ensure sender email is verified in SendGrid",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L236",
- "community": 1,
- "norm_label": "ensure sender email is verified in sendgrid",
- "id": "docs_running_md_ensure_sender_email_is_verified_in_sendg"
- },
- {
- "label": "Development",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L239",
- "community": 1,
- "norm_label": "development",
- "id": "docs_running_md_development"
- },
- {
- "label": "Backend Development",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L241",
- "community": 1,
- "norm_label": "backend development",
- "id": "docs_running_md_backend_development"
- },
- {
- "label": "Enter backend container",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L244",
- "community": 1,
- "norm_label": "enter backend container",
- "id": "docs_running_md_enter_backend_container"
- },
- {
- "label": "Run tests",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L247",
- "community": 1,
- "norm_label": "run tests",
- "id": "docs_running_md_run_tests"
- },
- {
- "label": "Run with hot reload",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L250",
- "community": 1,
- "norm_label": "run with hot reload",
- "id": "docs_running_md_run_with_hot_reload"
- },
- {
- "label": "Frontend Development",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L254",
- "community": 1,
- "norm_label": "frontend development",
- "id": "docs_running_md_frontend_development"
- },
- {
- "label": "Enter frontend container",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L257",
- "community": 1,
- "norm_label": "enter frontend container",
- "id": "docs_running_md_enter_frontend_container"
- },
- {
- "label": "Run dev server with hot reload",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L260",
- "community": 1,
- "norm_label": "run dev server with hot reload",
- "id": "docs_running_md_run_dev_server_with_hot_reload"
- },
- {
- "label": "Database Migrations",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L264",
- "community": 1,
- "norm_label": "database migrations",
- "id": "docs_running_md_database_migrations"
- },
- {
- "label": "Create migration",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L267",
- "community": 1,
- "norm_label": "create migration",
- "id": "docs_running_md_create_migration"
- },
- {
- "label": "Upgrade",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L270",
- "community": 1,
- "norm_label": "upgrade",
- "id": "docs_running_md_upgrade"
- },
- {
- "label": "Downgrade",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L273",
- "community": 1,
- "norm_label": "downgrade",
- "id": "docs_running_md_downgrade"
- },
- {
- "label": "Show migration history",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L276",
- "community": 1,
- "norm_label": "show migration history",
- "id": "docs_running_md_show_migration_history"
- },
- {
- "label": "Health Checks",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L280",
- "community": 1,
- "norm_label": "health checks",
- "id": "docs_running_md_health_checks"
- },
- {
- "label": "Check backend health",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L283",
- "community": 1,
- "norm_label": "check backend health",
- "id": "docs_running_md_check_backend_health"
- },
- {
- "label": "Check database connectivity",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L286",
- "community": 1,
- "norm_label": "check database connectivity",
- "id": "docs_running_md_check_database_connectivity"
- },
- {
- "label": "Check all services",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L289",
- "community": 1,
- "norm_label": "check all services",
- "id": "docs_running_md_check_all_services"
- },
- {
- "label": "Logs",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L293",
- "community": 1,
- "norm_label": "logs",
- "id": "docs_running_md_logs"
- },
- {
- "label": "View All Logs",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L295",
- "community": 1,
- "norm_label": "view all logs",
- "id": "docs_running_md_view_all_logs"
- },
- {
- "label": "View Specific Service",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L301",
- "community": 1,
- "norm_label": "view specific service",
- "id": "docs_running_md_view_specific_service"
- },
- {
- "label": "Configure Log Level",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L309",
- "community": 1,
- "norm_label": "configure log level",
- "id": "docs_running_md_configure_log_level"
- },
- {
- "label": "Security Notes",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L316",
- "community": 1,
- "norm_label": "security notes",
- "id": "docs_running_md_security_notes"
- },
- {
- "label": "Updating",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L324",
- "community": 1,
- "norm_label": "updating",
- "id": "docs_running_md_updating"
- },
- {
- "label": "Pull latest code",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L327",
- "community": 1,
- "norm_label": "pull latest code",
- "id": "docs_running_md_pull_latest_code"
- },
- {
- "label": "Rebuild images",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L330",
- "community": 1,
- "norm_label": "rebuild images",
- "id": "docs_running_md_rebuild_images"
- },
- {
- "label": "Restart services",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L336",
- "community": 1,
- "norm_label": "restart services",
- "id": "docs_running_md_restart_services"
- },
- {
- "label": "Stopping Completely",
- "file_type": "document",
- "source_file": "docs/RUNNING.md",
- "source_location": "L340",
- "community": 1,
- "norm_label": "stopping completely",
- "id": "docs_running_md_stopping_completely"
- },
- {
- "label": "ORIENTATION.md",
- "file_type": "document",
- "source_file": "docs/ORIENTATION.md",
- "source_location": null,
- "community": 18,
- "norm_label": "orientation.md",
- "id": "docs_orientation_md"
- },
- {
- "label": "Meal Planner \u2014 Orientation",
- "file_type": "document",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L1",
- "community": 18,
- "norm_label": "meal planner \u2014 orientation",
- "id": "docs_orientation_md_meal_planner_orientation"
- },
- {
- "label": "What this project is",
- "file_type": "document",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L7",
- "community": 18,
- "norm_label": "what this project is",
- "id": "docs_orientation_md_what_this_project_is"
- },
- {
- "label": "Architecture (current)",
- "file_type": "document",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L15",
- "community": 18,
- "norm_label": "architecture (current)",
- "id": "docs_orientation_md_architecture_current"
- },
- {
- "label": "Phase status (2026-05-08)",
- "file_type": "document",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L39",
- "community": 18,
- "norm_label": "phase status (2026-05-08)",
- "id": "docs_orientation_md_phase_status_2026_05_08"
- },
- {
- "label": "Auth model (R1-B+D, locked in)",
- "file_type": "document",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L59",
- "community": 18,
- "norm_label": "auth model (r1-b+d, locked in)",
- "id": "docs_orientation_md_auth_model_r1_b_d_locked_in"
- },
- {
- "label": "Database schema highlights",
- "file_type": "document",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L69",
- "community": 18,
- "norm_label": "database schema highlights",
- "id": "docs_orientation_md_database_schema_highlights"
- },
- {
- "label": "Environment variables (verified)",
- "file_type": "document",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L83",
- "community": 18,
- "norm_label": "environment variables (verified)",
- "id": "docs_orientation_md_environment_variables_verified"
- },
- {
- "label": "Database",
- "file_type": "document",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L86",
- "community": 18,
- "norm_label": "database",
- "id": "docs_orientation_md_database"
- },
- {
- "label": "Auth",
- "file_type": "document",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L90",
- "community": 18,
- "norm_label": "auth",
- "id": "docs_orientation_md_auth"
- },
- {
- "label": "Email",
- "file_type": "document",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L95",
- "community": 18,
- "norm_label": "email",
- "id": "docs_orientation_md_email"
- },
- {
- "label": "Phase 5 orchestration",
- "file_type": "document",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L101",
- "community": 18,
- "norm_label": "phase 5 orchestration",
- "id": "docs_orientation_md_phase_5_orchestration"
- },
- {
- "label": "Lucky / Swiftly",
- "file_type": "document",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L105",
- "community": 18,
- "norm_label": "lucky / swiftly",
- "id": "docs_orientation_md_lucky_swiftly"
- },
- {
- "label": "(no bearer-token env var \u2014 minted on demand by app/services/swiftly_auth.py)",
- "file_type": "document",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L109",
- "community": 18,
- "norm_label": "(no bearer-token env var \u2014 minted on demand by app/services/swiftly_auth.py)",
- "id": "docs_orientation_md_no_bearer_token_env_var_minted_on_demand"
- },
- {
- "label": "Other",
- "file_type": "document",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L111",
- "community": 18,
- "norm_label": "other",
- "id": "docs_orientation_md_other"
- },
- {
- "label": "Verification commands",
- "file_type": "document",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L121",
- "community": 18,
- "norm_label": "verification commands",
- "id": "docs_orientation_md_verification_commands"
- },
- {
- "label": "Full local stack (include scheduler for Phase 5)",
- "file_type": "document",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L124",
- "community": 18,
- "norm_label": "full local stack (include scheduler for phase 5)",
- "id": "docs_orientation_md_full_local_stack_include_scheduler_for_p"
- },
- {
- "label": "Verify scheduler",
- "file_type": "document",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L129",
- "community": 18,
- "norm_label": "verify scheduler",
- "id": "docs_orientation_md_verify_scheduler"
- },
- {
- "label": "Expected: 6 lines \u2014 scrape/generate/email/reminder/deadline/finalize",
- "file_type": "document",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L131",
- "community": 18,
- "norm_label": "expected: 6 lines \u2014 scrape/generate/email/reminder/deadline/finalize",
- "id": "docs_orientation_md_expected_6_lines_scrape_generate_email_r"
- },
- {
- "label": "Manual step trigger (useful for testing without waiting for Friday)",
- "file_type": "document",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L133",
- "community": 18,
- "norm_label": "manual step trigger (useful for testing without waiting for friday)",
- "id": "docs_orientation_md_manual_step_trigger_useful_for_testing_w"
- },
- {
- "label": "Frontend",
- "file_type": "document",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L137",
- "community": 18,
- "norm_label": "frontend",
- "id": "docs_orientation_md_frontend"
- },
- {
- "label": "CI: .github/workflows/ci.yml runs both jobs on push/PR.",
- "file_type": "document",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L140",
- "community": 18,
- "norm_label": "ci: .github/workflows/ci.yml runs both jobs on push/pr.",
- "id": "docs_orientation_md_ci_github_workflows_ci_yml_runs_both_job"
- },
- {
- "label": "Conventions",
- "file_type": "document",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L147",
- "community": 18,
- "norm_label": "conventions",
- "id": "docs_orientation_md_conventions"
- },
- {
- "label": "Where to look",
- "file_type": "document",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L158",
- "community": 18,
- "norm_label": "where to look",
- "id": "docs_orientation_md_where_to_look"
- },
- {
- "label": "HANDOFF.md",
- "file_type": "document",
- "source_file": "docs/HANDOFF.md",
- "source_location": null,
- "community": 9,
- "norm_label": "handoff.md",
- "id": "docs_handoff_md"
- },
- {
- "label": "MealPlanner \u2014 Agent Handoff",
- "file_type": "document",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L1",
- "community": 9,
- "norm_label": "mealplanner \u2014 agent handoff",
- "id": "docs_handoff_md_mealplanner_agent_handoff"
- },
- {
- "label": "TL;DR",
- "file_type": "document",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L14",
- "community": 9,
- "norm_label": "tl;dr",
- "id": "docs_handoff_md_tl_dr"
- },
- {
- "label": "Infrastructure \u2014 READ THIS FIRST",
- "file_type": "document",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L26",
- "community": 9,
- "norm_label": "infrastructure \u2014 read this first",
- "id": "docs_handoff_md_infrastructure_read_this_first"
- },
- {
- "label": "Access",
- "file_type": "document",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L28",
- "community": 9,
- "norm_label": "access",
- "id": "docs_handoff_md_access"
- },
- {
- "label": "Stack up",
- "file_type": "document",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L33",
- "community": 9,
- "norm_label": "stack up",
- "id": "docs_handoff_md_stack_up"
- },
- {
- "label": "Applying Python code changes",
- "file_type": "document",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L39",
- "community": 9,
- "norm_label": "applying python code changes",
- "id": "docs_handoff_md_applying_python_code_changes"
- },
- {
- "label": "DB connection",
- "file_type": "document",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L46",
- "community": 9,
- "norm_label": "db connection",
- "id": "docs_handoff_md_db_connection"
- },
- {
- "label": "Admin API auth",
- "file_type": "document",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L52",
- "community": 9,
- "norm_label": "admin api auth",
- "id": "docs_handoff_md_admin_api_auth"
- },
- {
- "label": "Key env vars (`.env.test`)",
- "file_type": "document",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L58",
- "community": 9,
- "norm_label": "key env vars (`.env.test`)",
- "id": "docs_handoff_md_key_env_vars_env_test"
- },
- {
- "label": "Family data (live, seeded)",
- "file_type": "document",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L69",
- "community": 9,
- "norm_label": "family data (live, seeded)",
- "id": "docs_handoff_md_family_data_live_seeded"
- },
- {
- "label": "What changed in this session",
- "file_type": "document",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L78",
- "community": 9,
- "norm_label": "what changed in this session",
- "id": "docs_handoff_md_what_changed_in_this_session"
- },
- {
- "label": "MVP login + auth gating (committed in `feature/mvp-login`, merged to master)",
- "file_type": "document",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L80",
- "community": 9,
- "norm_label": "mvp login + auth gating (committed in `feature/mvp-login`, merged to master)",
- "id": "docs_handoff_md_mvp_login_auth_gating_committed_in_featu"
- },
- {
- "label": "nginx (committed in `59a15a2`)",
- "file_type": "document",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L86",
- "community": 9,
- "norm_label": "nginx (committed in `59a15a2`)",
- "id": "docs_handoff_md_nginx_committed_in_59a15a2"
- },
- {
- "label": "Vote email enrichment (`aeed2a4`)",
- "file_type": "document",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L91",
- "community": 9,
- "norm_label": "vote email enrichment (`aeed2a4`)",
- "id": "docs_handoff_md_vote_email_enrichment_aeed2a4"
- },
- {
- "label": "Shopping list email improvements (`aeed2a4`)",
- "file_type": "document",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L99",
- "community": 9,
- "norm_label": "shopping list email improvements (`aeed2a4`)",
- "id": "docs_handoff_md_shopping_list_email_improvements_aeed2a4"
- },
- {
- "label": "Ingredient matcher \u2014 full rewrite (`ac2b575`, `d7a3f5c`, `2373883`)",
- "file_type": "document",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L103",
- "community": 9,
- "norm_label": "ingredient matcher \u2014 full rewrite (`ac2b575`, `d7a3f5c`, `2373883`)",
- "id": "docs_handoff_md_ingredient_matcher_full_rewrite_ac2b575_"
- },
- {
- "label": "Scraper fix \u2014 save priceless produce (`2373883`)",
- "file_type": "document",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L145",
- "community": 9,
- "norm_label": "scraper fix \u2014 save priceless produce (`2373883`)",
- "id": "docs_handoff_md_scraper_fix_save_priceless_produce_23738"
- },
- {
- "label": "What is real (verified)",
- "file_type": "document",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L150",
- "community": 9,
- "norm_label": "what is real (verified)",
- "id": "docs_handoff_md_what_is_real_verified"
- },
- {
- "label": "Lucky CA API (Swiftly) \u2014 full catalog accessible",
- "file_type": "document",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L154",
- "community": 9,
- "norm_label": "lucky ca api (swiftly) \u2014 full catalog accessible",
- "id": "docs_handoff_md_lucky_ca_api_swiftly_full_catalog_access"
- },
- {
- "label": "Matcher runs automatically",
- "file_type": "document",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L162",
- "community": 9,
- "norm_label": "matcher runs automatically",
- "id": "docs_handoff_md_matcher_runs_automatically"
- },
- {
- "label": "What is stubbed or missing",
- "file_type": "document",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L167",
- "community": 9,
- "norm_label": "what is stubbed or missing",
- "id": "docs_handoff_md_what_is_stubbed_or_missing"
- },
- {
- "label": "Recipe images (Phase 10 \u2014 approved, not started)",
- "file_type": "document",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L169",
- "community": 9,
- "norm_label": "recipe images (phase 10 \u2014 approved, not started)",
- "id": "docs_handoff_md_recipe_images_phase_10_approved_not_star"
- },
- {
- "label": "Recipe descriptions",
- "file_type": "document",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L174",
- "community": 9,
- "norm_label": "recipe descriptions",
- "id": "docs_handoff_md_recipe_descriptions"
- },
- {
- "label": "Olive Oil + Corn Tortillas (Lucky catalog gap)",
- "file_type": "document",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L178",
- "community": 9,
- "norm_label": "olive oil + corn tortillas (lucky catalog gap)",
- "id": "docs_handoff_md_olive_oil_corn_tortillas_lucky_catalog_g"
- },
- {
- "label": "Phase 8 \u2014 Feedback UI (done)",
- "file_type": "document",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L183",
- "community": 9,
- "norm_label": "phase 8 \u2014 feedback ui (done)",
- "id": "docs_handoff_md_phase_8_feedback_ui_done"
- },
- {
- "label": "Known caveats and traps",
- "file_type": "document",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L189",
- "community": 9,
- "norm_label": "known caveats and traps",
- "id": "docs_handoff_md_known_caveats_and_traps"
- },
- {
- "label": "Admin API reference",
- "file_type": "document",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L212",
- "community": 9,
- "norm_label": "admin api reference",
- "id": "docs_handoff_md_admin_api_reference"
- },
- {
- "label": "Trigger individual steps",
- "file_type": "document",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L215",
- "community": 9,
- "norm_label": "trigger individual steps",
- "id": "docs_handoff_md_trigger_individual_steps"
- },
- {
- "label": "Valid steps: scrape, generate, email, reminder, deadline, finalize",
- "file_type": "document",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L218",
- "community": 9,
- "norm_label": "valid steps: scrape, generate, email, reminder, deadline, finalize",
- "id": "docs_handoff_md_valid_steps_scrape_generate_email_remind"
- },
- {
- "label": "Full week cycle (background)",
- "file_type": "document",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L220",
- "community": 9,
- "norm_label": "full week cycle (background)",
- "id": "docs_handoff_md_full_week_cycle_background"
- },
- {
- "label": "Scrape status",
- "file_type": "document",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L224",
- "community": 9,
- "norm_label": "scrape status",
- "id": "docs_handoff_md_scrape_status"
- },
- {
- "label": "Weekly run status",
- "file_type": "document",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L228",
- "community": 9,
- "norm_label": "weekly run status",
- "id": "docs_handoff_md_weekly_run_status"
- },
- {
- "label": "Trigger fresh scrape + auto-match",
- "file_type": "document",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L232",
- "community": 9,
- "norm_label": "trigger fresh scrape + auto-match",
- "id": "docs_handoff_md_trigger_fresh_scrape_auto_match"
- },
- {
- "label": "Suggested next moves",
- "file_type": "document",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L239",
- "community": 9,
- "norm_label": "suggested next moves",
- "id": "docs_handoff_md_suggested_next_moves"
- },
- {
- "label": "1. Spoonacular recipe enrichment (images + descriptions)",
- "file_type": "document",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L241",
- "community": 9,
- "norm_label": "1. spoonacular recipe enrichment (images + descriptions)",
- "id": "docs_handoff_md_1_spoonacular_recipe_enrichment_images_d"
- },
- {
- "label": "2. Ollama LLM matcher (Olive Oil, Corn Tortillas, etc.)",
- "file_type": "document",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L251",
- "community": 9,
- "norm_label": "2. ollama llm matcher (olive oil, corn tortillas, etc.)",
- "id": "docs_handoff_md_2_ollama_llm_matcher_olive_oil_corn_tort"
- },
- {
- "label": "3. Natural Friday cycle",
- "file_type": "document",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L267",
- "community": 9,
- "norm_label": "3. natural friday cycle",
- "id": "docs_handoff_md_3_natural_friday_cycle"
- },
- {
- "label": "File map (additions from this session)",
- "file_type": "document",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L273",
- "community": 9,
- "norm_label": "file map (additions from this session)",
- "id": "docs_handoff_md_file_map_additions_from_this_session"
- },
- {
- "label": "Final words",
- "file_type": "document",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L285",
- "community": 9,
- "norm_label": "final words",
- "id": "docs_handoff_md_final_words"
- },
- {
- "label": "2026-05-05-meal-planner-algorithm-design.md",
- "file_type": "document",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": null,
- "community": 21,
- "norm_label": "2026-05-05-meal-planner-algorithm-design.md",
- "id": "docs_specs_2026_05_05_meal_planner_algorithm_design_md"
- },
- {
- "label": "Meal Planner Algorithm \u2014 Design Spec",
- "file_type": "document",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": "L1",
- "community": 21,
- "norm_label": "meal planner algorithm \u2014 design spec",
- "id": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_meal_planner_algorithm_design_spec"
- },
- {
- "label": "1. Goal",
- "file_type": "document",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": "L9",
- "community": 21,
- "norm_label": "1. goal",
- "id": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_1_goal"
- },
- {
- "label": "2. Algorithm shape",
- "file_type": "document",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": "L17",
- "community": 21,
- "norm_label": "2. algorithm shape",
- "id": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_2_algorithm_shape"
- },
- {
- "label": "2.1 Hard constraints",
- "file_type": "document",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": "L26",
- "community": 21,
- "norm_label": "2.1 hard constraints",
- "id": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_2_1_hard_constraints"
- },
- {
- "label": "2.2 Scoring signals",
- "file_type": "document",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": "L41",
- "community": 21,
- "norm_label": "2.2 scoring signals",
- "id": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_2_2_scoring_signals"
- },
- {
- "label": "2.3 Set-selection diversity",
- "file_type": "document",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": "L64",
- "community": 21,
- "norm_label": "2.3 set-selection diversity",
- "id": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_2_3_set_selection_diversity"
- },
- {
- "label": "3. Ingredient \u2194 grocery_item matching layer",
- "file_type": "document",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": "L82",
- "community": 21,
- "norm_label": "3. ingredient \u2194 grocery_item matching layer",
- "id": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_3_ingredient_grocery_item_matching_layer"
- },
- {
- "label": "3.1 Schema",
- "file_type": "document",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": "L86",
- "community": 21,
- "norm_label": "3.1 schema",
- "id": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_3_1_schema"
- },
- {
- "label": "3.2 Match job",
- "file_type": "document",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": "L112",
- "community": 21,
- "norm_label": "3.2 match job",
- "id": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_3_2_match_job"
- },
- {
- "label": "3.3 Manual override",
- "file_type": "document",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": "L123",
- "community": 21,
- "norm_label": "3.3 manual override",
- "id": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_3_3_manual_override"
- },
- {
- "label": "3.4 Recipe-create assist",
- "file_type": "document",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": "L127",
- "community": 21,
- "norm_label": "3.4 recipe-create assist",
- "id": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_3_4_recipe_create_assist"
- },
- {
- "label": "4. Thin Phase 4 surface",
- "file_type": "document",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": "L133",
- "community": 21,
- "norm_label": "4. thin phase 4 surface",
- "id": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_4_thin_phase_4_surface"
- },
- {
- "label": "4.1 In scope",
- "file_type": "document",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": "L137",
- "community": 21,
- "norm_label": "4.1 in scope",
- "id": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_4_1_in_scope"
- },
- {
- "label": "4.2 Recipe model fields (additions to existing `recipe` table)",
- "file_type": "document",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": "L150",
- "community": 21,
- "norm_label": "4.2 recipe model fields (additions to existing `recipe` table)",
- "id": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_4_2_recipe_model_fields_additions_to_exi"
- },
- {
- "label": "4.3 Out of scope (deferred)",
- "file_type": "document",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": "L174",
- "community": 21,
- "norm_label": "4.3 out of scope (deferred)",
- "id": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_4_3_out_of_scope_deferred"
- },
- {
- "label": "5. Phase 9 API surface",
- "file_type": "document",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": "L185",
- "community": 21,
- "norm_label": "5. phase 9 api surface",
- "id": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_5_phase_9_api_surface"
- },
- {
- "label": "6. Recipe source comparison (deferred decision)",
- "file_type": "document",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": "L204",
- "community": 21,
- "norm_label": "6. recipe source comparison (deferred decision)",
- "id": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_6_recipe_source_comparison_deferred_deci"
- },
- {
- "label": "7. Open questions / deferred",
- "file_type": "document",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": "L224",
- "community": 21,
- "norm_label": "7. open questions / deferred",
- "id": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_7_open_questions_deferred"
- },
- {
- "label": "8. Implementation order",
- "file_type": "document",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": "L233",
- "community": 21,
- "norm_label": "8. implementation order",
- "id": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_8_implementation_order"
- },
- {
- "label": "9. Out of scope for this spec",
- "file_type": "document",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": "L245",
- "community": 21,
- "norm_label": "9. out of scope for this spec",
- "id": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_9_out_of_scope_for_this_spec"
- },
- {
- "label": "2026-05-05-thin-phase-4-recipe-engine.md",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": null,
- "community": 19,
- "norm_label": "2026-05-05-thin-phase-4-recipe-engine.md",
- "id": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md"
- },
- {
- "label": "Thin Phase 4 \u2014 Recipe Engine + Matching Layer Implementation Plan",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L1",
- "community": 19,
- "norm_label": "thin phase 4 \u2014 recipe engine + matching layer implementation plan",
- "id": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_thin_phase_4_recipe_engine_matching_laye"
- },
- {
- "label": "File Structure",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L21",
- "community": 19,
- "norm_label": "file structure",
- "id": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_file_structure"
- },
- {
- "label": "Task 1: Add rapidfuzz dependency",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L50",
- "community": 19,
- "norm_label": "task 1: add rapidfuzz dependency",
- "id": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_1_add_rapidfuzz_dependency"
- },
- {
- "label": "Task 2: Migration 0006 \u2014 schema changes",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L92",
- "community": 19,
- "norm_label": "task 2: migration 0006 \u2014 schema changes",
- "id": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_2_migration_0006_schema_changes"
- },
- {
- "label": "Task 3: Update SQLAlchemy models",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L228",
- "community": 19,
- "norm_label": "task 3: update sqlalchemy models",
- "id": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_3_update_sqlalchemy_models"
- },
- {
- "label": "Task 4: Pydantic schemas \u2014 ingredient",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L313",
- "community": 19,
- "norm_label": "task 4: pydantic schemas \u2014 ingredient",
- "id": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_4_pydantic_schemas_ingredient"
- },
- {
- "label": "Task 5: Pydantic schemas \u2014 recipe",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L450",
- "community": 19,
- "norm_label": "task 5: pydantic schemas \u2014 recipe",
- "id": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_5_pydantic_schemas_recipe"
- },
- {
- "label": "Task 6: Ingredient CRUD endpoints",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L611",
- "community": 19,
- "norm_label": "task 6: ingredient crud endpoints",
- "id": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_6_ingredient_crud_endpoints"
- },
- {
- "label": "Task 7: Recipe CRUD endpoints",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L850",
- "community": 19,
- "norm_label": "task 7: recipe crud endpoints",
- "id": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_7_recipe_crud_endpoints"
- },
- {
- "label": "Task 8: Resolve-ingredient assist endpoint",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L1121",
- "community": 19,
- "norm_label": "task 8: resolve-ingredient assist endpoint",
- "id": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_8_resolve_ingredient_assist_endpoin"
- },
- {
- "label": "Task 9: Matcher service (rapidfuzz top-3)",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L1304",
- "community": 19,
- "norm_label": "task 9: matcher service (rapidfuzz top-3)",
- "id": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_9_matcher_service_rapidfuzz_top_3"
- },
- {
- "label": "Task 10: Wire matcher into scrape success path",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L1528",
- "community": 19,
- "norm_label": "task 10: wire matcher into scrape success path",
- "id": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_10_wire_matcher_into_scrape_success"
- },
- {
- "label": "Task 11: Manual match override endpoints",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L1658",
- "community": 19,
- "norm_label": "task 11: manual match override endpoints",
- "id": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_11_manual_match_override_endpoints"
- },
- {
- "label": "Re-import BaseModel near the top of the file if not already present.",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L1757",
- "community": 19,
- "norm_label": "re-import basemodel near the top of the file if not already present.",
- "id": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_re_import_basemodel_near_the_top_of_the_"
- },
- {
- "label": "Task 12: NeverSuggest CRUD endpoints",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L1841",
- "community": 19,
- "norm_label": "task 12: neversuggest crud endpoints",
- "id": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_12_neversuggest_crud_endpoints"
- },
- {
- "label": "Task 13: Migration 0007 \u2014 seed canonical ingredients",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L2078",
- "community": 19,
- "norm_label": "task 13: migration 0007 \u2014 seed canonical ingredients",
- "id": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_13_migration_0007_seed_canonical_in"
- },
- {
- "label": "Stable UUIDs so re-running upgrade after a downgrade is idempotent on FK refs.",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L2110",
- "community": 19,
- "norm_label": "stable uuids so re-running upgrade after a downgrade is idempotent on fk refs.",
- "id": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_stable_uuids_so_re_running_upgrade_after"
- },
- {
- "label": "Task 14: Migration 0007 \u2014 populate 30 starter recipes",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L2263",
- "community": 19,
- "norm_label": "task 14: migration 0007 \u2014 populate 30 starter recipes",
- "id": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_14_migration_0007_populate_30_start"
- },
- {
- "label": "Task 15: End-to-end smoke test + docs refresh",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L2406",
- "community": 19,
- "norm_label": "task 15: end-to-end smoke test + docs refresh",
- "id": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_15_end_to_end_smoke_test_docs_refre"
- },
- {
- "label": "Verification gate",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L2504",
- "community": 19,
- "norm_label": "verification gate",
- "id": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_verification_gate"
- },
- {
- "label": "Out of scope (Phase 9 plan, written separately)",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L2519",
- "community": 19,
- "norm_label": "out of scope (phase 9 plan, written separately)",
- "id": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_out_of_scope_phase_9_plan_written_separa"
- },
- {
- "label": "2026-05-05-phase-9-planner-algorithm.md",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-05-phase-9-planner-algorithm.md",
- "source_location": null,
- "community": 30,
- "norm_label": "2026-05-05-phase-9-planner-algorithm.md",
- "id": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md"
- },
- {
- "label": "Phase 9 \u2014 Meal-Planner Algorithm Implementation Plan",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-05-phase-9-planner-algorithm.md",
- "source_location": "L1",
- "community": 30,
- "norm_label": "phase 9 \u2014 meal-planner algorithm implementation plan",
- "id": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md_phase_9_meal_planner_algorithm_implement"
- },
- {
- "label": "File Structure",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-05-phase-9-planner-algorithm.md",
- "source_location": "L22",
- "community": 30,
- "norm_label": "file structure",
- "id": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md_file_structure"
- },
- {
- "label": "Task 1: Planner config + types",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-05-phase-9-planner-algorithm.md",
- "source_location": "L49",
- "community": 30,
- "norm_label": "task 1: planner config + types",
- "id": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md_task_1_planner_config_types"
- },
- {
- "label": "Task 2: Cost + savings estimator",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-05-phase-9-planner-algorithm.md",
- "source_location": "L208",
- "community": 30,
- "norm_label": "task 2: cost + savings estimator",
- "id": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md_task_2_cost_savings_estimator"
- },
- {
- "label": "Task 3: Hard-constraint filter",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-05-phase-9-planner-algorithm.md",
- "source_location": "L456",
- "community": 30,
- "norm_label": "task 3: hard-constraint filter",
- "id": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md_task_3_hard_constraint_filter"
- },
- {
- "label": "Task 4: Individual scoring",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-05-phase-9-planner-algorithm.md",
- "source_location": "L778",
- "community": 30,
- "norm_label": "task 4: individual scoring",
- "id": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md_task_4_individual_scoring"
- },
- {
- "label": "Task 5: Top-K set selection with diversity",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-05-phase-9-planner-algorithm.md",
- "source_location": "L1040",
- "community": 30,
- "norm_label": "task 5: top-k set selection with diversity",
- "id": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md_task_5_top_k_set_selection_with_diversit"
- },
- {
- "label": "Task 6: Generation orchestrator",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-05-phase-9-planner-algorithm.md",
- "source_location": "L1212",
- "community": 30,
- "norm_label": "task 6: generation orchestrator",
- "id": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md_task_6_generation_orchestrator"
- },
- {
- "label": "Task 7: Generate API endpoint",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-05-phase-9-planner-algorithm.md",
- "source_location": "L1559",
- "community": 30,
- "norm_label": "task 7: generate api endpoint",
- "id": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md_task_7_generate_api_endpoint"
- },
- {
- "label": "Task 8: Final regression sweep + docs refresh",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-05-phase-9-planner-algorithm.md",
- "source_location": "L1899",
- "community": 30,
- "norm_label": "task 8: final regression sweep + docs refresh",
- "id": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md_task_8_final_regression_sweep_docs_refre"
- },
- {
- "label": "Verification gate",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-05-phase-9-planner-algorithm.md",
- "source_location": "L1948",
- "community": 30,
- "norm_label": "verification gate",
- "id": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md_verification_gate"
- },
- {
- "label": "Open items (deferred, tracked here)",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-05-phase-9-planner-algorithm.md",
- "source_location": "L1961",
- "community": 30,
- "norm_label": "open items (deferred, tracked here)",
- "id": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md_open_items_deferred_tracked_here"
- },
- {
- "label": "Out of scope (other phases)",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-05-phase-9-planner-algorithm.md",
- "source_location": "L1971",
- "community": 30,
- "norm_label": "out of scope (other phases)",
- "id": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md_out_of_scope_other_phases"
- },
- {
- "label": "2026-05-07-phase5-orchestration.md",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": null,
- "community": 11,
- "norm_label": "2026-05-07-phase5-orchestration.md",
- "id": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md"
- },
- {
- "label": "Phase 5 \u2014 Weekly Orchestration Implementation Plan",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L1",
- "community": 11,
- "norm_label": "phase 5 \u2014 weekly orchestration implementation plan",
- "id": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_phase_5_weekly_orchestration_implementat"
- },
- {
- "label": "File Map",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L13",
- "community": 11,
- "norm_label": "file map",
- "id": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_file_map"
- },
- {
- "label": "Task 1 \u2014 Alembic migration 0008",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L32",
- "community": 11,
- "norm_label": "task 1 \u2014 alembic migration 0008",
- "id": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_task_1_alembic_migration_0008"
- },
- {
- "label": "backend/alembic/versions/0008_phase5_orchestration.py",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L40",
- "community": 11,
- "norm_label": "backend/alembic/versions/0008_phase5_orchestration.py",
- "id": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_backend_alembic_versions_0008_phase5_orc"
- },
- {
- "label": "Task 2 \u2014 WeeklyRun model + FamilyProfile update",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L134",
- "community": 11,
- "norm_label": "task 2 \u2014 weeklyrun model + familyprofile update",
- "id": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_task_2_weeklyrun_model_familyprofile_upd"
- },
- {
- "label": "column (after calorie_target line):",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L177",
- "community": 11,
- "norm_label": "column (after calorie_target line):",
- "id": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_column_after_calorie_target_line"
- },
- {
- "label": "relationship (after the existing relationships):",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L180",
- "community": 11,
- "norm_label": "relationship (after the existing relationships):",
- "id": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_relationship_after_the_existing_relation"
- },
- {
- "label": "Task 3 \u2014 Settings: ADMIN_EMAIL + APP_BASE_URL",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L202",
- "community": 11,
- "norm_label": "task 3 \u2014 settings: admin_email + app_base_url",
- "id": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_task_3_settings_admin_email_app_base_url"
- },
- {
- "label": "Task 4 \u2014 alerts.py",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L242",
- "community": 11,
- "norm_label": "task 4 \u2014 alerts.py",
- "id": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_task_4_alerts_py"
- },
- {
- "label": "---------------------------------------------------------------------------",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L262",
- "community": 11,
- "norm_label": "---------------------------------------------------------------------------",
- "id": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_"
- },
- {
- "label": "Fixtures",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L263",
- "community": 11,
- "norm_label": "fixtures",
- "id": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_fixtures"
- },
- {
- "label": "alerts.py tests",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L393",
- "community": 11,
- "norm_label": "alerts.py tests",
- "id": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_alerts_py_tests"
- },
- {
- "label": "Task 5 \u2014 step_scrape",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L489",
- "community": 11,
- "norm_label": "task 5 \u2014 step_scrape",
- "id": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_task_5_step_scrape"
- },
- {
- "label": "step_scrape tests",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L499",
- "community": 11,
- "norm_label": "step_scrape tests",
- "id": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_step_scrape_tests"
- },
- {
- "label": "Task 6 \u2014 step_generate",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L631",
- "community": 11,
- "norm_label": "task 6 \u2014 step_generate",
- "id": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_task_6_step_generate"
- },
- {
- "label": "step_generate tests",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L641",
- "community": 11,
- "norm_label": "step_generate tests",
- "id": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_step_generate_tests"
- },
- {
- "label": "Task 7 \u2014 step_email",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L742",
- "community": 11,
- "norm_label": "task 7 \u2014 step_email",
- "id": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_task_7_step_email"
- },
- {
- "label": "step_email tests",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L752",
- "community": 11,
- "norm_label": "step_email tests",
- "id": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_step_email_tests"
- },
- {
- "label": "Task 8 \u2014 step_deadline",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L900",
- "community": 11,
- "norm_label": "task 8 \u2014 step_deadline",
- "id": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_task_8_step_deadline"
- },
- {
- "label": "step_deadline tests",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L910",
- "community": 11,
- "norm_label": "step_deadline tests",
- "id": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_step_deadline_tests"
- },
- {
- "label": "Task 9 \u2014 step_finalize",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L1013",
- "community": 11,
- "norm_label": "task 9 \u2014 step_finalize",
- "id": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_task_9_step_finalize"
- },
- {
- "label": "step_finalize tests",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L1023",
- "community": 11,
- "norm_label": "step_finalize tests",
- "id": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_step_finalize_tests"
- },
- {
- "label": "Task 10 \u2014 runner.py + orchestrator/__init__.py",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L1208",
- "community": 11,
- "norm_label": "task 10 \u2014 runner.py + orchestrator/__init__.py",
- "id": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_task_10_runner_py_orchestrator_init_py"
- },
- {
- "label": "runner tests",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L1219",
- "community": 11,
- "norm_label": "runner tests",
- "id": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_runner_tests"
- },
- {
- "label": "backend/app/services/orchestrator/__init__.py",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L1370",
- "community": 11,
- "norm_label": "backend/app/services/orchestrator/__init__.py",
- "id": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_backend_app_services_orchestrator_init_p"
- },
- {
- "label": "Task 11 \u2014 Admin orchestrate endpoints",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L1403",
- "community": 11,
- "norm_label": "task 11 \u2014 admin orchestrate endpoints",
- "id": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_task_11_admin_orchestrate_endpoints"
- },
- {
- "label": "Admin endpoint tests",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L1413",
- "community": 11,
- "norm_label": "admin endpoint tests",
- "id": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_admin_endpoint_tests"
- },
- {
- "label": "Task 12 \u2014 Scheduler entry point",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L1574",
- "community": 11,
- "norm_label": "task 12 \u2014 scheduler entry point",
- "id": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_task_12_scheduler_entry_point"
- },
- {
- "label": "Task 13 \u2014 Docker Compose: scheduler service",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L1680",
- "community": 11,
- "norm_label": "task 13 \u2014 docker compose: scheduler service",
- "id": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_task_13_docker_compose_scheduler_service"
- },
- {
- "label": "Final verification",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L1749",
- "community": 11,
- "norm_label": "final verification",
- "id": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_final_verification"
- },
- {
- "label": "Seed a family_profile row first if DB is fresh",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L1763",
- "community": 11,
- "norm_label": "seed a family_profile row first if db is fresh",
- "id": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_seed_a_family_profile_row_first_if_db_is"
- },
- {
- "label": "Environment variables added",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L1783",
- "community": 11,
- "norm_label": "environment variables added",
- "id": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_environment_variables_added"
- },
- {
- "label": "2026-05-07-phase6-sendgrid.md",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase6-sendgrid.md",
- "source_location": null,
- "community": 31,
- "norm_label": "2026-05-07-phase6-sendgrid.md",
- "id": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md"
- },
- {
- "label": "Phase 6 \u2014 SendGrid Email Integration Implementation Plan",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase6-sendgrid.md",
- "source_location": "L1",
- "community": 31,
- "norm_label": "phase 6 \u2014 sendgrid email integration implementation plan",
- "id": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md_phase_6_sendgrid_email_integration_imple"
- },
- {
- "label": "File map",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase6-sendgrid.md",
- "source_location": "L13",
- "community": 31,
- "norm_label": "file map",
- "id": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md_file_map"
- },
- {
- "label": "Task 1: Migration 0009 \u2014 add `reminded_at` to `weekly_run`",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase6-sendgrid.md",
- "source_location": "L30",
- "community": 31,
- "norm_label": "task 1: migration 0009 \u2014 add `reminded_at` to `weekly_run`",
- "id": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md_task_1_migration_0009_add_reminded_at_to"
- },
- {
- "label": "Context",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase6-sendgrid.md",
- "source_location": "L36",
- "community": 31,
- "norm_label": "context",
- "id": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md_context"
- },
- {
- "label": "Expected: INFO [alembic.runtime.migration] Running upgrade 0008 -> 0009 ...",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase6-sendgrid.md",
- "source_location": "L99",
- "community": 31,
- "norm_label": "expected: info [alembic.runtime.migration] running upgrade 0008 -> 0009 ...",
- "id": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md_expected_info_alembic_runtime_migration_"
- },
- {
- "label": "Expected: Running upgrade 0008 -> 0009 again, clean",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase6-sendgrid.md",
- "source_location": "L105",
- "community": 31,
- "norm_label": "expected: running upgrade 0008 -> 0009 again, clean",
- "id": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md_expected_running_upgrade_0008_0009_again"
- },
- {
- "label": "Task 2: Wire `SendGridEmailBackend`",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase6-sendgrid.md",
- "source_location": "L128",
- "community": 31,
- "norm_label": "task 2: wire `sendgridemailbackend`",
- "id": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md_task_2_wire_sendgridemailbackend"
- },
- {
- "label": "Task 3: `step_reminder` + tests",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase6-sendgrid.md",
- "source_location": "L302",
- "community": 31,
- "norm_label": "task 3: `step_reminder` + tests",
- "id": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md_task_3_step_reminder_tests"
- },
- {
- "label": "\u2500\u2500 step_reminder \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase6-sendgrid.md",
- "source_location": "L339",
- "community": 31,
- "norm_label": "\u2500\u2500 step_reminder \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",
- "id": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md_step_reminder"
- },
- {
- "label": "Task 4: Wire reminder into runner, admin, and scheduler",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase6-sendgrid.md",
- "source_location": "L579",
- "community": 31,
- "norm_label": "task 4: wire reminder into runner, admin, and scheduler",
- "id": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md_task_4_wire_reminder_into_runner_admin_a"
- },
- {
- "label": "Task 5: HTML-escape (#P5-a) and `getattr` cleanup (#P5-b)",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase6-sendgrid.md",
- "source_location": "L674",
- "community": 31,
- "norm_label": "task 5: html-escape (#p5-a) and `getattr` cleanup (#p5-b)",
- "id": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md_task_5_html_escape_p5_a_and_getattr_clea"
- },
- {
- "label": "Final verification",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-07-phase6-sendgrid.md",
- "source_location": "L828",
- "community": 31,
- "norm_label": "final verification",
- "id": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md_final_verification"
- },
- {
- "label": "2026-05-09-mvp-login.md",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-09-mvp-login.md",
- "source_location": null,
- "community": 23,
- "norm_label": "2026-05-09-mvp-login.md",
- "id": "docs_superpowers_plans_2026_05_09_mvp_login_md"
- },
- {
- "label": "MVP Login + Family Seed Implementation Plan",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-09-mvp-login.md",
- "source_location": "L1",
- "community": 23,
- "norm_label": "mvp login + family seed implementation plan",
- "id": "docs_superpowers_plans_2026_05_09_mvp_login_md_mvp_login_family_seed_implementation_pla"
- },
- {
- "label": "File map",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-09-mvp-login.md",
- "source_location": "L13",
- "community": 23,
- "norm_label": "file map",
- "id": "docs_superpowers_plans_2026_05_09_mvp_login_md_file_map"
- },
- {
- "label": "Task 1: Login page + 401 interceptor + nav logout",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-09-mvp-login.md",
- "source_location": "L24",
- "community": 23,
- "norm_label": "task 1: login page + 401 interceptor + nav logout",
- "id": "docs_superpowers_plans_2026_05_09_mvp_login_md_task_1_login_page_401_interceptor_nav_lo"
- },
- {
- "label": "Step 1: Create `frontend/src/pages/Login.tsx`",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-09-mvp-login.md",
- "source_location": "L33",
- "community": 23,
- "norm_label": "step 1: create `frontend/src/pages/login.tsx`",
- "id": "docs_superpowers_plans_2026_05_09_mvp_login_md_step_1_create_frontend_src_pages_login_t"
- },
- {
- "label": "Step 2: Modify `frontend/src/App.tsx`",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-09-mvp-login.md",
- "source_location": "L92",
- "community": 23,
- "norm_label": "step 2: modify `frontend/src/app.tsx`",
- "id": "docs_superpowers_plans_2026_05_09_mvp_login_md_step_2_modify_frontend_src_app_tsx"
- },
- {
- "label": "Step 3: Add 401 interceptor to `frontend/src/api/index.ts`",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-09-mvp-login.md",
- "source_location": "L183",
- "community": 23,
- "norm_label": "step 3: add 401 interceptor to `frontend/src/api/index.ts`",
- "id": "docs_superpowers_plans_2026_05_09_mvp_login_md_step_3_add_401_interceptor_to_frontend_s"
- },
- {
- "label": "Step 4: Build and verify",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-09-mvp-login.md",
- "source_location": "L199",
- "community": 23,
- "norm_label": "step 4: build and verify",
- "id": "docs_superpowers_plans_2026_05_09_mvp_login_md_step_4_build_and_verify"
- },
- {
- "label": "Expected: no TypeScript errors, build succeeds",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-09-mvp-login.md",
- "source_location": "L205",
- "community": 23,
- "norm_label": "expected: no typescript errors, build succeeds",
- "id": "docs_superpowers_plans_2026_05_09_mvp_login_md_expected_no_typescript_errors_build_succ"
- },
- {
- "label": "Step 5: Commit",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-09-mvp-login.md",
- "source_location": "L208",
- "community": 23,
- "norm_label": "step 5: commit",
- "id": "docs_superpowers_plans_2026_05_09_mvp_login_md_step_5_commit"
- },
- {
- "label": "Task 2: Family profile seed script",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-09-mvp-login.md",
- "source_location": "L220",
- "community": 23,
- "norm_label": "task 2: family profile seed script",
- "id": "docs_superpowers_plans_2026_05_09_mvp_login_md_task_2_family_profile_seed_script"
- },
- {
- "label": "\u2500\u2500 Edit these before running \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-09-mvp-login.md",
- "source_location": "L241",
- "community": 23,
- "norm_label": "\u2500\u2500 edit these before running \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",
- "id": "docs_superpowers_plans_2026_05_09_mvp_login_md_edit_these_before_running"
- },
- {
- "label": "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-09-mvp-login.md",
- "source_location": "L249",
- "community": 23,
- "norm_label": "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",
- "id": "docs_superpowers_plans_2026_05_09_mvp_login_md_"
- },
- {
- "label": "Step: Commit",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-09-mvp-login.md",
- "source_location": "L288",
- "community": 23,
- "norm_label": "step: commit",
- "id": "docs_superpowers_plans_2026_05_09_mvp_login_md_step_commit"
- },
- {
- "label": "Post-merge steps (run by operator after merge)",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-09-mvp-login.md",
- "source_location": "L298",
- "community": 23,
- "norm_label": "post-merge steps (run by operator after merge)",
- "id": "docs_superpowers_plans_2026_05_09_mvp_login_md_post_merge_steps_run_by_operator_after_m"
- },
- {
- "label": "1. Add APP_BASE_URL to `.env.test`",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-09-mvp-login.md",
- "source_location": "L300",
- "community": 23,
- "norm_label": "1. add app_base_url to `.env.test`",
- "id": "docs_superpowers_plans_2026_05_09_mvp_login_md_1_add_app_base_url_to_env_test"
- },
- {
- "label": "2. Rebuild frontend container and restart",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-09-mvp-login.md",
- "source_location": "L309",
- "community": 23,
- "norm_label": "2. rebuild frontend container and restart",
- "id": "docs_superpowers_plans_2026_05_09_mvp_login_md_2_rebuild_frontend_container_and_restart"
- },
- {
- "label": "3. Run the seed script",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-09-mvp-login.md",
- "source_location": "L316",
- "community": 23,
- "norm_label": "3. run the seed script",
- "id": "docs_superpowers_plans_2026_05_09_mvp_login_md_3_run_the_seed_script"
- },
- {
- "label": "Edit scripts/seed_family.py to fill in real names/emails first, then:",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-09-mvp-login.md",
- "source_location": "L319",
- "community": 23,
- "norm_label": "edit scripts/seed_family.py to fill in real names/emails first, then:",
- "id": "docs_superpowers_plans_2026_05_09_mvp_login_md_edit_scripts_seed_family_py_to_fill_in_r"
- },
- {
- "label": "4. Verify login works",
- "file_type": "document",
- "source_file": "docs/superpowers/plans/2026-05-09-mvp-login.md",
- "source_location": "L324",
- "community": 23,
- "norm_label": "4. verify login works",
- "id": "docs_superpowers_plans_2026_05_09_mvp_login_md_4_verify_login_works"
- },
- {
- "label": "2026-05-07-phase6-sendgrid-design.md",
- "file_type": "document",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": null,
- "community": 22,
- "norm_label": "2026-05-07-phase6-sendgrid-design.md",
- "id": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md"
- },
- {
- "label": "Phase 6 \u2014 SendGrid Email Integration Design",
- "file_type": "document",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": "L1",
- "community": 22,
- "norm_label": "phase 6 \u2014 sendgrid email integration design",
- "id": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_phase_6_sendgrid_email_integration_desig"
- },
- {
- "label": "Goal",
- "file_type": "document",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": "L7",
- "community": 22,
- "norm_label": "goal",
- "id": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_goal"
- },
- {
- "label": "Scope",
- "file_type": "document",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": "L13",
- "community": 22,
- "norm_label": "scope",
- "id": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_scope"
- },
- {
- "label": "Architecture",
- "file_type": "document",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": "L27",
- "community": 22,
- "norm_label": "architecture",
- "id": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_architecture"
- },
- {
- "label": "Components",
- "file_type": "document",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": "L35",
- "community": 22,
- "norm_label": "components",
- "id": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_components"
- },
- {
- "label": "`backend/app/services/email.py` (modify)",
- "file_type": "document",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": "L37",
- "community": 22,
- "norm_label": "`backend/app/services/email.py` (modify)",
- "id": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_backend_app_services_email_py_modify"
- },
- {
- "label": "`backend/app/config.py` (modify)",
- "file_type": "document",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": "L67",
- "community": 22,
- "norm_label": "`backend/app/config.py` (modify)",
- "id": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_backend_app_config_py_modify"
- },
- {
- "label": "`backend/app/services/orchestrator/steps.py` (modify)",
- "file_type": "document",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": "L74",
- "community": 22,
- "norm_label": "`backend/app/services/orchestrator/steps.py` (modify)",
- "id": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_backend_app_services_orchestrator_steps_"
- },
- {
- "label": "`backend/alembic/versions/0009_phase6_reminded_at.py` (create)",
- "file_type": "document",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": "L100",
- "community": 22,
- "norm_label": "`backend/alembic/versions/0009_phase6_reminded_at.py` (create)",
- "id": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_backend_alembic_versions_0009_phase6_rem"
- },
- {
- "label": "`backend/app/models/__init__.py` (modify)",
- "file_type": "document",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": "L110",
- "community": 22,
- "norm_label": "`backend/app/models/__init__.py` (modify)",
- "id": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_backend_app_models_init_py_modify"
- },
- {
- "label": "`backend/app/services/orchestrator/runner.py` (modify)",
- "file_type": "document",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": "L114",
- "community": 22,
- "norm_label": "`backend/app/services/orchestrator/runner.py` (modify)",
- "id": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_backend_app_services_orchestrator_runner"
- },
- {
- "label": "`backend/app/api/admin.py` (modify)",
- "file_type": "document",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": "L122",
- "community": 22,
- "norm_label": "`backend/app/api/admin.py` (modify)",
- "id": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_backend_app_api_admin_py_modify"
- },
- {
- "label": "`backend/app/scheduler/__main__.py` (modify)",
- "file_type": "document",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": "L130",
- "community": 22,
- "norm_label": "`backend/app/scheduler/__main__.py` (modify)",
- "id": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_backend_app_scheduler_main_py_modify"
- },
- {
- "label": "`requirements.txt` (verify / add)",
- "file_type": "document",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": "L143",
- "community": 22,
- "norm_label": "`requirements.txt` (verify / add)",
- "id": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_requirements_txt_verify_add"
- },
- {
- "label": "Data flow",
- "file_type": "document",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": "L149",
- "community": 22,
- "norm_label": "data flow",
- "id": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_data_flow"
- },
- {
- "label": "Error handling",
- "file_type": "document",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": "L162",
- "community": 22,
- "norm_label": "error handling",
- "id": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_error_handling"
- },
- {
- "label": "Testing",
- "file_type": "document",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": "L168",
- "community": 22,
- "norm_label": "testing",
- "id": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_testing"
- },
- {
- "label": "Environment variables",
- "file_type": "document",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": "L182",
- "community": 22,
- "norm_label": "environment variables",
- "id": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_environment_variables"
- },
- {
- "label": "Required for EMAIL_BACKEND=sendgrid",
- "file_type": "document",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": "L185",
- "community": 22,
- "norm_label": "required for email_backend=sendgrid",
- "id": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_required_for_email_backend_sendgrid"
- },
- {
- "label": "Files touched",
- "file_type": "document",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": "L195",
- "community": 22,
- "norm_label": "files touched",
- "id": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_files_touched"
- },
- {
- "label": "requirements-dev.txt",
- "file_type": "document",
- "source_file": "backend/requirements-dev.txt",
- "source_location": null,
- "community": 8,
- "norm_label": "requirements-dev.txt",
- "id": "backend_requirements_dev_txt"
- },
- {
- "label": "Dev / test-only dependencies. Production deps live in requirements.txt.",
- "file_type": "document",
- "source_file": "backend/requirements-dev.txt",
- "source_location": "L1",
- "community": 8,
- "norm_label": "dev / test-only dependencies. production deps live in requirements.txt.",
- "id": "backend_requirements_dev_txt_dev_test_only_dependencies_production_de"
- },
- {
- "label": "requirements.txt",
- "file_type": "document",
- "source_file": "backend/requirements.txt",
- "source_location": null,
- "community": 8,
- "norm_label": "requirements.txt",
- "id": "backend_requirements_txt"
- },
- {
- "label": "META.md",
- "file_type": "document",
- "source_file": "backend/tests/fixtures/lucky_ca/META.md",
- "source_location": null,
- "community": 43,
- "norm_label": "meta.md",
- "id": "backend_tests_fixtures_lucky_ca_meta_md"
- },
- {
- "label": "Lucky California weekly-ad spike (R2-A)",
- "file_type": "document",
- "source_file": "backend/tests/fixtures/lucky_ca/META.md",
- "source_location": "L1",
- "community": 43,
- "norm_label": "lucky california weekly-ad spike (r2-a)",
- "id": "backend_tests_fixtures_lucky_ca_meta_md_lucky_california_weekly_ad_spike_r2_a"
- },
- {
- "label": "Selectors used (verified against this fixture)",
- "file_type": "document",
- "source_file": "backend/tests/fixtures/lucky_ca/META.md",
- "source_location": "L15",
- "community": 43,
- "norm_label": "selectors used (verified against this fixture)",
- "id": "backend_tests_fixtures_lucky_ca_meta_md_selectors_used_verified_against_this_fix"
- },
- {
- "label": "First parsed item (sample)",
- "file_type": "document",
- "source_file": "backend/tests/fixtures/lucky_ca/META.md",
- "source_location": "L23",
- "community": 43,
- "norm_label": "first parsed item (sample)",
- "id": "backend_tests_fixtures_lucky_ca_meta_md_first_parsed_item_sample"
- },
- {
- "label": "Notes",
- "file_type": "document",
- "source_file": "backend/tests/fixtures/lucky_ca/META.md",
- "source_location": "L38",
- "community": 43,
- "norm_label": "notes",
- "id": "backend_tests_fixtures_lucky_ca_meta_md_notes"
- },
- {
- "label": "docs-gpt5.5.md",
- "file_type": "document",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": null,
- "community": 17,
- "norm_label": "docs-gpt5.5.md",
- "id": "review_docs_gpt5_5_md"
- },
- {
- "label": "Adversarial Documentation Review",
- "file_type": "document",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L1",
- "community": 17,
- "norm_label": "adversarial documentation review",
- "id": "review_docs_gpt5_5_md_adversarial_documentation_review"
- },
- {
- "label": "Verdict",
- "file_type": "document",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L3",
- "community": 17,
- "norm_label": "verdict",
- "id": "review_docs_gpt5_5_md_verdict"
- },
- {
- "label": "Blocking Findings",
- "file_type": "document",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L7",
- "community": 17,
- "norm_label": "blocking findings",
- "id": "review_docs_gpt5_5_md_blocking_findings"
- },
- {
- "label": "1. Phase/status docs contradict current implementation state",
- "file_type": "document",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L9",
- "community": 17,
- "norm_label": "1. phase/status docs contradict current implementation state",
- "id": "review_docs_gpt5_5_md_1_phase_status_docs_contradict_current_i"
- },
- {
- "label": "2. Database schema is internally inconsistent and conflicts with current models",
- "file_type": "document",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L18",
- "community": 17,
- "norm_label": "2. database schema is internally inconsistent and conflicts with current models",
- "id": "review_docs_gpt5_5_md_2_database_schema_is_internally_inconsis"
- },
- {
- "label": "3. API endpoint definitions conflict across docs",
- "file_type": "document",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L27",
- "community": 17,
- "norm_label": "3. api endpoint definitions conflict across docs",
- "id": "review_docs_gpt5_5_md_3_api_endpoint_definitions_conflict_acro"
- },
- {
- "label": "4. Security model is missing for externally reachable workflows",
- "file_type": "document",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L36",
- "community": 17,
- "norm_label": "4. security model is missing for externally reachable workflows",
- "id": "review_docs_gpt5_5_md_4_security_model_is_missing_for_external"
- },
- {
- "label": "5. Migration strategy conflicts with runtime table creation",
- "file_type": "document",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L46",
- "community": 17,
- "norm_label": "5. migration strategy conflicts with runtime table creation",
- "id": "review_docs_gpt5_5_md_5_migration_strategy_conflicts_with_runt"
- },
- {
- "label": "6. Current code appears incompatible with documented model layout",
- "file_type": "document",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L55",
- "community": 17,
- "norm_label": "6. current code appears incompatible with documented model layout",
- "id": "review_docs_gpt5_5_md_6_current_code_appears_incompatible_with"
- },
- {
- "label": "High-Risk Gaps",
- "file_type": "document",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L64",
- "community": 17,
- "norm_label": "high-risk gaps",
- "id": "review_docs_gpt5_5_md_high_risk_gaps"
- },
- {
- "label": "7. Scraping feasibility is under-specified",
- "file_type": "document",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L66",
- "community": 17,
- "norm_label": "7. scraping feasibility is under-specified",
- "id": "review_docs_gpt5_5_md_7_scraping_feasibility_is_under_specifie"
- },
- {
- "label": "8. Meal-planning algorithm lacks deterministic requirements",
- "file_type": "document",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L75",
- "community": 17,
- "norm_label": "8. meal-planning algorithm lacks deterministic requirements",
- "id": "review_docs_gpt5_5_md_8_meal_planning_algorithm_lacks_determin"
- },
- {
- "label": "9. Shopping-list math is not implementable from current docs",
- "file_type": "document",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L84",
- "community": 17,
- "norm_label": "9. shopping-list math is not implementable from current docs",
- "id": "review_docs_gpt5_5_md_9_shopping_list_math_is_not_implementabl"
- },
- {
- "label": "10. Deployment docs promise production features that compose file does not provide",
- "file_type": "document",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L93",
- "community": 17,
- "norm_label": "10. deployment docs promise production features that compose file does not provide",
- "id": "review_docs_gpt5_5_md_10_deployment_docs_promise_production_fe"
- },
- {
- "label": "11. Environment-variable docs are inconsistent and include unsafe examples",
- "file_type": "document",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L102",
- "community": 17,
- "norm_label": "11. environment-variable docs are inconsistent and include unsafe examples",
- "id": "review_docs_gpt5_5_md_11_environment_variable_docs_are_inconsi"
- },
- {
- "label": "Medium-Risk Issues",
- "file_type": "document",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L111",
- "community": 17,
- "norm_label": "medium-risk issues",
- "id": "review_docs_gpt5_5_md_medium_risk_issues"
- },
- {
- "label": "12. Documentation contains stale and misspelled file paths",
- "file_type": "document",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L113",
- "community": 17,
- "norm_label": "12. documentation contains stale and misspelled file paths",
- "id": "review_docs_gpt5_5_md_12_documentation_contains_stale_and_miss"
- },
- {
- "label": "13. Tech-stack docs are already version stale",
- "file_type": "document",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L117",
- "community": 17,
- "norm_label": "13. tech-stack docs are already version stale",
- "id": "review_docs_gpt5_5_md_13_tech_stack_docs_are_already_version_s"
- },
- {
- "label": "14. Operational docs assume endpoints that are not proven to exist",
- "file_type": "document",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L121",
- "community": 17,
- "norm_label": "14. operational docs assume endpoints that are not proven to exist",
- "id": "review_docs_gpt5_5_md_14_operational_docs_assume_endpoints_tha"
- },
- {
- "label": "15. Data retention lacks implementation mechanics",
- "file_type": "document",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L125",
- "community": 17,
- "norm_label": "15. data retention lacks implementation mechanics",
- "id": "review_docs_gpt5_5_md_15_data_retention_lacks_implementation_m"
- },
- {
- "label": "16. Accessibility is barely addressed despite family-facing UI",
- "file_type": "document",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L129",
- "community": 17,
- "norm_label": "16. accessibility is barely addressed despite family-facing ui",
- "id": "review_docs_gpt5_5_md_16_accessibility_is_barely_addressed_des"
- },
- {
- "label": "17. Observability requirements are aspirational",
- "file_type": "document",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L133",
- "community": 17,
- "norm_label": "17. observability requirements are aspirational",
- "id": "review_docs_gpt5_5_md_17_observability_requirements_are_aspira"
- },
- {
- "label": "Suggested Gate Before Implementation",
- "file_type": "document",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L137",
- "community": 17,
- "norm_label": "suggested gate before implementation",
- "id": "review_docs_gpt5_5_md_suggested_gate_before_implementation"
- },
- {
- "label": "Implementation Readiness Rating",
- "file_type": "document",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L149",
- "community": 17,
- "norm_label": "implementation readiness rating",
- "id": "review_docs_gpt5_5_md_implementation_readiness_rating"
- },
- {
- "label": "repo-gpt5.5.md",
- "file_type": "document",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": null,
- "community": 14,
- "norm_label": "repo-gpt5.5.md",
- "id": "review_repo_gpt5_5_md"
- },
- {
- "label": "Repository Analysis",
- "file_type": "document",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L1",
- "community": 14,
- "norm_label": "repository analysis",
- "id": "review_repo_gpt5_5_md_repository_analysis"
- },
- {
- "label": "Executive Summary",
- "file_type": "document",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L3",
- "community": 14,
- "norm_label": "executive summary",
- "id": "review_repo_gpt5_5_md_executive_summary"
- },
- {
- "label": "Current Repo Shape",
- "file_type": "document",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L11",
- "community": 14,
- "norm_label": "current repo shape",
- "id": "review_repo_gpt5_5_md_current_repo_shape"
- },
- {
- "label": "Blocking Findings",
- "file_type": "document",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L32",
- "community": 14,
- "norm_label": "blocking findings",
- "id": "review_repo_gpt5_5_md_blocking_findings"
- },
- {
- "label": "1. Backend likely fails during import because model module layout is inconsistent",
- "file_type": "document",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L34",
- "community": 14,
- "norm_label": "1. backend likely fails during import because model module layout is inconsistent",
- "id": "review_repo_gpt5_5_md_1_backend_likely_fails_during_import_bec"
- },
- {
- "label": "2. SQLAlchemy relationships contain at least one broken back-populates reference",
- "file_type": "document",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L44",
- "community": 14,
- "norm_label": "2. sqlalchemy relationships contain at least one broken back-populates reference",
- "id": "review_repo_gpt5_5_md_2_sqlalchemy_relationships_contain_at_le"
- },
- {
- "label": "3. Frontend build is blocked by a missing imported page",
- "file_type": "document",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L54",
- "community": 14,
- "norm_label": "3. frontend build is blocked by a missing imported page",
- "id": "review_repo_gpt5_5_md_3_frontend_build_is_blocked_by_a_missing"
- },
- {
- "label": "4. Frontend Docker build is blocked by missing npm lockfile",
- "file_type": "document",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L63",
- "community": 14,
- "norm_label": "4. frontend docker build is blocked by missing npm lockfile",
- "id": "review_repo_gpt5_5_md_4_frontend_docker_build_is_blocked_by_mi"
- },
- {
- "label": "5. Vite app is missing required HTML entrypoint",
- "file_type": "document",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L72",
- "community": 14,
- "norm_label": "5. vite app is missing required html entrypoint",
- "id": "review_repo_gpt5_5_md_5_vite_app_is_missing_required_html_entr"
- },
- {
- "label": "6. Alembic is documented and installed but not configured",
- "file_type": "document",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L81",
- "community": 14,
- "norm_label": "6. alembic is documented and installed but not configured",
- "id": "review_repo_gpt5_5_md_6_alembic_is_documented_and_installed_bu"
- },
- {
- "label": "Important Findings",
- "file_type": "document",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L92",
- "community": 14,
- "norm_label": "important findings",
- "id": "review_repo_gpt5_5_md_important_findings"
- },
- {
- "label": "7. API routes are placeholders with no schemas or persistence",
- "file_type": "document",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L94",
- "community": 14,
- "norm_label": "7. api routes are placeholders with no schemas or persistence",
- "id": "review_repo_gpt5_5_md_7_api_routes_are_placeholders_with_no_sc"
- },
- {
- "label": "8. Admin endpoints are unauthenticated",
- "file_type": "document",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L104",
- "community": 14,
- "norm_label": "8. admin endpoints are unauthenticated",
- "id": "review_repo_gpt5_5_md_8_admin_endpoints_are_unauthenticated"
- },
- {
- "label": "9. Email approval security is not implemented and not modeled yet",
- "file_type": "document",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L114",
- "community": 14,
- "norm_label": "9. email approval security is not implemented and not modeled yet",
- "id": "review_repo_gpt5_5_md_9_email_approval_security_is_not_impleme"
- },
- {
- "label": "10. `SECRET_KEY` has an unsafe default",
- "file_type": "document",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L125",
- "community": 14,
- "norm_label": "10. `secret_key` has an unsafe default",
- "id": "review_repo_gpt5_5_md_10_secret_key_has_an_unsafe_default"
- },
- {
- "label": "11. SQLAlchemy 2 health query may fail",
- "file_type": "document",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L135",
- "community": 14,
- "norm_label": "11. sqlalchemy 2 health query may fail",
- "id": "review_repo_gpt5_5_md_11_sqlalchemy_2_health_query_may_fail"
- },
- {
- "label": "12. Docker Compose exposes backend and frontend directly plus nginx",
- "file_type": "document",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L144",
- "community": 14,
- "norm_label": "12. docker compose exposes backend and frontend directly plus nginx",
- "id": "review_repo_gpt5_5_md_12_docker_compose_exposes_backend_and_fr"
- },
- {
- "label": "13. Nginx SSL and rate limiting are not implemented",
- "file_type": "document",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L154",
- "community": 14,
- "norm_label": "13. nginx ssl and rate limiting are not implemented",
- "id": "review_repo_gpt5_5_md_13_nginx_ssl_and_rate_limiting_are_not_i"
- },
- {
- "label": "Maintainability Findings",
- "file_type": "document",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L164",
- "community": 14,
- "norm_label": "maintainability findings",
- "id": "review_repo_gpt5_5_md_maintainability_findings"
- },
- {
- "label": "14. Model file is too large for early iteration and hides domain decisions",
- "file_type": "document",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L166",
- "community": 14,
- "norm_label": "14. model file is too large for early iteration and hides domain decisions",
- "id": "review_repo_gpt5_5_md_14_model_file_is_too_large_for_early_ite"
- },
- {
- "label": "15. Schema constraints are only partially represented",
- "file_type": "document",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L174",
- "community": 14,
- "norm_label": "15. schema constraints are only partially represented",
- "id": "review_repo_gpt5_5_md_15_schema_constraints_are_only_partially"
- },
- {
- "label": "16. API prefix behavior may produce trailing-slash-only endpoints",
- "file_type": "document",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L182",
- "community": 14,
- "norm_label": "16. api prefix behavior may produce trailing-slash-only endpoints",
- "id": "review_repo_gpt5_5_md_16_api_prefix_behavior_may_produce_trail"
- },
- {
- "label": "17. No repository-level quality gates exist",
- "file_type": "document",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L189",
- "community": 14,
- "norm_label": "17. no repository-level quality gates exist",
- "id": "review_repo_gpt5_5_md_17_no_repository_level_quality_gates_exi"
- },
- {
- "label": "Documentation Alignment",
- "file_type": "document",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L197",
- "community": 14,
- "norm_label": "documentation alignment",
- "id": "review_repo_gpt5_5_md_documentation_alignment"
- },
- {
- "label": "Recommended Remediation Order",
- "file_type": "document",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L207",
- "community": 14,
- "norm_label": "recommended remediation order",
- "id": "review_repo_gpt5_5_md_recommended_remediation_order"
- },
- {
- "label": "Phase 0: Make skeleton start and build",
- "file_type": "document",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L209",
- "community": 14,
- "norm_label": "phase 0: make skeleton start and build",
- "id": "review_repo_gpt5_5_md_phase_0_make_skeleton_start_and_build"
- },
- {
- "label": "Phase 1: Establish schema/migration baseline",
- "file_type": "document",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L219",
- "community": 14,
- "norm_label": "phase 1: establish schema/migration baseline",
- "id": "review_repo_gpt5_5_md_phase_1_establish_schema_migration_basel"
- },
- {
- "label": "Phase 2: Establish API and security baseline",
- "file_type": "document",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L227",
- "community": 14,
- "norm_label": "phase 2: establish api and security baseline",
- "id": "review_repo_gpt5_5_md_phase_2_establish_api_and_security_basel"
- },
- {
- "label": "Phase 3: Implement first vertical slice",
- "file_type": "document",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L235",
- "community": 14,
- "norm_label": "phase 3: implement first vertical slice",
- "id": "review_repo_gpt5_5_md_phase_3_implement_first_vertical_slice"
- },
- {
- "label": "Verification Matrix To Add",
- "file_type": "document",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L242",
- "community": 14,
- "norm_label": "verification matrix to add",
- "id": "review_repo_gpt5_5_md_verification_matrix_to_add"
- },
- {
- "label": "Final Assessment",
- "file_type": "document",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L259",
- "community": 14,
- "norm_label": "final assessment",
- "id": "review_repo_gpt5_5_md_final_assessment"
- },
- {
- "label": "docs-claude.md",
- "file_type": "document",
- "source_file": "Review/docs-claude.md",
- "source_location": null,
- "community": 16,
- "norm_label": "docs-claude.md",
- "id": "review_docs_claude_md"
- },
- {
- "label": "Adversarial Documentation Review \u2014 Claude",
- "file_type": "document",
- "source_file": "Review/docs-claude.md",
- "source_location": "L1",
- "community": 16,
- "norm_label": "adversarial documentation review \u2014 claude",
- "id": "review_docs_claude_md_adversarial_documentation_review_claude"
- },
- {
- "label": "Verdict",
- "file_type": "document",
- "source_file": "Review/docs-claude.md",
- "source_location": "L9",
- "community": 16,
- "norm_label": "verdict",
- "id": "review_docs_claude_md_verdict"
- },
- {
- "label": "Blocking",
- "file_type": "document",
- "source_file": "Review/docs-claude.md",
- "source_location": "L17",
- "community": 16,
- "norm_label": "blocking",
- "id": "review_docs_claude_md_blocking"
- },
- {
- "label": "B1. Family profile is internally inconsistent \u2014 the math doesn't close",
- "file_type": "document",
- "source_file": "Review/docs-claude.md",
- "source_location": "L19",
- "community": 16,
- "norm_label": "b1. family profile is internally inconsistent \u2014 the math doesn't close",
- "id": "review_docs_claude_md_b1_family_profile_is_internally_inconsis"
- },
- {
- "label": "B2. There is no `family_member` (or `user`) table \u2014 but the spec is per-person",
- "file_type": "document",
- "source_file": "Review/docs-claude.md",
- "source_location": "L30",
- "community": 16,
- "norm_label": "b2. there is no `family_member` (or `user`) table \u2014 but the spec is per-person",
- "id": "review_docs_claude_md_b2_there_is_no_family_member_or_user_tab"
- },
- {
- "label": "B3. Recipe\u2194ingredient relationship is documented two contradictory ways",
- "file_type": "document",
- "source_file": "Review/docs-claude.md",
- "source_location": "L42",
- "community": 16,
- "norm_label": "b3. recipe\u2194ingredient relationship is documented two contradictory ways",
- "id": "review_docs_claude_md_b3_recipe_ingredient_relationship_is_doc"
- },
- {
- "label": "B4. There is no authentication anywhere in the system",
- "file_type": "document",
- "source_file": "Review/docs-claude.md",
- "source_location": "L51",
- "community": 16,
- "norm_label": "b4. there is no authentication anywhere in the system",
- "id": "review_docs_claude_md_b4_there_is_no_authentication_anywhere_i"
- },
- {
- "label": "B5. Approval-by-email is fragile and probably exploitable",
- "file_type": "document",
- "source_file": "Review/docs-claude.md",
- "source_location": "L63",
- "community": 16,
- "norm_label": "b5. approval-by-email is fragile and probably exploitable",
- "id": "review_docs_claude_md_b5_approval_by_email_is_fragile_and_prob"
- },
- {
- "label": "B6. \"Self-hosted, no external cloud services *except SendGrid*\" is undermined",
- "file_type": "document",
- "source_file": "Review/docs-claude.md",
- "source_location": "L77",
- "community": 16,
- "norm_label": "b6. \"self-hosted, no external cloud services *except sendgrid*\" is undermined",
- "id": "review_docs_claude_md_b6_self_hosted_no_external_cloud_service"
- },
- {
- "label": "Major",
- "file_type": "document",
- "source_file": "Review/docs-claude.md",
- "source_location": "L90",
- "community": 16,
- "norm_label": "major",
- "id": "review_docs_claude_md_major"
- },
- {
- "label": "M1. Scraping legality / ToS unaddressed",
- "file_type": "document",
- "source_file": "Review/docs-claude.md",
- "source_location": "L92",
- "community": 16,
- "norm_label": "m1. scraping legality / tos unaddressed",
- "id": "review_docs_claude_md_m1_scraping_legality_tos_unaddressed"
- },
- {
- "label": "M2. Phase ordering buries the hard problems behind weeks of plumbing",
- "file_type": "document",
- "source_file": "Review/docs-claude.md",
- "source_location": "L103",
- "community": 16,
- "norm_label": "m2. phase ordering buries the hard problems behind weeks of plumbing",
- "id": "review_docs_claude_md_m2_phase_ordering_buries_the_hard_proble"
- },
- {
- "label": "M3. APScheduler + multiple workers will misfire",
- "file_type": "document",
- "source_file": "Review/docs-claude.md",
- "source_location": "L109",
- "community": 16,
- "norm_label": "m3. apscheduler + multiple workers will misfire",
- "id": "review_docs_claude_md_m3_apscheduler_multiple_workers_will_mis"
- },
- {
- "label": "M4. Schema has avoidable defects",
- "file_type": "document",
- "source_file": "Review/docs-claude.md",
- "source_location": "L115",
- "community": 16,
- "norm_label": "m4. schema has avoidable defects",
- "id": "review_docs_claude_md_m4_schema_has_avoidable_defects"
- },
- {
- "label": "M5. Migration story is muddled",
- "file_type": "document",
- "source_file": "Review/docs-claude.md",
- "source_location": "L126",
- "community": 16,
- "norm_label": "m5. migration story is muddled",
- "id": "review_docs_claude_md_m5_migration_story_is_muddled"
- },
- {
- "label": "M6. \"If both approve OR no response \u2192 meal confirmed\" is silence-as-consent",
- "file_type": "document",
- "source_file": "Review/docs-claude.md",
- "source_location": "L132",
- "community": 16,
- "norm_label": "m6. \"if both approve or no response \u2192 meal confirmed\" is silence-as-consent",
- "id": "review_docs_claude_md_m6_if_both_approve_or_no_response_meal_c"
- },
- {
- "label": "M7. \"Calorie target\" appears in the schema but is a non-goal",
- "file_type": "document",
- "source_file": "Review/docs-claude.md",
- "source_location": "L136",
- "community": 16,
- "norm_label": "m7. \"calorie target\" appears in the schema but is a non-goal",
- "id": "review_docs_claude_md_m7_calorie_target_appears_in_the_schema_"
- },
- {
- "label": "M8. Image strategy contradicts itself",
- "file_type": "document",
- "source_file": "Review/docs-claude.md",
- "source_location": "L140",
- "community": 16,
- "norm_label": "m8. image strategy contradicts itself",
- "id": "review_docs_claude_md_m8_image_strategy_contradicts_itself"
- },
- {
- "label": "Minor",
- "file_type": "document",
- "source_file": "Review/docs-claude.md",
- "source_location": "L148",
- "community": 16,
- "norm_label": "minor",
- "id": "review_docs_claude_md_minor"
- },
- {
- "label": "m1. Doc hygiene",
- "file_type": "document",
- "source_file": "Review/docs-claude.md",
- "source_location": "L150",
- "community": 16,
- "norm_label": "m1. doc hygiene",
- "id": "review_docs_claude_md_m1_doc_hygiene"
- },
- {
- "label": "m2. Operational gaps not in any doc",
- "file_type": "document",
- "source_file": "Review/docs-claude.md",
- "source_location": "L157",
- "community": 16,
- "norm_label": "m2. operational gaps not in any doc",
- "id": "review_docs_claude_md_m2_operational_gaps_not_in_any_doc"
- },
- {
- "label": "m3. Docker-compose exposure",
- "file_type": "document",
- "source_file": "Review/docs-claude.md",
- "source_location": "L165",
- "community": 16,
- "norm_label": "m3. docker-compose exposure",
- "id": "review_docs_claude_md_m3_docker_compose_exposure"
- },
- {
- "label": "m4. Success metrics aren't measurable",
- "file_type": "document",
- "source_file": "Review/docs-claude.md",
- "source_location": "L169",
- "community": 16,
- "norm_label": "m4. success metrics aren't measurable",
- "id": "review_docs_claude_md_m4_success_metrics_aren_t_measurable"
- },
- {
- "label": "m5. Future features are mixed into the implementation plan",
- "file_type": "document",
- "source_file": "Review/docs-claude.md",
- "source_location": "L179",
- "community": 16,
- "norm_label": "m5. future features are mixed into the implementation plan",
- "id": "review_docs_claude_md_m5_future_features_are_mixed_into_the_im"
- },
- {
- "label": "m6. `SECRET_KEY` ghost variable",
- "file_type": "document",
- "source_file": "Review/docs-claude.md",
- "source_location": "L183",
- "community": 16,
- "norm_label": "m6. `secret_key` ghost variable",
- "id": "review_docs_claude_md_m6_secret_key_ghost_variable"
- },
- {
- "label": "Cross-doc contradictions, summarized",
- "file_type": "document",
- "source_file": "Review/docs-claude.md",
- "source_location": "L189",
- "community": 16,
- "norm_label": "cross-doc contradictions, summarized",
- "id": "review_docs_claude_md_cross_doc_contradictions_summarized"
- },
- {
- "label": "Suggested order of operations before any more code",
- "file_type": "document",
- "source_file": "Review/docs-claude.md",
- "source_location": "L205",
- "community": 16,
- "norm_label": "suggested order of operations before any more code",
- "id": "review_docs_claude_md_suggested_order_of_operations_before_any"
- },
- {
- "label": "synthesis.md",
- "file_type": "document",
- "source_file": "Review/synthesis.md",
- "source_location": null,
- "community": 33,
- "norm_label": "synthesis.md",
- "id": "review_synthesis_md"
- },
- {
- "label": "Review Synthesis \u2014 Three Reviewers Compared",
- "file_type": "document",
- "source_file": "Review/synthesis.md",
- "source_location": "L1",
- "community": 33,
- "norm_label": "review synthesis \u2014 three reviewers compared",
- "id": "review_synthesis_md_review_synthesis_three_reviewers_compare"
- },
- {
- "label": "1. Strong Consensus (all reviewers, blocking)",
- "file_type": "document",
- "source_file": "Review/synthesis.md",
- "source_location": "L7",
- "community": 33,
- "norm_label": "1. strong consensus (all reviewers, blocking)",
- "id": "review_synthesis_md_1_strong_consensus_all_reviewers_blockin"
- },
- {
- "label": "2. Partial Agreement (2 of 3)",
- "file_type": "document",
- "source_file": "Review/synthesis.md",
- "source_location": "L24",
- "community": 33,
- "norm_label": "2. partial agreement (2 of 3)",
- "id": "review_synthesis_md_2_partial_agreement_2_of_3"
- },
- {
- "label": "3. Unique Findings (only one reviewer)",
- "file_type": "document",
- "source_file": "Review/synthesis.md",
- "source_location": "L40",
- "community": 33,
- "norm_label": "3. unique findings (only one reviewer)",
- "id": "review_synthesis_md_3_unique_findings_only_one_reviewer"
- },
- {
- "label": "Claude only",
- "file_type": "document",
- "source_file": "Review/synthesis.md",
- "source_location": "L42",
- "community": 33,
- "norm_label": "claude only",
- "id": "review_synthesis_md_claude_only"
- },
- {
- "label": "GPT-5.5 docs only",
- "file_type": "document",
- "source_file": "Review/synthesis.md",
- "source_location": "L56",
- "community": 33,
- "norm_label": "gpt-5.5 docs only",
- "id": "review_synthesis_md_gpt_5_5_docs_only"
- },
- {
- "label": "GPT-5.5 repo only (Claude could not have caught these \u2014 doc-only review)",
- "file_type": "document",
- "source_file": "Review/synthesis.md",
- "source_location": "L61",
- "community": 33,
- "norm_label": "gpt-5.5 repo only (claude could not have caught these \u2014 doc-only review)",
- "id": "review_synthesis_md_gpt_5_5_repo_only_claude_could_not_have_"
- },
- {
- "label": "4. Where Reviewers Conflict",
- "file_type": "document",
- "source_file": "Review/synthesis.md",
- "source_location": "L73",
- "community": 33,
- "norm_label": "4. where reviewers conflict",
- "id": "review_synthesis_md_4_where_reviewers_conflict"
- },
- {
- "label": "5. Combined Blocker List (deduplicated, ranked)",
- "file_type": "document",
- "source_file": "Review/synthesis.md",
- "source_location": "L82",
- "community": 33,
- "norm_label": "5. combined blocker list (deduplicated, ranked)",
- "id": "review_synthesis_md_5_combined_blocker_list_deduplicated_ran"
- },
- {
- "label": "6. Additional Investigation Needed",
- "file_type": "document",
- "source_file": "Review/synthesis.md",
- "source_location": "L98",
- "community": 33,
- "norm_label": "6. additional investigation needed",
- "id": "review_synthesis_md_6_additional_investigation_needed"
- },
- {
- "label": "7. Net Assessment",
- "file_type": "document",
- "source_file": "Review/synthesis.md",
- "source_location": "L114",
- "community": 33,
- "norm_label": "7. net assessment",
- "id": "review_synthesis_md_7_net_assessment"
- },
- {
- "label": "reviewconcensus.md",
- "file_type": "document",
- "source_file": "Review/reviewconcensus.md",
- "source_location": null,
- "community": 15,
- "norm_label": "reviewconcensus.md",
- "id": "review_reviewconcensus_md"
- },
- {
- "label": "Review Consensus \u2014 Feedback for Originating Agent",
- "file_type": "document",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L1",
- "community": 15,
- "norm_label": "review consensus \u2014 feedback for originating agent",
- "id": "review_reviewconcensus_md_review_consensus_feedback_for_originatin"
- },
- {
- "label": "Headline",
- "file_type": "document",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L12",
- "community": 15,
- "norm_label": "headline",
- "id": "review_reviewconcensus_md_headline"
- },
- {
- "label": "1. Consensus Blockers \u2014 must resolve before any further code",
- "file_type": "document",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L20",
- "community": 15,
- "norm_label": "1. consensus blockers \u2014 must resolve before any further code",
- "id": "review_reviewconcensus_md_1_consensus_blockers_must_resolve_before"
- },
- {
- "label": "1.1 Recipe \u2194 Ingredient relationship is modeled two contradictory ways",
- "file_type": "document",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L24",
- "community": 15,
- "norm_label": "1.1 recipe \u2194 ingredient relationship is modeled two contradictory ways",
- "id": "review_reviewconcensus_md_1_1_recipe_ingredient_relationship_is_mo"
- },
- {
- "label": "1.2 No authentication exists anywhere in the system",
- "file_type": "document",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L30",
- "community": 15,
- "norm_label": "1.2 no authentication exists anywhere in the system",
- "id": "review_reviewconcensus_md_1_2_no_authentication_exists_anywhere_in"
- },
- {
- "label": "1.3 Email approval flow is unsafe and probably exploitable",
- "file_type": "document",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L36",
- "community": 15,
- "norm_label": "1.3 email approval flow is unsafe and probably exploitable",
- "id": "review_reviewconcensus_md_1_3_email_approval_flow_is_unsafe_and_pr"
- },
- {
- "label": "1.4 No `family_member` table despite per-person spec",
- "file_type": "document",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L42",
- "community": 15,
- "norm_label": "1.4 no `family_member` table despite per-person spec",
- "id": "review_reviewconcensus_md_1_4_no_family_member_table_despite_per_p"
- },
- {
- "label": "1.5 Phase status is contradictory and the skeleton does not work",
- "file_type": "document",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L48",
- "community": 15,
- "norm_label": "1.5 phase status is contradictory and the skeleton does not work",
- "id": "review_reviewconcensus_md_1_5_phase_status_is_contradictory_and_th"
- },
- {
- "label": "1.6 Schema has avoidable correctness defects",
- "file_type": "document",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L59",
- "community": 15,
- "norm_label": "1.6 schema has avoidable correctness defects",
- "id": "review_reviewconcensus_md_1_6_schema_has_avoidable_correctness_def"
- },
- {
- "label": "1.7 Docker compose exposes backend (8000) and frontend (3000) directly",
- "file_type": "document",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L69",
- "community": 15,
- "norm_label": "1.7 docker compose exposes backend (8000) and frontend (3000) directly",
- "id": "review_reviewconcensus_md_1_7_docker_compose_exposes_backend_8000_"
- },
- {
- "label": "1.8 Production deployment claims exceed implementation",
- "file_type": "document",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L73",
- "community": 15,
- "norm_label": "1.8 production deployment claims exceed implementation",
- "id": "review_reviewconcensus_md_1_8_production_deployment_claims_exceed_"
- },
- {
- "label": "2. High-Risk Gaps \u2014 agreed by 2 of 3 reviewers",
- "file_type": "document",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L80",
- "community": 15,
- "norm_label": "2. high-risk gaps \u2014 agreed by 2 of 3 reviewers",
- "id": "review_reviewconcensus_md_2_high_risk_gaps_agreed_by_2_of_3_review"
- },
- {
- "label": "2.1 Migration tooling is muddled",
- "file_type": "document",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L82",
- "community": 15,
- "norm_label": "2.1 migration tooling is muddled",
- "id": "review_reviewconcensus_md_2_1_migration_tooling_is_muddled"
- },
- {
- "label": "2.2 API endpoint contract conflicts across docs",
- "file_type": "document",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L85",
- "community": 15,
- "norm_label": "2.2 api endpoint contract conflicts across docs",
- "id": "review_reviewconcensus_md_2_2_api_endpoint_contract_conflicts_acro"
- },
- {
- "label": "2.3 Scraping is under-specified and risky",
- "file_type": "document",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L88",
- "community": 15,
- "norm_label": "2.3 scraping is under-specified and risky",
- "id": "review_reviewconcensus_md_2_3_scraping_is_under_specified_and_risk"
- },
- {
- "label": "2.4 Phase ordering hides risk behind plumbing",
- "file_type": "document",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L94",
- "community": 15,
- "norm_label": "2.4 phase ordering hides risk behind plumbing",
- "id": "review_reviewconcensus_md_2_4_phase_ordering_hides_risk_behind_plu"
- },
- {
- "label": "2.5 Shopping-list math is not implementable from current docs",
- "file_type": "document",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L97",
- "community": 15,
- "norm_label": "2.5 shopping-list math is not implementable from current docs",
- "id": "review_reviewconcensus_md_2_5_shopping_list_math_is_not_implementa"
- },
- {
- "label": "2.6 Environment variables inconsistent across `.env.example`, ORIENTATION, RUNNING, plan",
- "file_type": "document",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L100",
- "community": 15,
- "norm_label": "2.6 environment variables inconsistent across `.env.example`, orientation, running, plan",
- "id": "review_reviewconcensus_md_2_6_environment_variables_inconsistent_a"
- },
- {
- "label": "2.7 Accessibility absent despite family-facing UI + email",
- "file_type": "document",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L103",
- "community": 15,
- "norm_label": "2.7 accessibility absent despite family-facing ui + email",
- "id": "review_reviewconcensus_md_2_7_accessibility_absent_despite_family_"
- },
- {
- "label": "2.8 Health check will fail under SQLAlchemy 2",
- "file_type": "document",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L106",
- "community": 15,
- "norm_label": "2.8 health check will fail under sqlalchemy 2",
- "id": "review_reviewconcensus_md_2_8_health_check_will_fail_under_sqlalch"
- },
- {
- "label": "3. Single-Reviewer Findings worth keeping",
- "file_type": "document",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L111",
- "community": 15,
- "norm_label": "3. single-reviewer findings worth keeping",
- "id": "review_reviewconcensus_md_3_single_reviewer_findings_worth_keeping"
- },
- {
- "label": "From Claude",
- "file_type": "document",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L113",
- "community": 15,
- "norm_label": "from claude",
- "id": "review_reviewconcensus_md_from_claude"
- },
- {
- "label": "From GPT-5.5 (docs)",
- "file_type": "document",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L123",
- "community": 15,
- "norm_label": "from gpt-5.5 (docs)",
- "id": "review_reviewconcensus_md_from_gpt_5_5_docs"
- },
- {
- "label": "From GPT-5.5 (repo)",
- "file_type": "document",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L128",
- "community": 15,
- "norm_label": "from gpt-5.5 (repo)",
- "id": "review_reviewconcensus_md_from_gpt_5_5_repo"
- },
- {
- "label": "4. Where Reviewers Disagreed",
- "file_type": "document",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L135",
- "community": 15,
- "norm_label": "4. where reviewers disagreed",
- "id": "review_reviewconcensus_md_4_where_reviewers_disagreed"
- },
- {
- "label": "5. Combined Remediation Order",
- "file_type": "document",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L144",
- "community": 15,
- "norm_label": "5. combined remediation order",
- "id": "review_reviewconcensus_md_5_combined_remediation_order"
- },
- {
- "label": "6. Verification Matrix (currently failing \u2014 make this pass to claim Phase 1 complete)",
- "file_type": "document",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L160",
- "community": 15,
- "norm_label": "6. verification matrix (currently failing \u2014 make this pass to claim phase 1 complete)",
- "id": "review_reviewconcensus_md_6_verification_matrix_currently_failing_"
- },
- {
- "label": "7. Additional Investigation Still Needed",
- "file_type": "document",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L177",
- "community": 15,
- "norm_label": "7. additional investigation still needed",
- "id": "review_reviewconcensus_md_7_additional_investigation_still_needed"
- },
- {
- "label": "8. Suggested Response Format from Originating Agent",
- "file_type": "document",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L195",
- "community": 15,
- "norm_label": "8. suggested response format from originating agent",
- "id": "review_reviewconcensus_md_8_suggested_response_format_from_origina"
- },
- {
- "label": "weekly_ad.png",
- "file_type": "image",
- "source_file": "backend/tests/fixtures/lucky_ca/weekly_ad.png",
- "source_location": null,
- "community": 8,
- "norm_label": "weekly_ad.png",
- "id": "backend_tests_fixtures_lucky_ca_weekly_ad_png"
- }
- ],
- "links": [
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/database.py",
- "source_location": "L11",
- "weight": 1.0,
- "_src": "backend_app_database_py",
- "_tgt": "database_get_db",
- "confidence_score": 1.0,
- "source": "backend_app_database_py",
- "target": "database_get_db"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/security.py",
- "source_location": "L72",
- "weight": 1.0,
- "_src": "security_require_session",
- "_tgt": "database_get_db",
- "source": "database_get_db",
- "target": "security_require_session"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/security.py",
- "source_location": "L29",
- "weight": 1.0,
- "_src": "backend_app_security_py",
- "_tgt": "security_require_admin",
- "confidence_score": 1.0,
- "source": "backend_app_security_py",
- "target": "security_require_admin"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/security.py",
- "source_location": "L45",
- "weight": 1.0,
- "_src": "backend_app_security_py",
- "_tgt": "security_signer",
- "confidence_score": 1.0,
- "source": "backend_app_security_py",
- "target": "security_signer"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/security.py",
- "source_location": "L49",
- "weight": 1.0,
- "_src": "backend_app_security_py",
- "_tgt": "security_issue_session",
- "confidence_score": 1.0,
- "source": "backend_app_security_py",
- "target": "security_issue_session"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/security.py",
- "source_location": "L54",
- "weight": 1.0,
- "_src": "backend_app_security_py",
- "_tgt": "security_require_session",
- "confidence_score": 1.0,
- "source": "backend_app_security_py",
- "target": "security_require_session"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/security.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "security_rationale_1",
- "_tgt": "backend_app_security_py",
- "confidence_score": 1.0,
- "source": "backend_app_security_py",
- "target": "security_rationale_1"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/security.py",
- "source_location": "L30",
- "weight": 1.0,
- "_src": "security_rationale_30",
- "_tgt": "security_require_admin",
- "confidence_score": 1.0,
- "source": "security_require_admin",
- "target": "security_rationale_30"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/security.py",
- "source_location": "L51",
- "weight": 1.0,
- "_src": "security_issue_session",
- "_tgt": "security_signer",
- "confidence_score": 1.0,
- "source": "security_signer",
- "target": "security_issue_session"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/security.py",
- "source_location": "L66",
- "weight": 1.0,
- "_src": "security_require_session",
- "_tgt": "security_signer",
- "confidence_score": 1.0,
- "source": "security_signer",
- "target": "security_require_session"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/security.py",
- "source_location": "L50",
- "weight": 1.0,
- "_src": "security_rationale_50",
- "_tgt": "security_issue_session",
- "confidence_score": 1.0,
- "source": "security_issue_session",
- "target": "security_rationale_50"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/auth.py",
- "source_location": "L48",
- "weight": 1.0,
- "_src": "auth_login",
- "_tgt": "security_issue_session",
- "source": "security_issue_session",
- "target": "auth_login"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/security.py",
- "source_location": "L55",
- "weight": 1.0,
- "_src": "security_rationale_55",
- "_tgt": "security_require_session",
- "confidence_score": 1.0,
- "source": "security_require_session",
- "target": "security_rationale_55"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/security.py",
- "source_location": "L75",
- "weight": 1.0,
- "_src": "security_require_session",
- "_tgt": "str",
- "source": "security_require_session",
- "target": "str"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/main.py",
- "source_location": "L19",
- "weight": 1.0,
- "_src": "backend_app_main_py",
- "_tgt": "main_health_check",
- "confidence_score": 1.0,
- "source": "backend_app_main_py",
- "target": "main_health_check"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/main.py",
- "source_location": "L24",
- "weight": 1.0,
- "_src": "backend_app_main_py",
- "_tgt": "main_health_check_db",
- "confidence_score": 1.0,
- "source": "backend_app_main_py",
- "target": "main_health_check_db"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/main.py",
- "source_location": "L29",
- "weight": 1.0,
- "_src": "main_health_check_db",
- "_tgt": "str",
- "source": "main_health_check_db",
- "target": "str"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/config.py",
- "source_location": "L6",
- "weight": 1.0,
- "_src": "backend_app_config_py",
- "_tgt": "config_settings",
- "confidence_score": 1.0,
- "source": "backend_app_config_py",
- "target": "config_settings"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/config.py",
- "source_location": "L41",
- "weight": 1.0,
- "_src": "backend_app_config_py",
- "_tgt": "config_config",
- "confidence_score": 1.0,
- "source": "backend_app_config_py",
- "target": "config_config"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/config.py",
- "source_location": "L45",
- "weight": 1.0,
- "_src": "backend_app_config_py",
- "_tgt": "config_require_database_url",
- "confidence_score": 1.0,
- "source": "backend_app_config_py",
- "target": "config_require_database_url"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/config.py",
- "source_location": "L6",
- "weight": 1.0,
- "_src": "config_settings",
- "_tgt": "basesettings",
- "confidence_score": 1.0,
- "source": "config_settings",
- "target": "basesettings"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_auth.py",
- "source_location": "L33",
- "weight": 1.0,
- "_src": "test_auth_reload_settings",
- "_tgt": "config_settings",
- "source": "config_settings",
- "target": "test_auth_reload_settings"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_config.py",
- "source_location": "L19",
- "weight": 1.0,
- "_src": "test_config_test_database_url_required",
- "_tgt": "config_settings",
- "source": "config_settings",
- "target": "test_config_test_database_url_required"
- },
- {
- "relation": "imports",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L10",
- "weight": 1.0,
- "_src": "backend_app_models_init_py",
- "_tgt": "enum",
- "confidence_score": 1.0,
- "source": "backend_app_models_init_py",
- "target": "enum"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L13",
- "weight": 1.0,
- "_src": "backend_app_models_init_py",
- "_tgt": "init_dayofweek",
- "confidence_score": 1.0,
- "source": "backend_app_models_init_py",
- "target": "init_dayofweek"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L23",
- "weight": 1.0,
- "_src": "backend_app_models_init_py",
- "_tgt": "init_mealtype",
- "confidence_score": 1.0,
- "source": "backend_app_models_init_py",
- "target": "init_mealtype"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L29",
- "weight": 1.0,
- "_src": "backend_app_models_init_py",
- "_tgt": "init_mealplanstatus",
- "confidence_score": 1.0,
- "source": "backend_app_models_init_py",
- "target": "init_mealplanstatus"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L36",
- "weight": 1.0,
- "_src": "backend_app_models_init_py",
- "_tgt": "init_mealplanitemstatus",
- "confidence_score": 1.0,
- "source": "backend_app_models_init_py",
- "target": "init_mealplanitemstatus"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L43",
- "weight": 1.0,
- "_src": "backend_app_models_init_py",
- "_tgt": "init_approvaltokenstatus",
- "confidence_score": 1.0,
- "source": "backend_app_models_init_py",
- "target": "init_approvaltokenstatus"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L49",
- "weight": 1.0,
- "_src": "backend_app_models_init_py",
- "_tgt": "init_familymemberrole",
- "confidence_score": 1.0,
- "source": "backend_app_models_init_py",
- "target": "init_familymemberrole"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L54",
- "weight": 1.0,
- "_src": "backend_app_models_init_py",
- "_tgt": "init_denialreason",
- "confidence_score": 1.0,
- "source": "backend_app_models_init_py",
- "target": "init_denialreason"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L62",
- "weight": 1.0,
- "_src": "backend_app_models_init_py",
- "_tgt": "init_neversuggestreason",
- "confidence_score": 1.0,
- "source": "backend_app_models_init_py",
- "target": "init_neversuggestreason"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L69",
- "weight": 1.0,
- "_src": "backend_app_models_init_py",
- "_tgt": "init_scrapestatus",
- "confidence_score": 1.0,
- "source": "backend_app_models_init_py",
- "target": "init_scrapestatus"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L75",
- "weight": 1.0,
- "_src": "backend_app_models_init_py",
- "_tgt": "init_emailstatus",
- "confidence_score": 1.0,
- "source": "backend_app_models_init_py",
- "target": "init_emailstatus"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L82",
- "weight": 1.0,
- "_src": "backend_app_models_init_py",
- "_tgt": "init_ingredientmatchsource",
- "confidence_score": 1.0,
- "source": "backend_app_models_init_py",
- "target": "init_ingredientmatchsource"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L88",
- "weight": 1.0,
- "_src": "backend_app_models_init_py",
- "_tgt": "init_familyprofile",
- "confidence_score": 1.0,
- "source": "backend_app_models_init_py",
- "target": "init_familyprofile"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L120",
- "weight": 1.0,
- "_src": "backend_app_models_init_py",
- "_tgt": "init_familymember",
- "confidence_score": 1.0,
- "source": "backend_app_models_init_py",
- "target": "init_familymember"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L141",
- "weight": 1.0,
- "_src": "backend_app_models_init_py",
- "_tgt": "init_ingredient",
- "confidence_score": 1.0,
- "source": "backend_app_models_init_py",
- "target": "init_ingredient"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L161",
- "weight": 1.0,
- "_src": "backend_app_models_init_py",
- "_tgt": "init_recipe",
- "confidence_score": 1.0,
- "source": "backend_app_models_init_py",
- "target": "init_recipe"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L191",
- "weight": 1.0,
- "_src": "backend_app_models_init_py",
- "_tgt": "init_total_time_minutes",
- "confidence_score": 1.0,
- "source": "backend_app_models_init_py",
- "target": "init_total_time_minutes"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L195",
- "weight": 1.0,
- "_src": "backend_app_models_init_py",
- "_tgt": "init_mealplan",
- "confidence_score": 1.0,
- "source": "backend_app_models_init_py",
- "target": "init_mealplan"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L216",
- "weight": 1.0,
- "_src": "backend_app_models_init_py",
- "_tgt": "init_mealplanitem",
- "confidence_score": 1.0,
- "source": "backend_app_models_init_py",
- "target": "init_mealplanitem"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L243",
- "weight": 1.0,
- "_src": "backend_app_models_init_py",
- "_tgt": "init_mealplanvote",
- "confidence_score": 1.0,
- "source": "backend_app_models_init_py",
- "target": "init_mealplanvote"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L260",
- "weight": 1.0,
- "_src": "backend_app_models_init_py",
- "_tgt": "init_approvaltoken",
- "confidence_score": 1.0,
- "source": "backend_app_models_init_py",
- "target": "init_approvaltoken"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L280",
- "weight": 1.0,
- "_src": "backend_app_models_init_py",
- "_tgt": "init_homepantry",
- "confidence_score": 1.0,
- "source": "backend_app_models_init_py",
- "target": "init_homepantry"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L300",
- "weight": 1.0,
- "_src": "backend_app_models_init_py",
- "_tgt": "init_feedback",
- "confidence_score": 1.0,
- "source": "backend_app_models_init_py",
- "target": "init_feedback"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L322",
- "weight": 1.0,
- "_src": "backend_app_models_init_py",
- "_tgt": "init_neversuggest",
- "confidence_score": 1.0,
- "source": "backend_app_models_init_py",
- "target": "init_neversuggest"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L337",
- "weight": 1.0,
- "_src": "backend_app_models_init_py",
- "_tgt": "init_groceryitem",
- "confidence_score": 1.0,
- "source": "backend_app_models_init_py",
- "target": "init_groceryitem"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L364",
- "weight": 1.0,
- "_src": "backend_app_models_init_py",
- "_tgt": "init_scrapelog",
- "confidence_score": 1.0,
- "source": "backend_app_models_init_py",
- "target": "init_scrapelog"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L378",
- "weight": 1.0,
- "_src": "backend_app_models_init_py",
- "_tgt": "init_emaillog",
- "confidence_score": 1.0,
- "source": "backend_app_models_init_py",
- "target": "init_emaillog"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L397",
- "weight": 1.0,
- "_src": "backend_app_models_init_py",
- "_tgt": "init_ingredientgrocerymatch",
- "confidence_score": 1.0,
- "source": "backend_app_models_init_py",
- "target": "init_ingredientgrocerymatch"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L415",
- "weight": 1.0,
- "_src": "backend_app_models_init_py",
- "_tgt": "init_weeklyrun",
- "confidence_score": 1.0,
- "source": "backend_app_models_init_py",
- "target": "init_weeklyrun"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L13",
- "weight": 1.0,
- "_src": "backend_app_schemas_init_py",
- "_tgt": "init_mealtype",
- "confidence_score": 1.0,
- "source": "init_mealtype",
- "target": "backend_app_schemas_init_py"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L13",
- "weight": 1.0,
- "_src": "init_mealtype",
- "_tgt": "str",
- "confidence_score": 1.0,
- "source": "init_mealtype",
- "target": "str"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L13",
- "weight": 1.0,
- "_src": "init_mealtype",
- "_tgt": "enum",
- "confidence_score": 1.0,
- "source": "init_mealtype",
- "target": "enum"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L19",
- "weight": 1.0,
- "_src": "backend_app_schemas_init_py",
- "_tgt": "init_mealplanstatus",
- "confidence_score": 1.0,
- "source": "init_mealplanstatus",
- "target": "backend_app_schemas_init_py"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L19",
- "weight": 1.0,
- "_src": "init_mealplanstatus",
- "_tgt": "str",
- "confidence_score": 1.0,
- "source": "init_mealplanstatus",
- "target": "str"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L19",
- "weight": 1.0,
- "_src": "init_mealplanstatus",
- "_tgt": "enum",
- "confidence_score": 1.0,
- "source": "init_mealplanstatus",
- "target": "enum"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L26",
- "weight": 1.0,
- "_src": "init_mealplanitemstatus",
- "_tgt": "str",
- "confidence_score": 1.0,
- "source": "init_mealplanitemstatus",
- "target": "str"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L26",
- "weight": 1.0,
- "_src": "backend_app_schemas_init_py",
- "_tgt": "init_mealplanitemstatus",
- "confidence_score": 1.0,
- "source": "init_mealplanitemstatus",
- "target": "backend_app_schemas_init_py"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L26",
- "weight": 1.0,
- "_src": "init_mealplanitemstatus",
- "_tgt": "enum",
- "confidence_score": 1.0,
- "source": "init_mealplanitemstatus",
- "target": "enum"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L8",
- "weight": 1.0,
- "_src": "init_familymemberrole",
- "_tgt": "str",
- "confidence_score": 1.0,
- "source": "str",
- "target": "init_familymemberrole"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L33",
- "weight": 1.0,
- "_src": "init_denialreason",
- "_tgt": "str",
- "confidence_score": 1.0,
- "source": "str",
- "target": "init_denialreason"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L41",
- "weight": 1.0,
- "_src": "init_neversuggestreason",
- "_tgt": "str",
- "confidence_score": 1.0,
- "source": "str",
- "target": "init_neversuggestreason"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/auth.py",
- "source_location": "L47",
- "weight": 1.0,
- "_src": "auth_login",
- "_tgt": "str",
- "source": "str",
- "target": "auth_login"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/recipes.py",
- "source_location": "L38",
- "weight": 1.0,
- "_src": "recipes_validate_ingredient_ids",
- "_tgt": "str",
- "source": "str",
- "target": "recipes_validate_ingredient_ids"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/ingredients.py",
- "source_location": "L142",
- "weight": 1.0,
- "_src": "ingredients_pin_match",
- "_tgt": "str",
- "source": "str",
- "target": "ingredients_pin_match"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/meal_plans.py",
- "source_location": "L71",
- "weight": 1.0,
- "_src": "meal_plans_generate",
- "_tgt": "str",
- "source": "str",
- "target": "meal_plans_generate"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/admin.py",
- "source_location": "L26",
- "weight": 1.0,
- "_src": "admin_trigger_scrape",
- "_tgt": "str",
- "source": "str",
- "target": "admin_trigger_scrape"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/admin.py",
- "source_location": "L44",
- "weight": 1.0,
- "_src": "admin_get_logs",
- "_tgt": "str",
- "source": "str",
- "target": "admin_get_logs"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/admin.py",
- "source_location": "L65",
- "weight": 1.0,
- "_src": "admin_get_log",
- "_tgt": "str",
- "source": "str",
- "target": "admin_get_log"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/admin.py",
- "source_location": "L92",
- "weight": 1.0,
- "_src": "admin_get_email_logs",
- "_tgt": "str",
- "source": "str",
- "target": "admin_get_email_logs"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/admin.py",
- "source_location": "L121",
- "weight": 1.0,
- "_src": "admin_get_all_meal_plans",
- "_tgt": "str",
- "source": "str",
- "target": "admin_get_all_meal_plans"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/admin.py",
- "source_location": "L164",
- "weight": 1.0,
- "_src": "admin_test_email",
- "_tgt": "str",
- "source": "str",
- "target": "admin_test_email"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/meals.py",
- "source_location": "L130",
- "weight": 1.0,
- "_src": "meals_get_vote_page",
- "_tgt": "str",
- "source": "str",
- "target": "meals_get_vote_page"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/meals.py",
- "source_location": "L313",
- "weight": 1.0,
- "_src": "meals_get_meal_item",
- "_tgt": "str",
- "source": "str",
- "target": "meals_get_meal_item"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/meals.py",
- "source_location": "L459",
- "weight": 1.0,
- "_src": "meals_move_meal_item",
- "_tgt": "str",
- "source": "str",
- "target": "meals_move_meal_item"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/orchestrate.py",
- "source_location": "L25",
- "weight": 1.0,
- "_src": "orchestrate_orchestrate_status",
- "_tgt": "str",
- "source": "str",
- "target": "orchestrate_orchestrate_status"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/orchestrate.py",
- "source_location": "L47",
- "weight": 1.0,
- "_src": "orchestrate_orchestrate_run_week",
- "_tgt": "str",
- "source": "str",
- "target": "orchestrate_orchestrate_run_week"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/orchestrate.py",
- "source_location": "L63",
- "weight": 1.0,
- "_src": "orchestrate_orchestrate_step",
- "_tgt": "str",
- "source": "str",
- "target": "orchestrate_orchestrate_step"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/approval.py",
- "source_location": "L39",
- "weight": 1.0,
- "_src": "approval_issue_token",
- "_tgt": "str",
- "source": "str",
- "target": "approval_issue_token"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/approval.py",
- "source_location": "L70",
- "weight": 1.0,
- "_src": "approval_consume_token",
- "_tgt": "str",
- "source": "str",
- "target": "approval_consume_token"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/matcher.py",
- "source_location": "L227",
- "weight": 1.0,
- "_src": "matcher_run_match_job",
- "_tgt": "str",
- "source": "str",
- "target": "matcher_run_match_job"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L109",
- "weight": 1.0,
- "_src": "scraper_service_run_scrape_in_background",
- "_tgt": "str",
- "source": "str",
- "target": "scraper_service_run_scrape_in_background"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L157",
- "weight": 1.0,
- "_src": "scraper_service_scraperservice_run_scrape",
- "_tgt": "str",
- "source": "str",
- "target": "scraper_service_scraperservice_run_scrape"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L292",
- "weight": 1.0,
- "_src": "scraper_service_scraperservice_get_sale_items",
- "_tgt": "str",
- "source": "str",
- "target": "scraper_service_scraperservice_get_sale_items"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/planner/cost.py",
- "source_location": "L33",
- "weight": 1.0,
- "_src": "cost_decimal",
- "_tgt": "str",
- "source": "str",
- "target": "cost_decimal"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/planner/cost.py",
- "source_location": "L37",
- "weight": 1.0,
- "_src": "cost_scale",
- "_tgt": "str",
- "source": "str",
- "target": "cost_scale"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/orchestrator/steps.py",
- "source_location": "L83",
- "weight": 1.0,
- "_src": "steps_step_generate",
- "_tgt": "str",
- "source": "str",
- "target": "steps_step_generate"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/orchestrator/steps.py",
- "source_location": "L137",
- "weight": 1.0,
- "_src": "steps_step_email",
- "_tgt": "str",
- "source": "str",
- "target": "steps_step_email"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/orchestrator/steps.py",
- "source_location": "L376",
- "weight": 1.0,
- "_src": "steps_step_finalize",
- "_tgt": "str",
- "source": "str",
- "target": "steps_step_finalize"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/orchestrator/steps.py",
- "source_location": "L528",
- "weight": 1.0,
- "_src": "steps_step_reminder",
- "_tgt": "str",
- "source": "str",
- "target": "steps_step_reminder"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L276",
- "weight": 1.0,
- "_src": "lucky_ca_scraper_map_product",
- "_tgt": "str",
- "source": "str",
- "target": "lucky_ca_scraper_map_product"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/alembic/versions/0007_seed_recipes.py",
- "source_location": "L772",
- "weight": 1.0,
- "_src": "0007_seed_recipes_insert_recipes",
- "_tgt": "str",
- "source": "str",
- "target": "0007_seed_recipes_insert_recipes"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_alembic.py",
- "source_location": "L33",
- "weight": 1.0,
- "_src": "test_alembic_test_alembic_upgrade_head_roundtrip",
- "_tgt": "str",
- "source": "str",
- "target": "test_alembic_test_alembic_upgrade_head_roundtrip"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_approval.py",
- "source_location": "L28",
- "weight": 1.0,
- "_src": "test_approval_test_issue_and_verify_token_roundtrip",
- "_tgt": "str",
- "source": "str",
- "target": "test_approval_test_issue_and_verify_token_roundtrip"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/conftest.py",
- "source_location": "L114",
- "weight": 1.0,
- "_src": "conftest_schema",
- "_tgt": "str",
- "source": "str",
- "target": "conftest_schema"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_ingredient_api.py",
- "source_location": "L87",
- "weight": 1.0,
- "_src": "test_ingredient_api_seed_grocery",
- "_tgt": "str",
- "source": "str",
- "target": "test_ingredient_api_seed_grocery"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_never_suggest_api.py",
- "source_location": "L26",
- "weight": 1.0,
- "_src": "test_never_suggest_api_seed_family",
- "_tgt": "str",
- "source": "str",
- "target": "test_never_suggest_api_seed_family"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_planner_cost.py",
- "source_location": "L18",
- "weight": 1.0,
- "_src": "test_planner_cost_match",
- "_tgt": "str",
- "source": "str",
- "target": "test_planner_cost_match"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L38",
- "weight": 1.0,
- "_src": "test_planner_filter_cost",
- "_tgt": "str",
- "source": "str",
- "target": "test_planner_filter_cost"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_meal_plan_generate_api.py",
- "source_location": "L52",
- "weight": 1.0,
- "_src": "test_meal_plan_generate_api_test_generate_endpoint_returns_meal_plan",
- "_tgt": "str",
- "source": "str",
- "target": "test_meal_plan_generate_api_test_generate_endpoint_returns_meal_plan"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_meal_plan_generate_api.py",
- "source_location": "L66",
- "weight": 1.0,
- "_src": "test_meal_plan_generate_api_test_generate_endpoint_requires_admin_token",
- "_tgt": "str",
- "source": "str",
- "target": "test_meal_plan_generate_api_test_generate_endpoint_requires_admin_token"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_meal_plan_generate_api.py",
- "source_location": "L75",
- "weight": 1.0,
- "_src": "test_meal_plan_generate_api_test_generate_endpoint_returns_404_for_unknown_family",
- "_tgt": "str",
- "source": "str",
- "target": "test_meal_plan_generate_api_test_generate_endpoint_returns_404_for_unknown_family"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L152",
- "weight": 1.0,
- "_src": "test_swiftly_auth_test_mint_raises_on_firebase_non_200",
- "_tgt": "str",
- "source": "str",
- "target": "test_swiftly_auth_test_mint_raises_on_firebase_non_200"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L143",
- "weight": 1.0,
- "_src": "test_swiftly_api_test_swiftly_auth_error_on_401_from_api",
- "_tgt": "str",
- "source": "str",
- "target": "test_swiftly_api_test_swiftly_auth_error_on_401_from_api"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L299",
- "weight": 1.0,
- "_src": "test_orchestrator_test_step_email_sends_per_member",
- "_tgt": "str",
- "source": "str",
- "target": "test_orchestrator_test_step_email_sends_per_member"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "scripts/spike_lucky_scrape.py",
- "source_location": "L93",
- "weight": 1.0,
- "_src": "spike_lucky_scrape_main",
- "_tgt": "str",
- "source": "str",
- "target": "spike_lucky_scrape_main"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "scripts/spike_swiftly_ingest.py",
- "source_location": "L91",
- "weight": 1.0,
- "_src": "spike_swiftly_ingest_main",
- "_tgt": "str",
- "source": "str",
- "target": "spike_swiftly_ingest_main"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L8",
- "weight": 1.0,
- "_src": "backend_app_schemas_init_py",
- "_tgt": "init_familymemberrole",
- "confidence_score": 1.0,
- "source": "init_familymemberrole",
- "target": "backend_app_schemas_init_py"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L8",
- "weight": 1.0,
- "_src": "init_familymemberrole",
- "_tgt": "enum",
- "confidence_score": 1.0,
- "source": "init_familymemberrole",
- "target": "enum"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L33",
- "weight": 1.0,
- "_src": "backend_app_schemas_init_py",
- "_tgt": "init_denialreason",
- "confidence_score": 1.0,
- "source": "init_denialreason",
- "target": "backend_app_schemas_init_py"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L33",
- "weight": 1.0,
- "_src": "init_denialreason",
- "_tgt": "enum",
- "confidence_score": 1.0,
- "source": "init_denialreason",
- "target": "enum"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L41",
- "weight": 1.0,
- "_src": "backend_app_schemas_init_py",
- "_tgt": "init_neversuggestreason",
- "confidence_score": 1.0,
- "source": "init_neversuggestreason",
- "target": "backend_app_schemas_init_py"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L41",
- "weight": 1.0,
- "_src": "init_neversuggestreason",
- "_tgt": "enum",
- "confidence_score": 1.0,
- "source": "init_neversuggestreason",
- "target": "enum"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/never_suggest.py",
- "source_location": "L27",
- "weight": 1.0,
- "_src": "never_suggest_coerce_reason",
- "_tgt": "init_neversuggestreason",
- "source": "init_neversuggestreason",
- "target": "never_suggest_coerce_reason"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L88",
- "weight": 1.0,
- "_src": "init_familyprofile",
- "_tgt": "base",
- "confidence_score": 1.0,
- "source": "init_familyprofile",
- "target": "base"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_approval.py",
- "source_location": "L93",
- "weight": 1.0,
- "_src": "test_approval_scenario",
- "_tgt": "init_familyprofile",
- "source": "init_familyprofile",
- "target": "test_approval_scenario"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_never_suggest_api.py",
- "source_location": "L16",
- "weight": 1.0,
- "_src": "test_never_suggest_api_seed_family",
- "_tgt": "init_familyprofile",
- "source": "init_familyprofile",
- "target": "test_never_suggest_api_seed_family"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_planner_generate.py",
- "source_location": "L31",
- "weight": 1.0,
- "_src": "test_planner_generate_test_generate_meal_plan_against_seeded_data",
- "_tgt": "init_familyprofile",
- "source": "init_familyprofile",
- "target": "test_planner_generate_test_generate_meal_plan_against_seeded_data"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_meal_plan_generate_api.py",
- "source_location": "L18",
- "weight": 1.0,
- "_src": "test_meal_plan_generate_api_family_with_groceries",
- "_tgt": "init_familyprofile",
- "source": "init_familyprofile",
- "target": "test_meal_plan_generate_api_family_with_groceries"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L17",
- "weight": 1.0,
- "_src": "test_orchestrator_family",
- "_tgt": "init_familyprofile",
- "source": "init_familyprofile",
- "target": "test_orchestrator_family"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "scripts/send_test_approval.py",
- "source_location": "L88",
- "weight": 1.0,
- "_src": "send_test_approval_main",
- "_tgt": "init_familyprofile",
- "source": "init_familyprofile",
- "target": "send_test_approval_main"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L120",
- "weight": 1.0,
- "_src": "init_familymember",
- "_tgt": "base",
- "confidence_score": 1.0,
- "source": "base",
- "target": "init_familymember"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L141",
- "weight": 1.0,
- "_src": "init_ingredient",
- "_tgt": "base",
- "confidence_score": 1.0,
- "source": "base",
- "target": "init_ingredient"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L161",
- "weight": 1.0,
- "_src": "init_recipe",
- "_tgt": "base",
- "confidence_score": 1.0,
- "source": "base",
- "target": "init_recipe"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L195",
- "weight": 1.0,
- "_src": "init_mealplan",
- "_tgt": "base",
- "confidence_score": 1.0,
- "source": "base",
- "target": "init_mealplan"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L216",
- "weight": 1.0,
- "_src": "init_mealplanitem",
- "_tgt": "base",
- "confidence_score": 1.0,
- "source": "base",
- "target": "init_mealplanitem"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L243",
- "weight": 1.0,
- "_src": "init_mealplanvote",
- "_tgt": "base",
- "confidence_score": 1.0,
- "source": "base",
- "target": "init_mealplanvote"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L260",
- "weight": 1.0,
- "_src": "init_approvaltoken",
- "_tgt": "base",
- "confidence_score": 1.0,
- "source": "base",
- "target": "init_approvaltoken"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L280",
- "weight": 1.0,
- "_src": "init_homepantry",
- "_tgt": "base",
- "confidence_score": 1.0,
- "source": "base",
- "target": "init_homepantry"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L300",
- "weight": 1.0,
- "_src": "init_feedback",
- "_tgt": "base",
- "confidence_score": 1.0,
- "source": "base",
- "target": "init_feedback"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L322",
- "weight": 1.0,
- "_src": "init_neversuggest",
- "_tgt": "base",
- "confidence_score": 1.0,
- "source": "base",
- "target": "init_neversuggest"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L337",
- "weight": 1.0,
- "_src": "init_groceryitem",
- "_tgt": "base",
- "confidence_score": 1.0,
- "source": "base",
- "target": "init_groceryitem"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L364",
- "weight": 1.0,
- "_src": "init_scrapelog",
- "_tgt": "base",
- "confidence_score": 1.0,
- "source": "base",
- "target": "init_scrapelog"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L378",
- "weight": 1.0,
- "_src": "init_emaillog",
- "_tgt": "base",
- "confidence_score": 1.0,
- "source": "base",
- "target": "init_emaillog"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L397",
- "weight": 1.0,
- "_src": "init_ingredientgrocerymatch",
- "_tgt": "base",
- "confidence_score": 1.0,
- "source": "base",
- "target": "init_ingredientgrocerymatch"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/models/__init__.py",
- "source_location": "L415",
- "weight": 1.0,
- "_src": "init_weeklyrun",
- "_tgt": "base",
- "confidence_score": 1.0,
- "source": "base",
- "target": "init_weeklyrun"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/profile.py",
- "source_location": "L60",
- "weight": 1.0,
- "_src": "profile_add_member",
- "_tgt": "init_familymember",
- "source": "init_familymember",
- "target": "profile_add_member"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_approval.py",
- "source_location": "L102",
- "weight": 1.0,
- "_src": "test_approval_scenario",
- "_tgt": "init_familymember",
- "source": "init_familymember",
- "target": "test_approval_scenario"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L33",
- "weight": 1.0,
- "_src": "test_orchestrator_member",
- "_tgt": "init_familymember",
- "source": "init_familymember",
- "target": "test_orchestrator_member"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "scripts/send_test_approval.py",
- "source_location": "L97",
- "weight": 1.0,
- "_src": "send_test_approval_main",
- "_tgt": "init_familymember",
- "source": "init_familymember",
- "target": "send_test_approval_main"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/ingredients.py",
- "source_location": "L60",
- "weight": 1.0,
- "_src": "ingredients_create_ingredient",
- "_tgt": "init_ingredient",
- "source": "init_ingredient",
- "target": "ingredients_create_ingredient"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L216",
- "weight": 1.0,
- "_src": "scraper_service_scraperservice_save_grocery_item",
- "_tgt": "init_ingredient",
- "source": "init_ingredient",
- "target": "scraper_service_scraperservice_save_grocery_item"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_match_hook.py",
- "source_location": "L28",
- "weight": 1.0,
- "_src": "test_match_hook_test_run_match_job_persists_top_matches",
- "_tgt": "init_ingredient",
- "source": "init_ingredient",
- "target": "test_match_hook_test_run_match_job_persists_top_matches"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/recipes.py",
- "source_location": "L91",
- "weight": 1.0,
- "_src": "recipes_create_recipe",
- "_tgt": "init_recipe",
- "source": "init_recipe",
- "target": "recipes_create_recipe"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_approval.py",
- "source_location": "L117",
- "weight": 1.0,
- "_src": "test_approval_scenario",
- "_tgt": "init_recipe",
- "source": "init_recipe",
- "target": "test_approval_scenario"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L100",
- "weight": 1.0,
- "_src": "test_orchestrator_pending_item",
- "_tgt": "init_recipe",
- "source": "init_recipe",
- "target": "test_orchestrator_pending_item"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L508",
- "weight": 1.0,
- "_src": "test_orchestrator_approved_item",
- "_tgt": "init_recipe",
- "source": "init_recipe",
- "target": "test_orchestrator_approved_item"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "scripts/send_test_approval.py",
- "source_location": "L106",
- "weight": 1.0,
- "_src": "send_test_approval_main",
- "_tgt": "init_recipe",
- "source": "init_recipe",
- "target": "send_test_approval_main"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/meals.py",
- "source_location": "L58",
- "weight": 1.0,
- "_src": "meals_create_meal_plan",
- "_tgt": "init_mealplan",
- "source": "init_mealplan",
- "target": "meals_create_meal_plan"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/planner/generate.py",
- "source_location": "L168",
- "weight": 1.0,
- "_src": "generate_generate_meal_plan",
- "_tgt": "init_mealplan",
- "source": "init_mealplan",
- "target": "generate_generate_meal_plan"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_approval.py",
- "source_location": "L128",
- "weight": 1.0,
- "_src": "test_approval_scenario",
- "_tgt": "init_mealplan",
- "source": "init_mealplan",
- "target": "test_approval_scenario"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L86",
- "weight": 1.0,
- "_src": "test_orchestrator_meal_plan",
- "_tgt": "init_mealplan",
- "source": "init_mealplan",
- "target": "test_orchestrator_meal_plan"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "scripts/send_test_approval.py",
- "source_location": "L117",
- "weight": 1.0,
- "_src": "send_test_approval_main",
- "_tgt": "init_mealplan",
- "source": "init_mealplan",
- "target": "send_test_approval_main"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/meals.py",
- "source_location": "L70",
- "weight": 1.0,
- "_src": "meals_create_meal_plan",
- "_tgt": "init_mealplanitem",
- "source": "init_mealplanitem",
- "target": "meals_create_meal_plan"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/meals.py",
- "source_location": "L399",
- "weight": 1.0,
- "_src": "meals_generate_single_item",
- "_tgt": "init_mealplanitem",
- "source": "init_mealplanitem",
- "target": "meals_generate_single_item"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/planner/generate.py",
- "source_location": "L183",
- "weight": 1.0,
- "_src": "generate_generate_meal_plan",
- "_tgt": "init_mealplanitem",
- "source": "init_mealplanitem",
- "target": "generate_generate_meal_plan"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_approval.py",
- "source_location": "L136",
- "weight": 1.0,
- "_src": "test_approval_scenario",
- "_tgt": "init_mealplanitem",
- "source": "init_mealplanitem",
- "target": "test_approval_scenario"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L109",
- "weight": 1.0,
- "_src": "test_orchestrator_pending_item",
- "_tgt": "init_mealplanitem",
- "source": "init_mealplanitem",
- "target": "test_orchestrator_pending_item"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L517",
- "weight": 1.0,
- "_src": "test_orchestrator_approved_item",
- "_tgt": "init_mealplanitem",
- "source": "init_mealplanitem",
- "target": "test_orchestrator_approved_item"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "scripts/send_test_approval.py",
- "source_location": "L125",
- "weight": 1.0,
- "_src": "send_test_approval_main",
- "_tgt": "init_mealplanitem",
- "source": "init_mealplanitem",
- "target": "send_test_approval_main"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/meals.py",
- "source_location": "L270",
- "weight": 1.0,
- "_src": "meals_submit_vote",
- "_tgt": "init_mealplanvote",
- "source": "init_mealplanvote",
- "target": "meals_submit_vote"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_approval.py",
- "source_location": "L172",
- "weight": 1.0,
- "_src": "test_approval_test_consume_token_single_use",
- "_tgt": "init_mealplanvote",
- "source": "init_mealplanvote",
- "target": "test_approval_test_consume_token_single_use"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L395",
- "weight": 1.0,
- "_src": "test_orchestrator_test_step_reminder_skips_voter",
- "_tgt": "init_mealplanvote",
- "source": "init_mealplanvote",
- "target": "test_orchestrator_test_step_reminder_skips_voter"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L425",
- "weight": 1.0,
- "_src": "test_orchestrator_test_step_reminder_no_sends_when_all_voted",
- "_tgt": "init_mealplanvote",
- "source": "init_mealplanvote",
- "target": "test_orchestrator_test_step_reminder_no_sends_when_all_voted"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/pantry.py",
- "source_location": "L44",
- "weight": 1.0,
- "_src": "pantry_add_pantry_item",
- "_tgt": "init_homepantry",
- "source": "init_homepantry",
- "target": "pantry_add_pantry_item"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/feedback.py",
- "source_location": "L73",
- "weight": 1.0,
- "_src": "feedback_create_feedback",
- "_tgt": "init_feedback",
- "source": "init_feedback",
- "target": "feedback_create_feedback"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/never_suggest.py",
- "source_location": "L46",
- "weight": 1.0,
- "_src": "never_suggest_block",
- "_tgt": "init_neversuggest",
- "source": "init_neversuggest",
- "target": "never_suggest_block"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L259",
- "weight": 1.0,
- "_src": "scraper_service_scraperservice_save_grocery_item",
- "_tgt": "init_groceryitem",
- "source": "init_groceryitem",
- "target": "scraper_service_scraperservice_save_grocery_item"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_match_hook.py",
- "source_location": "L38",
- "weight": 1.0,
- "_src": "test_match_hook_test_run_match_job_persists_top_matches",
- "_tgt": "init_groceryitem",
- "source": "init_groceryitem",
- "target": "test_match_hook_test_run_match_job_persists_top_matches"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_ingredient_api.py",
- "source_location": "L75",
- "weight": 1.0,
- "_src": "test_ingredient_api_seed_grocery",
- "_tgt": "init_groceryitem",
- "source": "init_groceryitem",
- "target": "test_ingredient_api_seed_grocery"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_planner_generate.py",
- "source_location": "L47",
- "weight": 1.0,
- "_src": "test_planner_generate_test_generate_meal_plan_against_seeded_data",
- "_tgt": "init_groceryitem",
- "source": "init_groceryitem",
- "target": "test_planner_generate_test_generate_meal_plan_against_seeded_data"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_meal_plan_generate_api.py",
- "source_location": "L31",
- "weight": 1.0,
- "_src": "test_meal_plan_generate_api_family_with_groceries",
- "_tgt": "init_groceryitem",
- "source": "init_groceryitem",
- "target": "test_meal_plan_generate_api_family_with_groceries"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L48",
- "weight": 1.0,
- "_src": "scraper_service_enqueue_scrape",
- "_tgt": "init_scrapelog",
- "source": "init_scrapelog",
- "target": "scraper_service_enqueue_scrape"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L134",
- "weight": 1.0,
- "_src": "scraper_service_scraperservice_run_scrape",
- "_tgt": "init_scrapelog",
- "source": "init_scrapelog",
- "target": "scraper_service_scraperservice_run_scrape"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L188",
- "weight": 1.0,
- "_src": "test_swiftly_api_test_background_runner_writes_failed_with_token_message",
- "_tgt": "init_scrapelog",
- "source": "init_scrapelog",
- "target": "test_swiftly_api_test_background_runner_writes_failed_with_token_message"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/admin.py",
- "source_location": "L152",
- "weight": 1.0,
- "_src": "admin_test_email",
- "_tgt": "init_emaillog",
- "source": "init_emaillog",
- "target": "admin_test_email"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/ingredients.py",
- "source_location": "L146",
- "weight": 1.0,
- "_src": "ingredients_pin_match",
- "_tgt": "init_ingredientgrocerymatch",
- "source": "init_ingredientgrocerymatch",
- "target": "ingredients_pin_match"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/orchestrator/runner.py",
- "source_location": "L39",
- "weight": 1.0,
- "_src": "runner_get_or_create_run",
- "_tgt": "init_weeklyrun",
- "source": "init_weeklyrun",
- "target": "runner_get_or_create_run"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L48",
- "weight": 1.0,
- "_src": "test_orchestrator_weekly_run",
- "_tgt": "init_weeklyrun",
- "source": "init_weeklyrun",
- "target": "test_orchestrator_weekly_run"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L57",
- "weight": 1.0,
- "_src": "test_orchestrator_weekly_run_scraped",
- "_tgt": "init_weeklyrun",
- "source": "init_weeklyrun",
- "target": "test_orchestrator_weekly_run_scraped"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L71",
- "weight": 1.0,
- "_src": "test_orchestrator_weekly_run_generated",
- "_tgt": "init_weeklyrun",
- "source": "init_weeklyrun",
- "target": "test_orchestrator_weekly_run_generated"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L125",
- "weight": 1.0,
- "_src": "test_orchestrator_weekly_run_emailed",
- "_tgt": "init_weeklyrun",
- "source": "init_weeklyrun",
- "target": "test_orchestrator_weekly_run_emailed"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L141",
- "weight": 1.0,
- "_src": "test_orchestrator_weekly_run_reminded",
- "_tgt": "init_weeklyrun",
- "source": "init_weeklyrun",
- "target": "test_orchestrator_weekly_run_reminded"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L491",
- "weight": 1.0,
- "_src": "test_orchestrator_weekly_run_deadline_passed",
- "_tgt": "init_weeklyrun",
- "source": "init_weeklyrun",
- "target": "test_orchestrator_weekly_run_deadline_passed"
- },
- {
- "relation": "imports_from",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L5",
- "weight": 1.0,
- "_src": "backend_app_schemas_init_py",
- "_tgt": "enum",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_init_py",
- "target": "enum"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L48",
- "weight": 1.0,
- "_src": "backend_app_schemas_init_py",
- "_tgt": "init_ingredientbase",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_init_py",
- "target": "init_ingredientbase"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L58",
- "weight": 1.0,
- "_src": "backend_app_schemas_init_py",
- "_tgt": "init_ingredientresponse",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_init_py",
- "target": "init_ingredientresponse"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L279",
- "weight": 1.0,
- "_src": "backend_app_schemas_init_py",
- "_tgt": "init_config",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_init_py",
- "target": "init_config"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L66",
- "weight": 1.0,
- "_src": "backend_app_schemas_init_py",
- "_tgt": "init_ingredientcreate",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_init_py",
- "target": "init_ingredientcreate"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L70",
- "weight": 1.0,
- "_src": "backend_app_schemas_init_py",
- "_tgt": "init_familymemberbase",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_init_py",
- "target": "init_familymemberbase"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L77",
- "weight": 1.0,
- "_src": "backend_app_schemas_init_py",
- "_tgt": "init_familymemberresponse",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_init_py",
- "target": "init_familymemberresponse"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L87",
- "weight": 1.0,
- "_src": "backend_app_schemas_init_py",
- "_tgt": "init_familymembercreate",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_init_py",
- "target": "init_familymembercreate"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L91",
- "weight": 1.0,
- "_src": "backend_app_schemas_init_py",
- "_tgt": "init_familyprofilebase",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_init_py",
- "target": "init_familyprofilebase"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L100",
- "weight": 1.0,
- "_src": "backend_app_schemas_init_py",
- "_tgt": "init_familyprofileresponse",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_init_py",
- "target": "init_familyprofileresponse"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L110",
- "weight": 1.0,
- "_src": "backend_app_schemas_init_py",
- "_tgt": "init_familyprofilecreate",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_init_py",
- "target": "init_familyprofilecreate"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L114",
- "weight": 1.0,
- "_src": "backend_app_schemas_init_py",
- "_tgt": "init_familyprofileupdate",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_init_py",
- "target": "init_familyprofileupdate"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L123",
- "weight": 1.0,
- "_src": "backend_app_schemas_init_py",
- "_tgt": "init_recipeingredient",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_init_py",
- "target": "init_recipeingredient"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L133",
- "weight": 1.0,
- "_src": "backend_app_schemas_init_py",
- "_tgt": "init_normalize",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_init_py",
- "target": "init_normalize"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L142",
- "weight": 1.0,
- "_src": "backend_app_schemas_init_py",
- "_tgt": "init_recipebase",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_init_py",
- "target": "init_recipebase"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L161",
- "weight": 1.0,
- "_src": "backend_app_schemas_init_py",
- "_tgt": "init_reciperesponse",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_init_py",
- "target": "init_reciperesponse"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L173",
- "weight": 1.0,
- "_src": "backend_app_schemas_init_py",
- "_tgt": "init_recipecreate",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_init_py",
- "target": "init_recipecreate"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L177",
- "weight": 1.0,
- "_src": "backend_app_schemas_init_py",
- "_tgt": "init_mealplanitembase",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_init_py",
- "target": "init_mealplanitembase"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L184",
- "weight": 1.0,
- "_src": "backend_app_schemas_init_py",
- "_tgt": "init_mealplanitemresponse",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_init_py",
- "target": "init_mealplanitemresponse"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L199",
- "weight": 1.0,
- "_src": "backend_app_schemas_init_py",
- "_tgt": "init_mealplanitemcreate",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_init_py",
- "target": "init_mealplanitemcreate"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L203",
- "weight": 1.0,
- "_src": "backend_app_schemas_init_py",
- "_tgt": "init_mealplanbase",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_init_py",
- "target": "init_mealplanbase"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L210",
- "weight": 1.0,
- "_src": "backend_app_schemas_init_py",
- "_tgt": "init_mealplanresponse",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_init_py",
- "target": "init_mealplanresponse"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L222",
- "weight": 1.0,
- "_src": "backend_app_schemas_init_py",
- "_tgt": "init_mealplancreate",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_init_py",
- "target": "init_mealplancreate"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L226",
- "weight": 1.0,
- "_src": "backend_app_schemas_init_py",
- "_tgt": "init_voterequest",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_init_py",
- "target": "init_voterequest"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L232",
- "weight": 1.0,
- "_src": "backend_app_schemas_init_py",
- "_tgt": "init_voteresponse",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_init_py",
- "target": "init_voteresponse"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L243",
- "weight": 1.0,
- "_src": "backend_app_schemas_init_py",
- "_tgt": "init_homepantrybase",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_init_py",
- "target": "init_homepantrybase"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L250",
- "weight": 1.0,
- "_src": "backend_app_schemas_init_py",
- "_tgt": "init_homepantryresponse",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_init_py",
- "target": "init_homepantryresponse"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L261",
- "weight": 1.0,
- "_src": "backend_app_schemas_init_py",
- "_tgt": "init_homepantrycreate",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_init_py",
- "target": "init_homepantrycreate"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L265",
- "weight": 1.0,
- "_src": "backend_app_schemas_init_py",
- "_tgt": "init_feedbackbase",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_init_py",
- "target": "init_feedbackbase"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L272",
- "weight": 1.0,
- "_src": "backend_app_schemas_init_py",
- "_tgt": "init_feedbackresponse",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_init_py",
- "target": "init_feedbackresponse"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L283",
- "weight": 1.0,
- "_src": "backend_app_schemas_init_py",
- "_tgt": "init_feedbackcreate",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_init_py",
- "target": "init_feedbackcreate"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L287",
- "weight": 1.0,
- "_src": "backend_app_schemas_init_py",
- "_tgt": "init_shoppinglistitem",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_init_py",
- "target": "init_shoppinglistitem"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L300",
- "weight": 1.0,
- "_src": "backend_app_schemas_init_py",
- "_tgt": "init_shoppinglistresponse",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_init_py",
- "target": "init_shoppinglistresponse"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/alembic/versions/0001_initial_migration.py",
- "source_location": "L78",
- "weight": 1.0,
- "_src": "0001_initial_migration_upgrade",
- "_tgt": "enum",
- "source": "enum",
- "target": "0001_initial_migration_upgrade"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py",
- "source_location": "L62",
- "weight": 1.0,
- "_src": "0006_recipe_engine_thin_upgrade",
- "_tgt": "enum",
- "source": "enum",
- "target": "0006_recipe_engine_thin_upgrade"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L48",
- "weight": 1.0,
- "_src": "init_ingredientbase",
- "_tgt": "basemodel",
- "confidence_score": 1.0,
- "source": "init_ingredientbase",
- "target": "basemodel"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L58",
- "weight": 1.0,
- "_src": "init_ingredientresponse",
- "_tgt": "init_ingredientbase",
- "confidence_score": 1.0,
- "source": "init_ingredientbase",
- "target": "init_ingredientresponse"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L66",
- "weight": 1.0,
- "_src": "init_ingredientcreate",
- "_tgt": "init_ingredientbase",
- "confidence_score": 1.0,
- "source": "init_ingredientbase",
- "target": "init_ingredientcreate"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L70",
- "weight": 1.0,
- "_src": "init_familymemberbase",
- "_tgt": "basemodel",
- "confidence_score": 1.0,
- "source": "basemodel",
- "target": "init_familymemberbase"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L91",
- "weight": 1.0,
- "_src": "init_familyprofilebase",
- "_tgt": "basemodel",
- "confidence_score": 1.0,
- "source": "basemodel",
- "target": "init_familyprofilebase"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L114",
- "weight": 1.0,
- "_src": "init_familyprofileupdate",
- "_tgt": "basemodel",
- "confidence_score": 1.0,
- "source": "basemodel",
- "target": "init_familyprofileupdate"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L123",
- "weight": 1.0,
- "_src": "init_recipeingredient",
- "_tgt": "basemodel",
- "confidence_score": 1.0,
- "source": "basemodel",
- "target": "init_recipeingredient"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L142",
- "weight": 1.0,
- "_src": "init_recipebase",
- "_tgt": "basemodel",
- "confidence_score": 1.0,
- "source": "basemodel",
- "target": "init_recipebase"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L177",
- "weight": 1.0,
- "_src": "init_mealplanitembase",
- "_tgt": "basemodel",
- "confidence_score": 1.0,
- "source": "basemodel",
- "target": "init_mealplanitembase"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L203",
- "weight": 1.0,
- "_src": "init_mealplanbase",
- "_tgt": "basemodel",
- "confidence_score": 1.0,
- "source": "basemodel",
- "target": "init_mealplanbase"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L226",
- "weight": 1.0,
- "_src": "init_voterequest",
- "_tgt": "basemodel",
- "confidence_score": 1.0,
- "source": "basemodel",
- "target": "init_voterequest"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L232",
- "weight": 1.0,
- "_src": "init_voteresponse",
- "_tgt": "basemodel",
- "confidence_score": 1.0,
- "source": "basemodel",
- "target": "init_voteresponse"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L243",
- "weight": 1.0,
- "_src": "init_homepantrybase",
- "_tgt": "basemodel",
- "confidence_score": 1.0,
- "source": "basemodel",
- "target": "init_homepantrybase"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L265",
- "weight": 1.0,
- "_src": "init_feedbackbase",
- "_tgt": "basemodel",
- "confidence_score": 1.0,
- "source": "basemodel",
- "target": "init_feedbackbase"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L287",
- "weight": 1.0,
- "_src": "init_shoppinglistitem",
- "_tgt": "basemodel",
- "confidence_score": 1.0,
- "source": "basemodel",
- "target": "init_shoppinglistitem"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L300",
- "weight": 1.0,
- "_src": "init_shoppinglistresponse",
- "_tgt": "basemodel",
- "confidence_score": 1.0,
- "source": "basemodel",
- "target": "init_shoppinglistresponse"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/ingredient.py",
- "source_location": "L10",
- "weight": 1.0,
- "_src": "ingredient_ingredientbase",
- "_tgt": "basemodel",
- "confidence_score": 1.0,
- "source": "basemodel",
- "target": "ingredient_ingredientbase"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/ingredient.py",
- "source_location": "L27",
- "weight": 1.0,
- "_src": "ingredient_ingredientupdate",
- "_tgt": "basemodel",
- "confidence_score": 1.0,
- "source": "basemodel",
- "target": "ingredient_ingredientupdate"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/ingredient.py",
- "source_location": "L48",
- "weight": 1.0,
- "_src": "ingredient_ingredientgrocerymatchread",
- "_tgt": "basemodel",
- "confidence_score": 1.0,
- "source": "basemodel",
- "target": "ingredient_ingredientgrocerymatchread"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/recipe.py",
- "source_location": "L10",
- "weight": 1.0,
- "_src": "recipe_recipeingredientref",
- "_tgt": "basemodel",
- "confidence_score": 1.0,
- "source": "basemodel",
- "target": "recipe_recipeingredientref"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/recipe.py",
- "source_location": "L17",
- "weight": 1.0,
- "_src": "recipe_recipebase",
- "_tgt": "basemodel",
- "confidence_score": 1.0,
- "source": "basemodel",
- "target": "recipe_recipebase"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/recipe.py",
- "source_location": "L38",
- "weight": 1.0,
- "_src": "recipe_recipeupdate",
- "_tgt": "basemodel",
- "confidence_score": 1.0,
- "source": "basemodel",
- "target": "recipe_recipeupdate"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/recipe.py",
- "source_location": "L60",
- "weight": 1.0,
- "_src": "recipe_resolveingredientrequest",
- "_tgt": "basemodel",
- "confidence_score": 1.0,
- "source": "basemodel",
- "target": "recipe_resolveingredientrequest"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/recipe.py",
- "source_location": "L64",
- "weight": 1.0,
- "_src": "recipe_resolveingredientcandidate",
- "_tgt": "basemodel",
- "confidence_score": 1.0,
- "source": "basemodel",
- "target": "recipe_resolveingredientcandidate"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/recipe.py",
- "source_location": "L71",
- "weight": 1.0,
- "_src": "recipe_resolveingredientresponse",
- "_tgt": "basemodel",
- "confidence_score": 1.0,
- "source": "basemodel",
- "target": "recipe_resolveingredientresponse"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/never_suggest.py",
- "source_location": "L9",
- "weight": 1.0,
- "_src": "never_suggest_neversuggestcreate",
- "_tgt": "basemodel",
- "confidence_score": 1.0,
- "source": "basemodel",
- "target": "never_suggest_neversuggestcreate"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/never_suggest.py",
- "source_location": "L24",
- "weight": 1.0,
- "_src": "never_suggest_neversuggestread",
- "_tgt": "basemodel",
- "confidence_score": 1.0,
- "source": "basemodel",
- "target": "never_suggest_neversuggestread"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/meal_plan_generation.py",
- "source_location": "L11",
- "weight": 1.0,
- "_src": "meal_plan_generation_generaterequest",
- "_tgt": "basemodel",
- "confidence_score": 1.0,
- "source": "basemodel",
- "target": "meal_plan_generation_generaterequest"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/meal_plan_generation.py",
- "source_location": "L16",
- "weight": 1.0,
- "_src": "meal_plan_generation_regeneraterequest",
- "_tgt": "basemodel",
- "confidence_score": 1.0,
- "source": "basemodel",
- "target": "meal_plan_generation_regeneraterequest"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/meal_plan_generation.py",
- "source_location": "L25",
- "weight": 1.0,
- "_src": "meal_plan_generation_generationitem",
- "_tgt": "basemodel",
- "confidence_score": 1.0,
- "source": "basemodel",
- "target": "meal_plan_generation_generationitem"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/meal_plan_generation.py",
- "source_location": "L33",
- "weight": 1.0,
- "_src": "meal_plan_generation_generationdebug",
- "_tgt": "basemodel",
- "confidence_score": 1.0,
- "source": "basemodel",
- "target": "meal_plan_generation_generationdebug"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/meal_plan_generation.py",
- "source_location": "L39",
- "weight": 1.0,
- "_src": "meal_plan_generation_generationresponse",
- "_tgt": "basemodel",
- "confidence_score": 1.0,
- "source": "basemodel",
- "target": "meal_plan_generation_generationresponse"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/auth.py",
- "source_location": "L26",
- "weight": 1.0,
- "_src": "auth_loginrequest",
- "_tgt": "basemodel",
- "confidence_score": 1.0,
- "source": "basemodel",
- "target": "auth_loginrequest"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/ingredients.py",
- "source_location": "L117",
- "weight": 1.0,
- "_src": "ingredients_pinmatchbody",
- "_tgt": "basemodel",
- "confidence_score": 1.0,
- "source": "basemodel",
- "target": "ingredients_pinmatchbody"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L109",
- "weight": 1.0,
- "_src": "meals_votesubmission",
- "_tgt": "basemodel",
- "confidence_score": 1.0,
- "source": "basemodel",
- "target": "meals_votesubmission"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L77",
- "weight": 1.0,
- "_src": "init_familymemberresponse",
- "_tgt": "init_familymemberbase",
- "confidence_score": 1.0,
- "source": "init_familymemberbase",
- "target": "init_familymemberresponse"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L87",
- "weight": 1.0,
- "_src": "init_familymembercreate",
- "_tgt": "init_familymemberbase",
- "confidence_score": 1.0,
- "source": "init_familymemberbase",
- "target": "init_familymembercreate"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L100",
- "weight": 1.0,
- "_src": "init_familyprofileresponse",
- "_tgt": "init_familyprofilebase",
- "confidence_score": 1.0,
- "source": "init_familyprofilebase",
- "target": "init_familyprofileresponse"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L110",
- "weight": 1.0,
- "_src": "init_familyprofilecreate",
- "_tgt": "init_familyprofilebase",
- "confidence_score": 1.0,
- "source": "init_familyprofilebase",
- "target": "init_familyprofilecreate"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L161",
- "weight": 1.0,
- "_src": "init_reciperesponse",
- "_tgt": "init_recipebase",
- "confidence_score": 1.0,
- "source": "init_recipebase",
- "target": "init_reciperesponse"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L173",
- "weight": 1.0,
- "_src": "init_recipecreate",
- "_tgt": "init_recipebase",
- "confidence_score": 1.0,
- "source": "init_recipebase",
- "target": "init_recipecreate"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L184",
- "weight": 1.0,
- "_src": "init_mealplanitemresponse",
- "_tgt": "init_mealplanitembase",
- "confidence_score": 1.0,
- "source": "init_mealplanitembase",
- "target": "init_mealplanitemresponse"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L199",
- "weight": 1.0,
- "_src": "init_mealplanitemcreate",
- "_tgt": "init_mealplanitembase",
- "confidence_score": 1.0,
- "source": "init_mealplanitembase",
- "target": "init_mealplanitemcreate"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L210",
- "weight": 1.0,
- "_src": "init_mealplanresponse",
- "_tgt": "init_mealplanbase",
- "confidence_score": 1.0,
- "source": "init_mealplanbase",
- "target": "init_mealplanresponse"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L222",
- "weight": 1.0,
- "_src": "init_mealplancreate",
- "_tgt": "init_mealplanbase",
- "confidence_score": 1.0,
- "source": "init_mealplanbase",
- "target": "init_mealplancreate"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L250",
- "weight": 1.0,
- "_src": "init_homepantryresponse",
- "_tgt": "init_homepantrybase",
- "confidence_score": 1.0,
- "source": "init_homepantrybase",
- "target": "init_homepantryresponse"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L261",
- "weight": 1.0,
- "_src": "init_homepantrycreate",
- "_tgt": "init_homepantrybase",
- "confidence_score": 1.0,
- "source": "init_homepantrybase",
- "target": "init_homepantrycreate"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L272",
- "weight": 1.0,
- "_src": "init_feedbackresponse",
- "_tgt": "init_feedbackbase",
- "confidence_score": 1.0,
- "source": "init_feedbackbase",
- "target": "init_feedbackresponse"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/__init__.py",
- "source_location": "L283",
- "weight": 1.0,
- "_src": "init_feedbackcreate",
- "_tgt": "init_feedbackbase",
- "confidence_score": 1.0,
- "source": "init_feedbackbase",
- "target": "init_feedbackcreate"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/shopping_list.py",
- "source_location": "L127",
- "weight": 1.0,
- "_src": "shopping_list_get_shopping_list",
- "_tgt": "init_shoppinglistitem",
- "source": "init_shoppinglistitem",
- "target": "shopping_list_get_shopping_list"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/shopping_list.py",
- "source_location": "L44",
- "weight": 1.0,
- "_src": "shopping_list_get_shopping_list",
- "_tgt": "init_shoppinglistresponse",
- "source": "init_shoppinglistresponse",
- "target": "shopping_list_get_shopping_list"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/ingredient.py",
- "source_location": "L10",
- "weight": 1.0,
- "_src": "backend_app_schemas_ingredient_py",
- "_tgt": "ingredient_ingredientbase",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_ingredient_py",
- "target": "ingredient_ingredientbase"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/ingredient.py",
- "source_location": "L36",
- "weight": 1.0,
- "_src": "backend_app_schemas_ingredient_py",
- "_tgt": "ingredient_strip_and_drop_empty",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_ingredient_py",
- "target": "ingredient_strip_and_drop_empty"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/ingredient.py",
- "source_location": "L23",
- "weight": 1.0,
- "_src": "backend_app_schemas_ingredient_py",
- "_tgt": "ingredient_ingredientcreate",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_ingredient_py",
- "target": "ingredient_ingredientcreate"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/ingredient.py",
- "source_location": "L27",
- "weight": 1.0,
- "_src": "backend_app_schemas_ingredient_py",
- "_tgt": "ingredient_ingredientupdate",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_ingredient_py",
- "target": "ingredient_ingredientupdate"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/ingredient.py",
- "source_location": "L42",
- "weight": 1.0,
- "_src": "backend_app_schemas_ingredient_py",
- "_tgt": "ingredient_ingredientread",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_ingredient_py",
- "target": "ingredient_ingredientread"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/ingredient.py",
- "source_location": "L48",
- "weight": 1.0,
- "_src": "backend_app_schemas_ingredient_py",
- "_tgt": "ingredient_ingredientgrocerymatchread",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_ingredient_py",
- "target": "ingredient_ingredientgrocerymatchread"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/ingredient.py",
- "source_location": "L23",
- "weight": 1.0,
- "_src": "ingredient_ingredientcreate",
- "_tgt": "ingredient_ingredientbase",
- "confidence_score": 1.0,
- "source": "ingredient_ingredientbase",
- "target": "ingredient_ingredientcreate"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/ingredient.py",
- "source_location": "L42",
- "weight": 1.0,
- "_src": "ingredient_ingredientread",
- "_tgt": "ingredient_ingredientbase",
- "confidence_score": 1.0,
- "source": "ingredient_ingredientbase",
- "target": "ingredient_ingredientread"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/app/api/ingredients.py",
- "source_location": "L15",
- "weight": 0.8,
- "_src": "ingredients_pinmatchbody",
- "_tgt": "ingredient_ingredientcreate",
- "confidence_score": 0.5,
- "source": "ingredient_ingredientcreate",
- "target": "ingredients_pinmatchbody"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_ingredient_schema.py",
- "source_location": "L8",
- "weight": 1.0,
- "_src": "test_ingredient_schema_test_ingredient_create_normalizes_aliases",
- "_tgt": "ingredient_ingredientcreate",
- "source": "ingredient_ingredientcreate",
- "target": "test_ingredient_schema_test_ingredient_create_normalizes_aliases"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/app/api/ingredients.py",
- "source_location": "L15",
- "weight": 0.8,
- "_src": "ingredients_pinmatchbody",
- "_tgt": "ingredient_ingredientupdate",
- "confidence_score": 0.5,
- "source": "ingredient_ingredientupdate",
- "target": "ingredients_pinmatchbody"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/app/api/ingredients.py",
- "source_location": "L15",
- "weight": 0.8,
- "_src": "ingredients_pinmatchbody",
- "_tgt": "ingredient_ingredientread",
- "confidence_score": 0.5,
- "source": "ingredient_ingredientread",
- "target": "ingredients_pinmatchbody"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/app/api/ingredients.py",
- "source_location": "L15",
- "weight": 0.8,
- "_src": "ingredients_pinmatchbody",
- "_tgt": "ingredient_ingredientgrocerymatchread",
- "confidence_score": 0.5,
- "source": "ingredient_ingredientgrocerymatchread",
- "target": "ingredients_pinmatchbody"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/recipe.py",
- "source_location": "L10",
- "weight": 1.0,
- "_src": "backend_app_schemas_recipe_py",
- "_tgt": "recipe_recipeingredientref",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_recipe_py",
- "target": "recipe_recipeingredientref"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/recipe.py",
- "source_location": "L17",
- "weight": 1.0,
- "_src": "backend_app_schemas_recipe_py",
- "_tgt": "recipe_recipebase",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_recipe_py",
- "target": "recipe_recipebase"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/recipe.py",
- "source_location": "L34",
- "weight": 1.0,
- "_src": "backend_app_schemas_recipe_py",
- "_tgt": "recipe_recipecreate",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_recipe_py",
- "target": "recipe_recipecreate"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/recipe.py",
- "source_location": "L38",
- "weight": 1.0,
- "_src": "backend_app_schemas_recipe_py",
- "_tgt": "recipe_recipeupdate",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_recipe_py",
- "target": "recipe_recipeupdate"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/recipe.py",
- "source_location": "L54",
- "weight": 1.0,
- "_src": "backend_app_schemas_recipe_py",
- "_tgt": "recipe_reciperead",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_recipe_py",
- "target": "recipe_reciperead"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/recipe.py",
- "source_location": "L60",
- "weight": 1.0,
- "_src": "backend_app_schemas_recipe_py",
- "_tgt": "recipe_resolveingredientrequest",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_recipe_py",
- "target": "recipe_resolveingredientrequest"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/recipe.py",
- "source_location": "L64",
- "weight": 1.0,
- "_src": "backend_app_schemas_recipe_py",
- "_tgt": "recipe_resolveingredientcandidate",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_recipe_py",
- "target": "recipe_resolveingredientcandidate"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/recipe.py",
- "source_location": "L71",
- "weight": 1.0,
- "_src": "backend_app_schemas_recipe_py",
- "_tgt": "recipe_resolveingredientresponse",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_recipe_py",
- "target": "recipe_resolveingredientresponse"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_recipe_schema.py",
- "source_location": "L18",
- "weight": 1.0,
- "_src": "test_recipe_schema_test_recipe_create_requires_canonical_ingredient_ids",
- "_tgt": "recipe_recipeingredientref",
- "source": "recipe_recipeingredientref",
- "target": "test_recipe_schema_test_recipe_create_requires_canonical_ingredient_ids"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/recipe.py",
- "source_location": "L34",
- "weight": 1.0,
- "_src": "recipe_recipecreate",
- "_tgt": "recipe_recipebase",
- "confidence_score": 1.0,
- "source": "recipe_recipebase",
- "target": "recipe_recipecreate"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/recipe.py",
- "source_location": "L54",
- "weight": 1.0,
- "_src": "recipe_reciperead",
- "_tgt": "recipe_recipebase",
- "confidence_score": 1.0,
- "source": "recipe_recipebase",
- "target": "recipe_reciperead"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_recipe_schema.py",
- "source_location": "L11",
- "weight": 1.0,
- "_src": "test_recipe_schema_test_recipe_create_requires_canonical_ingredient_ids",
- "_tgt": "recipe_recipecreate",
- "source": "recipe_recipecreate",
- "target": "test_recipe_schema_test_recipe_create_requires_canonical_ingredient_ids"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_recipe_schema.py",
- "source_location": "L27",
- "weight": 1.0,
- "_src": "test_recipe_schema_test_recipe_create_rejects_empty_ingredients",
- "_tgt": "recipe_recipecreate",
- "source": "recipe_recipecreate",
- "target": "test_recipe_schema_test_recipe_create_rejects_empty_ingredients"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_recipe_schema.py",
- "source_location": "L40",
- "weight": 1.0,
- "_src": "test_recipe_schema_test_resolve_ingredient_request_round_trip",
- "_tgt": "recipe_resolveingredientrequest",
- "source": "recipe_resolveingredientrequest",
- "target": "test_recipe_schema_test_resolve_ingredient_request_round_trip"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/recipes.py",
- "source_location": "L205",
- "weight": 1.0,
- "_src": "recipes_resolve_ingredient",
- "_tgt": "recipe_resolveingredientcandidate",
- "source": "recipe_resolveingredientcandidate",
- "target": "recipes_resolve_ingredient"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/recipes.py",
- "source_location": "L178",
- "weight": 1.0,
- "_src": "recipes_resolve_ingredient",
- "_tgt": "recipe_resolveingredientresponse",
- "source": "recipe_resolveingredientresponse",
- "target": "recipes_resolve_ingredient"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/never_suggest.py",
- "source_location": "L9",
- "weight": 1.0,
- "_src": "backend_app_schemas_never_suggest_py",
- "_tgt": "never_suggest_neversuggestcreate",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_never_suggest_py",
- "target": "never_suggest_neversuggestcreate"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/never_suggest.py",
- "source_location": "L17",
- "weight": 1.0,
- "_src": "backend_app_schemas_never_suggest_py",
- "_tgt": "never_suggest_exactly_one_target",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_never_suggest_py",
- "target": "never_suggest_exactly_one_target"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/never_suggest.py",
- "source_location": "L24",
- "weight": 1.0,
- "_src": "backend_app_schemas_never_suggest_py",
- "_tgt": "never_suggest_neversuggestread",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_never_suggest_py",
- "target": "never_suggest_neversuggestread"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/meal_plan_generation.py",
- "source_location": "L11",
- "weight": 1.0,
- "_src": "backend_app_schemas_meal_plan_generation_py",
- "_tgt": "meal_plan_generation_generaterequest",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_meal_plan_generation_py",
- "target": "meal_plan_generation_generaterequest"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/meal_plan_generation.py",
- "source_location": "L16",
- "weight": 1.0,
- "_src": "backend_app_schemas_meal_plan_generation_py",
- "_tgt": "meal_plan_generation_regeneraterequest",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_meal_plan_generation_py",
- "target": "meal_plan_generation_regeneraterequest"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/meal_plan_generation.py",
- "source_location": "L25",
- "weight": 1.0,
- "_src": "backend_app_schemas_meal_plan_generation_py",
- "_tgt": "meal_plan_generation_generationitem",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_meal_plan_generation_py",
- "target": "meal_plan_generation_generationitem"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/meal_plan_generation.py",
- "source_location": "L33",
- "weight": 1.0,
- "_src": "backend_app_schemas_meal_plan_generation_py",
- "_tgt": "meal_plan_generation_generationdebug",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_meal_plan_generation_py",
- "target": "meal_plan_generation_generationdebug"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/schemas/meal_plan_generation.py",
- "source_location": "L39",
- "weight": 1.0,
- "_src": "backend_app_schemas_meal_plan_generation_py",
- "_tgt": "meal_plan_generation_generationresponse",
- "confidence_score": 1.0,
- "source": "backend_app_schemas_meal_plan_generation_py",
- "target": "meal_plan_generation_generationresponse"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/meal_plans.py",
- "source_location": "L39",
- "weight": 1.0,
- "_src": "meal_plans_to_response",
- "_tgt": "meal_plan_generation_generationitem",
- "source": "meal_plan_generation_generationitem",
- "target": "meal_plans_to_response"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/meal_plans.py",
- "source_location": "L136",
- "weight": 1.0,
- "_src": "meal_plans_get_plan",
- "_tgt": "meal_plan_generation_generationitem",
- "source": "meal_plan_generation_generationitem",
- "target": "meal_plans_get_plan"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/meal_plans.py",
- "source_location": "L51",
- "weight": 1.0,
- "_src": "meal_plans_to_response",
- "_tgt": "meal_plan_generation_generationdebug",
- "source": "meal_plan_generation_generationdebug",
- "target": "meal_plans_to_response"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/meal_plans.py",
- "source_location": "L145",
- "weight": 1.0,
- "_src": "meal_plans_get_plan",
- "_tgt": "meal_plan_generation_generationdebug",
- "source": "meal_plan_generation_generationdebug",
- "target": "meal_plans_get_plan"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/meal_plans.py",
- "source_location": "L47",
- "weight": 1.0,
- "_src": "meal_plans_to_response",
- "_tgt": "meal_plan_generation_generationresponse",
- "source": "meal_plan_generation_generationresponse",
- "target": "meal_plans_to_response"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/meal_plans.py",
- "source_location": "L132",
- "weight": 1.0,
- "_src": "meal_plans_get_plan",
- "_tgt": "meal_plan_generation_generationresponse",
- "source": "meal_plan_generation_generationresponse",
- "target": "meal_plans_get_plan"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/profile.py",
- "source_location": "L17",
- "weight": 1.0,
- "_src": "backend_app_api_profile_py",
- "_tgt": "profile_get_profile",
- "confidence_score": 1.0,
- "source": "backend_app_api_profile_py",
- "target": "profile_get_profile"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/profile.py",
- "source_location": "L25",
- "weight": 1.0,
- "_src": "backend_app_api_profile_py",
- "_tgt": "profile_update_profile",
- "confidence_score": 1.0,
- "source": "backend_app_api_profile_py",
- "target": "profile_update_profile"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/profile.py",
- "source_location": "L40",
- "weight": 1.0,
- "_src": "backend_app_api_profile_py",
- "_tgt": "profile_get_members",
- "confidence_score": 1.0,
- "source": "backend_app_api_profile_py",
- "target": "profile_get_members"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/profile.py",
- "source_location": "L48",
- "weight": 1.0,
- "_src": "backend_app_api_profile_py",
- "_tgt": "profile_add_member",
- "confidence_score": 1.0,
- "source": "backend_app_api_profile_py",
- "target": "profile_add_member"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/profile.py",
- "source_location": "L74",
- "weight": 1.0,
- "_src": "backend_app_api_profile_py",
- "_tgt": "profile_delete_member",
- "confidence_score": 1.0,
- "source": "backend_app_api_profile_py",
- "target": "profile_delete_member"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/pantry.py",
- "source_location": "L14",
- "weight": 1.0,
- "_src": "backend_app_api_pantry_py",
- "_tgt": "pantry_get_pantry_items",
- "confidence_score": 1.0,
- "source": "backend_app_api_pantry_py",
- "target": "pantry_get_pantry_items"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/pantry.py",
- "source_location": "L26",
- "weight": 1.0,
- "_src": "backend_app_api_pantry_py",
- "_tgt": "pantry_add_pantry_item",
- "confidence_score": 1.0,
- "source": "backend_app_api_pantry_py",
- "target": "pantry_add_pantry_item"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/pantry.py",
- "source_location": "L59",
- "weight": 1.0,
- "_src": "backend_app_api_pantry_py",
- "_tgt": "pantry_remove_pantry_item",
- "confidence_score": 1.0,
- "source": "backend_app_api_pantry_py",
- "target": "pantry_remove_pantry_item"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/pantry.py",
- "source_location": "L70",
- "weight": 1.0,
- "_src": "backend_app_api_pantry_py",
- "_tgt": "pantry_update_pantry_item",
- "confidence_score": 1.0,
- "source": "backend_app_api_pantry_py",
- "target": "pantry_update_pantry_item"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/auth.py",
- "source_location": "L26",
- "weight": 1.0,
- "_src": "backend_app_api_auth_py",
- "_tgt": "auth_loginrequest",
- "confidence_score": 1.0,
- "source": "backend_app_api_auth_py",
- "target": "auth_loginrequest"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/auth.py",
- "source_location": "L31",
- "weight": 1.0,
- "_src": "backend_app_api_auth_py",
- "_tgt": "auth_login",
- "confidence_score": 1.0,
- "source": "backend_app_api_auth_py",
- "target": "auth_login"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/auth.py",
- "source_location": "L64",
- "weight": 1.0,
- "_src": "backend_app_api_auth_py",
- "_tgt": "auth_logout",
- "confidence_score": 1.0,
- "source": "backend_app_api_auth_py",
- "target": "auth_logout"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/auth.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "auth_rationale_1",
- "_tgt": "backend_app_api_auth_py",
- "confidence_score": 1.0,
- "source": "backend_app_api_auth_py",
- "target": "auth_rationale_1"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/shopping_list.py",
- "source_location": "L18",
- "weight": 1.0,
- "_src": "backend_app_api_shopping_list_py",
- "_tgt": "shopping_list_parse_uuid",
- "confidence_score": 1.0,
- "source": "backend_app_api_shopping_list_py",
- "target": "shopping_list_parse_uuid"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/shopping_list.py",
- "source_location": "L28",
- "weight": 1.0,
- "_src": "backend_app_api_shopping_list_py",
- "_tgt": "shopping_list_get_shopping_list",
- "confidence_score": 1.0,
- "source": "backend_app_api_shopping_list_py",
- "target": "shopping_list_get_shopping_list"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/shopping_list.py",
- "source_location": "L155",
- "weight": 1.0,
- "_src": "backend_app_api_shopping_list_py",
- "_tgt": "shopping_list_print_shopping_list",
- "confidence_score": 1.0,
- "source": "backend_app_api_shopping_list_py",
- "target": "shopping_list_print_shopping_list"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/shopping_list.py",
- "source_location": "L64",
- "weight": 1.0,
- "_src": "shopping_list_get_shopping_list",
- "_tgt": "shopping_list_parse_uuid",
- "confidence_score": 1.0,
- "source": "shopping_list_parse_uuid",
- "target": "shopping_list_get_shopping_list"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/recipes.py",
- "source_location": "L32",
- "weight": 1.0,
- "_src": "backend_app_api_recipes_py",
- "_tgt": "recipes_validate_ingredient_ids",
- "confidence_score": 1.0,
- "source": "backend_app_api_recipes_py",
- "target": "recipes_validate_ingredient_ids"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/recipes.py",
- "source_location": "L46",
- "weight": 1.0,
- "_src": "backend_app_api_recipes_py",
- "_tgt": "recipes_serialize",
- "confidence_score": 1.0,
- "source": "backend_app_api_recipes_py",
- "target": "recipes_serialize"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/recipes.py",
- "source_location": "L67",
- "weight": 1.0,
- "_src": "backend_app_api_recipes_py",
- "_tgt": "recipes_list_recipes",
- "confidence_score": 1.0,
- "source": "backend_app_api_recipes_py",
- "target": "recipes_list_recipes"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/recipes.py",
- "source_location": "L81",
- "weight": 1.0,
- "_src": "backend_app_api_recipes_py",
- "_tgt": "recipes_get_recipe",
- "confidence_score": 1.0,
- "source": "backend_app_api_recipes_py",
- "target": "recipes_get_recipe"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/recipes.py",
- "source_location": "L89",
- "weight": 1.0,
- "_src": "backend_app_api_recipes_py",
- "_tgt": "recipes_create_recipe",
- "confidence_score": 1.0,
- "source": "backend_app_api_recipes_py",
- "target": "recipes_create_recipe"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/recipes.py",
- "source_location": "L115",
- "weight": 1.0,
- "_src": "backend_app_api_recipes_py",
- "_tgt": "recipes_update_recipe",
- "confidence_score": 1.0,
- "source": "backend_app_api_recipes_py",
- "target": "recipes_update_recipe"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/recipes.py",
- "source_location": "L132",
- "weight": 1.0,
- "_src": "backend_app_api_recipes_py",
- "_tgt": "recipes_delete_recipe",
- "confidence_score": 1.0,
- "source": "backend_app_api_recipes_py",
- "target": "recipes_delete_recipe"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/recipes.py",
- "source_location": "L152",
- "weight": 1.0,
- "_src": "backend_app_api_recipes_py",
- "_tgt": "recipes_parse_qty_unit",
- "confidence_score": 1.0,
- "source": "backend_app_api_recipes_py",
- "target": "recipes_parse_qty_unit"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/recipes.py",
- "source_location": "L171",
- "weight": 1.0,
- "_src": "backend_app_api_recipes_py",
- "_tgt": "recipes_resolve_ingredient",
- "confidence_score": 1.0,
- "source": "backend_app_api_recipes_py",
- "target": "recipes_resolve_ingredient"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/recipes.py",
- "source_location": "L90",
- "weight": 1.0,
- "_src": "recipes_create_recipe",
- "_tgt": "recipes_validate_ingredient_ids",
- "confidence_score": 1.0,
- "source": "recipes_validate_ingredient_ids",
- "target": "recipes_create_recipe"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/recipes.py",
- "source_location": "L121",
- "weight": 1.0,
- "_src": "recipes_update_recipe",
- "_tgt": "recipes_validate_ingredient_ids",
- "confidence_score": 1.0,
- "source": "recipes_validate_ingredient_ids",
- "target": "recipes_update_recipe"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/recipes.py",
- "source_location": "L77",
- "weight": 1.0,
- "_src": "recipes_list_recipes",
- "_tgt": "recipes_serialize",
- "confidence_score": 1.0,
- "source": "recipes_serialize",
- "target": "recipes_list_recipes"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/recipes.py",
- "source_location": "L85",
- "weight": 1.0,
- "_src": "recipes_get_recipe",
- "_tgt": "recipes_serialize",
- "confidence_score": 1.0,
- "source": "recipes_serialize",
- "target": "recipes_get_recipe"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/recipes.py",
- "source_location": "L111",
- "weight": 1.0,
- "_src": "recipes_create_recipe",
- "_tgt": "recipes_serialize",
- "confidence_score": 1.0,
- "source": "recipes_serialize",
- "target": "recipes_create_recipe"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/recipes.py",
- "source_location": "L128",
- "weight": 1.0,
- "_src": "recipes_update_recipe",
- "_tgt": "recipes_serialize",
- "confidence_score": 1.0,
- "source": "recipes_serialize",
- "target": "recipes_update_recipe"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/recipes.py",
- "source_location": "L175",
- "weight": 1.0,
- "_src": "recipes_resolve_ingredient",
- "_tgt": "recipes_parse_qty_unit",
- "confidence_score": 1.0,
- "source": "recipes_parse_qty_unit",
- "target": "recipes_resolve_ingredient"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/ingredients.py",
- "source_location": "L33",
- "weight": 1.0,
- "_src": "backend_app_api_ingredients_py",
- "_tgt": "ingredients_list_ingredients",
- "confidence_score": 1.0,
- "source": "backend_app_api_ingredients_py",
- "target": "ingredients_list_ingredients"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/ingredients.py",
- "source_location": "L51",
- "weight": 1.0,
- "_src": "backend_app_api_ingredients_py",
- "_tgt": "ingredients_get_ingredient",
- "confidence_score": 1.0,
- "source": "backend_app_api_ingredients_py",
- "target": "ingredients_get_ingredient"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/ingredients.py",
- "source_location": "L59",
- "weight": 1.0,
- "_src": "backend_app_api_ingredients_py",
- "_tgt": "ingredients_create_ingredient",
- "confidence_score": 1.0,
- "source": "backend_app_api_ingredients_py",
- "target": "ingredients_create_ingredient"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/ingredients.py",
- "source_location": "L79",
- "weight": 1.0,
- "_src": "backend_app_api_ingredients_py",
- "_tgt": "ingredients_update_ingredient",
- "confidence_score": 1.0,
- "source": "backend_app_api_ingredients_py",
- "target": "ingredients_update_ingredient"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/ingredients.py",
- "source_location": "L108",
- "weight": 1.0,
- "_src": "backend_app_api_ingredients_py",
- "_tgt": "ingredients_delete_ingredient",
- "confidence_score": 1.0,
- "source": "backend_app_api_ingredients_py",
- "target": "ingredients_delete_ingredient"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/ingredients.py",
- "source_location": "L117",
- "weight": 1.0,
- "_src": "backend_app_api_ingredients_py",
- "_tgt": "ingredients_pinmatchbody",
- "confidence_score": 1.0,
- "source": "backend_app_api_ingredients_py",
- "target": "ingredients_pinmatchbody"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/ingredients.py",
- "source_location": "L127",
- "weight": 1.0,
- "_src": "backend_app_api_ingredients_py",
- "_tgt": "ingredients_pin_match",
- "confidence_score": 1.0,
- "source": "backend_app_api_ingredients_py",
- "target": "ingredients_pin_match"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/ingredients.py",
- "source_location": "L170",
- "weight": 1.0,
- "_src": "backend_app_api_ingredients_py",
- "_tgt": "ingredients_unpin_match",
- "confidence_score": 1.0,
- "source": "backend_app_api_ingredients_py",
- "target": "ingredients_unpin_match"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/never_suggest.py",
- "source_location": "L23",
- "weight": 1.0,
- "_src": "backend_app_api_never_suggest_py",
- "_tgt": "never_suggest_coerce_reason",
- "confidence_score": 1.0,
- "source": "backend_app_api_never_suggest_py",
- "target": "never_suggest_coerce_reason"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/never_suggest.py",
- "source_location": "L33",
- "weight": 1.0,
- "_src": "backend_app_api_never_suggest_py",
- "_tgt": "never_suggest_list_for_family",
- "confidence_score": 1.0,
- "source": "backend_app_api_never_suggest_py",
- "target": "never_suggest_list_for_family"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/never_suggest.py",
- "source_location": "L45",
- "weight": 1.0,
- "_src": "backend_app_api_never_suggest_py",
- "_tgt": "never_suggest_block",
- "confidence_score": 1.0,
- "source": "backend_app_api_never_suggest_py",
- "target": "never_suggest_block"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/never_suggest.py",
- "source_location": "L64",
- "weight": 1.0,
- "_src": "backend_app_api_never_suggest_py",
- "_tgt": "never_suggest_unblock",
- "confidence_score": 1.0,
- "source": "backend_app_api_never_suggest_py",
- "target": "never_suggest_unblock"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/never_suggest.py",
- "source_location": "L50",
- "weight": 1.0,
- "_src": "never_suggest_block",
- "_tgt": "never_suggest_coerce_reason",
- "confidence_score": 1.0,
- "source": "never_suggest_coerce_reason",
- "target": "never_suggest_block"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/meal_plans.py",
- "source_location": "L33",
- "weight": 1.0,
- "_src": "backend_app_api_meal_plans_py",
- "_tgt": "meal_plans_to_response",
- "confidence_score": 1.0,
- "source": "backend_app_api_meal_plans_py",
- "target": "meal_plans_to_response"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/meal_plans.py",
- "source_location": "L60",
- "weight": 1.0,
- "_src": "backend_app_api_meal_plans_py",
- "_tgt": "meal_plans_generate",
- "confidence_score": 1.0,
- "source": "backend_app_api_meal_plans_py",
- "target": "meal_plans_generate"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/meal_plans.py",
- "source_location": "L82",
- "weight": 1.0,
- "_src": "backend_app_api_meal_plans_py",
- "_tgt": "meal_plans_regenerate",
- "confidence_score": 1.0,
- "source": "backend_app_api_meal_plans_py",
- "target": "meal_plans_regenerate"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/meal_plans.py",
- "source_location": "L120",
- "weight": 1.0,
- "_src": "backend_app_api_meal_plans_py",
- "_tgt": "meal_plans_get_plan",
- "confidence_score": 1.0,
- "source": "backend_app_api_meal_plans_py",
- "target": "meal_plans_get_plan"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/meal_plans.py",
- "source_location": "L78",
- "weight": 1.0,
- "_src": "meal_plans_generate",
- "_tgt": "meal_plans_to_response",
- "confidence_score": 1.0,
- "source": "meal_plans_to_response",
- "target": "meal_plans_generate"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/meal_plans.py",
- "source_location": "L116",
- "weight": 1.0,
- "_src": "meal_plans_regenerate",
- "_tgt": "meal_plans_to_response",
- "confidence_score": 1.0,
- "source": "meal_plans_to_response",
- "target": "meal_plans_regenerate"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/meal_plans.py",
- "source_location": "L65",
- "weight": 1.0,
- "_src": "meal_plans_generate",
- "_tgt": "generate_generate_meal_plan",
- "source": "meal_plans_generate",
- "target": "generate_generate_meal_plan"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/meal_plans.py",
- "source_location": "L104",
- "weight": 1.0,
- "_src": "meal_plans_regenerate",
- "_tgt": "generate_generate_meal_plan",
- "source": "meal_plans_regenerate",
- "target": "generate_generate_meal_plan"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/admin.py",
- "source_location": "L14",
- "weight": 1.0,
- "_src": "backend_app_api_admin_py",
- "_tgt": "admin_trigger_scrape",
- "confidence_score": 1.0,
- "source": "backend_app_api_admin_py",
- "target": "admin_trigger_scrape"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/admin.py",
- "source_location": "L30",
- "weight": 1.0,
- "_src": "backend_app_api_admin_py",
- "_tgt": "admin_get_logs",
- "confidence_score": 1.0,
- "source": "backend_app_api_admin_py",
- "target": "admin_get_logs"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/admin.py",
- "source_location": "L60",
- "weight": 1.0,
- "_src": "backend_app_api_admin_py",
- "_tgt": "admin_get_log",
- "confidence_score": 1.0,
- "source": "backend_app_api_admin_py",
- "target": "admin_get_log"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/admin.py",
- "source_location": "L78",
- "weight": 1.0,
- "_src": "backend_app_api_admin_py",
- "_tgt": "admin_get_email_logs",
- "confidence_score": 1.0,
- "source": "backend_app_api_admin_py",
- "target": "admin_get_email_logs"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/admin.py",
- "source_location": "L107",
- "weight": 1.0,
- "_src": "backend_app_api_admin_py",
- "_tgt": "admin_get_all_meal_plans",
- "confidence_score": 1.0,
- "source": "backend_app_api_admin_py",
- "target": "admin_get_all_meal_plans"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/admin.py",
- "source_location": "L134",
- "weight": 1.0,
- "_src": "backend_app_api_admin_py",
- "_tgt": "admin_test_email",
- "confidence_score": 1.0,
- "source": "backend_app_api_admin_py",
- "target": "admin_test_email"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/admin.py",
- "source_location": "L171",
- "weight": 1.0,
- "_src": "backend_app_api_admin_py",
- "_tgt": "admin_get_stats",
- "confidence_score": 1.0,
- "source": "backend_app_api_admin_py",
- "target": "admin_get_stats"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/admin.py",
- "source_location": "L20",
- "weight": 1.0,
- "_src": "admin_trigger_scrape",
- "_tgt": "scraper_service_enqueue_scrape",
- "source": "admin_trigger_scrape",
- "target": "scraper_service_enqueue_scrape"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/admin.py",
- "source_location": "L141",
- "weight": 1.0,
- "_src": "admin_test_email",
- "_tgt": "email_get_email_backend",
- "source": "admin_test_email",
- "target": "email_get_email_backend"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/admin.py",
- "source_location": "L142",
- "weight": 1.0,
- "_src": "admin_test_email",
- "_tgt": "email_sendgridemailbackend_send",
- "source": "admin_test_email",
- "target": "email_sendgridemailbackend_send"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/feedback.py",
- "source_location": "L17",
- "weight": 1.0,
- "_src": "backend_app_api_feedback_py",
- "_tgt": "feedback_get_feedback",
- "confidence_score": 1.0,
- "source": "backend_app_api_feedback_py",
- "target": "feedback_get_feedback"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/feedback.py",
- "source_location": "L39",
- "weight": 1.0,
- "_src": "backend_app_api_feedback_py",
- "_tgt": "feedback_create_feedback",
- "confidence_score": 1.0,
- "source": "backend_app_api_feedback_py",
- "target": "feedback_create_feedback"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/feedback.py",
- "source_location": "L22",
- "weight": 1.0,
- "_src": "feedback_rationale_22",
- "_tgt": "feedback_get_feedback",
- "confidence_score": 1.0,
- "source": "feedback_get_feedback",
- "target": "feedback_rationale_22"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/feedback.py",
- "source_location": "L44",
- "weight": 1.0,
- "_src": "feedback_rationale_44",
- "_tgt": "feedback_create_feedback",
- "confidence_score": 1.0,
- "source": "feedback_create_feedback",
- "target": "feedback_rationale_44"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L30",
- "weight": 1.0,
- "_src": "backend_app_api_meals_py",
- "_tgt": "meals_get_planned_meals",
- "confidence_score": 1.0,
- "source": "backend_app_api_meals_py",
- "target": "meals_get_planned_meals"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L46",
- "weight": 1.0,
- "_src": "backend_app_api_meals_py",
- "_tgt": "meals_create_meal_plan",
- "confidence_score": 1.0,
- "source": "backend_app_api_meals_py",
- "target": "meals_create_meal_plan"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L85",
- "weight": 1.0,
- "_src": "backend_app_api_meals_py",
- "_tgt": "meals_get_meal_plan",
- "confidence_score": 1.0,
- "source": "backend_app_api_meals_py",
- "target": "meals_get_meal_plan"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L93",
- "weight": 1.0,
- "_src": "backend_app_api_meals_py",
- "_tgt": "meals_lock_meal_plan",
- "confidence_score": 1.0,
- "source": "backend_app_api_meals_py",
- "target": "meals_lock_meal_plan"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L109",
- "weight": 1.0,
- "_src": "backend_app_api_meals_py",
- "_tgt": "meals_votesubmission",
- "confidence_score": 1.0,
- "source": "backend_app_api_meals_py",
- "target": "meals_votesubmission"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L119",
- "weight": 1.0,
- "_src": "backend_app_api_meals_py",
- "_tgt": "meals_get_vote_page",
- "confidence_score": 1.0,
- "source": "backend_app_api_meals_py",
- "target": "meals_get_vote_page"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L251",
- "weight": 1.0,
- "_src": "backend_app_api_meals_py",
- "_tgt": "meals_submit_vote",
- "confidence_score": 1.0,
- "source": "backend_app_api_meals_py",
- "target": "meals_submit_vote"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L301",
- "weight": 1.0,
- "_src": "backend_app_api_meals_py",
- "_tgt": "meals_get_meal_item",
- "confidence_score": 1.0,
- "source": "backend_app_api_meals_py",
- "target": "meals_get_meal_item"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L323",
- "weight": 1.0,
- "_src": "backend_app_api_meals_py",
- "_tgt": "meals_swap_meal_item",
- "confidence_score": 1.0,
- "source": "backend_app_api_meals_py",
- "target": "meals_swap_meal_item"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L342",
- "weight": 1.0,
- "_src": "backend_app_api_meals_py",
- "_tgt": "meals_approve_meal_item",
- "confidence_score": 1.0,
- "source": "backend_app_api_meals_py",
- "target": "meals_approve_meal_item"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L353",
- "weight": 1.0,
- "_src": "backend_app_api_meals_py",
- "_tgt": "meals_deny_meal_item",
- "confidence_score": 1.0,
- "source": "backend_app_api_meals_py",
- "target": "meals_deny_meal_item"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L364",
- "weight": 1.0,
- "_src": "backend_app_api_meals_py",
- "_tgt": "meals_generate_single_item",
- "confidence_score": 1.0,
- "source": "backend_app_api_meals_py",
- "target": "meals_generate_single_item"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L413",
- "weight": 1.0,
- "_src": "backend_app_api_meals_py",
- "_tgt": "meals_move_meal_item",
- "confidence_score": 1.0,
- "source": "backend_app_api_meals_py",
- "target": "meals_move_meal_item"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L110",
- "weight": 1.0,
- "_src": "meals_rationale_110",
- "_tgt": "meals_votesubmission",
- "confidence_score": 1.0,
- "source": "meals_votesubmission",
- "target": "meals_rationale_110"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L124",
- "weight": 1.0,
- "_src": "meals_rationale_124",
- "_tgt": "meals_get_vote_page",
- "confidence_score": 1.0,
- "source": "meals_get_vote_page",
- "target": "meals_rationale_124"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/meals.py",
- "source_location": "L129",
- "weight": 1.0,
- "_src": "meals_get_vote_page",
- "_tgt": "approval_verify_token",
- "source": "meals_get_vote_page",
- "target": "approval_verify_token"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L257",
- "weight": 1.0,
- "_src": "meals_rationale_257",
- "_tgt": "meals_submit_vote",
- "confidence_score": 1.0,
- "source": "meals_submit_vote",
- "target": "meals_rationale_257"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/api/meals.py",
- "source_location": "L263",
- "weight": 1.0,
- "_src": "meals_submit_vote",
- "_tgt": "approval_consume_token",
- "source": "meals_submit_vote",
- "target": "approval_consume_token"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L343",
- "weight": 1.0,
- "_src": "meals_rationale_343",
- "_tgt": "meals_approve_meal_item",
- "confidence_score": 1.0,
- "source": "meals_approve_meal_item",
- "target": "meals_rationale_343"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L354",
- "weight": 1.0,
- "_src": "meals_rationale_354",
- "_tgt": "meals_deny_meal_item",
- "confidence_score": 1.0,
- "source": "meals_deny_meal_item",
- "target": "meals_rationale_354"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L370",
- "weight": 1.0,
- "_src": "meals_rationale_370",
- "_tgt": "meals_generate_single_item",
- "confidence_score": 1.0,
- "source": "meals_generate_single_item",
- "target": "meals_rationale_370"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/meals.py",
- "source_location": "L419",
- "weight": 1.0,
- "_src": "meals_rationale_419",
- "_tgt": "meals_move_meal_item",
- "confidence_score": 1.0,
- "source": "meals_move_meal_item",
- "target": "meals_rationale_419"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/orchestrate.py",
- "source_location": "L15",
- "weight": 1.0,
- "_src": "backend_app_api_orchestrate_py",
- "_tgt": "orchestrate_orchestrate_status",
- "confidence_score": 1.0,
- "source": "backend_app_api_orchestrate_py",
- "target": "orchestrate_orchestrate_status"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/orchestrate.py",
- "source_location": "L41",
- "weight": 1.0,
- "_src": "backend_app_api_orchestrate_py",
- "_tgt": "orchestrate_orchestrate_run_week",
- "confidence_score": 1.0,
- "source": "backend_app_api_orchestrate_py",
- "target": "orchestrate_orchestrate_run_week"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/api/orchestrate.py",
- "source_location": "L51",
- "weight": 1.0,
- "_src": "backend_app_api_orchestrate_py",
- "_tgt": "orchestrate_orchestrate_step",
- "confidence_score": 1.0,
- "source": "backend_app_api_orchestrate_py",
- "target": "orchestrate_orchestrate_step"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/approval.py",
- "source_location": "L33",
- "weight": 1.0,
- "_src": "backend_app_services_approval_py",
- "_tgt": "approval_serializer",
- "confidence_score": 1.0,
- "source": "backend_app_services_approval_py",
- "target": "approval_serializer"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/approval.py",
- "source_location": "L37",
- "weight": 1.0,
- "_src": "backend_app_services_approval_py",
- "_tgt": "approval_issue_token",
- "confidence_score": 1.0,
- "source": "backend_app_services_approval_py",
- "target": "approval_issue_token"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/approval.py",
- "source_location": "L45",
- "weight": 1.0,
- "_src": "backend_app_services_approval_py",
- "_tgt": "approval_verify_token",
- "confidence_score": 1.0,
- "source": "backend_app_services_approval_py",
- "target": "approval_verify_token"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/approval.py",
- "source_location": "L57",
- "weight": 1.0,
- "_src": "backend_app_services_approval_py",
- "_tgt": "approval_consume_token",
- "confidence_score": 1.0,
- "source": "backend_app_services_approval_py",
- "target": "approval_consume_token"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/approval.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "approval_rationale_1",
- "_tgt": "backend_app_services_approval_py",
- "confidence_score": 1.0,
- "source": "backend_app_services_approval_py",
- "target": "approval_rationale_1"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/approval.py",
- "source_location": "L42",
- "weight": 1.0,
- "_src": "approval_issue_token",
- "_tgt": "approval_serializer",
- "confidence_score": 1.0,
- "source": "approval_serializer",
- "target": "approval_issue_token"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/approval.py",
- "source_location": "L47",
- "weight": 1.0,
- "_src": "approval_verify_token",
- "_tgt": "approval_serializer",
- "confidence_score": 1.0,
- "source": "approval_serializer",
- "target": "approval_verify_token"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/orchestrator/steps.py",
- "source_location": "L198",
- "weight": 1.0,
- "_src": "steps_step_email",
- "_tgt": "approval_issue_token",
- "source": "approval_issue_token",
- "target": "steps_step_email"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/orchestrator/steps.py",
- "source_location": "L523",
- "weight": 1.0,
- "_src": "steps_step_reminder",
- "_tgt": "approval_issue_token",
- "source": "approval_issue_token",
- "target": "steps_step_reminder"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_approval.py",
- "source_location": "L26",
- "weight": 1.0,
- "_src": "test_approval_test_issue_and_verify_token_roundtrip",
- "_tgt": "approval_issue_token",
- "source": "approval_issue_token",
- "target": "test_approval_test_issue_and_verify_token_roundtrip"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_approval.py",
- "source_location": "L35",
- "weight": 1.0,
- "_src": "test_approval_test_verify_rejects_tampered_token",
- "_tgt": "approval_issue_token",
- "source": "approval_issue_token",
- "target": "test_approval_test_verify_rejects_tampered_token"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_approval.py",
- "source_location": "L52",
- "weight": 1.0,
- "_src": "test_approval_test_verify_rejects_expired_token",
- "_tgt": "approval_issue_token",
- "source": "approval_issue_token",
- "target": "test_approval_test_verify_rejects_expired_token"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_approval.py",
- "source_location": "L164",
- "weight": 1.0,
- "_src": "test_approval_test_consume_token_single_use",
- "_tgt": "approval_issue_token",
- "source": "approval_issue_token",
- "target": "test_approval_test_consume_token_single_use"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_approval.py",
- "source_location": "L189",
- "weight": 1.0,
- "_src": "test_approval_test_vote_get_renders_html",
- "_tgt": "approval_issue_token",
- "source": "approval_issue_token",
- "target": "test_approval_test_vote_get_renders_html"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_approval.py",
- "source_location": "L216",
- "weight": 1.0,
- "_src": "test_approval_test_vote_post_records_and_decides",
- "_tgt": "approval_issue_token",
- "source": "approval_issue_token",
- "target": "test_approval_test_vote_post_records_and_decides"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "scripts/send_test_approval.py",
- "source_location": "L134",
- "weight": 1.0,
- "_src": "send_test_approval_main",
- "_tgt": "approval_issue_token",
- "source": "approval_issue_token",
- "target": "send_test_approval_main"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/approval.py",
- "source_location": "L68",
- "weight": 1.0,
- "_src": "approval_consume_token",
- "_tgt": "approval_verify_token",
- "confidence_score": 1.0,
- "source": "approval_verify_token",
- "target": "approval_consume_token"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_approval.py",
- "source_location": "L27",
- "weight": 1.0,
- "_src": "test_approval_test_issue_and_verify_token_roundtrip",
- "_tgt": "approval_verify_token",
- "source": "approval_verify_token",
- "target": "test_approval_test_issue_and_verify_token_roundtrip"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_approval.py",
- "source_location": "L38",
- "weight": 1.0,
- "_src": "test_approval_test_verify_rejects_tampered_token",
- "_tgt": "approval_verify_token",
- "source": "approval_verify_token",
- "target": "test_approval_test_verify_rejects_tampered_token"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_approval.py",
- "source_location": "L66",
- "weight": 1.0,
- "_src": "test_approval_test_verify_rejects_expired_token",
- "_tgt": "approval_verify_token",
- "source": "approval_verify_token",
- "target": "test_approval_test_verify_rejects_expired_token"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/approval.py",
- "source_location": "L63",
- "weight": 1.0,
- "_src": "approval_rationale_63",
- "_tgt": "approval_consume_token",
- "confidence_score": 1.0,
- "source": "approval_consume_token",
- "target": "approval_rationale_63"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_approval.py",
- "source_location": "L167",
- "weight": 1.0,
- "_src": "test_approval_test_consume_token_single_use",
- "_tgt": "approval_consume_token",
- "source": "approval_consume_token",
- "target": "test_approval_test_consume_token_single_use"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/swiftly_auth.py",
- "source_location": "L28",
- "weight": 1.0,
- "_src": "backend_app_services_swiftly_auth_py",
- "_tgt": "swiftly_auth_swiftlyauthminterror",
- "confidence_score": 1.0,
- "source": "backend_app_services_swiftly_auth_py",
- "target": "swiftly_auth_swiftlyauthminterror"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/swiftly_auth.py",
- "source_location": "L51",
- "weight": 1.0,
- "_src": "backend_app_services_swiftly_auth_py",
- "_tgt": "swiftly_auth_reset_cache_for_tests",
- "confidence_score": 1.0,
- "source": "backend_app_services_swiftly_auth_py",
- "target": "swiftly_auth_reset_cache_for_tests"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/swiftly_auth.py",
- "source_location": "L59",
- "weight": 1.0,
- "_src": "backend_app_services_swiftly_auth_py",
- "_tgt": "swiftly_auth_decode_jwt_payload",
- "confidence_score": 1.0,
- "source": "backend_app_services_swiftly_auth_py",
- "target": "swiftly_auth_decode_jwt_payload"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/swiftly_auth.py",
- "source_location": "L72",
- "weight": 1.0,
- "_src": "backend_app_services_swiftly_auth_py",
- "_tgt": "swiftly_auth_fetch_firebase_api_key",
- "confidence_score": 1.0,
- "source": "backend_app_services_swiftly_auth_py",
- "target": "swiftly_auth_fetch_firebase_api_key"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/swiftly_auth.py",
- "source_location": "L105",
- "weight": 1.0,
- "_src": "backend_app_services_swiftly_auth_py",
- "_tgt": "swiftly_auth_mint_anonymous_token",
- "confidence_score": 1.0,
- "source": "backend_app_services_swiftly_auth_py",
- "target": "swiftly_auth_mint_anonymous_token"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/swiftly_auth.py",
- "source_location": "L160",
- "weight": 1.0,
- "_src": "backend_app_services_swiftly_auth_py",
- "_tgt": "swiftly_auth_get_token",
- "confidence_score": 1.0,
- "source": "backend_app_services_swiftly_auth_py",
- "target": "swiftly_auth_get_token"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/swiftly_auth.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "swiftly_auth_rationale_1",
- "_tgt": "backend_app_services_swiftly_auth_py",
- "confidence_score": 1.0,
- "source": "backend_app_services_swiftly_auth_py",
- "target": "swiftly_auth_rationale_1"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/swiftly_auth.py",
- "source_location": "L28",
- "weight": 1.0,
- "_src": "swiftly_auth_swiftlyauthminterror",
- "_tgt": "exception",
- "confidence_score": 1.0,
- "source": "swiftly_auth_swiftlyauthminterror",
- "target": "exception"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/swiftly_auth.py",
- "source_location": "L62",
- "weight": 1.0,
- "_src": "swiftly_auth_decode_jwt_payload",
- "_tgt": "swiftly_auth_swiftlyauthminterror",
- "confidence_score": 1.0,
- "source": "swiftly_auth_swiftlyauthminterror",
- "target": "swiftly_auth_decode_jwt_payload"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/swiftly_auth.py",
- "source_location": "L83",
- "weight": 1.0,
- "_src": "swiftly_auth_fetch_firebase_api_key",
- "_tgt": "swiftly_auth_swiftlyauthminterror",
- "confidence_score": 1.0,
- "source": "swiftly_auth_swiftlyauthminterror",
- "target": "swiftly_auth_fetch_firebase_api_key"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/swiftly_auth.py",
- "source_location": "L127",
- "weight": 1.0,
- "_src": "swiftly_auth_mint_anonymous_token",
- "_tgt": "swiftly_auth_swiftlyauthminterror",
- "confidence_score": 1.0,
- "source": "swiftly_auth_swiftlyauthminterror",
- "target": "swiftly_auth_mint_anonymous_token"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/swiftly_auth.py",
- "source_location": "L29",
- "weight": 1.0,
- "_src": "swiftly_auth_rationale_29",
- "_tgt": "swiftly_auth_swiftlyauthminterror",
- "confidence_score": 1.0,
- "source": "swiftly_auth_swiftlyauthminterror",
- "target": "swiftly_auth_rationale_29"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L41",
- "weight": 0.8,
- "_src": "lucky_ca_scraper_swiftlyautherror",
- "_tgt": "swiftly_auth_swiftlyauthminterror",
- "confidence_score": 0.5,
- "source": "swiftly_auth_swiftlyauthminterror",
- "target": "lucky_ca_scraper_swiftlyautherror"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L41",
- "weight": 0.8,
- "_src": "lucky_ca_scraper_luckycaliforniascraper",
- "_tgt": "swiftly_auth_swiftlyauthminterror",
- "confidence_score": 0.5,
- "source": "swiftly_auth_swiftlyauthminterror",
- "target": "lucky_ca_scraper_luckycaliforniascraper"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L41",
- "weight": 0.8,
- "_src": "lucky_ca_scraper_rationale_1",
- "_tgt": "swiftly_auth_swiftlyauthminterror",
- "confidence_score": 0.5,
- "source": "swiftly_auth_swiftlyauthminterror",
- "target": "lucky_ca_scraper_rationale_1"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L41",
- "weight": 0.8,
- "_src": "lucky_ca_scraper_rationale_50",
- "_tgt": "swiftly_auth_swiftlyauthminterror",
- "confidence_score": 0.5,
- "source": "swiftly_auth_swiftlyauthminterror",
- "target": "lucky_ca_scraper_rationale_50"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L41",
- "weight": 0.8,
- "_src": "lucky_ca_scraper_rationale_68",
- "_tgt": "swiftly_auth_swiftlyauthminterror",
- "confidence_score": 0.5,
- "source": "swiftly_auth_swiftlyauthminterror",
- "target": "lucky_ca_scraper_rationale_68"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L41",
- "weight": 0.8,
- "_src": "lucky_ca_scraper_rationale_139",
- "_tgt": "swiftly_auth_swiftlyauthminterror",
- "confidence_score": 0.5,
- "source": "swiftly_auth_swiftlyauthminterror",
- "target": "lucky_ca_scraper_rationale_139"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L41",
- "weight": 0.8,
- "_src": "lucky_ca_scraper_rationale_158",
- "_tgt": "swiftly_auth_swiftlyauthminterror",
- "confidence_score": 0.5,
- "source": "swiftly_auth_swiftlyauthminterror",
- "target": "lucky_ca_scraper_rationale_158"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L41",
- "weight": 0.8,
- "_src": "lucky_ca_scraper_rationale_180",
- "_tgt": "swiftly_auth_swiftlyauthminterror",
- "confidence_score": 0.5,
- "source": "swiftly_auth_swiftlyauthminterror",
- "target": "lucky_ca_scraper_rationale_180"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L41",
- "weight": 0.8,
- "_src": "lucky_ca_scraper_rationale_192",
- "_tgt": "swiftly_auth_swiftlyauthminterror",
- "confidence_score": 0.5,
- "source": "swiftly_auth_swiftlyauthminterror",
- "target": "lucky_ca_scraper_rationale_192"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L41",
- "weight": 0.8,
- "_src": "lucky_ca_scraper_rationale_209",
- "_tgt": "swiftly_auth_swiftlyauthminterror",
- "confidence_score": 0.5,
- "source": "swiftly_auth_swiftlyauthminterror",
- "target": "lucky_ca_scraper_rationale_209"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L41",
- "weight": 0.8,
- "_src": "lucky_ca_scraper_rationale_227",
- "_tgt": "swiftly_auth_swiftlyauthminterror",
- "confidence_score": 0.5,
- "source": "swiftly_auth_swiftlyauthminterror",
- "target": "lucky_ca_scraper_rationale_227"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L41",
- "weight": 0.8,
- "_src": "lucky_ca_scraper_rationale_247",
- "_tgt": "swiftly_auth_swiftlyauthminterror",
- "confidence_score": 0.5,
- "source": "swiftly_auth_swiftlyauthminterror",
- "target": "lucky_ca_scraper_rationale_247"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L41",
- "weight": 0.8,
- "_src": "lucky_ca_scraper_rationale_298",
- "_tgt": "swiftly_auth_swiftlyauthminterror",
- "confidence_score": 0.5,
- "source": "swiftly_auth_swiftlyauthminterror",
- "target": "lucky_ca_scraper_rationale_298"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L41",
- "weight": 0.8,
- "_src": "lucky_ca_scraper_rationale_318",
- "_tgt": "swiftly_auth_swiftlyauthminterror",
- "confidence_score": 0.5,
- "source": "swiftly_auth_swiftlyauthminterror",
- "target": "lucky_ca_scraper_rationale_318"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L24",
- "weight": 0.8,
- "_src": "test_swiftly_auth_rationale_1",
- "_tgt": "swiftly_auth_swiftlyauthminterror",
- "confidence_score": 0.5,
- "source": "swiftly_auth_swiftlyauthminterror",
- "target": "test_swiftly_auth_rationale_1"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L24",
- "weight": 0.8,
- "_src": "test_swiftly_auth_rationale_72",
- "_tgt": "swiftly_auth_swiftlyauthminterror",
- "confidence_score": 0.5,
- "source": "swiftly_auth_swiftlyauthminterror",
- "target": "test_swiftly_auth_rationale_72"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L24",
- "weight": 0.8,
- "_src": "test_swiftly_auth_rationale_100",
- "_tgt": "swiftly_auth_swiftlyauthminterror",
- "confidence_score": 0.5,
- "source": "swiftly_auth_swiftlyauthminterror",
- "target": "test_swiftly_auth_rationale_100"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L24",
- "weight": 0.8,
- "_src": "test_swiftly_auth_rationale_119",
- "_tgt": "swiftly_auth_swiftlyauthminterror",
- "confidence_score": 0.5,
- "source": "swiftly_auth_swiftlyauthminterror",
- "target": "test_swiftly_auth_rationale_119"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L24",
- "weight": 0.8,
- "_src": "test_swiftly_auth_rationale_141",
- "_tgt": "swiftly_auth_swiftlyauthminterror",
- "confidence_score": 0.5,
- "source": "swiftly_auth_swiftlyauthminterror",
- "target": "test_swiftly_auth_rationale_141"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L49",
- "weight": 1.0,
- "_src": "lucky_ca_scraper_swiftlyautherror",
- "_tgt": "exception",
- "confidence_score": 1.0,
- "source": "exception",
- "target": "lucky_ca_scraper_swiftlyautherror"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L96",
- "weight": 1.0,
- "_src": "scraper_service_run_scrape_in_background",
- "_tgt": "exception",
- "source": "exception",
- "target": "scraper_service_run_scrape_in_background"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/orchestrator/alerts.py",
- "source_location": "L21",
- "weight": 1.0,
- "_src": "alerts_send_admin_alert",
- "_tgt": "exception",
- "source": "exception",
- "target": "alerts_send_admin_alert"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/orchestrator/runner.py",
- "source_location": "L77",
- "weight": 1.0,
- "_src": "runner_run_step",
- "_tgt": "exception",
- "source": "exception",
- "target": "runner_run_step"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/swiftly_auth.py",
- "source_location": "L52",
- "weight": 1.0,
- "_src": "swiftly_auth_rationale_52",
- "_tgt": "swiftly_auth_reset_cache_for_tests",
- "confidence_score": 1.0,
- "source": "swiftly_auth_reset_cache_for_tests",
- "target": "swiftly_auth_rationale_52"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L35",
- "weight": 1.0,
- "_src": "test_swiftly_auth_clear_cache",
- "_tgt": "swiftly_auth_reset_cache_for_tests",
- "source": "swiftly_auth_reset_cache_for_tests",
- "target": "test_swiftly_auth_clear_cache"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/swiftly_auth.py",
- "source_location": "L144",
- "weight": 1.0,
- "_src": "swiftly_auth_mint_anonymous_token",
- "_tgt": "swiftly_auth_decode_jwt_payload",
- "confidence_score": 1.0,
- "source": "swiftly_auth_decode_jwt_payload",
- "target": "swiftly_auth_mint_anonymous_token"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/swiftly_auth.py",
- "source_location": "L111",
- "weight": 1.0,
- "_src": "swiftly_auth_mint_anonymous_token",
- "_tgt": "swiftly_auth_fetch_firebase_api_key",
- "confidence_score": 1.0,
- "source": "swiftly_auth_fetch_firebase_api_key",
- "target": "swiftly_auth_mint_anonymous_token"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/swiftly_auth.py",
- "source_location": "L171",
- "weight": 1.0,
- "_src": "swiftly_auth_get_token",
- "_tgt": "swiftly_auth_mint_anonymous_token",
- "confidence_score": 1.0,
- "source": "swiftly_auth_mint_anonymous_token",
- "target": "swiftly_auth_get_token"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/swiftly_auth.py",
- "source_location": "L106",
- "weight": 1.0,
- "_src": "swiftly_auth_rationale_106",
- "_tgt": "swiftly_auth_mint_anonymous_token",
- "confidence_score": 1.0,
- "source": "swiftly_auth_mint_anonymous_token",
- "target": "swiftly_auth_rationale_106"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/swiftly_auth.py",
- "source_location": "L161",
- "weight": 1.0,
- "_src": "swiftly_auth_rationale_161",
- "_tgt": "swiftly_auth_get_token",
- "confidence_score": 1.0,
- "source": "swiftly_auth_get_token",
- "target": "swiftly_auth_rationale_161"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L83",
- "weight": 1.0,
- "_src": "test_swiftly_auth_test_get_token_mints_fresh_when_cache_empty",
- "_tgt": "swiftly_auth_get_token",
- "source": "swiftly_auth_get_token",
- "target": "test_swiftly_auth_test_get_token_mints_fresh_when_cache_empty"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L111",
- "weight": 1.0,
- "_src": "test_swiftly_auth_test_get_token_returns_cached_without_reminting",
- "_tgt": "swiftly_auth_get_token",
- "source": "swiftly_auth_get_token",
- "target": "test_swiftly_auth_test_get_token_returns_cached_without_reminting"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L134",
- "weight": 1.0,
- "_src": "test_swiftly_auth_test_get_token_remints_when_cached_token_near_expiry",
- "_tgt": "swiftly_auth_get_token",
- "source": "swiftly_auth_get_token",
- "target": "test_swiftly_auth_test_get_token_remints_when_cached_token_near_expiry"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L150",
- "weight": 1.0,
- "_src": "test_swiftly_auth_test_mint_raises_on_firebase_non_200",
- "_tgt": "swiftly_auth_get_token",
- "source": "swiftly_auth_get_token",
- "target": "test_swiftly_auth_test_mint_raises_on_firebase_non_200"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/email.py",
- "source_location": "L29",
- "weight": 1.0,
- "_src": "backend_app_services_email_py",
- "_tgt": "email_emailbackend",
- "confidence_score": 1.0,
- "source": "backend_app_services_email_py",
- "target": "email_emailbackend"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/email.py",
- "source_location": "L40",
- "weight": 1.0,
- "_src": "backend_app_services_email_py",
- "_tgt": "email_consoleemailbackend",
- "confidence_score": 1.0,
- "source": "backend_app_services_email_py",
- "target": "email_consoleemailbackend"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/email.py",
- "source_location": "L70",
- "weight": 1.0,
- "_src": "backend_app_services_email_py",
- "_tgt": "email_sendgridemailbackend",
- "confidence_score": 1.0,
- "source": "backend_app_services_email_py",
- "target": "email_sendgridemailbackend"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/email.py",
- "source_location": "L98",
- "weight": 1.0,
- "_src": "backend_app_services_email_py",
- "_tgt": "email_get_email_backend",
- "confidence_score": 1.0,
- "source": "backend_app_services_email_py",
- "target": "email_get_email_backend"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/email.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "email_rationale_1",
- "_tgt": "backend_app_services_email_py",
- "confidence_score": 1.0,
- "source": "backend_app_services_email_py",
- "target": "email_rationale_1"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/email.py",
- "source_location": "L29",
- "weight": 1.0,
- "_src": "email_emailbackend",
- "_tgt": "protocol",
- "confidence_score": 1.0,
- "source": "email_emailbackend",
- "target": "protocol"
- },
- {
- "relation": "method",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/email.py",
- "source_location": "L30",
- "weight": 1.0,
- "_src": "email_emailbackend",
- "_tgt": "email_emailbackend_send",
- "confidence_score": 1.0,
- "source": "email_emailbackend",
- "target": "email_emailbackend_send"
- },
- {
- "relation": "method",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/email.py",
- "source_location": "L46",
- "weight": 1.0,
- "_src": "email_consoleemailbackend",
- "_tgt": "email_consoleemailbackend_send",
- "confidence_score": 1.0,
- "source": "email_consoleemailbackend",
- "target": "email_consoleemailbackend_send"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/email.py",
- "source_location": "L102",
- "weight": 1.0,
- "_src": "email_get_email_backend",
- "_tgt": "email_consoleemailbackend",
- "confidence_score": 1.0,
- "source": "email_consoleemailbackend",
- "target": "email_get_email_backend"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/email.py",
- "source_location": "L41",
- "weight": 1.0,
- "_src": "email_rationale_41",
- "_tgt": "email_consoleemailbackend",
- "confidence_score": 1.0,
- "source": "email_consoleemailbackend",
- "target": "email_rationale_41"
- },
- {
- "relation": "method",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/email.py",
- "source_location": "L71",
- "weight": 1.0,
- "_src": "email_sendgridemailbackend",
- "_tgt": "email_sendgridemailbackend_init",
- "confidence_score": 1.0,
- "source": "email_sendgridemailbackend",
- "target": "email_sendgridemailbackend_init"
- },
- {
- "relation": "method",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/email.py",
- "source_location": "L76",
- "weight": 1.0,
- "_src": "email_sendgridemailbackend",
- "_tgt": "email_sendgridemailbackend_send",
- "confidence_score": 1.0,
- "source": "email_sendgridemailbackend",
- "target": "email_sendgridemailbackend_send"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/email.py",
- "source_location": "L101",
- "weight": 1.0,
- "_src": "email_get_email_backend",
- "_tgt": "email_sendgridemailbackend",
- "confidence_score": 1.0,
- "source": "email_sendgridemailbackend",
- "target": "email_get_email_backend"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/tests/test_email_backend.py",
- "source_location": "L37",
- "weight": 0.8,
- "_src": "test_email_backend_rationale_1",
- "_tgt": "email_sendgridemailbackend",
- "confidence_score": 0.5,
- "source": "email_sendgridemailbackend",
- "target": "test_email_backend_rationale_1"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_email_backend.py",
- "source_location": "L20",
- "weight": 1.0,
- "_src": "test_email_backend_test_sendgrid_send_calls_api",
- "_tgt": "email_sendgridemailbackend",
- "source": "email_sendgridemailbackend",
- "target": "test_email_backend_test_sendgrid_send_calls_api"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_email_backend.py",
- "source_location": "L38",
- "weight": 1.0,
- "_src": "test_email_backend_test_sendgrid_raises_on_4xx",
- "_tgt": "email_sendgridemailbackend",
- "source": "email_sendgridemailbackend",
- "target": "test_email_backend_test_sendgrid_raises_on_4xx"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/orchestrator/alerts.py",
- "source_location": "L14",
- "weight": 1.0,
- "_src": "alerts_send_admin_alert",
- "_tgt": "email_sendgridemailbackend_send",
- "source": "email_sendgridemailbackend_send",
- "target": "alerts_send_admin_alert"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/orchestrator/steps.py",
- "source_location": "L286",
- "weight": 1.0,
- "_src": "steps_step_email",
- "_tgt": "email_sendgridemailbackend_send",
- "source": "email_sendgridemailbackend_send",
- "target": "steps_step_email"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/orchestrator/steps.py",
- "source_location": "L447",
- "weight": 1.0,
- "_src": "steps_step_finalize",
- "_tgt": "email_sendgridemailbackend_send",
- "source": "email_sendgridemailbackend_send",
- "target": "steps_step_finalize"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/orchestrator/steps.py",
- "source_location": "L540",
- "weight": 1.0,
- "_src": "steps_step_reminder",
- "_tgt": "email_sendgridemailbackend_send",
- "source": "email_sendgridemailbackend_send",
- "target": "steps_step_reminder"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_email_backend.py",
- "source_location": "L21",
- "weight": 1.0,
- "_src": "test_email_backend_test_sendgrid_send_calls_api",
- "_tgt": "email_sendgridemailbackend_send",
- "source": "email_sendgridemailbackend_send",
- "target": "test_email_backend_test_sendgrid_send_calls_api"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_email_backend.py",
- "source_location": "L40",
- "weight": 1.0,
- "_src": "test_email_backend_test_sendgrid_raises_on_4xx",
- "_tgt": "email_sendgridemailbackend_send",
- "source": "email_sendgridemailbackend_send",
- "target": "test_email_backend_test_sendgrid_raises_on_4xx"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "scripts/send_test_approval.py",
- "source_location": "L146",
- "weight": 1.0,
- "_src": "send_test_approval_main",
- "_tgt": "email_sendgridemailbackend_send",
- "source": "email_sendgridemailbackend_send",
- "target": "send_test_approval_main"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/orchestrator/alerts.py",
- "source_location": "L14",
- "weight": 1.0,
- "_src": "alerts_send_admin_alert",
- "_tgt": "email_get_email_backend",
- "source": "email_get_email_backend",
- "target": "alerts_send_admin_alert"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/orchestrator/steps.py",
- "source_location": "L192",
- "weight": 1.0,
- "_src": "steps_step_email",
- "_tgt": "email_get_email_backend",
- "source": "email_get_email_backend",
- "target": "steps_step_email"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/orchestrator/steps.py",
- "source_location": "L445",
- "weight": 1.0,
- "_src": "steps_step_finalize",
- "_tgt": "email_get_email_backend",
- "source": "email_get_email_backend",
- "target": "steps_step_finalize"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/orchestrator/steps.py",
- "source_location": "L501",
- "weight": 1.0,
- "_src": "steps_step_reminder",
- "_tgt": "email_get_email_backend",
- "source": "email_get_email_backend",
- "target": "steps_step_reminder"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "scripts/send_test_approval.py",
- "source_location": "L138",
- "weight": 1.0,
- "_src": "send_test_approval_main",
- "_tgt": "email_get_email_backend",
- "source": "email_get_email_backend",
- "target": "send_test_approval_main"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/matcher.py",
- "source_location": "L42",
- "weight": 1.0,
- "_src": "backend_app_services_matcher_py",
- "_tgt": "matcher_singularize",
- "confidence_score": 1.0,
- "source": "backend_app_services_matcher_py",
- "target": "matcher_singularize"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/matcher.py",
- "source_location": "L87",
- "weight": 1.0,
- "_src": "backend_app_services_matcher_py",
- "_tgt": "matcher_matchresult",
- "confidence_score": 1.0,
- "source": "backend_app_services_matcher_py",
- "target": "matcher_matchresult"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/matcher.py",
- "source_location": "L93",
- "weight": 1.0,
- "_src": "backend_app_services_matcher_py",
- "_tgt": "matcher_sig_words",
- "confidence_score": 1.0,
- "source": "backend_app_services_matcher_py",
- "target": "matcher_sig_words"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/matcher.py",
- "source_location": "L103",
- "weight": 1.0,
- "_src": "backend_app_services_matcher_py",
- "_tgt": "matcher_run_match_job",
- "confidence_score": 1.0,
- "source": "backend_app_services_matcher_py",
- "target": "matcher_run_match_job"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/matcher.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "matcher_rationale_1",
- "_tgt": "backend_app_services_matcher_py",
- "confidence_score": 1.0,
- "source": "backend_app_services_matcher_py",
- "target": "matcher_rationale_1"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/matcher.py",
- "source_location": "L97",
- "weight": 1.0,
- "_src": "matcher_sig_words",
- "_tgt": "matcher_singularize",
- "confidence_score": 1.0,
- "source": "matcher_singularize",
- "target": "matcher_sig_words"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/matcher.py",
- "source_location": "L43",
- "weight": 1.0,
- "_src": "matcher_rationale_43",
- "_tgt": "matcher_singularize",
- "confidence_score": 1.0,
- "source": "matcher_singularize",
- "target": "matcher_rationale_43"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/matcher.py",
- "source_location": "L135",
- "weight": 1.0,
- "_src": "matcher_run_match_job",
- "_tgt": "matcher_sig_words",
- "confidence_score": 1.0,
- "source": "matcher_sig_words",
- "target": "matcher_run_match_job"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/matcher.py",
- "source_location": "L94",
- "weight": 1.0,
- "_src": "matcher_rationale_94",
- "_tgt": "matcher_sig_words",
- "confidence_score": 1.0,
- "source": "matcher_sig_words",
- "target": "matcher_rationale_94"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/llm_matcher.py",
- "source_location": "L50",
- "weight": 1.0,
- "_src": "llm_matcher_get_candidates",
- "_tgt": "matcher_sig_words",
- "source": "matcher_sig_words",
- "target": "llm_matcher_get_candidates"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/matcher.py",
- "source_location": "L109",
- "weight": 1.0,
- "_src": "matcher_rationale_109",
- "_tgt": "matcher_run_match_job",
- "confidence_score": 1.0,
- "source": "matcher_run_match_job",
- "target": "matcher_rationale_109"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L91",
- "weight": 1.0,
- "_src": "scraper_service_run_scrape_in_background",
- "_tgt": "matcher_run_match_job",
- "source": "matcher_run_match_job",
- "target": "scraper_service_run_scrape_in_background"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_match_hook.py",
- "source_location": "L55",
- "weight": 1.0,
- "_src": "test_match_hook_test_run_match_job_persists_top_matches",
- "_tgt": "matcher_run_match_job",
- "source": "matcher_run_match_job",
- "target": "test_match_hook_test_run_match_job_persists_top_matches"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_thin_phase4_smoke.py",
- "source_location": "L33",
- "weight": 1.0,
- "_src": "test_thin_phase4_smoke_test_match_job_runs_against_seeded_data",
- "_tgt": "matcher_run_match_job",
- "source": "matcher_run_match_job",
- "target": "test_thin_phase4_smoke_test_match_job_runs_against_seeded_data"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_planner_generate.py",
- "source_location": "L64",
- "weight": 1.0,
- "_src": "test_planner_generate_test_generate_meal_plan_against_seeded_data",
- "_tgt": "matcher_run_match_job",
- "source": "matcher_run_match_job",
- "target": "test_planner_generate_test_generate_meal_plan_against_seeded_data"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_meal_plan_generate_api.py",
- "source_location": "L46",
- "weight": 1.0,
- "_src": "test_meal_plan_generate_api_family_with_groceries",
- "_tgt": "matcher_run_match_job",
- "source": "matcher_run_match_job",
- "target": "test_meal_plan_generate_api_family_with_groceries"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L36",
- "weight": 1.0,
- "_src": "backend_app_services_scraper_service_py",
- "_tgt": "scraper_service_enqueue_scrape",
- "confidence_score": 1.0,
- "source": "backend_app_services_scraper_service_py",
- "target": "scraper_service_enqueue_scrape"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L65",
- "weight": 1.0,
- "_src": "backend_app_services_scraper_service_py",
- "_tgt": "scraper_service_run_scrape_in_background",
- "confidence_score": 1.0,
- "source": "backend_app_services_scraper_service_py",
- "target": "scraper_service_run_scrape_in_background"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L123",
- "weight": 1.0,
- "_src": "backend_app_services_scraper_service_py",
- "_tgt": "scraper_service_scraperservice",
- "confidence_score": 1.0,
- "source": "backend_app_services_scraper_service_py",
- "target": "scraper_service_scraperservice"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "scraper_service_rationale_1",
- "_tgt": "backend_app_services_scraper_service_py",
- "confidence_score": 1.0,
- "source": "backend_app_services_scraper_service_py",
- "target": "scraper_service_rationale_1"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L43",
- "weight": 1.0,
- "_src": "scraper_service_rationale_43",
- "_tgt": "scraper_service_enqueue_scrape",
- "confidence_score": 1.0,
- "source": "scraper_service_enqueue_scrape",
- "target": "scraper_service_rationale_43"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L81",
- "weight": 1.0,
- "_src": "scraper_service_run_scrape_in_background",
- "_tgt": "scraper_service_scraperservice",
- "confidence_score": 1.0,
- "source": "scraper_service_run_scrape_in_background",
- "target": "scraper_service_scraperservice"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L82",
- "weight": 1.0,
- "_src": "scraper_service_run_scrape_in_background",
- "_tgt": "scraper_service_scraperservice_do_scrape",
- "confidence_score": 1.0,
- "source": "scraper_service_run_scrape_in_background",
- "target": "scraper_service_scraperservice_do_scrape"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L68",
- "weight": 1.0,
- "_src": "scraper_service_rationale_68",
- "_tgt": "scraper_service_run_scrape_in_background",
- "confidence_score": 1.0,
- "source": "scraper_service_run_scrape_in_background",
- "target": "scraper_service_rationale_68"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L93",
- "weight": 1.0,
- "_src": "scraper_service_run_scrape_in_background",
- "_tgt": "llm_matcher_run_llm_match_job",
- "source": "scraper_service_run_scrape_in_background",
- "target": "llm_matcher_run_llm_match_job"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L209",
- "weight": 1.0,
- "_src": "test_swiftly_api_test_background_runner_writes_failed_with_token_message",
- "_tgt": "scraper_service_run_scrape_in_background",
- "source": "scraper_service_run_scrape_in_background",
- "target": "test_swiftly_api_test_background_runner_writes_failed_with_token_message"
- },
- {
- "relation": "method",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L124",
- "weight": 1.0,
- "_src": "scraper_service_scraperservice",
- "_tgt": "scraper_service_scraperservice_init",
- "confidence_score": 1.0,
- "source": "scraper_service_scraperservice",
- "target": "scraper_service_scraperservice_init"
- },
- {
- "relation": "method",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L127",
- "weight": 1.0,
- "_src": "scraper_service_scraperservice",
- "_tgt": "scraper_service_scraperservice_run_scrape",
- "confidence_score": 1.0,
- "source": "scraper_service_scraperservice",
- "target": "scraper_service_scraperservice_run_scrape"
- },
- {
- "relation": "method",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L180",
- "weight": 1.0,
- "_src": "scraper_service_scraperservice",
- "_tgt": "scraper_service_scraperservice_do_scrape",
- "confidence_score": 1.0,
- "source": "scraper_service_scraperservice",
- "target": "scraper_service_scraperservice_do_scrape"
- },
- {
- "relation": "method",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L200",
- "weight": 1.0,
- "_src": "scraper_service_scraperservice",
- "_tgt": "scraper_service_scraperservice_save_grocery_item",
- "confidence_score": 1.0,
- "source": "scraper_service_scraperservice",
- "target": "scraper_service_scraperservice_save_grocery_item"
- },
- {
- "relation": "method",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L285",
- "weight": 1.0,
- "_src": "scraper_service_scraperservice",
- "_tgt": "scraper_service_scraperservice_get_sale_items",
- "confidence_score": 1.0,
- "source": "scraper_service_scraperservice",
- "target": "scraper_service_scraperservice_get_sale_items"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/app/services/orchestrator/steps.py",
- "source_location": "L25",
- "weight": 0.8,
- "_src": "steps_rationale_1",
- "_tgt": "scraper_service_scraperservice",
- "confidence_score": 0.5,
- "source": "scraper_service_scraperservice",
- "target": "steps_rationale_1"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/orchestrator/steps.py",
- "source_location": "L39",
- "weight": 1.0,
- "_src": "steps_step_scrape",
- "_tgt": "scraper_service_scraperservice",
- "source": "scraper_service_scraperservice",
- "target": "steps_step_scrape"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L147",
- "weight": 1.0,
- "_src": "scraper_service_scraperservice_run_scrape",
- "_tgt": "scraper_service_scraperservice_do_scrape",
- "confidence_score": 1.0,
- "source": "scraper_service_scraperservice_run_scrape",
- "target": "scraper_service_scraperservice_do_scrape"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L130",
- "weight": 1.0,
- "_src": "scraper_service_rationale_130",
- "_tgt": "scraper_service_scraperservice_run_scrape",
- "confidence_score": 1.0,
- "source": "scraper_service_scraperservice_run_scrape",
- "target": "scraper_service_rationale_130"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/orchestrator/steps.py",
- "source_location": "L42",
- "weight": 1.0,
- "_src": "steps_step_scrape",
- "_tgt": "scraper_service_scraperservice_run_scrape",
- "source": "scraper_service_scraperservice_run_scrape",
- "target": "steps_step_scrape"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L194",
- "weight": 1.0,
- "_src": "scraper_service_scraperservice_do_scrape",
- "_tgt": "scraper_service_scraperservice_save_grocery_item",
- "confidence_score": 1.0,
- "source": "scraper_service_scraperservice_do_scrape",
- "target": "scraper_service_scraperservice_save_grocery_item"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L181",
- "weight": 1.0,
- "_src": "scraper_service_rationale_181",
- "_tgt": "scraper_service_scraperservice_do_scrape",
- "confidence_score": 1.0,
- "source": "scraper_service_scraperservice_do_scrape",
- "target": "scraper_service_rationale_181"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L188",
- "weight": 1.0,
- "_src": "scraper_service_scraperservice_do_scrape",
- "_tgt": "lucky_ca_scraper_luckycaliforniascraper",
- "source": "scraper_service_scraperservice_do_scrape",
- "target": "lucky_ca_scraper_luckycaliforniascraper"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L192",
- "weight": 1.0,
- "_src": "scraper_service_scraperservice_do_scrape",
- "_tgt": "lucky_ca_scraper_luckycaliforniascraper_fetch_all",
- "source": "scraper_service_scraperservice_do_scrape",
- "target": "lucky_ca_scraper_luckycaliforniascraper_fetch_all"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/scraper_service.py",
- "source_location": "L197",
- "weight": 1.0,
- "_src": "scraper_service_scraperservice_do_scrape",
- "_tgt": "lucky_ca_scraper_luckycaliforniascraper_cleanup",
- "source": "scraper_service_scraperservice_do_scrape",
- "target": "lucky_ca_scraper_luckycaliforniascraper_cleanup"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/llm_matcher.py",
- "source_location": "L38",
- "weight": 1.0,
- "_src": "backend_app_services_llm_matcher_py",
- "_tgt": "llm_matcher_get_candidates",
- "confidence_score": 1.0,
- "source": "backend_app_services_llm_matcher_py",
- "target": "llm_matcher_get_candidates"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/llm_matcher.py",
- "source_location": "L86",
- "weight": 1.0,
- "_src": "backend_app_services_llm_matcher_py",
- "_tgt": "llm_matcher_get_unmatched_ingredients",
- "confidence_score": 1.0,
- "source": "backend_app_services_llm_matcher_py",
- "target": "llm_matcher_get_unmatched_ingredients"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/llm_matcher.py",
- "source_location": "L97",
- "weight": 1.0,
- "_src": "backend_app_services_llm_matcher_py",
- "_tgt": "llm_matcher_ask_ollama",
- "confidence_score": 1.0,
- "source": "backend_app_services_llm_matcher_py",
- "target": "llm_matcher_ask_ollama"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/llm_matcher.py",
- "source_location": "L147",
- "weight": 1.0,
- "_src": "backend_app_services_llm_matcher_py",
- "_tgt": "llm_matcher_run_llm_match_job",
- "confidence_score": 1.0,
- "source": "backend_app_services_llm_matcher_py",
- "target": "llm_matcher_run_llm_match_job"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/llm_matcher.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "llm_matcher_rationale_1",
- "_tgt": "backend_app_services_llm_matcher_py",
- "confidence_score": 1.0,
- "source": "backend_app_services_llm_matcher_py",
- "target": "llm_matcher_rationale_1"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/llm_matcher.py",
- "source_location": "L180",
- "weight": 1.0,
- "_src": "llm_matcher_run_llm_match_job",
- "_tgt": "llm_matcher_get_candidates",
- "confidence_score": 1.0,
- "source": "llm_matcher_get_candidates",
- "target": "llm_matcher_run_llm_match_job"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/llm_matcher.py",
- "source_location": "L42",
- "weight": 1.0,
- "_src": "llm_matcher_rationale_42",
- "_tgt": "llm_matcher_get_candidates",
- "confidence_score": 1.0,
- "source": "llm_matcher_get_candidates",
- "target": "llm_matcher_rationale_42"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/llm_matcher.py",
- "source_location": "L168",
- "weight": 1.0,
- "_src": "llm_matcher_run_llm_match_job",
- "_tgt": "llm_matcher_get_unmatched_ingredients",
- "confidence_score": 1.0,
- "source": "llm_matcher_get_unmatched_ingredients",
- "target": "llm_matcher_run_llm_match_job"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/llm_matcher.py",
- "source_location": "L87",
- "weight": 1.0,
- "_src": "llm_matcher_rationale_87",
- "_tgt": "llm_matcher_get_unmatched_ingredients",
- "confidence_score": 1.0,
- "source": "llm_matcher_get_unmatched_ingredients",
- "target": "llm_matcher_rationale_87"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/llm_matcher.py",
- "source_location": "L188",
- "weight": 1.0,
- "_src": "llm_matcher_run_llm_match_job",
- "_tgt": "llm_matcher_ask_ollama",
- "confidence_score": 1.0,
- "source": "llm_matcher_ask_ollama",
- "target": "llm_matcher_run_llm_match_job"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/llm_matcher.py",
- "source_location": "L98",
- "weight": 1.0,
- "_src": "llm_matcher_rationale_98",
- "_tgt": "llm_matcher_ask_ollama",
- "confidence_score": 1.0,
- "source": "llm_matcher_ask_ollama",
- "target": "llm_matcher_rationale_98"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/llm_matcher.py",
- "source_location": "L152",
- "weight": 1.0,
- "_src": "llm_matcher_rationale_152",
- "_tgt": "llm_matcher_run_llm_match_job",
- "confidence_score": 1.0,
- "source": "llm_matcher_run_llm_match_job",
- "target": "llm_matcher_rationale_152"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/config.py",
- "source_location": "L8",
- "weight": 1.0,
- "_src": "backend_app_services_planner_config_py",
- "_tgt": "config_plannerconfig",
- "confidence_score": 1.0,
- "source": "backend_app_services_planner_config_py",
- "target": "config_plannerconfig"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/config.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "config_rationale_1",
- "_tgt": "backend_app_services_planner_config_py",
- "confidence_score": 1.0,
- "source": "backend_app_services_planner_config_py",
- "target": "config_rationale_1"
- },
- {
- "relation": "method",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/config.py",
- "source_location": "L35",
- "weight": 1.0,
- "_src": "config_plannerconfig",
- "_tgt": "config_plannerconfig_validate",
- "confidence_score": 1.0,
- "source": "config_plannerconfig",
- "target": "config_plannerconfig_validate"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/app/services/planner/filter.py",
- "source_location": "L8",
- "weight": 0.8,
- "_src": "filter_rationale_1",
- "_tgt": "config_plannerconfig",
- "confidence_score": 0.5,
- "source": "config_plannerconfig",
- "target": "filter_rationale_1"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/app/services/planner/score.py",
- "source_location": "L9",
- "weight": 0.8,
- "_src": "score_rationale_1",
- "_tgt": "config_plannerconfig",
- "confidence_score": 0.5,
- "source": "config_plannerconfig",
- "target": "score_rationale_1"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/app/services/planner/score.py",
- "source_location": "L9",
- "weight": 0.8,
- "_src": "score_rationale_60",
- "_tgt": "config_plannerconfig",
- "confidence_score": 0.5,
- "source": "config_plannerconfig",
- "target": "score_rationale_60"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/app/services/planner/select.py",
- "source_location": "L12",
- "weight": 0.8,
- "_src": "select_rationale_1",
- "_tgt": "config_plannerconfig",
- "confidence_score": 0.5,
- "source": "config_plannerconfig",
- "target": "select_rationale_1"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/app/services/planner/generate.py",
- "source_location": "L24",
- "weight": 0.8,
- "_src": "generate_rationale_1",
- "_tgt": "config_plannerconfig",
- "confidence_score": 0.5,
- "source": "config_plannerconfig",
- "target": "generate_rationale_1"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/app/services/planner/generate.py",
- "source_location": "L24",
- "weight": 0.8,
- "_src": "generate_rationale_33",
- "_tgt": "config_plannerconfig",
- "confidence_score": 0.5,
- "source": "config_plannerconfig",
- "target": "generate_rationale_33"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/tests/test_planner_select.py",
- "source_location": "L4",
- "weight": 0.8,
- "_src": "test_planner_select_rationale_50",
- "_tgt": "config_plannerconfig",
- "confidence_score": 0.5,
- "source": "config_plannerconfig",
- "target": "test_planner_select_rationale_50"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/types.py",
- "source_location": "L11",
- "weight": 1.0,
- "_src": "backend_app_services_planner_types_py",
- "_tgt": "types_ingredientcost",
- "confidence_score": 1.0,
- "source": "backend_app_services_planner_types_py",
- "target": "types_ingredientcost"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/types.py",
- "source_location": "L26",
- "weight": 1.0,
- "_src": "backend_app_services_planner_types_py",
- "_tgt": "types_recipecost",
- "confidence_score": 1.0,
- "source": "backend_app_services_planner_types_py",
- "target": "types_recipecost"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/types.py",
- "source_location": "L37",
- "weight": 1.0,
- "_src": "backend_app_services_planner_types_py",
- "_tgt": "types_sale_coverage_pct",
- "confidence_score": 1.0,
- "source": "backend_app_services_planner_types_py",
- "target": "types_sale_coverage_pct"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/types.py",
- "source_location": "L43",
- "weight": 1.0,
- "_src": "backend_app_services_planner_types_py",
- "_tgt": "types_pantry_hit_pct",
- "confidence_score": 1.0,
- "source": "backend_app_services_planner_types_py",
- "target": "types_pantry_hit_pct"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/types.py",
- "source_location": "L50",
- "weight": 1.0,
- "_src": "backend_app_services_planner_types_py",
- "_tgt": "types_filterresult",
- "confidence_score": 1.0,
- "source": "backend_app_services_planner_types_py",
- "target": "types_filterresult"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/types.py",
- "source_location": "L56",
- "weight": 1.0,
- "_src": "backend_app_services_planner_types_py",
- "_tgt": "types_scoredrecipe",
- "confidence_score": 1.0,
- "source": "backend_app_services_planner_types_py",
- "target": "types_scoredrecipe"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/types.py",
- "source_location": "L66",
- "weight": 1.0,
- "_src": "backend_app_services_planner_types_py",
- "_tgt": "types_generationresult",
- "confidence_score": 1.0,
- "source": "backend_app_services_planner_types_py",
- "target": "types_generationresult"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/types.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "types_rationale_1",
- "_tgt": "backend_app_services_planner_types_py",
- "confidence_score": 1.0,
- "source": "backend_app_services_planner_types_py",
- "target": "types_rationale_1"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/app/services/planner/cost.py",
- "source_location": "L27",
- "weight": 0.8,
- "_src": "cost_rationale_1",
- "_tgt": "types_ingredientcost",
- "confidence_score": 0.5,
- "source": "types_ingredientcost",
- "target": "cost_rationale_1"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/planner/cost.py",
- "source_location": "L69",
- "weight": 1.0,
- "_src": "cost_compute_recipe_cost",
- "_tgt": "types_ingredientcost",
- "source": "types_ingredientcost",
- "target": "cost_compute_recipe_cost"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/app/services/planner/cost.py",
- "source_location": "L27",
- "weight": 0.8,
- "_src": "cost_rationale_1",
- "_tgt": "types_recipecost",
- "confidence_score": 0.5,
- "source": "types_recipecost",
- "target": "cost_rationale_1"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/app/services/planner/filter.py",
- "source_location": "L9",
- "weight": 0.8,
- "_src": "filter_rationale_1",
- "_tgt": "types_recipecost",
- "confidence_score": 0.5,
- "source": "types_recipecost",
- "target": "filter_rationale_1"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/app/services/planner/score.py",
- "source_location": "L10",
- "weight": 0.8,
- "_src": "score_rationale_1",
- "_tgt": "types_recipecost",
- "confidence_score": 0.5,
- "source": "types_recipecost",
- "target": "score_rationale_1"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/app/services/planner/score.py",
- "source_location": "L10",
- "weight": 0.8,
- "_src": "score_rationale_60",
- "_tgt": "types_recipecost",
- "confidence_score": 0.5,
- "source": "types_recipecost",
- "target": "score_rationale_60"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/tests/test_planner_select.py",
- "source_location": "L6",
- "weight": 0.8,
- "_src": "test_planner_select_rationale_50",
- "_tgt": "types_recipecost",
- "confidence_score": 0.5,
- "source": "types_recipecost",
- "target": "test_planner_select_rationale_50"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/planner/cost.py",
- "source_location": "L114",
- "weight": 1.0,
- "_src": "cost_compute_recipe_cost",
- "_tgt": "types_recipecost",
- "source": "types_recipecost",
- "target": "cost_compute_recipe_cost"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L36",
- "weight": 1.0,
- "_src": "test_planner_filter_cost",
- "_tgt": "types_recipecost",
- "source": "types_recipecost",
- "target": "test_planner_filter_cost"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_planner_score.py",
- "source_location": "L79",
- "weight": 1.0,
- "_src": "test_planner_score_test_score_recipes_orders_by_combined_score",
- "_tgt": "types_recipecost",
- "source": "types_recipecost",
- "target": "test_planner_score_test_score_recipes_orders_by_combined_score"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_planner_select.py",
- "source_location": "L18",
- "weight": 1.0,
- "_src": "test_planner_select_mk",
- "_tgt": "types_recipecost",
- "source": "types_recipecost",
- "target": "test_planner_select_mk"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/app/services/planner/filter.py",
- "source_location": "L9",
- "weight": 0.8,
- "_src": "filter_rationale_1",
- "_tgt": "types_filterresult",
- "confidence_score": 0.5,
- "source": "types_filterresult",
- "target": "filter_rationale_1"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/planner/filter.py",
- "source_location": "L88",
- "weight": 1.0,
- "_src": "filter_filter_recipes",
- "_tgt": "types_filterresult",
- "source": "types_filterresult",
- "target": "filter_filter_recipes"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/app/services/planner/score.py",
- "source_location": "L10",
- "weight": 0.8,
- "_src": "score_rationale_1",
- "_tgt": "types_scoredrecipe",
- "confidence_score": 0.5,
- "source": "types_scoredrecipe",
- "target": "score_rationale_1"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/app/services/planner/score.py",
- "source_location": "L10",
- "weight": 0.8,
- "_src": "score_rationale_60",
- "_tgt": "types_scoredrecipe",
- "confidence_score": 0.5,
- "source": "types_scoredrecipe",
- "target": "score_rationale_60"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/app/services/planner/select.py",
- "source_location": "L13",
- "weight": 0.8,
- "_src": "select_rationale_1",
- "_tgt": "types_scoredrecipe",
- "confidence_score": 0.5,
- "source": "types_scoredrecipe",
- "target": "select_rationale_1"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/tests/test_planner_select.py",
- "source_location": "L6",
- "weight": 0.8,
- "_src": "test_planner_select_rationale_50",
- "_tgt": "types_scoredrecipe",
- "confidence_score": 0.5,
- "source": "types_scoredrecipe",
- "target": "test_planner_select_rationale_50"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/planner/score.py",
- "source_location": "L99",
- "weight": 1.0,
- "_src": "score_score_recipes",
- "_tgt": "types_scoredrecipe",
- "source": "types_scoredrecipe",
- "target": "score_score_recipes"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_planner_select.py",
- "source_location": "L14",
- "weight": 1.0,
- "_src": "test_planner_select_mk",
- "_tgt": "types_scoredrecipe",
- "source": "types_scoredrecipe",
- "target": "test_planner_select_mk"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/app/services/planner/generate.py",
- "source_location": "L29",
- "weight": 0.8,
- "_src": "generate_rationale_1",
- "_tgt": "types_generationresult",
- "confidence_score": 0.5,
- "source": "types_generationresult",
- "target": "generate_rationale_1"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/app/services/planner/generate.py",
- "source_location": "L29",
- "weight": 0.8,
- "_src": "generate_rationale_33",
- "_tgt": "types_generationresult",
- "confidence_score": 0.5,
- "source": "types_generationresult",
- "target": "generate_rationale_33"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L240",
- "weight": 0.8,
- "_src": "test_orchestrator_rationale_1",
- "_tgt": "types_generationresult",
- "confidence_score": 0.5,
- "source": "types_generationresult",
- "target": "test_orchestrator_rationale_1"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/planner/generate.py",
- "source_location": "L200",
- "weight": 1.0,
- "_src": "generate_generate_meal_plan",
- "_tgt": "types_generationresult",
- "source": "types_generationresult",
- "target": "generate_generate_meal_plan"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L244",
- "weight": 1.0,
- "_src": "test_orchestrator_test_step_generate_creates_plan",
- "_tgt": "types_generationresult",
- "source": "types_generationresult",
- "target": "test_orchestrator_test_step_generate_creates_plan"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/cost.py",
- "source_location": "L30",
- "weight": 1.0,
- "_src": "backend_app_services_planner_cost_py",
- "_tgt": "cost_decimal",
- "confidence_score": 1.0,
- "source": "backend_app_services_planner_cost_py",
- "target": "cost_decimal"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/cost.py",
- "source_location": "L36",
- "weight": 1.0,
- "_src": "backend_app_services_planner_cost_py",
- "_tgt": "cost_scale",
- "confidence_score": 1.0,
- "source": "backend_app_services_planner_cost_py",
- "target": "cost_scale"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/cost.py",
- "source_location": "L40",
- "weight": 1.0,
- "_src": "backend_app_services_planner_cost_py",
- "_tgt": "cost_compute_recipe_cost",
- "confidence_score": 1.0,
- "source": "backend_app_services_planner_cost_py",
- "target": "cost_compute_recipe_cost"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/cost.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "cost_rationale_1",
- "_tgt": "backend_app_services_planner_cost_py",
- "confidence_score": 1.0,
- "source": "backend_app_services_planner_cost_py",
- "target": "cost_rationale_1"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/cost.py",
- "source_location": "L86",
- "weight": 1.0,
- "_src": "cost_compute_recipe_cost",
- "_tgt": "cost_decimal",
- "confidence_score": 1.0,
- "source": "cost_decimal",
- "target": "cost_compute_recipe_cost"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/cost.py",
- "source_location": "L89",
- "weight": 1.0,
- "_src": "cost_compute_recipe_cost",
- "_tgt": "cost_scale",
- "confidence_score": 1.0,
- "source": "cost_scale",
- "target": "cost_compute_recipe_cost"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/planner/generate.py",
- "source_location": "L137",
- "weight": 1.0,
- "_src": "generate_generate_meal_plan",
- "_tgt": "cost_compute_recipe_cost",
- "source": "cost_compute_recipe_cost",
- "target": "generate_generate_meal_plan"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_planner_cost.py",
- "source_location": "L35",
- "weight": 1.0,
- "_src": "test_planner_cost_test_compute_recipe_cost_sums_ingredient_costs",
- "_tgt": "cost_compute_recipe_cost",
- "source": "cost_compute_recipe_cost",
- "target": "test_planner_cost_test_compute_recipe_cost_sums_ingredient_costs"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_planner_cost.py",
- "source_location": "L54",
- "weight": 1.0,
- "_src": "test_planner_cost_test_unmatched_ingredient_zero_cost_and_savings",
- "_tgt": "cost_compute_recipe_cost",
- "source": "cost_compute_recipe_cost",
- "target": "test_planner_cost_test_unmatched_ingredient_zero_cost_and_savings"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_planner_cost.py",
- "source_location": "L73",
- "weight": 1.0,
- "_src": "test_planner_cost_test_pantry_hits_counted",
- "_tgt": "cost_compute_recipe_cost",
- "source": "cost_compute_recipe_cost",
- "target": "test_planner_cost_test_pantry_hits_counted"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/filter.py",
- "source_location": "L12",
- "weight": 1.0,
- "_src": "backend_app_services_planner_filter_py",
- "_tgt": "filter_calorie_band",
- "confidence_score": 1.0,
- "source": "backend_app_services_planner_filter_py",
- "target": "filter_calorie_band"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/filter.py",
- "source_location": "L17",
- "weight": 1.0,
- "_src": "backend_app_services_planner_filter_py",
- "_tgt": "filter_filter_recipes",
- "confidence_score": 1.0,
- "source": "backend_app_services_planner_filter_py",
- "target": "filter_filter_recipes"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/filter.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "filter_rationale_1",
- "_tgt": "backend_app_services_planner_filter_py",
- "confidence_score": 1.0,
- "source": "backend_app_services_planner_filter_py",
- "target": "filter_rationale_1"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/filter.py",
- "source_location": "L34",
- "weight": 1.0,
- "_src": "filter_filter_recipes",
- "_tgt": "filter_calorie_band",
- "confidence_score": 1.0,
- "source": "filter_calorie_band",
- "target": "filter_filter_recipes"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/planner/generate.py",
- "source_location": "L146",
- "weight": 1.0,
- "_src": "generate_generate_meal_plan",
- "_tgt": "filter_filter_recipes",
- "source": "filter_filter_recipes",
- "target": "generate_generate_meal_plan"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L54",
- "weight": 1.0,
- "_src": "test_planner_filter_test_filter_blocks_by_never_suggest_ingredient",
- "_tgt": "filter_filter_recipes",
- "source": "filter_filter_recipes",
- "target": "test_planner_filter_test_filter_blocks_by_never_suggest_ingredient"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L72",
- "weight": 1.0,
- "_src": "test_planner_filter_test_filter_blocks_by_never_suggest_recipe",
- "_tgt": "filter_filter_recipes",
- "source": "filter_filter_recipes",
- "target": "test_planner_filter_test_filter_blocks_by_never_suggest_recipe"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L90",
- "weight": 1.0,
- "_src": "test_planner_filter_test_filter_blocks_by_recency",
- "_tgt": "filter_filter_recipes",
- "source": "filter_filter_recipes",
- "target": "test_planner_filter_test_filter_blocks_by_recency"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L107",
- "weight": 1.0,
- "_src": "test_planner_filter_test_filter_blocks_by_calories",
- "_tgt": "filter_filter_recipes",
- "source": "filter_filter_recipes",
- "target": "test_planner_filter_test_filter_blocks_by_calories"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L125",
- "weight": 1.0,
- "_src": "test_planner_filter_test_filter_blocks_by_time",
- "_tgt": "filter_filter_recipes",
- "source": "filter_filter_recipes",
- "target": "test_planner_filter_test_filter_blocks_by_time"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L143",
- "weight": 1.0,
- "_src": "test_planner_filter_test_filter_blocks_by_cost",
- "_tgt": "filter_filter_recipes",
- "source": "filter_filter_recipes",
- "target": "test_planner_filter_test_filter_blocks_by_cost"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L160",
- "weight": 1.0,
- "_src": "test_planner_filter_test_filter_passes_when_calorie_target_is_none",
- "_tgt": "filter_filter_recipes",
- "source": "filter_filter_recipes",
- "target": "test_planner_filter_test_filter_passes_when_calorie_target_is_none"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L176",
- "weight": 1.0,
- "_src": "test_planner_filter_test_filter_blocks_recipe_with_null_calories_when_target_set",
- "_tgt": "filter_filter_recipes",
- "source": "filter_filter_recipes",
- "target": "test_planner_filter_test_filter_blocks_recipe_with_null_calories_when_target_set"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/score.py",
- "source_location": "L13",
- "weight": 1.0,
- "_src": "backend_app_services_planner_score_py",
- "_tgt": "score_time_bonus",
- "confidence_score": 1.0,
- "source": "backend_app_services_planner_score_py",
- "target": "score_time_bonus"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/score.py",
- "source_location": "L23",
- "weight": 1.0,
- "_src": "backend_app_services_planner_score_py",
- "_tgt": "score_recency_bonus",
- "confidence_score": 1.0,
- "source": "backend_app_services_planner_score_py",
- "target": "score_recency_bonus"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/score.py",
- "source_location": "L42",
- "weight": 1.0,
- "_src": "backend_app_services_planner_score_py",
- "_tgt": "score_normalize_savings",
- "confidence_score": 1.0,
- "source": "backend_app_services_planner_score_py",
- "target": "score_normalize_savings"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/score.py",
- "source_location": "L52",
- "weight": 1.0,
- "_src": "backend_app_services_planner_score_py",
- "_tgt": "score_score_recipes",
- "confidence_score": 1.0,
- "source": "backend_app_services_planner_score_py",
- "target": "score_score_recipes"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/score.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "score_rationale_1",
- "_tgt": "backend_app_services_planner_score_py",
- "confidence_score": 1.0,
- "source": "backend_app_services_planner_score_py",
- "target": "score_rationale_1"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/score.py",
- "source_location": "L75",
- "weight": 1.0,
- "_src": "score_score_recipes",
- "_tgt": "score_time_bonus",
- "confidence_score": 1.0,
- "source": "score_time_bonus",
- "target": "score_score_recipes"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_planner_score.py",
- "source_location": "L19",
- "weight": 1.0,
- "_src": "test_planner_score_test_time_bonus_capped_at_ideal",
- "_tgt": "score_time_bonus",
- "source": "score_time_bonus",
- "target": "test_planner_score_test_time_bonus_capped_at_ideal"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_planner_score.py",
- "source_location": "L24",
- "weight": 1.0,
- "_src": "test_planner_score_test_time_bonus_decays_to_zero_at_full",
- "_tgt": "score_time_bonus",
- "source": "score_time_bonus",
- "target": "test_planner_score_test_time_bonus_decays_to_zero_at_full"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_planner_score.py",
- "source_location": "L29",
- "weight": 1.0,
- "_src": "test_planner_score_test_time_bonus_linear_midpoint",
- "_tgt": "score_time_bonus",
- "source": "score_time_bonus",
- "target": "test_planner_score_test_time_bonus_linear_midpoint"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/score.py",
- "source_location": "L76",
- "weight": 1.0,
- "_src": "score_score_recipes",
- "_tgt": "score_recency_bonus",
- "confidence_score": 1.0,
- "source": "score_recency_bonus",
- "target": "score_score_recipes"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_planner_score.py",
- "source_location": "L35",
- "weight": 1.0,
- "_src": "test_planner_score_test_recency_bonus_full_when_long_ago",
- "_tgt": "score_recency_bonus",
- "source": "score_recency_bonus",
- "target": "test_planner_score_test_recency_bonus_full_when_long_ago"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_planner_score.py",
- "source_location": "L42",
- "weight": 1.0,
- "_src": "test_planner_score_test_recency_bonus_zero_when_just_eligible",
- "_tgt": "score_recency_bonus",
- "source": "score_recency_bonus",
- "target": "test_planner_score_test_recency_bonus_zero_when_just_eligible"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_planner_score.py",
- "source_location": "L46",
- "weight": 1.0,
- "_src": "test_planner_score_test_recency_bonus_full_when_never_cooked",
- "_tgt": "score_recency_bonus",
- "source": "score_recency_bonus",
- "target": "test_planner_score_test_recency_bonus_full_when_never_cooked"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/score.py",
- "source_location": "L66",
- "weight": 1.0,
- "_src": "score_score_recipes",
- "_tgt": "score_normalize_savings",
- "confidence_score": 1.0,
- "source": "score_normalize_savings",
- "target": "score_score_recipes"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_planner_score.py",
- "source_location": "L50",
- "weight": 1.0,
- "_src": "test_planner_score_test_normalize_savings_minmax",
- "_tgt": "score_normalize_savings",
- "source": "score_normalize_savings",
- "target": "test_planner_score_test_normalize_savings_minmax"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_planner_score.py",
- "source_location": "L55",
- "weight": 1.0,
- "_src": "test_planner_score_test_normalize_savings_uniform_returns_zeros",
- "_tgt": "score_normalize_savings",
- "source": "score_normalize_savings",
- "target": "test_planner_score_test_normalize_savings_uniform_returns_zeros"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/score.py",
- "source_location": "L60",
- "weight": 1.0,
- "_src": "score_rationale_60",
- "_tgt": "score_score_recipes",
- "confidence_score": 1.0,
- "source": "score_score_recipes",
- "target": "score_rationale_60"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/planner/generate.py",
- "source_location": "L159",
- "weight": 1.0,
- "_src": "generate_generate_meal_plan",
- "_tgt": "score_score_recipes",
- "source": "score_score_recipes",
- "target": "generate_generate_meal_plan"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_planner_score.py",
- "source_location": "L100",
- "weight": 1.0,
- "_src": "test_planner_score_test_score_recipes_orders_by_combined_score",
- "_tgt": "score_score_recipes",
- "source": "score_score_recipes",
- "target": "test_planner_score_test_score_recipes_orders_by_combined_score"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/select.py",
- "source_location": "L16",
- "weight": 1.0,
- "_src": "backend_app_services_planner_select_py",
- "_tgt": "select_set_diversity_penalty",
- "confidence_score": 1.0,
- "source": "backend_app_services_planner_select_py",
- "target": "select_set_diversity_penalty"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/select.py",
- "source_location": "L29",
- "weight": 1.0,
- "_src": "backend_app_services_planner_select_py",
- "_tgt": "select_set_score",
- "confidence_score": 1.0,
- "source": "backend_app_services_planner_select_py",
- "target": "select_set_score"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/select.py",
- "source_location": "L33",
- "weight": 1.0,
- "_src": "backend_app_services_planner_select_py",
- "_tgt": "select_select_set",
- "confidence_score": 1.0,
- "source": "backend_app_services_planner_select_py",
- "target": "select_select_set"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/select.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "select_rationale_1",
- "_tgt": "backend_app_services_planner_select_py",
- "confidence_score": 1.0,
- "source": "backend_app_services_planner_select_py",
- "target": "select_rationale_1"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/select.py",
- "source_location": "L30",
- "weight": 1.0,
- "_src": "select_set_score",
- "_tgt": "select_set_diversity_penalty",
- "confidence_score": 1.0,
- "source": "select_set_diversity_penalty",
- "target": "select_set_score"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_planner_select.py",
- "source_location": "L37",
- "weight": 1.0,
- "_src": "test_planner_select_test_diversity_penalty_zero_when_all_unique",
- "_tgt": "select_set_diversity_penalty",
- "source": "select_set_diversity_penalty",
- "target": "test_planner_select_test_diversity_penalty_zero_when_all_unique"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_planner_select.py",
- "source_location": "L45",
- "weight": 1.0,
- "_src": "test_planner_select_test_diversity_penalty_three_chickens",
- "_tgt": "select_set_diversity_penalty",
- "source": "select_set_diversity_penalty",
- "target": "test_planner_select_test_diversity_penalty_three_chickens"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/select.py",
- "source_location": "L41",
- "weight": 1.0,
- "_src": "select_select_set",
- "_tgt": "select_set_score",
- "confidence_score": 1.0,
- "source": "select_set_score",
- "target": "select_select_set"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/planner/generate.py",
- "source_location": "L166",
- "weight": 1.0,
- "_src": "generate_generate_meal_plan",
- "_tgt": "select_select_set",
- "source": "select_select_set",
- "target": "generate_generate_meal_plan"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_planner_select.py",
- "source_location": "L63",
- "weight": 1.0,
- "_src": "test_planner_select_test_select_set_picks_diverse_over_homogeneous",
- "_tgt": "select_select_set",
- "source": "select_select_set",
- "target": "test_planner_select_test_select_set_picks_diverse_over_homogeneous"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_planner_select.py",
- "source_location": "L71",
- "weight": 1.0,
- "_src": "test_planner_select_test_select_set_handles_too_few",
- "_tgt": "select_select_set",
- "source": "select_select_set",
- "target": "test_planner_select_test_select_set_handles_too_few"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_planner_select.py",
- "source_location": "L76",
- "weight": 1.0,
- "_src": "test_planner_select_test_select_set_empty_input",
- "_tgt": "select_select_set",
- "source": "select_select_set",
- "target": "test_planner_select_test_select_set_empty_input"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/generate.py",
- "source_location": "L32",
- "weight": 1.0,
- "_src": "backend_app_services_planner_generate_py",
- "_tgt": "generate_load_match_index",
- "confidence_score": 1.0,
- "source": "backend_app_services_planner_generate_py",
- "target": "generate_load_match_index"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/generate.py",
- "source_location": "L55",
- "weight": 1.0,
- "_src": "backend_app_services_planner_generate_py",
- "_tgt": "generate_load_blocklists",
- "confidence_score": 1.0,
- "source": "backend_app_services_planner_generate_py",
- "target": "generate_load_blocklists"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/generate.py",
- "source_location": "L68",
- "weight": 1.0,
- "_src": "backend_app_services_planner_generate_py",
- "_tgt": "generate_load_pantry",
- "confidence_score": 1.0,
- "source": "backend_app_services_planner_generate_py",
- "target": "generate_load_pantry"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/generate.py",
- "source_location": "L76",
- "weight": 1.0,
- "_src": "backend_app_services_planner_generate_py",
- "_tgt": "generate_load_last_cooked",
- "confidence_score": 1.0,
- "source": "backend_app_services_planner_generate_py",
- "target": "generate_load_last_cooked"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/generate.py",
- "source_location": "L92",
- "weight": 1.0,
- "_src": "backend_app_services_planner_generate_py",
- "_tgt": "generate_generate_meal_plan",
- "confidence_score": 1.0,
- "source": "backend_app_services_planner_generate_py",
- "target": "generate_generate_meal_plan"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/generate.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "generate_rationale_1",
- "_tgt": "backend_app_services_planner_generate_py",
- "confidence_score": 1.0,
- "source": "backend_app_services_planner_generate_py",
- "target": "generate_rationale_1"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/generate.py",
- "source_location": "L131",
- "weight": 1.0,
- "_src": "generate_generate_meal_plan",
- "_tgt": "generate_load_match_index",
- "confidence_score": 1.0,
- "source": "generate_load_match_index",
- "target": "generate_generate_meal_plan"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/generate.py",
- "source_location": "L33",
- "weight": 1.0,
- "_src": "generate_rationale_33",
- "_tgt": "generate_load_match_index",
- "confidence_score": 1.0,
- "source": "generate_load_match_index",
- "target": "generate_rationale_33"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/generate.py",
- "source_location": "L133",
- "weight": 1.0,
- "_src": "generate_generate_meal_plan",
- "_tgt": "generate_load_blocklists",
- "confidence_score": 1.0,
- "source": "generate_load_blocklists",
- "target": "generate_generate_meal_plan"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/generate.py",
- "source_location": "L132",
- "weight": 1.0,
- "_src": "generate_generate_meal_plan",
- "_tgt": "generate_load_pantry",
- "confidence_score": 1.0,
- "source": "generate_load_pantry",
- "target": "generate_generate_meal_plan"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/planner/generate.py",
- "source_location": "L134",
- "weight": 1.0,
- "_src": "generate_generate_meal_plan",
- "_tgt": "generate_load_last_cooked",
- "confidence_score": 1.0,
- "source": "generate_load_last_cooked",
- "target": "generate_generate_meal_plan"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/orchestrator/steps.py",
- "source_location": "L73",
- "weight": 1.0,
- "_src": "steps_step_generate",
- "_tgt": "generate_generate_meal_plan",
- "source": "generate_generate_meal_plan",
- "target": "steps_step_generate"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_planner_generate.py",
- "source_location": "L65",
- "weight": 1.0,
- "_src": "test_planner_generate_test_generate_meal_plan_against_seeded_data",
- "_tgt": "generate_generate_meal_plan",
- "source": "generate_generate_meal_plan",
- "target": "test_planner_generate_test_generate_meal_plan_against_seeded_data"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/orchestrator/alerts.py",
- "source_location": "L9",
- "weight": 1.0,
- "_src": "backend_app_services_orchestrator_alerts_py",
- "_tgt": "alerts_send_admin_alert",
- "confidence_score": 1.0,
- "source": "backend_app_services_orchestrator_alerts_py",
- "target": "alerts_send_admin_alert"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/orchestrator/steps.py",
- "source_location": "L57",
- "weight": 1.0,
- "_src": "steps_step_scrape",
- "_tgt": "alerts_send_admin_alert",
- "source": "alerts_send_admin_alert",
- "target": "steps_step_scrape"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/app/services/orchestrator/steps.py",
- "source_location": "L85",
- "weight": 1.0,
- "_src": "steps_step_generate",
- "_tgt": "alerts_send_admin_alert",
- "source": "alerts_send_admin_alert",
- "target": "steps_step_generate"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L165",
- "weight": 1.0,
- "_src": "test_orchestrator_test_send_admin_alert_noop_when_email_unset",
- "_tgt": "alerts_send_admin_alert",
- "source": "alerts_send_admin_alert",
- "target": "test_orchestrator_test_send_admin_alert_noop_when_email_unset"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L184",
- "weight": 1.0,
- "_src": "test_orchestrator_test_send_admin_alert_calls_backend",
- "_tgt": "alerts_send_admin_alert",
- "source": "alerts_send_admin_alert",
- "target": "test_orchestrator_test_send_admin_alert_calls_backend"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/orchestrator/runner.py",
- "source_location": "L20",
- "weight": 1.0,
- "_src": "backend_app_services_orchestrator_runner_py",
- "_tgt": "runner_current_week_start",
- "confidence_score": 1.0,
- "source": "backend_app_services_orchestrator_runner_py",
- "target": "runner_current_week_start"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/orchestrator/runner.py",
- "source_location": "L27",
- "weight": 1.0,
- "_src": "backend_app_services_orchestrator_runner_py",
- "_tgt": "runner_get_or_create_run",
- "confidence_score": 1.0,
- "source": "backend_app_services_orchestrator_runner_py",
- "target": "runner_get_or_create_run"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/orchestrator/runner.py",
- "source_location": "L50",
- "weight": 1.0,
- "_src": "backend_app_services_orchestrator_runner_py",
- "_tgt": "runner_run_step",
- "confidence_score": 1.0,
- "source": "backend_app_services_orchestrator_runner_py",
- "target": "runner_run_step"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/orchestrator/runner.py",
- "source_location": "L84",
- "weight": 1.0,
- "_src": "backend_app_services_orchestrator_runner_py",
- "_tgt": "runner_run_week",
- "confidence_score": 1.0,
- "source": "backend_app_services_orchestrator_runner_py",
- "target": "runner_run_week"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/orchestrator/runner.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "runner_rationale_1",
- "_tgt": "backend_app_services_orchestrator_runner_py",
- "confidence_score": 1.0,
- "source": "backend_app_services_orchestrator_runner_py",
- "target": "runner_rationale_1"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/orchestrator/runner.py",
- "source_location": "L65",
- "weight": 1.0,
- "_src": "runner_run_step",
- "_tgt": "runner_current_week_start",
- "confidence_score": 1.0,
- "source": "runner_current_week_start",
- "target": "runner_run_step"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/orchestrator/runner.py",
- "source_location": "L85",
- "weight": 1.0,
- "_src": "runner_run_week",
- "_tgt": "runner_current_week_start",
- "confidence_score": 1.0,
- "source": "runner_current_week_start",
- "target": "runner_run_week"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/orchestrator/runner.py",
- "source_location": "L21",
- "weight": 1.0,
- "_src": "runner_rationale_21",
- "_tgt": "runner_current_week_start",
- "confidence_score": 1.0,
- "source": "runner_current_week_start",
- "target": "runner_rationale_21"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/orchestrator/runner.py",
- "source_location": "L73",
- "weight": 1.0,
- "_src": "runner_run_step",
- "_tgt": "runner_get_or_create_run",
- "confidence_score": 1.0,
- "source": "runner_get_or_create_run",
- "target": "runner_run_step"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/orchestrator/runner.py",
- "source_location": "L87",
- "weight": 1.0,
- "_src": "runner_run_week",
- "_tgt": "runner_run_step",
- "confidence_score": 1.0,
- "source": "runner_run_step",
- "target": "runner_run_week"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L599",
- "weight": 1.0,
- "_src": "test_orchestrator_test_run_step_upserts_weekly_run",
- "_tgt": "runner_run_step",
- "source": "runner_run_step",
- "target": "test_orchestrator_test_run_step_upserts_weekly_run"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L609",
- "weight": 1.0,
- "_src": "test_orchestrator_test_run_step_invalid_raises",
- "_tgt": "runner_run_step",
- "source": "runner_run_step",
- "target": "test_orchestrator_test_run_step_invalid_raises"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L623",
- "weight": 1.0,
- "_src": "test_orchestrator_test_run_week_calls_all_steps",
- "_tgt": "runner_run_week",
- "source": "runner_run_week",
- "target": "test_orchestrator_test_run_week_calls_all_steps"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/orchestrator/steps.py",
- "source_location": "L34",
- "weight": 1.0,
- "_src": "backend_app_services_orchestrator_steps_py",
- "_tgt": "steps_step_scrape",
- "confidence_score": 1.0,
- "source": "backend_app_services_orchestrator_steps_py",
- "target": "steps_step_scrape"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/orchestrator/steps.py",
- "source_location": "L67",
- "weight": 1.0,
- "_src": "backend_app_services_orchestrator_steps_py",
- "_tgt": "steps_step_generate",
- "confidence_score": 1.0,
- "source": "backend_app_services_orchestrator_steps_py",
- "target": "steps_step_generate"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/orchestrator/steps.py",
- "source_location": "L92",
- "weight": 1.0,
- "_src": "backend_app_services_orchestrator_steps_py",
- "_tgt": "steps_step_email",
- "confidence_score": 1.0,
- "source": "backend_app_services_orchestrator_steps_py",
- "target": "steps_step_email"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/orchestrator/steps.py",
- "source_location": "L297",
- "weight": 1.0,
- "_src": "backend_app_services_orchestrator_steps_py",
- "_tgt": "steps_step_deadline",
- "confidence_score": 1.0,
- "source": "backend_app_services_orchestrator_steps_py",
- "target": "steps_step_deadline"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/orchestrator/steps.py",
- "source_location": "L335",
- "weight": 1.0,
- "_src": "backend_app_services_orchestrator_steps_py",
- "_tgt": "steps_step_finalize",
- "confidence_score": 1.0,
- "source": "backend_app_services_orchestrator_steps_py",
- "target": "steps_step_finalize"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/orchestrator/steps.py",
- "source_location": "L460",
- "weight": 1.0,
- "_src": "backend_app_services_orchestrator_steps_py",
- "_tgt": "steps_step_reminder",
- "confidence_score": 1.0,
- "source": "backend_app_services_orchestrator_steps_py",
- "target": "steps_step_reminder"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/services/orchestrator/steps.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "steps_rationale_1",
- "_tgt": "backend_app_services_orchestrator_steps_py",
- "confidence_score": 1.0,
- "source": "backend_app_services_orchestrator_steps_py",
- "target": "steps_rationale_1"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L197",
- "weight": 1.0,
- "_src": "test_orchestrator_test_step_scrape_idempotent",
- "_tgt": "steps_step_scrape",
- "source": "steps_step_scrape",
- "target": "test_orchestrator_test_step_scrape_idempotent"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L207",
- "weight": 1.0,
- "_src": "test_orchestrator_test_step_scrape_success",
- "_tgt": "steps_step_scrape",
- "source": "steps_step_scrape",
- "target": "test_orchestrator_test_step_scrape_success"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L222",
- "weight": 1.0,
- "_src": "test_orchestrator_test_step_scrape_both_fail_marks_stale",
- "_tgt": "steps_step_scrape",
- "source": "steps_step_scrape",
- "target": "test_orchestrator_test_step_scrape_both_fail_marks_stale"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L234",
- "weight": 1.0,
- "_src": "test_orchestrator_test_step_generate_idempotent",
- "_tgt": "steps_step_generate",
- "source": "steps_step_generate",
- "target": "test_orchestrator_test_step_generate_idempotent"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L253",
- "weight": 1.0,
- "_src": "test_orchestrator_test_step_generate_creates_plan",
- "_tgt": "steps_step_generate",
- "source": "steps_step_generate",
- "target": "test_orchestrator_test_step_generate_creates_plan"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L268",
- "weight": 1.0,
- "_src": "test_orchestrator_test_step_generate_records_error_on_failure",
- "_tgt": "steps_step_generate",
- "source": "steps_step_generate",
- "target": "test_orchestrator_test_step_generate_records_error_on_failure"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L279",
- "weight": 1.0,
- "_src": "test_orchestrator_test_step_email_idempotent",
- "_tgt": "steps_step_email",
- "source": "steps_step_email",
- "target": "test_orchestrator_test_step_email_idempotent"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L295",
- "weight": 1.0,
- "_src": "test_orchestrator_test_step_email_sends_per_member",
- "_tgt": "steps_step_email",
- "source": "steps_step_email",
- "target": "test_orchestrator_test_step_email_sends_per_member"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L315",
- "weight": 1.0,
- "_src": "test_orchestrator_test_step_email_stale_banner",
- "_tgt": "steps_step_email",
- "source": "steps_step_email",
- "target": "test_orchestrator_test_step_email_stale_banner"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L336",
- "weight": 1.0,
- "_src": "test_orchestrator_test_step_email_escapes_recipe_name",
- "_tgt": "steps_step_email",
- "source": "steps_step_email",
- "target": "test_orchestrator_test_step_email_escapes_recipe_name"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L459",
- "weight": 1.0,
- "_src": "test_orchestrator_test_step_deadline_idempotent",
- "_tgt": "steps_step_deadline",
- "source": "steps_step_deadline",
- "target": "test_orchestrator_test_step_deadline_idempotent"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L468",
- "weight": 1.0,
- "_src": "test_orchestrator_test_step_deadline_resolves_pending_to_approved",
- "_tgt": "steps_step_deadline",
- "source": "steps_step_deadline",
- "target": "test_orchestrator_test_step_deadline_resolves_pending_to_approved"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L479",
- "weight": 1.0,
- "_src": "test_orchestrator_test_step_deadline_resolves_pending_to_denied",
- "_tgt": "steps_step_deadline",
- "source": "steps_step_deadline",
- "target": "test_orchestrator_test_step_deadline_resolves_pending_to_denied"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L535",
- "weight": 1.0,
- "_src": "test_orchestrator_test_step_finalize_idempotent",
- "_tgt": "steps_step_finalize",
- "source": "steps_step_finalize",
- "target": "test_orchestrator_test_step_finalize_idempotent"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L551",
- "weight": 1.0,
- "_src": "test_orchestrator_test_step_finalize_sends_shopping_list",
- "_tgt": "steps_step_finalize",
- "source": "steps_step_finalize",
- "target": "test_orchestrator_test_step_finalize_sends_shopping_list"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L571",
- "weight": 1.0,
- "_src": "test_orchestrator_test_step_finalize_no_approved_sends_empty_message",
- "_tgt": "steps_step_finalize",
- "source": "steps_step_finalize",
- "target": "test_orchestrator_test_step_finalize_no_approved_sends_empty_message"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L348",
- "weight": 1.0,
- "_src": "test_orchestrator_test_step_reminder_idempotent",
- "_tgt": "steps_step_reminder",
- "source": "steps_step_reminder",
- "target": "test_orchestrator_test_step_reminder_idempotent"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L364",
- "weight": 1.0,
- "_src": "test_orchestrator_test_step_reminder_skips_when_not_emailed",
- "_tgt": "steps_step_reminder",
- "source": "steps_step_reminder",
- "target": "test_orchestrator_test_step_reminder_skips_when_not_emailed"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L384",
- "weight": 1.0,
- "_src": "test_orchestrator_test_step_reminder_sends_to_non_voter",
- "_tgt": "steps_step_reminder",
- "source": "steps_step_reminder",
- "target": "test_orchestrator_test_step_reminder_sends_to_non_voter"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L414",
- "weight": 1.0,
- "_src": "test_orchestrator_test_step_reminder_skips_voter",
- "_tgt": "steps_step_reminder",
- "source": "steps_step_reminder",
- "target": "test_orchestrator_test_step_reminder_skips_voter"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L444",
- "weight": 1.0,
- "_src": "test_orchestrator_test_step_reminder_no_sends_when_all_voted",
- "_tgt": "steps_step_reminder",
- "source": "steps_step_reminder",
- "target": "test_orchestrator_test_step_reminder_no_sends_when_all_voted"
- },
- {
- "relation": "imports_from",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/base.py",
- "source_location": "L3",
- "weight": 1.0,
- "_src": "backend_app_scraper_base_py",
- "_tgt": "abc",
- "confidence_score": 1.0,
- "source": "backend_app_scraper_base_py",
- "target": "abc"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/base.py",
- "source_location": "L14",
- "weight": 1.0,
- "_src": "backend_app_scraper_base_py",
- "_tgt": "base_basescraper",
- "confidence_score": 1.0,
- "source": "backend_app_scraper_base_py",
- "target": "base_basescraper"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/base.py",
- "source_location": "L102",
- "weight": 1.0,
- "_src": "backend_app_scraper_base_py",
- "_tgt": "base_scrape",
- "confidence_score": 1.0,
- "source": "backend_app_scraper_base_py",
- "target": "base_scrape"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/base.py",
- "source_location": "L109",
- "weight": 1.0,
- "_src": "backend_app_scraper_base_py",
- "_tgt": "base_seleniumscraper",
- "confidence_score": 1.0,
- "source": "backend_app_scraper_base_py",
- "target": "base_seleniumscraper"
- },
- {
- "relation": "imports_from",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/__init__.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "backend_app_scraper_init_py",
- "_tgt": "backend_app_scraper_base_py",
- "confidence_score": 1.0,
- "source": "backend_app_scraper_base_py",
- "target": "backend_app_scraper_init_py"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/base.py",
- "source_location": "L14",
- "weight": 1.0,
- "_src": "base_basescraper",
- "_tgt": "abc",
- "confidence_score": 1.0,
- "source": "base_basescraper",
- "target": "abc"
- },
- {
- "relation": "method",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/base.py",
- "source_location": "L15",
- "weight": 1.0,
- "_src": "base_basescraper",
- "_tgt": "base_basescraper_init",
- "confidence_score": 1.0,
- "source": "base_basescraper",
- "target": "base_basescraper_init"
- },
- {
- "relation": "method",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/base.py",
- "source_location": "L29",
- "weight": 1.0,
- "_src": "base_basescraper",
- "_tgt": "base_basescraper_create_session",
- "confidence_score": 1.0,
- "source": "base_basescraper",
- "target": "base_basescraper_create_session"
- },
- {
- "relation": "method",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/base.py",
- "source_location": "L51",
- "weight": 1.0,
- "_src": "base_basescraper",
- "_tgt": "base_basescraper_rate_limit",
- "confidence_score": 1.0,
- "source": "base_basescraper",
- "target": "base_basescraper_rate_limit"
- },
- {
- "relation": "method",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/base.py",
- "source_location": "L59",
- "weight": 1.0,
- "_src": "base_basescraper",
- "_tgt": "base_basescraper_get",
- "confidence_score": 1.0,
- "source": "base_basescraper",
- "target": "base_basescraper_get"
- },
- {
- "relation": "method",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/base.py",
- "source_location": "L80",
- "weight": 1.0,
- "_src": "base_basescraper",
- "_tgt": "base_basescraper_post",
- "confidence_score": 1.0,
- "source": "base_basescraper",
- "target": "base_basescraper_post"
- },
- {
- "relation": "method",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/base.py",
- "source_location": "L105",
- "weight": 1.0,
- "_src": "base_basescraper",
- "_tgt": "base_basescraper_log_scrape",
- "confidence_score": 1.0,
- "source": "base_basescraper",
- "target": "base_basescraper_log_scrape"
- },
- {
- "relation": "inherits",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/base.py",
- "source_location": "L109",
- "weight": 1.0,
- "_src": "base_seleniumscraper",
- "_tgt": "base_basescraper",
- "confidence_score": 1.0,
- "source": "base_basescraper",
- "target": "base_seleniumscraper"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/base.py",
- "source_location": "L27",
- "weight": 1.0,
- "_src": "base_basescraper_init",
- "_tgt": "base_basescraper_create_session",
- "confidence_score": 1.0,
- "source": "base_basescraper_init",
- "target": "base_basescraper_create_session"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/base.py",
- "source_location": "L60",
- "weight": 1.0,
- "_src": "base_basescraper_get",
- "_tgt": "base_basescraper_rate_limit",
- "confidence_score": 1.0,
- "source": "base_basescraper_rate_limit",
- "target": "base_basescraper_get"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/base.py",
- "source_location": "L81",
- "weight": 1.0,
- "_src": "base_basescraper_post",
- "_tgt": "base_basescraper_rate_limit",
- "confidence_score": 1.0,
- "source": "base_basescraper_rate_limit",
- "target": "base_basescraper_post"
- },
- {
- "relation": "method",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/base.py",
- "source_location": "L110",
- "weight": 1.0,
- "_src": "base_seleniumscraper",
- "_tgt": "base_seleniumscraper_init",
- "confidence_score": 1.0,
- "source": "base_seleniumscraper",
- "target": "base_seleniumscraper_init"
- },
- {
- "relation": "method",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/base.py",
- "source_location": "L114",
- "weight": 1.0,
- "_src": "base_seleniumscraper",
- "_tgt": "base_seleniumscraper_init_playwright",
- "confidence_score": 1.0,
- "source": "base_seleniumscraper",
- "target": "base_seleniumscraper_init_playwright"
- },
- {
- "relation": "method",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/base.py",
- "source_location": "L123",
- "weight": 1.0,
- "_src": "base_seleniumscraper",
- "_tgt": "base_seleniumscraper_get_playwright",
- "confidence_score": 1.0,
- "source": "base_seleniumscraper",
- "target": "base_seleniumscraper_get_playwright"
- },
- {
- "relation": "method",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/base.py",
- "source_location": "L127",
- "weight": 1.0,
- "_src": "base_seleniumscraper",
- "_tgt": "base_seleniumscraper_get_browser_page",
- "confidence_score": 1.0,
- "source": "base_seleniumscraper",
- "target": "base_seleniumscraper_get_browser_page"
- },
- {
- "relation": "method",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/base.py",
- "source_location": "L133",
- "weight": 1.0,
- "_src": "base_seleniumscraper",
- "_tgt": "base_seleniumscraper_cleanup",
- "confidence_score": 1.0,
- "source": "base_seleniumscraper",
- "target": "base_seleniumscraper_cleanup"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/base.py",
- "source_location": "L124",
- "weight": 1.0,
- "_src": "base_seleniumscraper_get_playwright",
- "_tgt": "base_seleniumscraper_init_playwright",
- "confidence_score": 1.0,
- "source": "base_seleniumscraper_init_playwright",
- "target": "base_seleniumscraper_get_playwright"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/base.py",
- "source_location": "L128",
- "weight": 1.0,
- "_src": "base_seleniumscraper_get_browser_page",
- "_tgt": "base_seleniumscraper_get_playwright",
- "confidence_score": 1.0,
- "source": "base_seleniumscraper_get_playwright",
- "target": "base_seleniumscraper_get_browser_page"
- },
- {
- "relation": "imports_from",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/__init__.py",
- "source_location": "L2",
- "weight": 1.0,
- "_src": "backend_app_scraper_init_py",
- "_tgt": "backend_app_scraper_lucky_ca_scraper_py",
- "confidence_score": 1.0,
- "source": "backend_app_scraper_init_py",
- "target": "backend_app_scraper_lucky_ca_scraper_py"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L49",
- "weight": 1.0,
- "_src": "backend_app_scraper_lucky_ca_scraper_py",
- "_tgt": "lucky_ca_scraper_swiftlyautherror",
- "confidence_score": 1.0,
- "source": "backend_app_scraper_lucky_ca_scraper_py",
- "target": "lucky_ca_scraper_swiftlyautherror"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L67",
- "weight": 1.0,
- "_src": "backend_app_scraper_lucky_ca_scraper_py",
- "_tgt": "lucky_ca_scraper_luckycaliforniascraper",
- "confidence_score": 1.0,
- "source": "backend_app_scraper_lucky_ca_scraper_py",
- "target": "lucky_ca_scraper_luckycaliforniascraper"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L191",
- "weight": 1.0,
- "_src": "backend_app_scraper_lucky_ca_scraper_py",
- "_tgt": "lucky_ca_scraper_parse_categories_html",
- "confidence_score": 1.0,
- "source": "backend_app_scraper_lucky_ca_scraper_py",
- "target": "lucky_ca_scraper_parse_categories_html"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L226",
- "weight": 1.0,
- "_src": "backend_app_scraper_lucky_ca_scraper_py",
- "_tgt": "lucky_ca_scraper_parse_category_response",
- "confidence_score": 1.0,
- "source": "backend_app_scraper_lucky_ca_scraper_py",
- "target": "lucky_ca_scraper_parse_category_response"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L240",
- "weight": 1.0,
- "_src": "backend_app_scraper_lucky_ca_scraper_py",
- "_tgt": "lucky_ca_scraper_map_product",
- "confidence_score": 1.0,
- "source": "backend_app_scraper_lucky_ca_scraper_py",
- "target": "lucky_ca_scraper_map_product"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L297",
- "weight": 1.0,
- "_src": "backend_app_scraper_lucky_ca_scraper_py",
- "_tgt": "lucky_ca_scraper_parse_price",
- "confidence_score": 1.0,
- "source": "backend_app_scraper_lucky_ca_scraper_py",
- "target": "lucky_ca_scraper_parse_price"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L317",
- "weight": 1.0,
- "_src": "backend_app_scraper_lucky_ca_scraper_py",
- "_tgt": "lucky_ca_scraper_aisle_from_slug",
- "confidence_score": 1.0,
- "source": "backend_app_scraper_lucky_ca_scraper_py",
- "target": "lucky_ca_scraper_aisle_from_slug"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "lucky_ca_scraper_rationale_1",
- "_tgt": "backend_app_scraper_lucky_ca_scraper_py",
- "confidence_score": 1.0,
- "source": "backend_app_scraper_lucky_ca_scraper_py",
- "target": "lucky_ca_scraper_rationale_1"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L220",
- "weight": 1.0,
- "_src": "lucky_ca_scraper_luckycaliforniascraper_fetch_category",
- "_tgt": "lucky_ca_scraper_swiftlyautherror",
- "confidence_score": 1.0,
- "source": "lucky_ca_scraper_swiftlyautherror",
- "target": "lucky_ca_scraper_luckycaliforniascraper_fetch_category"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L50",
- "weight": 1.0,
- "_src": "lucky_ca_scraper_rationale_50",
- "_tgt": "lucky_ca_scraper_swiftlyautherror",
- "confidence_score": 1.0,
- "source": "lucky_ca_scraper_swiftlyautherror",
- "target": "lucky_ca_scraper_rationale_50"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L180",
- "weight": 0.8,
- "_src": "test_swiftly_api_rationale_1",
- "_tgt": "lucky_ca_scraper_swiftlyautherror",
- "confidence_score": 0.5,
- "source": "lucky_ca_scraper_swiftlyautherror",
- "target": "test_swiftly_api_rationale_1"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L180",
- "weight": 0.8,
- "_src": "test_swiftly_api_rationale_41",
- "_tgt": "lucky_ca_scraper_swiftlyautherror",
- "confidence_score": 0.5,
- "source": "lucky_ca_scraper_swiftlyautherror",
- "target": "test_swiftly_api_rationale_41"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L180",
- "weight": 0.8,
- "_src": "test_swiftly_api_rationale_58",
- "_tgt": "lucky_ca_scraper_swiftlyautherror",
- "confidence_score": 0.5,
- "source": "lucky_ca_scraper_swiftlyautherror",
- "target": "test_swiftly_api_rationale_58"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L180",
- "weight": 0.8,
- "_src": "test_swiftly_api_rationale_108",
- "_tgt": "lucky_ca_scraper_swiftlyautherror",
- "confidence_score": 0.5,
- "source": "lucky_ca_scraper_swiftlyautherror",
- "target": "test_swiftly_api_rationale_108"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L180",
- "weight": 0.8,
- "_src": "test_swiftly_api_rationale_136",
- "_tgt": "lucky_ca_scraper_swiftlyautherror",
- "confidence_score": 0.5,
- "source": "lucky_ca_scraper_swiftlyautherror",
- "target": "test_swiftly_api_rationale_136"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L180",
- "weight": 0.8,
- "_src": "test_swiftly_api_rationale_172",
- "_tgt": "lucky_ca_scraper_swiftlyautherror",
- "confidence_score": 0.5,
- "source": "lucky_ca_scraper_swiftlyautherror",
- "target": "test_swiftly_api_rationale_172"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "scripts/spike_swiftly_ingest.py",
- "source_location": "L30",
- "weight": 0.8,
- "_src": "spike_swiftly_ingest_rationale_1",
- "_tgt": "lucky_ca_scraper_swiftlyautherror",
- "confidence_score": 0.5,
- "source": "lucky_ca_scraper_swiftlyautherror",
- "target": "spike_swiftly_ingest_rationale_1"
- },
- {
- "relation": "method",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L86",
- "weight": 1.0,
- "_src": "lucky_ca_scraper_luckycaliforniascraper",
- "_tgt": "lucky_ca_scraper_luckycaliforniascraper_init",
- "confidence_score": 1.0,
- "source": "lucky_ca_scraper_luckycaliforniascraper",
- "target": "lucky_ca_scraper_luckycaliforniascraper_init"
- },
- {
- "relation": "method",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L129",
- "weight": 1.0,
- "_src": "lucky_ca_scraper_luckycaliforniascraper",
- "_tgt": "lucky_ca_scraper_luckycaliforniascraper_cleanup",
- "confidence_score": 1.0,
- "source": "lucky_ca_scraper_luckycaliforniascraper",
- "target": "lucky_ca_scraper_luckycaliforniascraper_cleanup"
- },
- {
- "relation": "method",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L138",
- "weight": 1.0,
- "_src": "lucky_ca_scraper_luckycaliforniascraper",
- "_tgt": "lucky_ca_scraper_luckycaliforniascraper_scrape",
- "confidence_score": 1.0,
- "source": "lucky_ca_scraper_luckycaliforniascraper",
- "target": "lucky_ca_scraper_luckycaliforniascraper_scrape"
- },
- {
- "relation": "method",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L157",
- "weight": 1.0,
- "_src": "lucky_ca_scraper_luckycaliforniascraper",
- "_tgt": "lucky_ca_scraper_luckycaliforniascraper_fetch_all",
- "confidence_score": 1.0,
- "source": "lucky_ca_scraper_luckycaliforniascraper",
- "target": "lucky_ca_scraper_luckycaliforniascraper_fetch_all"
- },
- {
- "relation": "method",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L179",
- "weight": 1.0,
- "_src": "lucky_ca_scraper_luckycaliforniascraper",
- "_tgt": "lucky_ca_scraper_luckycaliforniascraper_discover_categories",
- "confidence_score": 1.0,
- "source": "lucky_ca_scraper_luckycaliforniascraper",
- "target": "lucky_ca_scraper_luckycaliforniascraper_discover_categories"
- },
- {
- "relation": "method",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L208",
- "weight": 1.0,
- "_src": "lucky_ca_scraper_luckycaliforniascraper",
- "_tgt": "lucky_ca_scraper_luckycaliforniascraper_fetch_category",
- "confidence_score": 1.0,
- "source": "lucky_ca_scraper_luckycaliforniascraper",
- "target": "lucky_ca_scraper_luckycaliforniascraper_fetch_category"
- },
- {
- "relation": "method",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L325",
- "weight": 1.0,
- "_src": "lucky_ca_scraper_luckycaliforniascraper",
- "_tgt": "lucky_ca_scraper_luckycaliforniascraper_rate_limit",
- "confidence_score": 1.0,
- "source": "lucky_ca_scraper_luckycaliforniascraper",
- "target": "lucky_ca_scraper_luckycaliforniascraper_rate_limit"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L68",
- "weight": 1.0,
- "_src": "lucky_ca_scraper_rationale_68",
- "_tgt": "lucky_ca_scraper_luckycaliforniascraper",
- "confidence_score": 1.0,
- "source": "lucky_ca_scraper_luckycaliforniascraper",
- "target": "lucky_ca_scraper_rationale_68"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L180",
- "weight": 0.8,
- "_src": "test_swiftly_api_rationale_1",
- "_tgt": "lucky_ca_scraper_luckycaliforniascraper",
- "confidence_score": 0.5,
- "source": "lucky_ca_scraper_luckycaliforniascraper",
- "target": "test_swiftly_api_rationale_1"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L180",
- "weight": 0.8,
- "_src": "test_swiftly_api_rationale_41",
- "_tgt": "lucky_ca_scraper_luckycaliforniascraper",
- "confidence_score": 0.5,
- "source": "lucky_ca_scraper_luckycaliforniascraper",
- "target": "test_swiftly_api_rationale_41"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L180",
- "weight": 0.8,
- "_src": "test_swiftly_api_rationale_58",
- "_tgt": "lucky_ca_scraper_luckycaliforniascraper",
- "confidence_score": 0.5,
- "source": "lucky_ca_scraper_luckycaliforniascraper",
- "target": "test_swiftly_api_rationale_58"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L180",
- "weight": 0.8,
- "_src": "test_swiftly_api_rationale_108",
- "_tgt": "lucky_ca_scraper_luckycaliforniascraper",
- "confidence_score": 0.5,
- "source": "lucky_ca_scraper_luckycaliforniascraper",
- "target": "test_swiftly_api_rationale_108"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L180",
- "weight": 0.8,
- "_src": "test_swiftly_api_rationale_136",
- "_tgt": "lucky_ca_scraper_luckycaliforniascraper",
- "confidence_score": 0.5,
- "source": "lucky_ca_scraper_luckycaliforniascraper",
- "target": "test_swiftly_api_rationale_136"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L180",
- "weight": 0.8,
- "_src": "test_swiftly_api_rationale_172",
- "_tgt": "lucky_ca_scraper_luckycaliforniascraper",
- "confidence_score": 0.5,
- "source": "lucky_ca_scraper_luckycaliforniascraper",
- "target": "test_swiftly_api_rationale_172"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "scripts/spike_lucky_scrape.py",
- "source_location": "L27",
- "weight": 0.8,
- "_src": "spike_lucky_scrape_rationale_1",
- "_tgt": "lucky_ca_scraper_luckycaliforniascraper",
- "confidence_score": 0.5,
- "source": "lucky_ca_scraper_luckycaliforniascraper",
- "target": "spike_lucky_scrape_rationale_1"
- },
- {
- "relation": "uses",
- "confidence": "INFERRED",
- "source_file": "scripts/spike_swiftly_ingest.py",
- "source_location": "L30",
- "weight": 0.8,
- "_src": "spike_swiftly_ingest_rationale_1",
- "_tgt": "lucky_ca_scraper_luckycaliforniascraper",
- "confidence_score": 0.5,
- "source": "lucky_ca_scraper_luckycaliforniascraper",
- "target": "spike_swiftly_ingest_rationale_1"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L137",
- "weight": 1.0,
- "_src": "test_swiftly_api_test_swiftly_auth_error_on_401_from_api",
- "_tgt": "lucky_ca_scraper_luckycaliforniascraper",
- "source": "lucky_ca_scraper_luckycaliforniascraper",
- "target": "test_swiftly_api_test_swiftly_auth_error_on_401_from_api"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L152",
- "weight": 1.0,
- "_src": "test_swiftly_api_test_fetch_category_mints_token_when_none_pinned",
- "_tgt": "lucky_ca_scraper_luckycaliforniascraper",
- "source": "lucky_ca_scraper_luckycaliforniascraper",
- "target": "test_swiftly_api_test_fetch_category_mints_token_when_none_pinned"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "scripts/spike_lucky_scrape.py",
- "source_location": "L118",
- "weight": 1.0,
- "_src": "spike_lucky_scrape_main",
- "_tgt": "lucky_ca_scraper_luckycaliforniascraper",
- "source": "lucky_ca_scraper_luckycaliforniascraper",
- "target": "spike_lucky_scrape_main"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "scripts/spike_swiftly_ingest.py",
- "source_location": "L61",
- "weight": 1.0,
- "_src": "spike_swiftly_ingest_main",
- "_tgt": "lucky_ca_scraper_luckycaliforniascraper",
- "source": "lucky_ca_scraper_luckycaliforniascraper",
- "target": "spike_swiftly_ingest_main"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "scripts/spike_swiftly_ingest.py",
- "source_location": "L97",
- "weight": 1.0,
- "_src": "spike_swiftly_ingest_main",
- "_tgt": "lucky_ca_scraper_luckycaliforniascraper_cleanup",
- "source": "lucky_ca_scraper_luckycaliforniascraper_cleanup",
- "target": "spike_swiftly_ingest_main"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L146",
- "weight": 1.0,
- "_src": "lucky_ca_scraper_luckycaliforniascraper_scrape",
- "_tgt": "lucky_ca_scraper_luckycaliforniascraper_fetch_all",
- "confidence_score": 1.0,
- "source": "lucky_ca_scraper_luckycaliforniascraper_scrape",
- "target": "lucky_ca_scraper_luckycaliforniascraper_fetch_all"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L139",
- "weight": 1.0,
- "_src": "lucky_ca_scraper_rationale_139",
- "_tgt": "lucky_ca_scraper_luckycaliforniascraper_scrape",
- "confidence_score": 1.0,
- "source": "lucky_ca_scraper_luckycaliforniascraper_scrape",
- "target": "lucky_ca_scraper_rationale_139"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L159",
- "weight": 1.0,
- "_src": "lucky_ca_scraper_luckycaliforniascraper_fetch_all",
- "_tgt": "lucky_ca_scraper_luckycaliforniascraper_discover_categories",
- "confidence_score": 1.0,
- "source": "lucky_ca_scraper_luckycaliforniascraper_fetch_all",
- "target": "lucky_ca_scraper_luckycaliforniascraper_discover_categories"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L163",
- "weight": 1.0,
- "_src": "lucky_ca_scraper_luckycaliforniascraper_fetch_all",
- "_tgt": "lucky_ca_scraper_luckycaliforniascraper_fetch_category",
- "confidence_score": 1.0,
- "source": "lucky_ca_scraper_luckycaliforniascraper_fetch_all",
- "target": "lucky_ca_scraper_luckycaliforniascraper_fetch_category"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L170",
- "weight": 1.0,
- "_src": "lucky_ca_scraper_luckycaliforniascraper_fetch_all",
- "_tgt": "lucky_ca_scraper_aisle_from_slug",
- "confidence_score": 1.0,
- "source": "lucky_ca_scraper_luckycaliforniascraper_fetch_all",
- "target": "lucky_ca_scraper_aisle_from_slug"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L172",
- "weight": 1.0,
- "_src": "lucky_ca_scraper_luckycaliforniascraper_fetch_all",
- "_tgt": "lucky_ca_scraper_map_product",
- "confidence_score": 1.0,
- "source": "lucky_ca_scraper_luckycaliforniascraper_fetch_all",
- "target": "lucky_ca_scraper_map_product"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L158",
- "weight": 1.0,
- "_src": "lucky_ca_scraper_rationale_158",
- "_tgt": "lucky_ca_scraper_luckycaliforniascraper_fetch_all",
- "confidence_score": 1.0,
- "source": "lucky_ca_scraper_luckycaliforniascraper_fetch_all",
- "target": "lucky_ca_scraper_rationale_158"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L185",
- "weight": 1.0,
- "_src": "lucky_ca_scraper_luckycaliforniascraper_discover_categories",
- "_tgt": "lucky_ca_scraper_luckycaliforniascraper_rate_limit",
- "confidence_score": 1.0,
- "source": "lucky_ca_scraper_luckycaliforniascraper_discover_categories",
- "target": "lucky_ca_scraper_luckycaliforniascraper_rate_limit"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L188",
- "weight": 1.0,
- "_src": "lucky_ca_scraper_luckycaliforniascraper_discover_categories",
- "_tgt": "lucky_ca_scraper_parse_categories_html",
- "confidence_score": 1.0,
- "source": "lucky_ca_scraper_luckycaliforniascraper_discover_categories",
- "target": "lucky_ca_scraper_parse_categories_html"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L180",
- "weight": 1.0,
- "_src": "lucky_ca_scraper_rationale_180",
- "_tgt": "lucky_ca_scraper_luckycaliforniascraper_discover_categories",
- "confidence_score": 1.0,
- "source": "lucky_ca_scraper_luckycaliforniascraper_discover_categories",
- "target": "lucky_ca_scraper_rationale_180"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "scripts/spike_swiftly_ingest.py",
- "source_location": "L63",
- "weight": 1.0,
- "_src": "spike_swiftly_ingest_main",
- "_tgt": "lucky_ca_scraper_luckycaliforniascraper_discover_categories",
- "source": "lucky_ca_scraper_luckycaliforniascraper_discover_categories",
- "target": "spike_swiftly_ingest_main"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L46",
- "weight": 1.0,
- "_src": "test_swiftly_api_test_parse_categories_fixture",
- "_tgt": "lucky_ca_scraper_parse_categories_html",
- "source": "lucky_ca_scraper_parse_categories_html",
- "target": "test_swiftly_api_test_parse_categories_fixture"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L212",
- "weight": 1.0,
- "_src": "lucky_ca_scraper_luckycaliforniascraper_fetch_category",
- "_tgt": "lucky_ca_scraper_luckycaliforniascraper_rate_limit",
- "confidence_score": 1.0,
- "source": "lucky_ca_scraper_luckycaliforniascraper_fetch_category",
- "target": "lucky_ca_scraper_luckycaliforniascraper_rate_limit"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L223",
- "weight": 1.0,
- "_src": "lucky_ca_scraper_luckycaliforniascraper_fetch_category",
- "_tgt": "lucky_ca_scraper_parse_category_response",
- "confidence_score": 1.0,
- "source": "lucky_ca_scraper_luckycaliforniascraper_fetch_category",
- "target": "lucky_ca_scraper_parse_category_response"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L209",
- "weight": 1.0,
- "_src": "lucky_ca_scraper_rationale_209",
- "_tgt": "lucky_ca_scraper_luckycaliforniascraper_fetch_category",
- "confidence_score": 1.0,
- "source": "lucky_ca_scraper_luckycaliforniascraper_fetch_category",
- "target": "lucky_ca_scraper_rationale_209"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L141",
- "weight": 1.0,
- "_src": "test_swiftly_api_test_swiftly_auth_error_on_401_from_api",
- "_tgt": "lucky_ca_scraper_luckycaliforniascraper_fetch_category",
- "source": "lucky_ca_scraper_luckycaliforniascraper_fetch_category",
- "target": "test_swiftly_api_test_swiftly_auth_error_on_401_from_api"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L163",
- "weight": 1.0,
- "_src": "test_swiftly_api_test_fetch_category_mints_token_when_none_pinned",
- "_tgt": "lucky_ca_scraper_luckycaliforniascraper_fetch_category",
- "source": "lucky_ca_scraper_luckycaliforniascraper_fetch_category",
- "target": "test_swiftly_api_test_fetch_category_mints_token_when_none_pinned"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "scripts/spike_swiftly_ingest.py",
- "source_location": "L71",
- "weight": 1.0,
- "_src": "spike_swiftly_ingest_main",
- "_tgt": "lucky_ca_scraper_luckycaliforniascraper_fetch_category",
- "source": "lucky_ca_scraper_luckycaliforniascraper_fetch_category",
- "target": "spike_swiftly_ingest_main"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L63",
- "weight": 1.0,
- "_src": "test_swiftly_api_test_parse_category_response_fixture",
- "_tgt": "lucky_ca_scraper_parse_category_response",
- "source": "lucky_ca_scraper_parse_category_response",
- "target": "test_swiftly_api_test_parse_category_response_fixture"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scraper/lucky_ca_scraper.py",
- "source_location": "L258",
- "weight": 1.0,
- "_src": "lucky_ca_scraper_map_product",
- "_tgt": "lucky_ca_scraper_parse_price",
- "confidence_score": 1.0,
- "source": "lucky_ca_scraper_map_product",
- "target": "lucky_ca_scraper_parse_price"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L68",
- "weight": 1.0,
- "_src": "test_swiftly_api_test_parse_category_response_fixture",
- "_tgt": "lucky_ca_scraper_map_product",
- "source": "lucky_ca_scraper_map_product",
- "target": "test_swiftly_api_test_parse_category_response_fixture"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L109",
- "weight": 1.0,
- "_src": "test_swiftly_api_test_map_product_returns_none_for_unparseable",
- "_tgt": "lucky_ca_scraper_map_product",
- "source": "lucky_ca_scraper_map_product",
- "target": "test_swiftly_api_test_map_product_returns_none_for_unparseable"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "scripts/spike_swiftly_ingest.py",
- "source_location": "L81",
- "weight": 1.0,
- "_src": "spike_swiftly_ingest_main",
- "_tgt": "lucky_ca_scraper_map_product",
- "source": "lucky_ca_scraper_map_product",
- "target": "spike_swiftly_ingest_main"
- },
- {
- "relation": "calls",
- "confidence": "INFERRED",
- "confidence_score": 0.8,
- "source_file": "scripts/spike_swiftly_ingest.py",
- "source_location": "L78",
- "weight": 1.0,
- "_src": "spike_swiftly_ingest_main",
- "_tgt": "lucky_ca_scraper_aisle_from_slug",
- "source": "lucky_ca_scraper_aisle_from_slug",
- "target": "spike_swiftly_ingest_main"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/app/scheduler/__main__.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "main_rationale_1",
- "_tgt": "backend_app_scheduler_main_py",
- "confidence_score": 1.0,
- "source": "backend_app_scheduler_main_py",
- "target": "main_rationale_1"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/env.py",
- "source_location": "L22",
- "weight": 1.0,
- "_src": "backend_alembic_env_py",
- "_tgt": "env_run_migrations_offline",
- "confidence_score": 1.0,
- "source": "backend_alembic_env_py",
- "target": "env_run_migrations_offline"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/env.py",
- "source_location": "L35",
- "weight": 1.0,
- "_src": "backend_alembic_env_py",
- "_tgt": "env_run_migrations_online",
- "confidence_score": 1.0,
- "source": "backend_alembic_env_py",
- "target": "env_run_migrations_online"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/versions/0003_grocery_item_description.py",
- "source_location": "L24",
- "weight": 1.0,
- "_src": "backend_alembic_versions_0003_grocery_item_description_py",
- "_tgt": "0003_grocery_item_description_upgrade",
- "confidence_score": 1.0,
- "source": "backend_alembic_versions_0003_grocery_item_description_py",
- "target": "0003_grocery_item_description_upgrade"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/versions/0003_grocery_item_description.py",
- "source_location": "L31",
- "weight": 1.0,
- "_src": "backend_alembic_versions_0003_grocery_item_description_py",
- "_tgt": "0003_grocery_item_description_downgrade",
- "confidence_score": 1.0,
- "source": "backend_alembic_versions_0003_grocery_item_description_py",
- "target": "0003_grocery_item_description_downgrade"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/versions/0003_grocery_item_description.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "0003_grocery_item_description_rationale_1",
- "_tgt": "backend_alembic_versions_0003_grocery_item_description_py",
- "confidence_score": 1.0,
- "source": "backend_alembic_versions_0003_grocery_item_description_py",
- "target": "0003_grocery_item_description_rationale_1"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/versions/0002_seed_data.py",
- "source_location": "L17",
- "weight": 1.0,
- "_src": "backend_alembic_versions_0002_seed_data_py",
- "_tgt": "0002_seed_data_upgrade",
- "confidence_score": 1.0,
- "source": "backend_alembic_versions_0002_seed_data_py",
- "target": "0002_seed_data_upgrade"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/versions/0002_seed_data.py",
- "source_location": "L112",
- "weight": 1.0,
- "_src": "backend_alembic_versions_0002_seed_data_py",
- "_tgt": "0002_seed_data_downgrade",
- "confidence_score": 1.0,
- "source": "backend_alembic_versions_0002_seed_data_py",
- "target": "0002_seed_data_downgrade"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/versions/0002_seed_data.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "0002_seed_data_rationale_1",
- "_tgt": "backend_alembic_versions_0002_seed_data_py",
- "confidence_score": 1.0,
- "source": "backend_alembic_versions_0002_seed_data_py",
- "target": "0002_seed_data_rationale_1"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/versions/0004_family_profile_calorie_target.py",
- "source_location": "L22",
- "weight": 1.0,
- "_src": "backend_alembic_versions_0004_family_profile_calorie_target_py",
- "_tgt": "0004_family_profile_calorie_target_upgrade",
- "confidence_score": 1.0,
- "source": "backend_alembic_versions_0004_family_profile_calorie_target_py",
- "target": "0004_family_profile_calorie_target_upgrade"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/versions/0004_family_profile_calorie_target.py",
- "source_location": "L29",
- "weight": 1.0,
- "_src": "backend_alembic_versions_0004_family_profile_calorie_target_py",
- "_tgt": "0004_family_profile_calorie_target_downgrade",
- "confidence_score": 1.0,
- "source": "backend_alembic_versions_0004_family_profile_calorie_target_py",
- "target": "0004_family_profile_calorie_target_downgrade"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/versions/0004_family_profile_calorie_target.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "0004_family_profile_calorie_target_rationale_1",
- "_tgt": "backend_alembic_versions_0004_family_profile_calorie_target_py",
- "confidence_score": 1.0,
- "source": "backend_alembic_versions_0004_family_profile_calorie_target_py",
- "target": "0004_family_profile_calorie_target_rationale_1"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/versions/0001_initial_migration.py",
- "source_location": "L18",
- "weight": 1.0,
- "_src": "backend_alembic_versions_0001_initial_migration_py",
- "_tgt": "0001_initial_migration_upgrade",
- "confidence_score": 1.0,
- "source": "backend_alembic_versions_0001_initial_migration_py",
- "target": "0001_initial_migration_upgrade"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/versions/0001_initial_migration.py",
- "source_location": "L288",
- "weight": 1.0,
- "_src": "backend_alembic_versions_0001_initial_migration_py",
- "_tgt": "0001_initial_migration_downgrade",
- "confidence_score": 1.0,
- "source": "backend_alembic_versions_0001_initial_migration_py",
- "target": "0001_initial_migration_downgrade"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/versions/0001_initial_migration.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "0001_initial_migration_rationale_1",
- "_tgt": "backend_alembic_versions_0001_initial_migration_py",
- "confidence_score": 1.0,
- "source": "backend_alembic_versions_0001_initial_migration_py",
- "target": "0001_initial_migration_rationale_1"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/versions/0005_grocery_item_external_id.py",
- "source_location": "L26",
- "weight": 1.0,
- "_src": "backend_alembic_versions_0005_grocery_item_external_id_py",
- "_tgt": "0005_grocery_item_external_id_upgrade",
- "confidence_score": 1.0,
- "source": "backend_alembic_versions_0005_grocery_item_external_id_py",
- "target": "0005_grocery_item_external_id_upgrade"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/versions/0005_grocery_item_external_id.py",
- "source_location": "L45",
- "weight": 1.0,
- "_src": "backend_alembic_versions_0005_grocery_item_external_id_py",
- "_tgt": "0005_grocery_item_external_id_downgrade",
- "confidence_score": 1.0,
- "source": "backend_alembic_versions_0005_grocery_item_external_id_py",
- "target": "0005_grocery_item_external_id_downgrade"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/versions/0005_grocery_item_external_id.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "0005_grocery_item_external_id_rationale_1",
- "_tgt": "backend_alembic_versions_0005_grocery_item_external_id_py",
- "confidence_score": 1.0,
- "source": "backend_alembic_versions_0005_grocery_item_external_id_py",
- "target": "0005_grocery_item_external_id_rationale_1"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py",
- "source_location": "L19",
- "weight": 1.0,
- "_src": "backend_alembic_versions_0006_recipe_engine_thin_py",
- "_tgt": "0006_recipe_engine_thin_upgrade",
- "confidence_score": 1.0,
- "source": "backend_alembic_versions_0006_recipe_engine_thin_py",
- "target": "0006_recipe_engine_thin_upgrade"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py",
- "source_location": "L88",
- "weight": 1.0,
- "_src": "backend_alembic_versions_0006_recipe_engine_thin_py",
- "_tgt": "0006_recipe_engine_thin_downgrade",
- "confidence_score": 1.0,
- "source": "backend_alembic_versions_0006_recipe_engine_thin_py",
- "target": "0006_recipe_engine_thin_downgrade"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/versions/0006_recipe_engine_thin.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "0006_recipe_engine_thin_rationale_1",
- "_tgt": "backend_alembic_versions_0006_recipe_engine_thin_py",
- "confidence_score": 1.0,
- "source": "backend_alembic_versions_0006_recipe_engine_thin_py",
- "target": "0006_recipe_engine_thin_rationale_1"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/versions/0007_seed_recipes.py",
- "source_location": "L82",
- "weight": 1.0,
- "_src": "backend_alembic_versions_0007_seed_recipes_py",
- "_tgt": "0007_seed_recipes_upsert_ingredients",
- "confidence_score": 1.0,
- "source": "backend_alembic_versions_0007_seed_recipes_py",
- "target": "0007_seed_recipes_upsert_ingredients"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/versions/0007_seed_recipes.py",
- "source_location": "L767",
- "weight": 1.0,
- "_src": "backend_alembic_versions_0007_seed_recipes_py",
- "_tgt": "0007_seed_recipes_insert_recipes",
- "confidence_score": 1.0,
- "source": "backend_alembic_versions_0007_seed_recipes_py",
- "target": "0007_seed_recipes_insert_recipes"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/versions/0007_seed_recipes.py",
- "source_location": "L823",
- "weight": 1.0,
- "_src": "backend_alembic_versions_0007_seed_recipes_py",
- "_tgt": "0007_seed_recipes_delete_recipes",
- "confidence_score": 1.0,
- "source": "backend_alembic_versions_0007_seed_recipes_py",
- "target": "0007_seed_recipes_delete_recipes"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/versions/0007_seed_recipes.py",
- "source_location": "L832",
- "weight": 1.0,
- "_src": "backend_alembic_versions_0007_seed_recipes_py",
- "_tgt": "0007_seed_recipes_delete_ingredients",
- "confidence_score": 1.0,
- "source": "backend_alembic_versions_0007_seed_recipes_py",
- "target": "0007_seed_recipes_delete_ingredients"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/versions/0007_seed_recipes.py",
- "source_location": "L846",
- "weight": 1.0,
- "_src": "backend_alembic_versions_0007_seed_recipes_py",
- "_tgt": "0007_seed_recipes_upgrade",
- "confidence_score": 1.0,
- "source": "backend_alembic_versions_0007_seed_recipes_py",
- "target": "0007_seed_recipes_upgrade"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/versions/0007_seed_recipes.py",
- "source_location": "L851",
- "weight": 1.0,
- "_src": "backend_alembic_versions_0007_seed_recipes_py",
- "_tgt": "0007_seed_recipes_downgrade",
- "confidence_score": 1.0,
- "source": "backend_alembic_versions_0007_seed_recipes_py",
- "target": "0007_seed_recipes_downgrade"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/versions/0007_seed_recipes.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "0007_seed_recipes_rationale_1",
- "_tgt": "backend_alembic_versions_0007_seed_recipes_py",
- "confidence_score": 1.0,
- "source": "backend_alembic_versions_0007_seed_recipes_py",
- "target": "0007_seed_recipes_rationale_1"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/versions/0007_seed_recipes.py",
- "source_location": "L847",
- "weight": 1.0,
- "_src": "0007_seed_recipes_upgrade",
- "_tgt": "0007_seed_recipes_upsert_ingredients",
- "confidence_score": 1.0,
- "source": "0007_seed_recipes_upsert_ingredients",
- "target": "0007_seed_recipes_upgrade"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/versions/0007_seed_recipes.py",
- "source_location": "L848",
- "weight": 1.0,
- "_src": "0007_seed_recipes_upgrade",
- "_tgt": "0007_seed_recipes_insert_recipes",
- "confidence_score": 1.0,
- "source": "0007_seed_recipes_insert_recipes",
- "target": "0007_seed_recipes_upgrade"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/versions/0007_seed_recipes.py",
- "source_location": "L852",
- "weight": 1.0,
- "_src": "0007_seed_recipes_downgrade",
- "_tgt": "0007_seed_recipes_delete_recipes",
- "confidence_score": 1.0,
- "source": "0007_seed_recipes_delete_recipes",
- "target": "0007_seed_recipes_downgrade"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/versions/0007_seed_recipes.py",
- "source_location": "L853",
- "weight": 1.0,
- "_src": "0007_seed_recipes_downgrade",
- "_tgt": "0007_seed_recipes_delete_ingredients",
- "confidence_score": 1.0,
- "source": "0007_seed_recipes_delete_ingredients",
- "target": "0007_seed_recipes_downgrade"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/versions/0007_seed_recipes.py",
- "source_location": "L833",
- "weight": 1.0,
- "_src": "0007_seed_recipes_rationale_833",
- "_tgt": "0007_seed_recipes_delete_ingredients",
- "confidence_score": 1.0,
- "source": "0007_seed_recipes_delete_ingredients",
- "target": "0007_seed_recipes_rationale_833"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/versions/0008_phase5_orchestration.py",
- "source_location": "L17",
- "weight": 1.0,
- "_src": "backend_alembic_versions_0008_phase5_orchestration_py",
- "_tgt": "0008_phase5_orchestration_upgrade",
- "confidence_score": 1.0,
- "source": "backend_alembic_versions_0008_phase5_orchestration_py",
- "target": "0008_phase5_orchestration_upgrade"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/versions/0008_phase5_orchestration.py",
- "source_location": "L67",
- "weight": 1.0,
- "_src": "backend_alembic_versions_0008_phase5_orchestration_py",
- "_tgt": "0008_phase5_orchestration_downgrade",
- "confidence_score": 1.0,
- "source": "backend_alembic_versions_0008_phase5_orchestration_py",
- "target": "0008_phase5_orchestration_downgrade"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/versions/0008_phase5_orchestration.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "0008_phase5_orchestration_rationale_1",
- "_tgt": "backend_alembic_versions_0008_phase5_orchestration_py",
- "confidence_score": 1.0,
- "source": "backend_alembic_versions_0008_phase5_orchestration_py",
- "target": "0008_phase5_orchestration_rationale_1"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/versions/0009_phase6_reminded_at.py",
- "source_location": "L16",
- "weight": 1.0,
- "_src": "backend_alembic_versions_0009_phase6_reminded_at_py",
- "_tgt": "0009_phase6_reminded_at_upgrade",
- "confidence_score": 1.0,
- "source": "backend_alembic_versions_0009_phase6_reminded_at_py",
- "target": "0009_phase6_reminded_at_upgrade"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/versions/0009_phase6_reminded_at.py",
- "source_location": "L23",
- "weight": 1.0,
- "_src": "backend_alembic_versions_0009_phase6_reminded_at_py",
- "_tgt": "0009_phase6_reminded_at_downgrade",
- "confidence_score": 1.0,
- "source": "backend_alembic_versions_0009_phase6_reminded_at_py",
- "target": "0009_phase6_reminded_at_downgrade"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/versions/0009_phase6_reminded_at.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "0009_phase6_reminded_at_rationale_1",
- "_tgt": "backend_alembic_versions_0009_phase6_reminded_at_py",
- "confidence_score": 1.0,
- "source": "backend_alembic_versions_0009_phase6_reminded_at_py",
- "target": "0009_phase6_reminded_at_rationale_1"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/versions/0010_auto_llm_source.py",
- "source_location": "L15",
- "weight": 1.0,
- "_src": "backend_alembic_versions_0010_auto_llm_source_py",
- "_tgt": "0010_auto_llm_source_upgrade",
- "confidence_score": 1.0,
- "source": "backend_alembic_versions_0010_auto_llm_source_py",
- "target": "0010_auto_llm_source_upgrade"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/versions/0010_auto_llm_source.py",
- "source_location": "L21",
- "weight": 1.0,
- "_src": "backend_alembic_versions_0010_auto_llm_source_py",
- "_tgt": "0010_auto_llm_source_downgrade",
- "confidence_score": 1.0,
- "source": "backend_alembic_versions_0010_auto_llm_source_py",
- "target": "0010_auto_llm_source_downgrade"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/alembic/versions/0010_auto_llm_source.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "0010_auto_llm_source_rationale_1",
- "_tgt": "backend_alembic_versions_0010_auto_llm_source_py",
- "confidence_score": 1.0,
- "source": "backend_alembic_versions_0010_auto_llm_source_py",
- "target": "0010_auto_llm_source_rationale_1"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_alembic.py",
- "source_location": "L21",
- "weight": 1.0,
- "_src": "backend_tests_test_alembic_py",
- "_tgt": "test_alembic_test_alembic_upgrade_head_roundtrip",
- "confidence_score": 1.0,
- "source": "backend_tests_test_alembic_py",
- "target": "test_alembic_test_alembic_upgrade_head_roundtrip"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_alembic.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "test_alembic_rationale_1",
- "_tgt": "backend_tests_test_alembic_py",
- "confidence_score": 1.0,
- "source": "backend_tests_test_alembic_py",
- "target": "test_alembic_rationale_1"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_smoke.py",
- "source_location": "L15",
- "weight": 1.0,
- "_src": "backend_tests_test_smoke_py",
- "_tgt": "test_smoke_test_app_imports",
- "confidence_score": 1.0,
- "source": "backend_tests_test_smoke_py",
- "target": "test_smoke_test_app_imports"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_smoke.py",
- "source_location": "L21",
- "weight": 1.0,
- "_src": "backend_tests_test_smoke_py",
- "_tgt": "test_smoke_test_health",
- "confidence_score": 1.0,
- "source": "backend_tests_test_smoke_py",
- "target": "test_smoke_test_health"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_smoke.py",
- "source_location": "L28",
- "weight": 1.0,
- "_src": "backend_tests_test_smoke_py",
- "_tgt": "test_smoke_test_health_db",
- "confidence_score": 1.0,
- "source": "backend_tests_test_smoke_py",
- "target": "test_smoke_test_health_db"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_smoke.py",
- "source_location": "L49",
- "weight": 1.0,
- "_src": "backend_tests_test_smoke_py",
- "_tgt": "test_smoke_test_router_list_endpoints",
- "confidence_score": 1.0,
- "source": "backend_tests_test_smoke_py",
- "target": "test_smoke_test_router_list_endpoints"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_smoke.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "test_smoke_rationale_1",
- "_tgt": "backend_tests_test_smoke_py",
- "confidence_score": 1.0,
- "source": "backend_tests_test_smoke_py",
- "target": "test_smoke_rationale_1"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_smoke.py",
- "source_location": "L50",
- "weight": 1.0,
- "_src": "test_smoke_rationale_50",
- "_tgt": "test_smoke_test_router_list_endpoints",
- "confidence_score": 1.0,
- "source": "test_smoke_test_router_list_endpoints",
- "target": "test_smoke_rationale_50"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_auth.py",
- "source_location": "L25",
- "weight": 1.0,
- "_src": "backend_tests_test_auth_py",
- "_tgt": "test_auth_reload_settings",
- "confidence_score": 1.0,
- "source": "backend_tests_test_auth_py",
- "target": "test_auth_reload_settings"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_auth.py",
- "source_location": "L41",
- "weight": 1.0,
- "_src": "backend_tests_test_auth_py",
- "_tgt": "test_auth_test_admin_requires_token",
- "confidence_score": 1.0,
- "source": "backend_tests_test_auth_py",
- "target": "test_auth_test_admin_requires_token"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_auth.py",
- "source_location": "L55",
- "weight": 1.0,
- "_src": "backend_tests_test_auth_py",
- "_tgt": "test_auth_test_admin_logs_requires_token",
- "confidence_score": 1.0,
- "source": "backend_tests_test_auth_py",
- "target": "test_auth_test_admin_logs_requires_token"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_auth.py",
- "source_location": "L69",
- "weight": 1.0,
- "_src": "backend_tests_test_auth_py",
- "_tgt": "test_auth_test_session_required_for_mutation",
- "confidence_score": 1.0,
- "source": "backend_tests_test_auth_py",
- "target": "test_auth_test_session_required_for_mutation"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_auth.py",
- "source_location": "L79",
- "weight": 1.0,
- "_src": "backend_tests_test_auth_py",
- "_tgt": "test_auth_test_session_open_for_reads",
- "confidence_score": 1.0,
- "source": "backend_tests_test_auth_py",
- "target": "test_auth_test_session_open_for_reads"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_auth.py",
- "source_location": "L90",
- "weight": 1.0,
- "_src": "backend_tests_test_auth_py",
- "_tgt": "test_auth_test_session_login_logout",
- "confidence_score": 1.0,
- "source": "backend_tests_test_auth_py",
- "target": "test_auth_test_session_login_logout"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_auth.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "test_auth_rationale_1",
- "_tgt": "backend_tests_test_auth_py",
- "confidence_score": 1.0,
- "source": "backend_tests_test_auth_py",
- "target": "test_auth_rationale_1"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_auth.py",
- "source_location": "L26",
- "weight": 1.0,
- "_src": "test_auth_rationale_26",
- "_tgt": "test_auth_reload_settings",
- "confidence_score": 1.0,
- "source": "test_auth_reload_settings",
- "target": "test_auth_rationale_26"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_auth.py",
- "source_location": "L42",
- "weight": 1.0,
- "_src": "test_auth_rationale_42",
- "_tgt": "test_auth_test_admin_requires_token",
- "confidence_score": 1.0,
- "source": "test_auth_test_admin_requires_token",
- "target": "test_auth_rationale_42"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_auth.py",
- "source_location": "L70",
- "weight": 1.0,
- "_src": "test_auth_rationale_70",
- "_tgt": "test_auth_test_session_required_for_mutation",
- "confidence_score": 1.0,
- "source": "test_auth_test_session_required_for_mutation",
- "target": "test_auth_rationale_70"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_auth.py",
- "source_location": "L80",
- "weight": 1.0,
- "_src": "test_auth_rationale_80",
- "_tgt": "test_auth_test_session_open_for_reads",
- "confidence_score": 1.0,
- "source": "test_auth_test_session_open_for_reads",
- "target": "test_auth_rationale_80"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_scrape_endpoint.py",
- "source_location": "L20",
- "weight": 1.0,
- "_src": "backend_tests_test_scrape_endpoint_py",
- "_tgt": "test_scrape_endpoint_admin_token",
- "confidence_score": 1.0,
- "source": "backend_tests_test_scrape_endpoint_py",
- "target": "test_scrape_endpoint_admin_token"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_scrape_endpoint.py",
- "source_location": "L26",
- "weight": 1.0,
- "_src": "backend_tests_test_scrape_endpoint_py",
- "_tgt": "test_scrape_endpoint_test_scrape_returns_202_and_log_id",
- "confidence_score": 1.0,
- "source": "backend_tests_test_scrape_endpoint_py",
- "target": "test_scrape_endpoint_test_scrape_returns_202_and_log_id"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_scrape_endpoint.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "test_scrape_endpoint_rationale_1",
- "_tgt": "backend_tests_test_scrape_endpoint_py",
- "confidence_score": 1.0,
- "source": "backend_tests_test_scrape_endpoint_py",
- "target": "test_scrape_endpoint_rationale_1"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_scrape_endpoint.py",
- "source_location": "L27",
- "weight": 1.0,
- "_src": "test_scrape_endpoint_rationale_27",
- "_tgt": "test_scrape_endpoint_test_scrape_returns_202_and_log_id",
- "confidence_score": 1.0,
- "source": "test_scrape_endpoint_test_scrape_returns_202_and_log_id",
- "target": "test_scrape_endpoint_rationale_27"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_approval.py",
- "source_location": "L23",
- "weight": 1.0,
- "_src": "backend_tests_test_approval_py",
- "_tgt": "test_approval_test_issue_and_verify_token_roundtrip",
- "confidence_score": 1.0,
- "source": "backend_tests_test_approval_py",
- "target": "test_approval_test_issue_and_verify_token_roundtrip"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_approval.py",
- "source_location": "L32",
- "weight": 1.0,
- "_src": "backend_tests_test_approval_py",
- "_tgt": "test_approval_test_verify_rejects_tampered_token",
- "confidence_score": 1.0,
- "source": "backend_tests_test_approval_py",
- "target": "test_approval_test_verify_rejects_tampered_token"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_approval.py",
- "source_location": "L42",
- "weight": 1.0,
- "_src": "backend_tests_test_approval_py",
- "_tgt": "test_approval_test_verify_rejects_expired_token",
- "confidence_score": 1.0,
- "source": "backend_tests_test_approval_py",
- "target": "test_approval_test_verify_rejects_expired_token"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_approval.py",
- "source_location": "L74",
- "weight": 1.0,
- "_src": "backend_tests_test_approval_py",
- "_tgt": "test_approval_scenario",
- "confidence_score": 1.0,
- "source": "backend_tests_test_approval_py",
- "target": "test_approval_scenario"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_approval.py",
- "source_location": "L159",
- "weight": 1.0,
- "_src": "backend_tests_test_approval_py",
- "_tgt": "test_approval_test_consume_token_single_use",
- "confidence_score": 1.0,
- "source": "backend_tests_test_approval_py",
- "target": "test_approval_test_consume_token_single_use"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_approval.py",
- "source_location": "L186",
- "weight": 1.0,
- "_src": "backend_tests_test_approval_py",
- "_tgt": "test_approval_test_vote_get_renders_html",
- "confidence_score": 1.0,
- "source": "backend_tests_test_approval_py",
- "target": "test_approval_test_vote_get_renders_html"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_approval.py",
- "source_location": "L207",
- "weight": 1.0,
- "_src": "backend_tests_test_approval_py",
- "_tgt": "test_approval_test_vote_post_records_and_decides",
- "confidence_score": 1.0,
- "source": "backend_tests_test_approval_py",
- "target": "test_approval_test_vote_post_records_and_decides"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_approval.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "test_approval_rationale_1",
- "_tgt": "backend_tests_test_approval_py",
- "confidence_score": 1.0,
- "source": "backend_tests_test_approval_py",
- "target": "test_approval_rationale_1"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_approval.py",
- "source_location": "L43",
- "weight": 1.0,
- "_src": "test_approval_rationale_43",
- "_tgt": "test_approval_test_verify_rejects_expired_token",
- "confidence_score": 1.0,
- "source": "test_approval_test_verify_rejects_expired_token",
- "target": "test_approval_rationale_43"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_approval.py",
- "source_location": "L75",
- "weight": 1.0,
- "_src": "test_approval_rationale_75",
- "_tgt": "test_approval_scenario",
- "confidence_score": 1.0,
- "source": "test_approval_scenario",
- "target": "test_approval_rationale_75"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_approval.py",
- "source_location": "L208",
- "weight": 1.0,
- "_src": "test_approval_rationale_208",
- "_tgt": "test_approval_test_vote_post_records_and_decides",
- "confidence_score": 1.0,
- "source": "test_approval_test_vote_post_records_and_decides",
- "target": "test_approval_rationale_208"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_config.py",
- "source_location": "L12",
- "weight": 1.0,
- "_src": "backend_tests_test_config_py",
- "_tgt": "test_config_test_database_url_required",
- "confidence_score": 1.0,
- "source": "backend_tests_test_config_py",
- "target": "test_config_test_database_url_required"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_config.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "test_config_rationale_1",
- "_tgt": "backend_tests_test_config_py",
- "confidence_score": 1.0,
- "source": "backend_tests_test_config_py",
- "target": "test_config_rationale_1"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_config.py",
- "source_location": "L13",
- "weight": 1.0,
- "_src": "test_config_rationale_13",
- "_tgt": "test_config_test_database_url_required",
- "confidence_score": 1.0,
- "source": "test_config_test_database_url_required",
- "target": "test_config_rationale_13"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_ingredient_schema.py",
- "source_location": "L7",
- "weight": 1.0,
- "_src": "backend_tests_test_ingredient_schema_py",
- "_tgt": "test_ingredient_schema_test_ingredient_create_normalizes_aliases",
- "confidence_score": 1.0,
- "source": "backend_tests_test_ingredient_schema_py",
- "target": "test_ingredient_schema_test_ingredient_create_normalizes_aliases"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_ingredient_schema.py",
- "source_location": "L18",
- "weight": 1.0,
- "_src": "backend_tests_test_ingredient_schema_py",
- "_tgt": "test_ingredient_schema_test_ingredient_match_read_round_trip",
- "confidence_score": 1.0,
- "source": "backend_tests_test_ingredient_schema_py",
- "target": "test_ingredient_schema_test_ingredient_match_read_round_trip"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_recipe_schema.py",
- "source_location": "L9",
- "weight": 1.0,
- "_src": "backend_tests_test_recipe_schema_py",
- "_tgt": "test_recipe_schema_test_recipe_create_requires_canonical_ingredient_ids",
- "confidence_score": 1.0,
- "source": "backend_tests_test_recipe_schema_py",
- "target": "test_recipe_schema_test_recipe_create_requires_canonical_ingredient_ids"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_recipe_schema.py",
- "source_location": "L25",
- "weight": 1.0,
- "_src": "backend_tests_test_recipe_schema_py",
- "_tgt": "test_recipe_schema_test_recipe_create_rejects_empty_ingredients",
- "confidence_score": 1.0,
- "source": "backend_tests_test_recipe_schema_py",
- "target": "test_recipe_schema_test_recipe_create_rejects_empty_ingredients"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_recipe_schema.py",
- "source_location": "L39",
- "weight": 1.0,
- "_src": "backend_tests_test_recipe_schema_py",
- "_tgt": "test_recipe_schema_test_resolve_ingredient_request_round_trip",
- "confidence_score": 1.0,
- "source": "backend_tests_test_recipe_schema_py",
- "target": "test_recipe_schema_test_resolve_ingredient_request_round_trip"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_recipe_api.py",
- "source_location": "L6",
- "weight": 1.0,
- "_src": "backend_tests_test_recipe_api_py",
- "_tgt": "test_recipe_api_admin_headers",
- "confidence_score": 1.0,
- "source": "backend_tests_test_recipe_api_py",
- "target": "test_recipe_api_admin_headers"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_recipe_api.py",
- "source_location": "L10",
- "weight": 1.0,
- "_src": "backend_tests_test_recipe_api_py",
- "_tgt": "test_recipe_api_new_ingredient",
- "confidence_score": 1.0,
- "source": "backend_tests_test_recipe_api_py",
- "target": "test_recipe_api_new_ingredient"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_recipe_api.py",
- "source_location": "L20",
- "weight": 1.0,
- "_src": "backend_tests_test_recipe_api_py",
- "_tgt": "test_recipe_api_test_create_recipe_with_canonical_ingredients",
- "confidence_score": 1.0,
- "source": "backend_tests_test_recipe_api_py",
- "target": "test_recipe_api_test_create_recipe_with_canonical_ingredients"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_recipe_api.py",
- "source_location": "L45",
- "weight": 1.0,
- "_src": "backend_tests_test_recipe_api_py",
- "_tgt": "test_recipe_api_test_create_recipe_rejects_unknown_ingredient_id",
- "confidence_score": 1.0,
- "source": "backend_tests_test_recipe_api_py",
- "target": "test_recipe_api_test_create_recipe_rejects_unknown_ingredient_id"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_recipe_api.py",
- "source_location": "L63",
- "weight": 1.0,
- "_src": "backend_tests_test_recipe_api_py",
- "_tgt": "test_recipe_api_test_list_recipes_returns_seeded_data",
- "confidence_score": 1.0,
- "source": "backend_tests_test_recipe_api_py",
- "target": "test_recipe_api_test_list_recipes_returns_seeded_data"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_recipe_api.py",
- "source_location": "L14",
- "weight": 1.0,
- "_src": "test_recipe_api_new_ingredient",
- "_tgt": "test_recipe_api_admin_headers",
- "confidence_score": 1.0,
- "source": "test_recipe_api_admin_headers",
- "target": "test_recipe_api_new_ingredient"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_recipe_api.py",
- "source_location": "L38",
- "weight": 1.0,
- "_src": "test_recipe_api_test_create_recipe_with_canonical_ingredients",
- "_tgt": "test_recipe_api_admin_headers",
- "confidence_score": 1.0,
- "source": "test_recipe_api_admin_headers",
- "target": "test_recipe_api_test_create_recipe_with_canonical_ingredients"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_recipe_api.py",
- "source_location": "L59",
- "weight": 1.0,
- "_src": "test_recipe_api_test_create_recipe_rejects_unknown_ingredient_id",
- "_tgt": "test_recipe_api_admin_headers",
- "confidence_score": 1.0,
- "source": "test_recipe_api_admin_headers",
- "target": "test_recipe_api_test_create_recipe_rejects_unknown_ingredient_id"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_recipe_api.py",
- "source_location": "L78",
- "weight": 1.0,
- "_src": "test_recipe_api_test_list_recipes_returns_seeded_data",
- "_tgt": "test_recipe_api_admin_headers",
- "confidence_score": 1.0,
- "source": "test_recipe_api_admin_headers",
- "target": "test_recipe_api_test_list_recipes_returns_seeded_data"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_recipe_api.py",
- "source_location": "L21",
- "weight": 1.0,
- "_src": "test_recipe_api_test_create_recipe_with_canonical_ingredients",
- "_tgt": "test_recipe_api_new_ingredient",
- "confidence_score": 1.0,
- "source": "test_recipe_api_new_ingredient",
- "target": "test_recipe_api_test_create_recipe_with_canonical_ingredients"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_recipe_api.py",
- "source_location": "L64",
- "weight": 1.0,
- "_src": "test_recipe_api_test_list_recipes_returns_seeded_data",
- "_tgt": "test_recipe_api_new_ingredient",
- "confidence_score": 1.0,
- "source": "test_recipe_api_new_ingredient",
- "target": "test_recipe_api_test_list_recipes_returns_seeded_data"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_resolve_ingredient.py",
- "source_location": "L6",
- "weight": 1.0,
- "_src": "backend_tests_test_resolve_ingredient_py",
- "_tgt": "test_resolve_ingredient_admin",
- "confidence_score": 1.0,
- "source": "backend_tests_test_resolve_ingredient_py",
- "target": "test_resolve_ingredient_admin"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_resolve_ingredient.py",
- "source_location": "L10",
- "weight": 1.0,
- "_src": "backend_tests_test_resolve_ingredient_py",
- "_tgt": "test_resolve_ingredient_seed_ingredient",
- "confidence_score": 1.0,
- "source": "backend_tests_test_resolve_ingredient_py",
- "target": "test_resolve_ingredient_seed_ingredient"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_resolve_ingredient.py",
- "source_location": "L19",
- "weight": 1.0,
- "_src": "backend_tests_test_resolve_ingredient_py",
- "_tgt": "test_resolve_ingredient_test_resolve_ingredient_returns_top_three_candidates",
- "confidence_score": 1.0,
- "source": "backend_tests_test_resolve_ingredient_py",
- "target": "test_resolve_ingredient_test_resolve_ingredient_returns_top_three_candidates"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_resolve_ingredient.py",
- "source_location": "L38",
- "weight": 1.0,
- "_src": "backend_tests_test_resolve_ingredient_py",
- "_tgt": "test_resolve_ingredient_test_resolve_ingredient_handles_no_unit",
- "confidence_score": 1.0,
- "source": "backend_tests_test_resolve_ingredient_py",
- "target": "test_resolve_ingredient_test_resolve_ingredient_handles_no_unit"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_resolve_ingredient.py",
- "source_location": "L14",
- "weight": 1.0,
- "_src": "test_resolve_ingredient_seed_ingredient",
- "_tgt": "test_resolve_ingredient_admin",
- "confidence_score": 1.0,
- "source": "test_resolve_ingredient_admin",
- "target": "test_resolve_ingredient_seed_ingredient"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_resolve_ingredient.py",
- "source_location": "L27",
- "weight": 1.0,
- "_src": "test_resolve_ingredient_test_resolve_ingredient_returns_top_three_candidates",
- "_tgt": "test_resolve_ingredient_admin",
- "confidence_score": 1.0,
- "source": "test_resolve_ingredient_admin",
- "target": "test_resolve_ingredient_test_resolve_ingredient_returns_top_three_candidates"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_resolve_ingredient.py",
- "source_location": "L43",
- "weight": 1.0,
- "_src": "test_resolve_ingredient_test_resolve_ingredient_handles_no_unit",
- "_tgt": "test_resolve_ingredient_admin",
- "confidence_score": 1.0,
- "source": "test_resolve_ingredient_admin",
- "target": "test_resolve_ingredient_test_resolve_ingredient_handles_no_unit"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_resolve_ingredient.py",
- "source_location": "L20",
- "weight": 1.0,
- "_src": "test_resolve_ingredient_test_resolve_ingredient_returns_top_three_candidates",
- "_tgt": "test_resolve_ingredient_seed_ingredient",
- "confidence_score": 1.0,
- "source": "test_resolve_ingredient_seed_ingredient",
- "target": "test_resolve_ingredient_test_resolve_ingredient_returns_top_three_candidates"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_resolve_ingredient.py",
- "source_location": "L39",
- "weight": 1.0,
- "_src": "test_resolve_ingredient_test_resolve_ingredient_handles_no_unit",
- "_tgt": "test_resolve_ingredient_seed_ingredient",
- "confidence_score": 1.0,
- "source": "test_resolve_ingredient_seed_ingredient",
- "target": "test_resolve_ingredient_test_resolve_ingredient_handles_no_unit"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_matcher.py",
- "source_location": "L6",
- "weight": 1.0,
- "_src": "backend_tests_test_matcher_py",
- "_tgt": "test_matcher_test_build_match_pool_includes_aliases",
- "confidence_score": 1.0,
- "source": "backend_tests_test_matcher_py",
- "target": "test_matcher_test_build_match_pool_includes_aliases"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_matcher.py",
- "source_location": "L18",
- "weight": 1.0,
- "_src": "backend_tests_test_matcher_py",
- "_tgt": "test_matcher_test_rank_candidates_top_n_with_threshold",
- "confidence_score": 1.0,
- "source": "backend_tests_test_matcher_py",
- "target": "test_matcher_test_rank_candidates_top_n_with_threshold"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_matcher.py",
- "source_location": "L36",
- "weight": 1.0,
- "_src": "backend_tests_test_matcher_py",
- "_tgt": "test_matcher_test_rank_candidates_drops_below_threshold",
- "confidence_score": 1.0,
- "source": "backend_tests_test_matcher_py",
- "target": "test_matcher_test_rank_candidates_drops_below_threshold"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_match_hook.py",
- "source_location": "L6",
- "weight": 1.0,
- "_src": "backend_tests_test_match_hook_py",
- "_tgt": "test_match_hook_test_run_match_job_persists_top_matches",
- "confidence_score": 1.0,
- "source": "backend_tests_test_match_hook_py",
- "target": "test_match_hook_test_run_match_job_persists_top_matches"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_match_hook.py",
- "source_location": "L7",
- "weight": 1.0,
- "_src": "test_match_hook_rationale_7",
- "_tgt": "test_match_hook_test_run_match_job_persists_top_matches",
- "confidence_score": 1.0,
- "source": "test_match_hook_test_run_match_job_persists_top_matches",
- "target": "test_match_hook_rationale_7"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/conftest.py",
- "source_location": "L45",
- "weight": 1.0,
- "_src": "backend_tests_conftest_py",
- "_tgt": "conftest_resolve_test_dsn",
- "confidence_score": 1.0,
- "source": "backend_tests_conftest_py",
- "target": "conftest_resolve_test_dsn"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/conftest.py",
- "source_location": "L54",
- "weight": 1.0,
- "_src": "backend_tests_conftest_py",
- "_tgt": "conftest_postgres_reachable",
- "confidence_score": 1.0,
- "source": "backend_tests_conftest_py",
- "target": "conftest_postgres_reachable"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/conftest.py",
- "source_location": "L72",
- "weight": 1.0,
- "_src": "backend_tests_conftest_py",
- "_tgt": "conftest_pytest_collection_modifyitems",
- "confidence_score": 1.0,
- "source": "backend_tests_conftest_py",
- "target": "conftest_pytest_collection_modifyitems"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/conftest.py",
- "source_location": "L84",
- "weight": 1.0,
- "_src": "backend_tests_conftest_py",
- "_tgt": "conftest_pytest_configure",
- "confidence_score": 1.0,
- "source": "backend_tests_conftest_py",
- "target": "conftest_pytest_configure"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/conftest.py",
- "source_location": "L105",
- "weight": 1.0,
- "_src": "backend_tests_conftest_py",
- "_tgt": "conftest_schema",
- "confidence_score": 1.0,
- "source": "backend_tests_conftest_py",
- "target": "conftest_schema"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/conftest.py",
- "source_location": "L129",
- "weight": 1.0,
- "_src": "backend_tests_conftest_py",
- "_tgt": "conftest_engine",
- "confidence_score": 1.0,
- "source": "backend_tests_conftest_py",
- "target": "conftest_engine"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/conftest.py",
- "source_location": "L142",
- "weight": 1.0,
- "_src": "backend_tests_conftest_py",
- "_tgt": "conftest_db",
- "confidence_score": 1.0,
- "source": "backend_tests_conftest_py",
- "target": "conftest_db"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/conftest.py",
- "source_location": "L159",
- "weight": 1.0,
- "_src": "backend_tests_conftest_py",
- "_tgt": "conftest_db_session",
- "confidence_score": 1.0,
- "source": "backend_tests_conftest_py",
- "target": "conftest_db_session"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/conftest.py",
- "source_location": "L172",
- "weight": 1.0,
- "_src": "backend_tests_conftest_py",
- "_tgt": "conftest_client",
- "confidence_score": 1.0,
- "source": "backend_tests_conftest_py",
- "target": "conftest_client"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/conftest.py",
- "source_location": "L193",
- "weight": 1.0,
- "_src": "backend_tests_conftest_py",
- "_tgt": "conftest_client_no_db",
- "confidence_score": 1.0,
- "source": "backend_tests_conftest_py",
- "target": "conftest_client_no_db"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/conftest.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "conftest_rationale_1",
- "_tgt": "backend_tests_conftest_py",
- "confidence_score": 1.0,
- "source": "backend_tests_conftest_py",
- "target": "conftest_rationale_1"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/conftest.py",
- "source_location": "L73",
- "weight": 1.0,
- "_src": "conftest_rationale_73",
- "_tgt": "conftest_pytest_collection_modifyitems",
- "confidence_score": 1.0,
- "source": "conftest_pytest_collection_modifyitems",
- "target": "conftest_rationale_73"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/conftest.py",
- "source_location": "L143",
- "weight": 1.0,
- "_src": "conftest_rationale_143",
- "_tgt": "conftest_db",
- "confidence_score": 1.0,
- "source": "conftest_db",
- "target": "conftest_rationale_143"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/conftest.py",
- "source_location": "L160",
- "weight": 1.0,
- "_src": "conftest_rationale_160",
- "_tgt": "conftest_db_session",
- "confidence_score": 1.0,
- "source": "conftest_db_session",
- "target": "conftest_rationale_160"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/conftest.py",
- "source_location": "L173",
- "weight": 1.0,
- "_src": "conftest_rationale_173",
- "_tgt": "conftest_client",
- "confidence_score": 1.0,
- "source": "conftest_client",
- "target": "conftest_rationale_173"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/conftest.py",
- "source_location": "L194",
- "weight": 1.0,
- "_src": "conftest_rationale_194",
- "_tgt": "conftest_client_no_db",
- "confidence_score": 1.0,
- "source": "conftest_client_no_db",
- "target": "conftest_rationale_194"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_ingredient_api.py",
- "source_location": "L6",
- "weight": 1.0,
- "_src": "backend_tests_test_ingredient_api_py",
- "_tgt": "test_ingredient_api_admin_headers",
- "confidence_score": 1.0,
- "source": "backend_tests_test_ingredient_api_py",
- "target": "test_ingredient_api_admin_headers"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_ingredient_api.py",
- "source_location": "L10",
- "weight": 1.0,
- "_src": "backend_tests_test_ingredient_api_py",
- "_tgt": "test_ingredient_api_test_create_ingredient_returns_201_with_id",
- "confidence_score": 1.0,
- "source": "backend_tests_test_ingredient_api_py",
- "target": "test_ingredient_api_test_create_ingredient_returns_201_with_id"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_ingredient_api.py",
- "source_location": "L24",
- "weight": 1.0,
- "_src": "backend_tests_test_ingredient_api_py",
- "_tgt": "test_ingredient_api_test_create_ingredient_rejects_duplicate_name",
- "confidence_score": 1.0,
- "source": "backend_tests_test_ingredient_api_py",
- "target": "test_ingredient_api_test_create_ingredient_rejects_duplicate_name"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_ingredient_api.py",
- "source_location": "L32",
- "weight": 1.0,
- "_src": "backend_tests_test_ingredient_api_py",
- "_tgt": "test_ingredient_api_test_list_ingredients_supports_search",
- "confidence_score": 1.0,
- "source": "backend_tests_test_ingredient_api_py",
- "target": "test_ingredient_api_test_list_ingredients_supports_search"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_ingredient_api.py",
- "source_location": "L44",
- "weight": 1.0,
- "_src": "backend_tests_test_ingredient_api_py",
- "_tgt": "test_ingredient_api_test_create_ingredient_requires_admin_token",
- "confidence_score": 1.0,
- "source": "backend_tests_test_ingredient_api_py",
- "target": "test_ingredient_api_test_create_ingredient_requires_admin_token"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_ingredient_api.py",
- "source_location": "L50",
- "weight": 1.0,
- "_src": "backend_tests_test_ingredient_api_py",
- "_tgt": "test_ingredient_api_test_update_ingredient_replaces_aliases",
- "confidence_score": 1.0,
- "source": "backend_tests_test_ingredient_api_py",
- "target": "test_ingredient_api_test_update_ingredient_replaces_aliases"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_ingredient_api.py",
- "source_location": "L66",
- "weight": 1.0,
- "_src": "backend_tests_test_ingredient_api_py",
- "_tgt": "test_ingredient_api_seed_grocery",
- "confidence_score": 1.0,
- "source": "backend_tests_test_ingredient_api_py",
- "target": "test_ingredient_api_seed_grocery"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_ingredient_api.py",
- "source_location": "L90",
- "weight": 1.0,
- "_src": "backend_tests_test_ingredient_api_py",
- "_tgt": "test_ingredient_api_test_pin_manual_match",
- "confidence_score": 1.0,
- "source": "backend_tests_test_ingredient_api_py",
- "target": "test_ingredient_api_test_pin_manual_match"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_ingredient_api.py",
- "source_location": "L110",
- "weight": 1.0,
- "_src": "backend_tests_test_ingredient_api_py",
- "_tgt": "test_ingredient_api_test_unpin_manual_match",
- "confidence_score": 1.0,
- "source": "backend_tests_test_ingredient_api_py",
- "target": "test_ingredient_api_test_unpin_manual_match"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_ingredient_api.py",
- "source_location": "L128",
- "weight": 1.0,
- "_src": "backend_tests_test_ingredient_api_py",
- "_tgt": "test_ingredient_api_test_delete_ingredient_removes_row",
- "confidence_score": 1.0,
- "source": "backend_tests_test_ingredient_api_py",
- "target": "test_ingredient_api_test_delete_ingredient_removes_row"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_ingredient_api.py",
- "source_location": "L17",
- "weight": 1.0,
- "_src": "test_ingredient_api_test_create_ingredient_returns_201_with_id",
- "_tgt": "test_ingredient_api_admin_headers",
- "confidence_score": 1.0,
- "source": "test_ingredient_api_admin_headers",
- "target": "test_ingredient_api_test_create_ingredient_returns_201_with_id"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_ingredient_api.py",
- "source_location": "L26",
- "weight": 1.0,
- "_src": "test_ingredient_api_test_create_ingredient_rejects_duplicate_name",
- "_tgt": "test_ingredient_api_admin_headers",
- "confidence_score": 1.0,
- "source": "test_ingredient_api_admin_headers",
- "target": "test_ingredient_api_test_create_ingredient_rejects_duplicate_name"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_ingredient_api.py",
- "source_location": "L36",
- "weight": 1.0,
- "_src": "test_ingredient_api_test_list_ingredients_supports_search",
- "_tgt": "test_ingredient_api_admin_headers",
- "confidence_score": 1.0,
- "source": "test_ingredient_api_admin_headers",
- "target": "test_ingredient_api_test_list_ingredients_supports_search"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_ingredient_api.py",
- "source_location": "L54",
- "weight": 1.0,
- "_src": "test_ingredient_api_test_update_ingredient_replaces_aliases",
- "_tgt": "test_ingredient_api_admin_headers",
- "confidence_score": 1.0,
- "source": "test_ingredient_api_admin_headers",
- "target": "test_ingredient_api_test_update_ingredient_replaces_aliases"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_ingredient_api.py",
- "source_location": "L94",
- "weight": 1.0,
- "_src": "test_ingredient_api_test_pin_manual_match",
- "_tgt": "test_ingredient_api_admin_headers",
- "confidence_score": 1.0,
- "source": "test_ingredient_api_admin_headers",
- "target": "test_ingredient_api_test_pin_manual_match"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_ingredient_api.py",
- "source_location": "L114",
- "weight": 1.0,
- "_src": "test_ingredient_api_test_unpin_manual_match",
- "_tgt": "test_ingredient_api_admin_headers",
- "confidence_score": 1.0,
- "source": "test_ingredient_api_admin_headers",
- "target": "test_ingredient_api_test_unpin_manual_match"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_ingredient_api.py",
- "source_location": "L132",
- "weight": 1.0,
- "_src": "test_ingredient_api_test_delete_ingredient_removes_row",
- "_tgt": "test_ingredient_api_admin_headers",
- "confidence_score": 1.0,
- "source": "test_ingredient_api_admin_headers",
- "target": "test_ingredient_api_test_delete_ingredient_removes_row"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_ingredient_api.py",
- "source_location": "L97",
- "weight": 1.0,
- "_src": "test_ingredient_api_test_pin_manual_match",
- "_tgt": "test_ingredient_api_seed_grocery",
- "confidence_score": 1.0,
- "source": "test_ingredient_api_seed_grocery",
- "target": "test_ingredient_api_test_pin_manual_match"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_ingredient_api.py",
- "source_location": "L117",
- "weight": 1.0,
- "_src": "test_ingredient_api_test_unpin_manual_match",
- "_tgt": "test_ingredient_api_seed_grocery",
- "confidence_score": 1.0,
- "source": "test_ingredient_api_seed_grocery",
- "target": "test_ingredient_api_test_unpin_manual_match"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_never_suggest_api.py",
- "source_location": "L6",
- "weight": 1.0,
- "_src": "backend_tests_test_never_suggest_api_py",
- "_tgt": "test_never_suggest_api_admin",
- "confidence_score": 1.0,
- "source": "backend_tests_test_never_suggest_api_py",
- "target": "test_never_suggest_api_admin"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_never_suggest_api.py",
- "source_location": "L10",
- "weight": 1.0,
- "_src": "backend_tests_test_never_suggest_api_py",
- "_tgt": "test_never_suggest_api_seed_family",
- "confidence_score": 1.0,
- "source": "backend_tests_test_never_suggest_api_py",
- "target": "test_never_suggest_api_seed_family"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_never_suggest_api.py",
- "source_location": "L29",
- "weight": 1.0,
- "_src": "backend_tests_test_never_suggest_api_py",
- "_tgt": "test_never_suggest_api_test_block_ingredient",
- "confidence_score": 1.0,
- "source": "backend_tests_test_never_suggest_api_py",
- "target": "test_never_suggest_api_test_block_ingredient"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_never_suggest_api.py",
- "source_location": "L46",
- "weight": 1.0,
- "_src": "backend_tests_test_never_suggest_api_py",
- "_tgt": "test_never_suggest_api_test_list_never_suggest_for_family",
- "confidence_score": 1.0,
- "source": "backend_tests_test_never_suggest_api_py",
- "target": "test_never_suggest_api_test_list_never_suggest_for_family"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_never_suggest_api.py",
- "source_location": "L63",
- "weight": 1.0,
- "_src": "backend_tests_test_never_suggest_api_py",
- "_tgt": "test_never_suggest_api_test_unblock_removes_row",
- "confidence_score": 1.0,
- "source": "backend_tests_test_never_suggest_api_py",
- "target": "test_never_suggest_api_test_unblock_removes_row"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_never_suggest_api.py",
- "source_location": "L34",
- "weight": 1.0,
- "_src": "test_never_suggest_api_test_block_ingredient",
- "_tgt": "test_never_suggest_api_admin",
- "confidence_score": 1.0,
- "source": "test_never_suggest_api_admin",
- "target": "test_never_suggest_api_test_block_ingredient"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_never_suggest_api.py",
- "source_location": "L51",
- "weight": 1.0,
- "_src": "test_never_suggest_api_test_list_never_suggest_for_family",
- "_tgt": "test_never_suggest_api_admin",
- "confidence_score": 1.0,
- "source": "test_never_suggest_api_admin",
- "target": "test_never_suggest_api_test_list_never_suggest_for_family"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_never_suggest_api.py",
- "source_location": "L68",
- "weight": 1.0,
- "_src": "test_never_suggest_api_test_unblock_removes_row",
- "_tgt": "test_never_suggest_api_admin",
- "confidence_score": 1.0,
- "source": "test_never_suggest_api_admin",
- "target": "test_never_suggest_api_test_unblock_removes_row"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_never_suggest_api.py",
- "source_location": "L30",
- "weight": 1.0,
- "_src": "test_never_suggest_api_test_block_ingredient",
- "_tgt": "test_never_suggest_api_seed_family",
- "confidence_score": 1.0,
- "source": "test_never_suggest_api_seed_family",
- "target": "test_never_suggest_api_test_block_ingredient"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_never_suggest_api.py",
- "source_location": "L47",
- "weight": 1.0,
- "_src": "test_never_suggest_api_test_list_never_suggest_for_family",
- "_tgt": "test_never_suggest_api_seed_family",
- "confidence_score": 1.0,
- "source": "test_never_suggest_api_seed_family",
- "target": "test_never_suggest_api_test_list_never_suggest_for_family"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_never_suggest_api.py",
- "source_location": "L64",
- "weight": 1.0,
- "_src": "test_never_suggest_api_test_unblock_removes_row",
- "_tgt": "test_never_suggest_api_seed_family",
- "confidence_score": 1.0,
- "source": "test_never_suggest_api_seed_family",
- "target": "test_never_suggest_api_test_unblock_removes_row"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_thin_phase4_smoke.py",
- "source_location": "L7",
- "weight": 1.0,
- "_src": "backend_tests_test_thin_phase4_smoke_py",
- "_tgt": "test_thin_phase4_smoke_admin",
- "confidence_score": 1.0,
- "source": "backend_tests_test_thin_phase4_smoke_py",
- "target": "test_thin_phase4_smoke_admin"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_thin_phase4_smoke.py",
- "source_location": "L11",
- "weight": 1.0,
- "_src": "backend_tests_test_thin_phase4_smoke_py",
- "_tgt": "test_thin_phase4_smoke_test_seed_data_present_and_resolvable",
- "confidence_score": 1.0,
- "source": "backend_tests_test_thin_phase4_smoke_py",
- "target": "test_thin_phase4_smoke_test_seed_data_present_and_resolvable"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_thin_phase4_smoke.py",
- "source_location": "L18",
- "weight": 1.0,
- "_src": "backend_tests_test_thin_phase4_smoke_py",
- "_tgt": "test_thin_phase4_smoke_test_resolve_against_seeded_ingredients",
- "confidence_score": 1.0,
- "source": "backend_tests_test_thin_phase4_smoke_py",
- "target": "test_thin_phase4_smoke_test_resolve_against_seeded_ingredients"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_thin_phase4_smoke.py",
- "source_location": "L30",
- "weight": 1.0,
- "_src": "backend_tests_test_thin_phase4_smoke_py",
- "_tgt": "test_thin_phase4_smoke_test_match_job_runs_against_seeded_data",
- "confidence_score": 1.0,
- "source": "backend_tests_test_thin_phase4_smoke_py",
- "target": "test_thin_phase4_smoke_test_match_job_runs_against_seeded_data"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_thin_phase4_smoke.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "test_thin_phase4_smoke_rationale_1",
- "_tgt": "backend_tests_test_thin_phase4_smoke_py",
- "confidence_score": 1.0,
- "source": "backend_tests_test_thin_phase4_smoke_py",
- "target": "test_thin_phase4_smoke_rationale_1"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_thin_phase4_smoke.py",
- "source_location": "L22",
- "weight": 1.0,
- "_src": "test_thin_phase4_smoke_test_resolve_against_seeded_ingredients",
- "_tgt": "test_thin_phase4_smoke_admin",
- "confidence_score": 1.0,
- "source": "test_thin_phase4_smoke_admin",
- "target": "test_thin_phase4_smoke_test_resolve_against_seeded_ingredients"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_cost.py",
- "source_location": "L10",
- "weight": 1.0,
- "_src": "backend_tests_test_planner_cost_py",
- "_tgt": "test_planner_cost_ingredient",
- "confidence_score": 1.0,
- "source": "backend_tests_test_planner_cost_py",
- "target": "test_planner_cost_ingredient"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_cost.py",
- "source_location": "L14",
- "weight": 1.0,
- "_src": "backend_tests_test_planner_cost_py",
- "_tgt": "test_planner_cost_match",
- "confidence_score": 1.0,
- "source": "backend_tests_test_planner_cost_py",
- "target": "test_planner_cost_match"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_cost.py",
- "source_location": "L25",
- "weight": 1.0,
- "_src": "backend_tests_test_planner_cost_py",
- "_tgt": "test_planner_cost_test_compute_recipe_cost_sums_ingredient_costs",
- "confidence_score": 1.0,
- "source": "backend_tests_test_planner_cost_py",
- "target": "test_planner_cost_test_compute_recipe_cost_sums_ingredient_costs"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_cost.py",
- "source_location": "L51",
- "weight": 1.0,
- "_src": "backend_tests_test_planner_cost_py",
- "_tgt": "test_planner_cost_test_unmatched_ingredient_zero_cost_and_savings",
- "confidence_score": 1.0,
- "source": "backend_tests_test_planner_cost_py",
- "target": "test_planner_cost_test_unmatched_ingredient_zero_cost_and_savings"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_cost.py",
- "source_location": "L65",
- "weight": 1.0,
- "_src": "backend_tests_test_planner_cost_py",
- "_tgt": "test_planner_cost_test_pantry_hits_counted",
- "confidence_score": 1.0,
- "source": "backend_tests_test_planner_cost_py",
- "target": "test_planner_cost_test_pantry_hits_counted"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_cost.py",
- "source_location": "L37",
- "weight": 1.0,
- "_src": "test_planner_cost_test_compute_recipe_cost_sums_ingredient_costs",
- "_tgt": "test_planner_cost_ingredient",
- "confidence_score": 1.0,
- "source": "test_planner_cost_ingredient",
- "target": "test_planner_cost_test_compute_recipe_cost_sums_ingredient_costs"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_cost.py",
- "source_location": "L56",
- "weight": 1.0,
- "_src": "test_planner_cost_test_unmatched_ingredient_zero_cost_and_savings",
- "_tgt": "test_planner_cost_ingredient",
- "confidence_score": 1.0,
- "source": "test_planner_cost_ingredient",
- "target": "test_planner_cost_test_unmatched_ingredient_zero_cost_and_savings"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_cost.py",
- "source_location": "L75",
- "weight": 1.0,
- "_src": "test_planner_cost_test_pantry_hits_counted",
- "_tgt": "test_planner_cost_ingredient",
- "confidence_score": 1.0,
- "source": "test_planner_cost_ingredient",
- "target": "test_planner_cost_test_pantry_hits_counted"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_cost.py",
- "source_location": "L30",
- "weight": 1.0,
- "_src": "test_planner_cost_test_compute_recipe_cost_sums_ingredient_costs",
- "_tgt": "test_planner_cost_match",
- "confidence_score": 1.0,
- "source": "test_planner_cost_match",
- "target": "test_planner_cost_test_compute_recipe_cost_sums_ingredient_costs"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_cost.py",
- "source_location": "L70",
- "weight": 1.0,
- "_src": "test_planner_cost_test_pantry_hits_counted",
- "_tgt": "test_planner_cost_match",
- "confidence_score": 1.0,
- "source": "test_planner_cost_match",
- "target": "test_planner_cost_test_pantry_hits_counted"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L15",
- "weight": 1.0,
- "_src": "backend_tests_test_planner_filter_py",
- "_tgt": "test_planner_filter_recipe",
- "confidence_score": 1.0,
- "source": "backend_tests_test_planner_filter_py",
- "target": "test_planner_filter_recipe"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L35",
- "weight": 1.0,
- "_src": "backend_tests_test_planner_filter_py",
- "_tgt": "test_planner_filter_cost",
- "confidence_score": 1.0,
- "source": "backend_tests_test_planner_filter_py",
- "target": "test_planner_filter_cost"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L48",
- "weight": 1.0,
- "_src": "backend_tests_test_planner_filter_py",
- "_tgt": "test_planner_filter_test_filter_blocks_by_never_suggest_ingredient",
- "confidence_score": 1.0,
- "source": "backend_tests_test_planner_filter_py",
- "target": "test_planner_filter_test_filter_blocks_by_never_suggest_ingredient"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L70",
- "weight": 1.0,
- "_src": "backend_tests_test_planner_filter_py",
- "_tgt": "test_planner_filter_test_filter_blocks_by_never_suggest_recipe",
- "confidence_score": 1.0,
- "source": "backend_tests_test_planner_filter_py",
- "target": "test_planner_filter_test_filter_blocks_by_never_suggest_recipe"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L87",
- "weight": 1.0,
- "_src": "backend_tests_test_planner_filter_py",
- "_tgt": "test_planner_filter_test_filter_blocks_by_recency",
- "confidence_score": 1.0,
- "source": "backend_tests_test_planner_filter_py",
- "target": "test_planner_filter_test_filter_blocks_by_recency"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L104",
- "weight": 1.0,
- "_src": "backend_tests_test_planner_filter_py",
- "_tgt": "test_planner_filter_test_filter_blocks_by_calories",
- "confidence_score": 1.0,
- "source": "backend_tests_test_planner_filter_py",
- "target": "test_planner_filter_test_filter_blocks_by_calories"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L122",
- "weight": 1.0,
- "_src": "backend_tests_test_planner_filter_py",
- "_tgt": "test_planner_filter_test_filter_blocks_by_time",
- "confidence_score": 1.0,
- "source": "backend_tests_test_planner_filter_py",
- "target": "test_planner_filter_test_filter_blocks_by_time"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L140",
- "weight": 1.0,
- "_src": "backend_tests_test_planner_filter_py",
- "_tgt": "test_planner_filter_test_filter_blocks_by_cost",
- "confidence_score": 1.0,
- "source": "backend_tests_test_planner_filter_py",
- "target": "test_planner_filter_test_filter_blocks_by_cost"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L158",
- "weight": 1.0,
- "_src": "backend_tests_test_planner_filter_py",
- "_tgt": "test_planner_filter_test_filter_passes_when_calorie_target_is_none",
- "confidence_score": 1.0,
- "source": "backend_tests_test_planner_filter_py",
- "target": "test_planner_filter_test_filter_passes_when_calorie_target_is_none"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L174",
- "weight": 1.0,
- "_src": "backend_tests_test_planner_filter_py",
- "_tgt": "test_planner_filter_test_filter_blocks_recipe_with_null_calories_when_target_set",
- "confidence_score": 1.0,
- "source": "backend_tests_test_planner_filter_py",
- "target": "test_planner_filter_test_filter_blocks_recipe_with_null_calories_when_target_set"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L49",
- "weight": 1.0,
- "_src": "test_planner_filter_test_filter_blocks_by_never_suggest_ingredient",
- "_tgt": "test_planner_filter_recipe",
- "confidence_score": 1.0,
- "source": "test_planner_filter_recipe",
- "target": "test_planner_filter_test_filter_blocks_by_never_suggest_ingredient"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L71",
- "weight": 1.0,
- "_src": "test_planner_filter_test_filter_blocks_by_never_suggest_recipe",
- "_tgt": "test_planner_filter_recipe",
- "confidence_score": 1.0,
- "source": "test_planner_filter_recipe",
- "target": "test_planner_filter_test_filter_blocks_by_never_suggest_recipe"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L88",
- "weight": 1.0,
- "_src": "test_planner_filter_test_filter_blocks_by_recency",
- "_tgt": "test_planner_filter_recipe",
- "confidence_score": 1.0,
- "source": "test_planner_filter_recipe",
- "target": "test_planner_filter_test_filter_blocks_by_recency"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L105",
- "weight": 1.0,
- "_src": "test_planner_filter_test_filter_blocks_by_calories",
- "_tgt": "test_planner_filter_recipe",
- "confidence_score": 1.0,
- "source": "test_planner_filter_recipe",
- "target": "test_planner_filter_test_filter_blocks_by_calories"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L123",
- "weight": 1.0,
- "_src": "test_planner_filter_test_filter_blocks_by_time",
- "_tgt": "test_planner_filter_recipe",
- "confidence_score": 1.0,
- "source": "test_planner_filter_recipe",
- "target": "test_planner_filter_test_filter_blocks_by_time"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L141",
- "weight": 1.0,
- "_src": "test_planner_filter_test_filter_blocks_by_cost",
- "_tgt": "test_planner_filter_recipe",
- "confidence_score": 1.0,
- "source": "test_planner_filter_recipe",
- "target": "test_planner_filter_test_filter_blocks_by_cost"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L159",
- "weight": 1.0,
- "_src": "test_planner_filter_test_filter_passes_when_calorie_target_is_none",
- "_tgt": "test_planner_filter_recipe",
- "confidence_score": 1.0,
- "source": "test_planner_filter_recipe",
- "target": "test_planner_filter_test_filter_passes_when_calorie_target_is_none"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L175",
- "weight": 1.0,
- "_src": "test_planner_filter_test_filter_blocks_recipe_with_null_calories_when_target_set",
- "_tgt": "test_planner_filter_recipe",
- "confidence_score": 1.0,
- "source": "test_planner_filter_recipe",
- "target": "test_planner_filter_test_filter_blocks_recipe_with_null_calories_when_target_set"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L57",
- "weight": 1.0,
- "_src": "test_planner_filter_test_filter_blocks_by_never_suggest_ingredient",
- "_tgt": "test_planner_filter_cost",
- "confidence_score": 1.0,
- "source": "test_planner_filter_cost",
- "target": "test_planner_filter_test_filter_blocks_by_never_suggest_ingredient"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L75",
- "weight": 1.0,
- "_src": "test_planner_filter_test_filter_blocks_by_never_suggest_recipe",
- "_tgt": "test_planner_filter_cost",
- "confidence_score": 1.0,
- "source": "test_planner_filter_cost",
- "target": "test_planner_filter_test_filter_blocks_by_never_suggest_recipe"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L93",
- "weight": 1.0,
- "_src": "test_planner_filter_test_filter_blocks_by_recency",
- "_tgt": "test_planner_filter_cost",
- "confidence_score": 1.0,
- "source": "test_planner_filter_cost",
- "target": "test_planner_filter_test_filter_blocks_by_recency"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L110",
- "weight": 1.0,
- "_src": "test_planner_filter_test_filter_blocks_by_calories",
- "_tgt": "test_planner_filter_cost",
- "confidence_score": 1.0,
- "source": "test_planner_filter_cost",
- "target": "test_planner_filter_test_filter_blocks_by_calories"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L128",
- "weight": 1.0,
- "_src": "test_planner_filter_test_filter_blocks_by_time",
- "_tgt": "test_planner_filter_cost",
- "confidence_score": 1.0,
- "source": "test_planner_filter_cost",
- "target": "test_planner_filter_test_filter_blocks_by_time"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L146",
- "weight": 1.0,
- "_src": "test_planner_filter_test_filter_blocks_by_cost",
- "_tgt": "test_planner_filter_cost",
- "confidence_score": 1.0,
- "source": "test_planner_filter_cost",
- "target": "test_planner_filter_test_filter_blocks_by_cost"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L163",
- "weight": 1.0,
- "_src": "test_planner_filter_test_filter_passes_when_calorie_target_is_none",
- "_tgt": "test_planner_filter_cost",
- "confidence_score": 1.0,
- "source": "test_planner_filter_cost",
- "target": "test_planner_filter_test_filter_passes_when_calorie_target_is_none"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_filter.py",
- "source_location": "L179",
- "weight": 1.0,
- "_src": "test_planner_filter_test_filter_blocks_recipe_with_null_calories_when_target_set",
- "_tgt": "test_planner_filter_cost",
- "confidence_score": 1.0,
- "source": "test_planner_filter_cost",
- "target": "test_planner_filter_test_filter_blocks_recipe_with_null_calories_when_target_set"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_score.py",
- "source_location": "L18",
- "weight": 1.0,
- "_src": "backend_tests_test_planner_score_py",
- "_tgt": "test_planner_score_test_time_bonus_capped_at_ideal",
- "confidence_score": 1.0,
- "source": "backend_tests_test_planner_score_py",
- "target": "test_planner_score_test_time_bonus_capped_at_ideal"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_score.py",
- "source_location": "L23",
- "weight": 1.0,
- "_src": "backend_tests_test_planner_score_py",
- "_tgt": "test_planner_score_test_time_bonus_decays_to_zero_at_full",
- "confidence_score": 1.0,
- "source": "backend_tests_test_planner_score_py",
- "target": "test_planner_score_test_time_bonus_decays_to_zero_at_full"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_score.py",
- "source_location": "L27",
- "weight": 1.0,
- "_src": "backend_tests_test_planner_score_py",
- "_tgt": "test_planner_score_test_time_bonus_linear_midpoint",
- "confidence_score": 1.0,
- "source": "backend_tests_test_planner_score_py",
- "target": "test_planner_score_test_time_bonus_linear_midpoint"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_score.py",
- "source_location": "L32",
- "weight": 1.0,
- "_src": "backend_tests_test_planner_score_py",
- "_tgt": "test_planner_score_test_recency_bonus_full_when_long_ago",
- "confidence_score": 1.0,
- "source": "backend_tests_test_planner_score_py",
- "target": "test_planner_score_test_recency_bonus_full_when_long_ago"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_score.py",
- "source_location": "L38",
- "weight": 1.0,
- "_src": "backend_tests_test_planner_score_py",
- "_tgt": "test_planner_score_test_recency_bonus_zero_when_just_eligible",
- "confidence_score": 1.0,
- "source": "backend_tests_test_planner_score_py",
- "target": "test_planner_score_test_recency_bonus_zero_when_just_eligible"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_score.py",
- "source_location": "L45",
- "weight": 1.0,
- "_src": "backend_tests_test_planner_score_py",
- "_tgt": "test_planner_score_test_recency_bonus_full_when_never_cooked",
- "confidence_score": 1.0,
- "source": "backend_tests_test_planner_score_py",
- "target": "test_planner_score_test_recency_bonus_full_when_never_cooked"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_score.py",
- "source_location": "L49",
- "weight": 1.0,
- "_src": "backend_tests_test_planner_score_py",
- "_tgt": "test_planner_score_test_normalize_savings_minmax",
- "confidence_score": 1.0,
- "source": "backend_tests_test_planner_score_py",
- "target": "test_planner_score_test_normalize_savings_minmax"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_score.py",
- "source_location": "L54",
- "weight": 1.0,
- "_src": "backend_tests_test_planner_score_py",
- "_tgt": "test_planner_score_test_normalize_savings_uniform_returns_zeros",
- "confidence_score": 1.0,
- "source": "backend_tests_test_planner_score_py",
- "target": "test_planner_score_test_normalize_savings_uniform_returns_zeros"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_score.py",
- "source_location": "L59",
- "weight": 1.0,
- "_src": "backend_tests_test_planner_score_py",
- "_tgt": "test_planner_score_test_score_recipes_orders_by_combined_score",
- "confidence_score": 1.0,
- "source": "backend_tests_test_planner_score_py",
- "target": "test_planner_score_test_score_recipes_orders_by_combined_score"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_select.py",
- "source_location": "L12",
- "weight": 1.0,
- "_src": "backend_tests_test_planner_select_py",
- "_tgt": "test_planner_select_mk",
- "confidence_score": 1.0,
- "source": "backend_tests_test_planner_select_py",
- "target": "test_planner_select_mk"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_select.py",
- "source_location": "L33",
- "weight": 1.0,
- "_src": "backend_tests_test_planner_select_py",
- "_tgt": "test_planner_select_test_diversity_penalty_zero_when_all_unique",
- "confidence_score": 1.0,
- "source": "backend_tests_test_planner_select_py",
- "target": "test_planner_select_test_diversity_penalty_zero_when_all_unique"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_select.py",
- "source_location": "L40",
- "weight": 1.0,
- "_src": "backend_tests_test_planner_select_py",
- "_tgt": "test_planner_select_test_diversity_penalty_three_chickens",
- "confidence_score": 1.0,
- "source": "backend_tests_test_planner_select_py",
- "target": "test_planner_select_test_diversity_penalty_three_chickens"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_select.py",
- "source_location": "L49",
- "weight": 1.0,
- "_src": "backend_tests_test_planner_select_py",
- "_tgt": "test_planner_select_test_select_set_picks_diverse_over_homogeneous",
- "confidence_score": 1.0,
- "source": "backend_tests_test_planner_select_py",
- "target": "test_planner_select_test_select_set_picks_diverse_over_homogeneous"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_select.py",
- "source_location": "L68",
- "weight": 1.0,
- "_src": "backend_tests_test_planner_select_py",
- "_tgt": "test_planner_select_test_select_set_handles_too_few",
- "confidence_score": 1.0,
- "source": "backend_tests_test_planner_select_py",
- "target": "test_planner_select_test_select_set_handles_too_few"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_select.py",
- "source_location": "L75",
- "weight": 1.0,
- "_src": "backend_tests_test_planner_select_py",
- "_tgt": "test_planner_select_test_select_set_empty_input",
- "confidence_score": 1.0,
- "source": "backend_tests_test_planner_select_py",
- "target": "test_planner_select_test_select_set_empty_input"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_select.py",
- "source_location": "L34",
- "weight": 1.0,
- "_src": "test_planner_select_test_diversity_penalty_zero_when_all_unique",
- "_tgt": "test_planner_select_mk",
- "confidence_score": 1.0,
- "source": "test_planner_select_mk",
- "target": "test_planner_select_test_diversity_penalty_zero_when_all_unique"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_select.py",
- "source_location": "L41",
- "weight": 1.0,
- "_src": "test_planner_select_test_diversity_penalty_three_chickens",
- "_tgt": "test_planner_select_mk",
- "confidence_score": 1.0,
- "source": "test_planner_select_mk",
- "target": "test_planner_select_test_diversity_penalty_three_chickens"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_select.py",
- "source_location": "L56",
- "weight": 1.0,
- "_src": "test_planner_select_test_select_set_picks_diverse_over_homogeneous",
- "_tgt": "test_planner_select_mk",
- "confidence_score": 1.0,
- "source": "test_planner_select_mk",
- "target": "test_planner_select_test_select_set_picks_diverse_over_homogeneous"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_select.py",
- "source_location": "L69",
- "weight": 1.0,
- "_src": "test_planner_select_test_select_set_handles_too_few",
- "_tgt": "test_planner_select_mk",
- "confidence_score": 1.0,
- "source": "test_planner_select_mk",
- "target": "test_planner_select_test_select_set_handles_too_few"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_select.py",
- "source_location": "L50",
- "weight": 1.0,
- "_src": "test_planner_select_rationale_50",
- "_tgt": "test_planner_select_test_select_set_picks_diverse_over_homogeneous",
- "confidence_score": 1.0,
- "source": "test_planner_select_test_select_set_picks_diverse_over_homogeneous",
- "target": "test_planner_select_rationale_50"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_generate.py",
- "source_location": "L10",
- "weight": 1.0,
- "_src": "backend_tests_test_planner_generate_py",
- "_tgt": "test_planner_generate_test_generate_meal_plan_against_seeded_data",
- "confidence_score": 1.0,
- "source": "backend_tests_test_planner_generate_py",
- "target": "test_planner_generate_test_generate_meal_plan_against_seeded_data"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_planner_generate.py",
- "source_location": "L11",
- "weight": 1.0,
- "_src": "test_planner_generate_rationale_11",
- "_tgt": "test_planner_generate_test_generate_meal_plan_against_seeded_data",
- "confidence_score": 1.0,
- "source": "test_planner_generate_test_generate_meal_plan_against_seeded_data",
- "target": "test_planner_generate_rationale_11"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_meal_plan_generate_api.py",
- "source_location": "L10",
- "weight": 1.0,
- "_src": "backend_tests_test_meal_plan_generate_api_py",
- "_tgt": "test_meal_plan_generate_api_admin",
- "confidence_score": 1.0,
- "source": "backend_tests_test_meal_plan_generate_api_py",
- "target": "test_meal_plan_generate_api_admin"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_meal_plan_generate_api.py",
- "source_location": "L15",
- "weight": 1.0,
- "_src": "backend_tests_test_meal_plan_generate_api_py",
- "_tgt": "test_meal_plan_generate_api_family_with_groceries",
- "confidence_score": 1.0,
- "source": "backend_tests_test_meal_plan_generate_api_py",
- "target": "test_meal_plan_generate_api_family_with_groceries"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_meal_plan_generate_api.py",
- "source_location": "L50",
- "weight": 1.0,
- "_src": "backend_tests_test_meal_plan_generate_api_py",
- "_tgt": "test_meal_plan_generate_api_test_generate_endpoint_returns_meal_plan",
- "confidence_score": 1.0,
- "source": "backend_tests_test_meal_plan_generate_api_py",
- "target": "test_meal_plan_generate_api_test_generate_endpoint_returns_meal_plan"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_meal_plan_generate_api.py",
- "source_location": "L64",
- "weight": 1.0,
- "_src": "backend_tests_test_meal_plan_generate_api_py",
- "_tgt": "test_meal_plan_generate_api_test_generate_endpoint_requires_admin_token",
- "confidence_score": 1.0,
- "source": "backend_tests_test_meal_plan_generate_api_py",
- "target": "test_meal_plan_generate_api_test_generate_endpoint_requires_admin_token"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_meal_plan_generate_api.py",
- "source_location": "L73",
- "weight": 1.0,
- "_src": "backend_tests_test_meal_plan_generate_api_py",
- "_tgt": "test_meal_plan_generate_api_test_generate_endpoint_returns_404_for_unknown_family",
- "confidence_score": 1.0,
- "source": "backend_tests_test_meal_plan_generate_api_py",
- "target": "test_meal_plan_generate_api_test_generate_endpoint_returns_404_for_unknown_family"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_meal_plan_generate_api.py",
- "source_location": "L55",
- "weight": 1.0,
- "_src": "test_meal_plan_generate_api_test_generate_endpoint_returns_meal_plan",
- "_tgt": "test_meal_plan_generate_api_admin",
- "confidence_score": 1.0,
- "source": "test_meal_plan_generate_api_admin",
- "target": "test_meal_plan_generate_api_test_generate_endpoint_returns_meal_plan"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_meal_plan_generate_api.py",
- "source_location": "L78",
- "weight": 1.0,
- "_src": "test_meal_plan_generate_api_test_generate_endpoint_returns_404_for_unknown_family",
- "_tgt": "test_meal_plan_generate_api_admin",
- "confidence_score": 1.0,
- "source": "test_meal_plan_generate_api_admin",
- "target": "test_meal_plan_generate_api_test_generate_endpoint_returns_404_for_unknown_family"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L34",
- "weight": 1.0,
- "_src": "backend_tests_test_swiftly_auth_py",
- "_tgt": "test_swiftly_auth_clear_cache",
- "confidence_score": 1.0,
- "source": "backend_tests_test_swiftly_auth_py",
- "target": "test_swiftly_auth_clear_cache"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L40",
- "weight": 1.0,
- "_src": "backend_tests_test_swiftly_auth_py",
- "_tgt": "test_swiftly_auth_b64url",
- "confidence_score": 1.0,
- "source": "backend_tests_test_swiftly_auth_py",
- "target": "test_swiftly_auth_b64url"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L44",
- "weight": 1.0,
- "_src": "backend_tests_test_swiftly_auth_py",
- "_tgt": "test_swiftly_auth_make_jwt",
- "confidence_score": 1.0,
- "source": "backend_tests_test_swiftly_auth_py",
- "target": "test_swiftly_auth_make_jwt"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L53",
- "weight": 1.0,
- "_src": "backend_tests_test_swiftly_auth_py",
- "_tgt": "test_swiftly_auth_config_response",
- "confidence_score": 1.0,
- "source": "backend_tests_test_swiftly_auth_py",
- "target": "test_swiftly_auth_config_response"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L60",
- "weight": 1.0,
- "_src": "backend_tests_test_swiftly_auth_py",
- "_tgt": "test_swiftly_auth_signup_response",
- "confidence_score": 1.0,
- "source": "backend_tests_test_swiftly_auth_py",
- "target": "test_swiftly_auth_signup_response"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L71",
- "weight": 1.0,
- "_src": "backend_tests_test_swiftly_auth_py",
- "_tgt": "test_swiftly_auth_test_get_token_mints_fresh_when_cache_empty",
- "confidence_score": 1.0,
- "source": "backend_tests_test_swiftly_auth_py",
- "target": "test_swiftly_auth_test_get_token_mints_fresh_when_cache_empty"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L99",
- "weight": 1.0,
- "_src": "backend_tests_test_swiftly_auth_py",
- "_tgt": "test_swiftly_auth_test_get_token_returns_cached_without_reminting",
- "confidence_score": 1.0,
- "source": "backend_tests_test_swiftly_auth_py",
- "target": "test_swiftly_auth_test_get_token_returns_cached_without_reminting"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L118",
- "weight": 1.0,
- "_src": "backend_tests_test_swiftly_auth_py",
- "_tgt": "test_swiftly_auth_test_get_token_remints_when_cached_token_near_expiry",
- "confidence_score": 1.0,
- "source": "backend_tests_test_swiftly_auth_py",
- "target": "test_swiftly_auth_test_get_token_remints_when_cached_token_near_expiry"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L140",
- "weight": 1.0,
- "_src": "backend_tests_test_swiftly_auth_py",
- "_tgt": "test_swiftly_auth_test_mint_raises_on_firebase_non_200",
- "confidence_score": 1.0,
- "source": "backend_tests_test_swiftly_auth_py",
- "target": "test_swiftly_auth_test_mint_raises_on_firebase_non_200"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "test_swiftly_auth_rationale_1",
- "_tgt": "backend_tests_test_swiftly_auth_py",
- "confidence_score": 1.0,
- "source": "backend_tests_test_swiftly_auth_py",
- "target": "test_swiftly_auth_rationale_1"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L45",
- "weight": 1.0,
- "_src": "test_swiftly_auth_make_jwt",
- "_tgt": "test_swiftly_auth_b64url",
- "confidence_score": 1.0,
- "source": "test_swiftly_auth_b64url",
- "target": "test_swiftly_auth_make_jwt"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L74",
- "weight": 1.0,
- "_src": "test_swiftly_auth_test_get_token_mints_fresh_when_cache_empty",
- "_tgt": "test_swiftly_auth_make_jwt",
- "confidence_score": 1.0,
- "source": "test_swiftly_auth_make_jwt",
- "target": "test_swiftly_auth_test_get_token_mints_fresh_when_cache_empty"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L102",
- "weight": 1.0,
- "_src": "test_swiftly_auth_test_get_token_returns_cached_without_reminting",
- "_tgt": "test_swiftly_auth_make_jwt",
- "confidence_score": 1.0,
- "source": "test_swiftly_auth_make_jwt",
- "target": "test_swiftly_auth_test_get_token_returns_cached_without_reminting"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L122",
- "weight": 1.0,
- "_src": "test_swiftly_auth_test_get_token_remints_when_cached_token_near_expiry",
- "_tgt": "test_swiftly_auth_make_jwt",
- "confidence_score": 1.0,
- "source": "test_swiftly_auth_make_jwt",
- "target": "test_swiftly_auth_test_get_token_remints_when_cached_token_near_expiry"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L77",
- "weight": 1.0,
- "_src": "test_swiftly_auth_test_get_token_mints_fresh_when_cache_empty",
- "_tgt": "test_swiftly_auth_config_response",
- "confidence_score": 1.0,
- "source": "test_swiftly_auth_config_response",
- "target": "test_swiftly_auth_test_get_token_mints_fresh_when_cache_empty"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L105",
- "weight": 1.0,
- "_src": "test_swiftly_auth_test_get_token_returns_cached_without_reminting",
- "_tgt": "test_swiftly_auth_config_response",
- "confidence_score": 1.0,
- "source": "test_swiftly_auth_config_response",
- "target": "test_swiftly_auth_test_get_token_returns_cached_without_reminting"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L143",
- "weight": 1.0,
- "_src": "test_swiftly_auth_test_mint_raises_on_firebase_non_200",
- "_tgt": "test_swiftly_auth_config_response",
- "confidence_score": 1.0,
- "source": "test_swiftly_auth_config_response",
- "target": "test_swiftly_auth_test_mint_raises_on_firebase_non_200"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L81",
- "weight": 1.0,
- "_src": "test_swiftly_auth_test_get_token_mints_fresh_when_cache_empty",
- "_tgt": "test_swiftly_auth_signup_response",
- "confidence_score": 1.0,
- "source": "test_swiftly_auth_signup_response",
- "target": "test_swiftly_auth_test_get_token_mints_fresh_when_cache_empty"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L109",
- "weight": 1.0,
- "_src": "test_swiftly_auth_test_get_token_returns_cached_without_reminting",
- "_tgt": "test_swiftly_auth_signup_response",
- "confidence_score": 1.0,
- "source": "test_swiftly_auth_signup_response",
- "target": "test_swiftly_auth_test_get_token_returns_cached_without_reminting"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L132",
- "weight": 1.0,
- "_src": "test_swiftly_auth_test_get_token_remints_when_cached_token_near_expiry",
- "_tgt": "test_swiftly_auth_signup_response",
- "confidence_score": 1.0,
- "source": "test_swiftly_auth_signup_response",
- "target": "test_swiftly_auth_test_get_token_remints_when_cached_token_near_expiry"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L147",
- "weight": 1.0,
- "_src": "test_swiftly_auth_test_mint_raises_on_firebase_non_200",
- "_tgt": "test_swiftly_auth_signup_response",
- "confidence_score": 1.0,
- "source": "test_swiftly_auth_signup_response",
- "target": "test_swiftly_auth_test_mint_raises_on_firebase_non_200"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L72",
- "weight": 1.0,
- "_src": "test_swiftly_auth_rationale_72",
- "_tgt": "test_swiftly_auth_test_get_token_mints_fresh_when_cache_empty",
- "confidence_score": 1.0,
- "source": "test_swiftly_auth_test_get_token_mints_fresh_when_cache_empty",
- "target": "test_swiftly_auth_rationale_72"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L100",
- "weight": 1.0,
- "_src": "test_swiftly_auth_rationale_100",
- "_tgt": "test_swiftly_auth_test_get_token_returns_cached_without_reminting",
- "confidence_score": 1.0,
- "source": "test_swiftly_auth_test_get_token_returns_cached_without_reminting",
- "target": "test_swiftly_auth_rationale_100"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L119",
- "weight": 1.0,
- "_src": "test_swiftly_auth_rationale_119",
- "_tgt": "test_swiftly_auth_test_get_token_remints_when_cached_token_near_expiry",
- "confidence_score": 1.0,
- "source": "test_swiftly_auth_test_get_token_remints_when_cached_token_near_expiry",
- "target": "test_swiftly_auth_rationale_119"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_auth.py",
- "source_location": "L141",
- "weight": 1.0,
- "_src": "test_swiftly_auth_rationale_141",
- "_tgt": "test_swiftly_auth_test_mint_raises_on_firebase_non_200",
- "confidence_score": 1.0,
- "source": "test_swiftly_auth_test_mint_raises_on_firebase_non_200",
- "target": "test_swiftly_auth_rationale_141"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L40",
- "weight": 1.0,
- "_src": "backend_tests_test_swiftly_api_py",
- "_tgt": "test_swiftly_api_test_parse_categories_fixture",
- "confidence_score": 1.0,
- "source": "backend_tests_test_swiftly_api_py",
- "target": "test_swiftly_api_test_parse_categories_fixture"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L57",
- "weight": 1.0,
- "_src": "backend_tests_test_swiftly_api_py",
- "_tgt": "test_swiftly_api_test_parse_category_response_fixture",
- "confidence_score": 1.0,
- "source": "backend_tests_test_swiftly_api_py",
- "target": "test_swiftly_api_test_parse_category_response_fixture"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L107",
- "weight": 1.0,
- "_src": "backend_tests_test_swiftly_api_py",
- "_tgt": "test_swiftly_api_test_map_product_returns_none_for_unparseable",
- "confidence_score": 1.0,
- "source": "backend_tests_test_swiftly_api_py",
- "target": "test_swiftly_api_test_map_product_returns_none_for_unparseable"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L121",
- "weight": 1.0,
- "_src": "backend_tests_test_swiftly_api_py",
- "_tgt": "test_swiftly_api_mock_response",
- "confidence_score": 1.0,
- "source": "backend_tests_test_swiftly_api_py",
- "target": "test_swiftly_api_mock_response"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L135",
- "weight": 1.0,
- "_src": "backend_tests_test_swiftly_api_py",
- "_tgt": "test_swiftly_api_test_swiftly_auth_error_on_401_from_api",
- "confidence_score": 1.0,
- "source": "backend_tests_test_swiftly_api_py",
- "target": "test_swiftly_api_test_swiftly_auth_error_on_401_from_api"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L146",
- "weight": 1.0,
- "_src": "backend_tests_test_swiftly_api_py",
- "_tgt": "test_swiftly_api_test_fetch_category_mints_token_when_none_pinned",
- "confidence_score": 1.0,
- "source": "backend_tests_test_swiftly_api_py",
- "target": "test_swiftly_api_test_fetch_category_mints_token_when_none_pinned"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L171",
- "weight": 1.0,
- "_src": "backend_tests_test_swiftly_api_py",
- "_tgt": "test_swiftly_api_test_background_runner_writes_failed_with_token_message",
- "confidence_score": 1.0,
- "source": "backend_tests_test_swiftly_api_py",
- "target": "test_swiftly_api_test_background_runner_writes_failed_with_token_message"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "test_swiftly_api_rationale_1",
- "_tgt": "backend_tests_test_swiftly_api_py",
- "confidence_score": 1.0,
- "source": "backend_tests_test_swiftly_api_py",
- "target": "test_swiftly_api_rationale_1"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L41",
- "weight": 1.0,
- "_src": "test_swiftly_api_rationale_41",
- "_tgt": "test_swiftly_api_test_parse_categories_fixture",
- "confidence_score": 1.0,
- "source": "test_swiftly_api_test_parse_categories_fixture",
- "target": "test_swiftly_api_rationale_41"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L58",
- "weight": 1.0,
- "_src": "test_swiftly_api_rationale_58",
- "_tgt": "test_swiftly_api_test_parse_category_response_fixture",
- "confidence_score": 1.0,
- "source": "test_swiftly_api_test_parse_category_response_fixture",
- "target": "test_swiftly_api_rationale_58"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L108",
- "weight": 1.0,
- "_src": "test_swiftly_api_rationale_108",
- "_tgt": "test_swiftly_api_test_map_product_returns_none_for_unparseable",
- "confidence_score": 1.0,
- "source": "test_swiftly_api_test_map_product_returns_none_for_unparseable",
- "target": "test_swiftly_api_rationale_108"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L139",
- "weight": 1.0,
- "_src": "test_swiftly_api_test_swiftly_auth_error_on_401_from_api",
- "_tgt": "test_swiftly_api_mock_response",
- "confidence_score": 1.0,
- "source": "test_swiftly_api_mock_response",
- "target": "test_swiftly_api_test_swiftly_auth_error_on_401_from_api"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L159",
- "weight": 1.0,
- "_src": "test_swiftly_api_test_fetch_category_mints_token_when_none_pinned",
- "_tgt": "test_swiftly_api_mock_response",
- "confidence_score": 1.0,
- "source": "test_swiftly_api_mock_response",
- "target": "test_swiftly_api_test_fetch_category_mints_token_when_none_pinned"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L136",
- "weight": 1.0,
- "_src": "test_swiftly_api_rationale_136",
- "_tgt": "test_swiftly_api_test_swiftly_auth_error_on_401_from_api",
- "confidence_score": 1.0,
- "source": "test_swiftly_api_test_swiftly_auth_error_on_401_from_api",
- "target": "test_swiftly_api_rationale_136"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L147",
- "weight": 1.0,
- "_src": "test_swiftly_api_rationale_147",
- "_tgt": "test_swiftly_api_test_fetch_category_mints_token_when_none_pinned",
- "confidence_score": 1.0,
- "source": "test_swiftly_api_test_fetch_category_mints_token_when_none_pinned",
- "target": "test_swiftly_api_rationale_147"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_swiftly_api.py",
- "source_location": "L172",
- "weight": 1.0,
- "_src": "test_swiftly_api_rationale_172",
- "_tgt": "test_swiftly_api_test_background_runner_writes_failed_with_token_message",
- "confidence_score": 1.0,
- "source": "test_swiftly_api_test_background_runner_writes_failed_with_token_message",
- "target": "test_swiftly_api_rationale_172"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_email_backend.py",
- "source_location": "L5",
- "weight": 1.0,
- "_src": "backend_tests_test_email_backend_py",
- "_tgt": "test_email_backend_test_sendgrid_send_calls_api",
- "confidence_score": 1.0,
- "source": "backend_tests_test_email_backend_py",
- "target": "test_email_backend_test_sendgrid_send_calls_api"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_email_backend.py",
- "source_location": "L26",
- "weight": 1.0,
- "_src": "backend_tests_test_email_backend_py",
- "_tgt": "test_email_backend_test_sendgrid_raises_on_4xx",
- "confidence_score": 1.0,
- "source": "backend_tests_test_email_backend_py",
- "target": "test_email_backend_test_sendgrid_raises_on_4xx"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_email_backend.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "test_email_backend_rationale_1",
- "_tgt": "backend_tests_test_email_backend_py",
- "confidence_score": 1.0,
- "source": "backend_tests_test_email_backend_py",
- "target": "test_email_backend_rationale_1"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L15",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_family",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_family"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L31",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_member",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_member"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L46",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_weekly_run",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_weekly_run"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L55",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_weekly_run_scraped",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_weekly_run_scraped"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L69",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_weekly_run_generated",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_weekly_run_generated"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L84",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_meal_plan",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_meal_plan"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L98",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_pending_item",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_pending_item"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L123",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_weekly_run_emailed",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_weekly_run_emailed"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L139",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_weekly_run_reminded",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_weekly_run_reminded"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L159",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_test_send_admin_alert_noop_when_email_unset",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_test_send_admin_alert_noop_when_email_unset"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L168",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_test_send_admin_alert_calls_backend",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_test_send_admin_alert_calls_backend"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L194",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_test_step_scrape_idempotent",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_test_step_scrape_idempotent"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L201",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_test_step_scrape_success",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_test_step_scrape_success"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L212",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_test_step_scrape_both_fail_marks_stale",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_test_step_scrape_both_fail_marks_stale"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L231",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_test_step_generate_idempotent",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_test_step_generate_idempotent"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L238",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_test_step_generate_creates_plan",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_test_step_generate_creates_plan"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L257",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_test_step_generate_records_error_on_failure",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_test_step_generate_records_error_on_failure"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L276",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_test_step_email_idempotent",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_test_step_email_idempotent"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L283",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_test_step_email_sends_per_member",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_test_step_email_sends_per_member"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L302",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_test_step_email_stale_banner",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_test_step_email_stale_banner"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L319",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_test_step_email_escapes_recipe_name",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_test_step_email_escapes_recipe_name"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L345",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_test_step_reminder_idempotent",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_test_step_reminder_idempotent"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L352",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_test_step_reminder_skips_when_not_emailed",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_test_step_reminder_skips_when_not_emailed"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L370",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_test_step_reminder_sends_to_non_voter",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_test_step_reminder_sends_to_non_voter"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L391",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_test_step_reminder_skips_voter",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_test_step_reminder_skips_voter"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L420",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_test_step_reminder_no_sends_when_all_voted",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_test_step_reminder_no_sends_when_all_voted"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L454",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_test_step_deadline_idempotent",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_test_step_deadline_idempotent"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L463",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_test_step_deadline_resolves_pending_to_approved",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_test_step_deadline_resolves_pending_to_approved"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L474",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_test_step_deadline_resolves_pending_to_denied",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_test_step_deadline_resolves_pending_to_denied"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L489",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_weekly_run_deadline_passed",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_weekly_run_deadline_passed"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L506",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_approved_item",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_approved_item"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L530",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_test_step_finalize_idempotent",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_test_step_finalize_idempotent"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L539",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_test_step_finalize_sends_shopping_list",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_test_step_finalize_sends_shopping_list"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L559",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_test_step_finalize_no_approved_sends_empty_message",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_test_step_finalize_no_approved_sends_empty_message"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L580",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_test_run_step_upserts_weekly_run",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_test_run_step_upserts_weekly_run"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L606",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_test_run_step_invalid_raises",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_test_run_step_invalid_raises"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L612",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_test_run_week_calls_all_steps",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_test_run_week_calls_all_steps"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L632",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_admin_client",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_admin_client"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L646",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_test_orchestrate_status_returns_list",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_test_orchestrate_status_returns_list"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L654",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_test_orchestrate_step_invalid_returns_400",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_test_orchestrate_step_invalid_returns_400"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L663",
- "weight": 1.0,
- "_src": "backend_tests_test_orchestrator_py",
- "_tgt": "test_orchestrator_test_orchestrate_run_week_returns_202",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_test_orchestrate_run_week_returns_202"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/test_orchestrator.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "test_orchestrator_rationale_1",
- "_tgt": "backend_tests_test_orchestrator_py",
- "confidence_score": 1.0,
- "source": "backend_tests_test_orchestrator_py",
- "target": "test_orchestrator_rationale_1"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "frontend/src/App.tsx",
- "source_location": "L13",
- "weight": 1.0,
- "_src": "frontend_src_app_tsx",
- "_tgt": "app_isactive",
- "confidence_score": 1.0,
- "source": "frontend_src_app_tsx",
- "target": "app_isactive"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "frontend/src/App.tsx",
- "source_location": "L15",
- "weight": 1.0,
- "_src": "frontend_src_app_tsx",
- "_tgt": "app_linkclass",
- "confidence_score": 1.0,
- "source": "frontend_src_app_tsx",
- "target": "app_linkclass"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "frontend/src/App.tsx",
- "source_location": "L17",
- "weight": 1.0,
- "_src": "app_linkclass",
- "_tgt": "app_isactive",
- "confidence_score": 1.0,
- "source": "app_isactive",
- "target": "app_linkclass"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "frontend/src/components/ErrorBoundary.tsx",
- "source_location": "L19",
- "weight": 1.0,
- "_src": "frontend_src_components_errorboundary_tsx",
- "_tgt": "errorboundary_getderivedstatefromerror",
- "confidence_score": 1.0,
- "source": "frontend_src_components_errorboundary_tsx",
- "target": "errorboundary_getderivedstatefromerror"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "frontend/src/components/ErrorBoundary.tsx",
- "source_location": "L23",
- "weight": 1.0,
- "_src": "frontend_src_components_errorboundary_tsx",
- "_tgt": "errorboundary_componentdidcatch",
- "confidence_score": 1.0,
- "source": "frontend_src_components_errorboundary_tsx",
- "target": "errorboundary_componentdidcatch"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "frontend/src/components/ui/Button.tsx",
- "source_location": "L11",
- "weight": 1.0,
- "_src": "frontend_src_components_ui_button_tsx",
- "_tgt": "button_button",
- "confidence_score": 1.0,
- "source": "frontend_src_components_ui_button_tsx",
- "target": "button_button"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "frontend/src/components/ui/Badge.tsx",
- "source_location": "L9",
- "weight": 1.0,
- "_src": "frontend_src_components_ui_badge_tsx",
- "_tgt": "badge_badge",
- "confidence_score": 1.0,
- "source": "frontend_src_components_ui_badge_tsx",
- "target": "badge_badge"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "frontend/src/components/ui/Card.tsx",
- "source_location": "L8",
- "weight": 1.0,
- "_src": "frontend_src_components_ui_card_tsx",
- "_tgt": "card_card",
- "confidence_score": 1.0,
- "source": "frontend_src_components_ui_card_tsx",
- "target": "card_card"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "frontend/src/components/ui/Card.tsx",
- "source_location": "L17",
- "weight": 1.0,
- "_src": "frontend_src_components_ui_card_tsx",
- "_tgt": "card_cardheader",
- "confidence_score": 1.0,
- "source": "frontend_src_components_ui_card_tsx",
- "target": "card_cardheader"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "frontend/src/components/ui/Card.tsx",
- "source_location": "L26",
- "weight": 1.0,
- "_src": "frontend_src_components_ui_card_tsx",
- "_tgt": "card_cardbody",
- "confidence_score": 1.0,
- "source": "frontend_src_components_ui_card_tsx",
- "target": "card_cardbody"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "frontend/src/components/ui/Card.tsx",
- "source_location": "L35",
- "weight": 1.0,
- "_src": "frontend_src_components_ui_card_tsx",
- "_tgt": "card_cardfooter",
- "confidence_score": 1.0,
- "source": "frontend_src_components_ui_card_tsx",
- "target": "card_cardfooter"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "frontend/src/components/ui/Input.tsx",
- "source_location": "L17",
- "weight": 1.0,
- "_src": "frontend_src_components_ui_input_tsx",
- "_tgt": "input_cn",
- "confidence_score": 1.0,
- "source": "frontend_src_components_ui_input_tsx",
- "target": "input_cn"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "frontend/src/components/ui/LoadingSpinner.tsx",
- "source_location": "L10",
- "weight": 1.0,
- "_src": "frontend_src_components_ui_loadingspinner_tsx",
- "_tgt": "loadingspinner_loadingspinner",
- "confidence_score": 1.0,
- "source": "frontend_src_components_ui_loadingspinner_tsx",
- "target": "loadingspinner_loadingspinner"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "frontend/src/components/ui/Textarea.tsx",
- "source_location": "L17",
- "weight": 1.0,
- "_src": "frontend_src_components_ui_textarea_tsx",
- "_tgt": "textarea_cn",
- "confidence_score": 1.0,
- "source": "frontend_src_components_ui_textarea_tsx",
- "target": "textarea_cn"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "frontend/src/pages/Dashboard.tsx",
- "source_location": "L282",
- "weight": 1.0,
- "_src": "frontend_src_pages_dashboard_tsx",
- "_tgt": "dashboard_handlesend",
- "confidence_score": 1.0,
- "source": "frontend_src_pages_dashboard_tsx",
- "target": "dashboard_handlesend"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "frontend/src/pages/Pantry.tsx",
- "source_location": "L59",
- "weight": 1.0,
- "_src": "frontend_src_pages_pantry_tsx",
- "_tgt": "pantry_handleadd",
- "confidence_score": 1.0,
- "source": "frontend_src_pages_pantry_tsx",
- "target": "pantry_handleadd"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "frontend/src/pages/ShoppingList.tsx",
- "source_location": "L12",
- "weight": 1.0,
- "_src": "frontend_src_pages_shoppinglist_tsx",
- "_tgt": "shoppinglist_shoppinglistskeleton",
- "confidence_score": 1.0,
- "source": "frontend_src_pages_shoppinglist_tsx",
- "target": "shoppinglist_shoppinglistskeleton"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "frontend/src/pages/ShoppingList.tsx",
- "source_location": "L33",
- "weight": 1.0,
- "_src": "frontend_src_pages_shoppinglist_tsx",
- "_tgt": "shoppinglist_skeletoncard",
- "confidence_score": 1.0,
- "source": "frontend_src_pages_shoppinglist_tsx",
- "target": "shoppinglist_skeletoncard"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "frontend/src/pages/ShoppingList.tsx",
- "source_location": "L44",
- "weight": 1.0,
- "_src": "frontend_src_pages_shoppinglist_tsx",
- "_tgt": "shoppinglist_storagekey",
- "confidence_score": 1.0,
- "source": "frontend_src_pages_shoppinglist_tsx",
- "target": "shoppinglist_storagekey"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "frontend/src/pages/ShoppingList.tsx",
- "source_location": "L77",
- "weight": 1.0,
- "_src": "frontend_src_pages_shoppinglist_tsx",
- "_tgt": "shoppinglist_toggle",
- "confidence_score": 1.0,
- "source": "frontend_src_pages_shoppinglist_tsx",
- "target": "shoppinglist_toggle"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "frontend/src/pages/ShoppingList.tsx",
- "source_location": "L86",
- "weight": 1.0,
- "_src": "frontend_src_pages_shoppinglist_tsx",
- "_tgt": "shoppinglist_clearall",
- "confidence_score": 1.0,
- "source": "frontend_src_pages_shoppinglist_tsx",
- "target": "shoppinglist_clearall"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "frontend/src/pages/Login.tsx",
- "source_location": "L8",
- "weight": 1.0,
- "_src": "frontend_src_pages_login_tsx",
- "_tgt": "login_login",
- "confidence_score": 1.0,
- "source": "frontend_src_pages_login_tsx",
- "target": "login_login"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "frontend/src/lib/utils.ts",
- "source_location": "L4",
- "weight": 1.0,
- "_src": "frontend_src_lib_utils_ts",
- "_tgt": "utils_cn",
- "confidence_score": 1.0,
- "source": "frontend_src_lib_utils_ts",
- "target": "utils_cn"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "scripts/spike_lucky_scrape.py",
- "source_location": "L38",
- "weight": 1.0,
- "_src": "scripts_spike_lucky_scrape_py",
- "_tgt": "spike_lucky_scrape_main",
- "confidence_score": 1.0,
- "source": "scripts_spike_lucky_scrape_py",
- "target": "spike_lucky_scrape_main"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "scripts/spike_lucky_scrape.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "spike_lucky_scrape_rationale_1",
- "_tgt": "scripts_spike_lucky_scrape_py",
- "confidence_score": 1.0,
- "source": "scripts_spike_lucky_scrape_py",
- "target": "spike_lucky_scrape_rationale_1"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "scripts/send_test_approval.py",
- "source_location": "L44",
- "weight": 1.0,
- "_src": "scripts_send_test_approval_py",
- "_tgt": "send_test_approval_main",
- "confidence_score": 1.0,
- "source": "scripts_send_test_approval_py",
- "target": "send_test_approval_main"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "scripts/spike_swiftly_ingest.py",
- "source_location": "L33",
- "weight": 1.0,
- "_src": "scripts_spike_swiftly_ingest_py",
- "_tgt": "spike_swiftly_ingest_main",
- "confidence_score": 1.0,
- "source": "scripts_spike_swiftly_ingest_py",
- "target": "spike_swiftly_ingest_main"
- },
- {
- "relation": "rationale_for",
- "confidence": "EXTRACTED",
- "source_file": "scripts/spike_swiftly_ingest.py",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "spike_swiftly_ingest_rationale_1",
- "_tgt": "scripts_spike_swiftly_ingest_py",
- "confidence_score": 1.0,
- "source": "scripts_spike_swiftly_ingest_py",
- "target": "spike_swiftly_ingest_rationale_1"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "scripts/enrich_recipes_spoonacular.py",
- "source_location": "L30",
- "weight": 1.0,
- "_src": "scripts_enrich_recipes_spoonacular_py",
- "_tgt": "enrich_recipes_spoonacular_strip_html",
- "confidence_score": 1.0,
- "source": "scripts_enrich_recipes_spoonacular_py",
- "target": "enrich_recipes_spoonacular_strip_html"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "scripts/enrich_recipes_spoonacular.py",
- "source_location": "L34",
- "weight": 1.0,
- "_src": "scripts_enrich_recipes_spoonacular_py",
- "_tgt": "enrich_recipes_spoonacular_search_recipe",
- "confidence_score": 1.0,
- "source": "scripts_enrich_recipes_spoonacular_py",
- "target": "enrich_recipes_spoonacular_search_recipe"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "scripts/enrich_recipes_spoonacular.py",
- "source_location": "L53",
- "weight": 1.0,
- "_src": "scripts_enrich_recipes_spoonacular_py",
- "_tgt": "enrich_recipes_spoonacular_main",
- "confidence_score": 1.0,
- "source": "scripts_enrich_recipes_spoonacular_py",
- "target": "enrich_recipes_spoonacular_main"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "scripts/enrich_recipes_spoonacular.py",
- "source_location": "L95",
- "weight": 1.0,
- "_src": "enrich_recipes_spoonacular_main",
- "_tgt": "enrich_recipes_spoonacular_strip_html",
- "confidence_score": 1.0,
- "source": "enrich_recipes_spoonacular_strip_html",
- "target": "enrich_recipes_spoonacular_main"
- },
- {
- "relation": "calls",
- "confidence": "EXTRACTED",
- "source_file": "scripts/enrich_recipes_spoonacular.py",
- "source_location": "L81",
- "weight": 1.0,
- "_src": "enrich_recipes_spoonacular_main",
- "_tgt": "enrich_recipes_spoonacular_search_recipe",
- "confidence_score": 1.0,
- "source": "enrich_recipes_spoonacular_search_recipe",
- "target": "enrich_recipes_spoonacular_main"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "meal-planner-plan.md",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "meal_planner_plan_md",
- "_tgt": "meal_planner_plan_md_meal_planner_system",
- "confidence_score": 1.0,
- "source": "meal_planner_plan_md",
- "target": "meal_planner_plan_md_meal_planner_system"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "meal-planner-plan.md",
- "source_location": "L3",
- "weight": 1.0,
- "_src": "meal_planner_plan_md",
- "_tgt": "meal_planner_plan_md_goal",
- "confidence_score": 1.0,
- "source": "meal_planner_plan_md",
- "target": "meal_planner_plan_md_goal"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "meal-planner-plan.md",
- "source_location": "L6",
- "weight": 1.0,
- "_src": "meal_planner_plan_md",
- "_tgt": "meal_planner_plan_md_architecture",
- "confidence_score": 1.0,
- "source": "meal_planner_plan_md",
- "target": "meal_planner_plan_md_architecture"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "meal-planner-plan.md",
- "source_location": "L26",
- "weight": 1.0,
- "_src": "meal_planner_plan_md",
- "_tgt": "meal_planner_plan_md_tech_stack",
- "confidence_score": 1.0,
- "source": "meal_planner_plan_md",
- "target": "meal_planner_plan_md_tech_stack"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "meal-planner-plan.md",
- "source_location": "L35",
- "weight": 1.0,
- "_src": "meal_planner_plan_md",
- "_tgt": "meal_planner_plan_md_project_structure",
- "confidence_score": 1.0,
- "source": "meal_planner_plan_md",
- "target": "meal_planner_plan_md_project_structure"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "meal-planner-plan.md",
- "source_location": "L54",
- "weight": 1.0,
- "_src": "meal_planner_plan_md",
- "_tgt": "meal_planner_plan_md_tasks",
- "confidence_score": 1.0,
- "source": "meal_planner_plan_md",
- "target": "meal_planner_plan_md_tasks"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "meal-planner-plan.md",
- "source_location": "L56",
- "weight": 1.0,
- "_src": "meal_planner_plan_md",
- "_tgt": "meal_planner_plan_md_phase_1_foundation",
- "confidence_score": 1.0,
- "source": "meal_planner_plan_md",
- "target": "meal_planner_plan_md_phase_1_foundation"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "meal-planner-plan.md",
- "source_location": "L62",
- "weight": 1.0,
- "_src": "meal_planner_plan_md",
- "_tgt": "meal_planner_plan_md_phase_2_scraping",
- "confidence_score": 1.0,
- "source": "meal_planner_plan_md",
- "target": "meal_planner_plan_md_phase_2_scraping"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "meal-planner-plan.md",
- "source_location": "L67",
- "weight": 1.0,
- "_src": "meal_planner_plan_md",
- "_tgt": "meal_planner_plan_md_phase_3_recipe_meal_engine",
- "confidence_score": 1.0,
- "source": "meal_planner_plan_md",
- "target": "meal_planner_plan_md_phase_3_recipe_meal_engine"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "meal-planner-plan.md",
- "source_location": "L73",
- "weight": 1.0,
- "_src": "meal_planner_plan_md",
- "_tgt": "meal_planner_plan_md_phase_4_notifications_approval",
- "confidence_score": 1.0,
- "source": "meal_planner_plan_md",
- "target": "meal_planner_plan_md_phase_4_notifications_approval"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "meal-planner-plan.md",
- "source_location": "L79",
- "weight": 1.0,
- "_src": "meal_planner_plan_md",
- "_tgt": "meal_planner_plan_md_phase_5_shopping_list_ui",
- "confidence_score": 1.0,
- "source": "meal_planner_plan_md",
- "target": "meal_planner_plan_md_phase_5_shopping_list_ui"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "meal-planner-plan.md",
- "source_location": "L85",
- "weight": 1.0,
- "_src": "meal_planner_plan_md",
- "_tgt": "meal_planner_plan_md_phase_6_polish",
- "confidence_score": 1.0,
- "source": "meal_planner_plan_md",
- "target": "meal_planner_plan_md_phase_6_polish"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "meal-planner-plan.md",
- "source_location": "L90",
- "weight": 1.0,
- "_src": "meal_planner_plan_md",
- "_tgt": "meal_planner_plan_md_done_when",
- "confidence_score": 1.0,
- "source": "meal_planner_plan_md",
- "target": "meal_planner_plan_md_done_when"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "README.md",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "readme_md",
- "_tgt": "readme_md_meal_planner",
- "confidence_score": 1.0,
- "source": "readme_md",
- "target": "readme_md_meal_planner"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "README.md",
- "source_location": "L5",
- "weight": 1.0,
- "_src": "readme_md",
- "_tgt": "readme_md_background",
- "confidence_score": 1.0,
- "source": "readme_md",
- "target": "readme_md_background"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "README.md",
- "source_location": "L13",
- "weight": 1.0,
- "_src": "readme_md",
- "_tgt": "readme_md_features",
- "confidence_score": 1.0,
- "source": "readme_md",
- "target": "readme_md_features"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "README.md",
- "source_location": "L23",
- "weight": 1.0,
- "_src": "readme_md",
- "_tgt": "readme_md_architecture",
- "confidence_score": 1.0,
- "source": "readme_md",
- "target": "readme_md_architecture"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "README.md",
- "source_location": "L31",
- "weight": 1.0,
- "_src": "readme_md",
- "_tgt": "readme_md_documentation",
- "confidence_score": 1.0,
- "source": "readme_md",
- "target": "readme_md_documentation"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "README.md",
- "source_location": "L39",
- "weight": 1.0,
- "_src": "readme_md",
- "_tgt": "readme_md_quick_start",
- "confidence_score": 1.0,
- "source": "readme_md",
- "target": "readme_md_quick_start"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "README.md",
- "source_location": "L42",
- "weight": 1.0,
- "_src": "readme_md",
- "_tgt": "readme_md_clone_and_start",
- "confidence_score": 1.0,
- "source": "readme_md",
- "target": "readme_md_clone_and_start"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "README.md",
- "source_location": "L45",
- "weight": 1.0,
- "_src": "readme_md",
- "_tgt": "readme_md_view_logs",
- "confidence_score": 1.0,
- "source": "readme_md",
- "target": "readme_md_view_logs"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "README.md",
- "source_location": "L48",
- "weight": 1.0,
- "_src": "readme_md",
- "_tgt": "readme_md_stop",
- "confidence_score": 1.0,
- "source": "readme_md",
- "target": "readme_md_stop"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "README.md",
- "source_location": "L52",
- "weight": 1.0,
- "_src": "readme_md",
- "_tgt": "readme_md_family_profile",
- "confidence_score": 1.0,
- "source": "readme_md",
- "target": "readme_md_family_profile"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "README.md",
- "source_location": "L60",
- "weight": 1.0,
- "_src": "readme_md",
- "_tgt": "readme_md_approval_workflow",
- "confidence_score": 1.0,
- "source": "readme_md",
- "target": "readme_md_approval_workflow"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "README.md",
- "source_location": "L67",
- "weight": 1.0,
- "_src": "readme_md",
- "_tgt": "readme_md_tech_stack",
- "confidence_score": 1.0,
- "source": "readme_md",
- "target": "readme_md_tech_stack"
- },
- {
- "relation": "references",
- "confidence": "EXTRACTED",
- "source_file": "README.md",
- "source_location": "L33",
- "weight": 1.0,
- "_src": "readme_md",
- "_tgt": "docs_spec_md",
- "confidence_score": 1.0,
- "source": "readme_md",
- "target": "docs_spec_md"
- },
- {
- "relation": "references",
- "confidence": "EXTRACTED",
- "source_file": "README.md",
- "source_location": "L34",
- "weight": 1.0,
- "_src": "readme_md",
- "_tgt": "docs_architecture_md",
- "confidence_score": 1.0,
- "source": "readme_md",
- "target": "docs_architecture_md"
- },
- {
- "relation": "references",
- "confidence": "EXTRACTED",
- "source_file": "README.md",
- "source_location": "L35",
- "weight": 1.0,
- "_src": "readme_md",
- "_tgt": "docs_database_schema_md",
- "confidence_score": 1.0,
- "source": "readme_md",
- "target": "docs_database_schema_md"
- },
- {
- "relation": "references",
- "confidence": "EXTRACTED",
- "source_file": "README.md",
- "source_location": "L36",
- "weight": 1.0,
- "_src": "readme_md",
- "_tgt": "docs_implementation_plan_md",
- "confidence_score": 1.0,
- "source": "readme_md",
- "target": "docs_implementation_plan_md"
- },
- {
- "relation": "references",
- "confidence": "EXTRACTED",
- "source_file": "README.md",
- "source_location": "L37",
- "weight": 1.0,
- "_src": "readme_md",
- "_tgt": "docs_running_md",
- "confidence_score": 1.0,
- "source": "readme_md",
- "target": "docs_running_md"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "CLAUDE.md",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "claude_md",
- "_tgt": "claude_md_context_mode_mandatory_routing_rules",
- "confidence_score": 1.0,
- "source": "claude_md",
- "target": "claude_md_context_mode_mandatory_routing_rules"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "CLAUDE.md",
- "source_location": "L5",
- "weight": 1.0,
- "_src": "claude_md",
- "_tgt": "claude_md_blocked_commands_do_not_attempt_these",
- "confidence_score": 1.0,
- "source": "claude_md",
- "target": "claude_md_blocked_commands_do_not_attempt_these"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "CLAUDE.md",
- "source_location": "L7",
- "weight": 1.0,
- "_src": "claude_md",
- "_tgt": "claude_md_curl_wget_blocked",
- "confidence_score": 1.0,
- "source": "claude_md",
- "target": "claude_md_curl_wget_blocked"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "CLAUDE.md",
- "source_location": "L13",
- "weight": 1.0,
- "_src": "claude_md",
- "_tgt": "claude_md_inline_http_blocked",
- "confidence_score": 1.0,
- "source": "claude_md",
- "target": "claude_md_inline_http_blocked"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "CLAUDE.md",
- "source_location": "L18",
- "weight": 1.0,
- "_src": "claude_md",
- "_tgt": "claude_md_webfetch_blocked",
- "confidence_score": 1.0,
- "source": "claude_md",
- "target": "claude_md_webfetch_blocked"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "CLAUDE.md",
- "source_location": "L23",
- "weight": 1.0,
- "_src": "claude_md",
- "_tgt": "claude_md_redirected_tools_use_sandbox_equivalents",
- "confidence_score": 1.0,
- "source": "claude_md",
- "target": "claude_md_redirected_tools_use_sandbox_equivalents"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "CLAUDE.md",
- "source_location": "L25",
- "weight": 1.0,
- "_src": "claude_md",
- "_tgt": "claude_md_bash_20_lines_output",
- "confidence_score": 1.0,
- "source": "claude_md",
- "target": "claude_md_bash_20_lines_output"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "CLAUDE.md",
- "source_location": "L31",
- "weight": 1.0,
- "_src": "claude_md",
- "_tgt": "claude_md_read_for_analysis",
- "confidence_score": 1.0,
- "source": "claude_md",
- "target": "claude_md_read_for_analysis"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "CLAUDE.md",
- "source_location": "L35",
- "weight": 1.0,
- "_src": "claude_md",
- "_tgt": "claude_md_grep_large_results",
- "confidence_score": 1.0,
- "source": "claude_md",
- "target": "claude_md_grep_large_results"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "CLAUDE.md",
- "source_location": "L38",
- "weight": 1.0,
- "_src": "claude_md",
- "_tgt": "claude_md_tool_selection_hierarchy",
- "confidence_score": 1.0,
- "source": "claude_md",
- "target": "claude_md_tool_selection_hierarchy"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "CLAUDE.md",
- "source_location": "L46",
- "weight": 1.0,
- "_src": "claude_md",
- "_tgt": "claude_md_subagent_routing",
- "confidence_score": 1.0,
- "source": "claude_md",
- "target": "claude_md_subagent_routing"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "CLAUDE.md",
- "source_location": "L50",
- "weight": 1.0,
- "_src": "claude_md",
- "_tgt": "claude_md_output_constraints",
- "confidence_score": 1.0,
- "source": "claude_md",
- "target": "claude_md_output_constraints"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "CLAUDE.md",
- "source_location": "L56",
- "weight": 1.0,
- "_src": "claude_md",
- "_tgt": "claude_md_ctx_commands",
- "confidence_score": 1.0,
- "source": "claude_md",
- "target": "claude_md_ctx_commands"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/SPEC.md",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "docs_spec_md",
- "_tgt": "docs_spec_md_meal_planner_project_specification",
- "confidence_score": 1.0,
- "source": "docs_spec_md",
- "target": "docs_spec_md_meal_planner_project_specification"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/SPEC.md",
- "source_location": "L3",
- "weight": 1.0,
- "_src": "docs_spec_md",
- "_tgt": "docs_spec_md_1_overview",
- "confidence_score": 1.0,
- "source": "docs_spec_md",
- "target": "docs_spec_md_1_overview"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/SPEC.md",
- "source_location": "L12",
- "weight": 1.0,
- "_src": "docs_spec_md",
- "_tgt": "docs_spec_md_2_problem_statement",
- "confidence_score": 1.0,
- "source": "docs_spec_md",
- "target": "docs_spec_md_2_problem_statement"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/SPEC.md",
- "source_location": "L29",
- "weight": 1.0,
- "_src": "docs_spec_md",
- "_tgt": "docs_spec_md_3_goals",
- "confidence_score": 1.0,
- "source": "docs_spec_md",
- "target": "docs_spec_md_3_goals"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/SPEC.md",
- "source_location": "L31",
- "weight": 1.0,
- "_src": "docs_spec_md",
- "_tgt": "docs_spec_md_primary_goals",
- "confidence_score": 1.0,
- "source": "docs_spec_md",
- "target": "docs_spec_md_primary_goals"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/SPEC.md",
- "source_location": "L40",
- "weight": 1.0,
- "_src": "docs_spec_md",
- "_tgt": "docs_spec_md_secondary_goals",
- "confidence_score": 1.0,
- "source": "docs_spec_md",
- "target": "docs_spec_md_secondary_goals"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/SPEC.md",
- "source_location": "L48",
- "weight": 1.0,
- "_src": "docs_spec_md",
- "_tgt": "docs_spec_md_4_non_goals_out_of_scope",
- "confidence_score": 1.0,
- "source": "docs_spec_md",
- "target": "docs_spec_md_4_non_goals_out_of_scope"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/SPEC.md",
- "source_location": "L59",
- "weight": 1.0,
- "_src": "docs_spec_md",
- "_tgt": "docs_spec_md_5_user_stories",
- "confidence_score": 1.0,
- "source": "docs_spec_md",
- "target": "docs_spec_md_5_user_stories"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/SPEC.md",
- "source_location": "L61",
- "weight": 1.0,
- "_src": "docs_spec_md",
- "_tgt": "docs_spec_md_as_a_family_member_i_can",
- "confidence_score": 1.0,
- "source": "docs_spec_md",
- "target": "docs_spec_md_as_a_family_member_i_can"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/SPEC.md",
- "source_location": "L69",
- "weight": 1.0,
- "_src": "docs_spec_md",
- "_tgt": "docs_spec_md_as_the_system_administrator_i_can",
- "confidence_score": 1.0,
- "source": "docs_spec_md",
- "target": "docs_spec_md_as_the_system_administrator_i_can"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/SPEC.md",
- "source_location": "L77",
- "weight": 1.0,
- "_src": "docs_spec_md",
- "_tgt": "docs_spec_md_6_family_profile",
- "confidence_score": 1.0,
- "source": "docs_spec_md",
- "target": "docs_spec_md_6_family_profile"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/SPEC.md",
- "source_location": "L79",
- "weight": 1.0,
- "_src": "docs_spec_md",
- "_tgt": "docs_spec_md_household",
- "confidence_score": 1.0,
- "source": "docs_spec_md",
- "target": "docs_spec_md_household"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/SPEC.md",
- "source_location": "L84",
- "weight": 1.0,
- "_src": "docs_spec_md",
- "_tgt": "docs_spec_md_family_members",
- "confidence_score": 1.0,
- "source": "docs_spec_md",
- "target": "docs_spec_md_family_members"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/SPEC.md",
- "source_location": "L92",
- "weight": 1.0,
- "_src": "docs_spec_md",
- "_tgt": "docs_spec_md_dietary_constraints",
- "confidence_score": 1.0,
- "source": "docs_spec_md",
- "target": "docs_spec_md_dietary_constraints"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/SPEC.md",
- "source_location": "L96",
- "weight": 1.0,
- "_src": "docs_spec_md",
- "_tgt": "docs_spec_md_preference_signals",
- "confidence_score": 1.0,
- "source": "docs_spec_md",
- "target": "docs_spec_md_preference_signals"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/SPEC.md",
- "source_location": "L104",
- "weight": 1.0,
- "_src": "docs_spec_md",
- "_tgt": "docs_spec_md_7_approval_workflow",
- "confidence_score": 1.0,
- "source": "docs_spec_md",
- "target": "docs_spec_md_7_approval_workflow"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/SPEC.md",
- "source_location": "L106",
- "weight": 1.0,
- "_src": "docs_spec_md",
- "_tgt": "docs_spec_md_weekly_flow",
- "confidence_score": 1.0,
- "source": "docs_spec_md",
- "target": "docs_spec_md_weekly_flow"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/SPEC.md",
- "source_location": "L138",
- "weight": 1.0,
- "_src": "docs_spec_md",
- "_tgt": "docs_spec_md_approval_token_security",
- "confidence_score": 1.0,
- "source": "docs_spec_md",
- "target": "docs_spec_md_approval_token_security"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/SPEC.md",
- "source_location": "L146",
- "weight": 1.0,
- "_src": "docs_spec_md",
- "_tgt": "docs_spec_md_8_technical_constraints",
- "confidence_score": 1.0,
- "source": "docs_spec_md",
- "target": "docs_spec_md_8_technical_constraints"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/SPEC.md",
- "source_location": "L148",
- "weight": 1.0,
- "_src": "docs_spec_md",
- "_tgt": "docs_spec_md_self_hosting_requirements",
- "confidence_score": 1.0,
- "source": "docs_spec_md",
- "target": "docs_spec_md_self_hosting_requirements"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/SPEC.md",
- "source_location": "L153",
- "weight": 1.0,
- "_src": "docs_spec_md",
- "_tgt": "docs_spec_md_authentication_authorization",
- "confidence_score": 1.0,
- "source": "docs_spec_md",
- "target": "docs_spec_md_authentication_authorization"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/SPEC.md",
- "source_location": "L159",
- "weight": 1.0,
- "_src": "docs_spec_md",
- "_tgt": "docs_spec_md_lucky_california_integration",
- "confidence_score": 1.0,
- "source": "docs_spec_md",
- "target": "docs_spec_md_lucky_california_integration"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/SPEC.md",
- "source_location": "L191",
- "weight": 1.0,
- "_src": "docs_spec_md",
- "_tgt": "docs_spec_md_email",
- "confidence_score": 1.0,
- "source": "docs_spec_md",
- "target": "docs_spec_md_email"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/SPEC.md",
- "source_location": "L172",
- "weight": 1.0,
- "_src": "docs_spec_md",
- "_tgt": "docs_spec_md_external_dependencies",
- "confidence_score": 1.0,
- "source": "docs_spec_md",
- "target": "docs_spec_md_external_dependencies"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/SPEC.md",
- "source_location": "L182",
- "weight": 1.0,
- "_src": "docs_spec_md",
- "_tgt": "docs_spec_md_9_accessibility_wcag_2_1_aa",
- "confidence_score": 1.0,
- "source": "docs_spec_md",
- "target": "docs_spec_md_9_accessibility_wcag_2_1_aa"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/SPEC.md",
- "source_location": "L184",
- "weight": 1.0,
- "_src": "docs_spec_md",
- "_tgt": "docs_spec_md_web_ui",
- "confidence_score": 1.0,
- "source": "docs_spec_md",
- "target": "docs_spec_md_web_ui"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/SPEC.md",
- "source_location": "L199",
- "weight": 1.0,
- "_src": "docs_spec_md",
- "_tgt": "docs_spec_md_10_data_retention",
- "confidence_score": 1.0,
- "source": "docs_spec_md",
- "target": "docs_spec_md_10_data_retention"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/SPEC.md",
- "source_location": "L201",
- "weight": 1.0,
- "_src": "docs_spec_md",
- "_tgt": "docs_spec_md_stored_data",
- "confidence_score": 1.0,
- "source": "docs_spec_md",
- "target": "docs_spec_md_stored_data"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/SPEC.md",
- "source_location": "L208",
- "weight": 1.0,
- "_src": "docs_spec_md",
- "_tgt": "docs_spec_md_retention_period",
- "confidence_score": 1.0,
- "source": "docs_spec_md",
- "target": "docs_spec_md_retention_period"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/SPEC.md",
- "source_location": "L215",
- "weight": 1.0,
- "_src": "docs_spec_md",
- "_tgt": "docs_spec_md_11_success_metrics",
- "confidence_score": 1.0,
- "source": "docs_spec_md",
- "target": "docs_spec_md_11_success_metrics"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/SPEC.md",
- "source_location": "L225",
- "weight": 1.0,
- "_src": "docs_spec_md",
- "_tgt": "docs_spec_md_12_future_considerations",
- "confidence_score": 1.0,
- "source": "docs_spec_md",
- "target": "docs_spec_md_12_future_considerations"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "docs_architecture_md",
- "_tgt": "docs_architecture_md_meal_planner_architecture",
- "confidence_score": 1.0,
- "source": "docs_architecture_md",
- "target": "docs_architecture_md_meal_planner_architecture"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L3",
- "weight": 1.0,
- "_src": "docs_architecture_md",
- "_tgt": "docs_architecture_md_1_system_overview",
- "confidence_score": 1.0,
- "source": "docs_architecture_md",
- "target": "docs_architecture_md_1_system_overview"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L52",
- "weight": 1.0,
- "_src": "docs_architecture_md",
- "_tgt": "docs_architecture_md_2_component_descriptions",
- "confidence_score": 1.0,
- "source": "docs_architecture_md",
- "target": "docs_architecture_md_2_component_descriptions"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L54",
- "weight": 1.0,
- "_src": "docs_architecture_md",
- "_tgt": "docs_architecture_md_2_1_scraper_service",
- "confidence_score": 1.0,
- "source": "docs_architecture_md",
- "target": "docs_architecture_md_2_1_scraper_service"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L76",
- "weight": 1.0,
- "_src": "docs_architecture_md",
- "_tgt": "docs_architecture_md_2_2_recipe_engine",
- "confidence_score": 1.0,
- "source": "docs_architecture_md",
- "target": "docs_architecture_md_2_2_recipe_engine"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L91",
- "weight": 1.0,
- "_src": "docs_architecture_md",
- "_tgt": "docs_architecture_md_2_3_meal_planner_service",
- "confidence_score": 1.0,
- "source": "docs_architecture_md",
- "target": "docs_architecture_md_2_3_meal_planner_service"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L112",
- "weight": 1.0,
- "_src": "docs_architecture_md",
- "_tgt": "docs_architecture_md_2_4_notification_service",
- "confidence_score": 1.0,
- "source": "docs_architecture_md",
- "target": "docs_architecture_md_2_4_notification_service"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L147",
- "weight": 1.0,
- "_src": "docs_architecture_md",
- "_tgt": "docs_architecture_md_2_5_feedback_service",
- "confidence_score": 1.0,
- "source": "docs_architecture_md",
- "target": "docs_architecture_md_2_5_feedback_service"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L164",
- "weight": 1.0,
- "_src": "docs_architecture_md",
- "_tgt": "docs_architecture_md_2_6_web_ui_react_tailwind",
- "confidence_score": 1.0,
- "source": "docs_architecture_md",
- "target": "docs_architecture_md_2_6_web_ui_react_tailwind"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L183",
- "weight": 1.0,
- "_src": "docs_architecture_md",
- "_tgt": "docs_architecture_md_3_data_architecture",
- "confidence_score": 1.0,
- "source": "docs_architecture_md",
- "target": "docs_architecture_md_3_data_architecture"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L185",
- "weight": 1.0,
- "_src": "docs_architecture_md",
- "_tgt": "docs_architecture_md_3_1_postgresql_schema_overview",
- "confidence_score": 1.0,
- "source": "docs_architecture_md",
- "target": "docs_architecture_md_3_1_postgresql_schema_overview"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L267",
- "weight": 1.0,
- "_src": "docs_architecture_md",
- "_tgt": "docs_architecture_md_3_2_key_relationships",
- "confidence_score": 1.0,
- "source": "docs_architecture_md",
- "target": "docs_architecture_md_3_2_key_relationships"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L284",
- "weight": 1.0,
- "_src": "docs_architecture_md",
- "_tgt": "docs_architecture_md_4_api_design",
- "confidence_score": 1.0,
- "source": "docs_architecture_md",
- "target": "docs_architecture_md_4_api_design"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L286",
- "weight": 1.0,
- "_src": "docs_architecture_md",
- "_tgt": "docs_architecture_md_4_1_core_endpoints",
- "confidence_score": 1.0,
- "source": "docs_architecture_md",
- "target": "docs_architecture_md_4_1_core_endpoints"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L306",
- "weight": 1.0,
- "_src": "docs_architecture_md",
- "_tgt": "docs_architecture_md_4_2_email_approval_links",
- "confidence_score": 1.0,
- "source": "docs_architecture_md",
- "target": "docs_architecture_md_4_2_email_approval_links"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L313",
- "weight": 1.0,
- "_src": "docs_architecture_md",
- "_tgt": "docs_architecture_md_5_deployment_architecture",
- "confidence_score": 1.0,
- "source": "docs_architecture_md",
- "target": "docs_architecture_md_5_deployment_architecture"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L315",
- "weight": 1.0,
- "_src": "docs_architecture_md",
- "_tgt": "docs_architecture_md_5_1_docker_compose_services",
- "confidence_score": 1.0,
- "source": "docs_architecture_md",
- "target": "docs_architecture_md_5_1_docker_compose_services"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L365",
- "weight": 1.0,
- "_src": "docs_architecture_md",
- "_tgt": "docs_architecture_md_5_2_reverse_proxy_nginx",
- "confidence_score": 1.0,
- "source": "docs_architecture_md",
- "target": "docs_architecture_md_5_2_reverse_proxy_nginx"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L373",
- "weight": 1.0,
- "_src": "docs_architecture_md",
- "_tgt": "docs_architecture_md_5_3_remote_access_security",
- "confidence_score": 1.0,
- "source": "docs_architecture_md",
- "target": "docs_architecture_md_5_3_remote_access_security"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L380",
- "weight": 1.0,
- "_src": "docs_architecture_md",
- "_tgt": "docs_architecture_md_6_image_strategy",
- "confidence_score": 1.0,
- "source": "docs_architecture_md",
- "target": "docs_architecture_md_6_image_strategy"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L382",
- "weight": 1.0,
- "_src": "docs_architecture_md",
- "_tgt": "docs_architecture_md_6_1_primary_scraped_images",
- "confidence_score": 1.0,
- "source": "docs_architecture_md",
- "target": "docs_architecture_md_6_1_primary_scraped_images"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L387",
- "weight": 1.0,
- "_src": "docs_architecture_md",
- "_tgt": "docs_architecture_md_6_2_fallback_ai_generation",
- "confidence_score": 1.0,
- "source": "docs_architecture_md",
- "target": "docs_architecture_md_6_2_fallback_ai_generation"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L393",
- "weight": 1.0,
- "_src": "docs_architecture_md",
- "_tgt": "docs_architecture_md_6_3_email_image_handling",
- "confidence_score": 1.0,
- "source": "docs_architecture_md",
- "target": "docs_architecture_md_6_3_email_image_handling"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L400",
- "weight": 1.0,
- "_src": "docs_architecture_md",
- "_tgt": "docs_architecture_md_7_error_handling_strategy",
- "confidence_score": 1.0,
- "source": "docs_architecture_md",
- "target": "docs_architecture_md_7_error_handling_strategy"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L402",
- "weight": 1.0,
- "_src": "docs_architecture_md",
- "_tgt": "docs_architecture_md_7_1_scraper_failures",
- "confidence_score": 1.0,
- "source": "docs_architecture_md",
- "target": "docs_architecture_md_7_1_scraper_failures"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L409",
- "weight": 1.0,
- "_src": "docs_architecture_md",
- "_tgt": "docs_architecture_md_7_2_email_failures",
- "confidence_score": 1.0,
- "source": "docs_architecture_md",
- "target": "docs_architecture_md_7_2_email_failures"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L415",
- "weight": 1.0,
- "_src": "docs_architecture_md",
- "_tgt": "docs_architecture_md_7_3_database_failures",
- "confidence_score": 1.0,
- "source": "docs_architecture_md",
- "target": "docs_architecture_md_7_3_database_failures"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L422",
- "weight": 1.0,
- "_src": "docs_architecture_md",
- "_tgt": "docs_architecture_md_8_logging_monitoring",
- "confidence_score": 1.0,
- "source": "docs_architecture_md",
- "target": "docs_architecture_md_8_logging_monitoring"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L424",
- "weight": 1.0,
- "_src": "docs_architecture_md",
- "_tgt": "docs_architecture_md_8_1_log_categories",
- "confidence_score": 1.0,
- "source": "docs_architecture_md",
- "target": "docs_architecture_md_8_1_log_categories"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L431",
- "weight": 1.0,
- "_src": "docs_architecture_md",
- "_tgt": "docs_architecture_md_8_2_log_storage",
- "confidence_score": 1.0,
- "source": "docs_architecture_md",
- "target": "docs_architecture_md_8_2_log_storage"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ARCHITECTURE.md",
- "source_location": "L436",
- "weight": 1.0,
- "_src": "docs_architecture_md",
- "_tgt": "docs_architecture_md_8_3_monitoring_future",
- "confidence_score": 1.0,
- "source": "docs_architecture_md",
- "target": "docs_architecture_md_8_3_monitoring_future"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/database-schema.md",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "docs_database_schema_md",
- "_tgt": "docs_database_schema_md_meal_planner_database_schema",
- "confidence_score": 1.0,
- "source": "docs_database_schema_md",
- "target": "docs_database_schema_md_meal_planner_database_schema"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/database-schema.md",
- "source_location": "L3",
- "weight": 1.0,
- "_src": "docs_database_schema_md",
- "_tgt": "docs_database_schema_md_1_schema_overview",
- "confidence_score": 1.0,
- "source": "docs_database_schema_md",
- "target": "docs_database_schema_md_1_schema_overview"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/database-schema.md",
- "source_location": "L11",
- "weight": 1.0,
- "_src": "docs_database_schema_md",
- "_tgt": "docs_database_schema_md_2_enums",
- "confidence_score": 1.0,
- "source": "docs_database_schema_md",
- "target": "docs_database_schema_md_2_enums"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/database-schema.md",
- "source_location": "L27",
- "weight": 1.0,
- "_src": "docs_database_schema_md",
- "_tgt": "docs_database_schema_md_3_tables",
- "confidence_score": 1.0,
- "source": "docs_database_schema_md",
- "target": "docs_database_schema_md_3_tables"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/database-schema.md",
- "source_location": "L29",
- "weight": 1.0,
- "_src": "docs_database_schema_md",
- "_tgt": "docs_database_schema_md_3_1_family_profile",
- "confidence_score": 1.0,
- "source": "docs_database_schema_md",
- "target": "docs_database_schema_md_3_1_family_profile"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/database-schema.md",
- "source_location": "L49",
- "weight": 1.0,
- "_src": "docs_database_schema_md",
- "_tgt": "docs_database_schema_md_3_2_family_member",
- "confidence_score": 1.0,
- "source": "docs_database_schema_md",
- "target": "docs_database_schema_md_3_2_family_member"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/database-schema.md",
- "source_location": "L66",
- "weight": 1.0,
- "_src": "docs_database_schema_md",
- "_tgt": "docs_database_schema_md_3_3_ingredient",
- "confidence_score": 1.0,
- "source": "docs_database_schema_md",
- "target": "docs_database_schema_md_3_3_ingredient"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/database-schema.md",
- "source_location": "L82",
- "weight": 1.0,
- "_src": "docs_database_schema_md",
- "_tgt": "docs_database_schema_md_3_4_recipe",
- "confidence_score": 1.0,
- "source": "docs_database_schema_md",
- "target": "docs_database_schema_md_3_4_recipe"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/database-schema.md",
- "source_location": "L112",
- "weight": 1.0,
- "_src": "docs_database_schema_md",
- "_tgt": "docs_database_schema_md_3_5_meal_plan",
- "confidence_score": 1.0,
- "source": "docs_database_schema_md",
- "target": "docs_database_schema_md_3_5_meal_plan"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/database-schema.md",
- "source_location": "L130",
- "weight": 1.0,
- "_src": "docs_database_schema_md",
- "_tgt": "docs_database_schema_md_3_6_meal_plan_item",
- "confidence_score": 1.0,
- "source": "docs_database_schema_md",
- "target": "docs_database_schema_md_3_6_meal_plan_item"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/database-schema.md",
- "source_location": "L151",
- "weight": 1.0,
- "_src": "docs_database_schema_md",
- "_tgt": "docs_database_schema_md_3_7_meal_plan_vote",
- "confidence_score": 1.0,
- "source": "docs_database_schema_md",
- "target": "docs_database_schema_md_3_7_meal_plan_vote"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/database-schema.md",
- "source_location": "L165",
- "weight": 1.0,
- "_src": "docs_database_schema_md",
- "_tgt": "docs_database_schema_md_3_8_approval_token",
- "confidence_score": 1.0,
- "source": "docs_database_schema_md",
- "target": "docs_database_schema_md_3_8_approval_token"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/database-schema.md",
- "source_location": "L182",
- "weight": 1.0,
- "_src": "docs_database_schema_md",
- "_tgt": "docs_database_schema_md_3_9_home_pantry",
- "confidence_score": 1.0,
- "source": "docs_database_schema_md",
- "target": "docs_database_schema_md_3_9_home_pantry"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/database-schema.md",
- "source_location": "L199",
- "weight": 1.0,
- "_src": "docs_database_schema_md",
- "_tgt": "docs_database_schema_md_3_10_feedback",
- "confidence_score": 1.0,
- "source": "docs_database_schema_md",
- "target": "docs_database_schema_md_3_10_feedback"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/database-schema.md",
- "source_location": "L217",
- "weight": 1.0,
- "_src": "docs_database_schema_md",
- "_tgt": "docs_database_schema_md_3_11_never_suggest",
- "confidence_score": 1.0,
- "source": "docs_database_schema_md",
- "target": "docs_database_schema_md_3_11_never_suggest"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/database-schema.md",
- "source_location": "L231",
- "weight": 1.0,
- "_src": "docs_database_schema_md",
- "_tgt": "docs_database_schema_md_3_12_grocery_item",
- "confidence_score": 1.0,
- "source": "docs_database_schema_md",
- "target": "docs_database_schema_md_3_12_grocery_item"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/database-schema.md",
- "source_location": "L254",
- "weight": 1.0,
- "_src": "docs_database_schema_md",
- "_tgt": "docs_database_schema_md_3_13_scrape_log",
- "confidence_score": 1.0,
- "source": "docs_database_schema_md",
- "target": "docs_database_schema_md_3_13_scrape_log"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/database-schema.md",
- "source_location": "L270",
- "weight": 1.0,
- "_src": "docs_database_schema_md",
- "_tgt": "docs_database_schema_md_3_14_email_log",
- "confidence_score": 1.0,
- "source": "docs_database_schema_md",
- "target": "docs_database_schema_md_3_14_email_log"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/database-schema.md",
- "source_location": "L290",
- "weight": 1.0,
- "_src": "docs_database_schema_md",
- "_tgt": "docs_database_schema_md_4_indexes",
- "confidence_score": 1.0,
- "source": "docs_database_schema_md",
- "target": "docs_database_schema_md_4_indexes"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/database-schema.md",
- "source_location": "L292",
- "weight": 1.0,
- "_src": "docs_database_schema_md",
- "_tgt": "docs_database_schema_md_4_1_primary_indexes",
- "confidence_score": 1.0,
- "source": "docs_database_schema_md",
- "target": "docs_database_schema_md_4_1_primary_indexes"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/database-schema.md",
- "source_location": "L295",
- "weight": 1.0,
- "_src": "docs_database_schema_md",
- "_tgt": "docs_database_schema_md_4_2_foreign_key_indexes",
- "confidence_score": 1.0,
- "source": "docs_database_schema_md",
- "target": "docs_database_schema_md_4_2_foreign_key_indexes"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/database-schema.md",
- "source_location": "L316",
- "weight": 1.0,
- "_src": "docs_database_schema_md",
- "_tgt": "docs_database_schema_md_4_3_full_text_search_indexes",
- "confidence_score": 1.0,
- "source": "docs_database_schema_md",
- "target": "docs_database_schema_md_4_3_full_text_search_indexes"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/database-schema.md",
- "source_location": "L324",
- "weight": 1.0,
- "_src": "docs_database_schema_md",
- "_tgt": "docs_database_schema_md_5_day_of_week_convention",
- "confidence_score": 1.0,
- "source": "docs_database_schema_md",
- "target": "docs_database_schema_md_5_day_of_week_convention"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/database-schema.md",
- "source_location": "L341",
- "weight": 1.0,
- "_src": "docs_database_schema_md",
- "_tgt": "docs_database_schema_md_6_data_migration_strategy",
- "confidence_score": 1.0,
- "source": "docs_database_schema_md",
- "target": "docs_database_schema_md_6_data_migration_strategy"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/database-schema.md",
- "source_location": "L343",
- "weight": 1.0,
- "_src": "docs_database_schema_md",
- "_tgt": "docs_database_schema_md_6_1_initial_schema",
- "confidence_score": 1.0,
- "source": "docs_database_schema_md",
- "target": "docs_database_schema_md_6_1_initial_schema"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/database-schema.md",
- "source_location": "L346",
- "weight": 1.0,
- "_src": "docs_database_schema_md",
- "_tgt": "docs_database_schema_md_6_2_migration_policy",
- "confidence_score": 1.0,
- "source": "docs_database_schema_md",
- "target": "docs_database_schema_md_6_2_migration_policy"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/database-schema.md",
- "source_location": "L351",
- "weight": 1.0,
- "_src": "docs_database_schema_md",
- "_tgt": "docs_database_schema_md_6_3_seed_data",
- "confidence_score": 1.0,
- "source": "docs_database_schema_md",
- "target": "docs_database_schema_md_6_3_seed_data"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/database-schema.md",
- "source_location": "L359",
- "weight": 1.0,
- "_src": "docs_database_schema_md",
- "_tgt": "docs_database_schema_md_7_data_retention",
- "confidence_score": 1.0,
- "source": "docs_database_schema_md",
- "target": "docs_database_schema_md_7_data_retention"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/database-schema.md",
- "source_location": "L374",
- "weight": 1.0,
- "_src": "docs_database_schema_md",
- "_tgt": "docs_database_schema_md_8_row_level_security_future",
- "confidence_score": 1.0,
- "source": "docs_database_schema_md",
- "target": "docs_database_schema_md_8_row_level_security_future"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_meal_planner_implementation_plan",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_meal_planner_implementation_plan"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L3",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_overview",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_overview"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L9",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_phase_1_infrastructure_foundation",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_phase_1_infrastructure_foundation"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L11",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_1_1_project_setup",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_1_1_project_setup"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L21",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_1_2_backend_skeleton",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_1_2_backend_skeleton"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L42",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_1_3_frontend_skeleton",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_1_3_frontend_skeleton"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L59",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_1_4_reverse_proxy_nginx",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_1_4_reverse_proxy_nginx"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L70",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_phase_2_database_models",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_phase_2_database_models"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L72",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_2_1_sqlalchemy_models",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_2_1_sqlalchemy_models"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L86",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_2_2_pydantic_schemas",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_2_2_pydantic_schemas"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L91",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_2_3_database_migrations",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_2_3_database_migrations"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L100",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_phase_3_api_endpoints",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_phase_3_api_endpoints"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L102",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_3_1_core_crud_endpoints",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_3_1_core_crud_endpoints"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L110",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_3_2_meal_plan_endpoints",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_3_2_meal_plan_endpoints"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L116",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_3_3_shopping_list_endpoints",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_3_3_shopping_list_endpoints"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L120",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_3_4_feedback_endpoints",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_3_4_feedback_endpoints"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L124",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_3_5_admin_endpoints",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_3_5_admin_endpoints"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L132",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_phase_4_lucky_california_scraper",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_phase_4_lucky_california_scraper"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L134",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_4_1_scraper_infrastructure",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_4_1_scraper_infrastructure"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L141",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_4_2_weekly_ad_scraper",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_4_2_weekly_ad_scraper"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L148",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_4_3_product_catalog_scraper_future",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_4_3_product_catalog_scraper_future"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L153",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_4_4_scrape_scheduling",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_4_4_scrape_scheduling"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L158",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_4_5_error_handling",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_4_5_error_handling"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L167",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_phase_5_recipe_engine",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_phase_5_recipe_engine"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L169",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_5_1_recipe_database",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_5_1_recipe_database"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L175",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_5_2_recipe_importing",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_5_2_recipe_importing"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L180",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_5_3_ingredient_mapping",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_5_3_ingredient_mapping"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L189",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_phase_6_meal_planner_engine",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_phase_6_meal_planner_engine"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L191",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_6_1_plan_generation_algorithm",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_6_1_plan_generation_algorithm"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L200",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_6_2_substitution_logic",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_6_2_substitution_logic"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L205",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_6_3_cost_calculation",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_6_3_cost_calculation"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L210",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_6_4_plan_persistence",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_6_4_plan_persistence"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L219",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_phase_7_sendgrid_email_integration",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_phase_7_sendgrid_email_integration"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L221",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_7_1_sendgrid_setup",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_7_1_sendgrid_setup"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L227",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_7_2_meal_proposal_email",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_7_2_meal_proposal_email"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L236",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_7_3_reminder_email",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_7_3_reminder_email"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L241",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_7_4_confirmation_email",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_7_4_confirmation_email"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L250",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_phase_8_web_ui_core_features",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_phase_8_web_ui_core_features"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L252",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_8_1_dashboard",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_8_1_dashboard"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L259",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_8_2_meal_detail_page",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_8_2_meal_detail_page"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L266",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_8_3_approval_center",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_8_3_approval_center"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L272",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_8_4_pantry_manager",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_8_4_pantry_manager"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L282",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_phase_9_web_ui_feedback_learning",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_phase_9_web_ui_feedback_learning"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L284",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_9_1_feedback_portal",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_9_1_feedback_portal"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L290",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_9_2_learning_integration",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_9_2_learning_integration"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L295",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_9_3_recipe_discovery",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_9_3_recipe_discovery"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L305",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_phase_10_shopping_list_print",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_phase_10_shopping_list_print"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L307",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_10_1_shopping_list_generation",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_10_1_shopping_list_generation"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L314",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_10_2_printable_shopping_list",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_10_2_printable_shopping_list"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L320",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_10_3_web_ui_shopping_list_view",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_10_3_web_ui_shopping_list_view"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L331",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_phase_11_image_strategy_implementation",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_phase_11_image_strategy_implementation"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L333",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_11_1_scraped_images",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_11_1_scraped_images"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L338",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_11_2_ai_image_generation_fallback",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_11_2_ai_image_generation_fallback"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L345",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_11_3_email_image_handling",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_11_3_email_image_handling"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L354",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_phase_12_polish_future_features",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_phase_12_polish_future_features"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L356",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_12_1_variety_analysis",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_12_1_variety_analysis"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L361",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_12_2_budget_tracking",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_12_2_budget_tracking"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L366",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_12_3_whatsapp_integration_future",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_12_3_whatsapp_integration_future"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L371",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_12_4_recipe_scraping_future",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_12_4_recipe_scraping_future"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L378",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_verification_commands",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_verification_commands"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L380",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_backend_tests",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_backend_tests"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L382",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_health_check",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_health_check"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L385",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_api_tests",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_api_tests"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L391",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_frontend_tests",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_frontend_tests"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L393",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_build_test",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_build_test"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L396",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_dev_server",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_dev_server"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L400",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_full_stack_tests",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_full_stack_tests"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L402",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_start_all_services",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_start_all_services"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L405",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_check_all_services_running",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_check_all_services_running"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L408",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_view_logs",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_view_logs"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L411",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_stop_all_services",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_stop_all_services"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L417",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_file_structure",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_file_structure"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L484",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_dependencies",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_dependencies"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L486",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_backend_python_3_11",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_backend_python_3_11"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L500",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_frontend_node_18",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_frontend_node_18"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L516",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_environment_variables",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_environment_variables"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L519",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_backend",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_backend"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L528",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_frontend",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_frontend"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L531",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_docker",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_docker"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/implementation-plan.md",
- "source_location": "L537",
- "weight": 1.0,
- "_src": "docs_implementation_plan_md",
- "_tgt": "docs_implementation_plan_md_notes",
- "confidence_score": 1.0,
- "source": "docs_implementation_plan_md",
- "target": "docs_implementation_plan_md_notes"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_running_the_meal_planner",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_running_the_meal_planner"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L3",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_prerequisites",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_prerequisites"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L10",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_environment_setup",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_environment_setup"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L12",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_1_clone_repository",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_1_clone_repository"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L19",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_2_create_environment_file",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_2_create_environment_file"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L28",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_database",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_database"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L31",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_sendgrid",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_sendgrid"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L34",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_family_emails",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_family_emails"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L38",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_lucky_california_for_scraping",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_lucky_california_for_scraping"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L41",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_ai_images_optional",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_ai_images_optional"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L47",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_3_create_ssl_certificates_for_remote_acc",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_3_create_ssl_certificates_for_remote_acc"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L51",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_option_1_let_s_encrypt_with_certbot",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_option_1_let_s_encrypt_with_certbot"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L54",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_option_2_self_signed_for_local_testing",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_option_2_self_signed_for_local_testing"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L59",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_starting_services",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_starting_services"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L61",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_local_development",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_local_development"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L64",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_start_all_services",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_start_all_services"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L67",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_view_logs",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_view_logs"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L71",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_stop_all_services",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_stop_all_services"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L75",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_production_deployment",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_production_deployment"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L78",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_start_with_production_settings",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_start_with_production_settings"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L81",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_check_service_status",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_check_service_status"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L84",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_view_resource_usage",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_view_resource_usage"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L88",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_accessing_the_application",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_accessing_the_application"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L90",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_local_access",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_local_access"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L96",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_remote_access_with_reverse_proxy",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_remote_access_with_reverse_proxy"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L102",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_database_management",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_database_management"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L104",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_initial_migration",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_initial_migration"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L333",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_run_migrations",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_run_migrations"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L110",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_check_current_migration",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_check_current_migration"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L113",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_create_new_migration_after_model_changes",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_create_new_migration_after_model_changes"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L117",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_backup_database",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_backup_database"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L120",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_backup_to_file",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_backup_to_file"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L123",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_restore_from_backup",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_restore_from_backup"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L127",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_reset_database",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_reset_database"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L130",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_danger_drops_and_recreates_all_data",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_danger_drops_and_recreates_all_data"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L136",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_scraping",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_scraping"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L138",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_manual_scrape_trigger",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_manual_scrape_trigger"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L141",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_scrape_lucky_california_weekly_ad",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_scrape_lucky_california_weekly_ad"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L147",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_check_scrape_logs",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_check_scrape_logs"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L150",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_view_recent_scrape_operations",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_view_recent_scrape_operations"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L154",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_scheduling",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_scheduling"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L160",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_email_testing",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_email_testing"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L162",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_test_email_send",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_test_email_send"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L165",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_send_test_email",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_send_test_email"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L171",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_view_email_logs",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_view_email_logs"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L177",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_troubleshooting",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_troubleshooting"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L179",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_backend_won_t_start",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_backend_won_t_start"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L182",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_check_logs",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_check_logs"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L185",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_common_issues",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_common_issues"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L186",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_database_not_ready_wait_for_db_to_be_hea",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_database_not_ready_wait_for_db_to_be_hea"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L187",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_port_conflict_check_if_port_8000_is_in_u",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_port_conflict_check_if_port_8000_is_in_u"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L188",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_missing_env_vars_verify_env_file_exists_",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_missing_env_vars_verify_env_file_exists_"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L191",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_frontend_build_fails",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_frontend_build_fails"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L194",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_check_for_node_version_issues",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_check_for_node_version_issues"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L197",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_clear_cache_and_rebuild",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_clear_cache_and_rebuild"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L203",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_database_connection_errors",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_database_connection_errors"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L206",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_verify_database_is_running",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_verify_database_is_running"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L209",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_test_connection_from_backend",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_test_connection_from_backend"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L212",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_check_credentials",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_check_credentials"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L216",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_scraping_failures",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_scraping_failures"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L219",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_check_lucky_california_is_accessible",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_check_lucky_california_is_accessible"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L222",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_verify_playwright_browser_installed",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_verify_playwright_browser_installed"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L225",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_manual_retry",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_manual_retry"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L229",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_email_not_sending",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_email_not_sending"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L232",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_verify_sendgrid_api_key",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_verify_sendgrid_api_key"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L235",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_check_sendgrid_dashboard_for_failures",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_check_sendgrid_dashboard_for_failures"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L236",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_ensure_sender_email_is_verified_in_sendg",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_ensure_sender_email_is_verified_in_sendg"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L239",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_development",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_development"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L241",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_backend_development",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_backend_development"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L244",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_enter_backend_container",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_enter_backend_container"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L247",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_run_tests",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_run_tests"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L250",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_run_with_hot_reload",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_run_with_hot_reload"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L254",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_frontend_development",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_frontend_development"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L257",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_enter_frontend_container",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_enter_frontend_container"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L260",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_run_dev_server_with_hot_reload",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_run_dev_server_with_hot_reload"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L264",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_database_migrations",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_database_migrations"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L267",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_create_migration",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_create_migration"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L270",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_upgrade",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_upgrade"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L273",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_downgrade",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_downgrade"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L276",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_show_migration_history",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_show_migration_history"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L280",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_health_checks",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_health_checks"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L283",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_check_backend_health",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_check_backend_health"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L286",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_check_database_connectivity",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_check_database_connectivity"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L289",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_check_all_services",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_check_all_services"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L293",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_logs",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_logs"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L295",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_view_all_logs",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_view_all_logs"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L301",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_view_specific_service",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_view_specific_service"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L309",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_configure_log_level",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_configure_log_level"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L316",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_security_notes",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_security_notes"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L324",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_updating",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_updating"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L327",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_pull_latest_code",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_pull_latest_code"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L330",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_rebuild_images",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_rebuild_images"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L336",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_restart_services",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_restart_services"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/RUNNING.md",
- "source_location": "L340",
- "weight": 1.0,
- "_src": "docs_running_md",
- "_tgt": "docs_running_md_stopping_completely",
- "confidence_score": 1.0,
- "source": "docs_running_md",
- "target": "docs_running_md_stopping_completely"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "docs_orientation_md",
- "_tgt": "docs_orientation_md_meal_planner_orientation",
- "confidence_score": 1.0,
- "source": "docs_orientation_md",
- "target": "docs_orientation_md_meal_planner_orientation"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L7",
- "weight": 1.0,
- "_src": "docs_orientation_md",
- "_tgt": "docs_orientation_md_what_this_project_is",
- "confidence_score": 1.0,
- "source": "docs_orientation_md",
- "target": "docs_orientation_md_what_this_project_is"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L15",
- "weight": 1.0,
- "_src": "docs_orientation_md",
- "_tgt": "docs_orientation_md_architecture_current",
- "confidence_score": 1.0,
- "source": "docs_orientation_md",
- "target": "docs_orientation_md_architecture_current"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L39",
- "weight": 1.0,
- "_src": "docs_orientation_md",
- "_tgt": "docs_orientation_md_phase_status_2026_05_08",
- "confidence_score": 1.0,
- "source": "docs_orientation_md",
- "target": "docs_orientation_md_phase_status_2026_05_08"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L59",
- "weight": 1.0,
- "_src": "docs_orientation_md",
- "_tgt": "docs_orientation_md_auth_model_r1_b_d_locked_in",
- "confidence_score": 1.0,
- "source": "docs_orientation_md",
- "target": "docs_orientation_md_auth_model_r1_b_d_locked_in"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L69",
- "weight": 1.0,
- "_src": "docs_orientation_md",
- "_tgt": "docs_orientation_md_database_schema_highlights",
- "confidence_score": 1.0,
- "source": "docs_orientation_md",
- "target": "docs_orientation_md_database_schema_highlights"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L83",
- "weight": 1.0,
- "_src": "docs_orientation_md",
- "_tgt": "docs_orientation_md_environment_variables_verified",
- "confidence_score": 1.0,
- "source": "docs_orientation_md",
- "target": "docs_orientation_md_environment_variables_verified"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L86",
- "weight": 1.0,
- "_src": "docs_orientation_md",
- "_tgt": "docs_orientation_md_database",
- "confidence_score": 1.0,
- "source": "docs_orientation_md",
- "target": "docs_orientation_md_database"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L90",
- "weight": 1.0,
- "_src": "docs_orientation_md",
- "_tgt": "docs_orientation_md_auth",
- "confidence_score": 1.0,
- "source": "docs_orientation_md",
- "target": "docs_orientation_md_auth"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L95",
- "weight": 1.0,
- "_src": "docs_orientation_md",
- "_tgt": "docs_orientation_md_email",
- "confidence_score": 1.0,
- "source": "docs_orientation_md",
- "target": "docs_orientation_md_email"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L101",
- "weight": 1.0,
- "_src": "docs_orientation_md",
- "_tgt": "docs_orientation_md_phase_5_orchestration",
- "confidence_score": 1.0,
- "source": "docs_orientation_md",
- "target": "docs_orientation_md_phase_5_orchestration"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L105",
- "weight": 1.0,
- "_src": "docs_orientation_md",
- "_tgt": "docs_orientation_md_lucky_swiftly",
- "confidence_score": 1.0,
- "source": "docs_orientation_md",
- "target": "docs_orientation_md_lucky_swiftly"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L109",
- "weight": 1.0,
- "_src": "docs_orientation_md",
- "_tgt": "docs_orientation_md_no_bearer_token_env_var_minted_on_demand",
- "confidence_score": 1.0,
- "source": "docs_orientation_md",
- "target": "docs_orientation_md_no_bearer_token_env_var_minted_on_demand"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L111",
- "weight": 1.0,
- "_src": "docs_orientation_md",
- "_tgt": "docs_orientation_md_other",
- "confidence_score": 1.0,
- "source": "docs_orientation_md",
- "target": "docs_orientation_md_other"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L121",
- "weight": 1.0,
- "_src": "docs_orientation_md",
- "_tgt": "docs_orientation_md_verification_commands",
- "confidence_score": 1.0,
- "source": "docs_orientation_md",
- "target": "docs_orientation_md_verification_commands"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L124",
- "weight": 1.0,
- "_src": "docs_orientation_md",
- "_tgt": "docs_orientation_md_full_local_stack_include_scheduler_for_p",
- "confidence_score": 1.0,
- "source": "docs_orientation_md",
- "target": "docs_orientation_md_full_local_stack_include_scheduler_for_p"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L129",
- "weight": 1.0,
- "_src": "docs_orientation_md",
- "_tgt": "docs_orientation_md_verify_scheduler",
- "confidence_score": 1.0,
- "source": "docs_orientation_md",
- "target": "docs_orientation_md_verify_scheduler"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L131",
- "weight": 1.0,
- "_src": "docs_orientation_md",
- "_tgt": "docs_orientation_md_expected_6_lines_scrape_generate_email_r",
- "confidence_score": 1.0,
- "source": "docs_orientation_md",
- "target": "docs_orientation_md_expected_6_lines_scrape_generate_email_r"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L133",
- "weight": 1.0,
- "_src": "docs_orientation_md",
- "_tgt": "docs_orientation_md_manual_step_trigger_useful_for_testing_w",
- "confidence_score": 1.0,
- "source": "docs_orientation_md",
- "target": "docs_orientation_md_manual_step_trigger_useful_for_testing_w"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L137",
- "weight": 1.0,
- "_src": "docs_orientation_md",
- "_tgt": "docs_orientation_md_frontend",
- "confidence_score": 1.0,
- "source": "docs_orientation_md",
- "target": "docs_orientation_md_frontend"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L140",
- "weight": 1.0,
- "_src": "docs_orientation_md",
- "_tgt": "docs_orientation_md_ci_github_workflows_ci_yml_runs_both_job",
- "confidence_score": 1.0,
- "source": "docs_orientation_md",
- "target": "docs_orientation_md_ci_github_workflows_ci_yml_runs_both_job"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L147",
- "weight": 1.0,
- "_src": "docs_orientation_md",
- "_tgt": "docs_orientation_md_conventions",
- "confidence_score": 1.0,
- "source": "docs_orientation_md",
- "target": "docs_orientation_md_conventions"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/ORIENTATION.md",
- "source_location": "L158",
- "weight": 1.0,
- "_src": "docs_orientation_md",
- "_tgt": "docs_orientation_md_where_to_look",
- "confidence_score": 1.0,
- "source": "docs_orientation_md",
- "target": "docs_orientation_md_where_to_look"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "docs_handoff_md",
- "_tgt": "docs_handoff_md_mealplanner_agent_handoff",
- "confidence_score": 1.0,
- "source": "docs_handoff_md",
- "target": "docs_handoff_md_mealplanner_agent_handoff"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L14",
- "weight": 1.0,
- "_src": "docs_handoff_md",
- "_tgt": "docs_handoff_md_tl_dr",
- "confidence_score": 1.0,
- "source": "docs_handoff_md",
- "target": "docs_handoff_md_tl_dr"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L26",
- "weight": 1.0,
- "_src": "docs_handoff_md",
- "_tgt": "docs_handoff_md_infrastructure_read_this_first",
- "confidence_score": 1.0,
- "source": "docs_handoff_md",
- "target": "docs_handoff_md_infrastructure_read_this_first"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L28",
- "weight": 1.0,
- "_src": "docs_handoff_md",
- "_tgt": "docs_handoff_md_access",
- "confidence_score": 1.0,
- "source": "docs_handoff_md",
- "target": "docs_handoff_md_access"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L33",
- "weight": 1.0,
- "_src": "docs_handoff_md",
- "_tgt": "docs_handoff_md_stack_up",
- "confidence_score": 1.0,
- "source": "docs_handoff_md",
- "target": "docs_handoff_md_stack_up"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L39",
- "weight": 1.0,
- "_src": "docs_handoff_md",
- "_tgt": "docs_handoff_md_applying_python_code_changes",
- "confidence_score": 1.0,
- "source": "docs_handoff_md",
- "target": "docs_handoff_md_applying_python_code_changes"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L46",
- "weight": 1.0,
- "_src": "docs_handoff_md",
- "_tgt": "docs_handoff_md_db_connection",
- "confidence_score": 1.0,
- "source": "docs_handoff_md",
- "target": "docs_handoff_md_db_connection"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L52",
- "weight": 1.0,
- "_src": "docs_handoff_md",
- "_tgt": "docs_handoff_md_admin_api_auth",
- "confidence_score": 1.0,
- "source": "docs_handoff_md",
- "target": "docs_handoff_md_admin_api_auth"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L58",
- "weight": 1.0,
- "_src": "docs_handoff_md",
- "_tgt": "docs_handoff_md_key_env_vars_env_test",
- "confidence_score": 1.0,
- "source": "docs_handoff_md",
- "target": "docs_handoff_md_key_env_vars_env_test"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L69",
- "weight": 1.0,
- "_src": "docs_handoff_md",
- "_tgt": "docs_handoff_md_family_data_live_seeded",
- "confidence_score": 1.0,
- "source": "docs_handoff_md",
- "target": "docs_handoff_md_family_data_live_seeded"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L78",
- "weight": 1.0,
- "_src": "docs_handoff_md",
- "_tgt": "docs_handoff_md_what_changed_in_this_session",
- "confidence_score": 1.0,
- "source": "docs_handoff_md",
- "target": "docs_handoff_md_what_changed_in_this_session"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L80",
- "weight": 1.0,
- "_src": "docs_handoff_md",
- "_tgt": "docs_handoff_md_mvp_login_auth_gating_committed_in_featu",
- "confidence_score": 1.0,
- "source": "docs_handoff_md",
- "target": "docs_handoff_md_mvp_login_auth_gating_committed_in_featu"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L86",
- "weight": 1.0,
- "_src": "docs_handoff_md",
- "_tgt": "docs_handoff_md_nginx_committed_in_59a15a2",
- "confidence_score": 1.0,
- "source": "docs_handoff_md",
- "target": "docs_handoff_md_nginx_committed_in_59a15a2"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L91",
- "weight": 1.0,
- "_src": "docs_handoff_md",
- "_tgt": "docs_handoff_md_vote_email_enrichment_aeed2a4",
- "confidence_score": 1.0,
- "source": "docs_handoff_md",
- "target": "docs_handoff_md_vote_email_enrichment_aeed2a4"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L99",
- "weight": 1.0,
- "_src": "docs_handoff_md",
- "_tgt": "docs_handoff_md_shopping_list_email_improvements_aeed2a4",
- "confidence_score": 1.0,
- "source": "docs_handoff_md",
- "target": "docs_handoff_md_shopping_list_email_improvements_aeed2a4"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L103",
- "weight": 1.0,
- "_src": "docs_handoff_md",
- "_tgt": "docs_handoff_md_ingredient_matcher_full_rewrite_ac2b575_",
- "confidence_score": 1.0,
- "source": "docs_handoff_md",
- "target": "docs_handoff_md_ingredient_matcher_full_rewrite_ac2b575_"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L145",
- "weight": 1.0,
- "_src": "docs_handoff_md",
- "_tgt": "docs_handoff_md_scraper_fix_save_priceless_produce_23738",
- "confidence_score": 1.0,
- "source": "docs_handoff_md",
- "target": "docs_handoff_md_scraper_fix_save_priceless_produce_23738"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L150",
- "weight": 1.0,
- "_src": "docs_handoff_md",
- "_tgt": "docs_handoff_md_what_is_real_verified",
- "confidence_score": 1.0,
- "source": "docs_handoff_md",
- "target": "docs_handoff_md_what_is_real_verified"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L154",
- "weight": 1.0,
- "_src": "docs_handoff_md",
- "_tgt": "docs_handoff_md_lucky_ca_api_swiftly_full_catalog_access",
- "confidence_score": 1.0,
- "source": "docs_handoff_md",
- "target": "docs_handoff_md_lucky_ca_api_swiftly_full_catalog_access"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L162",
- "weight": 1.0,
- "_src": "docs_handoff_md",
- "_tgt": "docs_handoff_md_matcher_runs_automatically",
- "confidence_score": 1.0,
- "source": "docs_handoff_md",
- "target": "docs_handoff_md_matcher_runs_automatically"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L167",
- "weight": 1.0,
- "_src": "docs_handoff_md",
- "_tgt": "docs_handoff_md_what_is_stubbed_or_missing",
- "confidence_score": 1.0,
- "source": "docs_handoff_md",
- "target": "docs_handoff_md_what_is_stubbed_or_missing"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L169",
- "weight": 1.0,
- "_src": "docs_handoff_md",
- "_tgt": "docs_handoff_md_recipe_images_phase_10_approved_not_star",
- "confidence_score": 1.0,
- "source": "docs_handoff_md",
- "target": "docs_handoff_md_recipe_images_phase_10_approved_not_star"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L174",
- "weight": 1.0,
- "_src": "docs_handoff_md",
- "_tgt": "docs_handoff_md_recipe_descriptions",
- "confidence_score": 1.0,
- "source": "docs_handoff_md",
- "target": "docs_handoff_md_recipe_descriptions"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L178",
- "weight": 1.0,
- "_src": "docs_handoff_md",
- "_tgt": "docs_handoff_md_olive_oil_corn_tortillas_lucky_catalog_g",
- "confidence_score": 1.0,
- "source": "docs_handoff_md",
- "target": "docs_handoff_md_olive_oil_corn_tortillas_lucky_catalog_g"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L183",
- "weight": 1.0,
- "_src": "docs_handoff_md",
- "_tgt": "docs_handoff_md_phase_8_feedback_ui_done",
- "confidence_score": 1.0,
- "source": "docs_handoff_md",
- "target": "docs_handoff_md_phase_8_feedback_ui_done"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L189",
- "weight": 1.0,
- "_src": "docs_handoff_md",
- "_tgt": "docs_handoff_md_known_caveats_and_traps",
- "confidence_score": 1.0,
- "source": "docs_handoff_md",
- "target": "docs_handoff_md_known_caveats_and_traps"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L212",
- "weight": 1.0,
- "_src": "docs_handoff_md",
- "_tgt": "docs_handoff_md_admin_api_reference",
- "confidence_score": 1.0,
- "source": "docs_handoff_md",
- "target": "docs_handoff_md_admin_api_reference"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L215",
- "weight": 1.0,
- "_src": "docs_handoff_md",
- "_tgt": "docs_handoff_md_trigger_individual_steps",
- "confidence_score": 1.0,
- "source": "docs_handoff_md",
- "target": "docs_handoff_md_trigger_individual_steps"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L218",
- "weight": 1.0,
- "_src": "docs_handoff_md",
- "_tgt": "docs_handoff_md_valid_steps_scrape_generate_email_remind",
- "confidence_score": 1.0,
- "source": "docs_handoff_md",
- "target": "docs_handoff_md_valid_steps_scrape_generate_email_remind"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L220",
- "weight": 1.0,
- "_src": "docs_handoff_md",
- "_tgt": "docs_handoff_md_full_week_cycle_background",
- "confidence_score": 1.0,
- "source": "docs_handoff_md",
- "target": "docs_handoff_md_full_week_cycle_background"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L224",
- "weight": 1.0,
- "_src": "docs_handoff_md",
- "_tgt": "docs_handoff_md_scrape_status",
- "confidence_score": 1.0,
- "source": "docs_handoff_md",
- "target": "docs_handoff_md_scrape_status"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L228",
- "weight": 1.0,
- "_src": "docs_handoff_md",
- "_tgt": "docs_handoff_md_weekly_run_status",
- "confidence_score": 1.0,
- "source": "docs_handoff_md",
- "target": "docs_handoff_md_weekly_run_status"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L232",
- "weight": 1.0,
- "_src": "docs_handoff_md",
- "_tgt": "docs_handoff_md_trigger_fresh_scrape_auto_match",
- "confidence_score": 1.0,
- "source": "docs_handoff_md",
- "target": "docs_handoff_md_trigger_fresh_scrape_auto_match"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L239",
- "weight": 1.0,
- "_src": "docs_handoff_md",
- "_tgt": "docs_handoff_md_suggested_next_moves",
- "confidence_score": 1.0,
- "source": "docs_handoff_md",
- "target": "docs_handoff_md_suggested_next_moves"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L241",
- "weight": 1.0,
- "_src": "docs_handoff_md",
- "_tgt": "docs_handoff_md_1_spoonacular_recipe_enrichment_images_d",
- "confidence_score": 1.0,
- "source": "docs_handoff_md",
- "target": "docs_handoff_md_1_spoonacular_recipe_enrichment_images_d"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L251",
- "weight": 1.0,
- "_src": "docs_handoff_md",
- "_tgt": "docs_handoff_md_2_ollama_llm_matcher_olive_oil_corn_tort",
- "confidence_score": 1.0,
- "source": "docs_handoff_md",
- "target": "docs_handoff_md_2_ollama_llm_matcher_olive_oil_corn_tort"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L267",
- "weight": 1.0,
- "_src": "docs_handoff_md",
- "_tgt": "docs_handoff_md_3_natural_friday_cycle",
- "confidence_score": 1.0,
- "source": "docs_handoff_md",
- "target": "docs_handoff_md_3_natural_friday_cycle"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L273",
- "weight": 1.0,
- "_src": "docs_handoff_md",
- "_tgt": "docs_handoff_md_file_map_additions_from_this_session",
- "confidence_score": 1.0,
- "source": "docs_handoff_md",
- "target": "docs_handoff_md_file_map_additions_from_this_session"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/HANDOFF.md",
- "source_location": "L285",
- "weight": 1.0,
- "_src": "docs_handoff_md",
- "_tgt": "docs_handoff_md_final_words",
- "confidence_score": 1.0,
- "source": "docs_handoff_md",
- "target": "docs_handoff_md_final_words"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "docs_specs_2026_05_05_meal_planner_algorithm_design_md",
- "_tgt": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_meal_planner_algorithm_design_spec",
- "confidence_score": 1.0,
- "source": "docs_specs_2026_05_05_meal_planner_algorithm_design_md",
- "target": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_meal_planner_algorithm_design_spec"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": "L9",
- "weight": 1.0,
- "_src": "docs_specs_2026_05_05_meal_planner_algorithm_design_md",
- "_tgt": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_1_goal",
- "confidence_score": 1.0,
- "source": "docs_specs_2026_05_05_meal_planner_algorithm_design_md",
- "target": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_1_goal"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": "L17",
- "weight": 1.0,
- "_src": "docs_specs_2026_05_05_meal_planner_algorithm_design_md",
- "_tgt": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_2_algorithm_shape",
- "confidence_score": 1.0,
- "source": "docs_specs_2026_05_05_meal_planner_algorithm_design_md",
- "target": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_2_algorithm_shape"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": "L26",
- "weight": 1.0,
- "_src": "docs_specs_2026_05_05_meal_planner_algorithm_design_md",
- "_tgt": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_2_1_hard_constraints",
- "confidence_score": 1.0,
- "source": "docs_specs_2026_05_05_meal_planner_algorithm_design_md",
- "target": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_2_1_hard_constraints"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": "L41",
- "weight": 1.0,
- "_src": "docs_specs_2026_05_05_meal_planner_algorithm_design_md",
- "_tgt": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_2_2_scoring_signals",
- "confidence_score": 1.0,
- "source": "docs_specs_2026_05_05_meal_planner_algorithm_design_md",
- "target": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_2_2_scoring_signals"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": "L64",
- "weight": 1.0,
- "_src": "docs_specs_2026_05_05_meal_planner_algorithm_design_md",
- "_tgt": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_2_3_set_selection_diversity",
- "confidence_score": 1.0,
- "source": "docs_specs_2026_05_05_meal_planner_algorithm_design_md",
- "target": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_2_3_set_selection_diversity"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": "L82",
- "weight": 1.0,
- "_src": "docs_specs_2026_05_05_meal_planner_algorithm_design_md",
- "_tgt": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_3_ingredient_grocery_item_matching_layer",
- "confidence_score": 1.0,
- "source": "docs_specs_2026_05_05_meal_planner_algorithm_design_md",
- "target": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_3_ingredient_grocery_item_matching_layer"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": "L86",
- "weight": 1.0,
- "_src": "docs_specs_2026_05_05_meal_planner_algorithm_design_md",
- "_tgt": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_3_1_schema",
- "confidence_score": 1.0,
- "source": "docs_specs_2026_05_05_meal_planner_algorithm_design_md",
- "target": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_3_1_schema"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": "L112",
- "weight": 1.0,
- "_src": "docs_specs_2026_05_05_meal_planner_algorithm_design_md",
- "_tgt": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_3_2_match_job",
- "confidence_score": 1.0,
- "source": "docs_specs_2026_05_05_meal_planner_algorithm_design_md",
- "target": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_3_2_match_job"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": "L123",
- "weight": 1.0,
- "_src": "docs_specs_2026_05_05_meal_planner_algorithm_design_md",
- "_tgt": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_3_3_manual_override",
- "confidence_score": 1.0,
- "source": "docs_specs_2026_05_05_meal_planner_algorithm_design_md",
- "target": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_3_3_manual_override"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": "L127",
- "weight": 1.0,
- "_src": "docs_specs_2026_05_05_meal_planner_algorithm_design_md",
- "_tgt": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_3_4_recipe_create_assist",
- "confidence_score": 1.0,
- "source": "docs_specs_2026_05_05_meal_planner_algorithm_design_md",
- "target": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_3_4_recipe_create_assist"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": "L133",
- "weight": 1.0,
- "_src": "docs_specs_2026_05_05_meal_planner_algorithm_design_md",
- "_tgt": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_4_thin_phase_4_surface",
- "confidence_score": 1.0,
- "source": "docs_specs_2026_05_05_meal_planner_algorithm_design_md",
- "target": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_4_thin_phase_4_surface"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": "L137",
- "weight": 1.0,
- "_src": "docs_specs_2026_05_05_meal_planner_algorithm_design_md",
- "_tgt": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_4_1_in_scope",
- "confidence_score": 1.0,
- "source": "docs_specs_2026_05_05_meal_planner_algorithm_design_md",
- "target": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_4_1_in_scope"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": "L150",
- "weight": 1.0,
- "_src": "docs_specs_2026_05_05_meal_planner_algorithm_design_md",
- "_tgt": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_4_2_recipe_model_fields_additions_to_exi",
- "confidence_score": 1.0,
- "source": "docs_specs_2026_05_05_meal_planner_algorithm_design_md",
- "target": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_4_2_recipe_model_fields_additions_to_exi"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": "L174",
- "weight": 1.0,
- "_src": "docs_specs_2026_05_05_meal_planner_algorithm_design_md",
- "_tgt": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_4_3_out_of_scope_deferred",
- "confidence_score": 1.0,
- "source": "docs_specs_2026_05_05_meal_planner_algorithm_design_md",
- "target": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_4_3_out_of_scope_deferred"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": "L185",
- "weight": 1.0,
- "_src": "docs_specs_2026_05_05_meal_planner_algorithm_design_md",
- "_tgt": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_5_phase_9_api_surface",
- "confidence_score": 1.0,
- "source": "docs_specs_2026_05_05_meal_planner_algorithm_design_md",
- "target": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_5_phase_9_api_surface"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": "L204",
- "weight": 1.0,
- "_src": "docs_specs_2026_05_05_meal_planner_algorithm_design_md",
- "_tgt": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_6_recipe_source_comparison_deferred_deci",
- "confidence_score": 1.0,
- "source": "docs_specs_2026_05_05_meal_planner_algorithm_design_md",
- "target": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_6_recipe_source_comparison_deferred_deci"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": "L224",
- "weight": 1.0,
- "_src": "docs_specs_2026_05_05_meal_planner_algorithm_design_md",
- "_tgt": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_7_open_questions_deferred",
- "confidence_score": 1.0,
- "source": "docs_specs_2026_05_05_meal_planner_algorithm_design_md",
- "target": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_7_open_questions_deferred"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": "L233",
- "weight": 1.0,
- "_src": "docs_specs_2026_05_05_meal_planner_algorithm_design_md",
- "_tgt": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_8_implementation_order",
- "confidence_score": 1.0,
- "source": "docs_specs_2026_05_05_meal_planner_algorithm_design_md",
- "target": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_8_implementation_order"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/specs/2026-05-05-meal-planner-algorithm-design.md",
- "source_location": "L245",
- "weight": 1.0,
- "_src": "docs_specs_2026_05_05_meal_planner_algorithm_design_md",
- "_tgt": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_9_out_of_scope_for_this_spec",
- "confidence_score": 1.0,
- "source": "docs_specs_2026_05_05_meal_planner_algorithm_design_md",
- "target": "docs_specs_2026_05_05_meal_planner_algorithm_design_md_9_out_of_scope_for_this_spec"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "_tgt": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_thin_phase_4_recipe_engine_matching_laye",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "target": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_thin_phase_4_recipe_engine_matching_laye"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L21",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "_tgt": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_file_structure",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "target": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_file_structure"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L50",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "_tgt": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_1_add_rapidfuzz_dependency",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "target": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_1_add_rapidfuzz_dependency"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L92",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "_tgt": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_2_migration_0006_schema_changes",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "target": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_2_migration_0006_schema_changes"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L228",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "_tgt": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_3_update_sqlalchemy_models",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "target": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_3_update_sqlalchemy_models"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L313",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "_tgt": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_4_pydantic_schemas_ingredient",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "target": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_4_pydantic_schemas_ingredient"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L450",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "_tgt": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_5_pydantic_schemas_recipe",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "target": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_5_pydantic_schemas_recipe"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L611",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "_tgt": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_6_ingredient_crud_endpoints",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "target": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_6_ingredient_crud_endpoints"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L850",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "_tgt": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_7_recipe_crud_endpoints",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "target": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_7_recipe_crud_endpoints"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L1121",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "_tgt": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_8_resolve_ingredient_assist_endpoin",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "target": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_8_resolve_ingredient_assist_endpoin"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L1304",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "_tgt": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_9_matcher_service_rapidfuzz_top_3",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "target": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_9_matcher_service_rapidfuzz_top_3"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L1528",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "_tgt": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_10_wire_matcher_into_scrape_success",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "target": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_10_wire_matcher_into_scrape_success"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L1658",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "_tgt": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_11_manual_match_override_endpoints",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "target": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_11_manual_match_override_endpoints"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L1757",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "_tgt": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_re_import_basemodel_near_the_top_of_the_",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "target": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_re_import_basemodel_near_the_top_of_the_"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L1841",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "_tgt": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_12_neversuggest_crud_endpoints",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "target": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_12_neversuggest_crud_endpoints"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L2078",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "_tgt": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_13_migration_0007_seed_canonical_in",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "target": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_13_migration_0007_seed_canonical_in"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L2110",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "_tgt": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_stable_uuids_so_re_running_upgrade_after",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "target": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_stable_uuids_so_re_running_upgrade_after"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L2263",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "_tgt": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_14_migration_0007_populate_30_start",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "target": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_14_migration_0007_populate_30_start"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L2406",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "_tgt": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_15_end_to_end_smoke_test_docs_refre",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "target": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_task_15_end_to_end_smoke_test_docs_refre"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L2504",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "_tgt": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_verification_gate",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "target": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_verification_gate"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md",
- "source_location": "L2519",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "_tgt": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_out_of_scope_phase_9_plan_written_separa",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md",
- "target": "docs_superpowers_plans_2026_05_05_thin_phase_4_recipe_engine_md_out_of_scope_phase_9_plan_written_separa"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-05-phase-9-planner-algorithm.md",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md",
- "_tgt": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md_phase_9_meal_planner_algorithm_implement",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md",
- "target": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md_phase_9_meal_planner_algorithm_implement"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-05-phase-9-planner-algorithm.md",
- "source_location": "L22",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md",
- "_tgt": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md_file_structure",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md",
- "target": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md_file_structure"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-05-phase-9-planner-algorithm.md",
- "source_location": "L49",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md",
- "_tgt": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md_task_1_planner_config_types",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md",
- "target": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md_task_1_planner_config_types"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-05-phase-9-planner-algorithm.md",
- "source_location": "L208",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md",
- "_tgt": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md_task_2_cost_savings_estimator",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md",
- "target": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md_task_2_cost_savings_estimator"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-05-phase-9-planner-algorithm.md",
- "source_location": "L456",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md",
- "_tgt": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md_task_3_hard_constraint_filter",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md",
- "target": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md_task_3_hard_constraint_filter"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-05-phase-9-planner-algorithm.md",
- "source_location": "L778",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md",
- "_tgt": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md_task_4_individual_scoring",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md",
- "target": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md_task_4_individual_scoring"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-05-phase-9-planner-algorithm.md",
- "source_location": "L1040",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md",
- "_tgt": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md_task_5_top_k_set_selection_with_diversit",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md",
- "target": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md_task_5_top_k_set_selection_with_diversit"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-05-phase-9-planner-algorithm.md",
- "source_location": "L1212",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md",
- "_tgt": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md_task_6_generation_orchestrator",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md",
- "target": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md_task_6_generation_orchestrator"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-05-phase-9-planner-algorithm.md",
- "source_location": "L1559",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md",
- "_tgt": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md_task_7_generate_api_endpoint",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md",
- "target": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md_task_7_generate_api_endpoint"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-05-phase-9-planner-algorithm.md",
- "source_location": "L1899",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md",
- "_tgt": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md_task_8_final_regression_sweep_docs_refre",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md",
- "target": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md_task_8_final_regression_sweep_docs_refre"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-05-phase-9-planner-algorithm.md",
- "source_location": "L1948",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md",
- "_tgt": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md_verification_gate",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md",
- "target": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md_verification_gate"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-05-phase-9-planner-algorithm.md",
- "source_location": "L1961",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md",
- "_tgt": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md_open_items_deferred_tracked_here",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md",
- "target": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md_open_items_deferred_tracked_here"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-05-phase-9-planner-algorithm.md",
- "source_location": "L1971",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md",
- "_tgt": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md_out_of_scope_other_phases",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md",
- "target": "docs_superpowers_plans_2026_05_05_phase_9_planner_algorithm_md_out_of_scope_other_phases"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_phase_5_weekly_orchestration_implementat",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "target": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_phase_5_weekly_orchestration_implementat"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L13",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_file_map",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "target": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_file_map"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L32",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_task_1_alembic_migration_0008",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "target": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_task_1_alembic_migration_0008"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L40",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_backend_alembic_versions_0008_phase5_orc",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "target": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_backend_alembic_versions_0008_phase5_orc"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L134",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_task_2_weeklyrun_model_familyprofile_upd",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "target": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_task_2_weeklyrun_model_familyprofile_upd"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L177",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_column_after_calorie_target_line",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "target": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_column_after_calorie_target_line"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L180",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_relationship_after_the_existing_relation",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "target": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_relationship_after_the_existing_relation"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L202",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_task_3_settings_admin_email_app_base_url",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "target": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_task_3_settings_admin_email_app_base_url"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L242",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_task_4_alerts_py",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "target": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_task_4_alerts_py"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L1414",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "target": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L263",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_fixtures",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "target": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_fixtures"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L393",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_alerts_py_tests",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "target": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_alerts_py_tests"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L489",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_task_5_step_scrape",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "target": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_task_5_step_scrape"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L499",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_step_scrape_tests",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "target": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_step_scrape_tests"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L631",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_task_6_step_generate",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "target": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_task_6_step_generate"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L641",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_step_generate_tests",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "target": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_step_generate_tests"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L742",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_task_7_step_email",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "target": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_task_7_step_email"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L752",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_step_email_tests",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "target": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_step_email_tests"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L900",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_task_8_step_deadline",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "target": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_task_8_step_deadline"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L910",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_step_deadline_tests",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "target": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_step_deadline_tests"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L1013",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_task_9_step_finalize",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "target": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_task_9_step_finalize"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L1023",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_step_finalize_tests",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "target": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_step_finalize_tests"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L1208",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_task_10_runner_py_orchestrator_init_py",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "target": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_task_10_runner_py_orchestrator_init_py"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L1219",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_runner_tests",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "target": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_runner_tests"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L1370",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_backend_app_services_orchestrator_init_p",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "target": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_backend_app_services_orchestrator_init_p"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L1403",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_task_11_admin_orchestrate_endpoints",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "target": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_task_11_admin_orchestrate_endpoints"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L1413",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_admin_endpoint_tests",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "target": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_admin_endpoint_tests"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L1574",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_task_12_scheduler_entry_point",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "target": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_task_12_scheduler_entry_point"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L1680",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_task_13_docker_compose_scheduler_service",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "target": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_task_13_docker_compose_scheduler_service"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L1749",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_final_verification",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "target": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_final_verification"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L1763",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_seed_a_family_profile_row_first_if_db_is",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "target": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_seed_a_family_profile_row_first_if_db_is"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase5-orchestration.md",
- "source_location": "L1783",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_environment_variables_added",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md",
- "target": "docs_superpowers_plans_2026_05_07_phase5_orchestration_md_environment_variables_added"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase6-sendgrid.md",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md_phase_6_sendgrid_email_integration_imple",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md",
- "target": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md_phase_6_sendgrid_email_integration_imple"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase6-sendgrid.md",
- "source_location": "L13",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md_file_map",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md",
- "target": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md_file_map"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase6-sendgrid.md",
- "source_location": "L30",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md_task_1_migration_0009_add_reminded_at_to",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md",
- "target": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md_task_1_migration_0009_add_reminded_at_to"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase6-sendgrid.md",
- "source_location": "L679",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md_context",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md",
- "target": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md_context"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase6-sendgrid.md",
- "source_location": "L102",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md_expected_info_alembic_runtime_migration_",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md",
- "target": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md_expected_info_alembic_runtime_migration_"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase6-sendgrid.md",
- "source_location": "L105",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md_expected_running_upgrade_0008_0009_again",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md",
- "target": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md_expected_running_upgrade_0008_0009_again"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase6-sendgrid.md",
- "source_location": "L128",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md_task_2_wire_sendgridemailbackend",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md",
- "target": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md_task_2_wire_sendgridemailbackend"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase6-sendgrid.md",
- "source_location": "L302",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md_task_3_step_reminder_tests",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md",
- "target": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md_task_3_step_reminder_tests"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase6-sendgrid.md",
- "source_location": "L339",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md_step_reminder",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md",
- "target": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md_step_reminder"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase6-sendgrid.md",
- "source_location": "L579",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md_task_4_wire_reminder_into_runner_admin_a",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md",
- "target": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md_task_4_wire_reminder_into_runner_admin_a"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase6-sendgrid.md",
- "source_location": "L674",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md_task_5_html_escape_p5_a_and_getattr_clea",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md",
- "target": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md_task_5_html_escape_p5_a_and_getattr_clea"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-07-phase6-sendgrid.md",
- "source_location": "L828",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md",
- "_tgt": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md_final_verification",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md",
- "target": "docs_superpowers_plans_2026_05_07_phase6_sendgrid_md_final_verification"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-09-mvp-login.md",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_09_mvp_login_md",
- "_tgt": "docs_superpowers_plans_2026_05_09_mvp_login_md_mvp_login_family_seed_implementation_pla",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_09_mvp_login_md",
- "target": "docs_superpowers_plans_2026_05_09_mvp_login_md_mvp_login_family_seed_implementation_pla"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-09-mvp-login.md",
- "source_location": "L13",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_09_mvp_login_md",
- "_tgt": "docs_superpowers_plans_2026_05_09_mvp_login_md_file_map",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_09_mvp_login_md",
- "target": "docs_superpowers_plans_2026_05_09_mvp_login_md_file_map"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-09-mvp-login.md",
- "source_location": "L24",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_09_mvp_login_md",
- "_tgt": "docs_superpowers_plans_2026_05_09_mvp_login_md_task_1_login_page_401_interceptor_nav_lo",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_09_mvp_login_md",
- "target": "docs_superpowers_plans_2026_05_09_mvp_login_md_task_1_login_page_401_interceptor_nav_lo"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-09-mvp-login.md",
- "source_location": "L33",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_09_mvp_login_md",
- "_tgt": "docs_superpowers_plans_2026_05_09_mvp_login_md_step_1_create_frontend_src_pages_login_t",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_09_mvp_login_md",
- "target": "docs_superpowers_plans_2026_05_09_mvp_login_md_step_1_create_frontend_src_pages_login_t"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-09-mvp-login.md",
- "source_location": "L92",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_09_mvp_login_md",
- "_tgt": "docs_superpowers_plans_2026_05_09_mvp_login_md_step_2_modify_frontend_src_app_tsx",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_09_mvp_login_md",
- "target": "docs_superpowers_plans_2026_05_09_mvp_login_md_step_2_modify_frontend_src_app_tsx"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-09-mvp-login.md",
- "source_location": "L183",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_09_mvp_login_md",
- "_tgt": "docs_superpowers_plans_2026_05_09_mvp_login_md_step_3_add_401_interceptor_to_frontend_s",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_09_mvp_login_md",
- "target": "docs_superpowers_plans_2026_05_09_mvp_login_md_step_3_add_401_interceptor_to_frontend_s"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-09-mvp-login.md",
- "source_location": "L199",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_09_mvp_login_md",
- "_tgt": "docs_superpowers_plans_2026_05_09_mvp_login_md_step_4_build_and_verify",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_09_mvp_login_md",
- "target": "docs_superpowers_plans_2026_05_09_mvp_login_md_step_4_build_and_verify"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-09-mvp-login.md",
- "source_location": "L205",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_09_mvp_login_md",
- "_tgt": "docs_superpowers_plans_2026_05_09_mvp_login_md_expected_no_typescript_errors_build_succ",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_09_mvp_login_md",
- "target": "docs_superpowers_plans_2026_05_09_mvp_login_md_expected_no_typescript_errors_build_succ"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-09-mvp-login.md",
- "source_location": "L208",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_09_mvp_login_md",
- "_tgt": "docs_superpowers_plans_2026_05_09_mvp_login_md_step_5_commit",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_09_mvp_login_md",
- "target": "docs_superpowers_plans_2026_05_09_mvp_login_md_step_5_commit"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-09-mvp-login.md",
- "source_location": "L220",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_09_mvp_login_md",
- "_tgt": "docs_superpowers_plans_2026_05_09_mvp_login_md_task_2_family_profile_seed_script",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_09_mvp_login_md",
- "target": "docs_superpowers_plans_2026_05_09_mvp_login_md_task_2_family_profile_seed_script"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-09-mvp-login.md",
- "source_location": "L241",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_09_mvp_login_md",
- "_tgt": "docs_superpowers_plans_2026_05_09_mvp_login_md_edit_these_before_running",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_09_mvp_login_md",
- "target": "docs_superpowers_plans_2026_05_09_mvp_login_md_edit_these_before_running"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-09-mvp-login.md",
- "source_location": "L249",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_09_mvp_login_md",
- "_tgt": "docs_superpowers_plans_2026_05_09_mvp_login_md_",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_09_mvp_login_md",
- "target": "docs_superpowers_plans_2026_05_09_mvp_login_md_"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-09-mvp-login.md",
- "source_location": "L288",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_09_mvp_login_md",
- "_tgt": "docs_superpowers_plans_2026_05_09_mvp_login_md_step_commit",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_09_mvp_login_md",
- "target": "docs_superpowers_plans_2026_05_09_mvp_login_md_step_commit"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-09-mvp-login.md",
- "source_location": "L298",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_09_mvp_login_md",
- "_tgt": "docs_superpowers_plans_2026_05_09_mvp_login_md_post_merge_steps_run_by_operator_after_m",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_09_mvp_login_md",
- "target": "docs_superpowers_plans_2026_05_09_mvp_login_md_post_merge_steps_run_by_operator_after_m"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-09-mvp-login.md",
- "source_location": "L300",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_09_mvp_login_md",
- "_tgt": "docs_superpowers_plans_2026_05_09_mvp_login_md_1_add_app_base_url_to_env_test",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_09_mvp_login_md",
- "target": "docs_superpowers_plans_2026_05_09_mvp_login_md_1_add_app_base_url_to_env_test"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-09-mvp-login.md",
- "source_location": "L309",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_09_mvp_login_md",
- "_tgt": "docs_superpowers_plans_2026_05_09_mvp_login_md_2_rebuild_frontend_container_and_restart",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_09_mvp_login_md",
- "target": "docs_superpowers_plans_2026_05_09_mvp_login_md_2_rebuild_frontend_container_and_restart"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-09-mvp-login.md",
- "source_location": "L316",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_09_mvp_login_md",
- "_tgt": "docs_superpowers_plans_2026_05_09_mvp_login_md_3_run_the_seed_script",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_09_mvp_login_md",
- "target": "docs_superpowers_plans_2026_05_09_mvp_login_md_3_run_the_seed_script"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-09-mvp-login.md",
- "source_location": "L319",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_09_mvp_login_md",
- "_tgt": "docs_superpowers_plans_2026_05_09_mvp_login_md_edit_scripts_seed_family_py_to_fill_in_r",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_09_mvp_login_md",
- "target": "docs_superpowers_plans_2026_05_09_mvp_login_md_edit_scripts_seed_family_py_to_fill_in_r"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/plans/2026-05-09-mvp-login.md",
- "source_location": "L324",
- "weight": 1.0,
- "_src": "docs_superpowers_plans_2026_05_09_mvp_login_md",
- "_tgt": "docs_superpowers_plans_2026_05_09_mvp_login_md_4_verify_login_works",
- "confidence_score": 1.0,
- "source": "docs_superpowers_plans_2026_05_09_mvp_login_md",
- "target": "docs_superpowers_plans_2026_05_09_mvp_login_md_4_verify_login_works"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md",
- "_tgt": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_phase_6_sendgrid_email_integration_desig",
- "confidence_score": 1.0,
- "source": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md",
- "target": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_phase_6_sendgrid_email_integration_desig"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": "L7",
- "weight": 1.0,
- "_src": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md",
- "_tgt": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_goal",
- "confidence_score": 1.0,
- "source": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md",
- "target": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_goal"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": "L13",
- "weight": 1.0,
- "_src": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md",
- "_tgt": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_scope",
- "confidence_score": 1.0,
- "source": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md",
- "target": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_scope"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": "L27",
- "weight": 1.0,
- "_src": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md",
- "_tgt": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_architecture",
- "confidence_score": 1.0,
- "source": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md",
- "target": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_architecture"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": "L35",
- "weight": 1.0,
- "_src": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md",
- "_tgt": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_components",
- "confidence_score": 1.0,
- "source": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md",
- "target": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_components"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": "L37",
- "weight": 1.0,
- "_src": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md",
- "_tgt": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_backend_app_services_email_py_modify",
- "confidence_score": 1.0,
- "source": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md",
- "target": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_backend_app_services_email_py_modify"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": "L67",
- "weight": 1.0,
- "_src": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md",
- "_tgt": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_backend_app_config_py_modify",
- "confidence_score": 1.0,
- "source": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md",
- "target": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_backend_app_config_py_modify"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": "L74",
- "weight": 1.0,
- "_src": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md",
- "_tgt": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_backend_app_services_orchestrator_steps_",
- "confidence_score": 1.0,
- "source": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md",
- "target": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_backend_app_services_orchestrator_steps_"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": "L100",
- "weight": 1.0,
- "_src": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md",
- "_tgt": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_backend_alembic_versions_0009_phase6_rem",
- "confidence_score": 1.0,
- "source": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md",
- "target": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_backend_alembic_versions_0009_phase6_rem"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": "L110",
- "weight": 1.0,
- "_src": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md",
- "_tgt": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_backend_app_models_init_py_modify",
- "confidence_score": 1.0,
- "source": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md",
- "target": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_backend_app_models_init_py_modify"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": "L114",
- "weight": 1.0,
- "_src": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md",
- "_tgt": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_backend_app_services_orchestrator_runner",
- "confidence_score": 1.0,
- "source": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md",
- "target": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_backend_app_services_orchestrator_runner"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": "L122",
- "weight": 1.0,
- "_src": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md",
- "_tgt": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_backend_app_api_admin_py_modify",
- "confidence_score": 1.0,
- "source": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md",
- "target": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_backend_app_api_admin_py_modify"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": "L130",
- "weight": 1.0,
- "_src": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md",
- "_tgt": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_backend_app_scheduler_main_py_modify",
- "confidence_score": 1.0,
- "source": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md",
- "target": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_backend_app_scheduler_main_py_modify"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": "L143",
- "weight": 1.0,
- "_src": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md",
- "_tgt": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_requirements_txt_verify_add",
- "confidence_score": 1.0,
- "source": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md",
- "target": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_requirements_txt_verify_add"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": "L149",
- "weight": 1.0,
- "_src": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md",
- "_tgt": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_data_flow",
- "confidence_score": 1.0,
- "source": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md",
- "target": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_data_flow"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": "L162",
- "weight": 1.0,
- "_src": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md",
- "_tgt": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_error_handling",
- "confidence_score": 1.0,
- "source": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md",
- "target": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_error_handling"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": "L168",
- "weight": 1.0,
- "_src": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md",
- "_tgt": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_testing",
- "confidence_score": 1.0,
- "source": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md",
- "target": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_testing"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": "L182",
- "weight": 1.0,
- "_src": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md",
- "_tgt": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_environment_variables",
- "confidence_score": 1.0,
- "source": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md",
- "target": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_environment_variables"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": "L185",
- "weight": 1.0,
- "_src": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md",
- "_tgt": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_required_for_email_backend_sendgrid",
- "confidence_score": 1.0,
- "source": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md",
- "target": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_required_for_email_backend_sendgrid"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md",
- "source_location": "L195",
- "weight": 1.0,
- "_src": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md",
- "_tgt": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_files_touched",
- "confidence_score": 1.0,
- "source": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md",
- "target": "docs_superpowers_specs_2026_05_07_phase6_sendgrid_design_md_files_touched"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/requirements-dev.txt",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "backend_requirements_dev_txt",
- "_tgt": "backend_requirements_dev_txt_dev_test_only_dependencies_production_de",
- "confidence_score": 1.0,
- "source": "backend_requirements_dev_txt",
- "target": "backend_requirements_dev_txt_dev_test_only_dependencies_production_de"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/fixtures/lucky_ca/META.md",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "backend_tests_fixtures_lucky_ca_meta_md",
- "_tgt": "backend_tests_fixtures_lucky_ca_meta_md_lucky_california_weekly_ad_spike_r2_a",
- "confidence_score": 1.0,
- "source": "backend_tests_fixtures_lucky_ca_meta_md",
- "target": "backend_tests_fixtures_lucky_ca_meta_md_lucky_california_weekly_ad_spike_r2_a"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/fixtures/lucky_ca/META.md",
- "source_location": "L15",
- "weight": 1.0,
- "_src": "backend_tests_fixtures_lucky_ca_meta_md",
- "_tgt": "backend_tests_fixtures_lucky_ca_meta_md_selectors_used_verified_against_this_fix",
- "confidence_score": 1.0,
- "source": "backend_tests_fixtures_lucky_ca_meta_md",
- "target": "backend_tests_fixtures_lucky_ca_meta_md_selectors_used_verified_against_this_fix"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/fixtures/lucky_ca/META.md",
- "source_location": "L23",
- "weight": 1.0,
- "_src": "backend_tests_fixtures_lucky_ca_meta_md",
- "_tgt": "backend_tests_fixtures_lucky_ca_meta_md_first_parsed_item_sample",
- "confidence_score": 1.0,
- "source": "backend_tests_fixtures_lucky_ca_meta_md",
- "target": "backend_tests_fixtures_lucky_ca_meta_md_first_parsed_item_sample"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "backend/tests/fixtures/lucky_ca/META.md",
- "source_location": "L38",
- "weight": 1.0,
- "_src": "backend_tests_fixtures_lucky_ca_meta_md",
- "_tgt": "backend_tests_fixtures_lucky_ca_meta_md_notes",
- "confidence_score": 1.0,
- "source": "backend_tests_fixtures_lucky_ca_meta_md",
- "target": "backend_tests_fixtures_lucky_ca_meta_md_notes"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "review_docs_gpt5_5_md",
- "_tgt": "review_docs_gpt5_5_md_adversarial_documentation_review",
- "confidence_score": 1.0,
- "source": "review_docs_gpt5_5_md",
- "target": "review_docs_gpt5_5_md_adversarial_documentation_review"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L3",
- "weight": 1.0,
- "_src": "review_docs_gpt5_5_md",
- "_tgt": "review_docs_gpt5_5_md_verdict",
- "confidence_score": 1.0,
- "source": "review_docs_gpt5_5_md",
- "target": "review_docs_gpt5_5_md_verdict"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L7",
- "weight": 1.0,
- "_src": "review_docs_gpt5_5_md",
- "_tgt": "review_docs_gpt5_5_md_blocking_findings",
- "confidence_score": 1.0,
- "source": "review_docs_gpt5_5_md",
- "target": "review_docs_gpt5_5_md_blocking_findings"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L9",
- "weight": 1.0,
- "_src": "review_docs_gpt5_5_md",
- "_tgt": "review_docs_gpt5_5_md_1_phase_status_docs_contradict_current_i",
- "confidence_score": 1.0,
- "source": "review_docs_gpt5_5_md",
- "target": "review_docs_gpt5_5_md_1_phase_status_docs_contradict_current_i"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L18",
- "weight": 1.0,
- "_src": "review_docs_gpt5_5_md",
- "_tgt": "review_docs_gpt5_5_md_2_database_schema_is_internally_inconsis",
- "confidence_score": 1.0,
- "source": "review_docs_gpt5_5_md",
- "target": "review_docs_gpt5_5_md_2_database_schema_is_internally_inconsis"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L27",
- "weight": 1.0,
- "_src": "review_docs_gpt5_5_md",
- "_tgt": "review_docs_gpt5_5_md_3_api_endpoint_definitions_conflict_acro",
- "confidence_score": 1.0,
- "source": "review_docs_gpt5_5_md",
- "target": "review_docs_gpt5_5_md_3_api_endpoint_definitions_conflict_acro"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L36",
- "weight": 1.0,
- "_src": "review_docs_gpt5_5_md",
- "_tgt": "review_docs_gpt5_5_md_4_security_model_is_missing_for_external",
- "confidence_score": 1.0,
- "source": "review_docs_gpt5_5_md",
- "target": "review_docs_gpt5_5_md_4_security_model_is_missing_for_external"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L46",
- "weight": 1.0,
- "_src": "review_docs_gpt5_5_md",
- "_tgt": "review_docs_gpt5_5_md_5_migration_strategy_conflicts_with_runt",
- "confidence_score": 1.0,
- "source": "review_docs_gpt5_5_md",
- "target": "review_docs_gpt5_5_md_5_migration_strategy_conflicts_with_runt"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L55",
- "weight": 1.0,
- "_src": "review_docs_gpt5_5_md",
- "_tgt": "review_docs_gpt5_5_md_6_current_code_appears_incompatible_with",
- "confidence_score": 1.0,
- "source": "review_docs_gpt5_5_md",
- "target": "review_docs_gpt5_5_md_6_current_code_appears_incompatible_with"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L64",
- "weight": 1.0,
- "_src": "review_docs_gpt5_5_md",
- "_tgt": "review_docs_gpt5_5_md_high_risk_gaps",
- "confidence_score": 1.0,
- "source": "review_docs_gpt5_5_md",
- "target": "review_docs_gpt5_5_md_high_risk_gaps"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L66",
- "weight": 1.0,
- "_src": "review_docs_gpt5_5_md",
- "_tgt": "review_docs_gpt5_5_md_7_scraping_feasibility_is_under_specifie",
- "confidence_score": 1.0,
- "source": "review_docs_gpt5_5_md",
- "target": "review_docs_gpt5_5_md_7_scraping_feasibility_is_under_specifie"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L75",
- "weight": 1.0,
- "_src": "review_docs_gpt5_5_md",
- "_tgt": "review_docs_gpt5_5_md_8_meal_planning_algorithm_lacks_determin",
- "confidence_score": 1.0,
- "source": "review_docs_gpt5_5_md",
- "target": "review_docs_gpt5_5_md_8_meal_planning_algorithm_lacks_determin"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L84",
- "weight": 1.0,
- "_src": "review_docs_gpt5_5_md",
- "_tgt": "review_docs_gpt5_5_md_9_shopping_list_math_is_not_implementabl",
- "confidence_score": 1.0,
- "source": "review_docs_gpt5_5_md",
- "target": "review_docs_gpt5_5_md_9_shopping_list_math_is_not_implementabl"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L93",
- "weight": 1.0,
- "_src": "review_docs_gpt5_5_md",
- "_tgt": "review_docs_gpt5_5_md_10_deployment_docs_promise_production_fe",
- "confidence_score": 1.0,
- "source": "review_docs_gpt5_5_md",
- "target": "review_docs_gpt5_5_md_10_deployment_docs_promise_production_fe"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L102",
- "weight": 1.0,
- "_src": "review_docs_gpt5_5_md",
- "_tgt": "review_docs_gpt5_5_md_11_environment_variable_docs_are_inconsi",
- "confidence_score": 1.0,
- "source": "review_docs_gpt5_5_md",
- "target": "review_docs_gpt5_5_md_11_environment_variable_docs_are_inconsi"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L111",
- "weight": 1.0,
- "_src": "review_docs_gpt5_5_md",
- "_tgt": "review_docs_gpt5_5_md_medium_risk_issues",
- "confidence_score": 1.0,
- "source": "review_docs_gpt5_5_md",
- "target": "review_docs_gpt5_5_md_medium_risk_issues"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L113",
- "weight": 1.0,
- "_src": "review_docs_gpt5_5_md",
- "_tgt": "review_docs_gpt5_5_md_12_documentation_contains_stale_and_miss",
- "confidence_score": 1.0,
- "source": "review_docs_gpt5_5_md",
- "target": "review_docs_gpt5_5_md_12_documentation_contains_stale_and_miss"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L117",
- "weight": 1.0,
- "_src": "review_docs_gpt5_5_md",
- "_tgt": "review_docs_gpt5_5_md_13_tech_stack_docs_are_already_version_s",
- "confidence_score": 1.0,
- "source": "review_docs_gpt5_5_md",
- "target": "review_docs_gpt5_5_md_13_tech_stack_docs_are_already_version_s"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L121",
- "weight": 1.0,
- "_src": "review_docs_gpt5_5_md",
- "_tgt": "review_docs_gpt5_5_md_14_operational_docs_assume_endpoints_tha",
- "confidence_score": 1.0,
- "source": "review_docs_gpt5_5_md",
- "target": "review_docs_gpt5_5_md_14_operational_docs_assume_endpoints_tha"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L125",
- "weight": 1.0,
- "_src": "review_docs_gpt5_5_md",
- "_tgt": "review_docs_gpt5_5_md_15_data_retention_lacks_implementation_m",
- "confidence_score": 1.0,
- "source": "review_docs_gpt5_5_md",
- "target": "review_docs_gpt5_5_md_15_data_retention_lacks_implementation_m"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L129",
- "weight": 1.0,
- "_src": "review_docs_gpt5_5_md",
- "_tgt": "review_docs_gpt5_5_md_16_accessibility_is_barely_addressed_des",
- "confidence_score": 1.0,
- "source": "review_docs_gpt5_5_md",
- "target": "review_docs_gpt5_5_md_16_accessibility_is_barely_addressed_des"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L133",
- "weight": 1.0,
- "_src": "review_docs_gpt5_5_md",
- "_tgt": "review_docs_gpt5_5_md_17_observability_requirements_are_aspira",
- "confidence_score": 1.0,
- "source": "review_docs_gpt5_5_md",
- "target": "review_docs_gpt5_5_md_17_observability_requirements_are_aspira"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L137",
- "weight": 1.0,
- "_src": "review_docs_gpt5_5_md",
- "_tgt": "review_docs_gpt5_5_md_suggested_gate_before_implementation",
- "confidence_score": 1.0,
- "source": "review_docs_gpt5_5_md",
- "target": "review_docs_gpt5_5_md_suggested_gate_before_implementation"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-gpt5.5.md",
- "source_location": "L149",
- "weight": 1.0,
- "_src": "review_docs_gpt5_5_md",
- "_tgt": "review_docs_gpt5_5_md_implementation_readiness_rating",
- "confidence_score": 1.0,
- "source": "review_docs_gpt5_5_md",
- "target": "review_docs_gpt5_5_md_implementation_readiness_rating"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "review_repo_gpt5_5_md",
- "_tgt": "review_repo_gpt5_5_md_repository_analysis",
- "confidence_score": 1.0,
- "source": "review_repo_gpt5_5_md",
- "target": "review_repo_gpt5_5_md_repository_analysis"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L3",
- "weight": 1.0,
- "_src": "review_repo_gpt5_5_md",
- "_tgt": "review_repo_gpt5_5_md_executive_summary",
- "confidence_score": 1.0,
- "source": "review_repo_gpt5_5_md",
- "target": "review_repo_gpt5_5_md_executive_summary"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L11",
- "weight": 1.0,
- "_src": "review_repo_gpt5_5_md",
- "_tgt": "review_repo_gpt5_5_md_current_repo_shape",
- "confidence_score": 1.0,
- "source": "review_repo_gpt5_5_md",
- "target": "review_repo_gpt5_5_md_current_repo_shape"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L32",
- "weight": 1.0,
- "_src": "review_repo_gpt5_5_md",
- "_tgt": "review_repo_gpt5_5_md_blocking_findings",
- "confidence_score": 1.0,
- "source": "review_repo_gpt5_5_md",
- "target": "review_repo_gpt5_5_md_blocking_findings"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L34",
- "weight": 1.0,
- "_src": "review_repo_gpt5_5_md",
- "_tgt": "review_repo_gpt5_5_md_1_backend_likely_fails_during_import_bec",
- "confidence_score": 1.0,
- "source": "review_repo_gpt5_5_md",
- "target": "review_repo_gpt5_5_md_1_backend_likely_fails_during_import_bec"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L44",
- "weight": 1.0,
- "_src": "review_repo_gpt5_5_md",
- "_tgt": "review_repo_gpt5_5_md_2_sqlalchemy_relationships_contain_at_le",
- "confidence_score": 1.0,
- "source": "review_repo_gpt5_5_md",
- "target": "review_repo_gpt5_5_md_2_sqlalchemy_relationships_contain_at_le"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L54",
- "weight": 1.0,
- "_src": "review_repo_gpt5_5_md",
- "_tgt": "review_repo_gpt5_5_md_3_frontend_build_is_blocked_by_a_missing",
- "confidence_score": 1.0,
- "source": "review_repo_gpt5_5_md",
- "target": "review_repo_gpt5_5_md_3_frontend_build_is_blocked_by_a_missing"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L63",
- "weight": 1.0,
- "_src": "review_repo_gpt5_5_md",
- "_tgt": "review_repo_gpt5_5_md_4_frontend_docker_build_is_blocked_by_mi",
- "confidence_score": 1.0,
- "source": "review_repo_gpt5_5_md",
- "target": "review_repo_gpt5_5_md_4_frontend_docker_build_is_blocked_by_mi"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L72",
- "weight": 1.0,
- "_src": "review_repo_gpt5_5_md",
- "_tgt": "review_repo_gpt5_5_md_5_vite_app_is_missing_required_html_entr",
- "confidence_score": 1.0,
- "source": "review_repo_gpt5_5_md",
- "target": "review_repo_gpt5_5_md_5_vite_app_is_missing_required_html_entr"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L81",
- "weight": 1.0,
- "_src": "review_repo_gpt5_5_md",
- "_tgt": "review_repo_gpt5_5_md_6_alembic_is_documented_and_installed_bu",
- "confidence_score": 1.0,
- "source": "review_repo_gpt5_5_md",
- "target": "review_repo_gpt5_5_md_6_alembic_is_documented_and_installed_bu"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L92",
- "weight": 1.0,
- "_src": "review_repo_gpt5_5_md",
- "_tgt": "review_repo_gpt5_5_md_important_findings",
- "confidence_score": 1.0,
- "source": "review_repo_gpt5_5_md",
- "target": "review_repo_gpt5_5_md_important_findings"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L94",
- "weight": 1.0,
- "_src": "review_repo_gpt5_5_md",
- "_tgt": "review_repo_gpt5_5_md_7_api_routes_are_placeholders_with_no_sc",
- "confidence_score": 1.0,
- "source": "review_repo_gpt5_5_md",
- "target": "review_repo_gpt5_5_md_7_api_routes_are_placeholders_with_no_sc"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L104",
- "weight": 1.0,
- "_src": "review_repo_gpt5_5_md",
- "_tgt": "review_repo_gpt5_5_md_8_admin_endpoints_are_unauthenticated",
- "confidence_score": 1.0,
- "source": "review_repo_gpt5_5_md",
- "target": "review_repo_gpt5_5_md_8_admin_endpoints_are_unauthenticated"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L114",
- "weight": 1.0,
- "_src": "review_repo_gpt5_5_md",
- "_tgt": "review_repo_gpt5_5_md_9_email_approval_security_is_not_impleme",
- "confidence_score": 1.0,
- "source": "review_repo_gpt5_5_md",
- "target": "review_repo_gpt5_5_md_9_email_approval_security_is_not_impleme"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L125",
- "weight": 1.0,
- "_src": "review_repo_gpt5_5_md",
- "_tgt": "review_repo_gpt5_5_md_10_secret_key_has_an_unsafe_default",
- "confidence_score": 1.0,
- "source": "review_repo_gpt5_5_md",
- "target": "review_repo_gpt5_5_md_10_secret_key_has_an_unsafe_default"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L135",
- "weight": 1.0,
- "_src": "review_repo_gpt5_5_md",
- "_tgt": "review_repo_gpt5_5_md_11_sqlalchemy_2_health_query_may_fail",
- "confidence_score": 1.0,
- "source": "review_repo_gpt5_5_md",
- "target": "review_repo_gpt5_5_md_11_sqlalchemy_2_health_query_may_fail"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L144",
- "weight": 1.0,
- "_src": "review_repo_gpt5_5_md",
- "_tgt": "review_repo_gpt5_5_md_12_docker_compose_exposes_backend_and_fr",
- "confidence_score": 1.0,
- "source": "review_repo_gpt5_5_md",
- "target": "review_repo_gpt5_5_md_12_docker_compose_exposes_backend_and_fr"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L154",
- "weight": 1.0,
- "_src": "review_repo_gpt5_5_md",
- "_tgt": "review_repo_gpt5_5_md_13_nginx_ssl_and_rate_limiting_are_not_i",
- "confidence_score": 1.0,
- "source": "review_repo_gpt5_5_md",
- "target": "review_repo_gpt5_5_md_13_nginx_ssl_and_rate_limiting_are_not_i"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L164",
- "weight": 1.0,
- "_src": "review_repo_gpt5_5_md",
- "_tgt": "review_repo_gpt5_5_md_maintainability_findings",
- "confidence_score": 1.0,
- "source": "review_repo_gpt5_5_md",
- "target": "review_repo_gpt5_5_md_maintainability_findings"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L166",
- "weight": 1.0,
- "_src": "review_repo_gpt5_5_md",
- "_tgt": "review_repo_gpt5_5_md_14_model_file_is_too_large_for_early_ite",
- "confidence_score": 1.0,
- "source": "review_repo_gpt5_5_md",
- "target": "review_repo_gpt5_5_md_14_model_file_is_too_large_for_early_ite"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L174",
- "weight": 1.0,
- "_src": "review_repo_gpt5_5_md",
- "_tgt": "review_repo_gpt5_5_md_15_schema_constraints_are_only_partially",
- "confidence_score": 1.0,
- "source": "review_repo_gpt5_5_md",
- "target": "review_repo_gpt5_5_md_15_schema_constraints_are_only_partially"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L182",
- "weight": 1.0,
- "_src": "review_repo_gpt5_5_md",
- "_tgt": "review_repo_gpt5_5_md_16_api_prefix_behavior_may_produce_trail",
- "confidence_score": 1.0,
- "source": "review_repo_gpt5_5_md",
- "target": "review_repo_gpt5_5_md_16_api_prefix_behavior_may_produce_trail"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L189",
- "weight": 1.0,
- "_src": "review_repo_gpt5_5_md",
- "_tgt": "review_repo_gpt5_5_md_17_no_repository_level_quality_gates_exi",
- "confidence_score": 1.0,
- "source": "review_repo_gpt5_5_md",
- "target": "review_repo_gpt5_5_md_17_no_repository_level_quality_gates_exi"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L197",
- "weight": 1.0,
- "_src": "review_repo_gpt5_5_md",
- "_tgt": "review_repo_gpt5_5_md_documentation_alignment",
- "confidence_score": 1.0,
- "source": "review_repo_gpt5_5_md",
- "target": "review_repo_gpt5_5_md_documentation_alignment"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L207",
- "weight": 1.0,
- "_src": "review_repo_gpt5_5_md",
- "_tgt": "review_repo_gpt5_5_md_recommended_remediation_order",
- "confidence_score": 1.0,
- "source": "review_repo_gpt5_5_md",
- "target": "review_repo_gpt5_5_md_recommended_remediation_order"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L209",
- "weight": 1.0,
- "_src": "review_repo_gpt5_5_md",
- "_tgt": "review_repo_gpt5_5_md_phase_0_make_skeleton_start_and_build",
- "confidence_score": 1.0,
- "source": "review_repo_gpt5_5_md",
- "target": "review_repo_gpt5_5_md_phase_0_make_skeleton_start_and_build"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L219",
- "weight": 1.0,
- "_src": "review_repo_gpt5_5_md",
- "_tgt": "review_repo_gpt5_5_md_phase_1_establish_schema_migration_basel",
- "confidence_score": 1.0,
- "source": "review_repo_gpt5_5_md",
- "target": "review_repo_gpt5_5_md_phase_1_establish_schema_migration_basel"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L227",
- "weight": 1.0,
- "_src": "review_repo_gpt5_5_md",
- "_tgt": "review_repo_gpt5_5_md_phase_2_establish_api_and_security_basel",
- "confidence_score": 1.0,
- "source": "review_repo_gpt5_5_md",
- "target": "review_repo_gpt5_5_md_phase_2_establish_api_and_security_basel"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L235",
- "weight": 1.0,
- "_src": "review_repo_gpt5_5_md",
- "_tgt": "review_repo_gpt5_5_md_phase_3_implement_first_vertical_slice",
- "confidence_score": 1.0,
- "source": "review_repo_gpt5_5_md",
- "target": "review_repo_gpt5_5_md_phase_3_implement_first_vertical_slice"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L242",
- "weight": 1.0,
- "_src": "review_repo_gpt5_5_md",
- "_tgt": "review_repo_gpt5_5_md_verification_matrix_to_add",
- "confidence_score": 1.0,
- "source": "review_repo_gpt5_5_md",
- "target": "review_repo_gpt5_5_md_verification_matrix_to_add"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/repo-gpt5.5.md",
- "source_location": "L259",
- "weight": 1.0,
- "_src": "review_repo_gpt5_5_md",
- "_tgt": "review_repo_gpt5_5_md_final_assessment",
- "confidence_score": 1.0,
- "source": "review_repo_gpt5_5_md",
- "target": "review_repo_gpt5_5_md_final_assessment"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-claude.md",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "review_docs_claude_md",
- "_tgt": "review_docs_claude_md_adversarial_documentation_review_claude",
- "confidence_score": 1.0,
- "source": "review_docs_claude_md",
- "target": "review_docs_claude_md_adversarial_documentation_review_claude"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-claude.md",
- "source_location": "L9",
- "weight": 1.0,
- "_src": "review_docs_claude_md",
- "_tgt": "review_docs_claude_md_verdict",
- "confidence_score": 1.0,
- "source": "review_docs_claude_md",
- "target": "review_docs_claude_md_verdict"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-claude.md",
- "source_location": "L17",
- "weight": 1.0,
- "_src": "review_docs_claude_md",
- "_tgt": "review_docs_claude_md_blocking",
- "confidence_score": 1.0,
- "source": "review_docs_claude_md",
- "target": "review_docs_claude_md_blocking"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-claude.md",
- "source_location": "L19",
- "weight": 1.0,
- "_src": "review_docs_claude_md",
- "_tgt": "review_docs_claude_md_b1_family_profile_is_internally_inconsis",
- "confidence_score": 1.0,
- "source": "review_docs_claude_md",
- "target": "review_docs_claude_md_b1_family_profile_is_internally_inconsis"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-claude.md",
- "source_location": "L30",
- "weight": 1.0,
- "_src": "review_docs_claude_md",
- "_tgt": "review_docs_claude_md_b2_there_is_no_family_member_or_user_tab",
- "confidence_score": 1.0,
- "source": "review_docs_claude_md",
- "target": "review_docs_claude_md_b2_there_is_no_family_member_or_user_tab"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-claude.md",
- "source_location": "L42",
- "weight": 1.0,
- "_src": "review_docs_claude_md",
- "_tgt": "review_docs_claude_md_b3_recipe_ingredient_relationship_is_doc",
- "confidence_score": 1.0,
- "source": "review_docs_claude_md",
- "target": "review_docs_claude_md_b3_recipe_ingredient_relationship_is_doc"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-claude.md",
- "source_location": "L51",
- "weight": 1.0,
- "_src": "review_docs_claude_md",
- "_tgt": "review_docs_claude_md_b4_there_is_no_authentication_anywhere_i",
- "confidence_score": 1.0,
- "source": "review_docs_claude_md",
- "target": "review_docs_claude_md_b4_there_is_no_authentication_anywhere_i"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-claude.md",
- "source_location": "L63",
- "weight": 1.0,
- "_src": "review_docs_claude_md",
- "_tgt": "review_docs_claude_md_b5_approval_by_email_is_fragile_and_prob",
- "confidence_score": 1.0,
- "source": "review_docs_claude_md",
- "target": "review_docs_claude_md_b5_approval_by_email_is_fragile_and_prob"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-claude.md",
- "source_location": "L77",
- "weight": 1.0,
- "_src": "review_docs_claude_md",
- "_tgt": "review_docs_claude_md_b6_self_hosted_no_external_cloud_service",
- "confidence_score": 1.0,
- "source": "review_docs_claude_md",
- "target": "review_docs_claude_md_b6_self_hosted_no_external_cloud_service"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-claude.md",
- "source_location": "L90",
- "weight": 1.0,
- "_src": "review_docs_claude_md",
- "_tgt": "review_docs_claude_md_major",
- "confidence_score": 1.0,
- "source": "review_docs_claude_md",
- "target": "review_docs_claude_md_major"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-claude.md",
- "source_location": "L92",
- "weight": 1.0,
- "_src": "review_docs_claude_md",
- "_tgt": "review_docs_claude_md_m1_scraping_legality_tos_unaddressed",
- "confidence_score": 1.0,
- "source": "review_docs_claude_md",
- "target": "review_docs_claude_md_m1_scraping_legality_tos_unaddressed"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-claude.md",
- "source_location": "L103",
- "weight": 1.0,
- "_src": "review_docs_claude_md",
- "_tgt": "review_docs_claude_md_m2_phase_ordering_buries_the_hard_proble",
- "confidence_score": 1.0,
- "source": "review_docs_claude_md",
- "target": "review_docs_claude_md_m2_phase_ordering_buries_the_hard_proble"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-claude.md",
- "source_location": "L109",
- "weight": 1.0,
- "_src": "review_docs_claude_md",
- "_tgt": "review_docs_claude_md_m3_apscheduler_multiple_workers_will_mis",
- "confidence_score": 1.0,
- "source": "review_docs_claude_md",
- "target": "review_docs_claude_md_m3_apscheduler_multiple_workers_will_mis"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-claude.md",
- "source_location": "L115",
- "weight": 1.0,
- "_src": "review_docs_claude_md",
- "_tgt": "review_docs_claude_md_m4_schema_has_avoidable_defects",
- "confidence_score": 1.0,
- "source": "review_docs_claude_md",
- "target": "review_docs_claude_md_m4_schema_has_avoidable_defects"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-claude.md",
- "source_location": "L126",
- "weight": 1.0,
- "_src": "review_docs_claude_md",
- "_tgt": "review_docs_claude_md_m5_migration_story_is_muddled",
- "confidence_score": 1.0,
- "source": "review_docs_claude_md",
- "target": "review_docs_claude_md_m5_migration_story_is_muddled"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-claude.md",
- "source_location": "L132",
- "weight": 1.0,
- "_src": "review_docs_claude_md",
- "_tgt": "review_docs_claude_md_m6_if_both_approve_or_no_response_meal_c",
- "confidence_score": 1.0,
- "source": "review_docs_claude_md",
- "target": "review_docs_claude_md_m6_if_both_approve_or_no_response_meal_c"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-claude.md",
- "source_location": "L136",
- "weight": 1.0,
- "_src": "review_docs_claude_md",
- "_tgt": "review_docs_claude_md_m7_calorie_target_appears_in_the_schema_",
- "confidence_score": 1.0,
- "source": "review_docs_claude_md",
- "target": "review_docs_claude_md_m7_calorie_target_appears_in_the_schema_"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-claude.md",
- "source_location": "L140",
- "weight": 1.0,
- "_src": "review_docs_claude_md",
- "_tgt": "review_docs_claude_md_m8_image_strategy_contradicts_itself",
- "confidence_score": 1.0,
- "source": "review_docs_claude_md",
- "target": "review_docs_claude_md_m8_image_strategy_contradicts_itself"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-claude.md",
- "source_location": "L148",
- "weight": 1.0,
- "_src": "review_docs_claude_md",
- "_tgt": "review_docs_claude_md_minor",
- "confidence_score": 1.0,
- "source": "review_docs_claude_md",
- "target": "review_docs_claude_md_minor"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-claude.md",
- "source_location": "L150",
- "weight": 1.0,
- "_src": "review_docs_claude_md",
- "_tgt": "review_docs_claude_md_m1_doc_hygiene",
- "confidence_score": 1.0,
- "source": "review_docs_claude_md",
- "target": "review_docs_claude_md_m1_doc_hygiene"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-claude.md",
- "source_location": "L157",
- "weight": 1.0,
- "_src": "review_docs_claude_md",
- "_tgt": "review_docs_claude_md_m2_operational_gaps_not_in_any_doc",
- "confidence_score": 1.0,
- "source": "review_docs_claude_md",
- "target": "review_docs_claude_md_m2_operational_gaps_not_in_any_doc"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-claude.md",
- "source_location": "L165",
- "weight": 1.0,
- "_src": "review_docs_claude_md",
- "_tgt": "review_docs_claude_md_m3_docker_compose_exposure",
- "confidence_score": 1.0,
- "source": "review_docs_claude_md",
- "target": "review_docs_claude_md_m3_docker_compose_exposure"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-claude.md",
- "source_location": "L169",
- "weight": 1.0,
- "_src": "review_docs_claude_md",
- "_tgt": "review_docs_claude_md_m4_success_metrics_aren_t_measurable",
- "confidence_score": 1.0,
- "source": "review_docs_claude_md",
- "target": "review_docs_claude_md_m4_success_metrics_aren_t_measurable"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-claude.md",
- "source_location": "L179",
- "weight": 1.0,
- "_src": "review_docs_claude_md",
- "_tgt": "review_docs_claude_md_m5_future_features_are_mixed_into_the_im",
- "confidence_score": 1.0,
- "source": "review_docs_claude_md",
- "target": "review_docs_claude_md_m5_future_features_are_mixed_into_the_im"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-claude.md",
- "source_location": "L183",
- "weight": 1.0,
- "_src": "review_docs_claude_md",
- "_tgt": "review_docs_claude_md_m6_secret_key_ghost_variable",
- "confidence_score": 1.0,
- "source": "review_docs_claude_md",
- "target": "review_docs_claude_md_m6_secret_key_ghost_variable"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-claude.md",
- "source_location": "L189",
- "weight": 1.0,
- "_src": "review_docs_claude_md",
- "_tgt": "review_docs_claude_md_cross_doc_contradictions_summarized",
- "confidence_score": 1.0,
- "source": "review_docs_claude_md",
- "target": "review_docs_claude_md_cross_doc_contradictions_summarized"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/docs-claude.md",
- "source_location": "L205",
- "weight": 1.0,
- "_src": "review_docs_claude_md",
- "_tgt": "review_docs_claude_md_suggested_order_of_operations_before_any",
- "confidence_score": 1.0,
- "source": "review_docs_claude_md",
- "target": "review_docs_claude_md_suggested_order_of_operations_before_any"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/synthesis.md",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "review_synthesis_md",
- "_tgt": "review_synthesis_md_review_synthesis_three_reviewers_compare",
- "confidence_score": 1.0,
- "source": "review_synthesis_md",
- "target": "review_synthesis_md_review_synthesis_three_reviewers_compare"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/synthesis.md",
- "source_location": "L7",
- "weight": 1.0,
- "_src": "review_synthesis_md",
- "_tgt": "review_synthesis_md_1_strong_consensus_all_reviewers_blockin",
- "confidence_score": 1.0,
- "source": "review_synthesis_md",
- "target": "review_synthesis_md_1_strong_consensus_all_reviewers_blockin"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/synthesis.md",
- "source_location": "L24",
- "weight": 1.0,
- "_src": "review_synthesis_md",
- "_tgt": "review_synthesis_md_2_partial_agreement_2_of_3",
- "confidence_score": 1.0,
- "source": "review_synthesis_md",
- "target": "review_synthesis_md_2_partial_agreement_2_of_3"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/synthesis.md",
- "source_location": "L40",
- "weight": 1.0,
- "_src": "review_synthesis_md",
- "_tgt": "review_synthesis_md_3_unique_findings_only_one_reviewer",
- "confidence_score": 1.0,
- "source": "review_synthesis_md",
- "target": "review_synthesis_md_3_unique_findings_only_one_reviewer"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/synthesis.md",
- "source_location": "L42",
- "weight": 1.0,
- "_src": "review_synthesis_md",
- "_tgt": "review_synthesis_md_claude_only",
- "confidence_score": 1.0,
- "source": "review_synthesis_md",
- "target": "review_synthesis_md_claude_only"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/synthesis.md",
- "source_location": "L56",
- "weight": 1.0,
- "_src": "review_synthesis_md",
- "_tgt": "review_synthesis_md_gpt_5_5_docs_only",
- "confidence_score": 1.0,
- "source": "review_synthesis_md",
- "target": "review_synthesis_md_gpt_5_5_docs_only"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/synthesis.md",
- "source_location": "L61",
- "weight": 1.0,
- "_src": "review_synthesis_md",
- "_tgt": "review_synthesis_md_gpt_5_5_repo_only_claude_could_not_have_",
- "confidence_score": 1.0,
- "source": "review_synthesis_md",
- "target": "review_synthesis_md_gpt_5_5_repo_only_claude_could_not_have_"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/synthesis.md",
- "source_location": "L73",
- "weight": 1.0,
- "_src": "review_synthesis_md",
- "_tgt": "review_synthesis_md_4_where_reviewers_conflict",
- "confidence_score": 1.0,
- "source": "review_synthesis_md",
- "target": "review_synthesis_md_4_where_reviewers_conflict"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/synthesis.md",
- "source_location": "L82",
- "weight": 1.0,
- "_src": "review_synthesis_md",
- "_tgt": "review_synthesis_md_5_combined_blocker_list_deduplicated_ran",
- "confidence_score": 1.0,
- "source": "review_synthesis_md",
- "target": "review_synthesis_md_5_combined_blocker_list_deduplicated_ran"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/synthesis.md",
- "source_location": "L98",
- "weight": 1.0,
- "_src": "review_synthesis_md",
- "_tgt": "review_synthesis_md_6_additional_investigation_needed",
- "confidence_score": 1.0,
- "source": "review_synthesis_md",
- "target": "review_synthesis_md_6_additional_investigation_needed"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/synthesis.md",
- "source_location": "L114",
- "weight": 1.0,
- "_src": "review_synthesis_md",
- "_tgt": "review_synthesis_md_7_net_assessment",
- "confidence_score": 1.0,
- "source": "review_synthesis_md",
- "target": "review_synthesis_md_7_net_assessment"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L1",
- "weight": 1.0,
- "_src": "review_reviewconcensus_md",
- "_tgt": "review_reviewconcensus_md_review_consensus_feedback_for_originatin",
- "confidence_score": 1.0,
- "source": "review_reviewconcensus_md",
- "target": "review_reviewconcensus_md_review_consensus_feedback_for_originatin"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L12",
- "weight": 1.0,
- "_src": "review_reviewconcensus_md",
- "_tgt": "review_reviewconcensus_md_headline",
- "confidence_score": 1.0,
- "source": "review_reviewconcensus_md",
- "target": "review_reviewconcensus_md_headline"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L20",
- "weight": 1.0,
- "_src": "review_reviewconcensus_md",
- "_tgt": "review_reviewconcensus_md_1_consensus_blockers_must_resolve_before",
- "confidence_score": 1.0,
- "source": "review_reviewconcensus_md",
- "target": "review_reviewconcensus_md_1_consensus_blockers_must_resolve_before"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L24",
- "weight": 1.0,
- "_src": "review_reviewconcensus_md",
- "_tgt": "review_reviewconcensus_md_1_1_recipe_ingredient_relationship_is_mo",
- "confidence_score": 1.0,
- "source": "review_reviewconcensus_md",
- "target": "review_reviewconcensus_md_1_1_recipe_ingredient_relationship_is_mo"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L30",
- "weight": 1.0,
- "_src": "review_reviewconcensus_md",
- "_tgt": "review_reviewconcensus_md_1_2_no_authentication_exists_anywhere_in",
- "confidence_score": 1.0,
- "source": "review_reviewconcensus_md",
- "target": "review_reviewconcensus_md_1_2_no_authentication_exists_anywhere_in"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L36",
- "weight": 1.0,
- "_src": "review_reviewconcensus_md",
- "_tgt": "review_reviewconcensus_md_1_3_email_approval_flow_is_unsafe_and_pr",
- "confidence_score": 1.0,
- "source": "review_reviewconcensus_md",
- "target": "review_reviewconcensus_md_1_3_email_approval_flow_is_unsafe_and_pr"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L42",
- "weight": 1.0,
- "_src": "review_reviewconcensus_md",
- "_tgt": "review_reviewconcensus_md_1_4_no_family_member_table_despite_per_p",
- "confidence_score": 1.0,
- "source": "review_reviewconcensus_md",
- "target": "review_reviewconcensus_md_1_4_no_family_member_table_despite_per_p"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L48",
- "weight": 1.0,
- "_src": "review_reviewconcensus_md",
- "_tgt": "review_reviewconcensus_md_1_5_phase_status_is_contradictory_and_th",
- "confidence_score": 1.0,
- "source": "review_reviewconcensus_md",
- "target": "review_reviewconcensus_md_1_5_phase_status_is_contradictory_and_th"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L59",
- "weight": 1.0,
- "_src": "review_reviewconcensus_md",
- "_tgt": "review_reviewconcensus_md_1_6_schema_has_avoidable_correctness_def",
- "confidence_score": 1.0,
- "source": "review_reviewconcensus_md",
- "target": "review_reviewconcensus_md_1_6_schema_has_avoidable_correctness_def"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L69",
- "weight": 1.0,
- "_src": "review_reviewconcensus_md",
- "_tgt": "review_reviewconcensus_md_1_7_docker_compose_exposes_backend_8000_",
- "confidence_score": 1.0,
- "source": "review_reviewconcensus_md",
- "target": "review_reviewconcensus_md_1_7_docker_compose_exposes_backend_8000_"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L73",
- "weight": 1.0,
- "_src": "review_reviewconcensus_md",
- "_tgt": "review_reviewconcensus_md_1_8_production_deployment_claims_exceed_",
- "confidence_score": 1.0,
- "source": "review_reviewconcensus_md",
- "target": "review_reviewconcensus_md_1_8_production_deployment_claims_exceed_"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L80",
- "weight": 1.0,
- "_src": "review_reviewconcensus_md",
- "_tgt": "review_reviewconcensus_md_2_high_risk_gaps_agreed_by_2_of_3_review",
- "confidence_score": 1.0,
- "source": "review_reviewconcensus_md",
- "target": "review_reviewconcensus_md_2_high_risk_gaps_agreed_by_2_of_3_review"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L82",
- "weight": 1.0,
- "_src": "review_reviewconcensus_md",
- "_tgt": "review_reviewconcensus_md_2_1_migration_tooling_is_muddled",
- "confidence_score": 1.0,
- "source": "review_reviewconcensus_md",
- "target": "review_reviewconcensus_md_2_1_migration_tooling_is_muddled"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L85",
- "weight": 1.0,
- "_src": "review_reviewconcensus_md",
- "_tgt": "review_reviewconcensus_md_2_2_api_endpoint_contract_conflicts_acro",
- "confidence_score": 1.0,
- "source": "review_reviewconcensus_md",
- "target": "review_reviewconcensus_md_2_2_api_endpoint_contract_conflicts_acro"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L88",
- "weight": 1.0,
- "_src": "review_reviewconcensus_md",
- "_tgt": "review_reviewconcensus_md_2_3_scraping_is_under_specified_and_risk",
- "confidence_score": 1.0,
- "source": "review_reviewconcensus_md",
- "target": "review_reviewconcensus_md_2_3_scraping_is_under_specified_and_risk"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L94",
- "weight": 1.0,
- "_src": "review_reviewconcensus_md",
- "_tgt": "review_reviewconcensus_md_2_4_phase_ordering_hides_risk_behind_plu",
- "confidence_score": 1.0,
- "source": "review_reviewconcensus_md",
- "target": "review_reviewconcensus_md_2_4_phase_ordering_hides_risk_behind_plu"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L97",
- "weight": 1.0,
- "_src": "review_reviewconcensus_md",
- "_tgt": "review_reviewconcensus_md_2_5_shopping_list_math_is_not_implementa",
- "confidence_score": 1.0,
- "source": "review_reviewconcensus_md",
- "target": "review_reviewconcensus_md_2_5_shopping_list_math_is_not_implementa"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L100",
- "weight": 1.0,
- "_src": "review_reviewconcensus_md",
- "_tgt": "review_reviewconcensus_md_2_6_environment_variables_inconsistent_a",
- "confidence_score": 1.0,
- "source": "review_reviewconcensus_md",
- "target": "review_reviewconcensus_md_2_6_environment_variables_inconsistent_a"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L103",
- "weight": 1.0,
- "_src": "review_reviewconcensus_md",
- "_tgt": "review_reviewconcensus_md_2_7_accessibility_absent_despite_family_",
- "confidence_score": 1.0,
- "source": "review_reviewconcensus_md",
- "target": "review_reviewconcensus_md_2_7_accessibility_absent_despite_family_"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L106",
- "weight": 1.0,
- "_src": "review_reviewconcensus_md",
- "_tgt": "review_reviewconcensus_md_2_8_health_check_will_fail_under_sqlalch",
- "confidence_score": 1.0,
- "source": "review_reviewconcensus_md",
- "target": "review_reviewconcensus_md_2_8_health_check_will_fail_under_sqlalch"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L111",
- "weight": 1.0,
- "_src": "review_reviewconcensus_md",
- "_tgt": "review_reviewconcensus_md_3_single_reviewer_findings_worth_keeping",
- "confidence_score": 1.0,
- "source": "review_reviewconcensus_md",
- "target": "review_reviewconcensus_md_3_single_reviewer_findings_worth_keeping"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L113",
- "weight": 1.0,
- "_src": "review_reviewconcensus_md",
- "_tgt": "review_reviewconcensus_md_from_claude",
- "confidence_score": 1.0,
- "source": "review_reviewconcensus_md",
- "target": "review_reviewconcensus_md_from_claude"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L123",
- "weight": 1.0,
- "_src": "review_reviewconcensus_md",
- "_tgt": "review_reviewconcensus_md_from_gpt_5_5_docs",
- "confidence_score": 1.0,
- "source": "review_reviewconcensus_md",
- "target": "review_reviewconcensus_md_from_gpt_5_5_docs"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L128",
- "weight": 1.0,
- "_src": "review_reviewconcensus_md",
- "_tgt": "review_reviewconcensus_md_from_gpt_5_5_repo",
- "confidence_score": 1.0,
- "source": "review_reviewconcensus_md",
- "target": "review_reviewconcensus_md_from_gpt_5_5_repo"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L135",
- "weight": 1.0,
- "_src": "review_reviewconcensus_md",
- "_tgt": "review_reviewconcensus_md_4_where_reviewers_disagreed",
- "confidence_score": 1.0,
- "source": "review_reviewconcensus_md",
- "target": "review_reviewconcensus_md_4_where_reviewers_disagreed"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L144",
- "weight": 1.0,
- "_src": "review_reviewconcensus_md",
- "_tgt": "review_reviewconcensus_md_5_combined_remediation_order",
- "confidence_score": 1.0,
- "source": "review_reviewconcensus_md",
- "target": "review_reviewconcensus_md_5_combined_remediation_order"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L160",
- "weight": 1.0,
- "_src": "review_reviewconcensus_md",
- "_tgt": "review_reviewconcensus_md_6_verification_matrix_currently_failing_",
- "confidence_score": 1.0,
- "source": "review_reviewconcensus_md",
- "target": "review_reviewconcensus_md_6_verification_matrix_currently_failing_"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L177",
- "weight": 1.0,
- "_src": "review_reviewconcensus_md",
- "_tgt": "review_reviewconcensus_md_7_additional_investigation_still_needed",
- "confidence_score": 1.0,
- "source": "review_reviewconcensus_md",
- "target": "review_reviewconcensus_md_7_additional_investigation_still_needed"
- },
- {
- "relation": "contains",
- "confidence": "EXTRACTED",
- "source_file": "Review/reviewconcensus.md",
- "source_location": "L195",
- "weight": 1.0,
- "_src": "review_reviewconcensus_md",
- "_tgt": "review_reviewconcensus_md_8_suggested_response_format_from_origina",
- "confidence_score": 1.0,
- "source": "review_reviewconcensus_md",
- "target": "review_reviewconcensus_md_8_suggested_response_format_from_origina"
- }
- ],
- "hyperedges": []
-}
\ No newline at end of file
diff --git a/graphify-out/manifest.json b/graphify-out/manifest.json
deleted file mode 100644
index 7f18356..0000000
--- a/graphify-out/manifest.json
+++ /dev/null
@@ -1,142 +0,0 @@
-{
- "backend/app/database.py": 1777951189.3034766,
- "backend/app/security.py": 1778783180.918406,
- "backend/app/main.py": 1778798148.0356934,
- "backend/app/config.py": 1778530345.2815561,
- "backend/app/models/__init__.py": 1778785903.3733137,
- "backend/app/schemas/__init__.py": 1778777528.5351682,
- "backend/app/schemas/ingredient.py": 1778039312.8662732,
- "backend/app/schemas/recipe.py": 1778039393.98319,
- "backend/app/schemas/never_suggest.py": 1778073925.5271046,
- "backend/app/schemas/meal_plan_generation.py": 1778084036.909814,
- "backend/app/api/profile.py": 1777956368.5737112,
- "backend/app/api/pantry.py": 1777956424.6680362,
- "backend/app/api/auth.py": 1777956504.83993,
- "backend/app/api/shopping_list.py": 1778880601.8891757,
- "backend/app/api/recipes.py": 1778073362.7708287,
- "backend/app/api/ingredients.py": 1778073829.11783,
- "backend/app/api/never_suggest.py": 1778073941.5564826,
- "backend/app/api/meal_plans.py": 1778084055.3462386,
- "backend/app/api/admin.py": 1778798137.9894502,
- "backend/app/api/feedback.py": 1778766922.3003054,
- "backend/app/api/meals.py": 1778879488.0441222,
- "backend/app/api/orchestrate.py": 1778798111.7138143,
- "backend/app/services/__init__.py": 1777956738.895459,
- "backend/app/services/approval.py": 1777956764.8660724,
- "backend/app/services/swiftly_auth.py": 1778105739.4887176,
- "backend/app/services/email.py": 1778350294.6210043,
- "backend/app/services/matcher.py": 1778530415.7902083,
- "backend/app/services/scraper_service.py": 1778530467.1044106,
- "backend/app/services/llm_matcher.py": 1778603536.3964646,
- "backend/app/services/planner/__init__.py": 1778074655.8993347,
- "backend/app/services/planner/config.py": 1778869900.6016624,
- "backend/app/services/planner/types.py": 1778074679.1328828,
- "backend/app/services/planner/cost.py": 1778074809.5929606,
- "backend/app/services/planner/filter.py": 1778074942.3090916,
- "backend/app/services/planner/score.py": 1778075073.2311802,
- "backend/app/services/planner/select.py": 1778075173.7955527,
- "backend/app/services/planner/generate.py": 1778869984.0256917,
- "backend/app/services/orchestrator/__init__.py": 1778177126.323117,
- "backend/app/services/orchestrator/alerts.py": 1778177126.32329,
- "backend/app/services/orchestrator/runner.py": 1778350294.6210043,
- "backend/app/services/orchestrator/steps.py": 1778785903.3720872,
- "backend/app/scraper/base.py": 1777952881.2052577,
- "backend/app/scraper/__init__.py": 1777990139.9857452,
- "backend/app/scraper/lucky_ca_scraper.py": 1778455891.0354054,
- "backend/app/scheduler/__init__.py": 1778177126.3226595,
- "backend/app/scheduler/__main__.py": 1778350294.6210043,
- "backend/alembic/env.py": 1777950307.42607,
- "backend/alembic/versions/0003_grocery_item_description.py": 1777956739.2104664,
- "backend/alembic/versions/0002_seed_data.py": 1777957376.0055165,
- "backend/alembic/versions/0004_family_profile_calorie_target.py": 1777957747.6062996,
- "backend/alembic/versions/0001_initial_migration.py": 1777957931.411649,
- "backend/alembic/versions/0005_grocery_item_external_id.py": 1777989898.0080407,
- "backend/alembic/versions/0006_recipe_engine_thin.py": 1778039130.5329647,
- "backend/alembic/versions/0007_seed_recipes.py": 1778074371.4226236,
- "backend/alembic/versions/0008_phase5_orchestration.py": 1778177126.3216593,
- "backend/alembic/versions/0009_phase6_reminded_at.py": 1778350294.6200044,
- "backend/alembic/versions/0010_auto_llm_source.py": 1778530339.5494218,
- "backend/tests/__init__.py": 1777956033.7188013,
- "backend/tests/test_alembic.py": 1777956076.9028213,
- "backend/tests/test_smoke.py": 1777956467.502048,
- "backend/tests/test_auth.py": 1777956486.6495004,
- "backend/tests/test_scrape_endpoint.py": 1777956752.6867847,
- "backend/tests/test_approval.py": 1777957087.2746923,
- "backend/tests/test_config.py": 1777957677.80365,
- "backend/tests/test_ingredient_schema.py": 1778039307.434145,
- "backend/tests/test_recipe_schema.py": 1778039384.5479672,
- "backend/tests/test_recipe_api.py": 1778039780.2673233,
- "backend/tests/test_resolve_ingredient.py": 1778073337.4562314,
- "backend/tests/test_matcher.py": 1778073458.9750981,
- "backend/tests/test_match_hook.py": 1778073693.9006402,
- "backend/tests/conftest.py": 1778073793.3239858,
- "backend/tests/test_ingredient_api.py": 1778073809.016356,
- "backend/tests/test_never_suggest_api.py": 1778073934.5653176,
- "backend/tests/test_thin_phase4_smoke.py": 1778074510.0618944,
- "backend/tests/test_planner_cost.py": 1778074786.9134254,
- "backend/tests/test_planner_filter.py": 1778074929.9457998,
- "backend/tests/test_planner_score.py": 1778075049.8056276,
- "backend/tests/test_planner_select.py": 1778075285.0431771,
- "backend/tests/test_planner_generate.py": 1778083884.2852979,
- "backend/tests/test_meal_plan_generate_api.py": 1778084064.9874609,
- "backend/tests/test_swiftly_auth.py": 1778105761.8902538,
- "backend/tests/test_swiftly_api.py": 1778106438.1274457,
- "backend/tests/test_email_backend.py": 1778350294.6220045,
- "backend/tests/test_orchestrator.py": 1778785915.7668326,
- "frontend/vite.config.ts": 1777948142.4184198,
- "frontend/tailwind.config.js": 1778778396.8069677,
- "frontend/postcss.config.js": 1778779901.1660244,
- "frontend/src/main.tsx": 1778778522.4889784,
- "frontend/src/vite-env.d.ts": 1777953280.6437094,
- "frontend/src/App.tsx": 1778783215.6342444,
- "frontend/src/components/ErrorBoundary.tsx": 1778779503.289484,
- "frontend/src/components/ui/Button.tsx": 1778778473.542806,
- "frontend/src/components/ui/Badge.tsx": 1778778473.543806,
- "frontend/src/components/ui/Card.tsx": 1778778473.543806,
- "frontend/src/components/ui/Input.tsx": 1778778473.543806,
- "frontend/src/components/ui/EmptyState.tsx": 1778778473.543806,
- "frontend/src/components/ui/Skeleton.tsx": 1778778473.544806,
- "frontend/src/components/ui/LoadingSpinner.tsx": 1778778473.544806,
- "frontend/src/components/ui/Select.tsx": 1778778473.544806,
- "frontend/src/components/ui/Textarea.tsx": 1778778473.544806,
- "frontend/src/pages/Dashboard.tsx": 1778870594.1425326,
- "frontend/src/pages/MealDetail.tsx": 1778779002.5084825,
- "frontend/src/pages/Pantry.tsx": 1778778822.7611747,
- "frontend/src/pages/ShoppingList.tsx": 1778882561.460679,
- "frontend/src/pages/Login.tsx": 1778779556.6017618,
- "frontend/src/api/index.ts": 1778870437.9437332,
- "frontend/src/types/index.ts": 1778767174.0453367,
- "frontend/src/lib/utils.ts": 1778778473.5568063,
- "frontend/src/lib/toast.ts": 1778778522.4889784,
- "scripts/spike_lucky_scrape.py": 1777956153.218624,
- "scripts/send_test_approval.py": 1777956857.4302597,
- "scripts/spike_swiftly_ingest.py": 1777990129.029487,
- "scripts/seed_family.py": 1778357712.3096104,
- "scripts/enrich_recipes_spoonacular.py": 1778507110.1821167,
- "meal-planner-plan.md": 1777947557.24952,
- "README.md": 1779048720.8139644,
- "CLAUDE.md": 1778766252.0712485,
- "docs/SPEC.md": 1777950365.2993917,
- "docs/ARCHITECTURE.md": 1777950410.522425,
- "docs/database-schema.md": 1777950480.7590292,
- "docs/implementation-plan.md": 1777947968.251283,
- "docs/RUNNING.md": 1777950430.089872,
- "docs/ORIENTATION.md": 1778350294.6230044,
- "docs/HANDOFF.md": 1778777642.0998888,
- "docs/specs/2026-05-05-meal-planner-algorithm-design.md": 1778036579.4517467,
- "docs/superpowers/plans/2026-05-05-thin-phase-4-recipe-engine.md": 1778037298.782721,
- "docs/superpowers/plans/2026-05-05-phase-9-planner-algorithm.md": 1778037563.4829671,
- "docs/superpowers/plans/2026-05-07-phase5-orchestration.md": 1778159627.7619927,
- "docs/superpowers/plans/2026-05-07-phase6-sendgrid.md": 1778184748.00194,
- "docs/superpowers/plans/2026-05-09-mvp-login.md": 1778352388.4989371,
- "docs/superpowers/specs/2026-05-07-phase6-sendgrid-design.md": 1778183431.9015458,
- "backend/requirements-dev.txt": 1777956823.507458,
- "backend/requirements.txt": 1778038854.8944514,
- "backend/tests/fixtures/lucky_ca/META.md": 1777956176.9541266,
- "Review/docs-gpt5.5.md": 1777948430.4872625,
- "Review/repo-gpt5.5.md": 1777948651.0854905,
- "Review/docs-claude.md": 1777949339.1007605,
- "Review/synthesis.md": 1777949547.3586853,
- "Review/reviewconcensus.md": 1777949859.780845,
- "backend/tests/fixtures/lucky_ca/weekly_ad.png": 1777956070.3706224
-}
\ No newline at end of file