Files
mcma-backend/graphify-out/cache/semantic/bedf5a3979d3445006eaeda003ac9bd91579b18311b93727715ed7e6d33cee77.json
T
Senko-san fb5ce3c708
Docker Build & Publish / build (push) Successful in 1m11s
Docker Build & Publish / push (push) Failing after 7s
Docker Build & Publish / Prune old image versions (push) Has been skipped
chore: graphify!
2026-07-11 16:21:34 +03:00

1 line
9.6 KiB
JSON

{"nodes": [{"id": "claude_hexagonal_architecture", "label": "Hexagonal architecture (ports & adapters)", "file_type": "rationale", "source_file": "CLAUDE.md", "source_location": "## Architecture \u2014 hexagonal (ports & adapters)", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "claude_domain_layer", "label": "app/domain \u2014 pure business core", "file_type": "concept", "source_file": "CLAUDE.md", "source_location": "## Architecture", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "claude_application_layer", "label": "app/application \u2014 use cases / services", "file_type": "concept", "source_file": "CLAUDE.md", "source_location": "## Architecture", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "claude_infrastructure_layer", "label": "app/infrastructure \u2014 driven adapters", "file_type": "concept", "source_file": "CLAUDE.md", "source_location": "## Architecture", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "claude_api_layer", "label": "app/api \u2014 driving adapter (FastAPI)", "file_type": "concept", "source_file": "CLAUDE.md", "source_location": "## Architecture", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "claude_core_layer", "label": "app/core \u2014 cross-cutting concerns", "file_type": "concept", "source_file": "CLAUDE.md", "source_location": "## Architecture", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "claude_workers_layer", "label": "app/workers \u2014 arq background tasks", "file_type": "concept", "source_file": "CLAUDE.md", "source_location": "## Architecture", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "claude_composition_root", "label": "Composition roots (app/main.py, app/api/deps.py)", "file_type": "rationale", "source_file": "CLAUDE.md", "source_location": "## Architecture", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "claude_error_handling_convention", "label": "Error handling convention (domain errors \u2192 HTTP in app/api/errors.py)", "file_type": "rationale", "source_file": "CLAUDE.md", "source_location": "### Cross-cutting conventions", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "claude_config_convention", "label": "Config convention (get_settings singleton, env-driven)", "file_type": "rationale", "source_file": "CLAUDE.md", "source_location": "### Cross-cutting conventions", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "claude_logging_convention", "label": "Logging convention (structlog, correlation_id contextvar)", "file_type": "rationale", "source_file": "CLAUDE.md", "source_location": "### Cross-cutting conventions", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "claude_db_sessions_convention", "label": "DB sessions convention (SessionDep / session_scope)", "file_type": "rationale", "source_file": "CLAUDE.md", "source_location": "### Cross-cutting conventions", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "claude_migrations_convention", "label": "Migrations convention (async, settings-driven Alembic)", "file_type": "rationale", "source_file": "CLAUDE.md", "source_location": "### Cross-cutting conventions", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "claude_health_convention", "label": "Health convention (/health liveness, /health/ready with timeouts)", "file_type": "rationale", "source_file": "CLAUDE.md", "source_location": "### Cross-cutting conventions", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "claude_invariant_likes_event_log", "label": "Invariant: likes are an append-only event-log", "file_type": "rationale", "source_file": "CLAUDE.md", "source_location": "## Non-negotiable domain invariants", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "claude_invariant_track_id_stable", "label": "Invariant: track.id is a stable content_id UUID", "file_type": "rationale", "source_file": "CLAUDE.md", "source_location": "## Non-negotiable domain invariants", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "claude_invariant_dedup", "label": "Invariant: dedup on (source, source_id) and acoustid_fingerprint", "file_type": "rationale", "source_file": "CLAUDE.md", "source_location": "## Non-negotiable domain invariants", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "claude_invariant_graceful_degradation", "label": "Invariant: graceful degradation is mandatory", "file_type": "rationale", "source_file": "CLAUDE.md", "source_location": "## Non-negotiable domain invariants", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "claude_invariant_no_manual_overwrite", "label": "Invariant: never overwrite metadata_status=manual", "file_type": "rationale", "source_file": "CLAUDE.md", "source_location": "## Non-negotiable domain invariants", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "claude_invariant_no_heavy_work_in_request", "label": "Invariant: no heavy work in the request cycle (goes to arq workers)", "file_type": "rationale", "source_file": "CLAUDE.md", "source_location": "## Non-negotiable domain invariants", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "claude_invariant_subsonic_compatibility", "label": "Invariant: Subsonic API is an adapter, not a reimplementation", "file_type": "rationale", "source_file": "CLAUDE.md", "source_location": "## Non-negotiable domain invariants", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "claude_python314_note", "label": "Python 3.14 lazy annotations note (PEP 649)", "file_type": "rationale", "source_file": "CLAUDE.md", "source_location": "## Python 3.14 note", "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "claude_hexagonal_architecture", "target": "claude_domain_layer", "relation": "conceptually_related_to", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "CLAUDE.md", "source_location": "## Architecture", "weight": 1.0}, {"source": "claude_hexagonal_architecture", "target": "claude_application_layer", "relation": "conceptually_related_to", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "CLAUDE.md", "source_location": "## Architecture", "weight": 1.0}, {"source": "claude_hexagonal_architecture", "target": "claude_infrastructure_layer", "relation": "conceptually_related_to", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "CLAUDE.md", "source_location": "## Architecture", "weight": 1.0}, {"source": "claude_hexagonal_architecture", "target": "claude_api_layer", "relation": "conceptually_related_to", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "CLAUDE.md", "source_location": "## Architecture", "weight": 1.0}, {"source": "claude_hexagonal_architecture", "target": "claude_core_layer", "relation": "conceptually_related_to", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "CLAUDE.md", "source_location": "## Architecture", "weight": 1.0}, {"source": "claude_hexagonal_architecture", "target": "claude_workers_layer", "relation": "conceptually_related_to", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "CLAUDE.md", "source_location": "## Architecture", "weight": 1.0}, {"source": "claude_composition_root", "target": "claude_api_layer", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "CLAUDE.md", "source_location": "## Architecture", "weight": 1.0}, {"source": "claude_error_handling_convention", "target": "claude_domain_layer", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "CLAUDE.md", "source_location": "### Cross-cutting conventions", "weight": 1.0}, {"source": "claude_migrations_convention", "target": "claude_composition_root", "relation": "references", "confidence": "AMBIGUOUS", "confidence_score": 0.2, "source_file": "CLAUDE.md", "source_location": "### Cross-cutting conventions", "weight": 1.0}], "hyperedges": [{"id": "claude_cross_cutting_conventions", "label": "Cross-cutting conventions (errors, config, logging, db sessions, migrations, health)", "nodes": ["claude_error_handling_convention", "claude_config_convention", "claude_logging_convention", "claude_db_sessions_convention", "claude_migrations_convention", "claude_health_convention"], "relation": "form", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "CLAUDE.md"}, {"id": "claude_domain_invariants", "label": "Non-negotiable domain invariants (for future sync + ML)", "nodes": ["claude_invariant_likes_event_log", "claude_invariant_track_id_stable", "claude_invariant_dedup", "claude_invariant_graceful_degradation", "claude_invariant_no_manual_overwrite", "claude_invariant_no_heavy_work_in_request", "claude_invariant_subsonic_compatibility"], "relation": "form", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "CLAUDE.md"}, {"id": "claude_hexagonal_layers", "label": "Hexagonal architecture layers (domain/application/infrastructure/api/core/workers)", "nodes": ["claude_domain_layer", "claude_application_layer", "claude_infrastructure_layer", "claude_api_layer", "claude_core_layer", "claude_workers_layer"], "relation": "implement", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "CLAUDE.md"}]}