{"nodes": [{"id": "users_senko_work_mcma_compose_mcma_backend_app_main_py", "label": "main.py", "file_type": "code", "source_file": "app/main.py", "source_location": "L1"}, {"id": "users_senko_work_mcma_compose_mcma_backend_app_main_lifespan", "label": "lifespan()", "file_type": "code", "source_file": "app/main.py", "source_location": "L22", "_callable": true}, {"id": "fastapi", "label": "FastAPI", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/Users/senko/Work/mcma-compose/mcma-backend/app/main.py"}, {"id": "users_senko_work_mcma_compose_mcma_backend_app_main_create_app", "label": "create_app()", "file_type": "code", "source_file": "app/main.py", "source_location": "L31", "_callable": true}, {"id": "users_senko_work_mcma_compose_mcma_backend_app_main_rationale_1", "label": "FastAPI composition root: wiring, lifespan, middleware, routers.", "file_type": "rationale", "source_file": "app/main.py", "source_location": "L1"}], "edges": [{"source": "users_senko_work_mcma_compose_mcma_backend_app_main_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L3", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_main_py", "target": "contextlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L4", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_main_py", "target": "fastapi", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L6", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_main_py", "target": "app_api_errors", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L8", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_main_py", "target": "app_api_health", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L9", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_main_py", "target": "app_api_middleware", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L10", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_main_py", "target": "app_api_rest", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L11", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_main_py", "target": "app_api_v1", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L12", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_main_py", "target": "app_core_config", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L13", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_main_py", "target": "app_core_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L14", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_main_py", "target": "app_infrastructure_cache", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L15", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_main_py", "target": "app_infrastructure_db", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L16", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_main_py", "target": "users_senko_work_mcma_compose_mcma_backend_app_main_lifespan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L22", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_main_lifespan", "target": "fastapi", "relation": "references", "context": "parameter_type", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L22", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_main_py", "target": "users_senko_work_mcma_compose_mcma_backend_app_main_create_app", "relation": "contains", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L31", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_main_create_app", "target": "fastapi", "relation": "references", "context": "return_type", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L31", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_main_create_app", "target": "fastapi", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L35", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_main_create_app", "target": "users_senko_work_mcma_compose_mcma_backend_app_main_lifespan", "relation": "indirect_call", "context": "argument", "confidence": "INFERRED", "source_file": "app/main.py", "source_location": "L39", "weight": 1.0}, {"source": "users_senko_work_mcma_compose_mcma_backend_app_main_rationale_1", "target": "users_senko_work_mcma_compose_mcma_backend_app_main_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "app/main.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_main_lifespan", "callee": "get_settings", "is_member_call": false, "source_file": "app/main.py", "source_location": "L23", "receiver": null}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_main_lifespan", "callee": "info", "is_member_call": true, "source_file": "app/main.py", "source_location": "L24", "receiver": "log"}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_main_lifespan", "callee": "info", "is_member_call": true, "source_file": "app/main.py", "source_location": "L26", "receiver": "log"}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_main_lifespan", "callee": "dispose_engine", "is_member_call": false, "source_file": "app/main.py", "source_location": "L27", "receiver": null}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_main_lifespan", "callee": "close_redis", "is_member_call": false, "source_file": "app/main.py", "source_location": "L28", "receiver": null}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_main_create_app", "callee": "get_settings", "is_member_call": false, "source_file": "app/main.py", "source_location": "L32", "receiver": null}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_main_create_app", "callee": "configure_logging", "is_member_call": false, "source_file": "app/main.py", "source_location": "L33", "receiver": null}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_main_create_app", "callee": "app_version", "is_member_call": false, "source_file": "app/main.py", "source_location": "L37", "receiver": null}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_main_create_app", "callee": "add_middleware", "is_member_call": true, "source_file": "app/main.py", "source_location": "L42", "receiver": "app"}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_main_create_app", "callee": "CorrelationIdMiddleware", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "app/main.py", "source_location": "L42"}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_main_create_app", "callee": "register_exception_handlers", "is_member_call": false, "source_file": "app/main.py", "source_location": "L43", "receiver": null}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_main_create_app", "callee": "include_router", "is_member_call": true, "source_file": "app/main.py", "source_location": "L45", "receiver": "app"}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_main_create_app", "callee": "health_router", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "app/main.py", "source_location": "L45"}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_main_create_app", "callee": "include_router", "is_member_call": true, "source_file": "app/main.py", "source_location": "L46", "receiver": "app"}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_main_create_app", "callee": "api_v1_router", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "app/main.py", "source_location": "L46"}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_main_create_app", "callee": "include_router", "is_member_call": true, "source_file": "app/main.py", "source_location": "L47", "receiver": "app"}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_main_create_app", "callee": "subsonic_router", "is_member_call": false, "indirect": true, "context": "argument", "source_file": "app/main.py", "source_location": "L47"}, {"caller_nid": "users_senko_work_mcma_compose_mcma_backend_app_main_create_app", "callee": "websocket", "is_member_call": true, "source_file": "app/main.py", "source_location": "L49", "receiver": "app"}]}