chore: remove graphify artifacts from repo and add to .gitignore

This commit is contained in:
2026-05-18 17:43:40 -07:00
parent 019f9020ad
commit 16069bfa92
120 changed files with 0 additions and 34474 deletions
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
/usr/bin/python3
-340
View File
@@ -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._
@@ -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"}]}
File diff suppressed because one or more lines are too long
@@ -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"}]}
@@ -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"}]}
@@ -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": []}
File diff suppressed because one or more lines are too long
@@ -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": []}
@@ -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": []}
File diff suppressed because one or more lines are too long
@@ -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"}]}
@@ -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"}]}
@@ -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": []}
@@ -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": []}
@@ -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": []}
@@ -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": []}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -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"}]}
@@ -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"}]}
@@ -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"}]}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -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"}]}
File diff suppressed because one or more lines are too long
@@ -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": []}
File diff suppressed because one or more lines are too long
@@ -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": []}
@@ -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"}]}
@@ -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"}]}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -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"}]}
@@ -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"}]}
@@ -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": []}
@@ -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"}]}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -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"}]}
@@ -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": []}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -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"}]}
@@ -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"}]}
@@ -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"}]}
@@ -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": []}
@@ -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"}]}
@@ -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": []}
File diff suppressed because one or more lines are too long
@@ -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": []}
@@ -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": []}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -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": []}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -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"}]}
File diff suppressed because one or more lines are too long
@@ -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"}]}
File diff suppressed because one or more lines are too long
@@ -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": []}
@@ -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": []}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -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"}]}
@@ -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"}]}
@@ -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": []}
@@ -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": []}
@@ -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"}]}
@@ -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": []}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -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": []}
File diff suppressed because one or more lines are too long
@@ -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"}]}
@@ -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"}]}
@@ -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": []}
@@ -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"}]}
@@ -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"}]}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -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"}]}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -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"}]}
@@ -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": []}
@@ -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": []}
File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More