# proxy/flow | 1933 func | 12 pipelines | 14 hub-types | 2026-03-24

PIPELINES[12] (Core:7, IO:2, NLP:1, Refactor:1, Unknown:1):
  Src [IO]: Path | None → bool
              → sync_from_git_log(repo_path:Path | None) → list[User] CC=6    pure ▶
              → _sync_git_users_from_repo(cwd:Path, git_dir:Path) → list[User] CC=2    pure
              → _collect_git_authors_from_objects(git_dir:Path) → list[tuple[str, str]] CC=7    mutation
              → _iter_git_starting_shas(git_dir:Path) → list[str] CC=2    pure
              → _read_git_ref(git_dir:Path, ref_name:str) → str | None CC=2    pure
              → _read_packed_git_ref(git_dir:Path, ref_name:str) → str | None CC=5    IO
              → _parse_packed_git_ref_line(line:str, ref_name:str) → str | None CC=7    pure
              → _is_git_sha(value:str) → bool           CC=3    pure ■
              PURITY: 6/8 pure  BOTTLENECK: _collect_git_authors_from_objects(CC=7)

  Src [NLP]: Path | None → bool
              → __init__(persist_path:Path | None)      CC=4    mutation ▶
              → _discover_git_user() → User | None      CC=4    pure
              → _read_git_identity() → tuple[str, str]  CC=3    pure
              → _read_git_identity_from_repo() → tuple[str, str] CC=3    pure
              → _resolve_git_repo_root() → Path | None  CC=3    pure
              → _resolve_git_root_candidate(candidate:Path) → Path | None CC=6    pure
              → _git_binary_available() → bool          CC=1    pure ■
              PURITY: 6/7 pure  BOTTLENECK: _resolve_git_root_candidate(CC=6)

  Src [IO]: Request → Any
              → chat_completions(request:Request, x_task_tier:str | None) CC=13   IO ▶
              → _route_to_model(messages, model:str | None, x_task_tier:str | None) CC=4    pure
              → _analyze_request(messages, x_task_tier:str | None) CC=1    pure
              → analyze_request(messages:list[dict] | str) → AnalysisResult CC=7    pure
              → log_call() → Callable                   CC=1    mutation
              → _safe_args(args:tuple, kwargs:dict, include:bool) → dict[str, Any] CC=6    pure
              → _truncate(value:Any, max_len:int) → Any CC=9    pure ■
              PURITY: 5/7 pure  BOTTLENECK: chat_completions(CC=13)

  Src [Unknown]: ? → ?
              → execute() → StreamingResponse | JSONResponse CC=1    pure ▶
              → _build_context() → None                 CC=2    mutation
              → detect_project(messages:list[dict], headers:dict[str, str] | None) → ProjectContext CC=8    pure
              → _from_directory(directory:str) → ProjectContext CC=2    pure
              → _detect_stack(root:Path) → list[str]    CC=4    mutation
              → sorted()                                CC=4    pure
              → cmp()                                   CC=2    pure ■
              PURITY: 5/7 pure  BOTTLENECK: detect_project(CC=8)

  Src [Refactor]: ? → ?
              → bulk_autofix() → dict[str, Any]         CC=5    mutation ▶
              → _process_bulk_fix(tool_name:str, fix:dict[str, Any]) → dict[str, Any] CC=7    pure
              → execute_autofix(req:AutoFixRequest) → dict[str, Any] CC=12   pure
              → _create_human_action_ticket(tool_name:str, action:str, command:str) → Any CC=4    pure
              → _get_default_user() → dict[str, Any] | None CC=2    pure
              → get(cls, persist_path:Path | None) → UserManager CC=2    pure
              → cls()                                   CC=3    pure ■
              PURITY: 6/7 pure  BOTTLENECK: execute_autofix(CC=12)

  Core [Core]: ? → dict
              → main()                                  CC=1    pure ▶
              → create_validation_main(title:str, components:dict, base_path:str, original_file:str, benefits_bullet:str) CC=1    pure
              → run_validation_main(title:str, components:dict, base_path:str, original_file:str, benefits_bullet:str) CC=1    pure
              → run_validation(title:str, components:dict, base_path:str, original_file:str, benefits_text:str) CC=9    IO
              → print_complexity_analysis(files:list, base_path:str) CC=4    IO
              → count_complexity(file_path:str) → dict  CC=6    IO ■
              PURITY: 3/6 pure  BOTTLENECK: run_validation(CC=9)

  Core [Core]: ? → dict
              → main()                                  CC=1    pure ▶
              → create_validation_main(title:str, components:dict, base_path:str, original_file:str, benefits_bullet:str) CC=1    pure
              → run_validation_main(title:str, components:dict, base_path:str, original_file:str, benefits_bullet:str) CC=1    pure
              → run_validation(title:str, components:dict, base_path:str, original_file:str, benefits_text:str) CC=9    IO
              → print_complexity_analysis(files:list, base_path:str) CC=4    IO
              → count_complexity(file_path:str) → dict  CC=6    IO ■
              PURITY: 3/6 pure  BOTTLENECK: run_validation(CC=9)

  Core [Core]: ? → dict
              → main()                                  CC=1    pure ▶
              → create_validation_main(title:str, components:dict, base_path:str, original_file:str, benefits_bullet:str) CC=1    pure
              → run_validation_main(title:str, components:dict, base_path:str, original_file:str, benefits_bullet:str) CC=1    pure
              → run_validation(title:str, components:dict, base_path:str, original_file:str, benefits_text:str) CC=9    IO
              → print_complexity_analysis(files:list, base_path:str) CC=4    IO
              → count_complexity(file_path:str) → dict  CC=6    IO ■
              PURITY: 3/6 pure  BOTTLENECK: run_validation(CC=9)

  Core [Core]: ? → dict
              → main()                                  CC=1    pure ▶
              → create_validation_main(title:str, components:dict, base_path:str, original_file:str, benefits_bullet:str) CC=1    pure
              → run_validation_main(title:str, components:dict, base_path:str, original_file:str, benefits_bullet:str) CC=1    pure
              → run_validation(title:str, components:dict, base_path:str, original_file:str, benefits_text:str) CC=9    IO
              → print_complexity_analysis(files:list, base_path:str) CC=4    IO
              → count_complexity(file_path:str) → dict  CC=6    IO ■
              PURITY: 3/6 pure  BOTTLENECK: run_validation(CC=9)

  Core [Core]: ? → dict
              → main()                                  CC=1    pure ▶
              → create_validation_main(title:str, components:dict, base_path:str, original_file:str, benefits_bullet:str) CC=1    pure
              → run_validation_main(title:str, components:dict, base_path:str, original_file:str, benefits_bullet:str) CC=1    pure
              → run_validation(title:str, components:dict, base_path:str, original_file:str, benefits_text:str) CC=9    IO
              → print_complexity_analysis(files:list, base_path:str) CC=4    IO
              → count_complexity(file_path:str) → dict  CC=6    IO ■
              PURITY: 3/6 pure  BOTTLENECK: run_validation(CC=9)

  Core [Core]: ? → dict
              → main()                                  CC=1    pure ▶
              → create_validation_main(title:str, components:dict, base_path:str, original_file:str, benefits_bullet:str) CC=1    pure
              → run_validation_main(title:str, components:dict, base_path:str, original_file:str, benefits_bullet:str) CC=1    pure
              → run_validation(title:str, components:dict, base_path:str, original_file:str, benefits_text:str) CC=9    IO
              → print_complexity_analysis(files:list, base_path:str) CC=4    IO
              → count_complexity(file_path:str) → dict  CC=6    IO ■
              PURITY: 3/6 pure  BOTTLENECK: run_validation(CC=9)

  Src [Core]: str → T
              → create_project_ticket(project_id:str, req:dict[str, Any]) → dict[str, Any] CC=4    pure ▶
              → create_ticket(task:str, title:str, project_id:str | None, description:str, status:str, priority:str, type:str, sprint_id:str, milestone_id:str, tags:list[str], files:list[str], estimated_hours:float, tool:str | None) CC=17   pure  !!
              → _default_project_dir(project_id:str | None) → str CC=6    pure
              → _get_registry()                         CC=3    mutation
              → get_settings() → Settings               CC=1    mutation
              → get_singleton(instance_var:T | None, instance_class:Type[T]) → T CC=2    pure ■
              PURITY: 4/6 pure  BOTTLENECK: create_ticket(CC=17)


TRANSFORMS (fan-out ≥10):
  TicketsPanel()                                          fan=56   !! mutation-heavy
  TasksPanel()                                            fan=45   !! mutation-heavy
  EnvironmentsPanel()                                     fan=42   !! mutation-heavy
  useDashboardData()                                      fan=39   !! mutation-heavy
  VoiceChat()                                             fan=31   !! mutation-heavy
  create_ticket(task:str, title:str, project_id:str | None, description:str, status:str, priority:str, type:str, sprint_id:str, milestone_id:str, tags:list[str], files:list[str], estimated_hours:float, tool:str | None) fan=29   !! side-effects
  run_all_tests(request:Request)                          fan=28   !! side-effects
  chat_completions(request:Request, x_task_tier:str | None) fan=27   !! side-effects
  QuickTaskCreator()                                      fan=27   !! side-effects
  TicketDispatchTable()                                   fan=27   !! side-effects
  ProjectsPanel() → AnalysisResult                        fan=26   !! side-effects
  ToolHealthPanel()                                       fan=26   !! side-effects
  QuickCreateProject() → AnalysisResult                   fan=25   !! side-effects
  TableExport()                                           fan=23   !! side-effects
  TableExport()                                           fan=23   !! side-effects

CONTRACTS:
  Pipeline: Src
    sync_from_git_log(repo_path:Path | None) → list[User]
      IN:  repo_path:Path | None
      OUT: list[User]

    _sync_git_users_from_repo(cwd:Path, git_dir:Path) → list[User]
      IN:  cwd:Path, git_dir:Path
      OUT: list[User]

    _collect_git_authors_from_objects(git_dir:Path) → list[tuple[str, str]]
      IN:  git_dir:Path
      OUT: list[tuple[str, str]]
      SIDE-EFFECT: pure

    _iter_git_starting_shas(git_dir:Path) → list[str]
      IN:  git_dir:Path
      OUT: list[str]

    _read_git_ref(git_dir:Path, ref_name:str) → str | None
      IN:  git_dir:Path, ref_name:str
      OUT: str | None

    _read_packed_git_ref(git_dir:Path, ref_name:str) → str | None
      IN:  git_dir:Path, ref_name:str
      OUT: str | None
      SIDE-EFFECT: IO(read_text)

    _parse_packed_git_ref_line(line:str, ref_name:str) → str | None
      IN:  line:str, ref_name:str
      OUT: str | None

    _is_git_sha(value:str) → bool
      IN:  value:str
      OUT: bool

  Pipeline: Src
    __init__(persist_path:Path | None)
      IN:  persist_path:Path | None
      OUT: None
      SIDE-EFFECT: mutates self.users, self._persist_path, self._store

    _discover_git_user() → User | None
      IN:  ()
      OUT: User | None

    _read_git_identity() → tuple[str, str]
      IN:  ()
      OUT: tuple[str, str]

    _read_git_identity_from_repo() → tuple[str, str]
      IN:  ()
      OUT: tuple[str, str]

    _resolve_git_repo_root() → Path | None
      IN:  ()
      OUT: Path | None
      INVARIANT: all entities exist in analysis

    _resolve_git_root_candidate(candidate:Path) → Path | None
      IN:  candidate:Path
      OUT: Path | None
      INVARIANT: all entities exist in analysis

    _git_binary_available() → bool
      IN:  ()
      OUT: bool

  Pipeline: Src
    chat_completions(request:Request, x_task_tier:str | None)
      IN:  request:Request, x_task_tier:str | None
      OUT: None
      SIDE-EFFECT: IO(execute, dumps); generator

    _route_to_model(messages, model:str | None, x_task_tier:str | None)
      IN:  messages, model:str | None, x_task_tier:str | None
      OUT: None

    _analyze_request(messages, x_task_tier:str | None)
      IN:  messages, x_task_tier:str | None
      OUT: None

    analyze_request(messages:list[dict] | str) → AnalysisResult
      IN:  messages:list[dict] | str
      OUT: AnalysisResult

    log_call() → Callable
      IN:  ()
      OUT: Callable
      SIDE-EFFECT: pure

    _safe_args(args:tuple, kwargs:dict, include:bool) → dict[str, Any]
      IN:  args:tuple, kwargs:dict, include:bool
      OUT: dict[str, Any]

    _truncate(value:Any, max_len:int) → Any
      IN:  value:Any, max_len:int
      OUT: Any

  Pipeline: Src
    execute() → StreamingResponse | JSONResponse
      IN:  ()
      OUT: StreamingResponse | JSONResponse

    _build_context() → None
      IN:  ()
      OUT: None
      SIDE-EFFECT: mutates self.project_ctx

    detect_project(messages:list[dict], headers:dict[str, str] | None) → ProjectContext
      IN:  messages:list[dict], headers:dict[str, str] | None
      OUT: ProjectContext

    _from_directory(directory:str) → ProjectContext
      IN:  directory:str
      OUT: ProjectContext

    _detect_stack(root:Path) → list[str]
      IN:  root:Path
      OUT: list[str]
      SIDE-EFFECT: pure

    sorted()
      IN:  ()
      OUT: None
      INVARIANT: output is sorted

    cmp()
      IN:  ()
      OUT: None

  Pipeline: Src
    bulk_autofix() → dict[str, Any]
      IN:  ()
      OUT: dict[str, Any]
      SIDE-EFFECT: pure

    _process_bulk_fix(tool_name:str, fix:dict[str, Any]) → dict[str, Any]
      IN:  tool_name:str, fix:dict[str, Any]
      OUT: dict[str, Any]

    execute_autofix(req:AutoFixRequest) → dict[str, Any]
      IN:  req:AutoFixRequest
      OUT: dict[str, Any]

    _create_human_action_ticket(tool_name:str, action:str, command:str) → Any
      IN:  tool_name:str, action:str, command:str
      OUT: Any

    _get_default_user() → dict[str, Any] | None
      IN:  ()
      OUT: dict[str, Any] | None

    get(cls, persist_path:Path | None) → UserManager
      IN:  cls, persist_path:Path | None
      OUT: UserManager

    cls()
      IN:  ()
      OUT: None

  Pipeline: Core
    main()
      IN:  ()
      OUT: None

    create_validation_main(title:str, components:dict, base_path:str, original_file:str, benefits_bullet:str)
      IN:  title:str, components:dict, base_path:str, original_file:str, benefits_bullet:str
      OUT: None

    run_validation_main(title:str, components:dict, base_path:str, original_file:str, benefits_bullet:str)
      IN:  title:str, components:dict, base_path:str, original_file:str, benefits_bullet:str
      OUT: None

    run_validation(title:str, components:dict, base_path:str, original_file:str, benefits_text:str)
      IN:  title:str, components:dict, base_path:str, original_file:str, benefits_text:str
      OUT: None
      SIDE-EFFECT: IO(print, print, print)

    print_complexity_analysis(files:list, base_path:str)
      IN:  files:list, base_path:str
      OUT: None
      SIDE-EFFECT: IO(print, print, print)

    count_complexity(file_path:str) → dict
      IN:  file_path:str
      OUT: dict
      SIDE-EFFECT: IO(open, f.readlines)

  Pipeline: Core
    main()
      IN:  ()
      OUT: None

    create_validation_main(title:str, components:dict, base_path:str, original_file:str, benefits_bullet:str)
      IN:  title:str, components:dict, base_path:str, original_file:str, benefits_bullet:str
      OUT: None

    run_validation_main(title:str, components:dict, base_path:str, original_file:str, benefits_bullet:str)
      IN:  title:str, components:dict, base_path:str, original_file:str, benefits_bullet:str
      OUT: None

    run_validation(title:str, components:dict, base_path:str, original_file:str, benefits_text:str)
      IN:  title:str, components:dict, base_path:str, original_file:str, benefits_text:str
      OUT: None
      SIDE-EFFECT: IO(print, print, print)

    print_complexity_analysis(files:list, base_path:str)
      IN:  files:list, base_path:str
      OUT: None
      SIDE-EFFECT: IO(print, print, print)

    count_complexity(file_path:str) → dict
      IN:  file_path:str
      OUT: dict
      SIDE-EFFECT: IO(open, f.readlines)

  Pipeline: Core
    main()
      IN:  ()
      OUT: None

    create_validation_main(title:str, components:dict, base_path:str, original_file:str, benefits_bullet:str)
      IN:  title:str, components:dict, base_path:str, original_file:str, benefits_bullet:str
      OUT: None

    run_validation_main(title:str, components:dict, base_path:str, original_file:str, benefits_bullet:str)
      IN:  title:str, components:dict, base_path:str, original_file:str, benefits_bullet:str
      OUT: None

    run_validation(title:str, components:dict, base_path:str, original_file:str, benefits_text:str)
      IN:  title:str, components:dict, base_path:str, original_file:str, benefits_text:str
      OUT: None
      SIDE-EFFECT: IO(print, print, print)

    print_complexity_analysis(files:list, base_path:str)
      IN:  files:list, base_path:str
      OUT: None
      SIDE-EFFECT: IO(print, print, print)

    count_complexity(file_path:str) → dict
      IN:  file_path:str
      OUT: dict
      SIDE-EFFECT: IO(open, f.readlines)

  Pipeline: Core
    main()
      IN:  ()
      OUT: None

    create_validation_main(title:str, components:dict, base_path:str, original_file:str, benefits_bullet:str)
      IN:  title:str, components:dict, base_path:str, original_file:str, benefits_bullet:str
      OUT: None

    run_validation_main(title:str, components:dict, base_path:str, original_file:str, benefits_bullet:str)
      IN:  title:str, components:dict, base_path:str, original_file:str, benefits_bullet:str
      OUT: None

    run_validation(title:str, components:dict, base_path:str, original_file:str, benefits_text:str)
      IN:  title:str, components:dict, base_path:str, original_file:str, benefits_text:str
      OUT: None
      SIDE-EFFECT: IO(print, print, print)

    print_complexity_analysis(files:list, base_path:str)
      IN:  files:list, base_path:str
      OUT: None
      SIDE-EFFECT: IO(print, print, print)

    count_complexity(file_path:str) → dict
      IN:  file_path:str
      OUT: dict
      SIDE-EFFECT: IO(open, f.readlines)

  Pipeline: Core
    main()
      IN:  ()
      OUT: None

    create_validation_main(title:str, components:dict, base_path:str, original_file:str, benefits_bullet:str)
      IN:  title:str, components:dict, base_path:str, original_file:str, benefits_bullet:str
      OUT: None

    run_validation_main(title:str, components:dict, base_path:str, original_file:str, benefits_bullet:str)
      IN:  title:str, components:dict, base_path:str, original_file:str, benefits_bullet:str
      OUT: None

    run_validation(title:str, components:dict, base_path:str, original_file:str, benefits_text:str)
      IN:  title:str, components:dict, base_path:str, original_file:str, benefits_text:str
      OUT: None
      SIDE-EFFECT: IO(print, print, print)

    print_complexity_analysis(files:list, base_path:str)
      IN:  files:list, base_path:str
      OUT: None
      SIDE-EFFECT: IO(print, print, print)

    count_complexity(file_path:str) → dict
      IN:  file_path:str
      OUT: dict
      SIDE-EFFECT: IO(open, f.readlines)

  Pipeline: Core
    main()
      IN:  ()
      OUT: None

    create_validation_main(title:str, components:dict, base_path:str, original_file:str, benefits_bullet:str)
      IN:  title:str, components:dict, base_path:str, original_file:str, benefits_bullet:str
      OUT: None

    run_validation_main(title:str, components:dict, base_path:str, original_file:str, benefits_bullet:str)
      IN:  title:str, components:dict, base_path:str, original_file:str, benefits_bullet:str
      OUT: None

    run_validation(title:str, components:dict, base_path:str, original_file:str, benefits_text:str)
      IN:  title:str, components:dict, base_path:str, original_file:str, benefits_text:str
      OUT: None
      SIDE-EFFECT: IO(print, print, print)

    print_complexity_analysis(files:list, base_path:str)
      IN:  files:list, base_path:str
      OUT: None
      SIDE-EFFECT: IO(print, print, print)

    count_complexity(file_path:str) → dict
      IN:  file_path:str
      OUT: dict
      SIDE-EFFECT: IO(open, f.readlines)

  Pipeline: Src
    create_project_ticket(project_id:str, req:dict[str, Any]) → dict[str, Any]
      IN:  project_id:str, req:dict[str, Any]
      OUT: dict[str, Any]

    create_ticket(task:str, title:str, project_id:str | None, description:str, status:str, priority:str, type:str, sprint_id:str, milestone_id:str, tags:list[str], files:list[str], estimated_hours:float, tool:str | None)
      IN:  task:str, title:str, project_id:str | None, description:str, status:str, priority:str, type:str, sprint_id:str, milestone_id:str, tags:list[str], files:list[str], estimated_hours:float, tool:str | None
      OUT: None
      SMELL: CC=17 → split

    _default_project_dir(project_id:str | None) → str
      IN:  project_id:str | None
      OUT: str

    _get_registry()
      IN:  ()
      OUT: None
      SIDE-EFFECT: global(_registry)

    get_settings() → Settings
      IN:  ()
      OUT: Settings
      SIDE-EFFECT: global(_settings)

    get_singleton(instance_var:T | None, instance_class:Type[T]) → T
      IN:  instance_var:T | None, instance_class:Type[T]
      OUT: T


DATA_TYPES (by cross-function usage) [789 annotated, 66 inferred / 1933 functions]:
  str                  consumed:458 produced:75   !! HUB-TYPE → split interface
  dict[str, Any]       consumed:36  produced:121  !! HUB-TYPE → split interface
  str | None           consumed:114 produced:14   !! HUB-TYPE → split interface
  bool                 consumed:18  produced:41   !! HUB-TYPE → split interface
  int                  consumed:51  produced:4    !! HUB-TYPE → split interface
  click.Context        consumed:52  produced:0    !! HUB-TYPE → split interface
  AnalysisResult       consumed:5   produced:43 
  dict                 consumed:30  produced:18   !! HUB-TYPE → split interface
  list[str]            consumed:20  produced:21   !! HUB-TYPE → split interface
  float                consumed:27  produced:3    !! HUB-TYPE → split interface
  Path                 consumed:29  produced:1    !! HUB-TYPE → split interface
  list[Ticket]         consumed:10  produced:14   !! HUB-TYPE → split interface
  Path | None          consumed:9   produced:8  
  list[dict]           consumed:8   produced:9  
  VMConfig             consumed:16  produced:1    !! HUB-TYPE → split interface
  list[str] | None     consumed:13  produced:0    !! HUB-TYPE → split interface
  CloneBoxResult       consumed:0   produced:11   output-heavy
  Ticket               consumed:8   produced:3  
  list                 consumed:10  produced:0    !! HUB-TYPE → split interface
  dict[str, str]       consumed:5   produced:5  

  HUB TYPES (consumed ≥10):
    str → 458 consumers → split into:
      - (analyze consumers to suggest sub-interfaces)
    dict[str, Any] → 36 consumers → split into:
      - (analyze consumers to suggest sub-interfaces)
    str | None → 114 consumers → split into:
      - (analyze consumers to suggest sub-interfaces)
    bool → 18 consumers → split into:
      - (analyze consumers to suggest sub-interfaces)
    int → 51 consumers → split into:
      - (analyze consumers to suggest sub-interfaces)
    click.Context → 52 consumers → split into:
      - (analyze consumers to suggest sub-interfaces)
    dict → 30 consumers → split into:
      - replace with typed alternatives (dataclass/TypedDict)
    list[str] → 20 consumers → split into:
      - (analyze consumers to suggest sub-interfaces)
    float → 27 consumers → split into:
      - (analyze consumers to suggest sub-interfaces)
    Path → 29 consumers → split into:
      - (analyze consumers to suggest sub-interfaces)
    list[Ticket] → 10 consumers → split into:
      - (analyze consumers to suggest sub-interfaces)
    VMConfig → 16 consumers → split into:
      - (analyze consumers to suggest sub-interfaces)
    list[str] | None → 13 consumers → split into:
      - (analyze consumers to suggest sub-interfaces)
    list → 10 consumers → split into:
      - (analyze consumers to suggest sub-interfaces)

SIDE_EFFECTS:
  IO:        main, install_voice_deps, main, validate_jsx_component, count_complexity, print_validation_header, print_component_validation, print_complexity_analysis, print_class_validation, print_summary_footer
  Cache:     ct, get, post, put, del, stored_list, r, apiCall, r, _callLLM
  Mutation:  SQLiteNamespaceStore.__init__, _make_args, get_settings, list_providers, cost_detailed, _tickets, export_tickets, shared_accounts, shared_vms, Environment._vm_target_label
  Pure:      main, main, main, check_voice_deps, main, create_validation_main, main, run_validation_main, main, cli

  PIPELINE PURITY:
    Src             ███░ 75% pure
    Src             ███░ 85% pure
    Src             ██░░ 71% pure
    Src             ██░░ 71% pure
    Src             ███░ 85% pure
    Core            ██░░ 50% pure
    Core            ██░░ 50% pure
    Core            ██░░ 50% pure
    Core            ██░░ 50% pure
    Core            ██░░ 50% pure
    Core            ██░░ 50% pure
    Src             ██░░ 66% pure
