Architecture Report

arcade-agent — version v0.3.0 — recovered with pkg

407
Entities
228
Dependencies
11
Components
4
Smells

Quality Metrics

Core ARCADE Metrics

0.675
RCI
5.128
TurboMQ
0.466
BasicMQ
0.060
IntraConnectivity
0.006
InterConnectivity
0.125
TwoWayPairRatio

Balanced / Principle-aligned Scores

0.941
DependencyHealth
0.435
ComponentBalance
0.400
HubBalance
0.918
BoundaryClarity
0.631
DependencyDistribution
0.255
SmellDiscipline
0.687
PrincipleAlignmentScore
0.548
BalancedArchitectureScore

Architecture Diagram

graph TD
    Algorithms["Algorithms\n(85 entities)"]
    Budget["Budget\n(5 entities)"]
    Cache["Cache\n(5 entities)"]
    Ci["Ci\n(48 entities)"]
    Display["Display\n(2 entities)"]
    Exporters["Exporters\n(23 entities)"]
    Incremental["Incremental\n(5 entities)"]
    Parsers["Parsers\n(140 entities)"]
    Serialization["Serialization\n(11 entities)"]
    Source["Source\n(27 entities)"]
    Tools["Tools\n(56 entities)"]
    Algorithms --> Tools
    Cache --> Serialization
    Ci --> Algorithms
    Ci --> Display
    Ci --> Exporters
    Ci --> Parsers
    Ci --> Serialization
    Ci --> Tools
    Parsers --> Source
    Serialization --> Algorithms
    Serialization --> Parsers
    Source --> Cache
    Source --> Parsers
    Tools --> Algorithms
    Tools --> Budget
    Tools --> Exporters
    Tools --> Serialization
    Tools --> Source
        
Package-based grouping (depth=1 after common prefix 'arcade_agent') with dependency-affinity facade refinement (21 entities reassigned).

Components

Component Responsibility # Entities
Algorithms Entities in algorithms 85 arcade_agent.algorithms.acdc.acdc, arcade_agent.algorithms.arc._arc_cluster_name, arcade_agent.algorithms.arc._avg_structural_sim, arcade_agent.algorithms.arc._build_concern_vectors, arcade_agent.algorithms.arc._cluster_responsibility, arcade_agent.algorithms.arc._js_divergence, arcade_agent.algorithms.arc._js_similarity, arcade_agent.algorithms.arc._kl_divergence, ... (+77 more)
Budget Entities in budget 5 arcade_agent.budget._deep_copy, arcade_agent.budget.enforce_budget, arcade_agent.budget.estimate_tokens, arcade_agent.budget.truncate_result, arcade_agent.tools.adapters.mcp._apply_budget
Cache Entities in cache 5 arcade_agent.cache._cache_dir, arcade_agent.cache.cache_key, arcade_agent.cache.get_cached_graph, arcade_agent.cache.invalidate_cache, arcade_agent.cache.put_cached_graph
Ci Entities in ci 48 arcade_agent.ci.arch_diff._delta, arcade_agent.ci.arch_diff._direction_icon, arcade_agent.ci.arch_diff._metric_row, arcade_agent.ci.arch_diff.build_report, arcade_agent.ci.arch_diff.main, arcade_agent.ci.compare_baseline._all_metric_values, arcade_agent.ci.compare_baseline._build_component_rows, arcade_agent.ci.compare_baseline._build_dependency_rows, ... (+40 more)
Display Entities in display 2 arcade_agent.display.display_value, arcade_agent.tools.changelog_architecture._smell_dict
Exporters Entities in exporters 23 arcade_agent.ci.compare_baseline._write_step_summary, arcade_agent.ci.compare_baseline.build_comment, arcade_agent.ci.compare_baseline.main, arcade_agent.exporters.changelog_md._fmt_delta, arcade_agent.exporters.changelog_md.render_changelog_markdown, arcade_agent.exporters.dot._escape_dot, arcade_agent.exporters.dot.export_dot, arcade_agent.exporters.html.AlgorithmResult, ... (+15 more)
Incremental Entities in incremental 5 arcade_agent.incremental.ExtractCache, arcade_agent.incremental.ExtractCache.__init__, arcade_agent.incremental.ExtractCache.get_or_extract, arcade_agent.incremental._facts_to_json, arcade_agent.incremental.file_key
Parsers Entities in parsers 140 arcade_agent.incremental._facts_from_json, arcade_agent.models.graph, arcade_agent.parsers.base.LanguageParser, arcade_agent.parsers.base.LanguageParser.__init__, arcade_agent.parsers.base.LanguageParser.file_extensions, arcade_agent.parsers.base.LanguageParser.language, arcade_agent.parsers.base.LanguageParser.parse, arcade_agent.parsers.base.detect_language, ... (+132 more)
Serialization Entities in serialization 11 arcade_agent.serialization._serialize_dataclass_dict, arcade_agent.serialization.architecture_to_dict, arcade_agent.serialization.dict_to_architecture, arcade_agent.serialization.dict_to_graph, arcade_agent.serialization.graph_to_dict, arcade_agent.serialization.load_architecture, arcade_agent.serialization.load_graph, arcade_agent.serialization.save_architecture, ... (+3 more)
Source Entities in source 27 arcade_agent.source.filtering._is_jvm_test_source_set, arcade_agent.source.filtering._matches_excluded_directory, arcade_agent.source.filtering._source_set_tokens, arcade_agent.source.filtering.exclusion_cache_namespace, arcade_agent.source.filtering.is_excluded_source_path, arcade_agent.source.filtering.normalize_exclude_dirs, arcade_agent.source.ingest.IngestedRepo, arcade_agent.source.ingest.IngestedRepo.cleanup, ... (+19 more)
Tools Entities in tools 56 arcade_agent.ci.compare_baseline._run_a2a_comparison, arcade_agent.tools.adapters.mcp._build_server, arcade_agent.tools.adapters.mcp._make_summary, arcade_agent.tools.adapters.mcp._resolve_parse_source, arcade_agent.tools.adapters.mcp._store, arcade_agent.tools.adapters.mcp.get_server, arcade_agent.tools.adapters.mcp.main, arcade_agent.tools.analyze.AnalysisResult, ... (+48 more)

Architectural Smells (4)

high SmellType.DEPENDENCY_CYCLE

Circular dependency among 6 components: Algorithms <-> Cache <-> Parsers <-> Serialization <-> Source <-> Tools

Why: Dependency cycles make components tightly coupled — you cannot change, test, or deploy any component in the cycle independently. This hinders maintainability, increases build times, and makes the system harder to understand.

Fix: Break the cycle by introducing an interface/abstraction that one component depends on, inverting the dependency direction. Consider the Dependency Inversion Principle (DIP).

Affects: Algorithms, Cache, Parsers, Serialization, Source, Tools

high SmellType.CONCERN_OVERLOAD

Ci contains 48 entities but only 2 internal dependencies (0.04 per entity), suggesting multiple responsibilities.

Why: Large components are harder to understand, test, and maintain. When their internals are also sparsely connected, that usually means the component is acting as a bucket for unrelated concerns rather than a cohesive module.

Fix: Consider splitting Ci into smaller, focused components with single responsibilities.

Affects: Ci

medium SmellType.CONCERN_OVERLOAD

Exporters contains 23 entities but only 7 internal dependencies (0.30 per entity), suggesting multiple responsibilities.

Why: Large components are harder to understand, test, and maintain. When their internals are also sparsely connected, that usually means the component is acting as a bucket for unrelated concerns rather than a cohesive module.

Fix: Consider splitting Exporters into smaller, focused components with single responsibilities.

Affects: Exporters

medium SmellType.CONCERN_OVERLOAD

Source contains 27 entities but only 7 internal dependencies (0.26 per entity), suggesting multiple responsibilities.

Why: Large components are harder to understand, test, and maintain. When their internals are also sparsely connected, that usually means the component is acting as a bucket for unrelated concerns rather than a cohesive module.

Fix: Consider splitting Source into smaller, focused components with single responsibilities.

Affects: Source

Dependency Summary

PackageEntities
arcade_agent.parsers 135
arcade_agent.algorithms 76
arcade_agent.tools 55
arcade_agent.ci 53
arcade_agent.source 30
arcade_agent 26
arcade_agent.exporters 20
arcade_agent.tools.adapters 8
arcade_agent.models 4