diff --git a/.planfile/sprints/current.yaml b/.planfile/sprints/current.yaml
index ddc0668..4b338b3 100644
--- a/.planfile/sprints/current.yaml
+++ b/.planfile/sprints/current.yaml
@@ -360,6 +360,13 @@ sprint:
- code2llm
- code-smell
- data-clump
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
metadata:
deduplication_key: PLF-088
name: 'Address code smell: Data Clump: body, repo_path, title'
@@ -477,6 +484,13 @@ sprint:
- code2llm
- code-smell
- god-function
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
metadata:
deduplication_key: PLF-089
name: 'Address code smell: God Function: _calculate_complexity'
@@ -592,6 +606,13 @@ sprint:
- code2llm
- code-smell
- god-function
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
metadata:
deduplication_key: PLF-090
name: 'Address code smell: God Function: _calculate_impact'
@@ -707,6 +728,13 @@ sprint:
- code2llm
- code-smell
- god-function
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
metadata:
deduplication_key: PLF-091
name: 'Address code smell: God Function: _load_config'
@@ -822,6 +850,13 @@ sprint:
- code2llm
- code-smell
- god-function
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
metadata:
deduplication_key: PLF-092
name: 'Address code smell: God Function: analyze_python_imports'
@@ -937,6 +972,13 @@ sprint:
- code2llm
- code-smell
- god-function
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
metadata:
deduplication_key: PLF-093
name: 'Address code smell: God Function: apply_tags'
@@ -1052,6 +1094,13 @@ sprint:
- code2llm
- code-smell
- god-function
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
metadata:
deduplication_key: PLF-094
name: 'Address code smell: God Function: build_report_header'
@@ -1173,6 +1222,13 @@ sprint:
- code2llm
- code-smell
- data-clump
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
metadata:
deduplication_key: PLF-109
name: 'Address code smell: Data Clump: title, repo_path, body'
@@ -1296,6 +1352,13 @@ sprint:
- code2llm
- code-smell
- data-clump
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
metadata:
deduplication_key: PLF-118
name: 'Address code smell: Data Clump: repo_path, title, body'
@@ -1413,6 +1476,13 @@ sprint:
- code2llm
- refactor
- complexity
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
metadata:
deduplication_key: PLF-119
name: 'Reduce cyclomatic complexity: src.tagi.utils.inspect_helpers.resolve_filtered_changes
@@ -1528,6 +1598,13 @@ sprint:
- code2llm
- code-smell
- god-function
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
metadata:
deduplication_key: PLF-120
name: 'Address code smell: God Function: calculate_risk_score'
@@ -1643,6 +1720,13 @@ sprint:
- code2llm
- code-smell
- god-function
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
metadata:
deduplication_key: PLF-126
name: 'Address code smell: God Function: group_by_branch'
@@ -1758,6 +1842,13 @@ sprint:
- code2llm
- code-smell
- god-function
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
metadata:
deduplication_key: PLF-127
name: 'Address code smell: God Function: hooks_command'
@@ -1873,6 +1964,13 @@ sprint:
- code2llm
- code-smell
- god-function
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
metadata:
deduplication_key: PLF-128
name: 'Address code smell: God Function: inspect_command'
@@ -1988,6 +2086,13 @@ sprint:
- code2llm
- code-smell
- god-function
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
metadata:
deduplication_key: PLF-129
name: 'Address code smell: God Function: preview_changes'
@@ -2095,6 +2200,13 @@ sprint:
- refactor
- scan
- complexity
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
metadata:
deduplication_key: PLF-131
name: 'Reduce cyclomatic complexity: resolve_filtered_changes (CC=17, limit=15)'
@@ -2184,6 +2296,13 @@ sprint:
- code2llm
- refactor
- scan
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
metadata:
deduplication_key: PLF-132
name: 'code2llm refactor: split 1 high-CC methods'
@@ -2285,6 +2404,13 @@ sprint:
- 'priority: normal'
- code-smell
- god-function
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
metadata:
deduplication_key: PLF-138
name: 'Address code smell: God Function: build_statistics_section'
@@ -2406,6 +2532,13 @@ sprint:
- 'priority: normal'
- code-smell
- god-function
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
metadata:
deduplication_key: PLF-139
name: 'Address code smell: God Function: build_tag_distribution_section'
@@ -2524,6 +2657,13 @@ sprint:
- 'priority: normal'
- code-smell
- god-function
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
metadata:
deduplication_key: PLF-140
name: 'Address code smell: God Function: display_statistics_table'
@@ -2577,126 +2717,6 @@ sprint:
key: semcod/tagi#145
url: https://github.com/semcod/tagi/issues/145
updated_at: '2026-09-18T20:31:21.515076+00:00'
- PLF-141:
- assignee: null
- backend: github
- blocked_by: []
- blocks: []
- created_at: '2026-09-18T20:46:53.090400+00:00'
- description: '
-
- code2llm reports `Shotgun Surgery: result` in `src/tagi/scanner/diff.py:20`.
-
-
- Mutation of variable ''result'' spans 24 functions. Changing this logic requires
- work in many places.
-
-
- Make the smallest refactor that removes the smell and run local tests.'
- execution:
- attempt: 0
- max_attempts: 1
- queue: default
- state: ready
- executor:
- kind: human
- mode: interactive
- external_id: '147'
- files:
- - src/tagi/scanner/diff.py
- history:
- - action: created
- message: 'code2llm reports `Shotgun Surgery: result` in `src/tagi/scanner/diff.py:20`.
-
-
- Mutation of variable ''result'' spans 24 functions. Changing this logic
- requires work in many places.
-
-
- Make the smallest refactor that removes the smell and run local tests.'
- source: koru task
- timestamp: '2026-09-18T20:46:53.090400+00:00'
- id: PLF-141
- inputs:
- api_headers: {}
- api_method: GET
- api_timeout_seconds: 30.0
- env_keys: []
- prompt: 'code2llm reports `Shotgun Surgery: result` in `src/tagi/scanner/diff.py:20`.
-
-
- Mutation of variable ''result'' spans 24 functions. Changing this logic
- requires work in many places.
-
-
- Make the smallest refactor that removes the smell and run local tests.'
- integration:
- - github
- labels:
- - planfile
- - managed
- - koru
- - nl-task
- - llm-ready
- - priority-high
- - 'priority: high'
- - code2llm
- - code-smell
- - shotgun-surgery
- metadata:
- deduplication_key: PLF-141
- name: 'Address code smell: Shotgun Surgery: result'
- outputs:
- artifacts: []
- notes: []
- priority: high
- source:
- context:
- dedupe_key: 'code2llm:smell:shotgun_surgery:src/tagi/scanner/diff.py:20:Shotgun
- Surgery: result'
- evidence:
- artifact:
- mtime_ns: 1789764409471628814
- path: project/analysis.toon.yaml
- sha256: 8272c84ad525516fbd4040cd83b4fb110a3f4e91aa510378427c65686d9f3018
- size_bytes: 10424
- files:
- - mtime_ns: 1779802548044288725
- path: src/tagi/scanner/diff.py
- sha256: 5c96c6b90833c3d6205e40b53b402d2b1eca555c135ff8bbd9cd94f8931716f2
- size_bytes: 708
- kind: code2llm_discovery
- planfile_tickets:
- mtime_ns: 1789764409534879854
- path: project/planfile-tickets.yaml
- sha256: e229a798269d410a9ccbb63568a783f63de2465f87ad7c4d3acd2a5c0b1ec43a
- size_bytes: 16701
- regenerate_command: code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project
- --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source
- koru-project-discovery --planfile-sprint current --planfile-project
- /home/tom/github/semcod/tagi --planfile-limit 20
- schema: koru.ticket_evidence.v1
- staleness_check: Regenerate artifacts and compare artifact.sha256 / files[].sha256
- before assuming this ticket is still current.
- input: 'code2llm reports `Shotgun Surgery: result` in `src/tagi/scanner/diff.py:20`.
-
-
- Mutation of variable ''result'' spans 24 functions. Changing this logic
- requires work in many places.
-
-
- Make the smallest refactor that removes the smell and run local tests.'
- signal: code2llm_smell_shotgun_surgery
- timestamp: '2026-09-18T20:46:53.090400+00:00'
- tool: koru-project-discovery
- sprint: current
- status: open
- sync:
- github:
- id: '147'
- key: semcod/tagi#147
- url: https://github.com/semcod/tagi/issues/147
- updated_at: '2026-09-18T20:46:53.090400+00:00'
PLF-142:
assignee: null
backend: github
@@ -2766,6 +2786,13 @@ sprint:
- 'priority: normal'
- code-smell
- data-clump
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
metadata:
deduplication_key: PLF-142
name: 'Address code smell: Data Clump: repo_path, body, title'
@@ -2884,6 +2911,13 @@ sprint:
- 'priority: normal'
- code-smell
- god-function
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
metadata:
deduplication_key: PLF-143
name: 'Address code smell: God Function: group_changes'
@@ -3006,6 +3040,13 @@ sprint:
- 'priority: normal'
- code-smell
- data-clump
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
metadata:
deduplication_key: PLF-145
name: 'Address code smell: Data Clump: body, title, repo_path'
@@ -3061,253 +3102,13 @@ sprint:
key: semcod/tagi#152
url: https://github.com/semcod/tagi/issues/152
updated_at: '2026-09-18T21:51:29.650993+00:00'
- PLF-146:
+ PLF-149:
assignee: null
backend: github
blocked_by: []
blocks: []
- created_at: '2026-09-19T06:26:13.380402+00:00'
- description: '
-
- code2llm reports `Shotgun Surgery: path_lower` in `src/tagi/heuristics/metrics.py:46`.
-
-
- Mutation of variable ''path_lower'' spans 8 functions. Changing this logic
- requires work in many places.
-
-
- Make the smallest refactor that removes the smell and run local tests.'
- execution:
- attempt: 0
- max_attempts: 1
- queue: default
- state: ready
- executor:
- kind: human
- mode: interactive
- external_id: '153'
- files:
- - src/tagi/heuristics/metrics.py
- history:
- - action: created
- message: 'code2llm reports `Shotgun Surgery: path_lower` in `src/tagi/heuristics/metrics.py:46`.
-
-
- Mutation of variable ''path_lower'' spans 8 functions. Changing this logic
- requires work in many places.
-
-
- Make the smallest refactor that removes the smell and run local tests.'
- source: koru task
- timestamp: '2026-09-19T06:26:13.380402+00:00'
- id: PLF-146
- inputs:
- api_headers: {}
- api_method: GET
- api_timeout_seconds: 30.0
- env_keys: []
- prompt: 'code2llm reports `Shotgun Surgery: path_lower` in `src/tagi/heuristics/metrics.py:46`.
-
-
- Mutation of variable ''path_lower'' spans 8 functions. Changing this logic
- requires work in many places.
-
-
- Make the smallest refactor that removes the smell and run local tests.'
- integration:
- - github
- labels:
- - planfile
- - managed
- - koru
- - nl-task
- - llm-ready
- - priority-high
- - 'priority: high'
- - code2llm
- - code-smell
- - shotgun-surgery
- metadata:
- deduplication_key: PLF-146
- name: 'Address code smell: Shotgun Surgery: path_lower'
- outputs:
- artifacts: []
- notes: []
- priority: high
- source:
- context:
- dedupe_key: 'code2llm:smell:shotgun_surgery:src/tagi/heuristics/metrics.py:46:Shotgun
- Surgery: path_lower'
- evidence:
- artifact:
- mtime_ns: 1789799169500661533
- path: project/analysis.toon.yaml
- sha256: e121c107d051daf013a3c36bbcbc8717b86b66089c73a3586f38da06dbdec891
- size_bytes: 10356
- files:
- - mtime_ns: 1779811310790143885
- path: src/tagi/heuristics/metrics.py
- sha256: dcd2cc0255c4f2ee3eee8aaae72af3e54f0aa6a78598d290d61eb44299401b2d
- size_bytes: 6521
- kind: code2llm_discovery
- planfile_tickets:
- mtime_ns: 1789799169537365843
- path: project/planfile-tickets.yaml
- sha256: 1d4adc5d27067e26cec142ccc46490afbb9b85cb5d197c470f6353698b37aceb
- size_bytes: 17914
- regenerate_command: code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project
- --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source
- koru-project-discovery --planfile-sprint current --planfile-project
- /home/tom/github/semcod/tagi --planfile-limit 20
- schema: koru.ticket_evidence.v1
- staleness_check: Regenerate artifacts and compare artifact.sha256 / files[].sha256
- before assuming this ticket is still current.
- input: 'code2llm reports `Shotgun Surgery: path_lower` in `src/tagi/heuristics/metrics.py:46`.
-
-
- Mutation of variable ''path_lower'' spans 8 functions. Changing this logic
- requires work in many places.
-
-
- Make the smallest refactor that removes the smell and run local tests.'
- signal: code2llm_smell_shotgun_surgery
- timestamp: '2026-09-19T06:26:13.380402+00:00'
- tool: koru-project-discovery
- sprint: current
- status: open
- sync:
- github:
- id: '153'
- key: semcod/tagi#153
- url: https://github.com/semcod/tagi/issues/153
- updated_at: '2026-09-19T06:26:13.380402+00:00'
- PLF-147:
- assignee: null
- backend: github
- blocked_by: []
- blocks: []
- created_at: '2026-09-19T06:31:54.694978+00:00'
- description: '
-
- code2llm reports `Shotgun Surgery: tags` in `src/tagi/composer/formats.py:16`.
-
-
- Mutation of variable ''tags'' spans 6 functions. Changing this logic requires
- work in many places.
-
-
- Make the smallest refactor that removes the smell and run local tests.'
- execution:
- attempt: 0
- max_attempts: 1
- queue: default
- state: ready
- executor:
- kind: human
- mode: interactive
- external_id: '154'
- files:
- - src/tagi/composer/formats.py
- history:
- - action: created
- message: 'code2llm reports `Shotgun Surgery: tags` in `src/tagi/composer/formats.py:16`.
-
-
- Mutation of variable ''tags'' spans 6 functions. Changing this logic requires
- work in many places.
-
-
- Make the smallest refactor that removes the smell and run local tests.'
- source: koru task
- timestamp: '2026-09-19T06:31:54.694978+00:00'
- id: PLF-147
- inputs:
- api_headers: {}
- api_method: GET
- api_timeout_seconds: 30.0
- env_keys: []
- prompt: 'code2llm reports `Shotgun Surgery: tags` in `src/tagi/composer/formats.py:16`.
-
-
- Mutation of variable ''tags'' spans 6 functions. Changing this logic requires
- work in many places.
-
-
- Make the smallest refactor that removes the smell and run local tests.'
- integration:
- - github
- labels:
- - planfile
- - managed
- - koru
- - nl-task
- - llm-ready
- - priority-high
- - 'priority: high'
- - code2llm
- - code-smell
- - shotgun-surgery
- metadata:
- deduplication_key: PLF-147
- name: 'Address code smell: Shotgun Surgery: tags'
- outputs:
- artifacts: []
- notes: []
- priority: high
- source:
- context:
- dedupe_key: 'code2llm:smell:shotgun_surgery:src/tagi/composer/formats.py:16:Shotgun
- Surgery: tags'
- evidence:
- artifact:
- mtime_ns: 1789799169500661533
- path: project/analysis.toon.yaml
- sha256: e121c107d051daf013a3c36bbcbc8717b86b66089c73a3586f38da06dbdec891
- size_bytes: 10356
- files:
- - mtime_ns: 1789764358606193196
- path: src/tagi/composer/formats.py
- sha256: f83369fc3a57d03450699627061999b0e07c463e547289218fda64626fb0e6c0
- size_bytes: 3495
- kind: code2llm_discovery
- planfile_tickets:
- mtime_ns: 1789799169537365843
- path: project/planfile-tickets.yaml
- sha256: 1d4adc5d27067e26cec142ccc46490afbb9b85cb5d197c470f6353698b37aceb
- size_bytes: 17914
- regenerate_command: code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project
- --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source
- koru-project-discovery --planfile-sprint current --planfile-project
- /home/tom/github/semcod/tagi --planfile-limit 20
- schema: koru.ticket_evidence.v1
- staleness_check: Regenerate artifacts and compare artifact.sha256 / files[].sha256
- before assuming this ticket is still current.
- input: 'code2llm reports `Shotgun Surgery: tags` in `src/tagi/composer/formats.py:16`.
-
-
- Mutation of variable ''tags'' spans 6 functions. Changing this logic requires
- work in many places.
-
-
- Make the smallest refactor that removes the smell and run local tests.'
- signal: code2llm_smell_shotgun_surgery
- timestamp: '2026-09-19T06:31:54.694978+00:00'
- tool: koru-project-discovery
- sprint: current
- status: open
- sync:
- github:
- id: '154'
- key: semcod/tagi#154
- url: https://github.com/semcod/tagi/issues/154
- updated_at: '2026-09-19T06:31:54.694978+00:00'
- PLF-149:
- assignee: null
- backend: github
- blocked_by: []
- blocks: []
- created_at: '2026-09-19T08:19:14.641869+00:00'
- description: '
+ created_at: '2026-09-19T08:19:14.641869+00:00'
+ description: '
code2llm reports `God Function: publish_command` in `src/tagi/cli/publishing_commands.py:23`.
@@ -3364,6 +3165,13 @@ sprint:
- 'priority: normal'
- code-smell
- god-function
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
metadata:
deduplication_key: PLF-149
name: 'Address code smell: God Function: publish_command'
@@ -3486,6 +3294,13 @@ sprint:
- 'priority: normal'
- code-smell
- data-clump
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
metadata:
deduplication_key: PLF-152
name: 'Address code smell: Data Clump: title, body, repo_path'
@@ -3604,6 +3419,13 @@ sprint:
- 'priority: normal'
- code-smell
- god-function
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
metadata:
deduplication_key: PLF-154
name: 'Address code smell: God Function: scan_repo'
@@ -3723,6 +3545,13 @@ sprint:
- code2llm
- code-smell
- shotgun-surgery
+ - 'priority: high'
+ - 'priority: high'
+ - 'priority: high'
+ - 'priority: high'
+ - 'priority: high'
+ - 'priority: high'
+ - 'priority: high'
metadata:
deduplication_key: PLF-156
name: 'Address code smell: Shotgun Surgery: provider'
@@ -3777,224 +3606,33 @@ sprint:
key: semcod/tagi#169
url: https://github.com/semcod/tagi/issues/169
updated_at: '2026-09-19T11:41:05.586678+00:00'
- PLF-157:
- assignee: null
- backend: github
+ PLF-160:
+ acceptance_criteria: []
blocked_by: []
blocks: []
- created_at: '2026-09-19T12:42:18.834682+00:00'
- description: '
-
- `project/analysis.toon.yaml` flags `inspect_helpers` in LAYERS as a large/hot
- module (121 lines, 0 classes, 6 methods, CC=17). Extract cohesive submodules
- around stable responsibilities and add focused regression tests before broad
- edits.
+ children: []
+ contract_version: planfile.ticket/v1
+ created_at: '2026-09-19T17:29:12.755466Z'
+ description: 'code2llm reports `God Function: _tag_change` in `src/tagi/heuristics/tags.py:22`.
- ---
+ Function ''_tag_change'' is oversized: CC=2, fan-out=9, mutations=9.
- **Strategy Metadata:**
+ Make the smallest refactor that removes the smell and run local tests.
- - planfile_id: PLF-157
- '
- execution:
- attempt: 0
- max_attempts: 1
- queue: default
- state: ready
- executor:
- kind: human
- mode: interactive
- external_id: '172'
+ code2llm-dedupe: code2llm:smell:god_function:src/tagi/heuristics/tags.py:22:God
+ Function: _tag_change'
+ dsl: SODL/1 id=evt_497220cc3af4ef6b44f321c3 event_hash=a649a48467d378efbc3eebe005661ba3d1c88c8e725799f28033db9affdbbb57
+ timestamp=2026-09-19T17%3A29%3A12.755466%2B00%3A00 kind=task source=planfile.ticket
+ ticket_id=PLF-160 actor=koru-scan oql=ticket.create uri=planfile%3A%2F%2Ftickets%2FPLF-160%2Fcommand%2Fcreate
+ mode=apply status=open correlation_id=PLF-160 causation_id=- input_hash=d5a7a2d67eb7957053bde0d4b9463b298a084ab459be7d414caed735bd81f544
+ receipt_ref=- replayable=true data=eyJwYXlsb2FkIjp7ImFjY2VwdGFuY2VfY3JpdGVyaWEiOltdLCJibG9ja2VkX2J5IjpbXSwiYmxvY2tzIjpbXSwiY2hpbGRyZW4iOltdLCJjb250cmFjdF92ZXJzaW9uIjoicGxhbmZpbGUudGlja2V0L3YxIiwiY3JlYXRlZF9hdCI6IjIwMjYtMDktMTlUMTc6Mjk6MTIuNzU1NDY2WiIsImRlc2NyaXB0aW9uIjoiY29kZTJsbG0gcmVwb3J0cyBgR29kIEZ1bmN0aW9uOiBfdGFnX2NoYW5nZWAgaW4gYHNyYy90YWdpL2hldXJpc3RpY3MvdGFncy5weToyMmAuXG5cbkZ1bmN0aW9uICdfdGFnX2NoYW5nZScgaXMgb3ZlcnNpemVkOiBDQz0yLCBmYW4tb3V0PTksIG11dGF0aW9ucz05LlxuXG5NYWtlIHRoZSBzbWFsbGVzdCByZWZhY3RvciB0aGF0IHJlbW92ZXMgdGhlIHNtZWxsIGFuZCBydW4gbG9jYWwgdGVzdHMuXG5cbmNvZGUybGxtLWRlZHVwZTogY29kZTJsbG06c21lbGw6Z29kX2Z1bmN0aW9uOnNyYy90YWdpL2hldXJpc3RpY3MvdGFncy5weToyMjpHb2QgRnVuY3Rpb246IF90YWdfY2hhbmdlIiwiZmlsZXMiOlsic3JjL3RhZ2kvaGV1cmlzdGljcy90YWdzLnB5Il0sImlkIjoiUExGLTE2MCIsImxhYmVscyI6WyJsbG0tcmVhZHkiLCJjb2RlMmxsbSIsImNvZGUtc21lbGwiLCJnb2QtZnVuY3Rpb24iXSwibmFtZSI6IkFkZHJlc3MgY29kZSBzbWVsbDogR29kIEZ1bmN0aW9uOiBfdGFnX2NoYW5nZSIsInByaW9yaXR5Ijoibm9ybWFsIiwic291cmNlIjp7ImNvbnRleHQiOnt9LCJ0aW1lc3RhbXAiOiIyMDI2LTA5LTE5VDE3OjI5OjEyLjczMzU2OFoiLCJ0b29sIjoia29ydS1zY2FuIn0sInNwcmludCI6ImN1cnJlbnQiLCJzdGF0dXMiOiJvcGVuIiwic3luYyI6e30sInVwZGF0ZWRfYXQiOiIyMDI2LTA5LTE5VDE3OjI5OjEyLjc1NTQ3M1oifX0
files:
- - src/tagi/utils/inspect_helpers.py
- - project/analysis.toon.yaml
- history:
- - action: created
- message: '`project/analysis.toon.yaml` flags `inspect_helpers` in LAYERS as
- a large/hot module (121 lines, 0 classes, 6 methods, CC=17). Extract cohesive
- submodules around stable responsibilities and add focused regression tests
- before broad edits.'
- source: koru task
- timestamp: '2026-09-19T12:42:18.834682+00:00'
- id: PLF-157
- inputs:
- api_headers: {}
- api_method: GET
- api_timeout_seconds: 30.0
- env_keys: []
- prompt: '`project/analysis.toon.yaml` flags `inspect_helpers` in LAYERS as
- a large/hot module (121 lines, 0 classes, 6 methods, CC=17). Extract cohesive
- submodules around stable responsibilities and add focused regression tests
- before broad edits.'
- integration:
- - github
- labels:
- - planfile
- - managed
- - koru
- - nl-task
- - llm-ready
- - priority-high
- - code2llm
- - architecture
- - large-module
- - refactor
- - scan
- metadata:
- deduplication_key: PLF-157
- name: 'Split large module: inspect_helpers'
- outputs:
- artifacts: []
- notes: []
- priority: high
- source:
- context:
- dedupe_key: koru-scan:code2llm_layer_hotspot:src/tagi/utils/inspect_helpers.py:project/analysis.toon.yaml
- evidence:
- artifact:
- mtime_ns: 1789820718961281621
- path: project/analysis.toon.yaml
- sha256: 28f5e52d781bb3dc5180c4411848287482185ddd7898976d85fe5df0d5cd3580
- size_bytes: 10363
- kind: code2llm_analysis
- regenerate_command: code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project
- --no-chunk --exclude '*.md' --planfile-apply --planfile-source koru-project-discovery
- --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi
- --planfile-limit 20
- schema: koru.ticket_evidence.v1
- staleness_check: Regenerate the artifact and compare artifact.sha256 before
- assuming this ticket still reflects the current code.
- input: '`project/analysis.toon.yaml` flags `inspect_helpers` in LAYERS as
- a large/hot module (121 lines, 0 classes, 6 methods, CC=17). Extract cohesive
- submodules around stable responsibilities and add focused regression tests
- before broad edits.'
- signal: code2llm_layer_hotspot
- timestamp: '2026-09-19T12:42:18.834682+00:00'
- tool: koru-scan
- sprint: current
- status: open
- sync:
- github:
- id: '172'
- key: semcod/tagi#172
- url: https://github.com/semcod/tagi/issues/172
- updated_at: '2026-09-19T12:42:18.834682+00:00'
- PLF-158:
- acceptance_criteria: []
- blocked_by: []
- blocks: []
- children: []
- contract_version: planfile.ticket/v1
- created_at: '2026-09-19T17:29:11.164575Z'
- description: 'code2llm reports `Shotgun Surgery: path_lower` in `src/tagi/heuristics/metrics.py:33`.
-
-
- Mutation of variable ''path_lower'' spans 8 functions. Changing this logic
- requires work in many places.
-
-
- Make the smallest refactor that removes the smell and run local tests.
-
-
- code2llm-dedupe: code2llm:smell:shotgun_surgery:src/tagi/heuristics/metrics.py:33:Shotgun
- Surgery: path_lower'
- dsl: SODL/1 id=evt_1a6aaf76c4ba5b63b56256bc event_hash=7d65339256becf3c499f5189e7c46b90588d4a52675bacd47945b39cbfdb3882
- timestamp=2026-09-19T17%3A29%3A11.164575%2B00%3A00 kind=task source=planfile.ticket
- ticket_id=PLF-158 actor=koru-scan oql=ticket.create uri=planfile%3A%2F%2Ftickets%2FPLF-158%2Fcommand%2Fcreate
- mode=apply status=open correlation_id=PLF-158 causation_id=- input_hash=9ac39162431fbacf71cb140d6f58f295cc0f944ad37b22cbe0a4b4d07a17d58c
- receipt_ref=- replayable=true data=eyJwYXlsb2FkIjp7ImFjY2VwdGFuY2VfY3JpdGVyaWEiOltdLCJibG9ja2VkX2J5IjpbXSwiYmxvY2tzIjpbXSwiY2hpbGRyZW4iOltdLCJjb250cmFjdF92ZXJzaW9uIjoicGxhbmZpbGUudGlja2V0L3YxIiwiY3JlYXRlZF9hdCI6IjIwMjYtMDktMTlUMTc6Mjk6MTEuMTY0NTc1WiIsImRlc2NyaXB0aW9uIjoiY29kZTJsbG0gcmVwb3J0cyBgU2hvdGd1biBTdXJnZXJ5OiBwYXRoX2xvd2VyYCBpbiBgc3JjL3RhZ2kvaGV1cmlzdGljcy9tZXRyaWNzLnB5OjMzYC5cblxuTXV0YXRpb24gb2YgdmFyaWFibGUgJ3BhdGhfbG93ZXInIHNwYW5zIDggZnVuY3Rpb25zLiBDaGFuZ2luZyB0aGlzIGxvZ2ljIHJlcXVpcmVzIHdvcmsgaW4gbWFueSBwbGFjZXMuXG5cbk1ha2UgdGhlIHNtYWxsZXN0IHJlZmFjdG9yIHRoYXQgcmVtb3ZlcyB0aGUgc21lbGwgYW5kIHJ1biBsb2NhbCB0ZXN0cy5cblxuY29kZTJsbG0tZGVkdXBlOiBjb2RlMmxsbTpzbWVsbDpzaG90Z3VuX3N1cmdlcnk6c3JjL3RhZ2kvaGV1cmlzdGljcy9tZXRyaWNzLnB5OjMzOlNob3RndW4gU3VyZ2VyeTogcGF0aF9sb3dlciIsImZpbGVzIjpbInNyYy90YWdpL2hldXJpc3RpY3MvbWV0cmljcy5weSJdLCJpZCI6IlBMRi0xNTgiLCJsYWJlbHMiOlsibGxtLXJlYWR5IiwiY29kZTJsbG0iLCJjb2RlLXNtZWxsIiwic2hvdGd1bi1zdXJnZXJ5Il0sIm5hbWUiOiJBZGRyZXNzIGNvZGUgc21lbGw6IFNob3RndW4gU3VyZ2VyeTogcGF0aF9sb3dlciIsInByaW9yaXR5IjoiaGlnaCIsInNvdXJjZSI6eyJjb250ZXh0Ijp7fSwidGltZXN0YW1wIjoiMjAyNi0wOS0xOVQxNzoyOToxMS4xNTQ5MzZaIiwidG9vbCI6ImtvcnUtc2NhbiJ9LCJzcHJpbnQiOiJjdXJyZW50Iiwic3RhdHVzIjoib3BlbiIsInN5bmMiOnt9LCJ1cGRhdGVkX2F0IjoiMjAyNi0wOS0xOVQxNzoyOToxMS4xNjQ1NzlaIn19
- files:
- - src/tagi/heuristics/metrics.py
- history: []
- id: PLF-158
- labels:
- - llm-ready
- - code2llm
- - code-smell
- - shotgun-surgery
- name: 'Address code smell: Shotgun Surgery: path_lower'
- priority: high
- source:
- context: {}
- timestamp: '2026-09-19T17:29:11.154936Z'
- tool: koru-scan
- sprint: current
- status: open
- sync: {}
- updated_at: '2026-09-19T17:29:11.164579Z'
- PLF-159:
- acceptance_criteria: []
- blocked_by: []
- blocks: []
- children: []
- contract_version: planfile.ticket/v1
- created_at: '2026-09-19T17:29:11.918031Z'
- description: 'code2llm reports `Shotgun Surgery: tags` in `src/tagi/heuristics/tags.py:48`.
-
-
- Mutation of variable ''tags'' spans 5 functions. Changing this logic requires
- work in many places.
-
-
- Make the smallest refactor that removes the smell and run local tests.
-
-
- code2llm-dedupe: code2llm:smell:shotgun_surgery:src/tagi/heuristics/tags.py:48:Shotgun
- Surgery: tags'
- dsl: SODL/1 id=evt_83500b9a1eed7d17acb5d9fb event_hash=0742737296da2c07434ecfea4dcb1c8cb6ae655a488c87cdba0103bd8a11bb02
- timestamp=2026-09-19T17%3A29%3A11.918031%2B00%3A00 kind=task source=planfile.ticket
- ticket_id=PLF-159 actor=koru-scan oql=ticket.create uri=planfile%3A%2F%2Ftickets%2FPLF-159%2Fcommand%2Fcreate
- mode=apply status=open correlation_id=PLF-159 causation_id=- input_hash=55fc906af39db774bbbb80466d1102d53e7300ae63a8527729323d5cc7d9d5ec
- receipt_ref=- replayable=true data=eyJwYXlsb2FkIjp7ImFjY2VwdGFuY2VfY3JpdGVyaWEiOltdLCJibG9ja2VkX2J5IjpbXSwiYmxvY2tzIjpbXSwiY2hpbGRyZW4iOltdLCJjb250cmFjdF92ZXJzaW9uIjoicGxhbmZpbGUudGlja2V0L3YxIiwiY3JlYXRlZF9hdCI6IjIwMjYtMDktMTlUMTc6Mjk6MTEuOTE4MDMxWiIsImRlc2NyaXB0aW9uIjoiY29kZTJsbG0gcmVwb3J0cyBgU2hvdGd1biBTdXJnZXJ5OiB0YWdzYCBpbiBgc3JjL3RhZ2kvaGV1cmlzdGljcy90YWdzLnB5OjQ4YC5cblxuTXV0YXRpb24gb2YgdmFyaWFibGUgJ3RhZ3MnIHNwYW5zIDUgZnVuY3Rpb25zLiBDaGFuZ2luZyB0aGlzIGxvZ2ljIHJlcXVpcmVzIHdvcmsgaW4gbWFueSBwbGFjZXMuXG5cbk1ha2UgdGhlIHNtYWxsZXN0IHJlZmFjdG9yIHRoYXQgcmVtb3ZlcyB0aGUgc21lbGwgYW5kIHJ1biBsb2NhbCB0ZXN0cy5cblxuY29kZTJsbG0tZGVkdXBlOiBjb2RlMmxsbTpzbWVsbDpzaG90Z3VuX3N1cmdlcnk6c3JjL3RhZ2kvaGV1cmlzdGljcy90YWdzLnB5OjQ4OlNob3RndW4gU3VyZ2VyeTogdGFncyIsImZpbGVzIjpbInNyYy90YWdpL2hldXJpc3RpY3MvdGFncy5weSJdLCJpZCI6IlBMRi0xNTkiLCJsYWJlbHMiOlsibGxtLXJlYWR5IiwiY29kZTJsbG0iLCJjb2RlLXNtZWxsIiwic2hvdGd1bi1zdXJnZXJ5Il0sIm5hbWUiOiJBZGRyZXNzIGNvZGUgc21lbGw6IFNob3RndW4gU3VyZ2VyeTogdGFncyIsInByaW9yaXR5IjoiaGlnaCIsInNvdXJjZSI6eyJjb250ZXh0Ijp7fSwidGltZXN0YW1wIjoiMjAyNi0wOS0xOVQxNzoyOToxMS44NDA4MzlaIiwidG9vbCI6ImtvcnUtc2NhbiJ9LCJzcHJpbnQiOiJjdXJyZW50Iiwic3RhdHVzIjoib3BlbiIsInN5bmMiOnt9LCJ1cGRhdGVkX2F0IjoiMjAyNi0wOS0xOVQxNzoyOToxMS45MTgwMzdaIn19
- files:
- - src/tagi/heuristics/tags.py
- history: []
- id: PLF-159
- labels:
- - llm-ready
- - code2llm
- - code-smell
- - shotgun-surgery
- name: 'Address code smell: Shotgun Surgery: tags'
- priority: high
- source:
- context: {}
- timestamp: '2026-09-19T17:29:11.840839Z'
- tool: koru-scan
- sprint: current
- status: open
- sync: {}
- updated_at: '2026-09-19T17:29:11.918037Z'
- PLF-160:
- acceptance_criteria: []
- blocked_by: []
- blocks: []
- children: []
- contract_version: planfile.ticket/v1
- created_at: '2026-09-19T17:29:12.755466Z'
- description: 'code2llm reports `God Function: _tag_change` in `src/tagi/heuristics/tags.py:22`.
-
-
- Function ''_tag_change'' is oversized: CC=2, fan-out=9, mutations=9.
-
-
- Make the smallest refactor that removes the smell and run local tests.
-
-
- code2llm-dedupe: code2llm:smell:god_function:src/tagi/heuristics/tags.py:22:God
- Function: _tag_change'
- dsl: SODL/1 id=evt_497220cc3af4ef6b44f321c3 event_hash=a649a48467d378efbc3eebe005661ba3d1c88c8e725799f28033db9affdbbb57
- timestamp=2026-09-19T17%3A29%3A12.755466%2B00%3A00 kind=task source=planfile.ticket
- ticket_id=PLF-160 actor=koru-scan oql=ticket.create uri=planfile%3A%2F%2Ftickets%2FPLF-160%2Fcommand%2Fcreate
- mode=apply status=open correlation_id=PLF-160 causation_id=- input_hash=d5a7a2d67eb7957053bde0d4b9463b298a084ab459be7d414caed735bd81f544
- receipt_ref=- replayable=true data=eyJwYXlsb2FkIjp7ImFjY2VwdGFuY2VfY3JpdGVyaWEiOltdLCJibG9ja2VkX2J5IjpbXSwiYmxvY2tzIjpbXSwiY2hpbGRyZW4iOltdLCJjb250cmFjdF92ZXJzaW9uIjoicGxhbmZpbGUudGlja2V0L3YxIiwiY3JlYXRlZF9hdCI6IjIwMjYtMDktMTlUMTc6Mjk6MTIuNzU1NDY2WiIsImRlc2NyaXB0aW9uIjoiY29kZTJsbG0gcmVwb3J0cyBgR29kIEZ1bmN0aW9uOiBfdGFnX2NoYW5nZWAgaW4gYHNyYy90YWdpL2hldXJpc3RpY3MvdGFncy5weToyMmAuXG5cbkZ1bmN0aW9uICdfdGFnX2NoYW5nZScgaXMgb3ZlcnNpemVkOiBDQz0yLCBmYW4tb3V0PTksIG11dGF0aW9ucz05LlxuXG5NYWtlIHRoZSBzbWFsbGVzdCByZWZhY3RvciB0aGF0IHJlbW92ZXMgdGhlIHNtZWxsIGFuZCBydW4gbG9jYWwgdGVzdHMuXG5cbmNvZGUybGxtLWRlZHVwZTogY29kZTJsbG06c21lbGw6Z29kX2Z1bmN0aW9uOnNyYy90YWdpL2hldXJpc3RpY3MvdGFncy5weToyMjpHb2QgRnVuY3Rpb246IF90YWdfY2hhbmdlIiwiZmlsZXMiOlsic3JjL3RhZ2kvaGV1cmlzdGljcy90YWdzLnB5Il0sImlkIjoiUExGLTE2MCIsImxhYmVscyI6WyJsbG0tcmVhZHkiLCJjb2RlMmxsbSIsImNvZGUtc21lbGwiLCJnb2QtZnVuY3Rpb24iXSwibmFtZSI6IkFkZHJlc3MgY29kZSBzbWVsbDogR29kIEZ1bmN0aW9uOiBfdGFnX2NoYW5nZSIsInByaW9yaXR5Ijoibm9ybWFsIiwic291cmNlIjp7ImNvbnRleHQiOnt9LCJ0aW1lc3RhbXAiOiIyMDI2LTA5LTE5VDE3OjI5OjEyLjczMzU2OFoiLCJ0b29sIjoia29ydS1zY2FuIn0sInNwcmludCI6ImN1cnJlbnQiLCJzdGF0dXMiOiJvcGVuIiwic3luYyI6e30sInVwZGF0ZWRfYXQiOiIyMDI2LTA5LTE5VDE3OjI5OjEyLjc1NTQ3M1oifX0
- files:
- - src/tagi/heuristics/tags.py
- history: []
- id: PLF-160
+ - src/tagi/heuristics/tags.py
+ history: []
+ id: PLF-160
labels:
- llm-ready
- code2llm
@@ -4388,3 +4026,619 @@ sprint:
status: open
sync: {}
updated_at: '2026-09-19T17:29:19.641514Z'
+ PLF-171:
+ backend: github
+ blocked_by: []
+ blocks: []
+ created_at: '2026-09-19T17:43:09.548402+00:00'
+ description: 'code2llm reports `God Function: _tag_change` in `src/tagi/heuristics/tags.py:22`.
+
+
+ Function ''_tag_change'' is oversized: CC=2, fan-out=9, mutations=9.
+
+
+ Make the smallest refactor that removes the smell and run local tests.'
+ execution:
+ attempt: 0
+ max_attempts: 1
+ queue: default
+ state: ready
+ executor:
+ kind: human
+ mode: interactive
+ external_id: '187'
+ files:
+ - src/tagi/heuristics/tags.py
+ history:
+ - action: created
+ message: 'code2llm reports `God Function: _tag_change` in `src/tagi/heuristics/tags.py:22`.
+
+
+ Function ''_tag_change'' is oversized: CC=2, fan-out=9, mutations=9.
+
+
+ Make the smallest refactor that removes the smell and run local tests.'
+ source: koru task
+ timestamp: '2026-09-19T17:43:09.548402+00:00'
+ id: PLF-171
+ inputs:
+ api_headers: {}
+ api_method: GET
+ api_timeout_seconds: 30.0
+ env_keys: []
+ prompt: 'code2llm reports `God Function: _tag_change` in `src/tagi/heuristics/tags.py:22`.
+
+
+ Function ''_tag_change'' is oversized: CC=2, fan-out=9, mutations=9.
+
+
+ Make the smallest refactor that removes the smell and run local tests.'
+ integration:
+ - github
+ labels:
+ - koru
+ - nl-task
+ - llm-ready
+ - code2llm
+ - code-smell
+ - god-function
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ name: 'Address code smell: God Function: _tag_change'
+ outputs:
+ artifacts: []
+ notes: []
+ priority: normal
+ source:
+ context:
+ dedupe_key: 'code2llm:smell:god_function:src/tagi/heuristics/tags.py:22:God
+ Function: _tag_change'
+ evidence:
+ artifact:
+ mtime_ns: 1789838949904540410
+ path: project/analysis.toon.yaml
+ sha256: a20fa29c7d952fbcda7207db98cbe6042565fe78c7e14633a3065728be7842c6
+ size_bytes: 9689
+ files:
+ - mtime_ns: 1789830262593470416
+ path: src/tagi/heuristics/tags.py
+ sha256: a4f450ad5caf03cfd4f6b956809d7dfb0dabd3f6f7da91aad7e2202ac7576f69
+ size_bytes: 3411
+ kind: code2llm_discovery
+ planfile_tickets:
+ mtime_ns: 1789838959872519685
+ path: project/planfile-tickets.yaml
+ sha256: b5faa6f4e5d625a802e28855d7954530f8835c2a1c4377ec4676a9e843e17d04
+ size_bytes: 8004
+ regenerate_command: code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project
+ --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source
+ koru-project-discovery --planfile-sprint current --planfile-project
+ /home/tom/github/semcod/tagi --planfile-limit 20
+ schema: koru.ticket_evidence.v1
+ staleness_check: Regenerate artifacts and compare artifact.sha256 / files[].sha256
+ before assuming this ticket is still current.
+ input: 'code2llm reports `God Function: _tag_change` in `src/tagi/heuristics/tags.py:22`.
+
+
+ Function ''_tag_change'' is oversized: CC=2, fan-out=9, mutations=9.
+
+
+ Make the smallest refactor that removes the smell and run local tests.'
+ signal: code2llm_smell_god_function
+ timestamp: '2026-09-19T17:43:09.548402+00:00'
+ tool: koru-project-discovery
+ sprint: current
+ status: open
+ sync:
+ github:
+ id: '187'
+ key: semcod/tagi#187
+ url: https://github.com/semcod/tagi/issues/187
+ updated_at: '2026-09-19T17:43:09.548402+00:00'
+ PLF-172:
+ backend: github
+ blocked_by: []
+ blocks: []
+ created_at: '2026-09-19T17:53:12.889023+00:00'
+ description: 'code2llm reports `God Function: send_command` in `src/tagi/cli/git_operations.py:90`.
+
+
+ Function ''send_command'' is oversized: CC=7, fan-out=13, mutations=9.
+
+
+ Make the smallest refactor that removes the smell and run local tests.'
+ execution:
+ attempt: 0
+ max_attempts: 1
+ queue: default
+ state: ready
+ executor:
+ kind: human
+ mode: interactive
+ external_id: '188'
+ files:
+ - src/tagi/cli/git_operations.py
+ history:
+ - action: created
+ message: 'code2llm reports `God Function: send_command` in `src/tagi/cli/git_operations.py:90`.
+
+
+ Function ''send_command'' is oversized: CC=7, fan-out=13, mutations=9.
+
+
+ Make the smallest refactor that removes the smell and run local tests.'
+ source: koru task
+ timestamp: '2026-09-19T17:53:12.889023+00:00'
+ id: PLF-172
+ inputs:
+ api_headers: {}
+ api_method: GET
+ api_timeout_seconds: 30.0
+ env_keys: []
+ prompt: 'code2llm reports `God Function: send_command` in `src/tagi/cli/git_operations.py:90`.
+
+
+ Function ''send_command'' is oversized: CC=7, fan-out=13, mutations=9.
+
+
+ Make the smallest refactor that removes the smell and run local tests.'
+ integration:
+ - github
+ labels:
+ - koru
+ - nl-task
+ - llm-ready
+ - code2llm
+ - code-smell
+ - god-function
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ name: 'Address code smell: God Function: send_command'
+ outputs:
+ artifacts: []
+ notes: []
+ priority: normal
+ source:
+ context:
+ dedupe_key: 'code2llm:smell:god_function:src/tagi/cli/git_operations.py:90:God
+ Function: send_command'
+ evidence:
+ artifact:
+ mtime_ns: 1789838949904540410
+ path: project/analysis.toon.yaml
+ sha256: a20fa29c7d952fbcda7207db98cbe6042565fe78c7e14633a3065728be7842c6
+ size_bytes: 9689
+ files:
+ - mtime_ns: 1789824641491087908
+ path: src/tagi/cli/git_operations.py
+ sha256: 049eb6ec4314014115e3471ce64f037758ab685f40cb9896fe129daf8618d861
+ size_bytes: 6307
+ kind: code2llm_discovery
+ planfile_tickets:
+ mtime_ns: 1789838959872519685
+ path: project/planfile-tickets.yaml
+ sha256: b5faa6f4e5d625a802e28855d7954530f8835c2a1c4377ec4676a9e843e17d04
+ size_bytes: 8004
+ regenerate_command: code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project
+ --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source
+ koru-project-discovery --planfile-sprint current --planfile-project
+ /home/tom/github/semcod/tagi --planfile-limit 20
+ schema: koru.ticket_evidence.v1
+ staleness_check: Regenerate artifacts and compare artifact.sha256 / files[].sha256
+ before assuming this ticket is still current.
+ input: 'code2llm reports `God Function: send_command` in `src/tagi/cli/git_operations.py:90`.
+
+
+ Function ''send_command'' is oversized: CC=7, fan-out=13, mutations=9.
+
+
+ Make the smallest refactor that removes the smell and run local tests.'
+ signal: code2llm_smell_god_function
+ timestamp: '2026-09-19T17:53:12.889023+00:00'
+ tool: koru-project-discovery
+ sprint: current
+ status: open
+ sync:
+ github:
+ id: '188'
+ key: semcod/tagi#188
+ url: https://github.com/semcod/tagi/issues/188
+ updated_at: '2026-09-19T17:53:12.889023+00:00'
+ PLF-173:
+ backend: github
+ blocked_by: []
+ blocks: []
+ created_at: '2026-09-19T18:16:24.472046+00:00'
+ description: 'code2llm reports `God Function: setup_logger` in `src/tagi/utils/logger.py:9`.
+
+
+ Function ''setup_logger'' is oversized: CC=4, fan-out=13, mutations=14.
+
+
+ Make the smallest refactor that removes the smell and run local tests.'
+ execution:
+ attempt: 0
+ max_attempts: 1
+ queue: default
+ state: ready
+ executor:
+ kind: human
+ mode: interactive
+ external_id: '189'
+ files:
+ - src/tagi/utils/logger.py
+ history:
+ - action: created
+ message: 'code2llm reports `God Function: setup_logger` in `src/tagi/utils/logger.py:9`.
+
+
+ Function ''setup_logger'' is oversized: CC=4, fan-out=13, mutations=14.
+
+
+ Make the smallest refactor that removes the smell and run local tests.'
+ source: koru task
+ timestamp: '2026-09-19T18:16:24.472046+00:00'
+ id: PLF-173
+ inputs:
+ api_headers: {}
+ api_method: GET
+ api_timeout_seconds: 30.0
+ env_keys: []
+ prompt: 'code2llm reports `God Function: setup_logger` in `src/tagi/utils/logger.py:9`.
+
+
+ Function ''setup_logger'' is oversized: CC=4, fan-out=13, mutations=14.
+
+
+ Make the smallest refactor that removes the smell and run local tests.'
+ integration:
+ - github
+ labels:
+ - koru
+ - nl-task
+ - llm-ready
+ - code2llm
+ - code-smell
+ - god-function
+ - 'priority: normal'
+ - 'priority: normal'
+ - 'priority: normal'
+ name: 'Address code smell: God Function: setup_logger'
+ outputs:
+ artifacts: []
+ notes: []
+ priority: normal
+ source:
+ context:
+ dedupe_key: 'code2llm:smell:god_function:src/tagi/utils/logger.py:9:God
+ Function: setup_logger'
+ evidence:
+ artifact:
+ mtime_ns: 1789838949904540410
+ path: project/analysis.toon.yaml
+ sha256: a20fa29c7d952fbcda7207db98cbe6042565fe78c7e14633a3065728be7842c6
+ size_bytes: 9689
+ files:
+ - mtime_ns: 1779809465287675064
+ path: src/tagi/utils/logger.py
+ sha256: 25d7171aee4d351bc65d315acfa6d09d6e91491346c2ac3cca945577d7397c89
+ size_bytes: 1747
+ kind: code2llm_discovery
+ planfile_tickets:
+ mtime_ns: 1789838959872519685
+ path: project/planfile-tickets.yaml
+ sha256: b5faa6f4e5d625a802e28855d7954530f8835c2a1c4377ec4676a9e843e17d04
+ size_bytes: 8004
+ regenerate_command: code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project
+ --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source
+ koru-project-discovery --planfile-sprint current --planfile-project
+ /home/tom/github/semcod/tagi --planfile-limit 20
+ schema: koru.ticket_evidence.v1
+ staleness_check: Regenerate artifacts and compare artifact.sha256 / files[].sha256
+ before assuming this ticket is still current.
+ input: 'code2llm reports `God Function: setup_logger` in `src/tagi/utils/logger.py:9`.
+
+
+ Function ''setup_logger'' is oversized: CC=4, fan-out=13, mutations=14.
+
+
+ Make the smallest refactor that removes the smell and run local tests.'
+ signal: code2llm_smell_god_function
+ timestamp: '2026-09-19T18:16:24.472046+00:00'
+ tool: koru-project-discovery
+ sprint: current
+ status: open
+ sync:
+ github:
+ id: '189'
+ key: semcod/tagi#189
+ url: https://github.com/semcod/tagi/issues/189
+ updated_at: '2026-09-19T18:16:24.472046+00:00'
+ PLF-174:
+ backend: github
+ blocked_by: []
+ blocks: []
+ created_at: '2026-09-19T18:25:22.064458+00:00'
+ description: 'code2llm reports `God Function: summary_command` in `src/tagi/cli/utility_commands.py:25`.
+
+
+ Function ''summary_command'' is oversized: CC=7, fan-out=13, mutations=17.
+
+
+ Make the smallest refactor that removes the smell and run local tests.'
+ execution:
+ attempt: 0
+ max_attempts: 1
+ queue: default
+ state: ready
+ executor:
+ kind: human
+ mode: interactive
+ external_id: '190'
+ files:
+ - src/tagi/cli/utility_commands.py
+ history:
+ - action: created
+ message: 'code2llm reports `God Function: summary_command` in `src/tagi/cli/utility_commands.py:25`.
+
+
+ Function ''summary_command'' is oversized: CC=7, fan-out=13, mutations=17.
+
+
+ Make the smallest refactor that removes the smell and run local tests.'
+ source: koru task
+ timestamp: '2026-09-19T18:25:22.064458+00:00'
+ id: PLF-174
+ inputs:
+ api_headers: {}
+ api_method: GET
+ api_timeout_seconds: 30.0
+ env_keys: []
+ prompt: 'code2llm reports `God Function: summary_command` in `src/tagi/cli/utility_commands.py:25`.
+
+
+ Function ''summary_command'' is oversized: CC=7, fan-out=13, mutations=17.
+
+
+ Make the smallest refactor that removes the smell and run local tests.'
+ integration:
+ - github
+ labels:
+ - koru
+ - nl-task
+ - llm-ready
+ - code2llm
+ - code-smell
+ - god-function
+ - 'priority: normal'
+ - 'priority: normal'
+ name: 'Address code smell: God Function: summary_command'
+ outputs:
+ artifacts: []
+ notes: []
+ priority: normal
+ source:
+ context:
+ dedupe_key: 'code2llm:smell:god_function:src/tagi/cli/utility_commands.py:25:God
+ Function: summary_command'
+ evidence:
+ artifact:
+ mtime_ns: 1789838949904540410
+ path: project/analysis.toon.yaml
+ sha256: a20fa29c7d952fbcda7207db98cbe6042565fe78c7e14633a3065728be7842c6
+ size_bytes: 9689
+ files:
+ - mtime_ns: 1789817932257139916
+ path: src/tagi/cli/utility_commands.py
+ sha256: e8d62787b625b75ab02154b4de181d4c5ab9cf2443e7bec06574c0ec46b63499
+ size_bytes: 7253
+ kind: code2llm_discovery
+ planfile_tickets:
+ mtime_ns: 1789838959872519685
+ path: project/planfile-tickets.yaml
+ sha256: b5faa6f4e5d625a802e28855d7954530f8835c2a1c4377ec4676a9e843e17d04
+ size_bytes: 8004
+ regenerate_command: code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project
+ --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source
+ koru-project-discovery --planfile-sprint current --planfile-project
+ /home/tom/github/semcod/tagi --planfile-limit 20
+ schema: koru.ticket_evidence.v1
+ staleness_check: Regenerate artifacts and compare artifact.sha256 / files[].sha256
+ before assuming this ticket is still current.
+ input: 'code2llm reports `God Function: summary_command` in `src/tagi/cli/utility_commands.py:25`.
+
+
+ Function ''summary_command'' is oversized: CC=7, fan-out=13, mutations=17.
+
+
+ Make the smallest refactor that removes the smell and run local tests.'
+ signal: code2llm_smell_god_function
+ timestamp: '2026-09-19T18:25:22.064458+00:00'
+ tool: koru-project-discovery
+ sprint: current
+ status: open
+ sync:
+ github:
+ id: '190'
+ key: semcod/tagi#190
+ url: https://github.com/semcod/tagi/issues/190
+ updated_at: '2026-09-19T18:25:22.064458+00:00'
+ PLF-177:
+ acceptance_criteria: []
+ blocked_by: []
+ blocks: []
+ children: []
+ contract_version: planfile.ticket/v1
+ created_at: '2026-09-19T21:13:19.174193Z'
+ description: 'Fresh redup scan (project/duplication.toon.yaml, 2026-09-19) flags
+ copy-pasted helpers introduced by the cli module split:
+
+
+ - _ensure_tag_prefix: 4 identical copies (src/tagi/cli/main.py:50, git_operations.py:21,
+ publishing_commands.py:16, utility_commands.py:18) — 24 duplicated lines.
+
+ - _resolve_send_target + _is_known_tag: duplicated between src/tagi/cli/main.py:57-83
+ and git_operations.py:28-56 (19+10 lines), with comment drift between the
+ two copies.
+
+
+ Extract these into one shared cli helper module (e.g. src/tagi/cli/tag_targets.py),
+ import it from all four command modules, and keep behavior identical.
+
+
+ Acceptance criteria:
+
+ - redup scan of src/ reports no EXAC groups for these helpers (dup groups
+ 7 -> <=4).
+
+ - python -m pytest -q stays green (127 passed).'
+ dsl: SODL/1 id=evt_6d8071ad9e575f187c0d44fc event_hash=09dee25ffd62e51fcf5519f07cf9cdb658a69ceb037eb39c11b0a66d7d2508f3
+ timestamp=2026-09-19T21%3A13%3A19.174193%2B00%3A00 kind=task source=planfile.ticket
+ ticket_id=PLF-177 actor=koru-project-discovery oql=ticket.create uri=planfile%3A%2F%2Ftickets%2FPLF-177%2Fcommand%2Fcreate
+ mode=apply status=open correlation_id=PLF-177 causation_id=- input_hash=c3d47241fd79a8d7580afdb743ddae69f661a9bc415f8a9439190b58d9951b52
+ receipt_ref=- replayable=true data=eyJwYXlsb2FkIjp7ImFjY2VwdGFuY2VfY3JpdGVyaWEiOltdLCJibG9ja2VkX2J5IjpbXSwiYmxvY2tzIjpbXSwiY2hpbGRyZW4iOltdLCJjb250cmFjdF92ZXJzaW9uIjoicGxhbmZpbGUudGlja2V0L3YxIiwiY3JlYXRlZF9hdCI6IjIwMjYtMDktMTlUMjE6MTM6MTkuMTc0MTkzWiIsImRlc2NyaXB0aW9uIjoiRnJlc2ggcmVkdXAgc2NhbiAocHJvamVjdC9kdXBsaWNhdGlvbi50b29uLnlhbWwsIDIwMjYtMDktMTkpIGZsYWdzIGNvcHktcGFzdGVkIGhlbHBlcnMgaW50cm9kdWNlZCBieSB0aGUgY2xpIG1vZHVsZSBzcGxpdDpcblxuLSBfZW5zdXJlX3RhZ19wcmVmaXg6IDQgaWRlbnRpY2FsIGNvcGllcyAoc3JjL3RhZ2kvY2xpL21haW4ucHk6NTAsIGdpdF9vcGVyYXRpb25zLnB5OjIxLCBwdWJsaXNoaW5nX2NvbW1hbmRzLnB5OjE2LCB1dGlsaXR5X2NvbW1hbmRzLnB5OjE4KSDigJQgMjQgZHVwbGljYXRlZCBsaW5lcy5cbi0gX3Jlc29sdmVfc2VuZF90YXJnZXQgKyBfaXNfa25vd25fdGFnOiBkdXBsaWNhdGVkIGJldHdlZW4gc3JjL3RhZ2kvY2xpL21haW4ucHk6NTctODMgYW5kIGdpdF9vcGVyYXRpb25zLnB5OjI4LTU2ICgxOSsxMCBsaW5lcyksIHdpdGggY29tbWVudCBkcmlmdCBiZXR3ZWVuIHRoZSB0d28gY29waWVzLlxuXG5FeHRyYWN0IHRoZXNlIGludG8gb25lIHNoYXJlZCBjbGkgaGVscGVyIG1vZHVsZSAoZS5nLiBzcmMvdGFnaS9jbGkvdGFnX3RhcmdldHMucHkpLCBpbXBvcnQgaXQgZnJvbSBhbGwgZm91ciBjb21tYW5kIG1vZHVsZXMsIGFuZCBrZWVwIGJlaGF2aW9yIGlkZW50aWNhbC5cblxuQWNjZXB0YW5jZSBjcml0ZXJpYTpcbi0gcmVkdXAgc2NhbiBvZiBzcmMvIHJlcG9ydHMgbm8gRVhBQyBncm91cHMgZm9yIHRoZXNlIGhlbHBlcnMgKGR1cCBncm91cHMgNyAtPiA8PTQpLlxuLSBweXRob24gLW0gcHl0ZXN0IC1xIHN0YXlzIGdyZWVuICgxMjcgcGFzc2VkKS4iLCJmaWxlcyI6WyJzcmMvdGFnaS9jbGkvbWFpbi5weSIsInNyYy90YWdpL2NsaS9naXRfb3BlcmF0aW9ucy5weSIsInNyYy90YWdpL2NsaS9wdWJsaXNoaW5nX2NvbW1hbmRzLnB5Iiwic3JjL3RhZ2kvY2xpL3V0aWxpdHlfY29tbWFuZHMucHkiXSwiaWQiOiJQTEYtMTc3IiwibGFiZWxzIjpbImtvcnUiLCJubC10YXNrIiwibGxtLXJlYWR5IiwicHJvamVjdC1kaXNjb3ZlcnkiLCJkdXBsaWNhdGlvbiJdLCJuYW1lIjoiRGVkdXBsaWNhdGUgY2xpIHRhZyBoZWxwZXJzIChfZW5zdXJlX3RhZ19wcmVmaXgsIF9pc19rbm93bl90YWcsIF9yZXNvbHZlX3NlbmRfdGFyZ2V0KSIsInByaW9yaXR5IjoiaGlnaCIsInNvdXJjZSI6eyJjb250ZXh0Ijp7fSwidGltZXN0YW1wIjoiMjAyNi0wOS0xOVQyMToxMzoxOS4xNTg3NzdaIiwidG9vbCI6ImtvcnUtcHJvamVjdC1kaXNjb3ZlcnkifSwic3ByaW50IjoiY3VycmVudCIsInN0YXR1cyI6Im9wZW4iLCJzeW5jIjp7fSwidXBkYXRlZF9hdCI6IjIwMjYtMDktMTlUMjE6MTM6MTkuMTc0MTk4WiJ9fQ
+ files:
+ - src/tagi/cli/main.py
+ - src/tagi/cli/git_operations.py
+ - src/tagi/cli/publishing_commands.py
+ - src/tagi/cli/utility_commands.py
+ history: []
+ id: PLF-177
+ labels:
+ - koru
+ - nl-task
+ - llm-ready
+ - project-discovery
+ - duplication
+ name: Deduplicate cli tag helpers (_ensure_tag_prefix, _is_known_tag, _resolve_send_target)
+ priority: high
+ source:
+ context: {}
+ timestamp: '2026-09-19T21:13:19.158777Z'
+ tool: koru-project-discovery
+ sprint: current
+ status: open
+ sync: {}
+ updated_at: '2026-09-19T21:13:19.174198Z'
+ PLF-178:
+ acceptance_criteria: []
+ blocked_by: []
+ blocks: []
+ children: []
+ contract_version: planfile.ticket/v1
+ created_at: '2026-09-19T21:13:25.344158Z'
+ description: 'src/tagi/analyzer/dependency_graph.py is the largest module in
+ the codebase (276L, 16 functions, CC=7) and has no dedicated test coverage
+ (verified 2026-09-19: no tests/ file imports it; only a path fixture mention).
+
+
+ It implements pure graph algorithms used by planning: build_dependency_graph,
+ find_dependency_order, detect_cycles, get_critical_path, levels.
+
+
+ Add tests/test_dependency_graph.py covering:
+
+ - build_dependency_graph from python import analysis (incl. _collect_import_names
+ edge cases).
+
+ - find_dependency_order: deterministic order, dependencies before dependents.
+
+ - detect_cycles: acyclic graph -> [], cyclic graph -> reported cycle (incl.
+ self-loop).
+
+ - get_critical_path: longest path in a diamond graph.
+
+ - levels/_drain_level partitioning.
+
+
+ Acceptance criteria:
+
+ - python -m pytest -q green with the new tests included.
+
+ - Coverage of the module''s public functions without mocking internals.'
+ dsl: SODL/1 id=evt_7078a45181f0dc0a74954bb8 event_hash=6bc21c34be2c3bd2a2b9b78df0201095dfdbbf142a1d02d1c0d9b28f28f88bba
+ timestamp=2026-09-19T21%3A13%3A25.344158%2B00%3A00 kind=task source=planfile.ticket
+ ticket_id=PLF-178 actor=koru-project-discovery oql=ticket.create uri=planfile%3A%2F%2Ftickets%2FPLF-178%2Fcommand%2Fcreate
+ mode=apply status=open correlation_id=PLF-178 causation_id=- input_hash=ae3d0bc4ac06e679201e277c56e8950193680a23891a710c80eb024e664f08d2
+ receipt_ref=- replayable=true data=eyJwYXlsb2FkIjp7ImFjY2VwdGFuY2VfY3JpdGVyaWEiOltdLCJibG9ja2VkX2J5IjpbXSwiYmxvY2tzIjpbXSwiY2hpbGRyZW4iOltdLCJjb250cmFjdF92ZXJzaW9uIjoicGxhbmZpbGUudGlja2V0L3YxIiwiY3JlYXRlZF9hdCI6IjIwMjYtMDktMTlUMjE6MTM6MjUuMzQ0MTU4WiIsImRlc2NyaXB0aW9uIjoic3JjL3RhZ2kvYW5hbHl6ZXIvZGVwZW5kZW5jeV9ncmFwaC5weSBpcyB0aGUgbGFyZ2VzdCBtb2R1bGUgaW4gdGhlIGNvZGViYXNlICgyNzZMLCAxNiBmdW5jdGlvbnMsIENDPTcpIGFuZCBoYXMgbm8gZGVkaWNhdGVkIHRlc3QgY292ZXJhZ2UgKHZlcmlmaWVkIDIwMjYtMDktMTk6IG5vIHRlc3RzLyBmaWxlIGltcG9ydHMgaXQ7IG9ubHkgYSBwYXRoIGZpeHR1cmUgbWVudGlvbikuXG5cbkl0IGltcGxlbWVudHMgcHVyZSBncmFwaCBhbGdvcml0aG1zIHVzZWQgYnkgcGxhbm5pbmc6IGJ1aWxkX2RlcGVuZGVuY3lfZ3JhcGgsIGZpbmRfZGVwZW5kZW5jeV9vcmRlciwgZGV0ZWN0X2N5Y2xlcywgZ2V0X2NyaXRpY2FsX3BhdGgsIGxldmVscy5cblxuQWRkIHRlc3RzL3Rlc3RfZGVwZW5kZW5jeV9ncmFwaC5weSBjb3ZlcmluZzpcbi0gYnVpbGRfZGVwZW5kZW5jeV9ncmFwaCBmcm9tIHB5dGhvbiBpbXBvcnQgYW5hbHlzaXMgKGluY2wuIF9jb2xsZWN0X2ltcG9ydF9uYW1lcyBlZGdlIGNhc2VzKS5cbi0gZmluZF9kZXBlbmRlbmN5X29yZGVyOiBkZXRlcm1pbmlzdGljIG9yZGVyLCBkZXBlbmRlbmNpZXMgYmVmb3JlIGRlcGVuZGVudHMuXG4tIGRldGVjdF9jeWNsZXM6IGFjeWNsaWMgZ3JhcGggLT4gW10sIGN5Y2xpYyBncmFwaCAtPiByZXBvcnRlZCBjeWNsZSAoaW5jbC4gc2VsZi1sb29wKS5cbi0gZ2V0X2NyaXRpY2FsX3BhdGg6IGxvbmdlc3QgcGF0aCBpbiBhIGRpYW1vbmQgZ3JhcGguXG4tIGxldmVscy9fZHJhaW5fbGV2ZWwgcGFydGl0aW9uaW5nLlxuXG5BY2NlcHRhbmNlIGNyaXRlcmlhOlxuLSBweXRob24gLW0gcHl0ZXN0IC1xIGdyZWVuIHdpdGggdGhlIG5ldyB0ZXN0cyBpbmNsdWRlZC5cbi0gQ292ZXJhZ2Ugb2YgdGhlIG1vZHVsZSdzIHB1YmxpYyBmdW5jdGlvbnMgd2l0aG91dCBtb2NraW5nIGludGVybmFscy4iLCJmaWxlcyI6WyJzcmMvdGFnaS9hbmFseXplci9kZXBlbmRlbmN5X2dyYXBoLnB5Il0sImlkIjoiUExGLTE3OCIsImxhYmVscyI6WyJrb3J1IiwibmwtdGFzayIsImxsbS1yZWFkeSIsInByb2plY3QtZGlzY292ZXJ5IiwidGVzdHMiXSwibmFtZSI6IkFkZCB1bml0IHRlc3RzIGZvciBhbmFseXplci9kZXBlbmRlbmN5X2dyYXBoLnB5IiwicHJpb3JpdHkiOiJoaWdoIiwic291cmNlIjp7ImNvbnRleHQiOnt9LCJ0aW1lc3RhbXAiOiIyMDI2LTA5LTE5VDIxOjEzOjI1LjMzMTQ0N1oiLCJ0b29sIjoia29ydS1wcm9qZWN0LWRpc2NvdmVyeSJ9LCJzcHJpbnQiOiJjdXJyZW50Iiwic3RhdHVzIjoib3BlbiIsInN5bmMiOnt9LCJ1cGRhdGVkX2F0IjoiMjAyNi0wOS0xOVQyMToxMzoyNS4zNDQxNjVaIn19
+ files:
+ - src/tagi/analyzer/dependency_graph.py
+ history: []
+ id: PLF-178
+ labels:
+ - koru
+ - nl-task
+ - llm-ready
+ - project-discovery
+ - tests
+ name: Add unit tests for analyzer/dependency_graph.py
+ priority: high
+ source:
+ context: {}
+ timestamp: '2026-09-19T21:13:25.331447Z'
+ tool: koru-project-discovery
+ sprint: current
+ status: open
+ sync: {}
+ updated_at: '2026-09-19T21:13:25.344165Z'
+ PLF-179:
+ acceptance_criteria: []
+ blocked_by: []
+ blocks: []
+ children: []
+ contract_version: planfile.ticket/v1
+ created_at: '2026-09-19T21:13:31.396943Z'
+ description: 'src/tagi/providers/koru.py (171L, CC=8) implements KoruProvider,
+ including analyze_deployment_priority flagged by code2llm as high fan-out
+ (10, limit 10 — project/project.toon.yaml ALERTS). It has no test coverage
+ (verified 2026-09-19); github/gitlab providers each have a dedicated test
+ module, koru does not.
+
+
+ Add tests/test_koru_provider.py following the test_github_provider.py/test_gitlab_provider.py
+ pattern, covering:
+
+ - is_authenticated / get_auth_status for token-present and token-missing cases.
+
+ - analyze_deployment_priority output shape for representative inputs.
+
+ - create_pr / detect_remote behavior with a stubbed transport.
+
+ - Error paths (missing config, failed command).
+
+
+ Acceptance criteria:
+
+ - python -m pytest -q green with the new tests included.
+
+ - No network access in tests (stub/mocked transport only).'
+ dsl: SODL/1 id=evt_66de8743a3eefd20e509044a event_hash=35a4ce7177c8b0a23e2cfef6be335c571ee64328a9a7ce75f2879f68559faad0
+ timestamp=2026-09-19T21%3A13%3A31.396943%2B00%3A00 kind=task source=planfile.ticket
+ ticket_id=PLF-179 actor=koru-project-discovery oql=ticket.create uri=planfile%3A%2F%2Ftickets%2FPLF-179%2Fcommand%2Fcreate
+ mode=apply status=open correlation_id=PLF-179 causation_id=- input_hash=efe4ccacd819cd7b58a15895e0fd785559b241912e310199661481ecb3252de5
+ receipt_ref=- replayable=true data=eyJwYXlsb2FkIjp7ImFjY2VwdGFuY2VfY3JpdGVyaWEiOltdLCJibG9ja2VkX2J5IjpbXSwiYmxvY2tzIjpbXSwiY2hpbGRyZW4iOltdLCJjb250cmFjdF92ZXJzaW9uIjoicGxhbmZpbGUudGlja2V0L3YxIiwiY3JlYXRlZF9hdCI6IjIwMjYtMDktMTlUMjE6MTM6MzEuMzk2OTQzWiIsImRlc2NyaXB0aW9uIjoic3JjL3RhZ2kvcHJvdmlkZXJzL2tvcnUucHkgKDE3MUwsIENDPTgpIGltcGxlbWVudHMgS29ydVByb3ZpZGVyLCBpbmNsdWRpbmcgYW5hbHl6ZV9kZXBsb3ltZW50X3ByaW9yaXR5IGZsYWdnZWQgYnkgY29kZTJsbG0gYXMgaGlnaCBmYW4tb3V0ICgxMCwgbGltaXQgMTAg4oCUIHByb2plY3QvcHJvamVjdC50b29uLnlhbWwgQUxFUlRTKS4gSXQgaGFzIG5vIHRlc3QgY292ZXJhZ2UgKHZlcmlmaWVkIDIwMjYtMDktMTkpOyBnaXRodWIvZ2l0bGFiIHByb3ZpZGVycyBlYWNoIGhhdmUgYSBkZWRpY2F0ZWQgdGVzdCBtb2R1bGUsIGtvcnUgZG9lcyBub3QuXG5cbkFkZCB0ZXN0cy90ZXN0X2tvcnVfcHJvdmlkZXIucHkgZm9sbG93aW5nIHRoZSB0ZXN0X2dpdGh1Yl9wcm92aWRlci5weS90ZXN0X2dpdGxhYl9wcm92aWRlci5weSBwYXR0ZXJuLCBjb3ZlcmluZzpcbi0gaXNfYXV0aGVudGljYXRlZCAvIGdldF9hdXRoX3N0YXR1cyBmb3IgdG9rZW4tcHJlc2VudCBhbmQgdG9rZW4tbWlzc2luZyBjYXNlcy5cbi0gYW5hbHl6ZV9kZXBsb3ltZW50X3ByaW9yaXR5IG91dHB1dCBzaGFwZSBmb3IgcmVwcmVzZW50YXRpdmUgaW5wdXRzLlxuLSBjcmVhdGVfcHIgLyBkZXRlY3RfcmVtb3RlIGJlaGF2aW9yIHdpdGggYSBzdHViYmVkIHRyYW5zcG9ydC5cbi0gRXJyb3IgcGF0aHMgKG1pc3NpbmcgY29uZmlnLCBmYWlsZWQgY29tbWFuZCkuXG5cbkFjY2VwdGFuY2UgY3JpdGVyaWE6XG4tIHB5dGhvbiAtbSBweXRlc3QgLXEgZ3JlZW4gd2l0aCB0aGUgbmV3IHRlc3RzIGluY2x1ZGVkLlxuLSBObyBuZXR3b3JrIGFjY2VzcyBpbiB0ZXN0cyAoc3R1Yi9tb2NrZWQgdHJhbnNwb3J0IG9ubHkpLiIsImZpbGVzIjpbInNyYy90YWdpL3Byb3ZpZGVycy9rb3J1LnB5Il0sImlkIjoiUExGLTE3OSIsImxhYmVscyI6WyJrb3J1IiwibmwtdGFzayIsImxsbS1yZWFkeSIsInByb2plY3QtZGlzY292ZXJ5IiwidGVzdHMiXSwibmFtZSI6IkFkZCB1bml0IHRlc3RzIGZvciBwcm92aWRlcnMva29ydS5weSAoS29ydVByb3ZpZGVyKSIsInByaW9yaXR5Ijoibm9ybWFsIiwic291cmNlIjp7ImNvbnRleHQiOnt9LCJ0aW1lc3RhbXAiOiIyMDI2LTA5LTE5VDIxOjEzOjMxLjM4NzQxNloiLCJ0b29sIjoia29ydS1wcm9qZWN0LWRpc2NvdmVyeSJ9LCJzcHJpbnQiOiJjdXJyZW50Iiwic3RhdHVzIjoib3BlbiIsInN5bmMiOnt9LCJ1cGRhdGVkX2F0IjoiMjAyNi0wOS0xOVQyMToxMzozMS4zOTY5NTJaIn19
+ files:
+ - src/tagi/providers/koru.py
+ history: []
+ id: PLF-179
+ labels:
+ - koru
+ - nl-task
+ - llm-ready
+ - project-discovery
+ - tests
+ name: Add unit tests for providers/koru.py (KoruProvider)
+ priority: normal
+ source:
+ context: {}
+ timestamp: '2026-09-19T21:13:31.387416Z'
+ tool: koru-project-discovery
+ sprint: current
+ status: open
+ sync: {}
+ updated_at: '2026-09-19T21:13:31.396952Z'
diff --git a/.planfile/sprints/current.yaml.fast.json b/.planfile/sprints/current.yaml.fast.json
index 658c37e..4ef5da6 100644
--- a/.planfile/sprints/current.yaml.fast.json
+++ b/.planfile/sprints/current.yaml.fast.json
@@ -1 +1 @@
-{"version": 1, "yaml_mtime_ns": 1789839112659613381, "data": {"sprint": {"id": "current", "name": "Current", "status": "active", "tickets": {"GITHUB-138": {"assignee": null, "backend": "github", "description": "\ncode2llm reports `Shotgun Surgery: tags` in `src/tagi/heuristics/tags.py:66`.\n\nMutation of variable 'tags' spans 6 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.\n\n---\n\n**Strategy Metadata:**\n- repository: semcod/tagi\n- planfile_id: semcod/tagi:2521ebe187e61bb2:PLF-115\n", "external_id": "138", "history": [{"action": "update", "changes": ["sprint"], "reason": "move_ticket", "source": "planfile.store", "timestamp": "2026-09-19T17:21:43.578226+00:00"}], "integration": ["github"], "labels": ["planfile", "managed", "koru", "nl-task", "llm-ready", "priority-high", "code2llm", "code-smell", "shotgun-surgery"], "metadata": {"deduplication_key": "semcod/tagi:2521ebe187e61bb2:PLF-115"}, "name": "Address code smell: Shotgun Surgery: tags", "sprint": "current", "status": "open", "sync": {"github": {"id": "138", "key": "semcod/tagi#138", "url": "https://github.com/semcod/tagi/issues/138"}}, "updated_at": "2026-09-19T17:21:43.578177+00:00"}, "GITHUB-6": {"assignee": null, "backend": "github", "description": "\n## Cel i etap\n\nKampania wellmanifest/docs v0.4.0 dla **semcod/tagi**. Etap: **PLAN / poczekalnia**.\nTo zgłoszenie nie uruchamia wykonawcy ani nie nadaje uprawnień do usuwania danych, zmiany chronionego CI lub samodzielnego merge.\n\nStandard: https://github.com/wellmanifest/docs/tree/867241833a7e69188d595505d116115736438c7a\nPrzed rozpoczęciem sprawdzić, czy istniejąca adopcja i zadania już realizują ten zakres; wznowić pasujące zadanie zamiast tworzyć konkurencyjne.\n\n## Obserwacja wejściowa (2026-09-14, lokalny checkout)\n\n- Rewizja: `3b550841ed6c7be485c5056a7a45aaae3a9f7d16`; liczba śledzonych Markdown pod docs/: **5**.\n- To inwentaryzacja ścieżek, nie aktualny audyt treści ani dowód duplikacji. Ponowić względem aktualnej gałęzi domyślnej `main`.\n- `docs/README.md`\n- `docs/configuration.md`\n- `docs/information/internal-dependencies.md`\n- `docs/provider-detection.md`\n- `docs/troubleshooting.md`\n\n## Zakres i kryteria odbioru\n\n- [ ] AC-01: Zmapować docs, indeksy, changelogi, obecne i historyczne tickety (Planfile/project/SQLite), issues i PR-y. Uzgodnić statusy z kodem oraz dowodami scalenia; nie zamykać zadań na podstawie starego TODO.\n- [ ] AC-02: Dla każdej rodziny dokumentów wskazać właściciela, kanoniczną ścieżkę i decyzję: zachować / zaktualizować / scalić / superseded. Podobieństwo tekstu nie jest dowodem zbędności; nie usuwać unikalnych wymagań, dowodów ani zarządzanych kopii standardów.\n- [ ] AC-03: Migrować małymi partiami do krótkich plików WIELKIMI_LITERAMI.md w odpowiednich kategoriach FEATURE, BUGFIX, SERVICE, INFORMATION, ANALYSIS, REFACTORING lub DECISION. Pilność zapisać jako P0–P3, nie jako typ dokumentu. Zachować wyjątki organizacyjne i zgodność historycznego v1.\n- [ ] AC-04: Zachować stare linki i kotwice przez poprawne mapy dawnych ścieżek; zaktualizować docs/README.md i odnośniki z changeloga bez powielania treści. Udokumentować każdą usuniętą kopię i dowód zachowania jej unikalnej treści; nie kasować historii ticketów.\n- [ ] AC-05: Przyjąć immutable pin standardu w procesie właściwym dla repo i podłączyć preflight oraz finalny checker do istniejącego CI. Sprawdzić zaufane base/HEAD. Globalny filtr fleet standardu ograniczony do subactor/* nie dowodzi pokrycia semcod/autogrammar; raportować i rozwiązać tę lukę bez obejścia bramy.\n- [ ] AC-06: DSL jest opcjonalny tylko dla formalnych FEATURE/BUGFIX; użyć parsera przypiętego przez policy-dsl.lock.json. DSL nie wykonuje testów ani nie zatwierdza zmiany. Nie przepisywać całej dokumentacji na DSL.\n- [ ] AC-07: Sprawdzić linki i kotwice, zachowanie wymagań, governance, testy projektu i ponowne uruchomienie bez dodatkowych zmian. Oddzielić liczbę plików od jakości i kompletności migracji.\n- [ ] AC-08: Osobny ograniczony ticket/worktree/PR zgodnie z zasadami repo; niezależny review i chroniona publikacja. Raport końcowy: pokrycie, pominięcia, konflikty, model rzeczywiście użyty, wyniki kontroli i URL scalonego PR.\n\n## Kolejność\n\nAudyt read-only → uzgodnienie istniejących zadań → plan migracji → pilotaż → małe partie → przegląd i publikacja.\nPierwsza grupa pilotażowa: semcod/koru, semcod/goal, semcod/taskand-glm53. Pozostałe repo oczekują oceny pilotażu; samo utworzenie issue nie włącza automatyzacji.\nNie nadpisywać brudnych checkoutów, nie zmieniać aplikacji ani statusów historycznych zadań w ramach samego porządkowania docs.\n\n## Powiązane wcześniejsze zgłoszenia\n\n- Audyt GitHub nie znalazł powiązanego zgłoszenia po tytule; nadal sprawdzić lokalne i historyczne zadania.\n\n\n---\n\n**Strategy Metadata:**\n- deduplication_key: wellmanifest-docs-v04:semcod/tagi\n- campaign: wellmanifest-docs-v04\n- standard_revision: 867241833a7e69188d595505d116115736438c7a\n- phase: PLAN\n", "external_id": "6", "history": [{"action": "update", "changes": ["sprint"], "reason": "move_ticket", "source": "planfile.store", "timestamp": "2026-09-19T17:21:44.611616+00:00"}], "integration": ["github"], "labels": ["documentation", "docs-standard-v04", "planning-only", "priority-normal", "planfile", "managed"], "metadata": {"deduplication_key": "wellmanifest-docs-v04:semcod/tagi"}, "name": "[DOCS] Standaryzacja dokumentacji, uzgodnienie historii i deduplikacja", "sprint": "current", "status": "open", "sync": {"github": {"id": "6", "key": "semcod/tagi#6", "url": "https://github.com/semcod/tagi/issues/6"}}, "updated_at": "2026-09-19T17:21:44.611586+00:00"}, "GITHUB-7": {"assignee": null, "backend": "github", "description": "\n\nAudit date: 2026-09-15. Scope: this repository only; planning, not authorization to modify source or deploy.\n\nObserved local checkout SHA: `3b550841ed6c7be485c5056a7a45aaae3a9f7d16`. Local declared adoption status: `review-required`.\n\nComparison is against observed GitHub default-branch commits and VERSION, not an assertion that every changed commit requires an upgrade.\n\nNo declarations means unavailable evidence, not proof that no standard is followed. Select applicable wellmanifest packs; do not install every pack indiscriminately.\n\n- wellmanifest/docs: adopted `ebe7501063ef4f3e63ded610c2d3183010ca636e` (version None); observed upstream `aa92136b4e94f48355c39fb206286aba024c6aa4` (version 0.5.0); pin-differs-review-required. Declaration: `.governance/docs.json`.\n\n## Acceptance criteria\n\n- [ ] Reconcile actual applicable standard adoptions with deployed/default-branch state; record unknowns and exemptions.\n- [ ] For each differing pin, compare version and relevant artifacts; use the managed adopter in a separate bounded implementation ticket only when needed.\n- [ ] Preserve project overrides, dirty work, historical tasks and stable document links; never edit managed hashes to bypass validation.\n- [ ] Verify local Planfile ID to GitHub issue mapping and retry deduplication without broad bidirectional sync.\n- [ ] Run managed governance and stack checks after any separately authorized adoption; report declared versus protected-CI coverage.\n\nExisting related work (reconcile/reuse scope; do not duplicate implementation):\n- https://github.com/semcod/tagi/issues/6\n\n---\n\n**Strategy Metadata:**\n- deduplication_key: dev-quality-fleet-readiness-v1:semcod/tagi\n- planfile_id: PLF-012\n", "external_id": "7", "history": [{"action": "update", "changes": ["sprint"], "reason": "move_ticket", "source": "planfile.store", "timestamp": "2026-09-19T17:21:45.359903+00:00"}], "integration": ["github"], "labels": ["planfile", "managed"], "metadata": {"deduplication_key": "dev-quality-fleet-readiness-v1:semcod/tagi"}, "name": "[WELLMANIFEST] Reconcile adopted standards and verify Planfile delivery", "sprint": "current", "status": "open", "sync": {"github": {"id": "7", "key": "semcod/tagi#7", "url": "https://github.com/semcod/tagi/issues/7"}}, "updated_at": "2026-09-19T17:21:45.359877+00:00"}, "PLF-088": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-17T22:59:24.712993+00:00", "description": "\ncode2llm reports `Data Clump: body, repo_path, title` in `src/tagi/cli/provider_commands.py:34`.\n\nArguments (body, repo_path, title) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "84", "files": ["src/tagi/cli/provider_commands.py"], "history": [{"action": "created", "message": "code2llm reports `Data Clump: body, repo_path, title` in `src/tagi/cli/provider_commands.py:34`.\n\nArguments (body, repo_path, title) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-17T22:59:24.712993+00:00"}], "id": "PLF-088", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `Data Clump: body, repo_path, title` in `src/tagi/cli/provider_commands.py:34`.\n\nArguments (body, repo_path, title) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "code-smell", "data-clump"], "metadata": {"deduplication_key": "PLF-088"}, "name": "Address code smell: Data Clump: body, repo_path, title", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:data_clump:src/tagi/cli/provider_commands.py:34:Data Clump: body, repo_path, title", "evidence": {"artifact": {"mtime_ns": 1789685545813892871, "path": "project/analysis.toon.yaml", "sha256": "56388ccd6ea846f313f89eee0672e29af4d29e58ce0898052bd8ff8ebb956a7b", "size_bytes": 10159}, "files": [{"mtime_ns": 1789683999494622908, "path": "src/tagi/cli/provider_commands.py", "sha256": "68ce18c77819dae347a71d285994bba864fa304bce74de2420ca81f96c3f8225", "size_bytes": 2695}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789685545874477122, "path": "project/planfile-tickets.yaml", "sha256": "b10db9962e41e134f1374ebe04fdb8c3effa635fcb0f2d59f06498c1ae2f5b2a", "size_bytes": 29760}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `Data Clump: body, repo_path, title` in `src/tagi/cli/provider_commands.py:34`.\n\nArguments (body, repo_path, title) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_data_clump"}, "timestamp": "2026-09-17T22:59:24.712993+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "84", "key": "semcod/tagi#84", "url": "https://github.com/semcod/tagi/issues/84"}}, "updated_at": "2026-09-17T22:59:24.712993+00:00"}, "PLF-089": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-17T23:00:40.968749+00:00", "description": "\ncode2llm reports `God Function: _calculate_complexity` in `src/tagi/heuristics/metrics.py:46`.\n\nFunction '_calculate_complexity' is oversized: CC=5, fan-out=6, mutations=10.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "85", "files": ["src/tagi/heuristics/metrics.py"], "history": [{"action": "created", "message": "code2llm reports `God Function: _calculate_complexity` in `src/tagi/heuristics/metrics.py:46`.\n\nFunction '_calculate_complexity' is oversized: CC=5, fan-out=6, mutations=10.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-17T23:00:40.968749+00:00"}], "id": "PLF-089", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `God Function: _calculate_complexity` in `src/tagi/heuristics/metrics.py:46`.\n\nFunction '_calculate_complexity' is oversized: CC=5, fan-out=6, mutations=10.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "code-smell", "god-function"], "metadata": {"deduplication_key": "PLF-089"}, "name": "Address code smell: God Function: _calculate_complexity", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:god_function:src/tagi/heuristics/metrics.py:46:God Function: _calculate_complexity", "evidence": {"artifact": {"mtime_ns": 1789685545813892871, "path": "project/analysis.toon.yaml", "sha256": "56388ccd6ea846f313f89eee0672e29af4d29e58ce0898052bd8ff8ebb956a7b", "size_bytes": 10159}, "files": [{"mtime_ns": 1779811310790143885, "path": "src/tagi/heuristics/metrics.py", "sha256": "dcd2cc0255c4f2ee3eee8aaae72af3e54f0aa6a78598d290d61eb44299401b2d", "size_bytes": 6521}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789685545874477122, "path": "project/planfile-tickets.yaml", "sha256": "b10db9962e41e134f1374ebe04fdb8c3effa635fcb0f2d59f06498c1ae2f5b2a", "size_bytes": 29760}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `God Function: _calculate_complexity` in `src/tagi/heuristics/metrics.py:46`.\n\nFunction '_calculate_complexity' is oversized: CC=5, fan-out=6, mutations=10.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_god_function"}, "timestamp": "2026-09-17T23:00:40.968749+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "85", "key": "semcod/tagi#85", "url": "https://github.com/semcod/tagi/issues/85"}}, "updated_at": "2026-09-17T23:00:40.968749+00:00"}, "PLF-090": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-17T23:02:04.118321+00:00", "description": "\ncode2llm reports `God Function: _calculate_impact` in `src/tagi/heuristics/metrics.py:78`.\n\nFunction '_calculate_impact' is oversized: CC=5, fan-out=3, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "86", "files": ["src/tagi/heuristics/metrics.py"], "history": [{"action": "created", "message": "code2llm reports `God Function: _calculate_impact` in `src/tagi/heuristics/metrics.py:78`.\n\nFunction '_calculate_impact' is oversized: CC=5, fan-out=3, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-17T23:02:04.118321+00:00"}], "id": "PLF-090", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `God Function: _calculate_impact` in `src/tagi/heuristics/metrics.py:78`.\n\nFunction '_calculate_impact' is oversized: CC=5, fan-out=3, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "code-smell", "god-function"], "metadata": {"deduplication_key": "PLF-090"}, "name": "Address code smell: God Function: _calculate_impact", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:god_function:src/tagi/heuristics/metrics.py:78:God Function: _calculate_impact", "evidence": {"artifact": {"mtime_ns": 1789685545813892871, "path": "project/analysis.toon.yaml", "sha256": "56388ccd6ea846f313f89eee0672e29af4d29e58ce0898052bd8ff8ebb956a7b", "size_bytes": 10159}, "files": [{"mtime_ns": 1779811310790143885, "path": "src/tagi/heuristics/metrics.py", "sha256": "dcd2cc0255c4f2ee3eee8aaae72af3e54f0aa6a78598d290d61eb44299401b2d", "size_bytes": 6521}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789685545874477122, "path": "project/planfile-tickets.yaml", "sha256": "b10db9962e41e134f1374ebe04fdb8c3effa635fcb0f2d59f06498c1ae2f5b2a", "size_bytes": 29760}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `God Function: _calculate_impact` in `src/tagi/heuristics/metrics.py:78`.\n\nFunction '_calculate_impact' is oversized: CC=5, fan-out=3, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_god_function"}, "timestamp": "2026-09-17T23:02:04.118321+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "86", "key": "semcod/tagi#86", "url": "https://github.com/semcod/tagi/issues/86"}}, "updated_at": "2026-09-17T23:02:04.118321+00:00"}, "PLF-091": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-17T23:03:33.158245+00:00", "description": "\ncode2llm reports `God Function: _load_config` in `src/tagi/config.py:30`.\n\nFunction '_load_config' is oversized: CC=13, fan-out=6, mutations=0.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "87", "files": ["src/tagi/config.py"], "history": [{"action": "created", "message": "code2llm reports `God Function: _load_config` in `src/tagi/config.py:30`.\n\nFunction '_load_config' is oversized: CC=13, fan-out=6, mutations=0.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-17T23:03:33.158245+00:00"}], "id": "PLF-091", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `God Function: _load_config` in `src/tagi/config.py:30`.\n\nFunction '_load_config' is oversized: CC=13, fan-out=6, mutations=0.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "code-smell", "god-function"], "metadata": {"deduplication_key": "PLF-091"}, "name": "Address code smell: God Function: _load_config", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:god_function:src/tagi/config.py:30:God Function: _load_config", "evidence": {"artifact": {"mtime_ns": 1789685545813892871, "path": "project/analysis.toon.yaml", "sha256": "56388ccd6ea846f313f89eee0672e29af4d29e58ce0898052bd8ff8ebb956a7b", "size_bytes": 10159}, "files": [{"mtime_ns": 1779802844828755285, "path": "src/tagi/config.py", "sha256": "a3f500d3b7d42e797a2054b5ec56c45baf27c8a5e9877c20c9f23f63c091433a", "size_bytes": 4314}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789685545874477122, "path": "project/planfile-tickets.yaml", "sha256": "b10db9962e41e134f1374ebe04fdb8c3effa635fcb0f2d59f06498c1ae2f5b2a", "size_bytes": 29760}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `God Function: _load_config` in `src/tagi/config.py:30`.\n\nFunction '_load_config' is oversized: CC=13, fan-out=6, mutations=0.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_god_function"}, "timestamp": "2026-09-17T23:03:33.158245+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "87", "key": "semcod/tagi#87", "url": "https://github.com/semcod/tagi/issues/87"}}, "updated_at": "2026-09-17T23:03:33.158245+00:00"}, "PLF-092": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-17T23:05:09.293887+00:00", "description": "\ncode2llm reports `God Function: analyze_python_imports` in `src/tagi/analyzer/dependency_graph.py:9`.\n\nFunction 'analyze_python_imports' is oversized: CC=8, fan-out=6, mutations=7.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "88", "files": ["src/tagi/analyzer/dependency_graph.py"], "history": [{"action": "created", "message": "code2llm reports `God Function: analyze_python_imports` in `src/tagi/analyzer/dependency_graph.py:9`.\n\nFunction 'analyze_python_imports' is oversized: CC=8, fan-out=6, mutations=7.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-17T23:05:09.293887+00:00"}], "id": "PLF-092", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `God Function: analyze_python_imports` in `src/tagi/analyzer/dependency_graph.py:9`.\n\nFunction 'analyze_python_imports' is oversized: CC=8, fan-out=6, mutations=7.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "code-smell", "god-function"], "metadata": {"deduplication_key": "PLF-092"}, "name": "Address code smell: God Function: analyze_python_imports", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:god_function:src/tagi/analyzer/dependency_graph.py:9:God Function: analyze_python_imports", "evidence": {"artifact": {"mtime_ns": 1789685545813892871, "path": "project/analysis.toon.yaml", "sha256": "56388ccd6ea846f313f89eee0672e29af4d29e58ce0898052bd8ff8ebb956a7b", "size_bytes": 10159}, "files": [{"mtime_ns": 1779810400712577609, "path": "src/tagi/analyzer/dependency_graph.py", "sha256": "56c60106b3e4d548089071146800fdcc6eddfdcb2b14c53bce8d7532487723bf", "size_bytes": 5250}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789685545874477122, "path": "project/planfile-tickets.yaml", "sha256": "b10db9962e41e134f1374ebe04fdb8c3effa635fcb0f2d59f06498c1ae2f5b2a", "size_bytes": 29760}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `God Function: analyze_python_imports` in `src/tagi/analyzer/dependency_graph.py:9`.\n\nFunction 'analyze_python_imports' is oversized: CC=8, fan-out=6, mutations=7.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_god_function"}, "timestamp": "2026-09-17T23:05:09.293887+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "88", "key": "semcod/tagi#88", "url": "https://github.com/semcod/tagi/issues/88"}}, "updated_at": "2026-09-17T23:05:09.293887+00:00"}, "PLF-093": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-17T23:06:54.291030+00:00", "description": "\ncode2llm reports `God Function: apply_tags` in `src/tagi/heuristics/tags.py:12`.\n\nFunction 'apply_tags' is oversized: CC=11, fan-out=10, mutations=16.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "89", "files": ["src/tagi/heuristics/tags.py"], "history": [{"action": "created", "message": "code2llm reports `God Function: apply_tags` in `src/tagi/heuristics/tags.py:12`.\n\nFunction 'apply_tags' is oversized: CC=11, fan-out=10, mutations=16.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-17T23:06:54.291030+00:00"}], "id": "PLF-093", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `God Function: apply_tags` in `src/tagi/heuristics/tags.py:12`.\n\nFunction 'apply_tags' is oversized: CC=11, fan-out=10, mutations=16.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "code-smell", "god-function"], "metadata": {"deduplication_key": "PLF-093"}, "name": "Address code smell: God Function: apply_tags", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:god_function:src/tagi/heuristics/tags.py:12:God Function: apply_tags", "evidence": {"artifact": {"mtime_ns": 1789685545813892871, "path": "project/analysis.toon.yaml", "sha256": "56388ccd6ea846f313f89eee0672e29af4d29e58ce0898052bd8ff8ebb956a7b", "size_bytes": 10159}, "files": [{"mtime_ns": 1779811321149251584, "path": "src/tagi/heuristics/tags.py", "sha256": "098c64d70cd068c2113523675c53a957d92d646558f9295490c4d6f027c5d064", "size_bytes": 3404}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789685545874477122, "path": "project/planfile-tickets.yaml", "sha256": "b10db9962e41e134f1374ebe04fdb8c3effa635fcb0f2d59f06498c1ae2f5b2a", "size_bytes": 29760}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `God Function: apply_tags` in `src/tagi/heuristics/tags.py:12`.\n\nFunction 'apply_tags' is oversized: CC=11, fan-out=10, mutations=16.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_god_function"}, "timestamp": "2026-09-17T23:06:54.291030+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "closed", "sync": {"github": {"id": "89", "key": "semcod/tagi#89", "url": "https://github.com/semcod/tagi/issues/89"}}, "updated_at": "2026-09-17T23:06:54.291030+00:00"}, "PLF-094": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-17T23:08:50.360840+00:00", "description": "\ncode2llm reports `God Function: build_report_header` in `src/tagi/utils/summary_helpers.py:9`.\n\nFunction 'build_report_header' is oversized: CC=1, fan-out=2, mutations=7.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "90", "files": ["src/tagi/utils/summary_helpers.py"], "history": [{"action": "created", "message": "code2llm reports `God Function: build_report_header` in `src/tagi/utils/summary_helpers.py:9`.\n\nFunction 'build_report_header' is oversized: CC=1, fan-out=2, mutations=7.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-17T23:08:50.360840+00:00"}], "id": "PLF-094", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `God Function: build_report_header` in `src/tagi/utils/summary_helpers.py:9`.\n\nFunction 'build_report_header' is oversized: CC=1, fan-out=2, mutations=7.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "code-smell", "god-function"], "metadata": {"deduplication_key": "PLF-094"}, "name": "Address code smell: God Function: build_report_header", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:god_function:src/tagi/utils/summary_helpers.py:9:God Function: build_report_header", "evidence": {"artifact": {"mtime_ns": 1789685545813892871, "path": "project/analysis.toon.yaml", "sha256": "56388ccd6ea846f313f89eee0672e29af4d29e58ce0898052bd8ff8ebb956a7b", "size_bytes": 10159}, "files": [{"mtime_ns": 1779814990412632237, "path": "src/tagi/utils/summary_helpers.py", "sha256": "a887228547f1b705ca84a96f28fc2d6e62d0ea14bf143f32faa9a31fe3d7c1f4", "size_bytes": 3017}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789685545874477122, "path": "project/planfile-tickets.yaml", "sha256": "b10db9962e41e134f1374ebe04fdb8c3effa635fcb0f2d59f06498c1ae2f5b2a", "size_bytes": 29760}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `God Function: build_report_header` in `src/tagi/utils/summary_helpers.py:9`.\n\nFunction 'build_report_header' is oversized: CC=1, fan-out=2, mutations=7.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_god_function"}, "timestamp": "2026-09-17T23:08:50.360840+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "closed", "sync": {"github": {"id": "90", "key": "semcod/tagi#90", "url": "https://github.com/semcod/tagi/issues/90"}}, "updated_at": "2026-09-17T23:08:50.360840+00:00"}, "PLF-109": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-18T09:38:21.536635+00:00", "description": "\ncode2llm reports `Data Clump: title, repo_path, body` in `src/tagi/cli/provider_commands.py:34`.\n\nArguments (title, repo_path, body) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "105", "files": ["src/tagi/cli/provider_commands.py"], "history": [{"action": "created", "message": "code2llm reports `Data Clump: title, repo_path, body` in `src/tagi/cli/provider_commands.py:34`.\n\nArguments (title, repo_path, body) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-18T09:38:21.536635+00:00"}], "id": "PLF-109", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `Data Clump: title, repo_path, body` in `src/tagi/cli/provider_commands.py:34`.\n\nArguments (title, repo_path, body) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "code-smell", "data-clump"], "metadata": {"deduplication_key": "PLF-109"}, "name": "Address code smell: Data Clump: title, repo_path, body", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:data_clump:src/tagi/cli/provider_commands.py:34:Data Clump: title, repo_path, body", "evidence": {"artifact": {"mtime_ns": 1789722832140537337, "path": "project/analysis.toon.yaml", "sha256": "9227c40940ca4b556af8287eff9e84ce13c73372481f6eeaf0baec8aca773183", "size_bytes": 10381}, "files": [{"mtime_ns": 1789683999494622908, "path": "src/tagi/cli/provider_commands.py", "sha256": "68ce18c77819dae347a71d285994bba864fa304bce74de2420ca81f96c3f8225", "size_bytes": 2695}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789722832246791207, "path": "project/planfile-tickets.yaml", "sha256": "7a9953a26921f7b5cc634a034b7a538112d1ddfd75b1718c00dd8d817d84ffa1", "size_bytes": 30378}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `Data Clump: title, repo_path, body` in `src/tagi/cli/provider_commands.py:34`.\n\nArguments (title, repo_path, body) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_data_clump"}, "timestamp": "2026-09-18T09:38:21.536635+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "closed", "sync": {"github": {"id": "105", "key": "semcod/tagi#105", "url": "https://github.com/semcod/tagi/issues/105"}}, "updated_at": "2026-09-18T09:38:21.536635+00:00"}, "PLF-118": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-18T14:31:50.817670+00:00", "description": "\ncode2llm reports `Data Clump: repo_path, title, body` in `src/tagi/cli/provider_commands.py:52`.\n\nArguments (repo_path, title, body) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "120", "files": ["src/tagi/cli/provider_commands.py"], "history": [{"action": "created", "message": "code2llm reports `Data Clump: repo_path, title, body` in `src/tagi/cli/provider_commands.py:52`.\n\nArguments (repo_path, title, body) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-18T14:31:50.817670+00:00"}], "id": "PLF-118", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `Data Clump: repo_path, title, body` in `src/tagi/cli/provider_commands.py:52`.\n\nArguments (repo_path, title, body) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "code-smell", "data-clump"], "metadata": {"deduplication_key": "PLF-118"}, "name": "Address code smell: Data Clump: repo_path, title, body", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:data_clump:src/tagi/cli/provider_commands.py:52:Data Clump: repo_path, title, body", "evidence": {"artifact": {"mtime_ns": 1789739375335946512, "path": "project/analysis.toon.yaml", "sha256": "e383157236def469e5391fba233c9fa81738ef3ca0eafbc8c835538ac4a7d28d", "size_bytes": 10289}, "files": [{"mtime_ns": 1789739346063914074, "path": "src/tagi/cli/provider_commands.py", "sha256": "68ce18c77819dae347a71d285994bba864fa304bce74de2420ca81f96c3f8225", "size_bytes": 2695}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789739375343946523, "path": "project/planfile-tickets.yaml", "sha256": "2d45686552b801deab82b10b66dedd6931f7dbc2cb2cdde8e0d1e76d2fdb06d8", "size_bytes": 29675}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `Data Clump: repo_path, title, body` in `src/tagi/cli/provider_commands.py:52`.\n\nArguments (repo_path, title, body) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_data_clump"}, "timestamp": "2026-09-18T14:31:50.817670+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "closed", "sync": {"github": {"id": "120", "key": "semcod/tagi#120", "url": "https://github.com/semcod/tagi/issues/120"}}, "updated_at": "2026-09-18T14:31:50.817670+00:00"}, "PLF-119": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-18T14:43:06.846910+00:00", "description": "\ncode2llm reports `src.tagi.utils.inspect_helpers.resolve_filtered_changes` at `src/tagi/utils/inspect_helpers.py:10` with cyclomatic complexity 17 (limit 15).\n\nExtract smaller functions, flatten conditionals, or split strategy branches. Re-run code2llm after the change and keep tests green.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "121", "files": ["src/tagi/utils/inspect_helpers.py"], "history": [{"action": "created", "message": "code2llm reports `src.tagi.utils.inspect_helpers.resolve_filtered_changes` at `src/tagi/utils/inspect_helpers.py:10` with cyclomatic complexity 17 (limit 15).\n\nExtract smaller functions, flatten conditionals, or split strategy branches. Re-run code2llm after the change and keep tests green.", "source": "koru task", "timestamp": "2026-09-18T14:43:06.846910+00:00"}], "id": "PLF-119", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `src.tagi.utils.inspect_helpers.resolve_filtered_changes` at `src/tagi/utils/inspect_helpers.py:10` with cyclomatic complexity 17 (limit 15).\n\nExtract smaller functions, flatten conditionals, or split strategy branches. Re-run code2llm after the change and keep tests green."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "refactor", "complexity"], "metadata": {"deduplication_key": "PLF-119"}, "name": "Reduce cyclomatic complexity: src.tagi.utils.inspect_helpers.resolve_filtered_changes (CC=17)", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:cc:src/tagi/utils/inspect_helpers.py:src.tagi.utils.inspect_helpers.resolve_filtered_changes", "evidence": {"artifact": {"mtime_ns": 1789742585715921903, "path": "project/analysis.toon.yaml", "sha256": "e9a3774622db919b2300b3dd93ce594a90a967409e255cdfb0080ffd22180384", "size_bytes": 10331}, "files": [{"mtime_ns": 1789740908491220682, "path": "src/tagi/utils/inspect_helpers.py", "sha256": "d344cd14a3264e66e6d12340f6dba4af3713defdc5d9c246f6aba695357c0ea3", "size_bytes": 3655}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789742585705778183, "path": "project/planfile-tickets.yaml", "sha256": "00e016113d76f457efd919f00242693f50364860d6fbf24ad2a4413700bab4cc", "size_bytes": 16625}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `src.tagi.utils.inspect_helpers.resolve_filtered_changes` at `src/tagi/utils/inspect_helpers.py:10` with cyclomatic complexity 17 (limit 15).\n\nExtract smaller functions, flatten conditionals, or split strategy branches. Re-run code2llm after the change and keep tests green.", "signal": "code2llm_cc"}, "timestamp": "2026-09-18T14:43:06.846910+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "closed", "sync": {"github": {"id": "121", "key": "semcod/tagi#121", "url": "https://github.com/semcod/tagi/issues/121"}}, "updated_at": "2026-09-18T14:43:06.846910+00:00"}, "PLF-120": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-18T14:47:32.219905+00:00", "description": "\ncode2llm reports `God Function: calculate_risk_score` in `src/tagi/heuristics/scoring.py:8`.\n\nFunction 'calculate_risk_score' is oversized: CC=7, fan-out=1, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "122", "files": ["src/tagi/heuristics/scoring.py"], "history": [{"action": "created", "message": "code2llm reports `God Function: calculate_risk_score` in `src/tagi/heuristics/scoring.py:8`.\n\nFunction 'calculate_risk_score' is oversized: CC=7, fan-out=1, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-18T14:47:32.219905+00:00"}], "id": "PLF-120", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `God Function: calculate_risk_score` in `src/tagi/heuristics/scoring.py:8`.\n\nFunction 'calculate_risk_score' is oversized: CC=7, fan-out=1, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "code-smell", "god-function"], "metadata": {"deduplication_key": "PLF-120"}, "name": "Address code smell: God Function: calculate_risk_score", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:god_function:src/tagi/heuristics/scoring.py:8:God Function: calculate_risk_score", "evidence": {"artifact": {"mtime_ns": 1789742585715921903, "path": "project/analysis.toon.yaml", "sha256": "e9a3774622db919b2300b3dd93ce594a90a967409e255cdfb0080ffd22180384", "size_bytes": 10331}, "files": [{"mtime_ns": 1779802847615519629, "path": "src/tagi/heuristics/scoring.py", "sha256": "d9dd32ed33121c23414ebae66d33fcd25489b6bcdc29342d9942e6a5fb33e652", "size_bytes": 777}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789742585705778183, "path": "project/planfile-tickets.yaml", "sha256": "00e016113d76f457efd919f00242693f50364860d6fbf24ad2a4413700bab4cc", "size_bytes": 16625}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `God Function: calculate_risk_score` in `src/tagi/heuristics/scoring.py:8`.\n\nFunction 'calculate_risk_score' is oversized: CC=7, fan-out=1, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_god_function"}, "timestamp": "2026-09-18T14:47:32.219905+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "closed", "sync": {"github": {"id": "122", "key": "semcod/tagi#122", "url": "https://github.com/semcod/tagi/issues/122"}}, "updated_at": "2026-09-18T14:47:32.219905+00:00"}, "PLF-126": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-18T15:46:34.272245+00:00", "description": "\ncode2llm reports `God Function: group_by_branch` in `src/tagi/planner/branch_grouper.py:7`.\n\nFunction 'group_by_branch' is oversized: CC=8, fan-out=9, mutations=12.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "128", "files": ["src/tagi/planner/branch_grouper.py"], "history": [{"action": "created", "message": "code2llm reports `God Function: group_by_branch` in `src/tagi/planner/branch_grouper.py:7`.\n\nFunction 'group_by_branch' is oversized: CC=8, fan-out=9, mutations=12.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-18T15:46:34.272245+00:00"}], "id": "PLF-126", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `God Function: group_by_branch` in `src/tagi/planner/branch_grouper.py:7`.\n\nFunction 'group_by_branch' is oversized: CC=8, fan-out=9, mutations=12.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "code-smell", "god-function"], "metadata": {"deduplication_key": "PLF-126"}, "name": "Address code smell: God Function: group_by_branch", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:god_function:src/tagi/planner/branch_grouper.py:7:God Function: group_by_branch", "evidence": {"artifact": {"mtime_ns": 1789742585715921903, "path": "project/analysis.toon.yaml", "sha256": "e9a3774622db919b2300b3dd93ce594a90a967409e255cdfb0080ffd22180384", "size_bytes": 10331}, "files": [{"mtime_ns": 1779810382570385717, "path": "src/tagi/planner/branch_grouper.py", "sha256": "7495814bca28a8dda4134f4498a644fc1c4bfaf3fbc141de4c45b3cfa5cd96eb", "size_bytes": 2702}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789742585705778183, "path": "project/planfile-tickets.yaml", "sha256": "00e016113d76f457efd919f00242693f50364860d6fbf24ad2a4413700bab4cc", "size_bytes": 16625}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `God Function: group_by_branch` in `src/tagi/planner/branch_grouper.py:7`.\n\nFunction 'group_by_branch' is oversized: CC=8, fan-out=9, mutations=12.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_god_function"}, "timestamp": "2026-09-18T15:46:34.272245+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "128", "key": "semcod/tagi#128", "url": "https://github.com/semcod/tagi/issues/128"}}, "updated_at": "2026-09-18T15:46:34.272245+00:00"}, "PLF-127": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-18T16:24:25.964206+00:00", "description": "\ncode2llm reports `God Function: hooks_command` in `src/tagi/cli/utility_commands.py:131`.\n\nFunction 'hooks_command' is oversized: CC=10, fan-out=11, mutations=0.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "129", "files": ["src/tagi/cli/utility_commands.py"], "history": [{"action": "created", "message": "code2llm reports `God Function: hooks_command` in `src/tagi/cli/utility_commands.py:131`.\n\nFunction 'hooks_command' is oversized: CC=10, fan-out=11, mutations=0.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-18T16:24:25.964206+00:00"}], "id": "PLF-127", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `God Function: hooks_command` in `src/tagi/cli/utility_commands.py:131`.\n\nFunction 'hooks_command' is oversized: CC=10, fan-out=11, mutations=0.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "code-smell", "god-function"], "metadata": {"deduplication_key": "PLF-127"}, "name": "Address code smell: God Function: hooks_command", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:god_function:src/tagi/cli/utility_commands.py:131:God Function: hooks_command", "evidence": {"artifact": {"mtime_ns": 1789742585715921903, "path": "project/analysis.toon.yaml", "sha256": "e9a3774622db919b2300b3dd93ce594a90a967409e255cdfb0080ffd22180384", "size_bytes": 10331}, "files": [{"mtime_ns": 1789740908490220674, "path": "src/tagi/cli/utility_commands.py", "sha256": "a78c23996b91860bd73b82a719e52a8fffcc68bf0e6756e7379c01e30d578c1a", "size_bytes": 7225}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789742585705778183, "path": "project/planfile-tickets.yaml", "sha256": "00e016113d76f457efd919f00242693f50364860d6fbf24ad2a4413700bab4cc", "size_bytes": 16625}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `God Function: hooks_command` in `src/tagi/cli/utility_commands.py:131`.\n\nFunction 'hooks_command' is oversized: CC=10, fan-out=11, mutations=0.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_god_function"}, "timestamp": "2026-09-18T16:24:25.964206+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "129", "key": "semcod/tagi#129", "url": "https://github.com/semcod/tagi/issues/129"}}, "updated_at": "2026-09-18T16:24:25.964206+00:00"}, "PLF-128": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-18T16:29:19.809691+00:00", "description": "\ncode2llm reports `God Function: inspect_command` in `src/tagi/cli/inspection_commands.py:19`.\n\nFunction 'inspect_command' is oversized: CC=7, fan-out=11, mutations=0.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "130", "files": ["src/tagi/cli/inspection_commands.py"], "history": [{"action": "created", "message": "code2llm reports `God Function: inspect_command` in `src/tagi/cli/inspection_commands.py:19`.\n\nFunction 'inspect_command' is oversized: CC=7, fan-out=11, mutations=0.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-18T16:29:19.809691+00:00"}], "id": "PLF-128", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `God Function: inspect_command` in `src/tagi/cli/inspection_commands.py:19`.\n\nFunction 'inspect_command' is oversized: CC=7, fan-out=11, mutations=0.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "code-smell", "god-function"], "metadata": {"deduplication_key": "PLF-128"}, "name": "Address code smell: God Function: inspect_command", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:god_function:src/tagi/cli/inspection_commands.py:19:God Function: inspect_command", "evidence": {"artifact": {"mtime_ns": 1789742585715921903, "path": "project/analysis.toon.yaml", "sha256": "e9a3774622db919b2300b3dd93ce594a90a967409e255cdfb0080ffd22180384", "size_bytes": 10331}, "files": [{"mtime_ns": 1789740908490220674, "path": "src/tagi/cli/inspection_commands.py", "sha256": "666b4944feb18f6673bbbfb664cda2a082ec1a041b67fdaff58a8d80976bd198", "size_bytes": 4284}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789742585705778183, "path": "project/planfile-tickets.yaml", "sha256": "00e016113d76f457efd919f00242693f50364860d6fbf24ad2a4413700bab4cc", "size_bytes": 16625}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `God Function: inspect_command` in `src/tagi/cli/inspection_commands.py:19`.\n\nFunction 'inspect_command' is oversized: CC=7, fan-out=11, mutations=0.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_god_function"}, "timestamp": "2026-09-18T16:29:19.809691+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "130", "key": "semcod/tagi#130", "url": "https://github.com/semcod/tagi/issues/130"}}, "updated_at": "2026-09-18T16:29:19.809691+00:00"}, "PLF-129": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-18T16:34:15.855415+00:00", "description": "\ncode2llm reports `God Function: preview_changes` in `src/tagi/planner/preview.py:29`.\n\nFunction 'preview_changes' is oversized: CC=3, fan-out=5, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "131", "files": ["src/tagi/planner/preview.py"], "history": [{"action": "created", "message": "code2llm reports `God Function: preview_changes` in `src/tagi/planner/preview.py:29`.\n\nFunction 'preview_changes' is oversized: CC=3, fan-out=5, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-18T16:34:15.855415+00:00"}], "id": "PLF-129", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `God Function: preview_changes` in `src/tagi/planner/preview.py:29`.\n\nFunction 'preview_changes' is oversized: CC=3, fan-out=5, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "code-smell", "god-function"], "metadata": {"deduplication_key": "PLF-129"}, "name": "Address code smell: God Function: preview_changes", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:god_function:src/tagi/planner/preview.py:29:God Function: preview_changes", "evidence": {"artifact": {"mtime_ns": 1789742585715921903, "path": "project/analysis.toon.yaml", "sha256": "e9a3774622db919b2300b3dd93ce594a90a967409e255cdfb0080ffd22180384", "size_bytes": 10331}, "files": [{"mtime_ns": 1789739375293946457, "path": "src/tagi/planner/preview.py", "sha256": "8d3998cd67c562eb08e3ae5ecdcf2feaaff4d9f1ca864344a214c44d81b83a41", "size_bytes": 1363}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789742585705778183, "path": "project/planfile-tickets.yaml", "sha256": "00e016113d76f457efd919f00242693f50364860d6fbf24ad2a4413700bab4cc", "size_bytes": 16625}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `God Function: preview_changes` in `src/tagi/planner/preview.py:29`.\n\nFunction 'preview_changes' is oversized: CC=3, fan-out=5, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_god_function"}, "timestamp": "2026-09-18T16:34:15.855415+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "131", "key": "semcod/tagi#131", "url": "https://github.com/semcod/tagi/issues/131"}}, "updated_at": "2026-09-18T16:34:15.855415+00:00"}, "PLF-131": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-18T16:49:07.021464+00:00", "description": "\n`project/analysis.toon.yaml` reports `resolve_filtered_changes` with CC=17 (limit=15), defined in `src/tagi/utils/inspect_helpers.py:10`. Extract sub-functions, simplify conditionals, or split into strategy pattern. Preserve behaviour — this is a pure refactor.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "133", "files": ["src/tagi/utils/inspect_helpers.py"], "history": [{"action": "created", "message": "`project/analysis.toon.yaml` reports `resolve_filtered_changes` with CC=17 (limit=15), defined in `src/tagi/utils/inspect_helpers.py:10`. Extract sub-functions, simplify conditionals, or split into strategy pattern. Preserve behaviour — this is a pure refactor.", "source": "koru task", "timestamp": "2026-09-18T16:49:07.021464+00:00"}], "id": "PLF-131", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "`project/analysis.toon.yaml` reports `resolve_filtered_changes` with CC=17 (limit=15), defined in `src/tagi/utils/inspect_helpers.py:10`. Extract sub-functions, simplify conditionals, or split into strategy pattern. Preserve behaviour — this is a pure refactor."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "refactor", "scan", "complexity"], "metadata": {"deduplication_key": "PLF-131"}, "name": "Reduce cyclomatic complexity: resolve_filtered_changes (CC=17, limit=15)", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "koru-scan:code2llm_cc:src/tagi/utils/inspect_helpers.py", "evidence": {"artifact": {"mtime_ns": 1789742585715921903, "path": "project/analysis.toon.yaml", "sha256": "e9a3774622db919b2300b3dd93ce594a90a967409e255cdfb0080ffd22180384", "size_bytes": 10331}, "kind": "code2llm_analysis", "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude '*.md' --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate the artifact and compare artifact.sha256 before assuming this ticket still reflects the current code."}, "input": "`project/analysis.toon.yaml` reports `resolve_filtered_changes` with CC=17 (limit=15), defined in `src/tagi/utils/inspect_helpers.py:10`. Extract sub-functions, simplify conditionals, or split into strategy pattern. Preserve behaviour — this is a pure refactor.", "signal": "code2llm_cc"}, "timestamp": "2026-09-18T16:49:07.021464+00:00", "tool": "koru-scan"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "133", "key": "semcod/tagi#133", "url": "https://github.com/semcod/tagi/issues/133"}}, "updated_at": "2026-09-18T16:49:07.021464+00:00"}, "PLF-132": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-18T16:49:07.642356+00:00", "description": "\nREFACTOR item from `project/analysis.toon.yaml`: **split 1 high-CC methods** (CC>15). Execute this refactor step; re-run the source.context.evidence.regenerate_command to verify.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "134", "files": ["project/analysis.toon.yaml"], "history": [{"action": "created", "message": "REFACTOR item from `project/analysis.toon.yaml`: **split 1 high-CC methods** (CC>15). Execute this refactor step; re-run the source.context.evidence.regenerate_command to verify.", "source": "koru task", "timestamp": "2026-09-18T16:49:07.642356+00:00"}], "id": "PLF-132", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "REFACTOR item from `project/analysis.toon.yaml`: **split 1 high-CC methods** (CC>15). Execute this refactor step; re-run the source.context.evidence.regenerate_command to verify."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "refactor", "scan"], "metadata": {"deduplication_key": "PLF-132"}, "name": "code2llm refactor: split 1 high-CC methods", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "semcod:code2llm:refactor:project/analysis.toon.yaml", "evidence": {"artifact": {"mtime_ns": 1789742585715921903, "path": "project/analysis.toon.yaml", "sha256": "e9a3774622db919b2300b3dd93ce594a90a967409e255cdfb0080ffd22180384", "size_bytes": 10331}, "kind": "code2llm_analysis", "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude '*.md' --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate the artifact and compare artifact.sha256 before assuming this ticket still reflects the current code."}, "input": "REFACTOR item from `project/analysis.toon.yaml`: **split 1 high-CC methods** (CC>15). Execute this refactor step; re-run the source.context.evidence.regenerate_command to verify.", "signal": "code2llm_refactor"}, "timestamp": "2026-09-18T16:49:07.642356+00:00", "tool": "koru-scan"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "134", "key": "semcod/tagi#134", "url": "https://github.com/semcod/tagi/issues/134"}}, "updated_at": "2026-09-18T16:49:07.642356+00:00"}, "PLF-135": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-18T19:36:57.323254+00:00", "description": "\ncode2llm reports `Shotgun Surgery: builder` in `src/tagi/utils/summary_helpers.py:71`.\n\nMutation of variable 'builder' spans 11 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "140", "files": ["src/tagi/utils/summary_helpers.py"], "history": [{"action": "created", "message": "code2llm reports `Shotgun Surgery: builder` in `src/tagi/utils/summary_helpers.py:71`.\n\nMutation of variable 'builder' spans 11 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-18T19:36:57.323254+00:00"}], "id": "PLF-135", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `Shotgun Surgery: builder` in `src/tagi/utils/summary_helpers.py:71`.\n\nMutation of variable 'builder' spans 11 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["planfile", "managed", "koru", "nl-task", "llm-ready", "priority-high", "priority: high", "code2llm", "code-smell", "shotgun-surgery"], "metadata": {"deduplication_key": "PLF-135"}, "name": "Address code smell: Shotgun Surgery: builder", "outputs": {"artifacts": [], "notes": []}, "priority": "high", "source": {"context": {"dedupe_key": "code2llm:smell:shotgun_surgery:src/tagi/utils/summary_helpers.py:71:Shotgun Surgery: builder", "evidence": {"artifact": {"mtime_ns": 1789760212841277131, "path": "project/analysis.toon.yaml", "sha256": "e779a23e78575a5ca1103e1494c9f5b9bf0ac7bdcb3ffbbab82e37914fa8de0a", "size_bytes": 10336}, "files": [{"mtime_ns": 1789760157304512513, "path": "src/tagi/utils/summary_helpers.py", "sha256": "5b80ca05e1202f10e13c9873597a0a11ddf86af9b7cdcb2a9bb2dfb60c233e6a", "size_bytes": 3117}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789760212873891603, "path": "project/planfile-tickets.yaml", "sha256": "d0c2d6eb3eb46612e13fa7d7f524e92e895a3f31556b19210c5499cec6308586", "size_bytes": 22328}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `Shotgun Surgery: builder` in `src/tagi/utils/summary_helpers.py:71`.\n\nMutation of variable 'builder' spans 11 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_shotgun_surgery"}, "timestamp": "2026-09-18T19:36:57.323254+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "140", "key": "semcod/tagi#140", "url": "https://github.com/semcod/tagi/issues/140"}}, "updated_at": "2026-09-18T19:36:57.323254+00:00"}, "PLF-136": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-18T19:41:42.348704+00:00", "description": "\ncode2llm reports `Shotgun Surgery: cmd` in `src/tagi/scanner/diff.py:6`.\n\nMutation of variable 'cmd' spans 13 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "141", "files": ["src/tagi/scanner/diff.py"], "history": [{"action": "created", "message": "code2llm reports `Shotgun Surgery: cmd` in `src/tagi/scanner/diff.py:6`.\n\nMutation of variable 'cmd' spans 13 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-18T19:41:42.348704+00:00"}], "id": "PLF-136", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `Shotgun Surgery: cmd` in `src/tagi/scanner/diff.py:6`.\n\nMutation of variable 'cmd' spans 13 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["planfile", "managed", "koru", "nl-task", "llm-ready", "priority-high", "priority: high", "code2llm", "code-smell", "shotgun-surgery"], "metadata": {"deduplication_key": "PLF-136"}, "name": "Address code smell: Shotgun Surgery: cmd", "outputs": {"artifacts": [], "notes": []}, "priority": "high", "source": {"context": {"dedupe_key": "code2llm:smell:shotgun_surgery:src/tagi/scanner/diff.py:6:Shotgun Surgery: cmd", "evidence": {"artifact": {"mtime_ns": 1789760212841277131, "path": "project/analysis.toon.yaml", "sha256": "e779a23e78575a5ca1103e1494c9f5b9bf0ac7bdcb3ffbbab82e37914fa8de0a", "size_bytes": 10336}, "files": [{"mtime_ns": 1779802548044288725, "path": "src/tagi/scanner/diff.py", "sha256": "5c96c6b90833c3d6205e40b53b402d2b1eca555c135ff8bbd9cd94f8931716f2", "size_bytes": 708}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789760212873891603, "path": "project/planfile-tickets.yaml", "sha256": "d0c2d6eb3eb46612e13fa7d7f524e92e895a3f31556b19210c5499cec6308586", "size_bytes": 22328}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `Shotgun Surgery: cmd` in `src/tagi/scanner/diff.py:6`.\n\nMutation of variable 'cmd' spans 13 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_shotgun_surgery"}, "timestamp": "2026-09-18T19:41:42.348704+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "141", "key": "semcod/tagi#141", "url": "https://github.com/semcod/tagi/issues/141"}}, "updated_at": "2026-09-18T19:41:42.348704+00:00"}, "PLF-137": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-18T19:46:39.220367+00:00", "description": "\ncode2llm reports `Shotgun Surgery: logger` in `src/tagi/utils/logger.py:9`.\n\nMutation of variable 'logger' spans 5 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "142", "files": ["src/tagi/utils/logger.py"], "history": [{"action": "created", "message": "code2llm reports `Shotgun Surgery: logger` in `src/tagi/utils/logger.py:9`.\n\nMutation of variable 'logger' spans 5 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-18T19:46:39.220367+00:00"}], "id": "PLF-137", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `Shotgun Surgery: logger` in `src/tagi/utils/logger.py:9`.\n\nMutation of variable 'logger' spans 5 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["planfile", "managed", "koru", "nl-task", "llm-ready", "priority-high", "priority: high", "code2llm", "code-smell", "shotgun-surgery"], "metadata": {"deduplication_key": "PLF-137"}, "name": "Address code smell: Shotgun Surgery: logger", "outputs": {"artifacts": [], "notes": []}, "priority": "high", "source": {"context": {"dedupe_key": "code2llm:smell:shotgun_surgery:src/tagi/utils/logger.py:9:Shotgun Surgery: logger", "evidence": {"artifact": {"mtime_ns": 1789760212841277131, "path": "project/analysis.toon.yaml", "sha256": "e779a23e78575a5ca1103e1494c9f5b9bf0ac7bdcb3ffbbab82e37914fa8de0a", "size_bytes": 10336}, "files": [{"mtime_ns": 1779809465287675064, "path": "src/tagi/utils/logger.py", "sha256": "25d7171aee4d351bc65d315acfa6d09d6e91491346c2ac3cca945577d7397c89", "size_bytes": 1747}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789760212873891603, "path": "project/planfile-tickets.yaml", "sha256": "d0c2d6eb3eb46612e13fa7d7f524e92e895a3f31556b19210c5499cec6308586", "size_bytes": 22328}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `Shotgun Surgery: logger` in `src/tagi/utils/logger.py:9`.\n\nMutation of variable 'logger' spans 5 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_shotgun_surgery"}, "timestamp": "2026-09-18T19:46:39.220367+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "142", "key": "semcod/tagi#142", "url": "https://github.com/semcod/tagi/issues/142"}}, "updated_at": "2026-09-18T19:46:39.220367+00:00"}, "PLF-138": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-18T19:51:27.884743+00:00", "description": "\ncode2llm reports `God Function: build_statistics_section` in `src/tagi/utils/summary_helpers.py:31`.\n\nFunction 'build_statistics_section' is oversized: CC=2, fan-out=6, mutations=7.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "143", "files": ["src/tagi/utils/summary_helpers.py"], "history": [{"action": "created", "message": "code2llm reports `God Function: build_statistics_section` in `src/tagi/utils/summary_helpers.py:31`.\n\nFunction 'build_statistics_section' is oversized: CC=2, fan-out=6, mutations=7.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-18T19:51:27.884743+00:00"}], "id": "PLF-138", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `God Function: build_statistics_section` in `src/tagi/utils/summary_helpers.py:31`.\n\nFunction 'build_statistics_section' is oversized: CC=2, fan-out=6, mutations=7.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "priority: normal", "code-smell", "god-function"], "metadata": {"deduplication_key": "PLF-138"}, "name": "Address code smell: God Function: build_statistics_section", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:god_function:src/tagi/utils/summary_helpers.py:31:God Function: build_statistics_section", "evidence": {"artifact": {"mtime_ns": 1789760212841277131, "path": "project/analysis.toon.yaml", "sha256": "e779a23e78575a5ca1103e1494c9f5b9bf0ac7bdcb3ffbbab82e37914fa8de0a", "size_bytes": 10336}, "files": [{"mtime_ns": 1789760157304512513, "path": "src/tagi/utils/summary_helpers.py", "sha256": "5b80ca05e1202f10e13c9873597a0a11ddf86af9b7cdcb2a9bb2dfb60c233e6a", "size_bytes": 3117}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789760212873891603, "path": "project/planfile-tickets.yaml", "sha256": "d0c2d6eb3eb46612e13fa7d7f524e92e895a3f31556b19210c5499cec6308586", "size_bytes": 22328}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `God Function: build_statistics_section` in `src/tagi/utils/summary_helpers.py:31`.\n\nFunction 'build_statistics_section' is oversized: CC=2, fan-out=6, mutations=7.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_god_function"}, "timestamp": "2026-09-18T19:51:27.884743+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "143", "key": "semcod/tagi#143", "url": "https://github.com/semcod/tagi/issues/143"}}, "updated_at": "2026-09-18T19:51:27.884743+00:00"}, "PLF-139": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-18T20:26:23.964964+00:00", "description": "\ncode2llm reports `God Function: build_tag_distribution_section` in `src/tagi/utils/summary_helpers.py:71`.\n\nFunction 'build_tag_distribution_section' is oversized: CC=5, fan-out=6, mutations=9.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "144", "files": ["src/tagi/utils/summary_helpers.py"], "history": [{"action": "created", "message": "code2llm reports `God Function: build_tag_distribution_section` in `src/tagi/utils/summary_helpers.py:71`.\n\nFunction 'build_tag_distribution_section' is oversized: CC=5, fan-out=6, mutations=9.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-18T20:26:23.964964+00:00"}], "id": "PLF-139", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `God Function: build_tag_distribution_section` in `src/tagi/utils/summary_helpers.py:71`.\n\nFunction 'build_tag_distribution_section' is oversized: CC=5, fan-out=6, mutations=9.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "priority: normal", "code-smell", "god-function"], "metadata": {"deduplication_key": "PLF-139"}, "name": "Address code smell: God Function: build_tag_distribution_section", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:god_function:src/tagi/utils/summary_helpers.py:71:God Function: build_tag_distribution_section", "evidence": {"artifact": {"mtime_ns": 1789760212841277131, "path": "project/analysis.toon.yaml", "sha256": "e779a23e78575a5ca1103e1494c9f5b9bf0ac7bdcb3ffbbab82e37914fa8de0a", "size_bytes": 10336}, "files": [{"mtime_ns": 1789760157304512513, "path": "src/tagi/utils/summary_helpers.py", "sha256": "5b80ca05e1202f10e13c9873597a0a11ddf86af9b7cdcb2a9bb2dfb60c233e6a", "size_bytes": 3117}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789760212873891603, "path": "project/planfile-tickets.yaml", "sha256": "d0c2d6eb3eb46612e13fa7d7f524e92e895a3f31556b19210c5499cec6308586", "size_bytes": 22328}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `God Function: build_tag_distribution_section` in `src/tagi/utils/summary_helpers.py:71`.\n\nFunction 'build_tag_distribution_section' is oversized: CC=5, fan-out=6, mutations=9.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_god_function"}, "timestamp": "2026-09-18T20:26:23.964964+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "144", "key": "semcod/tagi#144", "url": "https://github.com/semcod/tagi/issues/144"}}, "updated_at": "2026-09-18T20:26:23.964964+00:00"}, "PLF-140": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-18T20:31:21.515076+00:00", "description": "\ncode2llm reports `God Function: display_statistics_table` in `src/tagi/utils/inspect_helpers.py:109`.\n\nFunction 'display_statistics_table' is oversized: CC=1, fan-out=7, mutations=10.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "145", "files": ["src/tagi/utils/inspect_helpers.py"], "history": [{"action": "created", "message": "code2llm reports `God Function: display_statistics_table` in `src/tagi/utils/inspect_helpers.py:109`.\n\nFunction 'display_statistics_table' is oversized: CC=1, fan-out=7, mutations=10.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-18T20:31:21.515076+00:00"}], "id": "PLF-140", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `God Function: display_statistics_table` in `src/tagi/utils/inspect_helpers.py:109`.\n\nFunction 'display_statistics_table' is oversized: CC=1, fan-out=7, mutations=10.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "priority: normal", "code-smell", "god-function"], "metadata": {"deduplication_key": "PLF-140"}, "name": "Address code smell: God Function: display_statistics_table", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:god_function:src/tagi/utils/inspect_helpers.py:109:God Function: display_statistics_table", "evidence": {"artifact": {"mtime_ns": 1789760212841277131, "path": "project/analysis.toon.yaml", "sha256": "e779a23e78575a5ca1103e1494c9f5b9bf0ac7bdcb3ffbbab82e37914fa8de0a", "size_bytes": 10336}, "files": [{"mtime_ns": 1789760157304512513, "path": "src/tagi/utils/inspect_helpers.py", "sha256": "1c596a23769394791c6155c0d18ffff189732a3df1916a648adcfab4b50d7606", "size_bytes": 3639}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789760212873891603, "path": "project/planfile-tickets.yaml", "sha256": "d0c2d6eb3eb46612e13fa7d7f524e92e895a3f31556b19210c5499cec6308586", "size_bytes": 22328}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `God Function: display_statistics_table` in `src/tagi/utils/inspect_helpers.py:109`.\n\nFunction 'display_statistics_table' is oversized: CC=1, fan-out=7, mutations=10.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_god_function"}, "timestamp": "2026-09-18T20:31:21.515076+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "145", "key": "semcod/tagi#145", "url": "https://github.com/semcod/tagi/issues/145"}}, "updated_at": "2026-09-18T20:31:21.515076+00:00"}, "PLF-141": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-18T20:46:53.090400+00:00", "description": "\ncode2llm reports `Shotgun Surgery: result` in `src/tagi/scanner/diff.py:20`.\n\nMutation of variable 'result' spans 24 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "147", "files": ["src/tagi/scanner/diff.py"], "history": [{"action": "created", "message": "code2llm reports `Shotgun Surgery: result` in `src/tagi/scanner/diff.py:20`.\n\nMutation of variable 'result' spans 24 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-18T20:46:53.090400+00:00"}], "id": "PLF-141", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `Shotgun Surgery: result` in `src/tagi/scanner/diff.py:20`.\n\nMutation of variable 'result' spans 24 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["planfile", "managed", "koru", "nl-task", "llm-ready", "priority-high", "priority: high", "code2llm", "code-smell", "shotgun-surgery"], "metadata": {"deduplication_key": "PLF-141"}, "name": "Address code smell: Shotgun Surgery: result", "outputs": {"artifacts": [], "notes": []}, "priority": "high", "source": {"context": {"dedupe_key": "code2llm:smell:shotgun_surgery:src/tagi/scanner/diff.py:20:Shotgun Surgery: result", "evidence": {"artifact": {"mtime_ns": 1789764409471628814, "path": "project/analysis.toon.yaml", "sha256": "8272c84ad525516fbd4040cd83b4fb110a3f4e91aa510378427c65686d9f3018", "size_bytes": 10424}, "files": [{"mtime_ns": 1779802548044288725, "path": "src/tagi/scanner/diff.py", "sha256": "5c96c6b90833c3d6205e40b53b402d2b1eca555c135ff8bbd9cd94f8931716f2", "size_bytes": 708}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789764409534879854, "path": "project/planfile-tickets.yaml", "sha256": "e229a798269d410a9ccbb63568a783f63de2465f87ad7c4d3acd2a5c0b1ec43a", "size_bytes": 16701}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `Shotgun Surgery: result` in `src/tagi/scanner/diff.py:20`.\n\nMutation of variable 'result' spans 24 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_shotgun_surgery"}, "timestamp": "2026-09-18T20:46:53.090400+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "147", "key": "semcod/tagi#147", "url": "https://github.com/semcod/tagi/issues/147"}}, "updated_at": "2026-09-18T20:46:53.090400+00:00"}, "PLF-142": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-18T20:51:58.051382+00:00", "description": "\ncode2llm reports `Data Clump: repo_path, body, title` in `src/tagi/cli/provider_commands.py:34`.\n\nArguments (repo_path, body, title) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "148", "files": ["src/tagi/cli/provider_commands.py"], "history": [{"action": "created", "message": "code2llm reports `Data Clump: repo_path, body, title` in `src/tagi/cli/provider_commands.py:34`.\n\nArguments (repo_path, body, title) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-18T20:51:58.051382+00:00"}], "id": "PLF-142", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `Data Clump: repo_path, body, title` in `src/tagi/cli/provider_commands.py:34`.\n\nArguments (repo_path, body, title) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "priority: normal", "code-smell", "data-clump"], "metadata": {"deduplication_key": "PLF-142"}, "name": "Address code smell: Data Clump: repo_path, body, title", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:data_clump:src/tagi/cli/provider_commands.py:34:Data Clump: repo_path, body, title", "evidence": {"artifact": {"mtime_ns": 1789764409471628814, "path": "project/analysis.toon.yaml", "sha256": "8272c84ad525516fbd4040cd83b4fb110a3f4e91aa510378427c65686d9f3018", "size_bytes": 10424}, "files": [{"mtime_ns": 1789739346063914074, "path": "src/tagi/cli/provider_commands.py", "sha256": "68ce18c77819dae347a71d285994bba864fa304bce74de2420ca81f96c3f8225", "size_bytes": 2695}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789764409534879854, "path": "project/planfile-tickets.yaml", "sha256": "e229a798269d410a9ccbb63568a783f63de2465f87ad7c4d3acd2a5c0b1ec43a", "size_bytes": 16701}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `Data Clump: repo_path, body, title` in `src/tagi/cli/provider_commands.py:34`.\n\nArguments (repo_path, body, title) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_data_clump"}, "timestamp": "2026-09-18T20:51:58.051382+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "148", "key": "semcod/tagi#148", "url": "https://github.com/semcod/tagi/issues/148"}}, "updated_at": "2026-09-18T20:51:58.051382+00:00"}, "PLF-143": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-18T21:27:31.437891+00:00", "description": "\ncode2llm reports `God Function: group_changes` in `src/tagi/planner/grouper.py:10`.\n\nFunction 'group_changes' is oversized: CC=5, fan-out=9, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "149", "files": ["src/tagi/planner/grouper.py"], "history": [{"action": "created", "message": "code2llm reports `God Function: group_changes` in `src/tagi/planner/grouper.py:10`.\n\nFunction 'group_changes' is oversized: CC=5, fan-out=9, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-18T21:27:31.437891+00:00"}], "id": "PLF-143", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `God Function: group_changes` in `src/tagi/planner/grouper.py:10`.\n\nFunction 'group_changes' is oversized: CC=5, fan-out=9, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "priority: normal", "code-smell", "god-function"], "metadata": {"deduplication_key": "PLF-143"}, "name": "Address code smell: God Function: group_changes", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:god_function:src/tagi/planner/grouper.py:10:God Function: group_changes", "evidence": {"artifact": {"mtime_ns": 1789764409471628814, "path": "project/analysis.toon.yaml", "sha256": "8272c84ad525516fbd4040cd83b4fb110a3f4e91aa510378427c65686d9f3018", "size_bytes": 10424}, "files": [{"mtime_ns": 1789760157304512513, "path": "src/tagi/planner/grouper.py", "sha256": "4f19a41a6d0fb1cc5e82e8210e9a0087aab90c22cb5b01a3879a9aff253b83f0", "size_bytes": 2197}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789764409534879854, "path": "project/planfile-tickets.yaml", "sha256": "e229a798269d410a9ccbb63568a783f63de2465f87ad7c4d3acd2a5c0b1ec43a", "size_bytes": 16701}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `God Function: group_changes` in `src/tagi/planner/grouper.py:10`.\n\nFunction 'group_changes' is oversized: CC=5, fan-out=9, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_god_function"}, "timestamp": "2026-09-18T21:27:31.437891+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "149", "key": "semcod/tagi#149", "url": "https://github.com/semcod/tagi/issues/149"}}, "updated_at": "2026-09-18T21:27:31.437891+00:00"}, "PLF-144": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-18T21:45:19.766961+00:00", "description": "\ncode2llm reports `Shotgun Surgery: total_lines` in `src/tagi/utils/inspect_helpers.py:96`.\n\nMutation of variable 'total_lines' spans 7 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "151", "files": ["src/tagi/utils/inspect_helpers.py"], "history": [{"action": "created", "message": "code2llm reports `Shotgun Surgery: total_lines` in `src/tagi/utils/inspect_helpers.py:96`.\n\nMutation of variable 'total_lines' spans 7 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-18T21:45:19.766961+00:00"}], "id": "PLF-144", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `Shotgun Surgery: total_lines` in `src/tagi/utils/inspect_helpers.py:96`.\n\nMutation of variable 'total_lines' spans 7 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["planfile", "managed", "koru", "nl-task", "llm-ready", "priority-high", "priority: high", "code2llm", "code-smell", "shotgun-surgery"], "metadata": {"deduplication_key": "PLF-144"}, "name": "Address code smell: Shotgun Surgery: total_lines", "outputs": {"artifacts": [], "notes": []}, "priority": "high", "source": {"context": {"dedupe_key": "code2llm:smell:shotgun_surgery:src/tagi/utils/inspect_helpers.py:96:Shotgun Surgery: total_lines", "evidence": {"artifact": {"mtime_ns": 1789767907486023009, "path": "project/analysis.toon.yaml", "sha256": "bffe51d44d6fb6464a866f3f92775ba60121d5c8ee5912e7e28815233ae3b49c", "size_bytes": 10335}, "files": [{"mtime_ns": 1789760157304512513, "path": "src/tagi/utils/inspect_helpers.py", "sha256": "1c596a23769394791c6155c0d18ffff189732a3df1916a648adcfab4b50d7606", "size_bytes": 3639}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789767907544471268, "path": "project/planfile-tickets.yaml", "sha256": "a1a17bb7fff1116657c2c5c8dc0925997c5d311418d5770edcae36e65433c9b5", "size_bytes": 16073}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `Shotgun Surgery: total_lines` in `src/tagi/utils/inspect_helpers.py:96`.\n\nMutation of variable 'total_lines' spans 7 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_shotgun_surgery"}, "timestamp": "2026-09-18T21:45:19.766961+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "151", "key": "semcod/tagi#151", "url": "https://github.com/semcod/tagi/issues/151"}}, "updated_at": "2026-09-18T21:45:19.766961+00:00"}, "PLF-145": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-18T21:51:29.650993+00:00", "description": "\ncode2llm reports `Data Clump: body, title, repo_path` in `src/tagi/cli/provider_commands.py:34`.\n\nArguments (body, title, repo_path) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "152", "files": ["src/tagi/cli/provider_commands.py"], "history": [{"action": "created", "message": "code2llm reports `Data Clump: body, title, repo_path` in `src/tagi/cli/provider_commands.py:34`.\n\nArguments (body, title, repo_path) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-18T21:51:29.650993+00:00"}], "id": "PLF-145", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `Data Clump: body, title, repo_path` in `src/tagi/cli/provider_commands.py:34`.\n\nArguments (body, title, repo_path) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "priority: normal", "code-smell", "data-clump"], "metadata": {"deduplication_key": "PLF-145"}, "name": "Address code smell: Data Clump: body, title, repo_path", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:data_clump:src/tagi/cli/provider_commands.py:34:Data Clump: body, title, repo_path", "evidence": {"artifact": {"mtime_ns": 1789767907486023009, "path": "project/analysis.toon.yaml", "sha256": "bffe51d44d6fb6464a866f3f92775ba60121d5c8ee5912e7e28815233ae3b49c", "size_bytes": 10335}, "files": [{"mtime_ns": 1789739346063914074, "path": "src/tagi/cli/provider_commands.py", "sha256": "68ce18c77819dae347a71d285994bba864fa304bce74de2420ca81f96c3f8225", "size_bytes": 2695}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789767907544471268, "path": "project/planfile-tickets.yaml", "sha256": "a1a17bb7fff1116657c2c5c8dc0925997c5d311418d5770edcae36e65433c9b5", "size_bytes": 16073}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `Data Clump: body, title, repo_path` in `src/tagi/cli/provider_commands.py:34`.\n\nArguments (body, title, repo_path) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_data_clump"}, "timestamp": "2026-09-18T21:51:29.650993+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "152", "key": "semcod/tagi#152", "url": "https://github.com/semcod/tagi/issues/152"}}, "updated_at": "2026-09-18T21:51:29.650993+00:00"}, "PLF-146": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-19T06:26:13.380402+00:00", "description": "\ncode2llm reports `Shotgun Surgery: path_lower` in `src/tagi/heuristics/metrics.py:46`.\n\nMutation of variable 'path_lower' spans 8 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "153", "files": ["src/tagi/heuristics/metrics.py"], "history": [{"action": "created", "message": "code2llm reports `Shotgun Surgery: path_lower` in `src/tagi/heuristics/metrics.py:46`.\n\nMutation of variable 'path_lower' spans 8 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-19T06:26:13.380402+00:00"}], "id": "PLF-146", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `Shotgun Surgery: path_lower` in `src/tagi/heuristics/metrics.py:46`.\n\nMutation of variable 'path_lower' spans 8 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["planfile", "managed", "koru", "nl-task", "llm-ready", "priority-high", "priority: high", "code2llm", "code-smell", "shotgun-surgery"], "metadata": {"deduplication_key": "PLF-146"}, "name": "Address code smell: Shotgun Surgery: path_lower", "outputs": {"artifacts": [], "notes": []}, "priority": "high", "source": {"context": {"dedupe_key": "code2llm:smell:shotgun_surgery:src/tagi/heuristics/metrics.py:46:Shotgun Surgery: path_lower", "evidence": {"artifact": {"mtime_ns": 1789799169500661533, "path": "project/analysis.toon.yaml", "sha256": "e121c107d051daf013a3c36bbcbc8717b86b66089c73a3586f38da06dbdec891", "size_bytes": 10356}, "files": [{"mtime_ns": 1779811310790143885, "path": "src/tagi/heuristics/metrics.py", "sha256": "dcd2cc0255c4f2ee3eee8aaae72af3e54f0aa6a78598d290d61eb44299401b2d", "size_bytes": 6521}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789799169537365843, "path": "project/planfile-tickets.yaml", "sha256": "1d4adc5d27067e26cec142ccc46490afbb9b85cb5d197c470f6353698b37aceb", "size_bytes": 17914}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `Shotgun Surgery: path_lower` in `src/tagi/heuristics/metrics.py:46`.\n\nMutation of variable 'path_lower' spans 8 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_shotgun_surgery"}, "timestamp": "2026-09-19T06:26:13.380402+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "153", "key": "semcod/tagi#153", "url": "https://github.com/semcod/tagi/issues/153"}}, "updated_at": "2026-09-19T06:26:13.380402+00:00"}, "PLF-147": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-19T06:31:54.694978+00:00", "description": "\ncode2llm reports `Shotgun Surgery: tags` in `src/tagi/composer/formats.py:16`.\n\nMutation of variable 'tags' spans 6 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "154", "files": ["src/tagi/composer/formats.py"], "history": [{"action": "created", "message": "code2llm reports `Shotgun Surgery: tags` in `src/tagi/composer/formats.py:16`.\n\nMutation of variable 'tags' spans 6 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-19T06:31:54.694978+00:00"}], "id": "PLF-147", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `Shotgun Surgery: tags` in `src/tagi/composer/formats.py:16`.\n\nMutation of variable 'tags' spans 6 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["planfile", "managed", "koru", "nl-task", "llm-ready", "priority-high", "priority: high", "code2llm", "code-smell", "shotgun-surgery"], "metadata": {"deduplication_key": "PLF-147"}, "name": "Address code smell: Shotgun Surgery: tags", "outputs": {"artifacts": [], "notes": []}, "priority": "high", "source": {"context": {"dedupe_key": "code2llm:smell:shotgun_surgery:src/tagi/composer/formats.py:16:Shotgun Surgery: tags", "evidence": {"artifact": {"mtime_ns": 1789799169500661533, "path": "project/analysis.toon.yaml", "sha256": "e121c107d051daf013a3c36bbcbc8717b86b66089c73a3586f38da06dbdec891", "size_bytes": 10356}, "files": [{"mtime_ns": 1789764358606193196, "path": "src/tagi/composer/formats.py", "sha256": "f83369fc3a57d03450699627061999b0e07c463e547289218fda64626fb0e6c0", "size_bytes": 3495}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789799169537365843, "path": "project/planfile-tickets.yaml", "sha256": "1d4adc5d27067e26cec142ccc46490afbb9b85cb5d197c470f6353698b37aceb", "size_bytes": 17914}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `Shotgun Surgery: tags` in `src/tagi/composer/formats.py:16`.\n\nMutation of variable 'tags' spans 6 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_shotgun_surgery"}, "timestamp": "2026-09-19T06:31:54.694978+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "154", "key": "semcod/tagi#154", "url": "https://github.com/semcod/tagi/issues/154"}}, "updated_at": "2026-09-19T06:31:54.694978+00:00"}, "PLF-148": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-19T07:27:50.494870+00:00", "description": "\ncode2llm reports `Shotgun Surgery: result` in `src/tagi/analyzer/dependency_graph.py:63`.\n\nMutation of variable 'result' spans 21 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "156", "files": ["src/tagi/analyzer/dependency_graph.py"], "history": [{"action": "created", "message": "code2llm reports `Shotgun Surgery: result` in `src/tagi/analyzer/dependency_graph.py:63`.\n\nMutation of variable 'result' spans 21 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-19T07:27:50.494870+00:00"}], "id": "PLF-148", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `Shotgun Surgery: result` in `src/tagi/analyzer/dependency_graph.py:63`.\n\nMutation of variable 'result' spans 21 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["planfile", "managed", "koru", "nl-task", "llm-ready", "priority-high", "priority: high", "code2llm", "code-smell", "shotgun-surgery"], "metadata": {"deduplication_key": "PLF-148"}, "name": "Address code smell: Shotgun Surgery: result", "outputs": {"artifacts": [], "notes": []}, "priority": "high", "source": {"context": {"dedupe_key": "code2llm:smell:shotgun_surgery:src/tagi/analyzer/dependency_graph.py:63:Shotgun Surgery: result", "evidence": {"artifact": {"mtime_ns": 1789802857834310989, "path": "project/analysis.toon.yaml", "sha256": "44a5f094bf6499c25df8785d2a63dd595472e178a113134af703aac0487df20a", "size_bytes": 10359}, "files": [{"mtime_ns": 1779810400712577609, "path": "src/tagi/analyzer/dependency_graph.py", "sha256": "56c60106b3e4d548089071146800fdcc6eddfdcb2b14c53bce8d7532487723bf", "size_bytes": 5250}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789802857902888579, "path": "project/planfile-tickets.yaml", "sha256": "c9019adbb39ec2478f27730553edf309610f894cd81234454f75961b809bd01d", "size_bytes": 17909}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `Shotgun Surgery: result` in `src/tagi/analyzer/dependency_graph.py:63`.\n\nMutation of variable 'result' spans 21 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_shotgun_surgery"}, "timestamp": "2026-09-19T07:27:50.494870+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "156", "key": "semcod/tagi#156", "url": "https://github.com/semcod/tagi/issues/156"}}, "updated_at": "2026-09-19T07:27:50.494870+00:00"}, "PLF-149": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-19T08:19:14.641869+00:00", "description": "\ncode2llm reports `God Function: publish_command` in `src/tagi/cli/publishing_commands.py:23`.\n\nFunction 'publish_command' is oversized: CC=11, fan-out=14, mutations=0.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "158", "files": ["src/tagi/cli/publishing_commands.py"], "history": [{"action": "created", "message": "code2llm reports `God Function: publish_command` in `src/tagi/cli/publishing_commands.py:23`.\n\nFunction 'publish_command' is oversized: CC=11, fan-out=14, mutations=0.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-19T08:19:14.641869+00:00"}], "id": "PLF-149", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `God Function: publish_command` in `src/tagi/cli/publishing_commands.py:23`.\n\nFunction 'publish_command' is oversized: CC=11, fan-out=14, mutations=0.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "priority: normal", "code-smell", "god-function"], "metadata": {"deduplication_key": "PLF-149"}, "name": "Address code smell: God Function: publish_command", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:god_function:src/tagi/cli/publishing_commands.py:23:God Function: publish_command", "evidence": {"artifact": {"mtime_ns": 1789805947979310038, "path": "project/analysis.toon.yaml", "sha256": "ff985a6d1df91bec113e0985da69266b7986b65971924ccd9f4fa7cbaea12c51", "size_bytes": 10323}, "files": [{"mtime_ns": 1789740908490220674, "path": "src/tagi/cli/publishing_commands.py", "sha256": "f11201cd601fcd3d52ba6ec5ff5b958f5663f79327593c81377c25c83574a07e", "size_bytes": 5238}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789805948011262070, "path": "project/planfile-tickets.yaml", "sha256": "f8d503084189f0acc6b3277c59858501898b3b2ea7986cead8d6db848b15eb71", "size_bytes": 15477}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `God Function: publish_command` in `src/tagi/cli/publishing_commands.py:23`.\n\nFunction 'publish_command' is oversized: CC=11, fan-out=14, mutations=0.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_god_function"}, "timestamp": "2026-09-19T08:19:14.641869+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "158", "key": "semcod/tagi#158", "url": "https://github.com/semcod/tagi/issues/158"}}, "updated_at": "2026-09-19T08:19:14.641869+00:00"}, "PLF-150": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-19T08:40:27.418771+00:00", "description": "\ncode2llm reports `Shotgun Surgery: result` in `src/tagi/scanner/files.py:6`.\n\nMutation of variable 'result' spans 21 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "160", "files": ["src/tagi/scanner/files.py"], "history": [{"action": "created", "message": "code2llm reports `Shotgun Surgery: result` in `src/tagi/scanner/files.py:6`.\n\nMutation of variable 'result' spans 21 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-19T08:40:27.418771+00:00"}], "id": "PLF-150", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `Shotgun Surgery: result` in `src/tagi/scanner/files.py:6`.\n\nMutation of variable 'result' spans 21 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["planfile", "managed", "koru", "nl-task", "llm-ready", "priority-high", "priority: high", "code2llm", "code-smell", "shotgun-surgery"], "metadata": {"deduplication_key": "PLF-150"}, "name": "Address code smell: Shotgun Surgery: result", "outputs": {"artifacts": [], "notes": []}, "priority": "high", "source": {"context": {"dedupe_key": "code2llm:smell:shotgun_surgery:src/tagi/scanner/files.py:6:Shotgun Surgery: result", "evidence": {"artifact": {"mtime_ns": 1789807219128678462, "path": "project/analysis.toon.yaml", "sha256": "a9502e24eae6c96a2813522009e1147c99df0b92b64fc43761c84a0421cc05d6", "size_bytes": 10335}, "files": [{"mtime_ns": 1789767804220314391, "path": "src/tagi/scanner/files.py", "sha256": "1ce0abad16143ad14121aeb0637546495be090e81833345c8be620477c946379", "size_bytes": 926}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789807219187356177, "path": "project/planfile-tickets.yaml", "sha256": "09f4267be8bbb0b623e89df1b4ad1ff583984dcab632ff1913d74642fffd254a", "size_bytes": 16076}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `Shotgun Surgery: result` in `src/tagi/scanner/files.py:6`.\n\nMutation of variable 'result' spans 21 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_shotgun_surgery"}, "timestamp": "2026-09-19T08:40:27.418771+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "160", "key": "semcod/tagi#160", "url": "https://github.com/semcod/tagi/issues/160"}}, "updated_at": "2026-09-19T08:40:27.418771+00:00"}, "PLF-151": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-19T09:18:02.657696+00:00", "description": "\ncode2llm reports `Shotgun Surgery: total_lines` in `src/tagi/utils/send_helpers.py:8`.\n\nMutation of variable 'total_lines' spans 7 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "161", "files": ["src/tagi/utils/send_helpers.py"], "history": [{"action": "created", "message": "code2llm reports `Shotgun Surgery: total_lines` in `src/tagi/utils/send_helpers.py:8`.\n\nMutation of variable 'total_lines' spans 7 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-19T09:18:02.657696+00:00"}], "id": "PLF-151", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `Shotgun Surgery: total_lines` in `src/tagi/utils/send_helpers.py:8`.\n\nMutation of variable 'total_lines' spans 7 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["planfile", "managed", "koru", "nl-task", "llm-ready", "priority-high", "priority: high", "code2llm", "code-smell", "shotgun-surgery"], "metadata": {"deduplication_key": "PLF-151"}, "name": "Address code smell: Shotgun Surgery: total_lines", "outputs": {"artifacts": [], "notes": []}, "priority": "high", "source": {"context": {"dedupe_key": "code2llm:smell:shotgun_surgery:src/tagi/utils/send_helpers.py:8:Shotgun Surgery: total_lines", "evidence": {"artifact": {"mtime_ns": 1789807219128678462, "path": "project/analysis.toon.yaml", "sha256": "a9502e24eae6c96a2813522009e1147c99df0b92b64fc43761c84a0421cc05d6", "size_bytes": 10335}, "files": [{"mtime_ns": 1789807158230776613, "path": "src/tagi/utils/send_helpers.py", "sha256": "4e906f5b078ec49cd7523dfc93f794833dc887242454c6dca376f8af17483733", "size_bytes": 847}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789807219187356177, "path": "project/planfile-tickets.yaml", "sha256": "09f4267be8bbb0b623e89df1b4ad1ff583984dcab632ff1913d74642fffd254a", "size_bytes": 16076}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `Shotgun Surgery: total_lines` in `src/tagi/utils/send_helpers.py:8`.\n\nMutation of variable 'total_lines' spans 7 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_shotgun_surgery"}, "timestamp": "2026-09-19T09:18:02.657696+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "161", "key": "semcod/tagi#161", "url": "https://github.com/semcod/tagi/issues/161"}}, "updated_at": "2026-09-19T09:18:02.657696+00:00"}, "PLF-152": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-19T09:23:37.677573+00:00", "description": "\ncode2llm reports `Data Clump: title, body, repo_path` in `src/tagi/cli/provider_commands.py:34`.\n\nArguments (title, body, repo_path) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "162", "files": ["src/tagi/cli/provider_commands.py"], "history": [{"action": "created", "message": "code2llm reports `Data Clump: title, body, repo_path` in `src/tagi/cli/provider_commands.py:34`.\n\nArguments (title, body, repo_path) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-19T09:23:37.677573+00:00"}], "id": "PLF-152", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `Data Clump: title, body, repo_path` in `src/tagi/cli/provider_commands.py:34`.\n\nArguments (title, body, repo_path) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "priority: normal", "code-smell", "data-clump"], "metadata": {"deduplication_key": "PLF-152"}, "name": "Address code smell: Data Clump: title, body, repo_path", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:data_clump:src/tagi/cli/provider_commands.py:34:Data Clump: title, body, repo_path", "evidence": {"artifact": {"mtime_ns": 1789807219128678462, "path": "project/analysis.toon.yaml", "sha256": "a9502e24eae6c96a2813522009e1147c99df0b92b64fc43761c84a0421cc05d6", "size_bytes": 10335}, "files": [{"mtime_ns": 1789739346063914074, "path": "src/tagi/cli/provider_commands.py", "sha256": "68ce18c77819dae347a71d285994bba864fa304bce74de2420ca81f96c3f8225", "size_bytes": 2695}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789807219187356177, "path": "project/planfile-tickets.yaml", "sha256": "09f4267be8bbb0b623e89df1b4ad1ff583984dcab632ff1913d74642fffd254a", "size_bytes": 16076}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `Data Clump: title, body, repo_path` in `src/tagi/cli/provider_commands.py:34`.\n\nArguments (title, body, repo_path) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_data_clump"}, "timestamp": "2026-09-19T09:23:37.677573+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "162", "key": "semcod/tagi#162", "url": "https://github.com/semcod/tagi/issues/162"}}, "updated_at": "2026-09-19T09:23:37.677573+00:00"}, "PLF-153": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-19T09:36:55.436585+00:00", "description": "\ncode2llm reports `Shotgun Surgery: result` in `src/tagi/scanner/status.py:11`.\n\nMutation of variable 'result' spans 21 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "164", "files": ["src/tagi/scanner/status.py"], "history": [{"action": "created", "message": "code2llm reports `Shotgun Surgery: result` in `src/tagi/scanner/status.py:11`.\n\nMutation of variable 'result' spans 21 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-19T09:36:55.436585+00:00"}], "id": "PLF-153", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `Shotgun Surgery: result` in `src/tagi/scanner/status.py:11`.\n\nMutation of variable 'result' spans 21 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["planfile", "managed", "koru", "nl-task", "llm-ready", "priority-high", "priority: high", "code2llm", "code-smell", "shotgun-surgery"], "metadata": {"deduplication_key": "PLF-153"}, "name": "Address code smell: Shotgun Surgery: result", "outputs": {"artifacts": [], "notes": []}, "priority": "high", "source": {"context": {"dedupe_key": "code2llm:smell:shotgun_surgery:src/tagi/scanner/status.py:11:Shotgun Surgery: result", "evidence": {"artifact": {"mtime_ns": 1789810611546472552, "path": "project/analysis.toon.yaml", "sha256": "090d0a720b05f5191311983d22448bcf4753a2b60aa85c9ec6774f82c106a062", "size_bytes": 10253}, "files": [{"mtime_ns": 1789802617196896179, "path": "src/tagi/scanner/status.py", "sha256": "9b3ee07333cf0ae9ffcc6f3b02ead6d78b0c482d9994a0f4c84b528e9c944c29", "size_bytes": 1793}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789810611575073648, "path": "project/planfile-tickets.yaml", "sha256": "35e39935b4bf719d67de6de49341d2513dcd8a8946734749853b959382267ca0", "size_bytes": 16691}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `Shotgun Surgery: result` in `src/tagi/scanner/status.py:11`.\n\nMutation of variable 'result' spans 21 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_shotgun_surgery"}, "timestamp": "2026-09-19T09:36:55.436585+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "164", "key": "semcod/tagi#164", "url": "https://github.com/semcod/tagi/issues/164"}}, "updated_at": "2026-09-19T09:36:55.436585+00:00"}, "PLF-154": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-19T10:22:37.567988+00:00", "description": "\ncode2llm reports `God Function: scan_repo` in `src/tagi/scanner/status.py:11`.\n\nFunction 'scan_repo' is oversized: CC=7, fan-out=15, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "166", "files": ["src/tagi/scanner/status.py"], "history": [{"action": "created", "message": "code2llm reports `God Function: scan_repo` in `src/tagi/scanner/status.py:11`.\n\nFunction 'scan_repo' is oversized: CC=7, fan-out=15, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-19T10:22:37.567988+00:00"}], "id": "PLF-154", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `God Function: scan_repo` in `src/tagi/scanner/status.py:11`.\n\nFunction 'scan_repo' is oversized: CC=7, fan-out=15, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "priority: normal", "code-smell", "god-function"], "metadata": {"deduplication_key": "PLF-154"}, "name": "Address code smell: God Function: scan_repo", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:god_function:src/tagi/scanner/status.py:11:God Function: scan_repo", "evidence": {"artifact": {"mtime_ns": 1789813353805427459, "path": "project/analysis.toon.yaml", "sha256": "f1d18ecd10d02bf68405fbaa6d1f4aed3810ef5648f6751abd385aac2c885d3f", "size_bytes": 10381}, "files": [{"mtime_ns": 1789802617196896179, "path": "src/tagi/scanner/status.py", "sha256": "9b3ee07333cf0ae9ffcc6f3b02ead6d78b0c482d9994a0f4c84b528e9c944c29", "size_bytes": 1793}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789813353833486323, "path": "project/planfile-tickets.yaml", "sha256": "b4eaec2f196e1ecce19683ba5643c0f530a19e7ec6d4dd4a62d1fa3ac24f032d", "size_bytes": 14766}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `God Function: scan_repo` in `src/tagi/scanner/status.py:11`.\n\nFunction 'scan_repo' is oversized: CC=7, fan-out=15, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_god_function"}, "timestamp": "2026-09-19T10:22:37.567988+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "166", "key": "semcod/tagi#166", "url": "https://github.com/semcod/tagi/issues/166"}}, "updated_at": "2026-09-19T10:22:37.567988+00:00"}, "PLF-155": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-19T10:49:16.509027+00:00", "description": "\ncode2llm reports `Shotgun Surgery: path_lower` in `src/tagi/heuristics/tags.py:57`.\n\nMutation of variable 'path_lower' spans 8 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "168", "files": ["src/tagi/heuristics/tags.py"], "history": [{"action": "created", "message": "code2llm reports `Shotgun Surgery: path_lower` in `src/tagi/heuristics/tags.py:57`.\n\nMutation of variable 'path_lower' spans 8 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-19T10:49:16.509027+00:00"}], "id": "PLF-155", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `Shotgun Surgery: path_lower` in `src/tagi/heuristics/tags.py:57`.\n\nMutation of variable 'path_lower' spans 8 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["planfile", "managed", "koru", "nl-task", "llm-ready", "priority-high", "priority: high", "code2llm", "code-smell", "shotgun-surgery"], "metadata": {"deduplication_key": "PLF-155"}, "name": "Address code smell: Shotgun Surgery: path_lower", "outputs": {"artifacts": [], "notes": []}, "priority": "high", "source": {"context": {"dedupe_key": "code2llm:smell:shotgun_surgery:src/tagi/heuristics/tags.py:57:Shotgun Surgery: path_lower", "evidence": {"artifact": {"mtime_ns": 1789814952782525610, "path": "project/analysis.toon.yaml", "sha256": "0b4667123d8ba68e72937f0d888d34497c85fbaa99ce8d7195d2bfaa19de1d9f", "size_bytes": 10366}, "files": [{"mtime_ns": 1789814872390483855, "path": "src/tagi/heuristics/tags.py", "sha256": "83621bcdf280f42f072878df2f2475f25ec874bd8f7ecc8bcc5e04bb8e163174", "size_bytes": 3136}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789814952811053566, "path": "project/planfile-tickets.yaml", "sha256": "5ebd22cb45332ff8e61df65ac32e80d19ec57d2a54d226b6d4fd70230700cd67", "size_bytes": 15989}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `Shotgun Surgery: path_lower` in `src/tagi/heuristics/tags.py:57`.\n\nMutation of variable 'path_lower' spans 8 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_shotgun_surgery"}, "timestamp": "2026-09-19T10:49:16.509027+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "168", "key": "semcod/tagi#168", "url": "https://github.com/semcod/tagi/issues/168"}}, "updated_at": "2026-09-19T10:49:16.509027+00:00"}, "PLF-156": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-19T11:41:05.586678+00:00", "description": "\ncode2llm reports `Shotgun Surgery: provider` in `src/tagi/cli/publishing_commands.py:23`.\n\nMutation of variable 'provider' spans 5 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "169", "files": ["src/tagi/cli/publishing_commands.py"], "history": [{"action": "created", "message": "code2llm reports `Shotgun Surgery: provider` in `src/tagi/cli/publishing_commands.py:23`.\n\nMutation of variable 'provider' spans 5 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-19T11:41:05.586678+00:00"}], "id": "PLF-156", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `Shotgun Surgery: provider` in `src/tagi/cli/publishing_commands.py:23`.\n\nMutation of variable 'provider' spans 5 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["planfile", "managed", "koru", "nl-task", "llm-ready", "priority-high", "priority: high", "code2llm", "code-smell", "shotgun-surgery"], "metadata": {"deduplication_key": "PLF-156"}, "name": "Address code smell: Shotgun Surgery: provider", "outputs": {"artifacts": [], "notes": []}, "priority": "high", "source": {"context": {"dedupe_key": "code2llm:smell:shotgun_surgery:src/tagi/cli/publishing_commands.py:23:Shotgun Surgery: provider", "evidence": {"artifact": {"mtime_ns": 1789818000281070860, "path": "project/analysis.toon.yaml", "sha256": "cd908a3fbfce8ab1a9cb171c6ddd2c4d40624145f1441f5d326ee7e671012aac", "size_bytes": 10295}, "files": [{"mtime_ns": 1789817932257139916, "path": "src/tagi/cli/publishing_commands.py", "sha256": "542f145664f4f91fb291e1c1e5d781c33f4ac054622645e7c6aac58fb21568d8", "size_bytes": 5359}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789818000309685535, "path": "project/planfile-tickets.yaml", "sha256": "8895c5115dd230d0481573e88b83b8923b258e1938589013ec204cf9a5817478", "size_bytes": 16648}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `Shotgun Surgery: provider` in `src/tagi/cli/publishing_commands.py:23`.\n\nMutation of variable 'provider' spans 5 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_shotgun_surgery"}, "timestamp": "2026-09-19T11:41:05.586678+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "closed", "sync": {"github": {"id": "169", "key": "semcod/tagi#169", "url": "https://github.com/semcod/tagi/issues/169"}}, "updated_at": "2026-09-19T11:41:05.586678+00:00"}, "PLF-157": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-19T12:42:18.834682+00:00", "description": "\n`project/analysis.toon.yaml` flags `inspect_helpers` in LAYERS as a large/hot module (121 lines, 0 classes, 6 methods, CC=17). Extract cohesive submodules around stable responsibilities and add focused regression tests before broad edits.\n\n---\n\n**Strategy Metadata:**\n- planfile_id: PLF-157\n", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "172", "files": ["src/tagi/utils/inspect_helpers.py", "project/analysis.toon.yaml"], "history": [{"action": "created", "message": "`project/analysis.toon.yaml` flags `inspect_helpers` in LAYERS as a large/hot module (121 lines, 0 classes, 6 methods, CC=17). Extract cohesive submodules around stable responsibilities and add focused regression tests before broad edits.", "source": "koru task", "timestamp": "2026-09-19T12:42:18.834682+00:00"}], "id": "PLF-157", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "`project/analysis.toon.yaml` flags `inspect_helpers` in LAYERS as a large/hot module (121 lines, 0 classes, 6 methods, CC=17). Extract cohesive submodules around stable responsibilities and add focused regression tests before broad edits."}, "integration": ["github"], "labels": ["planfile", "managed", "koru", "nl-task", "llm-ready", "priority-high", "code2llm", "architecture", "large-module", "refactor", "scan"], "metadata": {"deduplication_key": "PLF-157"}, "name": "Split large module: inspect_helpers", "outputs": {"artifacts": [], "notes": []}, "priority": "high", "source": {"context": {"dedupe_key": "koru-scan:code2llm_layer_hotspot:src/tagi/utils/inspect_helpers.py:project/analysis.toon.yaml", "evidence": {"artifact": {"mtime_ns": 1789820718961281621, "path": "project/analysis.toon.yaml", "sha256": "28f5e52d781bb3dc5180c4411848287482185ddd7898976d85fe5df0d5cd3580", "size_bytes": 10363}, "kind": "code2llm_analysis", "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude '*.md' --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate the artifact and compare artifact.sha256 before assuming this ticket still reflects the current code."}, "input": "`project/analysis.toon.yaml` flags `inspect_helpers` in LAYERS as a large/hot module (121 lines, 0 classes, 6 methods, CC=17). Extract cohesive submodules around stable responsibilities and add focused regression tests before broad edits.", "signal": "code2llm_layer_hotspot"}, "timestamp": "2026-09-19T12:42:18.834682+00:00", "tool": "koru-scan"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "172", "key": "semcod/tagi#172", "url": "https://github.com/semcod/tagi/issues/172"}}, "updated_at": "2026-09-19T12:42:18.834682+00:00"}, "PLF-158": {"id": "PLF-158", "name": "Address code smell: Shotgun Surgery: path_lower", "contract_version": "planfile.ticket/v1", "status": "open", "priority": "high", "sprint": "current", "source": {"tool": "koru-scan", "timestamp": "2026-09-19T17:29:11.154936Z", "context": {}}, "description": "code2llm reports `Shotgun Surgery: path_lower` in `src/tagi/heuristics/metrics.py:33`.\n\nMutation of variable 'path_lower' spans 8 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.\n\ncode2llm-dedupe: code2llm:smell:shotgun_surgery:src/tagi/heuristics/metrics.py:33:Shotgun Surgery: path_lower", "acceptance_criteria": [], "labels": ["llm-ready", "code2llm", "code-smell", "shotgun-surgery"], "blocked_by": [], "blocks": [], "children": [], "files": ["src/tagi/heuristics/metrics.py"], "sync": {}, "history": [], "dsl": "SODL/1 id=evt_1a6aaf76c4ba5b63b56256bc event_hash=7d65339256becf3c499f5189e7c46b90588d4a52675bacd47945b39cbfdb3882 timestamp=2026-09-19T17%3A29%3A11.164575%2B00%3A00 kind=task source=planfile.ticket ticket_id=PLF-158 actor=koru-scan oql=ticket.create uri=planfile%3A%2F%2Ftickets%2FPLF-158%2Fcommand%2Fcreate mode=apply status=open correlation_id=PLF-158 causation_id=- input_hash=9ac39162431fbacf71cb140d6f58f295cc0f944ad37b22cbe0a4b4d07a17d58c receipt_ref=- replayable=true data=eyJwYXlsb2FkIjp7ImFjY2VwdGFuY2VfY3JpdGVyaWEiOltdLCJibG9ja2VkX2J5IjpbXSwiYmxvY2tzIjpbXSwiY2hpbGRyZW4iOltdLCJjb250cmFjdF92ZXJzaW9uIjoicGxhbmZpbGUudGlja2V0L3YxIiwiY3JlYXRlZF9hdCI6IjIwMjYtMDktMTlUMTc6Mjk6MTEuMTY0NTc1WiIsImRlc2NyaXB0aW9uIjoiY29kZTJsbG0gcmVwb3J0cyBgU2hvdGd1biBTdXJnZXJ5OiBwYXRoX2xvd2VyYCBpbiBgc3JjL3RhZ2kvaGV1cmlzdGljcy9tZXRyaWNzLnB5OjMzYC5cblxuTXV0YXRpb24gb2YgdmFyaWFibGUgJ3BhdGhfbG93ZXInIHNwYW5zIDggZnVuY3Rpb25zLiBDaGFuZ2luZyB0aGlzIGxvZ2ljIHJlcXVpcmVzIHdvcmsgaW4gbWFueSBwbGFjZXMuXG5cbk1ha2UgdGhlIHNtYWxsZXN0IHJlZmFjdG9yIHRoYXQgcmVtb3ZlcyB0aGUgc21lbGwgYW5kIHJ1biBsb2NhbCB0ZXN0cy5cblxuY29kZTJsbG0tZGVkdXBlOiBjb2RlMmxsbTpzbWVsbDpzaG90Z3VuX3N1cmdlcnk6c3JjL3RhZ2kvaGV1cmlzdGljcy9tZXRyaWNzLnB5OjMzOlNob3RndW4gU3VyZ2VyeTogcGF0aF9sb3dlciIsImZpbGVzIjpbInNyYy90YWdpL2hldXJpc3RpY3MvbWV0cmljcy5weSJdLCJpZCI6IlBMRi0xNTgiLCJsYWJlbHMiOlsibGxtLXJlYWR5IiwiY29kZTJsbG0iLCJjb2RlLXNtZWxsIiwic2hvdGd1bi1zdXJnZXJ5Il0sIm5hbWUiOiJBZGRyZXNzIGNvZGUgc21lbGw6IFNob3RndW4gU3VyZ2VyeTogcGF0aF9sb3dlciIsInByaW9yaXR5IjoiaGlnaCIsInNvdXJjZSI6eyJjb250ZXh0Ijp7fSwidGltZXN0YW1wIjoiMjAyNi0wOS0xOVQxNzoyOToxMS4xNTQ5MzZaIiwidG9vbCI6ImtvcnUtc2NhbiJ9LCJzcHJpbnQiOiJjdXJyZW50Iiwic3RhdHVzIjoib3BlbiIsInN5bmMiOnt9LCJ1cGRhdGVkX2F0IjoiMjAyNi0wOS0xOVQxNzoyOToxMS4xNjQ1NzlaIn19", "created_at": "2026-09-19T17:29:11.164575Z", "updated_at": "2026-09-19T17:29:11.164579Z"}, "PLF-159": {"id": "PLF-159", "name": "Address code smell: Shotgun Surgery: tags", "contract_version": "planfile.ticket/v1", "status": "open", "priority": "high", "sprint": "current", "source": {"tool": "koru-scan", "timestamp": "2026-09-19T17:29:11.840839Z", "context": {}}, "description": "code2llm reports `Shotgun Surgery: tags` in `src/tagi/heuristics/tags.py:48`.\n\nMutation of variable 'tags' spans 5 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.\n\ncode2llm-dedupe: code2llm:smell:shotgun_surgery:src/tagi/heuristics/tags.py:48:Shotgun Surgery: tags", "acceptance_criteria": [], "labels": ["llm-ready", "code2llm", "code-smell", "shotgun-surgery"], "blocked_by": [], "blocks": [], "children": [], "files": ["src/tagi/heuristics/tags.py"], "sync": {}, "history": [], "dsl": "SODL/1 id=evt_83500b9a1eed7d17acb5d9fb event_hash=0742737296da2c07434ecfea4dcb1c8cb6ae655a488c87cdba0103bd8a11bb02 timestamp=2026-09-19T17%3A29%3A11.918031%2B00%3A00 kind=task source=planfile.ticket ticket_id=PLF-159 actor=koru-scan oql=ticket.create uri=planfile%3A%2F%2Ftickets%2FPLF-159%2Fcommand%2Fcreate mode=apply status=open correlation_id=PLF-159 causation_id=- input_hash=55fc906af39db774bbbb80466d1102d53e7300ae63a8527729323d5cc7d9d5ec receipt_ref=- replayable=true data=eyJwYXlsb2FkIjp7ImFjY2VwdGFuY2VfY3JpdGVyaWEiOltdLCJibG9ja2VkX2J5IjpbXSwiYmxvY2tzIjpbXSwiY2hpbGRyZW4iOltdLCJjb250cmFjdF92ZXJzaW9uIjoicGxhbmZpbGUudGlja2V0L3YxIiwiY3JlYXRlZF9hdCI6IjIwMjYtMDktMTlUMTc6Mjk6MTEuOTE4MDMxWiIsImRlc2NyaXB0aW9uIjoiY29kZTJsbG0gcmVwb3J0cyBgU2hvdGd1biBTdXJnZXJ5OiB0YWdzYCBpbiBgc3JjL3RhZ2kvaGV1cmlzdGljcy90YWdzLnB5OjQ4YC5cblxuTXV0YXRpb24gb2YgdmFyaWFibGUgJ3RhZ3MnIHNwYW5zIDUgZnVuY3Rpb25zLiBDaGFuZ2luZyB0aGlzIGxvZ2ljIHJlcXVpcmVzIHdvcmsgaW4gbWFueSBwbGFjZXMuXG5cbk1ha2UgdGhlIHNtYWxsZXN0IHJlZmFjdG9yIHRoYXQgcmVtb3ZlcyB0aGUgc21lbGwgYW5kIHJ1biBsb2NhbCB0ZXN0cy5cblxuY29kZTJsbG0tZGVkdXBlOiBjb2RlMmxsbTpzbWVsbDpzaG90Z3VuX3N1cmdlcnk6c3JjL3RhZ2kvaGV1cmlzdGljcy90YWdzLnB5OjQ4OlNob3RndW4gU3VyZ2VyeTogdGFncyIsImZpbGVzIjpbInNyYy90YWdpL2hldXJpc3RpY3MvdGFncy5weSJdLCJpZCI6IlBMRi0xNTkiLCJsYWJlbHMiOlsibGxtLXJlYWR5IiwiY29kZTJsbG0iLCJjb2RlLXNtZWxsIiwic2hvdGd1bi1zdXJnZXJ5Il0sIm5hbWUiOiJBZGRyZXNzIGNvZGUgc21lbGw6IFNob3RndW4gU3VyZ2VyeTogdGFncyIsInByaW9yaXR5IjoiaGlnaCIsInNvdXJjZSI6eyJjb250ZXh0Ijp7fSwidGltZXN0YW1wIjoiMjAyNi0wOS0xOVQxNzoyOToxMS44NDA4MzlaIiwidG9vbCI6ImtvcnUtc2NhbiJ9LCJzcHJpbnQiOiJjdXJyZW50Iiwic3RhdHVzIjoib3BlbiIsInN5bmMiOnt9LCJ1cGRhdGVkX2F0IjoiMjAyNi0wOS0xOVQxNzoyOToxMS45MTgwMzdaIn19", "created_at": "2026-09-19T17:29:11.918031Z", "updated_at": "2026-09-19T17:29:11.918037Z"}, "PLF-160": {"id": "PLF-160", "name": "Address code smell: God Function: _tag_change", "contract_version": "planfile.ticket/v1", "status": "open", "priority": "normal", "sprint": "current", "source": {"tool": "koru-scan", "timestamp": "2026-09-19T17:29:12.733568Z", "context": {}}, "description": "code2llm reports `God Function: _tag_change` in `src/tagi/heuristics/tags.py:22`.\n\nFunction '_tag_change' is oversized: CC=2, fan-out=9, mutations=9.\n\nMake the smallest refactor that removes the smell and run local tests.\n\ncode2llm-dedupe: code2llm:smell:god_function:src/tagi/heuristics/tags.py:22:God Function: _tag_change", "acceptance_criteria": [], "labels": ["llm-ready", "code2llm", "code-smell", "god-function"], "blocked_by": [], "blocks": [], "children": [], "files": ["src/tagi/heuristics/tags.py"], "sync": {}, "history": [], "dsl": "SODL/1 id=evt_497220cc3af4ef6b44f321c3 event_hash=a649a48467d378efbc3eebe005661ba3d1c88c8e725799f28033db9affdbbb57 timestamp=2026-09-19T17%3A29%3A12.755466%2B00%3A00 kind=task source=planfile.ticket ticket_id=PLF-160 actor=koru-scan oql=ticket.create uri=planfile%3A%2F%2Ftickets%2FPLF-160%2Fcommand%2Fcreate mode=apply status=open correlation_id=PLF-160 causation_id=- input_hash=d5a7a2d67eb7957053bde0d4b9463b298a084ab459be7d414caed735bd81f544 receipt_ref=- replayable=true data=eyJwYXlsb2FkIjp7ImFjY2VwdGFuY2VfY3JpdGVyaWEiOltdLCJibG9ja2VkX2J5IjpbXSwiYmxvY2tzIjpbXSwiY2hpbGRyZW4iOltdLCJjb250cmFjdF92ZXJzaW9uIjoicGxhbmZpbGUudGlja2V0L3YxIiwiY3JlYXRlZF9hdCI6IjIwMjYtMDktMTlUMTc6Mjk6MTIuNzU1NDY2WiIsImRlc2NyaXB0aW9uIjoiY29kZTJsbG0gcmVwb3J0cyBgR29kIEZ1bmN0aW9uOiBfdGFnX2NoYW5nZWAgaW4gYHNyYy90YWdpL2hldXJpc3RpY3MvdGFncy5weToyMmAuXG5cbkZ1bmN0aW9uICdfdGFnX2NoYW5nZScgaXMgb3ZlcnNpemVkOiBDQz0yLCBmYW4tb3V0PTksIG11dGF0aW9ucz05LlxuXG5NYWtlIHRoZSBzbWFsbGVzdCByZWZhY3RvciB0aGF0IHJlbW92ZXMgdGhlIHNtZWxsIGFuZCBydW4gbG9jYWwgdGVzdHMuXG5cbmNvZGUybGxtLWRlZHVwZTogY29kZTJsbG06c21lbGw6Z29kX2Z1bmN0aW9uOnNyYy90YWdpL2hldXJpc3RpY3MvdGFncy5weToyMjpHb2QgRnVuY3Rpb246IF90YWdfY2hhbmdlIiwiZmlsZXMiOlsic3JjL3RhZ2kvaGV1cmlzdGljcy90YWdzLnB5Il0sImlkIjoiUExGLTE2MCIsImxhYmVscyI6WyJsbG0tcmVhZHkiLCJjb2RlMmxsbSIsImNvZGUtc21lbGwiLCJnb2QtZnVuY3Rpb24iXSwibmFtZSI6IkFkZHJlc3MgY29kZSBzbWVsbDogR29kIEZ1bmN0aW9uOiBfdGFnX2NoYW5nZSIsInByaW9yaXR5Ijoibm9ybWFsIiwic291cmNlIjp7ImNvbnRleHQiOnt9LCJ0aW1lc3RhbXAiOiIyMDI2LTA5LTE5VDE3OjI5OjEyLjczMzU2OFoiLCJ0b29sIjoia29ydS1zY2FuIn0sInNwcmludCI6ImN1cnJlbnQiLCJzdGF0dXMiOiJvcGVuIiwic3luYyI6e30sInVwZGF0ZWRfYXQiOiIyMDI2LTA5LTE5VDE3OjI5OjEyLjc1NTQ3M1oifX0", "created_at": "2026-09-19T17:29:12.755466Z", "updated_at": "2026-09-19T17:29:12.755473Z"}, "PLF-161": {"id": "PLF-161", "name": "Address code smell: God Function: group_by_branch", "contract_version": "planfile.ticket/v1", "status": "open", "priority": "normal", "sprint": "current", "source": {"tool": "koru-scan", "timestamp": "2026-09-19T17:29:13.529332Z", "context": {}}, "description": "code2llm reports `God Function: group_by_branch` in `src/tagi/planner/branch_grouper.py:7`.\n\nFunction 'group_by_branch' is oversized: CC=8, fan-out=9, mutations=12.\n\nMake the smallest refactor that removes the smell and run local tests.\n\ncode2llm-dedupe: code2llm:smell:god_function:src/tagi/planner/branch_grouper.py:7:God Function: group_by_branch", "acceptance_criteria": [], "labels": ["llm-ready", "code2llm", "code-smell", "god-function"], "blocked_by": [], "blocks": [], "children": [], "files": ["src/tagi/planner/branch_grouper.py"], "sync": {}, "history": [], "dsl": "SODL/1 id=evt_40ff20aedf6162ed4834abaf event_hash=ae5af7901b1b3af57cda8f54258ded6d81ca63c88f1e1b8a8f7254067bf0755b timestamp=2026-09-19T17%3A29%3A13.553848%2B00%3A00 kind=task source=planfile.ticket ticket_id=PLF-161 actor=koru-scan oql=ticket.create uri=planfile%3A%2F%2Ftickets%2FPLF-161%2Fcommand%2Fcreate mode=apply status=open correlation_id=PLF-161 causation_id=- input_hash=cd07a286a6639b4e972faffab3383ed91fe4f5633f91a51914165a850a9c5675 receipt_ref=- replayable=true data=eyJwYXlsb2FkIjp7ImFjY2VwdGFuY2VfY3JpdGVyaWEiOltdLCJibG9ja2VkX2J5IjpbXSwiYmxvY2tzIjpbXSwiY2hpbGRyZW4iOltdLCJjb250cmFjdF92ZXJzaW9uIjoicGxhbmZpbGUudGlja2V0L3YxIiwiY3JlYXRlZF9hdCI6IjIwMjYtMDktMTlUMTc6Mjk6MTMuNTUzODQ4WiIsImRlc2NyaXB0aW9uIjoiY29kZTJsbG0gcmVwb3J0cyBgR29kIEZ1bmN0aW9uOiBncm91cF9ieV9icmFuY2hgIGluIGBzcmMvdGFnaS9wbGFubmVyL2JyYW5jaF9ncm91cGVyLnB5OjdgLlxuXG5GdW5jdGlvbiAnZ3JvdXBfYnlfYnJhbmNoJyBpcyBvdmVyc2l6ZWQ6IENDPTgsIGZhbi1vdXQ9OSwgbXV0YXRpb25zPTEyLlxuXG5NYWtlIHRoZSBzbWFsbGVzdCByZWZhY3RvciB0aGF0IHJlbW92ZXMgdGhlIHNtZWxsIGFuZCBydW4gbG9jYWwgdGVzdHMuXG5cbmNvZGUybGxtLWRlZHVwZTogY29kZTJsbG06c21lbGw6Z29kX2Z1bmN0aW9uOnNyYy90YWdpL3BsYW5uZXIvYnJhbmNoX2dyb3VwZXIucHk6NzpHb2QgRnVuY3Rpb246IGdyb3VwX2J5X2JyYW5jaCIsImZpbGVzIjpbInNyYy90YWdpL3BsYW5uZXIvYnJhbmNoX2dyb3VwZXIucHkiXSwiaWQiOiJQTEYtMTYxIiwibGFiZWxzIjpbImxsbS1yZWFkeSIsImNvZGUybGxtIiwiY29kZS1zbWVsbCIsImdvZC1mdW5jdGlvbiJdLCJuYW1lIjoiQWRkcmVzcyBjb2RlIHNtZWxsOiBHb2QgRnVuY3Rpb246IGdyb3VwX2J5X2JyYW5jaCIsInByaW9yaXR5Ijoibm9ybWFsIiwic291cmNlIjp7ImNvbnRleHQiOnt9LCJ0aW1lc3RhbXAiOiIyMDI2LTA5LTE5VDE3OjI5OjEzLjUyOTMzMloiLCJ0b29sIjoia29ydS1zY2FuIn0sInNwcmludCI6ImN1cnJlbnQiLCJzdGF0dXMiOiJvcGVuIiwic3luYyI6e30sInVwZGF0ZWRfYXQiOiIyMDI2LTA5LTE5VDE3OjI5OjEzLjU1Mzg1NloifX0", "created_at": "2026-09-19T17:29:13.553848Z", "updated_at": "2026-09-19T17:29:13.553856Z"}, "PLF-162": {"id": "PLF-162", "name": "Address code smell: God Function: group_changes", "contract_version": "planfile.ticket/v1", "status": "open", "priority": "normal", "sprint": "current", "source": {"tool": "koru-scan", "timestamp": "2026-09-19T17:29:14.207997Z", "context": {}}, "description": "code2llm reports `God Function: group_changes` in `src/tagi/planner/grouper.py:10`.\n\nFunction 'group_changes' is oversized: CC=4, fan-out=9, mutations=7.\n\nMake the smallest refactor that removes the smell and run local tests.\n\ncode2llm-dedupe: code2llm:smell:god_function:src/tagi/planner/grouper.py:10:God Function: group_changes", "acceptance_criteria": [], "labels": ["llm-ready", "code2llm", "code-smell", "god-function"], "blocked_by": [], "blocks": [], "children": [], "files": ["src/tagi/planner/grouper.py"], "sync": {}, "history": [], "dsl": "SODL/1 id=evt_b95ba0e76679eda0c97bba36 event_hash=418a0c25b25afd250b00e7a387e426e863671c3329af84e74d55cff355f6f2eb timestamp=2026-09-19T17%3A29%3A14.217920%2B00%3A00 kind=task source=planfile.ticket ticket_id=PLF-162 actor=koru-scan oql=ticket.create uri=planfile%3A%2F%2Ftickets%2FPLF-162%2Fcommand%2Fcreate mode=apply status=open correlation_id=PLF-162 causation_id=- input_hash=c9fb74d7097f7bdd1d19ca0ec5c5aee2e5a324a718d1d790022871040c7abc1f receipt_ref=- replayable=true data=eyJwYXlsb2FkIjp7ImFjY2VwdGFuY2VfY3JpdGVyaWEiOltdLCJibG9ja2VkX2J5IjpbXSwiYmxvY2tzIjpbXSwiY2hpbGRyZW4iOltdLCJjb250cmFjdF92ZXJzaW9uIjoicGxhbmZpbGUudGlja2V0L3YxIiwiY3JlYXRlZF9hdCI6IjIwMjYtMDktMTlUMTc6Mjk6MTQuMjE3OTIwWiIsImRlc2NyaXB0aW9uIjoiY29kZTJsbG0gcmVwb3J0cyBgR29kIEZ1bmN0aW9uOiBncm91cF9jaGFuZ2VzYCBpbiBgc3JjL3RhZ2kvcGxhbm5lci9ncm91cGVyLnB5OjEwYC5cblxuRnVuY3Rpb24gJ2dyb3VwX2NoYW5nZXMnIGlzIG92ZXJzaXplZDogQ0M9NCwgZmFuLW91dD05LCBtdXRhdGlvbnM9Ny5cblxuTWFrZSB0aGUgc21hbGxlc3QgcmVmYWN0b3IgdGhhdCByZW1vdmVzIHRoZSBzbWVsbCBhbmQgcnVuIGxvY2FsIHRlc3RzLlxuXG5jb2RlMmxsbS1kZWR1cGU6IGNvZGUybGxtOnNtZWxsOmdvZF9mdW5jdGlvbjpzcmMvdGFnaS9wbGFubmVyL2dyb3VwZXIucHk6MTA6R29kIEZ1bmN0aW9uOiBncm91cF9jaGFuZ2VzIiwiZmlsZXMiOlsic3JjL3RhZ2kvcGxhbm5lci9ncm91cGVyLnB5Il0sImlkIjoiUExGLTE2MiIsImxhYmVscyI6WyJsbG0tcmVhZHkiLCJjb2RlMmxsbSIsImNvZGUtc21lbGwiLCJnb2QtZnVuY3Rpb24iXSwibmFtZSI6IkFkZHJlc3MgY29kZSBzbWVsbDogR29kIEZ1bmN0aW9uOiBncm91cF9jaGFuZ2VzIiwicHJpb3JpdHkiOiJub3JtYWwiLCJzb3VyY2UiOnsiY29udGV4dCI6e30sInRpbWVzdGFtcCI6IjIwMjYtMDktMTlUMTc6Mjk6MTQuMjA3OTk3WiIsInRvb2wiOiJrb3J1LXNjYW4ifSwic3ByaW50IjoiY3VycmVudCIsInN0YXR1cyI6Im9wZW4iLCJzeW5jIjp7fSwidXBkYXRlZF9hdCI6IjIwMjYtMDktMTlUMTc6Mjk6MTQuMjE3OTI2WiJ9fQ", "created_at": "2026-09-19T17:29:14.217920Z", "updated_at": "2026-09-19T17:29:14.217926Z"}, "PLF-163": {"id": "PLF-163", "name": "Address code smell: God Function: hooks_command", "contract_version": "planfile.ticket/v1", "status": "open", "priority": "normal", "sprint": "current", "source": {"tool": "koru-scan", "timestamp": "2026-09-19T17:29:14.875281Z", "context": {}}, "description": "code2llm reports `God Function: hooks_command` in `src/tagi/cli/utility_commands.py:131`.\n\nFunction 'hooks_command' is oversized: CC=10, fan-out=11, mutations=4.\n\nMake the smallest refactor that removes the smell and run local tests.\n\ncode2llm-dedupe: code2llm:smell:god_function:src/tagi/cli/utility_commands.py:131:God Function: hooks_command", "acceptance_criteria": [], "labels": ["llm-ready", "code2llm", "code-smell", "god-function"], "blocked_by": [], "blocks": [], "children": [], "files": ["src/tagi/cli/utility_commands.py"], "sync": {}, "history": [], "dsl": "SODL/1 id=evt_3456b70183d69035897be1ff event_hash=dcc172d6f7418092c72c96f93076690043898fe23b41adf1ed8d2e8802c015b5 timestamp=2026-09-19T17%3A29%3A14.903316%2B00%3A00 kind=task source=planfile.ticket ticket_id=PLF-163 actor=koru-scan oql=ticket.create uri=planfile%3A%2F%2Ftickets%2FPLF-163%2Fcommand%2Fcreate mode=apply status=open correlation_id=PLF-163 causation_id=- input_hash=6aa365062d5ca56c343e0cc1d3fd5999a256e8568e58eca110b735652b5eac5f receipt_ref=- replayable=true data=eyJwYXlsb2FkIjp7ImFjY2VwdGFuY2VfY3JpdGVyaWEiOltdLCJibG9ja2VkX2J5IjpbXSwiYmxvY2tzIjpbXSwiY2hpbGRyZW4iOltdLCJjb250cmFjdF92ZXJzaW9uIjoicGxhbmZpbGUudGlja2V0L3YxIiwiY3JlYXRlZF9hdCI6IjIwMjYtMDktMTlUMTc6Mjk6MTQuOTAzMzE2WiIsImRlc2NyaXB0aW9uIjoiY29kZTJsbG0gcmVwb3J0cyBgR29kIEZ1bmN0aW9uOiBob29rc19jb21tYW5kYCBpbiBgc3JjL3RhZ2kvY2xpL3V0aWxpdHlfY29tbWFuZHMucHk6MTMxYC5cblxuRnVuY3Rpb24gJ2hvb2tzX2NvbW1hbmQnIGlzIG92ZXJzaXplZDogQ0M9MTAsIGZhbi1vdXQ9MTEsIG11dGF0aW9ucz00LlxuXG5NYWtlIHRoZSBzbWFsbGVzdCByZWZhY3RvciB0aGF0IHJlbW92ZXMgdGhlIHNtZWxsIGFuZCBydW4gbG9jYWwgdGVzdHMuXG5cbmNvZGUybGxtLWRlZHVwZTogY29kZTJsbG06c21lbGw6Z29kX2Z1bmN0aW9uOnNyYy90YWdpL2NsaS91dGlsaXR5X2NvbW1hbmRzLnB5OjEzMTpHb2QgRnVuY3Rpb246IGhvb2tzX2NvbW1hbmQiLCJmaWxlcyI6WyJzcmMvdGFnaS9jbGkvdXRpbGl0eV9jb21tYW5kcy5weSJdLCJpZCI6IlBMRi0xNjMiLCJsYWJlbHMiOlsibGxtLXJlYWR5IiwiY29kZTJsbG0iLCJjb2RlLXNtZWxsIiwiZ29kLWZ1bmN0aW9uIl0sIm5hbWUiOiJBZGRyZXNzIGNvZGUgc21lbGw6IEdvZCBGdW5jdGlvbjogaG9va3NfY29tbWFuZCIsInByaW9yaXR5Ijoibm9ybWFsIiwic291cmNlIjp7ImNvbnRleHQiOnt9LCJ0aW1lc3RhbXAiOiIyMDI2LTA5LTE5VDE3OjI5OjE0Ljg3NTI4MVoiLCJ0b29sIjoia29ydS1zY2FuIn0sInNwcmludCI6ImN1cnJlbnQiLCJzdGF0dXMiOiJvcGVuIiwic3luYyI6e30sInVwZGF0ZWRfYXQiOiIyMDI2LTA5LTE5VDE3OjI5OjE0LjkwMzMyMFoifX0", "created_at": "2026-09-19T17:29:14.903316Z", "updated_at": "2026-09-19T17:29:14.903320Z"}, "PLF-164": {"id": "PLF-164", "name": "Address code smell: God Function: inspect_command", "contract_version": "planfile.ticket/v1", "status": "open", "priority": "normal", "sprint": "current", "source": {"tool": "koru-scan", "timestamp": "2026-09-19T17:29:15.595077Z", "context": {}}, "description": "code2llm reports `God Function: inspect_command` in `src/tagi/cli/inspection_commands.py:19`.\n\nFunction 'inspect_command' is oversized: CC=7, fan-out=11, mutations=4.\n\nMake the smallest refactor that removes the smell and run local tests.\n\ncode2llm-dedupe: code2llm:smell:god_function:src/tagi/cli/inspection_commands.py:19:God Function: inspect_command", "acceptance_criteria": [], "labels": ["llm-ready", "code2llm", "code-smell", "god-function"], "blocked_by": [], "blocks": [], "children": [], "files": ["src/tagi/cli/inspection_commands.py"], "sync": {}, "history": [], "dsl": "SODL/1 id=evt_72c0878785f684fd4b360e9a event_hash=c75a481d991bd9324699cfe999d1e5a55a0880e05808c693bd7e5add09025fe8 timestamp=2026-09-19T17%3A29%3A15.623939%2B00%3A00 kind=task source=planfile.ticket ticket_id=PLF-164 actor=koru-scan oql=ticket.create uri=planfile%3A%2F%2Ftickets%2FPLF-164%2Fcommand%2Fcreate mode=apply status=open correlation_id=PLF-164 causation_id=- input_hash=df0f54865b3784cf2bba77531b3782646c3aec9122da332fe5e35cffd6b56107 receipt_ref=- replayable=true data=eyJwYXlsb2FkIjp7ImFjY2VwdGFuY2VfY3JpdGVyaWEiOltdLCJibG9ja2VkX2J5IjpbXSwiYmxvY2tzIjpbXSwiY2hpbGRyZW4iOltdLCJjb250cmFjdF92ZXJzaW9uIjoicGxhbmZpbGUudGlja2V0L3YxIiwiY3JlYXRlZF9hdCI6IjIwMjYtMDktMTlUMTc6Mjk6MTUuNjIzOTM5WiIsImRlc2NyaXB0aW9uIjoiY29kZTJsbG0gcmVwb3J0cyBgR29kIEZ1bmN0aW9uOiBpbnNwZWN0X2NvbW1hbmRgIGluIGBzcmMvdGFnaS9jbGkvaW5zcGVjdGlvbl9jb21tYW5kcy5weToxOWAuXG5cbkZ1bmN0aW9uICdpbnNwZWN0X2NvbW1hbmQnIGlzIG92ZXJzaXplZDogQ0M9NywgZmFuLW91dD0xMSwgbXV0YXRpb25zPTQuXG5cbk1ha2UgdGhlIHNtYWxsZXN0IHJlZmFjdG9yIHRoYXQgcmVtb3ZlcyB0aGUgc21lbGwgYW5kIHJ1biBsb2NhbCB0ZXN0cy5cblxuY29kZTJsbG0tZGVkdXBlOiBjb2RlMmxsbTpzbWVsbDpnb2RfZnVuY3Rpb246c3JjL3RhZ2kvY2xpL2luc3BlY3Rpb25fY29tbWFuZHMucHk6MTk6R29kIEZ1bmN0aW9uOiBpbnNwZWN0X2NvbW1hbmQiLCJmaWxlcyI6WyJzcmMvdGFnaS9jbGkvaW5zcGVjdGlvbl9jb21tYW5kcy5weSJdLCJpZCI6IlBMRi0xNjQiLCJsYWJlbHMiOlsibGxtLXJlYWR5IiwiY29kZTJsbG0iLCJjb2RlLXNtZWxsIiwiZ29kLWZ1bmN0aW9uIl0sIm5hbWUiOiJBZGRyZXNzIGNvZGUgc21lbGw6IEdvZCBGdW5jdGlvbjogaW5zcGVjdF9jb21tYW5kIiwicHJpb3JpdHkiOiJub3JtYWwiLCJzb3VyY2UiOnsiY29udGV4dCI6e30sInRpbWVzdGFtcCI6IjIwMjYtMDktMTlUMTc6Mjk6MTUuNTk1MDc3WiIsInRvb2wiOiJrb3J1LXNjYW4ifSwic3ByaW50IjoiY3VycmVudCIsInN0YXR1cyI6Im9wZW4iLCJzeW5jIjp7fSwidXBkYXRlZF9hdCI6IjIwMjYtMDktMTlUMTc6Mjk6MTUuNjIzOTQ1WiJ9fQ", "created_at": "2026-09-19T17:29:15.623939Z", "updated_at": "2026-09-19T17:29:15.623945Z"}, "PLF-165": {"id": "PLF-165", "name": "Address code smell: God Function: publish_command", "contract_version": "planfile.ticket/v1", "status": "open", "priority": "normal", "sprint": "current", "source": {"tool": "koru-scan", "timestamp": "2026-09-19T17:29:16.288264Z", "context": {}}, "description": "code2llm reports `God Function: publish_command` in `src/tagi/cli/publishing_commands.py:23`.\n\nFunction 'publish_command' is oversized: CC=11, fan-out=14, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests.\n\ncode2llm-dedupe: code2llm:smell:god_function:src/tagi/cli/publishing_commands.py:23:God Function: publish_command", "acceptance_criteria": [], "labels": ["llm-ready", "code2llm", "code-smell", "god-function"], "blocked_by": [], "blocks": [], "children": [], "files": ["src/tagi/cli/publishing_commands.py"], "sync": {}, "history": [], "dsl": "SODL/1 id=evt_8ee5b7a15bf8f1ed3bd37a9c event_hash=0af6d85bc54117becab5c7789f9fe1f6c2a07c864cb603dff4ad7c3eb0d89e56 timestamp=2026-09-19T17%3A29%3A16.307020%2B00%3A00 kind=task source=planfile.ticket ticket_id=PLF-165 actor=koru-scan oql=ticket.create uri=planfile%3A%2F%2Ftickets%2FPLF-165%2Fcommand%2Fcreate mode=apply status=open correlation_id=PLF-165 causation_id=- input_hash=23669a6559bd153e37565e6d65a50fd41a34620dd2ac8b48c23aafaaabee74ca receipt_ref=- replayable=true data=eyJwYXlsb2FkIjp7ImFjY2VwdGFuY2VfY3JpdGVyaWEiOltdLCJibG9ja2VkX2J5IjpbXSwiYmxvY2tzIjpbXSwiY2hpbGRyZW4iOltdLCJjb250cmFjdF92ZXJzaW9uIjoicGxhbmZpbGUudGlja2V0L3YxIiwiY3JlYXRlZF9hdCI6IjIwMjYtMDktMTlUMTc6Mjk6MTYuMzA3MDIwWiIsImRlc2NyaXB0aW9uIjoiY29kZTJsbG0gcmVwb3J0cyBgR29kIEZ1bmN0aW9uOiBwdWJsaXNoX2NvbW1hbmRgIGluIGBzcmMvdGFnaS9jbGkvcHVibGlzaGluZ19jb21tYW5kcy5weToyM2AuXG5cbkZ1bmN0aW9uICdwdWJsaXNoX2NvbW1hbmQnIGlzIG92ZXJzaXplZDogQ0M9MTEsIGZhbi1vdXQ9MTQsIG11dGF0aW9ucz04LlxuXG5NYWtlIHRoZSBzbWFsbGVzdCByZWZhY3RvciB0aGF0IHJlbW92ZXMgdGhlIHNtZWxsIGFuZCBydW4gbG9jYWwgdGVzdHMuXG5cbmNvZGUybGxtLWRlZHVwZTogY29kZTJsbG06c21lbGw6Z29kX2Z1bmN0aW9uOnNyYy90YWdpL2NsaS9wdWJsaXNoaW5nX2NvbW1hbmRzLnB5OjIzOkdvZCBGdW5jdGlvbjogcHVibGlzaF9jb21tYW5kIiwiZmlsZXMiOlsic3JjL3RhZ2kvY2xpL3B1Ymxpc2hpbmdfY29tbWFuZHMucHkiXSwiaWQiOiJQTEYtMTY1IiwibGFiZWxzIjpbImxsbS1yZWFkeSIsImNvZGUybGxtIiwiY29kZS1zbWVsbCIsImdvZC1mdW5jdGlvbiJdLCJuYW1lIjoiQWRkcmVzcyBjb2RlIHNtZWxsOiBHb2QgRnVuY3Rpb246IHB1Ymxpc2hfY29tbWFuZCIsInByaW9yaXR5Ijoibm9ybWFsIiwic291cmNlIjp7ImNvbnRleHQiOnt9LCJ0aW1lc3RhbXAiOiIyMDI2LTA5LTE5VDE3OjI5OjE2LjI4ODI2NFoiLCJ0b29sIjoia29ydS1zY2FuIn0sInNwcmludCI6ImN1cnJlbnQiLCJzdGF0dXMiOiJvcGVuIiwic3luYyI6e30sInVwZGF0ZWRfYXQiOiIyMDI2LTA5LTE5VDE3OjI5OjE2LjMwNzAyNVoifX0", "created_at": "2026-09-19T17:29:16.307020Z", "updated_at": "2026-09-19T17:29:16.307025Z"}, "PLF-166": {"id": "PLF-166", "name": "Address code smell: God Function: scan_repo", "contract_version": "planfile.ticket/v1", "status": "open", "priority": "normal", "sprint": "current", "source": {"tool": "koru-scan", "timestamp": "2026-09-19T17:29:17.052266Z", "context": {}}, "description": "code2llm reports `God Function: scan_repo` in `src/tagi/scanner/status.py:11`.\n\nFunction 'scan_repo' is oversized: CC=7, fan-out=15, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests.\n\ncode2llm-dedupe: code2llm:smell:god_function:src/tagi/scanner/status.py:11:God Function: scan_repo", "acceptance_criteria": [], "labels": ["llm-ready", "code2llm", "code-smell", "god-function"], "blocked_by": [], "blocks": [], "children": [], "files": ["src/tagi/scanner/status.py"], "sync": {}, "history": [], "dsl": "SODL/1 id=evt_461a86c7b0a0152501eed031 event_hash=d3d5dab3966ea45333fb4e595c94233dcf1c91486df0c625edb042d87ac1aa38 timestamp=2026-09-19T17%3A29%3A17.068246%2B00%3A00 kind=task source=planfile.ticket ticket_id=PLF-166 actor=koru-scan oql=ticket.create uri=planfile%3A%2F%2Ftickets%2FPLF-166%2Fcommand%2Fcreate mode=apply status=open correlation_id=PLF-166 causation_id=- input_hash=c0d3402362def21068249a3d8ceb948960cbb839b08276ab267d9c01a6b2b391 receipt_ref=- replayable=true data=eyJwYXlsb2FkIjp7ImFjY2VwdGFuY2VfY3JpdGVyaWEiOltdLCJibG9ja2VkX2J5IjpbXSwiYmxvY2tzIjpbXSwiY2hpbGRyZW4iOltdLCJjb250cmFjdF92ZXJzaW9uIjoicGxhbmZpbGUudGlja2V0L3YxIiwiY3JlYXRlZF9hdCI6IjIwMjYtMDktMTlUMTc6Mjk6MTcuMDY4MjQ2WiIsImRlc2NyaXB0aW9uIjoiY29kZTJsbG0gcmVwb3J0cyBgR29kIEZ1bmN0aW9uOiBzY2FuX3JlcG9gIGluIGBzcmMvdGFnaS9zY2FubmVyL3N0YXR1cy5weToxMWAuXG5cbkZ1bmN0aW9uICdzY2FuX3JlcG8nIGlzIG92ZXJzaXplZDogQ0M9NywgZmFuLW91dD0xNSwgbXV0YXRpb25zPTguXG5cbk1ha2UgdGhlIHNtYWxsZXN0IHJlZmFjdG9yIHRoYXQgcmVtb3ZlcyB0aGUgc21lbGwgYW5kIHJ1biBsb2NhbCB0ZXN0cy5cblxuY29kZTJsbG0tZGVkdXBlOiBjb2RlMmxsbTpzbWVsbDpnb2RfZnVuY3Rpb246c3JjL3RhZ2kvc2Nhbm5lci9zdGF0dXMucHk6MTE6R29kIEZ1bmN0aW9uOiBzY2FuX3JlcG8iLCJmaWxlcyI6WyJzcmMvdGFnaS9zY2FubmVyL3N0YXR1cy5weSJdLCJpZCI6IlBMRi0xNjYiLCJsYWJlbHMiOlsibGxtLXJlYWR5IiwiY29kZTJsbG0iLCJjb2RlLXNtZWxsIiwiZ29kLWZ1bmN0aW9uIl0sIm5hbWUiOiJBZGRyZXNzIGNvZGUgc21lbGw6IEdvZCBGdW5jdGlvbjogc2Nhbl9yZXBvIiwicHJpb3JpdHkiOiJub3JtYWwiLCJzb3VyY2UiOnsiY29udGV4dCI6e30sInRpbWVzdGFtcCI6IjIwMjYtMDktMTlUMTc6Mjk6MTcuMDUyMjY2WiIsInRvb2wiOiJrb3J1LXNjYW4ifSwic3ByaW50IjoiY3VycmVudCIsInN0YXR1cyI6Im9wZW4iLCJzeW5jIjp7fSwidXBkYXRlZF9hdCI6IjIwMjYtMDktMTlUMTc6Mjk6MTcuMDY4MjUxWiJ9fQ", "created_at": "2026-09-19T17:29:17.068246Z", "updated_at": "2026-09-19T17:29:17.068251Z"}, "PLF-167": {"id": "PLF-167", "name": "Address code smell: God Function: send_command", "contract_version": "planfile.ticket/v1", "status": "open", "priority": "normal", "sprint": "current", "source": {"tool": "koru-scan", "timestamp": "2026-09-19T17:29:17.839900Z", "context": {}}, "description": "code2llm reports `God Function: send_command` in `src/tagi/cli/git_operations.py:90`.\n\nFunction 'send_command' is oversized: CC=7, fan-out=13, mutations=9.\n\nMake the smallest refactor that removes the smell and run local tests.\n\ncode2llm-dedupe: code2llm:smell:god_function:src/tagi/cli/git_operations.py:90:God Function: send_command", "acceptance_criteria": [], "labels": ["llm-ready", "code2llm", "code-smell", "god-function"], "blocked_by": [], "blocks": [], "children": [], "files": ["src/tagi/cli/git_operations.py"], "sync": {}, "history": [], "dsl": "SODL/1 id=evt_0070ec25d0348db59a671c5a event_hash=d7877a6e71bb42c74984c67804b78e6e0716161794288ff8b9c77019e0d52b30 timestamp=2026-09-19T17%3A29%3A17.860410%2B00%3A00 kind=task source=planfile.ticket ticket_id=PLF-167 actor=koru-scan oql=ticket.create uri=planfile%3A%2F%2Ftickets%2FPLF-167%2Fcommand%2Fcreate mode=apply status=open correlation_id=PLF-167 causation_id=- input_hash=094dbbace041d2eb7af5002d22008dba9b42c08b5bfe88e6f924ea8a577809c4 receipt_ref=- replayable=true data=eyJwYXlsb2FkIjp7ImFjY2VwdGFuY2VfY3JpdGVyaWEiOltdLCJibG9ja2VkX2J5IjpbXSwiYmxvY2tzIjpbXSwiY2hpbGRyZW4iOltdLCJjb250cmFjdF92ZXJzaW9uIjoicGxhbmZpbGUudGlja2V0L3YxIiwiY3JlYXRlZF9hdCI6IjIwMjYtMDktMTlUMTc6Mjk6MTcuODYwNDEwWiIsImRlc2NyaXB0aW9uIjoiY29kZTJsbG0gcmVwb3J0cyBgR29kIEZ1bmN0aW9uOiBzZW5kX2NvbW1hbmRgIGluIGBzcmMvdGFnaS9jbGkvZ2l0X29wZXJhdGlvbnMucHk6OTBgLlxuXG5GdW5jdGlvbiAnc2VuZF9jb21tYW5kJyBpcyBvdmVyc2l6ZWQ6IENDPTcsIGZhbi1vdXQ9MTMsIG11dGF0aW9ucz05LlxuXG5NYWtlIHRoZSBzbWFsbGVzdCByZWZhY3RvciB0aGF0IHJlbW92ZXMgdGhlIHNtZWxsIGFuZCBydW4gbG9jYWwgdGVzdHMuXG5cbmNvZGUybGxtLWRlZHVwZTogY29kZTJsbG06c21lbGw6Z29kX2Z1bmN0aW9uOnNyYy90YWdpL2NsaS9naXRfb3BlcmF0aW9ucy5weTo5MDpHb2QgRnVuY3Rpb246IHNlbmRfY29tbWFuZCIsImZpbGVzIjpbInNyYy90YWdpL2NsaS9naXRfb3BlcmF0aW9ucy5weSJdLCJpZCI6IlBMRi0xNjciLCJsYWJlbHMiOlsibGxtLXJlYWR5IiwiY29kZTJsbG0iLCJjb2RlLXNtZWxsIiwiZ29kLWZ1bmN0aW9uIl0sIm5hbWUiOiJBZGRyZXNzIGNvZGUgc21lbGw6IEdvZCBGdW5jdGlvbjogc2VuZF9jb21tYW5kIiwicHJpb3JpdHkiOiJub3JtYWwiLCJzb3VyY2UiOnsiY29udGV4dCI6e30sInRpbWVzdGFtcCI6IjIwMjYtMDktMTlUMTc6Mjk6MTcuODM5OTAwWiIsInRvb2wiOiJrb3J1LXNjYW4ifSwic3ByaW50IjoiY3VycmVudCIsInN0YXR1cyI6Im9wZW4iLCJzeW5jIjp7fSwidXBkYXRlZF9hdCI6IjIwMjYtMDktMTlUMTc6Mjk6MTcuODYwNDE3WiJ9fQ", "created_at": "2026-09-19T17:29:17.860410Z", "updated_at": "2026-09-19T17:29:17.860417Z"}, "PLF-168": {"id": "PLF-168", "name": "Address code smell: God Function: setup_logger", "contract_version": "planfile.ticket/v1", "status": "open", "priority": "normal", "sprint": "current", "source": {"tool": "koru-scan", "timestamp": "2026-09-19T17:29:18.740949Z", "context": {}}, "description": "code2llm reports `God Function: setup_logger` in `src/tagi/utils/logger.py:9`.\n\nFunction 'setup_logger' is oversized: CC=4, fan-out=13, mutations=14.\n\nMake the smallest refactor that removes the smell and run local tests.\n\ncode2llm-dedupe: code2llm:smell:god_function:src/tagi/utils/logger.py:9:God Function: setup_logger", "acceptance_criteria": [], "labels": ["llm-ready", "code2llm", "code-smell", "god-function"], "blocked_by": [], "blocks": [], "children": [], "files": ["src/tagi/utils/logger.py"], "sync": {}, "history": [], "dsl": "SODL/1 id=evt_f0359544002aed038d929132 event_hash=d257a0ac3a625f71ba5bf32550ced9e807cf2dfce823a01aeeaa442df5607306 timestamp=2026-09-19T17%3A29%3A18.761477%2B00%3A00 kind=task source=planfile.ticket ticket_id=PLF-168 actor=koru-scan oql=ticket.create uri=planfile%3A%2F%2Ftickets%2FPLF-168%2Fcommand%2Fcreate mode=apply status=open correlation_id=PLF-168 causation_id=- input_hash=5455099356079369221e96f911f718af3f22a074c77828cfce5d271410ed75e8 receipt_ref=- replayable=true data=eyJwYXlsb2FkIjp7ImFjY2VwdGFuY2VfY3JpdGVyaWEiOltdLCJibG9ja2VkX2J5IjpbXSwiYmxvY2tzIjpbXSwiY2hpbGRyZW4iOltdLCJjb250cmFjdF92ZXJzaW9uIjoicGxhbmZpbGUudGlja2V0L3YxIiwiY3JlYXRlZF9hdCI6IjIwMjYtMDktMTlUMTc6Mjk6MTguNzYxNDc3WiIsImRlc2NyaXB0aW9uIjoiY29kZTJsbG0gcmVwb3J0cyBgR29kIEZ1bmN0aW9uOiBzZXR1cF9sb2dnZXJgIGluIGBzcmMvdGFnaS91dGlscy9sb2dnZXIucHk6OWAuXG5cbkZ1bmN0aW9uICdzZXR1cF9sb2dnZXInIGlzIG92ZXJzaXplZDogQ0M9NCwgZmFuLW91dD0xMywgbXV0YXRpb25zPTE0LlxuXG5NYWtlIHRoZSBzbWFsbGVzdCByZWZhY3RvciB0aGF0IHJlbW92ZXMgdGhlIHNtZWxsIGFuZCBydW4gbG9jYWwgdGVzdHMuXG5cbmNvZGUybGxtLWRlZHVwZTogY29kZTJsbG06c21lbGw6Z29kX2Z1bmN0aW9uOnNyYy90YWdpL3V0aWxzL2xvZ2dlci5weTo5OkdvZCBGdW5jdGlvbjogc2V0dXBfbG9nZ2VyIiwiZmlsZXMiOlsic3JjL3RhZ2kvdXRpbHMvbG9nZ2VyLnB5Il0sImlkIjoiUExGLTE2OCIsImxhYmVscyI6WyJsbG0tcmVhZHkiLCJjb2RlMmxsbSIsImNvZGUtc21lbGwiLCJnb2QtZnVuY3Rpb24iXSwibmFtZSI6IkFkZHJlc3MgY29kZSBzbWVsbDogR29kIEZ1bmN0aW9uOiBzZXR1cF9sb2dnZXIiLCJwcmlvcml0eSI6Im5vcm1hbCIsInNvdXJjZSI6eyJjb250ZXh0Ijp7fSwidGltZXN0YW1wIjoiMjAyNi0wOS0xOVQxNzoyOToxOC43NDA5NDlaIiwidG9vbCI6ImtvcnUtc2NhbiJ9LCJzcHJpbnQiOiJjdXJyZW50Iiwic3RhdHVzIjoib3BlbiIsInN5bmMiOnt9LCJ1cGRhdGVkX2F0IjoiMjAyNi0wOS0xOVQxNzoyOToxOC43NjE0ODNaIn19", "created_at": "2026-09-19T17:29:18.761477Z", "updated_at": "2026-09-19T17:29:18.761483Z"}, "PLF-169": {"id": "PLF-169", "name": "Address code smell: God Function: summary_command", "contract_version": "planfile.ticket/v1", "status": "open", "priority": "normal", "sprint": "current", "source": {"tool": "koru-scan", "timestamp": "2026-09-19T17:29:19.612901Z", "context": {}}, "description": "code2llm reports `God Function: summary_command` in `src/tagi/cli/utility_commands.py:25`.\n\nFunction 'summary_command' is oversized: CC=7, fan-out=13, mutations=17.\n\nMake the smallest refactor that removes the smell and run local tests.\n\ncode2llm-dedupe: code2llm:smell:god_function:src/tagi/cli/utility_commands.py:25:God Function: summary_command", "acceptance_criteria": [], "labels": ["llm-ready", "code2llm", "code-smell", "god-function"], "blocked_by": [], "blocks": [], "children": [], "files": ["src/tagi/cli/utility_commands.py"], "sync": {}, "history": [], "dsl": "SODL/1 id=evt_e1d3735ae7f1ce6cfd509c69 event_hash=4a5cf616d161a2108e26202203152fecce7c4581229df2b6b8f59e5262182551 timestamp=2026-09-19T17%3A29%3A19.641507%2B00%3A00 kind=task source=planfile.ticket ticket_id=PLF-169 actor=koru-scan oql=ticket.create uri=planfile%3A%2F%2Ftickets%2FPLF-169%2Fcommand%2Fcreate mode=apply status=open correlation_id=PLF-169 causation_id=- input_hash=7eb42404efc63ebac74b06bba227b2078d3f968671273d50246688c2b076a63c receipt_ref=- replayable=true data=eyJwYXlsb2FkIjp7ImFjY2VwdGFuY2VfY3JpdGVyaWEiOltdLCJibG9ja2VkX2J5IjpbXSwiYmxvY2tzIjpbXSwiY2hpbGRyZW4iOltdLCJjb250cmFjdF92ZXJzaW9uIjoicGxhbmZpbGUudGlja2V0L3YxIiwiY3JlYXRlZF9hdCI6IjIwMjYtMDktMTlUMTc6Mjk6MTkuNjQxNTA3WiIsImRlc2NyaXB0aW9uIjoiY29kZTJsbG0gcmVwb3J0cyBgR29kIEZ1bmN0aW9uOiBzdW1tYXJ5X2NvbW1hbmRgIGluIGBzcmMvdGFnaS9jbGkvdXRpbGl0eV9jb21tYW5kcy5weToyNWAuXG5cbkZ1bmN0aW9uICdzdW1tYXJ5X2NvbW1hbmQnIGlzIG92ZXJzaXplZDogQ0M9NywgZmFuLW91dD0xMywgbXV0YXRpb25zPTE3LlxuXG5NYWtlIHRoZSBzbWFsbGVzdCByZWZhY3RvciB0aGF0IHJlbW92ZXMgdGhlIHNtZWxsIGFuZCBydW4gbG9jYWwgdGVzdHMuXG5cbmNvZGUybGxtLWRlZHVwZTogY29kZTJsbG06c21lbGw6Z29kX2Z1bmN0aW9uOnNyYy90YWdpL2NsaS91dGlsaXR5X2NvbW1hbmRzLnB5OjI1OkdvZCBGdW5jdGlvbjogc3VtbWFyeV9jb21tYW5kIiwiZmlsZXMiOlsic3JjL3RhZ2kvY2xpL3V0aWxpdHlfY29tbWFuZHMucHkiXSwiaWQiOiJQTEYtMTY5IiwibGFiZWxzIjpbImxsbS1yZWFkeSIsImNvZGUybGxtIiwiY29kZS1zbWVsbCIsImdvZC1mdW5jdGlvbiJdLCJuYW1lIjoiQWRkcmVzcyBjb2RlIHNtZWxsOiBHb2QgRnVuY3Rpb246IHN1bW1hcnlfY29tbWFuZCIsInByaW9yaXR5Ijoibm9ybWFsIiwic291cmNlIjp7ImNvbnRleHQiOnt9LCJ0aW1lc3RhbXAiOiIyMDI2LTA5LTE5VDE3OjI5OjE5LjYxMjkwMVoiLCJ0b29sIjoia29ydS1zY2FuIn0sInNwcmludCI6ImN1cnJlbnQiLCJzdGF0dXMiOiJvcGVuIiwic3luYyI6e30sInVwZGF0ZWRfYXQiOiIyMDI2LTA5LTE5VDE3OjI5OjE5LjY0MTUxNFoifX0", "created_at": "2026-09-19T17:29:19.641507Z", "updated_at": "2026-09-19T17:29:19.641514Z"}}}}}
\ No newline at end of file
+{"version": 1, "yaml_mtime_ns": 1789852468222781064, "data": {"sprint": {"id": "current", "name": "Current", "status": "active", "tickets": {"GITHUB-138": {"assignee": null, "backend": "github", "description": "\ncode2llm reports `Shotgun Surgery: tags` in `src/tagi/heuristics/tags.py:66`.\n\nMutation of variable 'tags' spans 6 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.\n\n---\n\n**Strategy Metadata:**\n- repository: semcod/tagi\n- planfile_id: semcod/tagi:2521ebe187e61bb2:PLF-115\n", "external_id": "138", "history": [{"action": "update", "changes": ["sprint"], "reason": "move_ticket", "source": "planfile.store", "timestamp": "2026-09-19T17:21:43.578226+00:00"}], "integration": ["github"], "labels": ["planfile", "managed", "koru", "nl-task", "llm-ready", "priority-high", "code2llm", "code-smell", "shotgun-surgery"], "metadata": {"deduplication_key": "semcod/tagi:2521ebe187e61bb2:PLF-115"}, "name": "Address code smell: Shotgun Surgery: tags", "sprint": "current", "status": "open", "sync": {"github": {"id": "138", "key": "semcod/tagi#138", "url": "https://github.com/semcod/tagi/issues/138"}}, "updated_at": "2026-09-19T17:21:43.578177+00:00"}, "GITHUB-6": {"assignee": null, "backend": "github", "description": "\n## Cel i etap\n\nKampania wellmanifest/docs v0.4.0 dla **semcod/tagi**. Etap: **PLAN / poczekalnia**.\nTo zgłoszenie nie uruchamia wykonawcy ani nie nadaje uprawnień do usuwania danych, zmiany chronionego CI lub samodzielnego merge.\n\nStandard: https://github.com/wellmanifest/docs/tree/867241833a7e69188d595505d116115736438c7a\nPrzed rozpoczęciem sprawdzić, czy istniejąca adopcja i zadania już realizują ten zakres; wznowić pasujące zadanie zamiast tworzyć konkurencyjne.\n\n## Obserwacja wejściowa (2026-09-14, lokalny checkout)\n\n- Rewizja: `3b550841ed6c7be485c5056a7a45aaae3a9f7d16`; liczba śledzonych Markdown pod docs/: **5**.\n- To inwentaryzacja ścieżek, nie aktualny audyt treści ani dowód duplikacji. Ponowić względem aktualnej gałęzi domyślnej `main`.\n- `docs/README.md`\n- `docs/configuration.md`\n- `docs/information/internal-dependencies.md`\n- `docs/provider-detection.md`\n- `docs/troubleshooting.md`\n\n## Zakres i kryteria odbioru\n\n- [ ] AC-01: Zmapować docs, indeksy, changelogi, obecne i historyczne tickety (Planfile/project/SQLite), issues i PR-y. Uzgodnić statusy z kodem oraz dowodami scalenia; nie zamykać zadań na podstawie starego TODO.\n- [ ] AC-02: Dla każdej rodziny dokumentów wskazać właściciela, kanoniczną ścieżkę i decyzję: zachować / zaktualizować / scalić / superseded. Podobieństwo tekstu nie jest dowodem zbędności; nie usuwać unikalnych wymagań, dowodów ani zarządzanych kopii standardów.\n- [ ] AC-03: Migrować małymi partiami do krótkich plików WIELKIMI_LITERAMI.md w odpowiednich kategoriach FEATURE, BUGFIX, SERVICE, INFORMATION, ANALYSIS, REFACTORING lub DECISION. Pilność zapisać jako P0–P3, nie jako typ dokumentu. Zachować wyjątki organizacyjne i zgodność historycznego v1.\n- [ ] AC-04: Zachować stare linki i kotwice przez poprawne mapy dawnych ścieżek; zaktualizować docs/README.md i odnośniki z changeloga bez powielania treści. Udokumentować każdą usuniętą kopię i dowód zachowania jej unikalnej treści; nie kasować historii ticketów.\n- [ ] AC-05: Przyjąć immutable pin standardu w procesie właściwym dla repo i podłączyć preflight oraz finalny checker do istniejącego CI. Sprawdzić zaufane base/HEAD. Globalny filtr fleet standardu ograniczony do subactor/* nie dowodzi pokrycia semcod/autogrammar; raportować i rozwiązać tę lukę bez obejścia bramy.\n- [ ] AC-06: DSL jest opcjonalny tylko dla formalnych FEATURE/BUGFIX; użyć parsera przypiętego przez policy-dsl.lock.json. DSL nie wykonuje testów ani nie zatwierdza zmiany. Nie przepisywać całej dokumentacji na DSL.\n- [ ] AC-07: Sprawdzić linki i kotwice, zachowanie wymagań, governance, testy projektu i ponowne uruchomienie bez dodatkowych zmian. Oddzielić liczbę plików od jakości i kompletności migracji.\n- [ ] AC-08: Osobny ograniczony ticket/worktree/PR zgodnie z zasadami repo; niezależny review i chroniona publikacja. Raport końcowy: pokrycie, pominięcia, konflikty, model rzeczywiście użyty, wyniki kontroli i URL scalonego PR.\n\n## Kolejność\n\nAudyt read-only → uzgodnienie istniejących zadań → plan migracji → pilotaż → małe partie → przegląd i publikacja.\nPierwsza grupa pilotażowa: semcod/koru, semcod/goal, semcod/taskand-glm53. Pozostałe repo oczekują oceny pilotażu; samo utworzenie issue nie włącza automatyzacji.\nNie nadpisywać brudnych checkoutów, nie zmieniać aplikacji ani statusów historycznych zadań w ramach samego porządkowania docs.\n\n## Powiązane wcześniejsze zgłoszenia\n\n- Audyt GitHub nie znalazł powiązanego zgłoszenia po tytule; nadal sprawdzić lokalne i historyczne zadania.\n\n\n---\n\n**Strategy Metadata:**\n- deduplication_key: wellmanifest-docs-v04:semcod/tagi\n- campaign: wellmanifest-docs-v04\n- standard_revision: 867241833a7e69188d595505d116115736438c7a\n- phase: PLAN\n", "external_id": "6", "history": [{"action": "update", "changes": ["sprint"], "reason": "move_ticket", "source": "planfile.store", "timestamp": "2026-09-19T17:21:44.611616+00:00"}], "integration": ["github"], "labels": ["documentation", "docs-standard-v04", "planning-only", "priority-normal", "planfile", "managed"], "metadata": {"deduplication_key": "wellmanifest-docs-v04:semcod/tagi"}, "name": "[DOCS] Standaryzacja dokumentacji, uzgodnienie historii i deduplikacja", "sprint": "current", "status": "open", "sync": {"github": {"id": "6", "key": "semcod/tagi#6", "url": "https://github.com/semcod/tagi/issues/6"}}, "updated_at": "2026-09-19T17:21:44.611586+00:00"}, "GITHUB-7": {"assignee": null, "backend": "github", "description": "\n\nAudit date: 2026-09-15. Scope: this repository only; planning, not authorization to modify source or deploy.\n\nObserved local checkout SHA: `3b550841ed6c7be485c5056a7a45aaae3a9f7d16`. Local declared adoption status: `review-required`.\n\nComparison is against observed GitHub default-branch commits and VERSION, not an assertion that every changed commit requires an upgrade.\n\nNo declarations means unavailable evidence, not proof that no standard is followed. Select applicable wellmanifest packs; do not install every pack indiscriminately.\n\n- wellmanifest/docs: adopted `ebe7501063ef4f3e63ded610c2d3183010ca636e` (version None); observed upstream `aa92136b4e94f48355c39fb206286aba024c6aa4` (version 0.5.0); pin-differs-review-required. Declaration: `.governance/docs.json`.\n\n## Acceptance criteria\n\n- [ ] Reconcile actual applicable standard adoptions with deployed/default-branch state; record unknowns and exemptions.\n- [ ] For each differing pin, compare version and relevant artifacts; use the managed adopter in a separate bounded implementation ticket only when needed.\n- [ ] Preserve project overrides, dirty work, historical tasks and stable document links; never edit managed hashes to bypass validation.\n- [ ] Verify local Planfile ID to GitHub issue mapping and retry deduplication without broad bidirectional sync.\n- [ ] Run managed governance and stack checks after any separately authorized adoption; report declared versus protected-CI coverage.\n\nExisting related work (reconcile/reuse scope; do not duplicate implementation):\n- https://github.com/semcod/tagi/issues/6\n\n---\n\n**Strategy Metadata:**\n- deduplication_key: dev-quality-fleet-readiness-v1:semcod/tagi\n- planfile_id: PLF-012\n", "external_id": "7", "history": [{"action": "update", "changes": ["sprint"], "reason": "move_ticket", "source": "planfile.store", "timestamp": "2026-09-19T17:21:45.359903+00:00"}], "integration": ["github"], "labels": ["planfile", "managed"], "metadata": {"deduplication_key": "dev-quality-fleet-readiness-v1:semcod/tagi"}, "name": "[WELLMANIFEST] Reconcile adopted standards and verify Planfile delivery", "sprint": "current", "status": "open", "sync": {"github": {"id": "7", "key": "semcod/tagi#7", "url": "https://github.com/semcod/tagi/issues/7"}}, "updated_at": "2026-09-19T17:21:45.359877+00:00"}, "PLF-088": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-17T22:59:24.712993+00:00", "description": "\ncode2llm reports `Data Clump: body, repo_path, title` in `src/tagi/cli/provider_commands.py:34`.\n\nArguments (body, repo_path, title) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "84", "files": ["src/tagi/cli/provider_commands.py"], "history": [{"action": "created", "message": "code2llm reports `Data Clump: body, repo_path, title` in `src/tagi/cli/provider_commands.py:34`.\n\nArguments (body, repo_path, title) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-17T22:59:24.712993+00:00"}], "id": "PLF-088", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `Data Clump: body, repo_path, title` in `src/tagi/cli/provider_commands.py:34`.\n\nArguments (body, repo_path, title) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "code-smell", "data-clump", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal"], "metadata": {"deduplication_key": "PLF-088"}, "name": "Address code smell: Data Clump: body, repo_path, title", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:data_clump:src/tagi/cli/provider_commands.py:34:Data Clump: body, repo_path, title", "evidence": {"artifact": {"mtime_ns": 1789685545813892871, "path": "project/analysis.toon.yaml", "sha256": "56388ccd6ea846f313f89eee0672e29af4d29e58ce0898052bd8ff8ebb956a7b", "size_bytes": 10159}, "files": [{"mtime_ns": 1789683999494622908, "path": "src/tagi/cli/provider_commands.py", "sha256": "68ce18c77819dae347a71d285994bba864fa304bce74de2420ca81f96c3f8225", "size_bytes": 2695}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789685545874477122, "path": "project/planfile-tickets.yaml", "sha256": "b10db9962e41e134f1374ebe04fdb8c3effa635fcb0f2d59f06498c1ae2f5b2a", "size_bytes": 29760}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `Data Clump: body, repo_path, title` in `src/tagi/cli/provider_commands.py:34`.\n\nArguments (body, repo_path, title) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_data_clump"}, "timestamp": "2026-09-17T22:59:24.712993+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "84", "key": "semcod/tagi#84", "url": "https://github.com/semcod/tagi/issues/84"}}, "updated_at": "2026-09-17T22:59:24.712993+00:00"}, "PLF-089": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-17T23:00:40.968749+00:00", "description": "\ncode2llm reports `God Function: _calculate_complexity` in `src/tagi/heuristics/metrics.py:46`.\n\nFunction '_calculate_complexity' is oversized: CC=5, fan-out=6, mutations=10.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "85", "files": ["src/tagi/heuristics/metrics.py"], "history": [{"action": "created", "message": "code2llm reports `God Function: _calculate_complexity` in `src/tagi/heuristics/metrics.py:46`.\n\nFunction '_calculate_complexity' is oversized: CC=5, fan-out=6, mutations=10.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-17T23:00:40.968749+00:00"}], "id": "PLF-089", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `God Function: _calculate_complexity` in `src/tagi/heuristics/metrics.py:46`.\n\nFunction '_calculate_complexity' is oversized: CC=5, fan-out=6, mutations=10.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "code-smell", "god-function", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal"], "metadata": {"deduplication_key": "PLF-089"}, "name": "Address code smell: God Function: _calculate_complexity", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:god_function:src/tagi/heuristics/metrics.py:46:God Function: _calculate_complexity", "evidence": {"artifact": {"mtime_ns": 1789685545813892871, "path": "project/analysis.toon.yaml", "sha256": "56388ccd6ea846f313f89eee0672e29af4d29e58ce0898052bd8ff8ebb956a7b", "size_bytes": 10159}, "files": [{"mtime_ns": 1779811310790143885, "path": "src/tagi/heuristics/metrics.py", "sha256": "dcd2cc0255c4f2ee3eee8aaae72af3e54f0aa6a78598d290d61eb44299401b2d", "size_bytes": 6521}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789685545874477122, "path": "project/planfile-tickets.yaml", "sha256": "b10db9962e41e134f1374ebe04fdb8c3effa635fcb0f2d59f06498c1ae2f5b2a", "size_bytes": 29760}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `God Function: _calculate_complexity` in `src/tagi/heuristics/metrics.py:46`.\n\nFunction '_calculate_complexity' is oversized: CC=5, fan-out=6, mutations=10.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_god_function"}, "timestamp": "2026-09-17T23:00:40.968749+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "85", "key": "semcod/tagi#85", "url": "https://github.com/semcod/tagi/issues/85"}}, "updated_at": "2026-09-17T23:00:40.968749+00:00"}, "PLF-090": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-17T23:02:04.118321+00:00", "description": "\ncode2llm reports `God Function: _calculate_impact` in `src/tagi/heuristics/metrics.py:78`.\n\nFunction '_calculate_impact' is oversized: CC=5, fan-out=3, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "86", "files": ["src/tagi/heuristics/metrics.py"], "history": [{"action": "created", "message": "code2llm reports `God Function: _calculate_impact` in `src/tagi/heuristics/metrics.py:78`.\n\nFunction '_calculate_impact' is oversized: CC=5, fan-out=3, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-17T23:02:04.118321+00:00"}], "id": "PLF-090", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `God Function: _calculate_impact` in `src/tagi/heuristics/metrics.py:78`.\n\nFunction '_calculate_impact' is oversized: CC=5, fan-out=3, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "code-smell", "god-function", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal"], "metadata": {"deduplication_key": "PLF-090"}, "name": "Address code smell: God Function: _calculate_impact", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:god_function:src/tagi/heuristics/metrics.py:78:God Function: _calculate_impact", "evidence": {"artifact": {"mtime_ns": 1789685545813892871, "path": "project/analysis.toon.yaml", "sha256": "56388ccd6ea846f313f89eee0672e29af4d29e58ce0898052bd8ff8ebb956a7b", "size_bytes": 10159}, "files": [{"mtime_ns": 1779811310790143885, "path": "src/tagi/heuristics/metrics.py", "sha256": "dcd2cc0255c4f2ee3eee8aaae72af3e54f0aa6a78598d290d61eb44299401b2d", "size_bytes": 6521}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789685545874477122, "path": "project/planfile-tickets.yaml", "sha256": "b10db9962e41e134f1374ebe04fdb8c3effa635fcb0f2d59f06498c1ae2f5b2a", "size_bytes": 29760}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `God Function: _calculate_impact` in `src/tagi/heuristics/metrics.py:78`.\n\nFunction '_calculate_impact' is oversized: CC=5, fan-out=3, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_god_function"}, "timestamp": "2026-09-17T23:02:04.118321+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "86", "key": "semcod/tagi#86", "url": "https://github.com/semcod/tagi/issues/86"}}, "updated_at": "2026-09-17T23:02:04.118321+00:00"}, "PLF-091": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-17T23:03:33.158245+00:00", "description": "\ncode2llm reports `God Function: _load_config` in `src/tagi/config.py:30`.\n\nFunction '_load_config' is oversized: CC=13, fan-out=6, mutations=0.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "87", "files": ["src/tagi/config.py"], "history": [{"action": "created", "message": "code2llm reports `God Function: _load_config` in `src/tagi/config.py:30`.\n\nFunction '_load_config' is oversized: CC=13, fan-out=6, mutations=0.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-17T23:03:33.158245+00:00"}], "id": "PLF-091", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `God Function: _load_config` in `src/tagi/config.py:30`.\n\nFunction '_load_config' is oversized: CC=13, fan-out=6, mutations=0.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "code-smell", "god-function", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal"], "metadata": {"deduplication_key": "PLF-091"}, "name": "Address code smell: God Function: _load_config", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:god_function:src/tagi/config.py:30:God Function: _load_config", "evidence": {"artifact": {"mtime_ns": 1789685545813892871, "path": "project/analysis.toon.yaml", "sha256": "56388ccd6ea846f313f89eee0672e29af4d29e58ce0898052bd8ff8ebb956a7b", "size_bytes": 10159}, "files": [{"mtime_ns": 1779802844828755285, "path": "src/tagi/config.py", "sha256": "a3f500d3b7d42e797a2054b5ec56c45baf27c8a5e9877c20c9f23f63c091433a", "size_bytes": 4314}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789685545874477122, "path": "project/planfile-tickets.yaml", "sha256": "b10db9962e41e134f1374ebe04fdb8c3effa635fcb0f2d59f06498c1ae2f5b2a", "size_bytes": 29760}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `God Function: _load_config` in `src/tagi/config.py:30`.\n\nFunction '_load_config' is oversized: CC=13, fan-out=6, mutations=0.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_god_function"}, "timestamp": "2026-09-17T23:03:33.158245+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "87", "key": "semcod/tagi#87", "url": "https://github.com/semcod/tagi/issues/87"}}, "updated_at": "2026-09-17T23:03:33.158245+00:00"}, "PLF-092": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-17T23:05:09.293887+00:00", "description": "\ncode2llm reports `God Function: analyze_python_imports` in `src/tagi/analyzer/dependency_graph.py:9`.\n\nFunction 'analyze_python_imports' is oversized: CC=8, fan-out=6, mutations=7.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "88", "files": ["src/tagi/analyzer/dependency_graph.py"], "history": [{"action": "created", "message": "code2llm reports `God Function: analyze_python_imports` in `src/tagi/analyzer/dependency_graph.py:9`.\n\nFunction 'analyze_python_imports' is oversized: CC=8, fan-out=6, mutations=7.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-17T23:05:09.293887+00:00"}], "id": "PLF-092", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `God Function: analyze_python_imports` in `src/tagi/analyzer/dependency_graph.py:9`.\n\nFunction 'analyze_python_imports' is oversized: CC=8, fan-out=6, mutations=7.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "code-smell", "god-function", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal"], "metadata": {"deduplication_key": "PLF-092"}, "name": "Address code smell: God Function: analyze_python_imports", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:god_function:src/tagi/analyzer/dependency_graph.py:9:God Function: analyze_python_imports", "evidence": {"artifact": {"mtime_ns": 1789685545813892871, "path": "project/analysis.toon.yaml", "sha256": "56388ccd6ea846f313f89eee0672e29af4d29e58ce0898052bd8ff8ebb956a7b", "size_bytes": 10159}, "files": [{"mtime_ns": 1779810400712577609, "path": "src/tagi/analyzer/dependency_graph.py", "sha256": "56c60106b3e4d548089071146800fdcc6eddfdcb2b14c53bce8d7532487723bf", "size_bytes": 5250}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789685545874477122, "path": "project/planfile-tickets.yaml", "sha256": "b10db9962e41e134f1374ebe04fdb8c3effa635fcb0f2d59f06498c1ae2f5b2a", "size_bytes": 29760}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `God Function: analyze_python_imports` in `src/tagi/analyzer/dependency_graph.py:9`.\n\nFunction 'analyze_python_imports' is oversized: CC=8, fan-out=6, mutations=7.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_god_function"}, "timestamp": "2026-09-17T23:05:09.293887+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "88", "key": "semcod/tagi#88", "url": "https://github.com/semcod/tagi/issues/88"}}, "updated_at": "2026-09-17T23:05:09.293887+00:00"}, "PLF-093": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-17T23:06:54.291030+00:00", "description": "\ncode2llm reports `God Function: apply_tags` in `src/tagi/heuristics/tags.py:12`.\n\nFunction 'apply_tags' is oversized: CC=11, fan-out=10, mutations=16.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "89", "files": ["src/tagi/heuristics/tags.py"], "history": [{"action": "created", "message": "code2llm reports `God Function: apply_tags` in `src/tagi/heuristics/tags.py:12`.\n\nFunction 'apply_tags' is oversized: CC=11, fan-out=10, mutations=16.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-17T23:06:54.291030+00:00"}], "id": "PLF-093", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `God Function: apply_tags` in `src/tagi/heuristics/tags.py:12`.\n\nFunction 'apply_tags' is oversized: CC=11, fan-out=10, mutations=16.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "code-smell", "god-function", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal"], "metadata": {"deduplication_key": "PLF-093"}, "name": "Address code smell: God Function: apply_tags", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:god_function:src/tagi/heuristics/tags.py:12:God Function: apply_tags", "evidence": {"artifact": {"mtime_ns": 1789685545813892871, "path": "project/analysis.toon.yaml", "sha256": "56388ccd6ea846f313f89eee0672e29af4d29e58ce0898052bd8ff8ebb956a7b", "size_bytes": 10159}, "files": [{"mtime_ns": 1779811321149251584, "path": "src/tagi/heuristics/tags.py", "sha256": "098c64d70cd068c2113523675c53a957d92d646558f9295490c4d6f027c5d064", "size_bytes": 3404}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789685545874477122, "path": "project/planfile-tickets.yaml", "sha256": "b10db9962e41e134f1374ebe04fdb8c3effa635fcb0f2d59f06498c1ae2f5b2a", "size_bytes": 29760}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `God Function: apply_tags` in `src/tagi/heuristics/tags.py:12`.\n\nFunction 'apply_tags' is oversized: CC=11, fan-out=10, mutations=16.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_god_function"}, "timestamp": "2026-09-17T23:06:54.291030+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "closed", "sync": {"github": {"id": "89", "key": "semcod/tagi#89", "url": "https://github.com/semcod/tagi/issues/89"}}, "updated_at": "2026-09-17T23:06:54.291030+00:00"}, "PLF-094": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-17T23:08:50.360840+00:00", "description": "\ncode2llm reports `God Function: build_report_header` in `src/tagi/utils/summary_helpers.py:9`.\n\nFunction 'build_report_header' is oversized: CC=1, fan-out=2, mutations=7.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "90", "files": ["src/tagi/utils/summary_helpers.py"], "history": [{"action": "created", "message": "code2llm reports `God Function: build_report_header` in `src/tagi/utils/summary_helpers.py:9`.\n\nFunction 'build_report_header' is oversized: CC=1, fan-out=2, mutations=7.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-17T23:08:50.360840+00:00"}], "id": "PLF-094", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `God Function: build_report_header` in `src/tagi/utils/summary_helpers.py:9`.\n\nFunction 'build_report_header' is oversized: CC=1, fan-out=2, mutations=7.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "code-smell", "god-function", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal"], "metadata": {"deduplication_key": "PLF-094"}, "name": "Address code smell: God Function: build_report_header", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:god_function:src/tagi/utils/summary_helpers.py:9:God Function: build_report_header", "evidence": {"artifact": {"mtime_ns": 1789685545813892871, "path": "project/analysis.toon.yaml", "sha256": "56388ccd6ea846f313f89eee0672e29af4d29e58ce0898052bd8ff8ebb956a7b", "size_bytes": 10159}, "files": [{"mtime_ns": 1779814990412632237, "path": "src/tagi/utils/summary_helpers.py", "sha256": "a887228547f1b705ca84a96f28fc2d6e62d0ea14bf143f32faa9a31fe3d7c1f4", "size_bytes": 3017}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789685545874477122, "path": "project/planfile-tickets.yaml", "sha256": "b10db9962e41e134f1374ebe04fdb8c3effa635fcb0f2d59f06498c1ae2f5b2a", "size_bytes": 29760}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `God Function: build_report_header` in `src/tagi/utils/summary_helpers.py:9`.\n\nFunction 'build_report_header' is oversized: CC=1, fan-out=2, mutations=7.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_god_function"}, "timestamp": "2026-09-17T23:08:50.360840+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "closed", "sync": {"github": {"id": "90", "key": "semcod/tagi#90", "url": "https://github.com/semcod/tagi/issues/90"}}, "updated_at": "2026-09-17T23:08:50.360840+00:00"}, "PLF-109": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-18T09:38:21.536635+00:00", "description": "\ncode2llm reports `Data Clump: title, repo_path, body` in `src/tagi/cli/provider_commands.py:34`.\n\nArguments (title, repo_path, body) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "105", "files": ["src/tagi/cli/provider_commands.py"], "history": [{"action": "created", "message": "code2llm reports `Data Clump: title, repo_path, body` in `src/tagi/cli/provider_commands.py:34`.\n\nArguments (title, repo_path, body) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-18T09:38:21.536635+00:00"}], "id": "PLF-109", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `Data Clump: title, repo_path, body` in `src/tagi/cli/provider_commands.py:34`.\n\nArguments (title, repo_path, body) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "code-smell", "data-clump", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal"], "metadata": {"deduplication_key": "PLF-109"}, "name": "Address code smell: Data Clump: title, repo_path, body", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:data_clump:src/tagi/cli/provider_commands.py:34:Data Clump: title, repo_path, body", "evidence": {"artifact": {"mtime_ns": 1789722832140537337, "path": "project/analysis.toon.yaml", "sha256": "9227c40940ca4b556af8287eff9e84ce13c73372481f6eeaf0baec8aca773183", "size_bytes": 10381}, "files": [{"mtime_ns": 1789683999494622908, "path": "src/tagi/cli/provider_commands.py", "sha256": "68ce18c77819dae347a71d285994bba864fa304bce74de2420ca81f96c3f8225", "size_bytes": 2695}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789722832246791207, "path": "project/planfile-tickets.yaml", "sha256": "7a9953a26921f7b5cc634a034b7a538112d1ddfd75b1718c00dd8d817d84ffa1", "size_bytes": 30378}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `Data Clump: title, repo_path, body` in `src/tagi/cli/provider_commands.py:34`.\n\nArguments (title, repo_path, body) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_data_clump"}, "timestamp": "2026-09-18T09:38:21.536635+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "closed", "sync": {"github": {"id": "105", "key": "semcod/tagi#105", "url": "https://github.com/semcod/tagi/issues/105"}}, "updated_at": "2026-09-18T09:38:21.536635+00:00"}, "PLF-118": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-18T14:31:50.817670+00:00", "description": "\ncode2llm reports `Data Clump: repo_path, title, body` in `src/tagi/cli/provider_commands.py:52`.\n\nArguments (repo_path, title, body) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "120", "files": ["src/tagi/cli/provider_commands.py"], "history": [{"action": "created", "message": "code2llm reports `Data Clump: repo_path, title, body` in `src/tagi/cli/provider_commands.py:52`.\n\nArguments (repo_path, title, body) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-18T14:31:50.817670+00:00"}], "id": "PLF-118", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `Data Clump: repo_path, title, body` in `src/tagi/cli/provider_commands.py:52`.\n\nArguments (repo_path, title, body) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "code-smell", "data-clump", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal"], "metadata": {"deduplication_key": "PLF-118"}, "name": "Address code smell: Data Clump: repo_path, title, body", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:data_clump:src/tagi/cli/provider_commands.py:52:Data Clump: repo_path, title, body", "evidence": {"artifact": {"mtime_ns": 1789739375335946512, "path": "project/analysis.toon.yaml", "sha256": "e383157236def469e5391fba233c9fa81738ef3ca0eafbc8c835538ac4a7d28d", "size_bytes": 10289}, "files": [{"mtime_ns": 1789739346063914074, "path": "src/tagi/cli/provider_commands.py", "sha256": "68ce18c77819dae347a71d285994bba864fa304bce74de2420ca81f96c3f8225", "size_bytes": 2695}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789739375343946523, "path": "project/planfile-tickets.yaml", "sha256": "2d45686552b801deab82b10b66dedd6931f7dbc2cb2cdde8e0d1e76d2fdb06d8", "size_bytes": 29675}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `Data Clump: repo_path, title, body` in `src/tagi/cli/provider_commands.py:52`.\n\nArguments (repo_path, title, body) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_data_clump"}, "timestamp": "2026-09-18T14:31:50.817670+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "closed", "sync": {"github": {"id": "120", "key": "semcod/tagi#120", "url": "https://github.com/semcod/tagi/issues/120"}}, "updated_at": "2026-09-18T14:31:50.817670+00:00"}, "PLF-119": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-18T14:43:06.846910+00:00", "description": "\ncode2llm reports `src.tagi.utils.inspect_helpers.resolve_filtered_changes` at `src/tagi/utils/inspect_helpers.py:10` with cyclomatic complexity 17 (limit 15).\n\nExtract smaller functions, flatten conditionals, or split strategy branches. Re-run code2llm after the change and keep tests green.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "121", "files": ["src/tagi/utils/inspect_helpers.py"], "history": [{"action": "created", "message": "code2llm reports `src.tagi.utils.inspect_helpers.resolve_filtered_changes` at `src/tagi/utils/inspect_helpers.py:10` with cyclomatic complexity 17 (limit 15).\n\nExtract smaller functions, flatten conditionals, or split strategy branches. Re-run code2llm after the change and keep tests green.", "source": "koru task", "timestamp": "2026-09-18T14:43:06.846910+00:00"}], "id": "PLF-119", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `src.tagi.utils.inspect_helpers.resolve_filtered_changes` at `src/tagi/utils/inspect_helpers.py:10` with cyclomatic complexity 17 (limit 15).\n\nExtract smaller functions, flatten conditionals, or split strategy branches. Re-run code2llm after the change and keep tests green."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "refactor", "complexity", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal"], "metadata": {"deduplication_key": "PLF-119"}, "name": "Reduce cyclomatic complexity: src.tagi.utils.inspect_helpers.resolve_filtered_changes (CC=17)", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:cc:src/tagi/utils/inspect_helpers.py:src.tagi.utils.inspect_helpers.resolve_filtered_changes", "evidence": {"artifact": {"mtime_ns": 1789742585715921903, "path": "project/analysis.toon.yaml", "sha256": "e9a3774622db919b2300b3dd93ce594a90a967409e255cdfb0080ffd22180384", "size_bytes": 10331}, "files": [{"mtime_ns": 1789740908491220682, "path": "src/tagi/utils/inspect_helpers.py", "sha256": "d344cd14a3264e66e6d12340f6dba4af3713defdc5d9c246f6aba695357c0ea3", "size_bytes": 3655}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789742585705778183, "path": "project/planfile-tickets.yaml", "sha256": "00e016113d76f457efd919f00242693f50364860d6fbf24ad2a4413700bab4cc", "size_bytes": 16625}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `src.tagi.utils.inspect_helpers.resolve_filtered_changes` at `src/tagi/utils/inspect_helpers.py:10` with cyclomatic complexity 17 (limit 15).\n\nExtract smaller functions, flatten conditionals, or split strategy branches. Re-run code2llm after the change and keep tests green.", "signal": "code2llm_cc"}, "timestamp": "2026-09-18T14:43:06.846910+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "closed", "sync": {"github": {"id": "121", "key": "semcod/tagi#121", "url": "https://github.com/semcod/tagi/issues/121"}}, "updated_at": "2026-09-18T14:43:06.846910+00:00"}, "PLF-120": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-18T14:47:32.219905+00:00", "description": "\ncode2llm reports `God Function: calculate_risk_score` in `src/tagi/heuristics/scoring.py:8`.\n\nFunction 'calculate_risk_score' is oversized: CC=7, fan-out=1, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "122", "files": ["src/tagi/heuristics/scoring.py"], "history": [{"action": "created", "message": "code2llm reports `God Function: calculate_risk_score` in `src/tagi/heuristics/scoring.py:8`.\n\nFunction 'calculate_risk_score' is oversized: CC=7, fan-out=1, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-18T14:47:32.219905+00:00"}], "id": "PLF-120", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `God Function: calculate_risk_score` in `src/tagi/heuristics/scoring.py:8`.\n\nFunction 'calculate_risk_score' is oversized: CC=7, fan-out=1, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "code-smell", "god-function", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal"], "metadata": {"deduplication_key": "PLF-120"}, "name": "Address code smell: God Function: calculate_risk_score", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:god_function:src/tagi/heuristics/scoring.py:8:God Function: calculate_risk_score", "evidence": {"artifact": {"mtime_ns": 1789742585715921903, "path": "project/analysis.toon.yaml", "sha256": "e9a3774622db919b2300b3dd93ce594a90a967409e255cdfb0080ffd22180384", "size_bytes": 10331}, "files": [{"mtime_ns": 1779802847615519629, "path": "src/tagi/heuristics/scoring.py", "sha256": "d9dd32ed33121c23414ebae66d33fcd25489b6bcdc29342d9942e6a5fb33e652", "size_bytes": 777}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789742585705778183, "path": "project/planfile-tickets.yaml", "sha256": "00e016113d76f457efd919f00242693f50364860d6fbf24ad2a4413700bab4cc", "size_bytes": 16625}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `God Function: calculate_risk_score` in `src/tagi/heuristics/scoring.py:8`.\n\nFunction 'calculate_risk_score' is oversized: CC=7, fan-out=1, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_god_function"}, "timestamp": "2026-09-18T14:47:32.219905+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "closed", "sync": {"github": {"id": "122", "key": "semcod/tagi#122", "url": "https://github.com/semcod/tagi/issues/122"}}, "updated_at": "2026-09-18T14:47:32.219905+00:00"}, "PLF-126": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-18T15:46:34.272245+00:00", "description": "\ncode2llm reports `God Function: group_by_branch` in `src/tagi/planner/branch_grouper.py:7`.\n\nFunction 'group_by_branch' is oversized: CC=8, fan-out=9, mutations=12.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "128", "files": ["src/tagi/planner/branch_grouper.py"], "history": [{"action": "created", "message": "code2llm reports `God Function: group_by_branch` in `src/tagi/planner/branch_grouper.py:7`.\n\nFunction 'group_by_branch' is oversized: CC=8, fan-out=9, mutations=12.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-18T15:46:34.272245+00:00"}], "id": "PLF-126", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `God Function: group_by_branch` in `src/tagi/planner/branch_grouper.py:7`.\n\nFunction 'group_by_branch' is oversized: CC=8, fan-out=9, mutations=12.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "code-smell", "god-function", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal"], "metadata": {"deduplication_key": "PLF-126"}, "name": "Address code smell: God Function: group_by_branch", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:god_function:src/tagi/planner/branch_grouper.py:7:God Function: group_by_branch", "evidence": {"artifact": {"mtime_ns": 1789742585715921903, "path": "project/analysis.toon.yaml", "sha256": "e9a3774622db919b2300b3dd93ce594a90a967409e255cdfb0080ffd22180384", "size_bytes": 10331}, "files": [{"mtime_ns": 1779810382570385717, "path": "src/tagi/planner/branch_grouper.py", "sha256": "7495814bca28a8dda4134f4498a644fc1c4bfaf3fbc141de4c45b3cfa5cd96eb", "size_bytes": 2702}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789742585705778183, "path": "project/planfile-tickets.yaml", "sha256": "00e016113d76f457efd919f00242693f50364860d6fbf24ad2a4413700bab4cc", "size_bytes": 16625}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `God Function: group_by_branch` in `src/tagi/planner/branch_grouper.py:7`.\n\nFunction 'group_by_branch' is oversized: CC=8, fan-out=9, mutations=12.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_god_function"}, "timestamp": "2026-09-18T15:46:34.272245+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "128", "key": "semcod/tagi#128", "url": "https://github.com/semcod/tagi/issues/128"}}, "updated_at": "2026-09-18T15:46:34.272245+00:00"}, "PLF-127": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-18T16:24:25.964206+00:00", "description": "\ncode2llm reports `God Function: hooks_command` in `src/tagi/cli/utility_commands.py:131`.\n\nFunction 'hooks_command' is oversized: CC=10, fan-out=11, mutations=0.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "129", "files": ["src/tagi/cli/utility_commands.py"], "history": [{"action": "created", "message": "code2llm reports `God Function: hooks_command` in `src/tagi/cli/utility_commands.py:131`.\n\nFunction 'hooks_command' is oversized: CC=10, fan-out=11, mutations=0.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-18T16:24:25.964206+00:00"}], "id": "PLF-127", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `God Function: hooks_command` in `src/tagi/cli/utility_commands.py:131`.\n\nFunction 'hooks_command' is oversized: CC=10, fan-out=11, mutations=0.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "code-smell", "god-function", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal"], "metadata": {"deduplication_key": "PLF-127"}, "name": "Address code smell: God Function: hooks_command", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:god_function:src/tagi/cli/utility_commands.py:131:God Function: hooks_command", "evidence": {"artifact": {"mtime_ns": 1789742585715921903, "path": "project/analysis.toon.yaml", "sha256": "e9a3774622db919b2300b3dd93ce594a90a967409e255cdfb0080ffd22180384", "size_bytes": 10331}, "files": [{"mtime_ns": 1789740908490220674, "path": "src/tagi/cli/utility_commands.py", "sha256": "a78c23996b91860bd73b82a719e52a8fffcc68bf0e6756e7379c01e30d578c1a", "size_bytes": 7225}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789742585705778183, "path": "project/planfile-tickets.yaml", "sha256": "00e016113d76f457efd919f00242693f50364860d6fbf24ad2a4413700bab4cc", "size_bytes": 16625}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `God Function: hooks_command` in `src/tagi/cli/utility_commands.py:131`.\n\nFunction 'hooks_command' is oversized: CC=10, fan-out=11, mutations=0.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_god_function"}, "timestamp": "2026-09-18T16:24:25.964206+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "129", "key": "semcod/tagi#129", "url": "https://github.com/semcod/tagi/issues/129"}}, "updated_at": "2026-09-18T16:24:25.964206+00:00"}, "PLF-128": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-18T16:29:19.809691+00:00", "description": "\ncode2llm reports `God Function: inspect_command` in `src/tagi/cli/inspection_commands.py:19`.\n\nFunction 'inspect_command' is oversized: CC=7, fan-out=11, mutations=0.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "130", "files": ["src/tagi/cli/inspection_commands.py"], "history": [{"action": "created", "message": "code2llm reports `God Function: inspect_command` in `src/tagi/cli/inspection_commands.py:19`.\n\nFunction 'inspect_command' is oversized: CC=7, fan-out=11, mutations=0.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-18T16:29:19.809691+00:00"}], "id": "PLF-128", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `God Function: inspect_command` in `src/tagi/cli/inspection_commands.py:19`.\n\nFunction 'inspect_command' is oversized: CC=7, fan-out=11, mutations=0.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "code-smell", "god-function", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal"], "metadata": {"deduplication_key": "PLF-128"}, "name": "Address code smell: God Function: inspect_command", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:god_function:src/tagi/cli/inspection_commands.py:19:God Function: inspect_command", "evidence": {"artifact": {"mtime_ns": 1789742585715921903, "path": "project/analysis.toon.yaml", "sha256": "e9a3774622db919b2300b3dd93ce594a90a967409e255cdfb0080ffd22180384", "size_bytes": 10331}, "files": [{"mtime_ns": 1789740908490220674, "path": "src/tagi/cli/inspection_commands.py", "sha256": "666b4944feb18f6673bbbfb664cda2a082ec1a041b67fdaff58a8d80976bd198", "size_bytes": 4284}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789742585705778183, "path": "project/planfile-tickets.yaml", "sha256": "00e016113d76f457efd919f00242693f50364860d6fbf24ad2a4413700bab4cc", "size_bytes": 16625}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `God Function: inspect_command` in `src/tagi/cli/inspection_commands.py:19`.\n\nFunction 'inspect_command' is oversized: CC=7, fan-out=11, mutations=0.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_god_function"}, "timestamp": "2026-09-18T16:29:19.809691+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "130", "key": "semcod/tagi#130", "url": "https://github.com/semcod/tagi/issues/130"}}, "updated_at": "2026-09-18T16:29:19.809691+00:00"}, "PLF-129": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-18T16:34:15.855415+00:00", "description": "\ncode2llm reports `God Function: preview_changes` in `src/tagi/planner/preview.py:29`.\n\nFunction 'preview_changes' is oversized: CC=3, fan-out=5, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "131", "files": ["src/tagi/planner/preview.py"], "history": [{"action": "created", "message": "code2llm reports `God Function: preview_changes` in `src/tagi/planner/preview.py:29`.\n\nFunction 'preview_changes' is oversized: CC=3, fan-out=5, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-18T16:34:15.855415+00:00"}], "id": "PLF-129", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `God Function: preview_changes` in `src/tagi/planner/preview.py:29`.\n\nFunction 'preview_changes' is oversized: CC=3, fan-out=5, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "code-smell", "god-function", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal"], "metadata": {"deduplication_key": "PLF-129"}, "name": "Address code smell: God Function: preview_changes", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:god_function:src/tagi/planner/preview.py:29:God Function: preview_changes", "evidence": {"artifact": {"mtime_ns": 1789742585715921903, "path": "project/analysis.toon.yaml", "sha256": "e9a3774622db919b2300b3dd93ce594a90a967409e255cdfb0080ffd22180384", "size_bytes": 10331}, "files": [{"mtime_ns": 1789739375293946457, "path": "src/tagi/planner/preview.py", "sha256": "8d3998cd67c562eb08e3ae5ecdcf2feaaff4d9f1ca864344a214c44d81b83a41", "size_bytes": 1363}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789742585705778183, "path": "project/planfile-tickets.yaml", "sha256": "00e016113d76f457efd919f00242693f50364860d6fbf24ad2a4413700bab4cc", "size_bytes": 16625}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `God Function: preview_changes` in `src/tagi/planner/preview.py:29`.\n\nFunction 'preview_changes' is oversized: CC=3, fan-out=5, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_god_function"}, "timestamp": "2026-09-18T16:34:15.855415+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "131", "key": "semcod/tagi#131", "url": "https://github.com/semcod/tagi/issues/131"}}, "updated_at": "2026-09-18T16:34:15.855415+00:00"}, "PLF-131": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-18T16:49:07.021464+00:00", "description": "\n`project/analysis.toon.yaml` reports `resolve_filtered_changes` with CC=17 (limit=15), defined in `src/tagi/utils/inspect_helpers.py:10`. Extract sub-functions, simplify conditionals, or split into strategy pattern. Preserve behaviour — this is a pure refactor.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "133", "files": ["src/tagi/utils/inspect_helpers.py"], "history": [{"action": "created", "message": "`project/analysis.toon.yaml` reports `resolve_filtered_changes` with CC=17 (limit=15), defined in `src/tagi/utils/inspect_helpers.py:10`. Extract sub-functions, simplify conditionals, or split into strategy pattern. Preserve behaviour — this is a pure refactor.", "source": "koru task", "timestamp": "2026-09-18T16:49:07.021464+00:00"}], "id": "PLF-131", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "`project/analysis.toon.yaml` reports `resolve_filtered_changes` with CC=17 (limit=15), defined in `src/tagi/utils/inspect_helpers.py:10`. Extract sub-functions, simplify conditionals, or split into strategy pattern. Preserve behaviour — this is a pure refactor."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "refactor", "scan", "complexity", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal"], "metadata": {"deduplication_key": "PLF-131"}, "name": "Reduce cyclomatic complexity: resolve_filtered_changes (CC=17, limit=15)", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "koru-scan:code2llm_cc:src/tagi/utils/inspect_helpers.py", "evidence": {"artifact": {"mtime_ns": 1789742585715921903, "path": "project/analysis.toon.yaml", "sha256": "e9a3774622db919b2300b3dd93ce594a90a967409e255cdfb0080ffd22180384", "size_bytes": 10331}, "kind": "code2llm_analysis", "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude '*.md' --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate the artifact and compare artifact.sha256 before assuming this ticket still reflects the current code."}, "input": "`project/analysis.toon.yaml` reports `resolve_filtered_changes` with CC=17 (limit=15), defined in `src/tagi/utils/inspect_helpers.py:10`. Extract sub-functions, simplify conditionals, or split into strategy pattern. Preserve behaviour — this is a pure refactor.", "signal": "code2llm_cc"}, "timestamp": "2026-09-18T16:49:07.021464+00:00", "tool": "koru-scan"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "133", "key": "semcod/tagi#133", "url": "https://github.com/semcod/tagi/issues/133"}}, "updated_at": "2026-09-18T16:49:07.021464+00:00"}, "PLF-132": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-18T16:49:07.642356+00:00", "description": "\nREFACTOR item from `project/analysis.toon.yaml`: **split 1 high-CC methods** (CC>15). Execute this refactor step; re-run the source.context.evidence.regenerate_command to verify.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "134", "files": ["project/analysis.toon.yaml"], "history": [{"action": "created", "message": "REFACTOR item from `project/analysis.toon.yaml`: **split 1 high-CC methods** (CC>15). Execute this refactor step; re-run the source.context.evidence.regenerate_command to verify.", "source": "koru task", "timestamp": "2026-09-18T16:49:07.642356+00:00"}], "id": "PLF-132", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "REFACTOR item from `project/analysis.toon.yaml`: **split 1 high-CC methods** (CC>15). Execute this refactor step; re-run the source.context.evidence.regenerate_command to verify."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "refactor", "scan", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal"], "metadata": {"deduplication_key": "PLF-132"}, "name": "code2llm refactor: split 1 high-CC methods", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "semcod:code2llm:refactor:project/analysis.toon.yaml", "evidence": {"artifact": {"mtime_ns": 1789742585715921903, "path": "project/analysis.toon.yaml", "sha256": "e9a3774622db919b2300b3dd93ce594a90a967409e255cdfb0080ffd22180384", "size_bytes": 10331}, "kind": "code2llm_analysis", "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude '*.md' --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate the artifact and compare artifact.sha256 before assuming this ticket still reflects the current code."}, "input": "REFACTOR item from `project/analysis.toon.yaml`: **split 1 high-CC methods** (CC>15). Execute this refactor step; re-run the source.context.evidence.regenerate_command to verify.", "signal": "code2llm_refactor"}, "timestamp": "2026-09-18T16:49:07.642356+00:00", "tool": "koru-scan"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "134", "key": "semcod/tagi#134", "url": "https://github.com/semcod/tagi/issues/134"}}, "updated_at": "2026-09-18T16:49:07.642356+00:00"}, "PLF-138": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-18T19:51:27.884743+00:00", "description": "\ncode2llm reports `God Function: build_statistics_section` in `src/tagi/utils/summary_helpers.py:31`.\n\nFunction 'build_statistics_section' is oversized: CC=2, fan-out=6, mutations=7.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "143", "files": ["src/tagi/utils/summary_helpers.py"], "history": [{"action": "created", "message": "code2llm reports `God Function: build_statistics_section` in `src/tagi/utils/summary_helpers.py:31`.\n\nFunction 'build_statistics_section' is oversized: CC=2, fan-out=6, mutations=7.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-18T19:51:27.884743+00:00"}], "id": "PLF-138", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `God Function: build_statistics_section` in `src/tagi/utils/summary_helpers.py:31`.\n\nFunction 'build_statistics_section' is oversized: CC=2, fan-out=6, mutations=7.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "priority: normal", "code-smell", "god-function", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal"], "metadata": {"deduplication_key": "PLF-138"}, "name": "Address code smell: God Function: build_statistics_section", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:god_function:src/tagi/utils/summary_helpers.py:31:God Function: build_statistics_section", "evidence": {"artifact": {"mtime_ns": 1789760212841277131, "path": "project/analysis.toon.yaml", "sha256": "e779a23e78575a5ca1103e1494c9f5b9bf0ac7bdcb3ffbbab82e37914fa8de0a", "size_bytes": 10336}, "files": [{"mtime_ns": 1789760157304512513, "path": "src/tagi/utils/summary_helpers.py", "sha256": "5b80ca05e1202f10e13c9873597a0a11ddf86af9b7cdcb2a9bb2dfb60c233e6a", "size_bytes": 3117}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789760212873891603, "path": "project/planfile-tickets.yaml", "sha256": "d0c2d6eb3eb46612e13fa7d7f524e92e895a3f31556b19210c5499cec6308586", "size_bytes": 22328}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `God Function: build_statistics_section` in `src/tagi/utils/summary_helpers.py:31`.\n\nFunction 'build_statistics_section' is oversized: CC=2, fan-out=6, mutations=7.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_god_function"}, "timestamp": "2026-09-18T19:51:27.884743+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "143", "key": "semcod/tagi#143", "url": "https://github.com/semcod/tagi/issues/143"}}, "updated_at": "2026-09-18T19:51:27.884743+00:00"}, "PLF-139": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-18T20:26:23.964964+00:00", "description": "\ncode2llm reports `God Function: build_tag_distribution_section` in `src/tagi/utils/summary_helpers.py:71`.\n\nFunction 'build_tag_distribution_section' is oversized: CC=5, fan-out=6, mutations=9.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "144", "files": ["src/tagi/utils/summary_helpers.py"], "history": [{"action": "created", "message": "code2llm reports `God Function: build_tag_distribution_section` in `src/tagi/utils/summary_helpers.py:71`.\n\nFunction 'build_tag_distribution_section' is oversized: CC=5, fan-out=6, mutations=9.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-18T20:26:23.964964+00:00"}], "id": "PLF-139", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `God Function: build_tag_distribution_section` in `src/tagi/utils/summary_helpers.py:71`.\n\nFunction 'build_tag_distribution_section' is oversized: CC=5, fan-out=6, mutations=9.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "priority: normal", "code-smell", "god-function", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal"], "metadata": {"deduplication_key": "PLF-139"}, "name": "Address code smell: God Function: build_tag_distribution_section", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:god_function:src/tagi/utils/summary_helpers.py:71:God Function: build_tag_distribution_section", "evidence": {"artifact": {"mtime_ns": 1789760212841277131, "path": "project/analysis.toon.yaml", "sha256": "e779a23e78575a5ca1103e1494c9f5b9bf0ac7bdcb3ffbbab82e37914fa8de0a", "size_bytes": 10336}, "files": [{"mtime_ns": 1789760157304512513, "path": "src/tagi/utils/summary_helpers.py", "sha256": "5b80ca05e1202f10e13c9873597a0a11ddf86af9b7cdcb2a9bb2dfb60c233e6a", "size_bytes": 3117}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789760212873891603, "path": "project/planfile-tickets.yaml", "sha256": "d0c2d6eb3eb46612e13fa7d7f524e92e895a3f31556b19210c5499cec6308586", "size_bytes": 22328}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `God Function: build_tag_distribution_section` in `src/tagi/utils/summary_helpers.py:71`.\n\nFunction 'build_tag_distribution_section' is oversized: CC=5, fan-out=6, mutations=9.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_god_function"}, "timestamp": "2026-09-18T20:26:23.964964+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "144", "key": "semcod/tagi#144", "url": "https://github.com/semcod/tagi/issues/144"}}, "updated_at": "2026-09-18T20:26:23.964964+00:00"}, "PLF-140": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-18T20:31:21.515076+00:00", "description": "\ncode2llm reports `God Function: display_statistics_table` in `src/tagi/utils/inspect_helpers.py:109`.\n\nFunction 'display_statistics_table' is oversized: CC=1, fan-out=7, mutations=10.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "145", "files": ["src/tagi/utils/inspect_helpers.py"], "history": [{"action": "created", "message": "code2llm reports `God Function: display_statistics_table` in `src/tagi/utils/inspect_helpers.py:109`.\n\nFunction 'display_statistics_table' is oversized: CC=1, fan-out=7, mutations=10.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-18T20:31:21.515076+00:00"}], "id": "PLF-140", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `God Function: display_statistics_table` in `src/tagi/utils/inspect_helpers.py:109`.\n\nFunction 'display_statistics_table' is oversized: CC=1, fan-out=7, mutations=10.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "priority: normal", "code-smell", "god-function", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal"], "metadata": {"deduplication_key": "PLF-140"}, "name": "Address code smell: God Function: display_statistics_table", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:god_function:src/tagi/utils/inspect_helpers.py:109:God Function: display_statistics_table", "evidence": {"artifact": {"mtime_ns": 1789760212841277131, "path": "project/analysis.toon.yaml", "sha256": "e779a23e78575a5ca1103e1494c9f5b9bf0ac7bdcb3ffbbab82e37914fa8de0a", "size_bytes": 10336}, "files": [{"mtime_ns": 1789760157304512513, "path": "src/tagi/utils/inspect_helpers.py", "sha256": "1c596a23769394791c6155c0d18ffff189732a3df1916a648adcfab4b50d7606", "size_bytes": 3639}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789760212873891603, "path": "project/planfile-tickets.yaml", "sha256": "d0c2d6eb3eb46612e13fa7d7f524e92e895a3f31556b19210c5499cec6308586", "size_bytes": 22328}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `God Function: display_statistics_table` in `src/tagi/utils/inspect_helpers.py:109`.\n\nFunction 'display_statistics_table' is oversized: CC=1, fan-out=7, mutations=10.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_god_function"}, "timestamp": "2026-09-18T20:31:21.515076+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "145", "key": "semcod/tagi#145", "url": "https://github.com/semcod/tagi/issues/145"}}, "updated_at": "2026-09-18T20:31:21.515076+00:00"}, "PLF-142": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-18T20:51:58.051382+00:00", "description": "\ncode2llm reports `Data Clump: repo_path, body, title` in `src/tagi/cli/provider_commands.py:34`.\n\nArguments (repo_path, body, title) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "148", "files": ["src/tagi/cli/provider_commands.py"], "history": [{"action": "created", "message": "code2llm reports `Data Clump: repo_path, body, title` in `src/tagi/cli/provider_commands.py:34`.\n\nArguments (repo_path, body, title) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-18T20:51:58.051382+00:00"}], "id": "PLF-142", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `Data Clump: repo_path, body, title` in `src/tagi/cli/provider_commands.py:34`.\n\nArguments (repo_path, body, title) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "priority: normal", "code-smell", "data-clump", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal"], "metadata": {"deduplication_key": "PLF-142"}, "name": "Address code smell: Data Clump: repo_path, body, title", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:data_clump:src/tagi/cli/provider_commands.py:34:Data Clump: repo_path, body, title", "evidence": {"artifact": {"mtime_ns": 1789764409471628814, "path": "project/analysis.toon.yaml", "sha256": "8272c84ad525516fbd4040cd83b4fb110a3f4e91aa510378427c65686d9f3018", "size_bytes": 10424}, "files": [{"mtime_ns": 1789739346063914074, "path": "src/tagi/cli/provider_commands.py", "sha256": "68ce18c77819dae347a71d285994bba864fa304bce74de2420ca81f96c3f8225", "size_bytes": 2695}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789764409534879854, "path": "project/planfile-tickets.yaml", "sha256": "e229a798269d410a9ccbb63568a783f63de2465f87ad7c4d3acd2a5c0b1ec43a", "size_bytes": 16701}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `Data Clump: repo_path, body, title` in `src/tagi/cli/provider_commands.py:34`.\n\nArguments (repo_path, body, title) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_data_clump"}, "timestamp": "2026-09-18T20:51:58.051382+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "148", "key": "semcod/tagi#148", "url": "https://github.com/semcod/tagi/issues/148"}}, "updated_at": "2026-09-18T20:51:58.051382+00:00"}, "PLF-143": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-18T21:27:31.437891+00:00", "description": "\ncode2llm reports `God Function: group_changes` in `src/tagi/planner/grouper.py:10`.\n\nFunction 'group_changes' is oversized: CC=5, fan-out=9, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "149", "files": ["src/tagi/planner/grouper.py"], "history": [{"action": "created", "message": "code2llm reports `God Function: group_changes` in `src/tagi/planner/grouper.py:10`.\n\nFunction 'group_changes' is oversized: CC=5, fan-out=9, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-18T21:27:31.437891+00:00"}], "id": "PLF-143", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `God Function: group_changes` in `src/tagi/planner/grouper.py:10`.\n\nFunction 'group_changes' is oversized: CC=5, fan-out=9, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "priority: normal", "code-smell", "god-function", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal"], "metadata": {"deduplication_key": "PLF-143"}, "name": "Address code smell: God Function: group_changes", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:god_function:src/tagi/planner/grouper.py:10:God Function: group_changes", "evidence": {"artifact": {"mtime_ns": 1789764409471628814, "path": "project/analysis.toon.yaml", "sha256": "8272c84ad525516fbd4040cd83b4fb110a3f4e91aa510378427c65686d9f3018", "size_bytes": 10424}, "files": [{"mtime_ns": 1789760157304512513, "path": "src/tagi/planner/grouper.py", "sha256": "4f19a41a6d0fb1cc5e82e8210e9a0087aab90c22cb5b01a3879a9aff253b83f0", "size_bytes": 2197}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789764409534879854, "path": "project/planfile-tickets.yaml", "sha256": "e229a798269d410a9ccbb63568a783f63de2465f87ad7c4d3acd2a5c0b1ec43a", "size_bytes": 16701}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `God Function: group_changes` in `src/tagi/planner/grouper.py:10`.\n\nFunction 'group_changes' is oversized: CC=5, fan-out=9, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_god_function"}, "timestamp": "2026-09-18T21:27:31.437891+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "149", "key": "semcod/tagi#149", "url": "https://github.com/semcod/tagi/issues/149"}}, "updated_at": "2026-09-18T21:27:31.437891+00:00"}, "PLF-145": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-18T21:51:29.650993+00:00", "description": "\ncode2llm reports `Data Clump: body, title, repo_path` in `src/tagi/cli/provider_commands.py:34`.\n\nArguments (body, title, repo_path) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "152", "files": ["src/tagi/cli/provider_commands.py"], "history": [{"action": "created", "message": "code2llm reports `Data Clump: body, title, repo_path` in `src/tagi/cli/provider_commands.py:34`.\n\nArguments (body, title, repo_path) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-18T21:51:29.650993+00:00"}], "id": "PLF-145", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `Data Clump: body, title, repo_path` in `src/tagi/cli/provider_commands.py:34`.\n\nArguments (body, title, repo_path) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "priority: normal", "code-smell", "data-clump", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal"], "metadata": {"deduplication_key": "PLF-145"}, "name": "Address code smell: Data Clump: body, title, repo_path", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:data_clump:src/tagi/cli/provider_commands.py:34:Data Clump: body, title, repo_path", "evidence": {"artifact": {"mtime_ns": 1789767907486023009, "path": "project/analysis.toon.yaml", "sha256": "bffe51d44d6fb6464a866f3f92775ba60121d5c8ee5912e7e28815233ae3b49c", "size_bytes": 10335}, "files": [{"mtime_ns": 1789739346063914074, "path": "src/tagi/cli/provider_commands.py", "sha256": "68ce18c77819dae347a71d285994bba864fa304bce74de2420ca81f96c3f8225", "size_bytes": 2695}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789767907544471268, "path": "project/planfile-tickets.yaml", "sha256": "a1a17bb7fff1116657c2c5c8dc0925997c5d311418d5770edcae36e65433c9b5", "size_bytes": 16073}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `Data Clump: body, title, repo_path` in `src/tagi/cli/provider_commands.py:34`.\n\nArguments (body, title, repo_path) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_data_clump"}, "timestamp": "2026-09-18T21:51:29.650993+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "152", "key": "semcod/tagi#152", "url": "https://github.com/semcod/tagi/issues/152"}}, "updated_at": "2026-09-18T21:51:29.650993+00:00"}, "PLF-149": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-19T08:19:14.641869+00:00", "description": "\ncode2llm reports `God Function: publish_command` in `src/tagi/cli/publishing_commands.py:23`.\n\nFunction 'publish_command' is oversized: CC=11, fan-out=14, mutations=0.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "158", "files": ["src/tagi/cli/publishing_commands.py"], "history": [{"action": "created", "message": "code2llm reports `God Function: publish_command` in `src/tagi/cli/publishing_commands.py:23`.\n\nFunction 'publish_command' is oversized: CC=11, fan-out=14, mutations=0.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-19T08:19:14.641869+00:00"}], "id": "PLF-149", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `God Function: publish_command` in `src/tagi/cli/publishing_commands.py:23`.\n\nFunction 'publish_command' is oversized: CC=11, fan-out=14, mutations=0.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "priority: normal", "code-smell", "god-function", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal"], "metadata": {"deduplication_key": "PLF-149"}, "name": "Address code smell: God Function: publish_command", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:god_function:src/tagi/cli/publishing_commands.py:23:God Function: publish_command", "evidence": {"artifact": {"mtime_ns": 1789805947979310038, "path": "project/analysis.toon.yaml", "sha256": "ff985a6d1df91bec113e0985da69266b7986b65971924ccd9f4fa7cbaea12c51", "size_bytes": 10323}, "files": [{"mtime_ns": 1789740908490220674, "path": "src/tagi/cli/publishing_commands.py", "sha256": "f11201cd601fcd3d52ba6ec5ff5b958f5663f79327593c81377c25c83574a07e", "size_bytes": 5238}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789805948011262070, "path": "project/planfile-tickets.yaml", "sha256": "f8d503084189f0acc6b3277c59858501898b3b2ea7986cead8d6db848b15eb71", "size_bytes": 15477}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `God Function: publish_command` in `src/tagi/cli/publishing_commands.py:23`.\n\nFunction 'publish_command' is oversized: CC=11, fan-out=14, mutations=0.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_god_function"}, "timestamp": "2026-09-19T08:19:14.641869+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "158", "key": "semcod/tagi#158", "url": "https://github.com/semcod/tagi/issues/158"}}, "updated_at": "2026-09-19T08:19:14.641869+00:00"}, "PLF-152": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-19T09:23:37.677573+00:00", "description": "\ncode2llm reports `Data Clump: title, body, repo_path` in `src/tagi/cli/provider_commands.py:34`.\n\nArguments (title, body, repo_path) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "162", "files": ["src/tagi/cli/provider_commands.py"], "history": [{"action": "created", "message": "code2llm reports `Data Clump: title, body, repo_path` in `src/tagi/cli/provider_commands.py:34`.\n\nArguments (title, body, repo_path) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-19T09:23:37.677573+00:00"}], "id": "PLF-152", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `Data Clump: title, body, repo_path` in `src/tagi/cli/provider_commands.py:34`.\n\nArguments (title, body, repo_path) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "priority: normal", "code-smell", "data-clump", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal"], "metadata": {"deduplication_key": "PLF-152"}, "name": "Address code smell: Data Clump: title, body, repo_path", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:data_clump:src/tagi/cli/provider_commands.py:34:Data Clump: title, body, repo_path", "evidence": {"artifact": {"mtime_ns": 1789807219128678462, "path": "project/analysis.toon.yaml", "sha256": "a9502e24eae6c96a2813522009e1147c99df0b92b64fc43761c84a0421cc05d6", "size_bytes": 10335}, "files": [{"mtime_ns": 1789739346063914074, "path": "src/tagi/cli/provider_commands.py", "sha256": "68ce18c77819dae347a71d285994bba864fa304bce74de2420ca81f96c3f8225", "size_bytes": 2695}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789807219187356177, "path": "project/planfile-tickets.yaml", "sha256": "09f4267be8bbb0b623e89df1b4ad1ff583984dcab632ff1913d74642fffd254a", "size_bytes": 16076}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `Data Clump: title, body, repo_path` in `src/tagi/cli/provider_commands.py:34`.\n\nArguments (title, body, repo_path) are used together in multiple functions: src.tagi.cli.provider_commands._pr_spec, src.tagi.cli.provider_commands.create_pr, src.tagi.cli.provider_commands.create_mr.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_data_clump"}, "timestamp": "2026-09-19T09:23:37.677573+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "162", "key": "semcod/tagi#162", "url": "https://github.com/semcod/tagi/issues/162"}}, "updated_at": "2026-09-19T09:23:37.677573+00:00"}, "PLF-154": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-19T10:22:37.567988+00:00", "description": "\ncode2llm reports `God Function: scan_repo` in `src/tagi/scanner/status.py:11`.\n\nFunction 'scan_repo' is oversized: CC=7, fan-out=15, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "166", "files": ["src/tagi/scanner/status.py"], "history": [{"action": "created", "message": "code2llm reports `God Function: scan_repo` in `src/tagi/scanner/status.py:11`.\n\nFunction 'scan_repo' is oversized: CC=7, fan-out=15, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-19T10:22:37.567988+00:00"}], "id": "PLF-154", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `God Function: scan_repo` in `src/tagi/scanner/status.py:11`.\n\nFunction 'scan_repo' is oversized: CC=7, fan-out=15, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["priority-normal", "planfile", "managed", "koru", "nl-task", "llm-ready", "code2llm", "priority: normal", "code-smell", "god-function", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal"], "metadata": {"deduplication_key": "PLF-154"}, "name": "Address code smell: God Function: scan_repo", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:god_function:src/tagi/scanner/status.py:11:God Function: scan_repo", "evidence": {"artifact": {"mtime_ns": 1789813353805427459, "path": "project/analysis.toon.yaml", "sha256": "f1d18ecd10d02bf68405fbaa6d1f4aed3810ef5648f6751abd385aac2c885d3f", "size_bytes": 10381}, "files": [{"mtime_ns": 1789802617196896179, "path": "src/tagi/scanner/status.py", "sha256": "9b3ee07333cf0ae9ffcc6f3b02ead6d78b0c482d9994a0f4c84b528e9c944c29", "size_bytes": 1793}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789813353833486323, "path": "project/planfile-tickets.yaml", "sha256": "b4eaec2f196e1ecce19683ba5643c0f530a19e7ec6d4dd4a62d1fa3ac24f032d", "size_bytes": 14766}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `God Function: scan_repo` in `src/tagi/scanner/status.py:11`.\n\nFunction 'scan_repo' is oversized: CC=7, fan-out=15, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_god_function"}, "timestamp": "2026-09-19T10:22:37.567988+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "166", "key": "semcod/tagi#166", "url": "https://github.com/semcod/tagi/issues/166"}}, "updated_at": "2026-09-19T10:22:37.567988+00:00"}, "PLF-156": {"assignee": null, "backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-19T11:41:05.586678+00:00", "description": "\ncode2llm reports `Shotgun Surgery: provider` in `src/tagi/cli/publishing_commands.py:23`.\n\nMutation of variable 'provider' spans 5 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "169", "files": ["src/tagi/cli/publishing_commands.py"], "history": [{"action": "created", "message": "code2llm reports `Shotgun Surgery: provider` in `src/tagi/cli/publishing_commands.py:23`.\n\nMutation of variable 'provider' spans 5 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-19T11:41:05.586678+00:00"}], "id": "PLF-156", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `Shotgun Surgery: provider` in `src/tagi/cli/publishing_commands.py:23`.\n\nMutation of variable 'provider' spans 5 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["planfile", "managed", "koru", "nl-task", "llm-ready", "priority-high", "priority: high", "code2llm", "code-smell", "shotgun-surgery", "priority: high", "priority: high", "priority: high", "priority: high", "priority: high", "priority: high", "priority: high"], "metadata": {"deduplication_key": "PLF-156"}, "name": "Address code smell: Shotgun Surgery: provider", "outputs": {"artifacts": [], "notes": []}, "priority": "high", "source": {"context": {"dedupe_key": "code2llm:smell:shotgun_surgery:src/tagi/cli/publishing_commands.py:23:Shotgun Surgery: provider", "evidence": {"artifact": {"mtime_ns": 1789818000281070860, "path": "project/analysis.toon.yaml", "sha256": "cd908a3fbfce8ab1a9cb171c6ddd2c4d40624145f1441f5d326ee7e671012aac", "size_bytes": 10295}, "files": [{"mtime_ns": 1789817932257139916, "path": "src/tagi/cli/publishing_commands.py", "sha256": "542f145664f4f91fb291e1c1e5d781c33f4ac054622645e7c6aac58fb21568d8", "size_bytes": 5359}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789818000309685535, "path": "project/planfile-tickets.yaml", "sha256": "8895c5115dd230d0481573e88b83b8923b258e1938589013ec204cf9a5817478", "size_bytes": 16648}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `Shotgun Surgery: provider` in `src/tagi/cli/publishing_commands.py:23`.\n\nMutation of variable 'provider' spans 5 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_shotgun_surgery"}, "timestamp": "2026-09-19T11:41:05.586678+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "closed", "sync": {"github": {"id": "169", "key": "semcod/tagi#169", "url": "https://github.com/semcod/tagi/issues/169"}}, "updated_at": "2026-09-19T11:41:05.586678+00:00"}, "PLF-160": {"acceptance_criteria": [], "blocked_by": [], "blocks": [], "children": [], "contract_version": "planfile.ticket/v1", "created_at": "2026-09-19T17:29:12.755466Z", "description": "code2llm reports `God Function: _tag_change` in `src/tagi/heuristics/tags.py:22`.\n\nFunction '_tag_change' is oversized: CC=2, fan-out=9, mutations=9.\n\nMake the smallest refactor that removes the smell and run local tests.\n\ncode2llm-dedupe: code2llm:smell:god_function:src/tagi/heuristics/tags.py:22:God Function: _tag_change", "dsl": "SODL/1 id=evt_497220cc3af4ef6b44f321c3 event_hash=a649a48467d378efbc3eebe005661ba3d1c88c8e725799f28033db9affdbbb57 timestamp=2026-09-19T17%3A29%3A12.755466%2B00%3A00 kind=task source=planfile.ticket ticket_id=PLF-160 actor=koru-scan oql=ticket.create uri=planfile%3A%2F%2Ftickets%2FPLF-160%2Fcommand%2Fcreate mode=apply status=open correlation_id=PLF-160 causation_id=- input_hash=d5a7a2d67eb7957053bde0d4b9463b298a084ab459be7d414caed735bd81f544 receipt_ref=- replayable=true data=eyJwYXlsb2FkIjp7ImFjY2VwdGFuY2VfY3JpdGVyaWEiOltdLCJibG9ja2VkX2J5IjpbXSwiYmxvY2tzIjpbXSwiY2hpbGRyZW4iOltdLCJjb250cmFjdF92ZXJzaW9uIjoicGxhbmZpbGUudGlja2V0L3YxIiwiY3JlYXRlZF9hdCI6IjIwMjYtMDktMTlUMTc6Mjk6MTIuNzU1NDY2WiIsImRlc2NyaXB0aW9uIjoiY29kZTJsbG0gcmVwb3J0cyBgR29kIEZ1bmN0aW9uOiBfdGFnX2NoYW5nZWAgaW4gYHNyYy90YWdpL2hldXJpc3RpY3MvdGFncy5weToyMmAuXG5cbkZ1bmN0aW9uICdfdGFnX2NoYW5nZScgaXMgb3ZlcnNpemVkOiBDQz0yLCBmYW4tb3V0PTksIG11dGF0aW9ucz05LlxuXG5NYWtlIHRoZSBzbWFsbGVzdCByZWZhY3RvciB0aGF0IHJlbW92ZXMgdGhlIHNtZWxsIGFuZCBydW4gbG9jYWwgdGVzdHMuXG5cbmNvZGUybGxtLWRlZHVwZTogY29kZTJsbG06c21lbGw6Z29kX2Z1bmN0aW9uOnNyYy90YWdpL2hldXJpc3RpY3MvdGFncy5weToyMjpHb2QgRnVuY3Rpb246IF90YWdfY2hhbmdlIiwiZmlsZXMiOlsic3JjL3RhZ2kvaGV1cmlzdGljcy90YWdzLnB5Il0sImlkIjoiUExGLTE2MCIsImxhYmVscyI6WyJsbG0tcmVhZHkiLCJjb2RlMmxsbSIsImNvZGUtc21lbGwiLCJnb2QtZnVuY3Rpb24iXSwibmFtZSI6IkFkZHJlc3MgY29kZSBzbWVsbDogR29kIEZ1bmN0aW9uOiBfdGFnX2NoYW5nZSIsInByaW9yaXR5Ijoibm9ybWFsIiwic291cmNlIjp7ImNvbnRleHQiOnt9LCJ0aW1lc3RhbXAiOiIyMDI2LTA5LTE5VDE3OjI5OjEyLjczMzU2OFoiLCJ0b29sIjoia29ydS1zY2FuIn0sInNwcmludCI6ImN1cnJlbnQiLCJzdGF0dXMiOiJvcGVuIiwic3luYyI6e30sInVwZGF0ZWRfYXQiOiIyMDI2LTA5LTE5VDE3OjI5OjEyLjc1NTQ3M1oifX0", "files": ["src/tagi/heuristics/tags.py"], "history": [], "id": "PLF-160", "labels": ["llm-ready", "code2llm", "code-smell", "god-function"], "name": "Address code smell: God Function: _tag_change", "priority": "normal", "source": {"context": {}, "timestamp": "2026-09-19T17:29:12.733568Z", "tool": "koru-scan"}, "sprint": "current", "status": "open", "sync": {}, "updated_at": "2026-09-19T17:29:12.755473Z"}, "PLF-161": {"acceptance_criteria": [], "blocked_by": [], "blocks": [], "children": [], "contract_version": "planfile.ticket/v1", "created_at": "2026-09-19T17:29:13.553848Z", "description": "code2llm reports `God Function: group_by_branch` in `src/tagi/planner/branch_grouper.py:7`.\n\nFunction 'group_by_branch' is oversized: CC=8, fan-out=9, mutations=12.\n\nMake the smallest refactor that removes the smell and run local tests.\n\ncode2llm-dedupe: code2llm:smell:god_function:src/tagi/planner/branch_grouper.py:7:God Function: group_by_branch", "dsl": "SODL/1 id=evt_40ff20aedf6162ed4834abaf event_hash=ae5af7901b1b3af57cda8f54258ded6d81ca63c88f1e1b8a8f7254067bf0755b timestamp=2026-09-19T17%3A29%3A13.553848%2B00%3A00 kind=task source=planfile.ticket ticket_id=PLF-161 actor=koru-scan oql=ticket.create uri=planfile%3A%2F%2Ftickets%2FPLF-161%2Fcommand%2Fcreate mode=apply status=open correlation_id=PLF-161 causation_id=- input_hash=cd07a286a6639b4e972faffab3383ed91fe4f5633f91a51914165a850a9c5675 receipt_ref=- replayable=true data=eyJwYXlsb2FkIjp7ImFjY2VwdGFuY2VfY3JpdGVyaWEiOltdLCJibG9ja2VkX2J5IjpbXSwiYmxvY2tzIjpbXSwiY2hpbGRyZW4iOltdLCJjb250cmFjdF92ZXJzaW9uIjoicGxhbmZpbGUudGlja2V0L3YxIiwiY3JlYXRlZF9hdCI6IjIwMjYtMDktMTlUMTc6Mjk6MTMuNTUzODQ4WiIsImRlc2NyaXB0aW9uIjoiY29kZTJsbG0gcmVwb3J0cyBgR29kIEZ1bmN0aW9uOiBncm91cF9ieV9icmFuY2hgIGluIGBzcmMvdGFnaS9wbGFubmVyL2JyYW5jaF9ncm91cGVyLnB5OjdgLlxuXG5GdW5jdGlvbiAnZ3JvdXBfYnlfYnJhbmNoJyBpcyBvdmVyc2l6ZWQ6IENDPTgsIGZhbi1vdXQ9OSwgbXV0YXRpb25zPTEyLlxuXG5NYWtlIHRoZSBzbWFsbGVzdCByZWZhY3RvciB0aGF0IHJlbW92ZXMgdGhlIHNtZWxsIGFuZCBydW4gbG9jYWwgdGVzdHMuXG5cbmNvZGUybGxtLWRlZHVwZTogY29kZTJsbG06c21lbGw6Z29kX2Z1bmN0aW9uOnNyYy90YWdpL3BsYW5uZXIvYnJhbmNoX2dyb3VwZXIucHk6NzpHb2QgRnVuY3Rpb246IGdyb3VwX2J5X2JyYW5jaCIsImZpbGVzIjpbInNyYy90YWdpL3BsYW5uZXIvYnJhbmNoX2dyb3VwZXIucHkiXSwiaWQiOiJQTEYtMTYxIiwibGFiZWxzIjpbImxsbS1yZWFkeSIsImNvZGUybGxtIiwiY29kZS1zbWVsbCIsImdvZC1mdW5jdGlvbiJdLCJuYW1lIjoiQWRkcmVzcyBjb2RlIHNtZWxsOiBHb2QgRnVuY3Rpb246IGdyb3VwX2J5X2JyYW5jaCIsInByaW9yaXR5Ijoibm9ybWFsIiwic291cmNlIjp7ImNvbnRleHQiOnt9LCJ0aW1lc3RhbXAiOiIyMDI2LTA5LTE5VDE3OjI5OjEzLjUyOTMzMloiLCJ0b29sIjoia29ydS1zY2FuIn0sInNwcmludCI6ImN1cnJlbnQiLCJzdGF0dXMiOiJvcGVuIiwic3luYyI6e30sInVwZGF0ZWRfYXQiOiIyMDI2LTA5LTE5VDE3OjI5OjEzLjU1Mzg1NloifX0", "files": ["src/tagi/planner/branch_grouper.py"], "history": [], "id": "PLF-161", "labels": ["llm-ready", "code2llm", "code-smell", "god-function"], "name": "Address code smell: God Function: group_by_branch", "priority": "normal", "source": {"context": {}, "timestamp": "2026-09-19T17:29:13.529332Z", "tool": "koru-scan"}, "sprint": "current", "status": "open", "sync": {}, "updated_at": "2026-09-19T17:29:13.553856Z"}, "PLF-162": {"acceptance_criteria": [], "blocked_by": [], "blocks": [], "children": [], "contract_version": "planfile.ticket/v1", "created_at": "2026-09-19T17:29:14.217920Z", "description": "code2llm reports `God Function: group_changes` in `src/tagi/planner/grouper.py:10`.\n\nFunction 'group_changes' is oversized: CC=4, fan-out=9, mutations=7.\n\nMake the smallest refactor that removes the smell and run local tests.\n\ncode2llm-dedupe: code2llm:smell:god_function:src/tagi/planner/grouper.py:10:God Function: group_changes", "dsl": "SODL/1 id=evt_b95ba0e76679eda0c97bba36 event_hash=418a0c25b25afd250b00e7a387e426e863671c3329af84e74d55cff355f6f2eb timestamp=2026-09-19T17%3A29%3A14.217920%2B00%3A00 kind=task source=planfile.ticket ticket_id=PLF-162 actor=koru-scan oql=ticket.create uri=planfile%3A%2F%2Ftickets%2FPLF-162%2Fcommand%2Fcreate mode=apply status=open correlation_id=PLF-162 causation_id=- input_hash=c9fb74d7097f7bdd1d19ca0ec5c5aee2e5a324a718d1d790022871040c7abc1f receipt_ref=- replayable=true data=eyJwYXlsb2FkIjp7ImFjY2VwdGFuY2VfY3JpdGVyaWEiOltdLCJibG9ja2VkX2J5IjpbXSwiYmxvY2tzIjpbXSwiY2hpbGRyZW4iOltdLCJjb250cmFjdF92ZXJzaW9uIjoicGxhbmZpbGUudGlja2V0L3YxIiwiY3JlYXRlZF9hdCI6IjIwMjYtMDktMTlUMTc6Mjk6MTQuMjE3OTIwWiIsImRlc2NyaXB0aW9uIjoiY29kZTJsbG0gcmVwb3J0cyBgR29kIEZ1bmN0aW9uOiBncm91cF9jaGFuZ2VzYCBpbiBgc3JjL3RhZ2kvcGxhbm5lci9ncm91cGVyLnB5OjEwYC5cblxuRnVuY3Rpb24gJ2dyb3VwX2NoYW5nZXMnIGlzIG92ZXJzaXplZDogQ0M9NCwgZmFuLW91dD05LCBtdXRhdGlvbnM9Ny5cblxuTWFrZSB0aGUgc21hbGxlc3QgcmVmYWN0b3IgdGhhdCByZW1vdmVzIHRoZSBzbWVsbCBhbmQgcnVuIGxvY2FsIHRlc3RzLlxuXG5jb2RlMmxsbS1kZWR1cGU6IGNvZGUybGxtOnNtZWxsOmdvZF9mdW5jdGlvbjpzcmMvdGFnaS9wbGFubmVyL2dyb3VwZXIucHk6MTA6R29kIEZ1bmN0aW9uOiBncm91cF9jaGFuZ2VzIiwiZmlsZXMiOlsic3JjL3RhZ2kvcGxhbm5lci9ncm91cGVyLnB5Il0sImlkIjoiUExGLTE2MiIsImxhYmVscyI6WyJsbG0tcmVhZHkiLCJjb2RlMmxsbSIsImNvZGUtc21lbGwiLCJnb2QtZnVuY3Rpb24iXSwibmFtZSI6IkFkZHJlc3MgY29kZSBzbWVsbDogR29kIEZ1bmN0aW9uOiBncm91cF9jaGFuZ2VzIiwicHJpb3JpdHkiOiJub3JtYWwiLCJzb3VyY2UiOnsiY29udGV4dCI6e30sInRpbWVzdGFtcCI6IjIwMjYtMDktMTlUMTc6Mjk6MTQuMjA3OTk3WiIsInRvb2wiOiJrb3J1LXNjYW4ifSwic3ByaW50IjoiY3VycmVudCIsInN0YXR1cyI6Im9wZW4iLCJzeW5jIjp7fSwidXBkYXRlZF9hdCI6IjIwMjYtMDktMTlUMTc6Mjk6MTQuMjE3OTI2WiJ9fQ", "files": ["src/tagi/planner/grouper.py"], "history": [], "id": "PLF-162", "labels": ["llm-ready", "code2llm", "code-smell", "god-function"], "name": "Address code smell: God Function: group_changes", "priority": "normal", "source": {"context": {}, "timestamp": "2026-09-19T17:29:14.207997Z", "tool": "koru-scan"}, "sprint": "current", "status": "open", "sync": {}, "updated_at": "2026-09-19T17:29:14.217926Z"}, "PLF-163": {"acceptance_criteria": [], "blocked_by": [], "blocks": [], "children": [], "contract_version": "planfile.ticket/v1", "created_at": "2026-09-19T17:29:14.903316Z", "description": "code2llm reports `God Function: hooks_command` in `src/tagi/cli/utility_commands.py:131`.\n\nFunction 'hooks_command' is oversized: CC=10, fan-out=11, mutations=4.\n\nMake the smallest refactor that removes the smell and run local tests.\n\ncode2llm-dedupe: code2llm:smell:god_function:src/tagi/cli/utility_commands.py:131:God Function: hooks_command", "dsl": "SODL/1 id=evt_3456b70183d69035897be1ff event_hash=dcc172d6f7418092c72c96f93076690043898fe23b41adf1ed8d2e8802c015b5 timestamp=2026-09-19T17%3A29%3A14.903316%2B00%3A00 kind=task source=planfile.ticket ticket_id=PLF-163 actor=koru-scan oql=ticket.create uri=planfile%3A%2F%2Ftickets%2FPLF-163%2Fcommand%2Fcreate mode=apply status=open correlation_id=PLF-163 causation_id=- input_hash=6aa365062d5ca56c343e0cc1d3fd5999a256e8568e58eca110b735652b5eac5f receipt_ref=- replayable=true data=eyJwYXlsb2FkIjp7ImFjY2VwdGFuY2VfY3JpdGVyaWEiOltdLCJibG9ja2VkX2J5IjpbXSwiYmxvY2tzIjpbXSwiY2hpbGRyZW4iOltdLCJjb250cmFjdF92ZXJzaW9uIjoicGxhbmZpbGUudGlja2V0L3YxIiwiY3JlYXRlZF9hdCI6IjIwMjYtMDktMTlUMTc6Mjk6MTQuOTAzMzE2WiIsImRlc2NyaXB0aW9uIjoiY29kZTJsbG0gcmVwb3J0cyBgR29kIEZ1bmN0aW9uOiBob29rc19jb21tYW5kYCBpbiBgc3JjL3RhZ2kvY2xpL3V0aWxpdHlfY29tbWFuZHMucHk6MTMxYC5cblxuRnVuY3Rpb24gJ2hvb2tzX2NvbW1hbmQnIGlzIG92ZXJzaXplZDogQ0M9MTAsIGZhbi1vdXQ9MTEsIG11dGF0aW9ucz00LlxuXG5NYWtlIHRoZSBzbWFsbGVzdCByZWZhY3RvciB0aGF0IHJlbW92ZXMgdGhlIHNtZWxsIGFuZCBydW4gbG9jYWwgdGVzdHMuXG5cbmNvZGUybGxtLWRlZHVwZTogY29kZTJsbG06c21lbGw6Z29kX2Z1bmN0aW9uOnNyYy90YWdpL2NsaS91dGlsaXR5X2NvbW1hbmRzLnB5OjEzMTpHb2QgRnVuY3Rpb246IGhvb2tzX2NvbW1hbmQiLCJmaWxlcyI6WyJzcmMvdGFnaS9jbGkvdXRpbGl0eV9jb21tYW5kcy5weSJdLCJpZCI6IlBMRi0xNjMiLCJsYWJlbHMiOlsibGxtLXJlYWR5IiwiY29kZTJsbG0iLCJjb2RlLXNtZWxsIiwiZ29kLWZ1bmN0aW9uIl0sIm5hbWUiOiJBZGRyZXNzIGNvZGUgc21lbGw6IEdvZCBGdW5jdGlvbjogaG9va3NfY29tbWFuZCIsInByaW9yaXR5Ijoibm9ybWFsIiwic291cmNlIjp7ImNvbnRleHQiOnt9LCJ0aW1lc3RhbXAiOiIyMDI2LTA5LTE5VDE3OjI5OjE0Ljg3NTI4MVoiLCJ0b29sIjoia29ydS1zY2FuIn0sInNwcmludCI6ImN1cnJlbnQiLCJzdGF0dXMiOiJvcGVuIiwic3luYyI6e30sInVwZGF0ZWRfYXQiOiIyMDI2LTA5LTE5VDE3OjI5OjE0LjkwMzMyMFoifX0", "files": ["src/tagi/cli/utility_commands.py"], "history": [], "id": "PLF-163", "labels": ["llm-ready", "code2llm", "code-smell", "god-function"], "name": "Address code smell: God Function: hooks_command", "priority": "normal", "source": {"context": {}, "timestamp": "2026-09-19T17:29:14.875281Z", "tool": "koru-scan"}, "sprint": "current", "status": "open", "sync": {}, "updated_at": "2026-09-19T17:29:14.903320Z"}, "PLF-164": {"acceptance_criteria": [], "blocked_by": [], "blocks": [], "children": [], "contract_version": "planfile.ticket/v1", "created_at": "2026-09-19T17:29:15.623939Z", "description": "code2llm reports `God Function: inspect_command` in `src/tagi/cli/inspection_commands.py:19`.\n\nFunction 'inspect_command' is oversized: CC=7, fan-out=11, mutations=4.\n\nMake the smallest refactor that removes the smell and run local tests.\n\ncode2llm-dedupe: code2llm:smell:god_function:src/tagi/cli/inspection_commands.py:19:God Function: inspect_command", "dsl": "SODL/1 id=evt_72c0878785f684fd4b360e9a event_hash=c75a481d991bd9324699cfe999d1e5a55a0880e05808c693bd7e5add09025fe8 timestamp=2026-09-19T17%3A29%3A15.623939%2B00%3A00 kind=task source=planfile.ticket ticket_id=PLF-164 actor=koru-scan oql=ticket.create uri=planfile%3A%2F%2Ftickets%2FPLF-164%2Fcommand%2Fcreate mode=apply status=open correlation_id=PLF-164 causation_id=- input_hash=df0f54865b3784cf2bba77531b3782646c3aec9122da332fe5e35cffd6b56107 receipt_ref=- replayable=true data=eyJwYXlsb2FkIjp7ImFjY2VwdGFuY2VfY3JpdGVyaWEiOltdLCJibG9ja2VkX2J5IjpbXSwiYmxvY2tzIjpbXSwiY2hpbGRyZW4iOltdLCJjb250cmFjdF92ZXJzaW9uIjoicGxhbmZpbGUudGlja2V0L3YxIiwiY3JlYXRlZF9hdCI6IjIwMjYtMDktMTlUMTc6Mjk6MTUuNjIzOTM5WiIsImRlc2NyaXB0aW9uIjoiY29kZTJsbG0gcmVwb3J0cyBgR29kIEZ1bmN0aW9uOiBpbnNwZWN0X2NvbW1hbmRgIGluIGBzcmMvdGFnaS9jbGkvaW5zcGVjdGlvbl9jb21tYW5kcy5weToxOWAuXG5cbkZ1bmN0aW9uICdpbnNwZWN0X2NvbW1hbmQnIGlzIG92ZXJzaXplZDogQ0M9NywgZmFuLW91dD0xMSwgbXV0YXRpb25zPTQuXG5cbk1ha2UgdGhlIHNtYWxsZXN0IHJlZmFjdG9yIHRoYXQgcmVtb3ZlcyB0aGUgc21lbGwgYW5kIHJ1biBsb2NhbCB0ZXN0cy5cblxuY29kZTJsbG0tZGVkdXBlOiBjb2RlMmxsbTpzbWVsbDpnb2RfZnVuY3Rpb246c3JjL3RhZ2kvY2xpL2luc3BlY3Rpb25fY29tbWFuZHMucHk6MTk6R29kIEZ1bmN0aW9uOiBpbnNwZWN0X2NvbW1hbmQiLCJmaWxlcyI6WyJzcmMvdGFnaS9jbGkvaW5zcGVjdGlvbl9jb21tYW5kcy5weSJdLCJpZCI6IlBMRi0xNjQiLCJsYWJlbHMiOlsibGxtLXJlYWR5IiwiY29kZTJsbG0iLCJjb2RlLXNtZWxsIiwiZ29kLWZ1bmN0aW9uIl0sIm5hbWUiOiJBZGRyZXNzIGNvZGUgc21lbGw6IEdvZCBGdW5jdGlvbjogaW5zcGVjdF9jb21tYW5kIiwicHJpb3JpdHkiOiJub3JtYWwiLCJzb3VyY2UiOnsiY29udGV4dCI6e30sInRpbWVzdGFtcCI6IjIwMjYtMDktMTlUMTc6Mjk6MTUuNTk1MDc3WiIsInRvb2wiOiJrb3J1LXNjYW4ifSwic3ByaW50IjoiY3VycmVudCIsInN0YXR1cyI6Im9wZW4iLCJzeW5jIjp7fSwidXBkYXRlZF9hdCI6IjIwMjYtMDktMTlUMTc6Mjk6MTUuNjIzOTQ1WiJ9fQ", "files": ["src/tagi/cli/inspection_commands.py"], "history": [], "id": "PLF-164", "labels": ["llm-ready", "code2llm", "code-smell", "god-function"], "name": "Address code smell: God Function: inspect_command", "priority": "normal", "source": {"context": {}, "timestamp": "2026-09-19T17:29:15.595077Z", "tool": "koru-scan"}, "sprint": "current", "status": "open", "sync": {}, "updated_at": "2026-09-19T17:29:15.623945Z"}, "PLF-165": {"acceptance_criteria": [], "blocked_by": [], "blocks": [], "children": [], "contract_version": "planfile.ticket/v1", "created_at": "2026-09-19T17:29:16.307020Z", "description": "code2llm reports `God Function: publish_command` in `src/tagi/cli/publishing_commands.py:23`.\n\nFunction 'publish_command' is oversized: CC=11, fan-out=14, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests.\n\ncode2llm-dedupe: code2llm:smell:god_function:src/tagi/cli/publishing_commands.py:23:God Function: publish_command", "dsl": "SODL/1 id=evt_8ee5b7a15bf8f1ed3bd37a9c event_hash=0af6d85bc54117becab5c7789f9fe1f6c2a07c864cb603dff4ad7c3eb0d89e56 timestamp=2026-09-19T17%3A29%3A16.307020%2B00%3A00 kind=task source=planfile.ticket ticket_id=PLF-165 actor=koru-scan oql=ticket.create uri=planfile%3A%2F%2Ftickets%2FPLF-165%2Fcommand%2Fcreate mode=apply status=open correlation_id=PLF-165 causation_id=- input_hash=23669a6559bd153e37565e6d65a50fd41a34620dd2ac8b48c23aafaaabee74ca receipt_ref=- replayable=true data=eyJwYXlsb2FkIjp7ImFjY2VwdGFuY2VfY3JpdGVyaWEiOltdLCJibG9ja2VkX2J5IjpbXSwiYmxvY2tzIjpbXSwiY2hpbGRyZW4iOltdLCJjb250cmFjdF92ZXJzaW9uIjoicGxhbmZpbGUudGlja2V0L3YxIiwiY3JlYXRlZF9hdCI6IjIwMjYtMDktMTlUMTc6Mjk6MTYuMzA3MDIwWiIsImRlc2NyaXB0aW9uIjoiY29kZTJsbG0gcmVwb3J0cyBgR29kIEZ1bmN0aW9uOiBwdWJsaXNoX2NvbW1hbmRgIGluIGBzcmMvdGFnaS9jbGkvcHVibGlzaGluZ19jb21tYW5kcy5weToyM2AuXG5cbkZ1bmN0aW9uICdwdWJsaXNoX2NvbW1hbmQnIGlzIG92ZXJzaXplZDogQ0M9MTEsIGZhbi1vdXQ9MTQsIG11dGF0aW9ucz04LlxuXG5NYWtlIHRoZSBzbWFsbGVzdCByZWZhY3RvciB0aGF0IHJlbW92ZXMgdGhlIHNtZWxsIGFuZCBydW4gbG9jYWwgdGVzdHMuXG5cbmNvZGUybGxtLWRlZHVwZTogY29kZTJsbG06c21lbGw6Z29kX2Z1bmN0aW9uOnNyYy90YWdpL2NsaS9wdWJsaXNoaW5nX2NvbW1hbmRzLnB5OjIzOkdvZCBGdW5jdGlvbjogcHVibGlzaF9jb21tYW5kIiwiZmlsZXMiOlsic3JjL3RhZ2kvY2xpL3B1Ymxpc2hpbmdfY29tbWFuZHMucHkiXSwiaWQiOiJQTEYtMTY1IiwibGFiZWxzIjpbImxsbS1yZWFkeSIsImNvZGUybGxtIiwiY29kZS1zbWVsbCIsImdvZC1mdW5jdGlvbiJdLCJuYW1lIjoiQWRkcmVzcyBjb2RlIHNtZWxsOiBHb2QgRnVuY3Rpb246IHB1Ymxpc2hfY29tbWFuZCIsInByaW9yaXR5Ijoibm9ybWFsIiwic291cmNlIjp7ImNvbnRleHQiOnt9LCJ0aW1lc3RhbXAiOiIyMDI2LTA5LTE5VDE3OjI5OjE2LjI4ODI2NFoiLCJ0b29sIjoia29ydS1zY2FuIn0sInNwcmludCI6ImN1cnJlbnQiLCJzdGF0dXMiOiJvcGVuIiwic3luYyI6e30sInVwZGF0ZWRfYXQiOiIyMDI2LTA5LTE5VDE3OjI5OjE2LjMwNzAyNVoifX0", "files": ["src/tagi/cli/publishing_commands.py"], "history": [], "id": "PLF-165", "labels": ["llm-ready", "code2llm", "code-smell", "god-function"], "name": "Address code smell: God Function: publish_command", "priority": "normal", "source": {"context": {}, "timestamp": "2026-09-19T17:29:16.288264Z", "tool": "koru-scan"}, "sprint": "current", "status": "open", "sync": {}, "updated_at": "2026-09-19T17:29:16.307025Z"}, "PLF-166": {"acceptance_criteria": [], "blocked_by": [], "blocks": [], "children": [], "contract_version": "planfile.ticket/v1", "created_at": "2026-09-19T17:29:17.068246Z", "description": "code2llm reports `God Function: scan_repo` in `src/tagi/scanner/status.py:11`.\n\nFunction 'scan_repo' is oversized: CC=7, fan-out=15, mutations=8.\n\nMake the smallest refactor that removes the smell and run local tests.\n\ncode2llm-dedupe: code2llm:smell:god_function:src/tagi/scanner/status.py:11:God Function: scan_repo", "dsl": "SODL/1 id=evt_461a86c7b0a0152501eed031 event_hash=d3d5dab3966ea45333fb4e595c94233dcf1c91486df0c625edb042d87ac1aa38 timestamp=2026-09-19T17%3A29%3A17.068246%2B00%3A00 kind=task source=planfile.ticket ticket_id=PLF-166 actor=koru-scan oql=ticket.create uri=planfile%3A%2F%2Ftickets%2FPLF-166%2Fcommand%2Fcreate mode=apply status=open correlation_id=PLF-166 causation_id=- input_hash=c0d3402362def21068249a3d8ceb948960cbb839b08276ab267d9c01a6b2b391 receipt_ref=- replayable=true data=eyJwYXlsb2FkIjp7ImFjY2VwdGFuY2VfY3JpdGVyaWEiOltdLCJibG9ja2VkX2J5IjpbXSwiYmxvY2tzIjpbXSwiY2hpbGRyZW4iOltdLCJjb250cmFjdF92ZXJzaW9uIjoicGxhbmZpbGUudGlja2V0L3YxIiwiY3JlYXRlZF9hdCI6IjIwMjYtMDktMTlUMTc6Mjk6MTcuMDY4MjQ2WiIsImRlc2NyaXB0aW9uIjoiY29kZTJsbG0gcmVwb3J0cyBgR29kIEZ1bmN0aW9uOiBzY2FuX3JlcG9gIGluIGBzcmMvdGFnaS9zY2FubmVyL3N0YXR1cy5weToxMWAuXG5cbkZ1bmN0aW9uICdzY2FuX3JlcG8nIGlzIG92ZXJzaXplZDogQ0M9NywgZmFuLW91dD0xNSwgbXV0YXRpb25zPTguXG5cbk1ha2UgdGhlIHNtYWxsZXN0IHJlZmFjdG9yIHRoYXQgcmVtb3ZlcyB0aGUgc21lbGwgYW5kIHJ1biBsb2NhbCB0ZXN0cy5cblxuY29kZTJsbG0tZGVkdXBlOiBjb2RlMmxsbTpzbWVsbDpnb2RfZnVuY3Rpb246c3JjL3RhZ2kvc2Nhbm5lci9zdGF0dXMucHk6MTE6R29kIEZ1bmN0aW9uOiBzY2FuX3JlcG8iLCJmaWxlcyI6WyJzcmMvdGFnaS9zY2FubmVyL3N0YXR1cy5weSJdLCJpZCI6IlBMRi0xNjYiLCJsYWJlbHMiOlsibGxtLXJlYWR5IiwiY29kZTJsbG0iLCJjb2RlLXNtZWxsIiwiZ29kLWZ1bmN0aW9uIl0sIm5hbWUiOiJBZGRyZXNzIGNvZGUgc21lbGw6IEdvZCBGdW5jdGlvbjogc2Nhbl9yZXBvIiwicHJpb3JpdHkiOiJub3JtYWwiLCJzb3VyY2UiOnsiY29udGV4dCI6e30sInRpbWVzdGFtcCI6IjIwMjYtMDktMTlUMTc6Mjk6MTcuMDUyMjY2WiIsInRvb2wiOiJrb3J1LXNjYW4ifSwic3ByaW50IjoiY3VycmVudCIsInN0YXR1cyI6Im9wZW4iLCJzeW5jIjp7fSwidXBkYXRlZF9hdCI6IjIwMjYtMDktMTlUMTc6Mjk6MTcuMDY4MjUxWiJ9fQ", "files": ["src/tagi/scanner/status.py"], "history": [], "id": "PLF-166", "labels": ["llm-ready", "code2llm", "code-smell", "god-function"], "name": "Address code smell: God Function: scan_repo", "priority": "normal", "source": {"context": {}, "timestamp": "2026-09-19T17:29:17.052266Z", "tool": "koru-scan"}, "sprint": "current", "status": "open", "sync": {}, "updated_at": "2026-09-19T17:29:17.068251Z"}, "PLF-167": {"acceptance_criteria": [], "blocked_by": [], "blocks": [], "children": [], "contract_version": "planfile.ticket/v1", "created_at": "2026-09-19T17:29:17.860410Z", "description": "code2llm reports `God Function: send_command` in `src/tagi/cli/git_operations.py:90`.\n\nFunction 'send_command' is oversized: CC=7, fan-out=13, mutations=9.\n\nMake the smallest refactor that removes the smell and run local tests.\n\ncode2llm-dedupe: code2llm:smell:god_function:src/tagi/cli/git_operations.py:90:God Function: send_command", "dsl": "SODL/1 id=evt_0070ec25d0348db59a671c5a event_hash=d7877a6e71bb42c74984c67804b78e6e0716161794288ff8b9c77019e0d52b30 timestamp=2026-09-19T17%3A29%3A17.860410%2B00%3A00 kind=task source=planfile.ticket ticket_id=PLF-167 actor=koru-scan oql=ticket.create uri=planfile%3A%2F%2Ftickets%2FPLF-167%2Fcommand%2Fcreate mode=apply status=open correlation_id=PLF-167 causation_id=- input_hash=094dbbace041d2eb7af5002d22008dba9b42c08b5bfe88e6f924ea8a577809c4 receipt_ref=- replayable=true data=eyJwYXlsb2FkIjp7ImFjY2VwdGFuY2VfY3JpdGVyaWEiOltdLCJibG9ja2VkX2J5IjpbXSwiYmxvY2tzIjpbXSwiY2hpbGRyZW4iOltdLCJjb250cmFjdF92ZXJzaW9uIjoicGxhbmZpbGUudGlja2V0L3YxIiwiY3JlYXRlZF9hdCI6IjIwMjYtMDktMTlUMTc6Mjk6MTcuODYwNDEwWiIsImRlc2NyaXB0aW9uIjoiY29kZTJsbG0gcmVwb3J0cyBgR29kIEZ1bmN0aW9uOiBzZW5kX2NvbW1hbmRgIGluIGBzcmMvdGFnaS9jbGkvZ2l0X29wZXJhdGlvbnMucHk6OTBgLlxuXG5GdW5jdGlvbiAnc2VuZF9jb21tYW5kJyBpcyBvdmVyc2l6ZWQ6IENDPTcsIGZhbi1vdXQ9MTMsIG11dGF0aW9ucz05LlxuXG5NYWtlIHRoZSBzbWFsbGVzdCByZWZhY3RvciB0aGF0IHJlbW92ZXMgdGhlIHNtZWxsIGFuZCBydW4gbG9jYWwgdGVzdHMuXG5cbmNvZGUybGxtLWRlZHVwZTogY29kZTJsbG06c21lbGw6Z29kX2Z1bmN0aW9uOnNyYy90YWdpL2NsaS9naXRfb3BlcmF0aW9ucy5weTo5MDpHb2QgRnVuY3Rpb246IHNlbmRfY29tbWFuZCIsImZpbGVzIjpbInNyYy90YWdpL2NsaS9naXRfb3BlcmF0aW9ucy5weSJdLCJpZCI6IlBMRi0xNjciLCJsYWJlbHMiOlsibGxtLXJlYWR5IiwiY29kZTJsbG0iLCJjb2RlLXNtZWxsIiwiZ29kLWZ1bmN0aW9uIl0sIm5hbWUiOiJBZGRyZXNzIGNvZGUgc21lbGw6IEdvZCBGdW5jdGlvbjogc2VuZF9jb21tYW5kIiwicHJpb3JpdHkiOiJub3JtYWwiLCJzb3VyY2UiOnsiY29udGV4dCI6e30sInRpbWVzdGFtcCI6IjIwMjYtMDktMTlUMTc6Mjk6MTcuODM5OTAwWiIsInRvb2wiOiJrb3J1LXNjYW4ifSwic3ByaW50IjoiY3VycmVudCIsInN0YXR1cyI6Im9wZW4iLCJzeW5jIjp7fSwidXBkYXRlZF9hdCI6IjIwMjYtMDktMTlUMTc6Mjk6MTcuODYwNDE3WiJ9fQ", "files": ["src/tagi/cli/git_operations.py"], "history": [], "id": "PLF-167", "labels": ["llm-ready", "code2llm", "code-smell", "god-function"], "name": "Address code smell: God Function: send_command", "priority": "normal", "source": {"context": {}, "timestamp": "2026-09-19T17:29:17.839900Z", "tool": "koru-scan"}, "sprint": "current", "status": "open", "sync": {}, "updated_at": "2026-09-19T17:29:17.860417Z"}, "PLF-168": {"acceptance_criteria": [], "blocked_by": [], "blocks": [], "children": [], "contract_version": "planfile.ticket/v1", "created_at": "2026-09-19T17:29:18.761477Z", "description": "code2llm reports `God Function: setup_logger` in `src/tagi/utils/logger.py:9`.\n\nFunction 'setup_logger' is oversized: CC=4, fan-out=13, mutations=14.\n\nMake the smallest refactor that removes the smell and run local tests.\n\ncode2llm-dedupe: code2llm:smell:god_function:src/tagi/utils/logger.py:9:God Function: setup_logger", "dsl": "SODL/1 id=evt_f0359544002aed038d929132 event_hash=d257a0ac3a625f71ba5bf32550ced9e807cf2dfce823a01aeeaa442df5607306 timestamp=2026-09-19T17%3A29%3A18.761477%2B00%3A00 kind=task source=planfile.ticket ticket_id=PLF-168 actor=koru-scan oql=ticket.create uri=planfile%3A%2F%2Ftickets%2FPLF-168%2Fcommand%2Fcreate mode=apply status=open correlation_id=PLF-168 causation_id=- input_hash=5455099356079369221e96f911f718af3f22a074c77828cfce5d271410ed75e8 receipt_ref=- replayable=true data=eyJwYXlsb2FkIjp7ImFjY2VwdGFuY2VfY3JpdGVyaWEiOltdLCJibG9ja2VkX2J5IjpbXSwiYmxvY2tzIjpbXSwiY2hpbGRyZW4iOltdLCJjb250cmFjdF92ZXJzaW9uIjoicGxhbmZpbGUudGlja2V0L3YxIiwiY3JlYXRlZF9hdCI6IjIwMjYtMDktMTlUMTc6Mjk6MTguNzYxNDc3WiIsImRlc2NyaXB0aW9uIjoiY29kZTJsbG0gcmVwb3J0cyBgR29kIEZ1bmN0aW9uOiBzZXR1cF9sb2dnZXJgIGluIGBzcmMvdGFnaS91dGlscy9sb2dnZXIucHk6OWAuXG5cbkZ1bmN0aW9uICdzZXR1cF9sb2dnZXInIGlzIG92ZXJzaXplZDogQ0M9NCwgZmFuLW91dD0xMywgbXV0YXRpb25zPTE0LlxuXG5NYWtlIHRoZSBzbWFsbGVzdCByZWZhY3RvciB0aGF0IHJlbW92ZXMgdGhlIHNtZWxsIGFuZCBydW4gbG9jYWwgdGVzdHMuXG5cbmNvZGUybGxtLWRlZHVwZTogY29kZTJsbG06c21lbGw6Z29kX2Z1bmN0aW9uOnNyYy90YWdpL3V0aWxzL2xvZ2dlci5weTo5OkdvZCBGdW5jdGlvbjogc2V0dXBfbG9nZ2VyIiwiZmlsZXMiOlsic3JjL3RhZ2kvdXRpbHMvbG9nZ2VyLnB5Il0sImlkIjoiUExGLTE2OCIsImxhYmVscyI6WyJsbG0tcmVhZHkiLCJjb2RlMmxsbSIsImNvZGUtc21lbGwiLCJnb2QtZnVuY3Rpb24iXSwibmFtZSI6IkFkZHJlc3MgY29kZSBzbWVsbDogR29kIEZ1bmN0aW9uOiBzZXR1cF9sb2dnZXIiLCJwcmlvcml0eSI6Im5vcm1hbCIsInNvdXJjZSI6eyJjb250ZXh0Ijp7fSwidGltZXN0YW1wIjoiMjAyNi0wOS0xOVQxNzoyOToxOC43NDA5NDlaIiwidG9vbCI6ImtvcnUtc2NhbiJ9LCJzcHJpbnQiOiJjdXJyZW50Iiwic3RhdHVzIjoib3BlbiIsInN5bmMiOnt9LCJ1cGRhdGVkX2F0IjoiMjAyNi0wOS0xOVQxNzoyOToxOC43NjE0ODNaIn19", "files": ["src/tagi/utils/logger.py"], "history": [], "id": "PLF-168", "labels": ["llm-ready", "code2llm", "code-smell", "god-function"], "name": "Address code smell: God Function: setup_logger", "priority": "normal", "source": {"context": {}, "timestamp": "2026-09-19T17:29:18.740949Z", "tool": "koru-scan"}, "sprint": "current", "status": "open", "sync": {}, "updated_at": "2026-09-19T17:29:18.761483Z"}, "PLF-169": {"acceptance_criteria": [], "blocked_by": [], "blocks": [], "children": [], "contract_version": "planfile.ticket/v1", "created_at": "2026-09-19T17:29:19.641507Z", "description": "code2llm reports `God Function: summary_command` in `src/tagi/cli/utility_commands.py:25`.\n\nFunction 'summary_command' is oversized: CC=7, fan-out=13, mutations=17.\n\nMake the smallest refactor that removes the smell and run local tests.\n\ncode2llm-dedupe: code2llm:smell:god_function:src/tagi/cli/utility_commands.py:25:God Function: summary_command", "dsl": "SODL/1 id=evt_e1d3735ae7f1ce6cfd509c69 event_hash=4a5cf616d161a2108e26202203152fecce7c4581229df2b6b8f59e5262182551 timestamp=2026-09-19T17%3A29%3A19.641507%2B00%3A00 kind=task source=planfile.ticket ticket_id=PLF-169 actor=koru-scan oql=ticket.create uri=planfile%3A%2F%2Ftickets%2FPLF-169%2Fcommand%2Fcreate mode=apply status=open correlation_id=PLF-169 causation_id=- input_hash=7eb42404efc63ebac74b06bba227b2078d3f968671273d50246688c2b076a63c receipt_ref=- replayable=true data=eyJwYXlsb2FkIjp7ImFjY2VwdGFuY2VfY3JpdGVyaWEiOltdLCJibG9ja2VkX2J5IjpbXSwiYmxvY2tzIjpbXSwiY2hpbGRyZW4iOltdLCJjb250cmFjdF92ZXJzaW9uIjoicGxhbmZpbGUudGlja2V0L3YxIiwiY3JlYXRlZF9hdCI6IjIwMjYtMDktMTlUMTc6Mjk6MTkuNjQxNTA3WiIsImRlc2NyaXB0aW9uIjoiY29kZTJsbG0gcmVwb3J0cyBgR29kIEZ1bmN0aW9uOiBzdW1tYXJ5X2NvbW1hbmRgIGluIGBzcmMvdGFnaS9jbGkvdXRpbGl0eV9jb21tYW5kcy5weToyNWAuXG5cbkZ1bmN0aW9uICdzdW1tYXJ5X2NvbW1hbmQnIGlzIG92ZXJzaXplZDogQ0M9NywgZmFuLW91dD0xMywgbXV0YXRpb25zPTE3LlxuXG5NYWtlIHRoZSBzbWFsbGVzdCByZWZhY3RvciB0aGF0IHJlbW92ZXMgdGhlIHNtZWxsIGFuZCBydW4gbG9jYWwgdGVzdHMuXG5cbmNvZGUybGxtLWRlZHVwZTogY29kZTJsbG06c21lbGw6Z29kX2Z1bmN0aW9uOnNyYy90YWdpL2NsaS91dGlsaXR5X2NvbW1hbmRzLnB5OjI1OkdvZCBGdW5jdGlvbjogc3VtbWFyeV9jb21tYW5kIiwiZmlsZXMiOlsic3JjL3RhZ2kvY2xpL3V0aWxpdHlfY29tbWFuZHMucHkiXSwiaWQiOiJQTEYtMTY5IiwibGFiZWxzIjpbImxsbS1yZWFkeSIsImNvZGUybGxtIiwiY29kZS1zbWVsbCIsImdvZC1mdW5jdGlvbiJdLCJuYW1lIjoiQWRkcmVzcyBjb2RlIHNtZWxsOiBHb2QgRnVuY3Rpb246IHN1bW1hcnlfY29tbWFuZCIsInByaW9yaXR5Ijoibm9ybWFsIiwic291cmNlIjp7ImNvbnRleHQiOnt9LCJ0aW1lc3RhbXAiOiIyMDI2LTA5LTE5VDE3OjI5OjE5LjYxMjkwMVoiLCJ0b29sIjoia29ydS1zY2FuIn0sInNwcmludCI6ImN1cnJlbnQiLCJzdGF0dXMiOiJvcGVuIiwic3luYyI6e30sInVwZGF0ZWRfYXQiOiIyMDI2LTA5LTE5VDE3OjI5OjE5LjY0MTUxNFoifX0", "files": ["src/tagi/cli/utility_commands.py"], "history": [], "id": "PLF-169", "labels": ["llm-ready", "code2llm", "code-smell", "god-function"], "name": "Address code smell: God Function: summary_command", "priority": "normal", "source": {"context": {}, "timestamp": "2026-09-19T17:29:19.612901Z", "tool": "koru-scan"}, "sprint": "current", "status": "open", "sync": {}, "updated_at": "2026-09-19T17:29:19.641514Z"}, "PLF-171": {"backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-19T17:43:09.548402+00:00", "description": "code2llm reports `God Function: _tag_change` in `src/tagi/heuristics/tags.py:22`.\n\nFunction '_tag_change' is oversized: CC=2, fan-out=9, mutations=9.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "187", "files": ["src/tagi/heuristics/tags.py"], "history": [{"action": "created", "message": "code2llm reports `God Function: _tag_change` in `src/tagi/heuristics/tags.py:22`.\n\nFunction '_tag_change' is oversized: CC=2, fan-out=9, mutations=9.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-19T17:43:09.548402+00:00"}], "id": "PLF-171", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `God Function: _tag_change` in `src/tagi/heuristics/tags.py:22`.\n\nFunction '_tag_change' is oversized: CC=2, fan-out=9, mutations=9.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["koru", "nl-task", "llm-ready", "code2llm", "code-smell", "god-function", "priority: normal", "priority: normal", "priority: normal", "priority: normal", "priority: normal"], "name": "Address code smell: God Function: _tag_change", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:god_function:src/tagi/heuristics/tags.py:22:God Function: _tag_change", "evidence": {"artifact": {"mtime_ns": 1789838949904540410, "path": "project/analysis.toon.yaml", "sha256": "a20fa29c7d952fbcda7207db98cbe6042565fe78c7e14633a3065728be7842c6", "size_bytes": 9689}, "files": [{"mtime_ns": 1789830262593470416, "path": "src/tagi/heuristics/tags.py", "sha256": "a4f450ad5caf03cfd4f6b956809d7dfb0dabd3f6f7da91aad7e2202ac7576f69", "size_bytes": 3411}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789838959872519685, "path": "project/planfile-tickets.yaml", "sha256": "b5faa6f4e5d625a802e28855d7954530f8835c2a1c4377ec4676a9e843e17d04", "size_bytes": 8004}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `God Function: _tag_change` in `src/tagi/heuristics/tags.py:22`.\n\nFunction '_tag_change' is oversized: CC=2, fan-out=9, mutations=9.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_god_function"}, "timestamp": "2026-09-19T17:43:09.548402+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "187", "key": "semcod/tagi#187", "url": "https://github.com/semcod/tagi/issues/187"}}, "updated_at": "2026-09-19T17:43:09.548402+00:00"}, "PLF-172": {"backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-19T17:53:12.889023+00:00", "description": "code2llm reports `God Function: send_command` in `src/tagi/cli/git_operations.py:90`.\n\nFunction 'send_command' is oversized: CC=7, fan-out=13, mutations=9.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "188", "files": ["src/tagi/cli/git_operations.py"], "history": [{"action": "created", "message": "code2llm reports `God Function: send_command` in `src/tagi/cli/git_operations.py:90`.\n\nFunction 'send_command' is oversized: CC=7, fan-out=13, mutations=9.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-19T17:53:12.889023+00:00"}], "id": "PLF-172", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `God Function: send_command` in `src/tagi/cli/git_operations.py:90`.\n\nFunction 'send_command' is oversized: CC=7, fan-out=13, mutations=9.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["koru", "nl-task", "llm-ready", "code2llm", "code-smell", "god-function", "priority: normal", "priority: normal", "priority: normal", "priority: normal"], "name": "Address code smell: God Function: send_command", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:god_function:src/tagi/cli/git_operations.py:90:God Function: send_command", "evidence": {"artifact": {"mtime_ns": 1789838949904540410, "path": "project/analysis.toon.yaml", "sha256": "a20fa29c7d952fbcda7207db98cbe6042565fe78c7e14633a3065728be7842c6", "size_bytes": 9689}, "files": [{"mtime_ns": 1789824641491087908, "path": "src/tagi/cli/git_operations.py", "sha256": "049eb6ec4314014115e3471ce64f037758ab685f40cb9896fe129daf8618d861", "size_bytes": 6307}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789838959872519685, "path": "project/planfile-tickets.yaml", "sha256": "b5faa6f4e5d625a802e28855d7954530f8835c2a1c4377ec4676a9e843e17d04", "size_bytes": 8004}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `God Function: send_command` in `src/tagi/cli/git_operations.py:90`.\n\nFunction 'send_command' is oversized: CC=7, fan-out=13, mutations=9.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_god_function"}, "timestamp": "2026-09-19T17:53:12.889023+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "188", "key": "semcod/tagi#188", "url": "https://github.com/semcod/tagi/issues/188"}}, "updated_at": "2026-09-19T17:53:12.889023+00:00"}, "PLF-173": {"backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-19T18:16:24.472046+00:00", "description": "code2llm reports `God Function: setup_logger` in `src/tagi/utils/logger.py:9`.\n\nFunction 'setup_logger' is oversized: CC=4, fan-out=13, mutations=14.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "189", "files": ["src/tagi/utils/logger.py"], "history": [{"action": "created", "message": "code2llm reports `God Function: setup_logger` in `src/tagi/utils/logger.py:9`.\n\nFunction 'setup_logger' is oversized: CC=4, fan-out=13, mutations=14.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-19T18:16:24.472046+00:00"}], "id": "PLF-173", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `God Function: setup_logger` in `src/tagi/utils/logger.py:9`.\n\nFunction 'setup_logger' is oversized: CC=4, fan-out=13, mutations=14.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["koru", "nl-task", "llm-ready", "code2llm", "code-smell", "god-function", "priority: normal", "priority: normal", "priority: normal"], "name": "Address code smell: God Function: setup_logger", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:god_function:src/tagi/utils/logger.py:9:God Function: setup_logger", "evidence": {"artifact": {"mtime_ns": 1789838949904540410, "path": "project/analysis.toon.yaml", "sha256": "a20fa29c7d952fbcda7207db98cbe6042565fe78c7e14633a3065728be7842c6", "size_bytes": 9689}, "files": [{"mtime_ns": 1779809465287675064, "path": "src/tagi/utils/logger.py", "sha256": "25d7171aee4d351bc65d315acfa6d09d6e91491346c2ac3cca945577d7397c89", "size_bytes": 1747}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789838959872519685, "path": "project/planfile-tickets.yaml", "sha256": "b5faa6f4e5d625a802e28855d7954530f8835c2a1c4377ec4676a9e843e17d04", "size_bytes": 8004}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `God Function: setup_logger` in `src/tagi/utils/logger.py:9`.\n\nFunction 'setup_logger' is oversized: CC=4, fan-out=13, mutations=14.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_god_function"}, "timestamp": "2026-09-19T18:16:24.472046+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "189", "key": "semcod/tagi#189", "url": "https://github.com/semcod/tagi/issues/189"}}, "updated_at": "2026-09-19T18:16:24.472046+00:00"}, "PLF-174": {"backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-19T18:25:22.064458+00:00", "description": "code2llm reports `God Function: summary_command` in `src/tagi/cli/utility_commands.py:25`.\n\nFunction 'summary_command' is oversized: CC=7, fan-out=13, mutations=17.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "190", "files": ["src/tagi/cli/utility_commands.py"], "history": [{"action": "created", "message": "code2llm reports `God Function: summary_command` in `src/tagi/cli/utility_commands.py:25`.\n\nFunction 'summary_command' is oversized: CC=7, fan-out=13, mutations=17.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-19T18:25:22.064458+00:00"}], "id": "PLF-174", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `God Function: summary_command` in `src/tagi/cli/utility_commands.py:25`.\n\nFunction 'summary_command' is oversized: CC=7, fan-out=13, mutations=17.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["koru", "nl-task", "llm-ready", "code2llm", "code-smell", "god-function", "priority: normal", "priority: normal"], "name": "Address code smell: God Function: summary_command", "outputs": {"artifacts": [], "notes": []}, "priority": "normal", "source": {"context": {"dedupe_key": "code2llm:smell:god_function:src/tagi/cli/utility_commands.py:25:God Function: summary_command", "evidence": {"artifact": {"mtime_ns": 1789838949904540410, "path": "project/analysis.toon.yaml", "sha256": "a20fa29c7d952fbcda7207db98cbe6042565fe78c7e14633a3065728be7842c6", "size_bytes": 9689}, "files": [{"mtime_ns": 1789817932257139916, "path": "src/tagi/cli/utility_commands.py", "sha256": "e8d62787b625b75ab02154b4de181d4c5ab9cf2443e7bec06574c0ec46b63499", "size_bytes": 7253}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789838959872519685, "path": "project/planfile-tickets.yaml", "sha256": "b5faa6f4e5d625a802e28855d7954530f8835c2a1c4377ec4676a9e843e17d04", "size_bytes": 8004}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `God Function: summary_command` in `src/tagi/cli/utility_commands.py:25`.\n\nFunction 'summary_command' is oversized: CC=7, fan-out=13, mutations=17.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_god_function"}, "timestamp": "2026-09-19T18:25:22.064458+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "190", "key": "semcod/tagi#190", "url": "https://github.com/semcod/tagi/issues/190"}}, "updated_at": "2026-09-19T18:25:22.064458+00:00"}, "PLF-176": {"backend": "github", "blocked_by": [], "blocks": [], "created_at": "2026-09-19T19:49:31.353399+00:00", "description": "code2llm reports `Shotgun Surgery: tags` in `src/tagi/composer/_tags.py:20`.\n\nMutation of variable 'tags' spans 5 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "execution": {"attempt": 0, "max_attempts": 1, "queue": "default", "state": "ready"}, "executor": {"kind": "human", "mode": "interactive"}, "external_id": "193", "files": ["src/tagi/composer/_tags.py"], "history": [{"action": "created", "message": "code2llm reports `Shotgun Surgery: tags` in `src/tagi/composer/_tags.py:20`.\n\nMutation of variable 'tags' spans 5 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "source": "koru task", "timestamp": "2026-09-19T19:49:31.353399+00:00"}], "id": "PLF-176", "inputs": {"api_headers": {}, "api_method": "GET", "api_timeout_seconds": 30.0, "env_keys": [], "prompt": "code2llm reports `Shotgun Surgery: tags` in `src/tagi/composer/_tags.py:20`.\n\nMutation of variable 'tags' spans 5 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests."}, "integration": ["github"], "labels": ["koru", "nl-task", "llm-ready", "code2llm", "code-smell", "shotgun-surgery"], "name": "Address code smell: Shotgun Surgery: tags", "outputs": {"artifacts": [], "notes": []}, "priority": "high", "source": {"context": {"dedupe_key": "code2llm:smell:shotgun_surgery:src/tagi/composer/_tags.py:20:Shotgun Surgery: tags", "evidence": {"artifact": {"mtime_ns": 1789847360141767983, "path": "project/analysis.toon.yaml", "sha256": "661fceb25106c0f600fa86e3b2a2eb625295fb450e7315531abb66b52e13a02a", "size_bytes": 12168}, "files": [{"mtime_ns": 1789820644380550921, "path": "src/tagi/composer/_tags.py", "sha256": "84f953c3818378853cdb9345e86066e66fa04ccc0177985fdf2665c7fe5ebdc6", "size_bytes": 1361}], "kind": "code2llm_discovery", "planfile_tickets": {"mtime_ns": 1789847360243915139, "path": "project/planfile-tickets.yaml", "sha256": "c9219bc012e7516e3794f3e0b448f30861f9296138744f977d5f94044cbdfe2a", "size_bytes": 6743}, "regenerate_command": "code2llm /home/tom/github/semcod/tagi -f all -o /home/tom/github/semcod/tagi/project --no-chunk --exclude *.md --exclude plugins --planfile-apply --planfile-source koru-project-discovery --planfile-sprint current --planfile-project /home/tom/github/semcod/tagi --planfile-limit 20", "schema": "koru.ticket_evidence.v1", "staleness_check": "Regenerate artifacts and compare artifact.sha256 / files[].sha256 before assuming this ticket is still current."}, "input": "code2llm reports `Shotgun Surgery: tags` in `src/tagi/composer/_tags.py:20`.\n\nMutation of variable 'tags' spans 5 functions. Changing this logic requires work in many places.\n\nMake the smallest refactor that removes the smell and run local tests.", "signal": "code2llm_smell_shotgun_surgery"}, "timestamp": "2026-09-19T19:49:31.353399+00:00", "tool": "koru-project-discovery"}, "sprint": "current", "status": "open", "sync": {"github": {"id": "193", "key": "semcod/tagi#193", "url": "https://github.com/semcod/tagi/issues/193"}}, "updated_at": "2026-09-19T19:49:31.353399+00:00"}, "PLF-177": {"id": "PLF-177", "name": "Deduplicate cli tag helpers (_ensure_tag_prefix, _is_known_tag, _resolve_send_target)", "contract_version": "planfile.ticket/v1", "status": "open", "priority": "high", "sprint": "current", "source": {"tool": "koru-project-discovery", "timestamp": "2026-09-19T21:13:19.158777Z", "context": {}}, "description": "Fresh redup scan (project/duplication.toon.yaml, 2026-09-19) flags copy-pasted helpers introduced by the cli module split:\n\n- _ensure_tag_prefix: 4 identical copies (src/tagi/cli/main.py:50, git_operations.py:21, publishing_commands.py:16, utility_commands.py:18) — 24 duplicated lines.\n- _resolve_send_target + _is_known_tag: duplicated between src/tagi/cli/main.py:57-83 and git_operations.py:28-56 (19+10 lines), with comment drift between the two copies.\n\nExtract these into one shared cli helper module (e.g. src/tagi/cli/tag_targets.py), import it from all four command modules, and keep behavior identical.\n\nAcceptance criteria:\n- redup scan of src/ reports no EXAC groups for these helpers (dup groups 7 -> <=4).\n- python -m pytest -q stays green (127 passed).", "acceptance_criteria": [], "labels": ["koru", "nl-task", "llm-ready", "project-discovery", "duplication"], "blocked_by": [], "blocks": [], "children": [], "files": ["src/tagi/cli/main.py", "src/tagi/cli/git_operations.py", "src/tagi/cli/publishing_commands.py", "src/tagi/cli/utility_commands.py"], "sync": {}, "history": [], "dsl": "SODL/1 id=evt_6d8071ad9e575f187c0d44fc event_hash=09dee25ffd62e51fcf5519f07cf9cdb658a69ceb037eb39c11b0a66d7d2508f3 timestamp=2026-09-19T21%3A13%3A19.174193%2B00%3A00 kind=task source=planfile.ticket ticket_id=PLF-177 actor=koru-project-discovery oql=ticket.create uri=planfile%3A%2F%2Ftickets%2FPLF-177%2Fcommand%2Fcreate mode=apply status=open correlation_id=PLF-177 causation_id=- input_hash=c3d47241fd79a8d7580afdb743ddae69f661a9bc415f8a9439190b58d9951b52 receipt_ref=- replayable=true data=eyJwYXlsb2FkIjp7ImFjY2VwdGFuY2VfY3JpdGVyaWEiOltdLCJibG9ja2VkX2J5IjpbXSwiYmxvY2tzIjpbXSwiY2hpbGRyZW4iOltdLCJjb250cmFjdF92ZXJzaW9uIjoicGxhbmZpbGUudGlja2V0L3YxIiwiY3JlYXRlZF9hdCI6IjIwMjYtMDktMTlUMjE6MTM6MTkuMTc0MTkzWiIsImRlc2NyaXB0aW9uIjoiRnJlc2ggcmVkdXAgc2NhbiAocHJvamVjdC9kdXBsaWNhdGlvbi50b29uLnlhbWwsIDIwMjYtMDktMTkpIGZsYWdzIGNvcHktcGFzdGVkIGhlbHBlcnMgaW50cm9kdWNlZCBieSB0aGUgY2xpIG1vZHVsZSBzcGxpdDpcblxuLSBfZW5zdXJlX3RhZ19wcmVmaXg6IDQgaWRlbnRpY2FsIGNvcGllcyAoc3JjL3RhZ2kvY2xpL21haW4ucHk6NTAsIGdpdF9vcGVyYXRpb25zLnB5OjIxLCBwdWJsaXNoaW5nX2NvbW1hbmRzLnB5OjE2LCB1dGlsaXR5X2NvbW1hbmRzLnB5OjE4KSDigJQgMjQgZHVwbGljYXRlZCBsaW5lcy5cbi0gX3Jlc29sdmVfc2VuZF90YXJnZXQgKyBfaXNfa25vd25fdGFnOiBkdXBsaWNhdGVkIGJldHdlZW4gc3JjL3RhZ2kvY2xpL21haW4ucHk6NTctODMgYW5kIGdpdF9vcGVyYXRpb25zLnB5OjI4LTU2ICgxOSsxMCBsaW5lcyksIHdpdGggY29tbWVudCBkcmlmdCBiZXR3ZWVuIHRoZSB0d28gY29waWVzLlxuXG5FeHRyYWN0IHRoZXNlIGludG8gb25lIHNoYXJlZCBjbGkgaGVscGVyIG1vZHVsZSAoZS5nLiBzcmMvdGFnaS9jbGkvdGFnX3RhcmdldHMucHkpLCBpbXBvcnQgaXQgZnJvbSBhbGwgZm91ciBjb21tYW5kIG1vZHVsZXMsIGFuZCBrZWVwIGJlaGF2aW9yIGlkZW50aWNhbC5cblxuQWNjZXB0YW5jZSBjcml0ZXJpYTpcbi0gcmVkdXAgc2NhbiBvZiBzcmMvIHJlcG9ydHMgbm8gRVhBQyBncm91cHMgZm9yIHRoZXNlIGhlbHBlcnMgKGR1cCBncm91cHMgNyAtPiA8PTQpLlxuLSBweXRob24gLW0gcHl0ZXN0IC1xIHN0YXlzIGdyZWVuICgxMjcgcGFzc2VkKS4iLCJmaWxlcyI6WyJzcmMvdGFnaS9jbGkvbWFpbi5weSIsInNyYy90YWdpL2NsaS9naXRfb3BlcmF0aW9ucy5weSIsInNyYy90YWdpL2NsaS9wdWJsaXNoaW5nX2NvbW1hbmRzLnB5Iiwic3JjL3RhZ2kvY2xpL3V0aWxpdHlfY29tbWFuZHMucHkiXSwiaWQiOiJQTEYtMTc3IiwibGFiZWxzIjpbImtvcnUiLCJubC10YXNrIiwibGxtLXJlYWR5IiwicHJvamVjdC1kaXNjb3ZlcnkiLCJkdXBsaWNhdGlvbiJdLCJuYW1lIjoiRGVkdXBsaWNhdGUgY2xpIHRhZyBoZWxwZXJzIChfZW5zdXJlX3RhZ19wcmVmaXgsIF9pc19rbm93bl90YWcsIF9yZXNvbHZlX3NlbmRfdGFyZ2V0KSIsInByaW9yaXR5IjoiaGlnaCIsInNvdXJjZSI6eyJjb250ZXh0Ijp7fSwidGltZXN0YW1wIjoiMjAyNi0wOS0xOVQyMToxMzoxOS4xNTg3NzdaIiwidG9vbCI6ImtvcnUtcHJvamVjdC1kaXNjb3ZlcnkifSwic3ByaW50IjoiY3VycmVudCIsInN0YXR1cyI6Im9wZW4iLCJzeW5jIjp7fSwidXBkYXRlZF9hdCI6IjIwMjYtMDktMTlUMjE6MTM6MTkuMTc0MTk4WiJ9fQ", "created_at": "2026-09-19T21:13:19.174193Z", "updated_at": "2026-09-19T21:13:19.174198Z"}, "PLF-178": {"id": "PLF-178", "name": "Add unit tests for analyzer/dependency_graph.py", "contract_version": "planfile.ticket/v1", "status": "open", "priority": "high", "sprint": "current", "source": {"tool": "koru-project-discovery", "timestamp": "2026-09-19T21:13:25.331447Z", "context": {}}, "description": "src/tagi/analyzer/dependency_graph.py is the largest module in the codebase (276L, 16 functions, CC=7) and has no dedicated test coverage (verified 2026-09-19: no tests/ file imports it; only a path fixture mention).\n\nIt implements pure graph algorithms used by planning: build_dependency_graph, find_dependency_order, detect_cycles, get_critical_path, levels.\n\nAdd tests/test_dependency_graph.py covering:\n- build_dependency_graph from python import analysis (incl. _collect_import_names edge cases).\n- find_dependency_order: deterministic order, dependencies before dependents.\n- detect_cycles: acyclic graph -> [], cyclic graph -> reported cycle (incl. self-loop).\n- get_critical_path: longest path in a diamond graph.\n- levels/_drain_level partitioning.\n\nAcceptance criteria:\n- python -m pytest -q green with the new tests included.\n- Coverage of the module's public functions without mocking internals.", "acceptance_criteria": [], "labels": ["koru", "nl-task", "llm-ready", "project-discovery", "tests"], "blocked_by": [], "blocks": [], "children": [], "files": ["src/tagi/analyzer/dependency_graph.py"], "sync": {}, "history": [], "dsl": "SODL/1 id=evt_7078a45181f0dc0a74954bb8 event_hash=6bc21c34be2c3bd2a2b9b78df0201095dfdbbf142a1d02d1c0d9b28f28f88bba timestamp=2026-09-19T21%3A13%3A25.344158%2B00%3A00 kind=task source=planfile.ticket ticket_id=PLF-178 actor=koru-project-discovery oql=ticket.create uri=planfile%3A%2F%2Ftickets%2FPLF-178%2Fcommand%2Fcreate mode=apply status=open correlation_id=PLF-178 causation_id=- input_hash=ae3d0bc4ac06e679201e277c56e8950193680a23891a710c80eb024e664f08d2 receipt_ref=- replayable=true data=eyJwYXlsb2FkIjp7ImFjY2VwdGFuY2VfY3JpdGVyaWEiOltdLCJibG9ja2VkX2J5IjpbXSwiYmxvY2tzIjpbXSwiY2hpbGRyZW4iOltdLCJjb250cmFjdF92ZXJzaW9uIjoicGxhbmZpbGUudGlja2V0L3YxIiwiY3JlYXRlZF9hdCI6IjIwMjYtMDktMTlUMjE6MTM6MjUuMzQ0MTU4WiIsImRlc2NyaXB0aW9uIjoic3JjL3RhZ2kvYW5hbHl6ZXIvZGVwZW5kZW5jeV9ncmFwaC5weSBpcyB0aGUgbGFyZ2VzdCBtb2R1bGUgaW4gdGhlIGNvZGViYXNlICgyNzZMLCAxNiBmdW5jdGlvbnMsIENDPTcpIGFuZCBoYXMgbm8gZGVkaWNhdGVkIHRlc3QgY292ZXJhZ2UgKHZlcmlmaWVkIDIwMjYtMDktMTk6IG5vIHRlc3RzLyBmaWxlIGltcG9ydHMgaXQ7IG9ubHkgYSBwYXRoIGZpeHR1cmUgbWVudGlvbikuXG5cbkl0IGltcGxlbWVudHMgcHVyZSBncmFwaCBhbGdvcml0aG1zIHVzZWQgYnkgcGxhbm5pbmc6IGJ1aWxkX2RlcGVuZGVuY3lfZ3JhcGgsIGZpbmRfZGVwZW5kZW5jeV9vcmRlciwgZGV0ZWN0X2N5Y2xlcywgZ2V0X2NyaXRpY2FsX3BhdGgsIGxldmVscy5cblxuQWRkIHRlc3RzL3Rlc3RfZGVwZW5kZW5jeV9ncmFwaC5weSBjb3ZlcmluZzpcbi0gYnVpbGRfZGVwZW5kZW5jeV9ncmFwaCBmcm9tIHB5dGhvbiBpbXBvcnQgYW5hbHlzaXMgKGluY2wuIF9jb2xsZWN0X2ltcG9ydF9uYW1lcyBlZGdlIGNhc2VzKS5cbi0gZmluZF9kZXBlbmRlbmN5X29yZGVyOiBkZXRlcm1pbmlzdGljIG9yZGVyLCBkZXBlbmRlbmNpZXMgYmVmb3JlIGRlcGVuZGVudHMuXG4tIGRldGVjdF9jeWNsZXM6IGFjeWNsaWMgZ3JhcGggLT4gW10sIGN5Y2xpYyBncmFwaCAtPiByZXBvcnRlZCBjeWNsZSAoaW5jbC4gc2VsZi1sb29wKS5cbi0gZ2V0X2NyaXRpY2FsX3BhdGg6IGxvbmdlc3QgcGF0aCBpbiBhIGRpYW1vbmQgZ3JhcGguXG4tIGxldmVscy9fZHJhaW5fbGV2ZWwgcGFydGl0aW9uaW5nLlxuXG5BY2NlcHRhbmNlIGNyaXRlcmlhOlxuLSBweXRob24gLW0gcHl0ZXN0IC1xIGdyZWVuIHdpdGggdGhlIG5ldyB0ZXN0cyBpbmNsdWRlZC5cbi0gQ292ZXJhZ2Ugb2YgdGhlIG1vZHVsZSdzIHB1YmxpYyBmdW5jdGlvbnMgd2l0aG91dCBtb2NraW5nIGludGVybmFscy4iLCJmaWxlcyI6WyJzcmMvdGFnaS9hbmFseXplci9kZXBlbmRlbmN5X2dyYXBoLnB5Il0sImlkIjoiUExGLTE3OCIsImxhYmVscyI6WyJrb3J1IiwibmwtdGFzayIsImxsbS1yZWFkeSIsInByb2plY3QtZGlzY292ZXJ5IiwidGVzdHMiXSwibmFtZSI6IkFkZCB1bml0IHRlc3RzIGZvciBhbmFseXplci9kZXBlbmRlbmN5X2dyYXBoLnB5IiwicHJpb3JpdHkiOiJoaWdoIiwic291cmNlIjp7ImNvbnRleHQiOnt9LCJ0aW1lc3RhbXAiOiIyMDI2LTA5LTE5VDIxOjEzOjI1LjMzMTQ0N1oiLCJ0b29sIjoia29ydS1wcm9qZWN0LWRpc2NvdmVyeSJ9LCJzcHJpbnQiOiJjdXJyZW50Iiwic3RhdHVzIjoib3BlbiIsInN5bmMiOnt9LCJ1cGRhdGVkX2F0IjoiMjAyNi0wOS0xOVQyMToxMzoyNS4zNDQxNjVaIn19", "created_at": "2026-09-19T21:13:25.344158Z", "updated_at": "2026-09-19T21:13:25.344165Z"}, "PLF-179": {"id": "PLF-179", "name": "Add unit tests for providers/koru.py (KoruProvider)", "contract_version": "planfile.ticket/v1", "status": "open", "priority": "normal", "sprint": "current", "source": {"tool": "koru-project-discovery", "timestamp": "2026-09-19T21:13:31.387416Z", "context": {}}, "description": "src/tagi/providers/koru.py (171L, CC=8) implements KoruProvider, including analyze_deployment_priority flagged by code2llm as high fan-out (10, limit 10 — project/project.toon.yaml ALERTS). It has no test coverage (verified 2026-09-19); github/gitlab providers each have a dedicated test module, koru does not.\n\nAdd tests/test_koru_provider.py following the test_github_provider.py/test_gitlab_provider.py pattern, covering:\n- is_authenticated / get_auth_status for token-present and token-missing cases.\n- analyze_deployment_priority output shape for representative inputs.\n- create_pr / detect_remote behavior with a stubbed transport.\n- Error paths (missing config, failed command).\n\nAcceptance criteria:\n- python -m pytest -q green with the new tests included.\n- No network access in tests (stub/mocked transport only).", "acceptance_criteria": [], "labels": ["koru", "nl-task", "llm-ready", "project-discovery", "tests"], "blocked_by": [], "blocks": [], "children": [], "files": ["src/tagi/providers/koru.py"], "sync": {}, "history": [], "dsl": "SODL/1 id=evt_66de8743a3eefd20e509044a event_hash=35a4ce7177c8b0a23e2cfef6be335c571ee64328a9a7ce75f2879f68559faad0 timestamp=2026-09-19T21%3A13%3A31.396943%2B00%3A00 kind=task source=planfile.ticket ticket_id=PLF-179 actor=koru-project-discovery oql=ticket.create uri=planfile%3A%2F%2Ftickets%2FPLF-179%2Fcommand%2Fcreate mode=apply status=open correlation_id=PLF-179 causation_id=- input_hash=efe4ccacd819cd7b58a15895e0fd785559b241912e310199661481ecb3252de5 receipt_ref=- replayable=true data=eyJwYXlsb2FkIjp7ImFjY2VwdGFuY2VfY3JpdGVyaWEiOltdLCJibG9ja2VkX2J5IjpbXSwiYmxvY2tzIjpbXSwiY2hpbGRyZW4iOltdLCJjb250cmFjdF92ZXJzaW9uIjoicGxhbmZpbGUudGlja2V0L3YxIiwiY3JlYXRlZF9hdCI6IjIwMjYtMDktMTlUMjE6MTM6MzEuMzk2OTQzWiIsImRlc2NyaXB0aW9uIjoic3JjL3RhZ2kvcHJvdmlkZXJzL2tvcnUucHkgKDE3MUwsIENDPTgpIGltcGxlbWVudHMgS29ydVByb3ZpZGVyLCBpbmNsdWRpbmcgYW5hbHl6ZV9kZXBsb3ltZW50X3ByaW9yaXR5IGZsYWdnZWQgYnkgY29kZTJsbG0gYXMgaGlnaCBmYW4tb3V0ICgxMCwgbGltaXQgMTAg4oCUIHByb2plY3QvcHJvamVjdC50b29uLnlhbWwgQUxFUlRTKS4gSXQgaGFzIG5vIHRlc3QgY292ZXJhZ2UgKHZlcmlmaWVkIDIwMjYtMDktMTkpOyBnaXRodWIvZ2l0bGFiIHByb3ZpZGVycyBlYWNoIGhhdmUgYSBkZWRpY2F0ZWQgdGVzdCBtb2R1bGUsIGtvcnUgZG9lcyBub3QuXG5cbkFkZCB0ZXN0cy90ZXN0X2tvcnVfcHJvdmlkZXIucHkgZm9sbG93aW5nIHRoZSB0ZXN0X2dpdGh1Yl9wcm92aWRlci5weS90ZXN0X2dpdGxhYl9wcm92aWRlci5weSBwYXR0ZXJuLCBjb3ZlcmluZzpcbi0gaXNfYXV0aGVudGljYXRlZCAvIGdldF9hdXRoX3N0YXR1cyBmb3IgdG9rZW4tcHJlc2VudCBhbmQgdG9rZW4tbWlzc2luZyBjYXNlcy5cbi0gYW5hbHl6ZV9kZXBsb3ltZW50X3ByaW9yaXR5IG91dHB1dCBzaGFwZSBmb3IgcmVwcmVzZW50YXRpdmUgaW5wdXRzLlxuLSBjcmVhdGVfcHIgLyBkZXRlY3RfcmVtb3RlIGJlaGF2aW9yIHdpdGggYSBzdHViYmVkIHRyYW5zcG9ydC5cbi0gRXJyb3IgcGF0aHMgKG1pc3NpbmcgY29uZmlnLCBmYWlsZWQgY29tbWFuZCkuXG5cbkFjY2VwdGFuY2UgY3JpdGVyaWE6XG4tIHB5dGhvbiAtbSBweXRlc3QgLXEgZ3JlZW4gd2l0aCB0aGUgbmV3IHRlc3RzIGluY2x1ZGVkLlxuLSBObyBuZXR3b3JrIGFjY2VzcyBpbiB0ZXN0cyAoc3R1Yi9tb2NrZWQgdHJhbnNwb3J0IG9ubHkpLiIsImZpbGVzIjpbInNyYy90YWdpL3Byb3ZpZGVycy9rb3J1LnB5Il0sImlkIjoiUExGLTE3OSIsImxhYmVscyI6WyJrb3J1IiwibmwtdGFzayIsImxsbS1yZWFkeSIsInByb2plY3QtZGlzY292ZXJ5IiwidGVzdHMiXSwibmFtZSI6IkFkZCB1bml0IHRlc3RzIGZvciBwcm92aWRlcnMva29ydS5weSAoS29ydVByb3ZpZGVyKSIsInByaW9yaXR5Ijoibm9ybWFsIiwic291cmNlIjp7ImNvbnRleHQiOnt9LCJ0aW1lc3RhbXAiOiIyMDI2LTA5LTE5VDIxOjEzOjMxLjM4NzQxNloiLCJ0b29sIjoia29ydS1wcm9qZWN0LWRpc2NvdmVyeSJ9LCJzcHJpbnQiOiJjdXJyZW50Iiwic3RhdHVzIjoib3BlbiIsInN5bmMiOnt9LCJ1cGRhdGVkX2F0IjoiMjAyNi0wOS0xOVQyMToxMzozMS4zOTY5NTJaIn19", "created_at": "2026-09-19T21:13:31.396943Z", "updated_at": "2026-09-19T21:13:31.396952Z"}}}}}
\ No newline at end of file
diff --git a/project/README.md b/project/README.md
index b8c335a..2cf48ae 100644
--- a/project/README.md
+++ b/project/README.md
@@ -333,8 +333,8 @@ code2llm ./ -f yaml --separate-orphans
**Generated by**: `code2llm ./ -f all --readme`
**Analysis Date**: 2026-09-19
-**Total Functions**: 225
+**Total Functions**: 229
**Total Classes**: 27
-**Modules**: 75
+**Modules**: 77
For more information about code2llm, visit: https://github.com/tom-sapletta/code2llm
diff --git a/project/analysis.toon.yaml b/project/analysis.toon.yaml
index 24a9178..3d65975 100644
--- a/project/analysis.toon.yaml
+++ b/project/analysis.toon.yaml
@@ -1,6 +1,6 @@
-# code2llm | 75f 5609L | python:66,yaml:5,txt:2,toml:1,shell:1 | 2026-09-19
-# generated in 0.03s
-# CC̅=2.9 | critical:0/225 | dups:0 | cycles:2
+# code2llm | 77f 5590L | python:68,yaml:5,txt:2,toml:1,shell:1 | 2026-09-19
+# generated in 0.01s
+# CC̅=2.8 | critical:0/229 | dups:0 | cycles:2
HEALTH[0]: ok
@@ -14,13 +14,13 @@ PIPELINES[122]:
PURITY: 100% pure
[3] Src [_apply_sections]: _apply_sections
PURITY: 100% pure
- [4] Src [get_tag_for_path]: get_tag_for_path
+ [4] Src [get_tag_for_path]: get_tag_for_path → path_matches → path_key
PURITY: 100% pure
[5] Src [get_custom_tags_for_pattern]: get_custom_tags_for_pattern
PURITY: 100% pure
[6] Src [get_tag_color]: get_tag_color
PURITY: 100% pure
- [7] Src [get_heuristics_for_path]: get_heuristics_for_path
+ [7] Src [get_heuristics_for_path]: get_heuristics_for_path → path_matches → path_key
PURITY: 100% pure
[8] Src [get_tags_for_path]: get_tags_for_path
PURITY: 100% pure
@@ -70,9 +70,9 @@ PIPELINES[122]:
PURITY: 100% pure
[31] Src [preview_changes]: preview_changes
PURITY: 100% pure
- [32] Src [group_by_branch]: group_by_branch
+ [32] Src [group_by_branch]: group_by_branch → run_command
PURITY: 100% pure
- [33] Src [get_branch_info]: get_branch_info
+ [33] Src [get_branch_info]: get_branch_info → run_command
PURITY: 100% pure
[34] Src [select_by_tags]: select_by_tags
PURITY: 100% pure
@@ -84,11 +84,11 @@ PIPELINES[122]:
PURITY: 100% pure
[38] Src [filter_command]: filter_command → resolve_filtered_changes → _resolve_tag_enums → _normalize_tag
PURITY: 100% pure
- [39] Src [file_command]: file_command → get_diff
+ [39] Src [file_command]: file_command → get_diff → run_command
PURITY: 100% pure
- [40] Src [create_pr]: create_pr → get_provider → detect_git_provider
+ [40] Src [create_pr]: create_pr → get_provider → detect_git_provider → run_command
PURITY: 100% pure
- [41] Src [create_mr]: create_mr → get_provider → detect_git_provider
+ [41] Src [create_mr]: create_mr → get_provider → detect_git_provider → run_command
PURITY: 100% pure
[42] Src [scan_command]: scan_command → scan_and_tag
PURITY: 100% pure
@@ -102,7 +102,7 @@ PIPELINES[122]:
PURITY: 100% pure
[47] Src [_resolve_send_target]: _resolve_send_target → _is_known_tag → _ensure_tag_prefix
PURITY: 100% pure
- [48] Src [detect_provider]: detect_provider → detect_provider_command → get_provider → detect_git_provider
+ [48] Src [detect_provider]: detect_provider → detect_provider_command → get_provider → detect_git_provider → ...(1 more)
PURITY: 100% pure
[49] Src [publish_command]: publish_command → scan_and_tag
PURITY: 100% pure
@@ -110,9 +110,9 @@ PIPELINES[122]:
PURITY: 100% pure
LAYERS:
- src/ CC̄=2.9 ←in:0 →out:0
+ src/ CC̄=2.8 ←in:0 →out:0
│ dependency_graph 276L 1C 16m CC=7 ←0
- │ metrics 228L 0C 11m CC=5 ←1
+ │ metrics 223L 0C 11m CC=5 ←1
│ design_tokens 221L 7C 3m CC=2 ←0
│ utility_commands 211L 0C 5m CC=10 ←0
│ koru 171L 2C 10m CC=8 ←0
@@ -121,30 +121,30 @@ LAYERS:
│ formats 141L 0C 9m CC=5 ←0
│ publishing_commands 139L 0C 3m CC=11 ←0
│ hooks 127L 0C 7m CC=5 ←1
- │ config 126L 1C 12m CC=4 ←5
│ inspection_commands 120L 0C 3m CC=7 ←0
│ change_filter 120L 0C 9m CC=5 ←5
+ │ config 118L 1C 12m CC=4 ←5
│ main 113L 0C 6m CC=5 ←1
│ summary_helpers 113L 0C 5m CC=5 ←0
│ sorter 104L 0C 3m CC=5 ←1
│ core_commands 94L 0C 5m CC=7 ←0
- │ tags 89L 0C 5m CC=4 ←0
- │ branch_grouper 88L 0C 2m CC=8 ←0
- │ provider_commands 79L 0C 5m CC=4 ←1
+ │ tags 88L 0C 5m CC=4 ←0
+ │ branch_grouper 81L 0C 2m CC=8 ←0
│ display_utils 79L 0C 4m CC=5 ←3
+ │ provider_commands 78L 0C 5m CC=4 ←1
│ grouper 74L 0C 4m CC=5 ←0
- │ git 72L 1C 9m CC=4 ←0
│ logger 71L 0C 2m CC=4 ←2
- │ base 70L 2C 8m CC=2 ←0
- │ status 66L 0C 2m CC=7 ←0
+ │ git 67L 1C 9m CC=4 ←0
+ │ base 66L 2C 8m CC=2 ←0
│ commit_message 64L 0C 2m CC=5 ←1
│ change 60L 4C 1m CC=1 ←0
+ │ status 60L 0C 2m CC=7 ←0
│ llx_adapter 55L 1C 4m CC=4 ←0
- │ detect_provider 54L 0C 2m CC=4 ←4
│ _tags 52L 0C 4m CC=7 ←2
- │ gitlab 47L 1C 5m CC=4 ←0
+ │ detect_provider 52L 0C 2m CC=5 ←4
│ __init__ 47L 0C 0m CC=0.0 ←0
│ pr 46L 0C 2m CC=5 ←2
+ │ gitlab 45L 1C 5m CC=4 ←0
│ selector 44L 0C 5m CC=8 ←1
│ preview 43L 0C 2m CC=7 ←0
│ change_stats 42L 0C 2m CC=1 ←3
@@ -152,23 +152,25 @@ LAYERS:
│ publish_helpers 40L 0C 2m CC=1 ←1
│ summary 39L 0C 2m CC=8 ←0
│ publish 39L 1C 4m CC=3 ←0
- │ github 38L 1C 5m CC=2 ←0
+ │ github 36L 1C 5m CC=2 ←0
│ send_helpers 34L 0C 1m CC=2 ←2
│ risk 33L 0C 2m CC=3 ←7
│ auth 32L 0C 2m CC=2 ←2
│ __init__ 32L 0C 0m CC=0.0 ←0
- │ files 29L 0C 1m CC=7 ←1
- │ diff 29L 0C 2m CC=1 ←1
│ scan_utils 25L 0C 1m CC=3 ←5
+ │ files 25L 0C 1m CC=7 ←1
│ inspect_helpers 25L 0C 0m CC=0.0 ←0
+ │ paths 24L 0C 3m CC=1 ←3
│ line_builder 23L 1C 4m CC=1 ←0
│ plan 23L 2C 0m CC=0.0 ←0
│ _templates 21L 0C 1m CC=2 ←1
│ rules 20L 0C 3m CC=1 ←0
+ │ commands 20L 0C 1m CC=1 ←8
│ __init__ 18L 0C 0m CC=0.0 ←0
│ group 16L 1C 0m CC=0.0 ←0
│ detector 15L 0C 1m CC=3 ←0
│ __init__ 14L 0C 0m CC=0.0 ←0
+ │ diff 13L 0C 2m CC=1 ←1
│ __init__ 13L 0C 0m CC=0.0 ←0
│ __init__ 13L 0C 0m CC=0.0 ←0
│ __init__ 12L 0C 0m CC=0.0 ←0
@@ -192,7 +194,20 @@ LAYERS:
│ generated-cli-tests.testql.toon.yaml 20L 0C 0m CC=0.0 ←0
│
-COUPLING: no cross-package imports detected
+COUPLING:
+ src.tagi tagi.utils tagi.scanner tagi.providers tagi.cli tagi.planner tagi.executor
+ src.tagi ── 3 4 ←8 1 hub
+ tagi.utils ←3 ── ←4 ←1 ←4 ←2 ←1 hub
+ tagi.scanner 2 4 ──
+ tagi.providers 8 1 ── !! fan-out
+ tagi.cli ←1 4 ──
+ tagi.planner 2 ──
+ tagi.executor 1 ──
+ CYCLES: 2
+ HUB: tagi.utils/ (fan-in=15)
+ HUB: src.tagi/ (fan-in=10)
+ SMELL: src.tagi/ fan-out=8 → split needed
+ SMELL: tagi.providers/ fan-out=9 → split needed
EXTERNAL:
validation: run `vallm batch .` → validation.toon
diff --git a/project/calls.mmd b/project/calls.mmd
index 6616f89..7020803 100644
--- a/project/calls.mmd
+++ b/project/calls.mmd
@@ -1,143 +1,169 @@
flowchart LR
-%% generated in 0.00s
+%% generated in 0.01s
subgraph src__tagi
- src__tagi__analyzer__dependency_graph__detect_cycles["detect_cycles"]
- src__tagi__cli__main___is_known_tag["_is_known_tag"]
- src__tagi__providers__gitlab__GitLabProvider__get_auth_status["get_auth_status"]
- src__tagi__composer__formats__generate_simple_message["generate_simple_message"]
+ src__tagi__analyzer__dependency_graph___mark["_mark"]
+ src__tagi__providers__utils__auth__get_auth_status_from_result["get_auth_status_from_result"]
+ src__tagi__utils__summary_helpers__build_statistics_section["build_statistics_section"]
+ src__tagi__cli__utility_commands__hooks_command["hooks_command"]
+ src__tagi__cli__git_operations__send_command["send_command"]
+ src__tagi__analyzer__metrics__MetricsCollector__collect["collect"]
+ src__tagi__composer__formats___detailed_file_lines["_detailed_file_lines"]
+ src__tagi__config__Config__get_heuristics_for_path["get_heuristics_for_path"]
+ src__tagi__heuristics__tags___size_tags["_size_tags"]
+ src__tagi__utils__change_filter___normalize_tag["_normalize_tag"]
+ src__tagi__utils__change_filter__filter_changes_by_tag["filter_changes_by_tag"]
+ src__tagi__composer__formats__generate_conventional_message["generate_conventional_message"]
+ src__tagi__cli__publishing_commands__publish_command["publish_command"]
+ src__tagi__composer__commit_message___improve_with_llm["_improve_with_llm"]
+ src__tagi__composer___tags__infer_scope["infer_scope"]
+ src__tagi__utils__send_helpers__create_change_group["create_change_group"]
+ src__tagi__analyzer__dependency_graph___cycle_from["_cycle_from"]
+ src__tagi__hooks___pre_commit_hook["_pre_commit_hook"]
+ src__tagi__analyzer__dependency_graph___next_critical_node["_next_critical_node"]
+ src__tagi__cli__utility_commands___ensure_tag_prefix["_ensure_tag_prefix"]
+ src__tagi__cli__inspection_commands__inspect_command["inspect_command"]
+ src__tagi__cli__utility_commands__summary_command["summary_command"]
+ src__tagi__config__load_config["load_config"]
+ src__tagi__heuristics__rules__get_custom_rules["get_custom_rules"]
+ src__tagi__cli__publishing_commands__deploy_command["deploy_command"]
+ src__tagi__composer___templates__render_template["render_template"]
+ src__tagi__utils__publish_helpers__create_publish_group["create_publish_group"]
+ src__tagi__utils__paths__path_key["path_key"]
+ src__tagi__composer___tags__all_tags["all_tags"]
+ src__tagi__hooks__install_hooks["install_hooks"]
src__tagi__cli__inspection_commands__filter_command["filter_command"]
- src__tagi__cli__provider_commands___pr_spec["_pr_spec"]
+ src__tagi__hooks__check_hooks_installed["check_hooks_installed"]
src__tagi__heuristics__metrics___calculate_complexity["_calculate_complexity"]
- src__tagi__hooks__install_hooks["install_hooks"]
- src__tagi__cli__core_commands__list_groups_command["list_groups_command"]
+ src__tagi__cli__git_operations___resolve_send_target["_resolve_send_target"]
+ src__tagi__cli__display_utils___display_changes_grouped["_display_changes_grouped"]
+ src__tagi__cli__core_commands__scan_command["scan_command"]
+ src__tagi__composer__formats__generate_simple_message["generate_simple_message"]
+ src__tagi__heuristics__scoring___change_type_risk_weight["_change_type_risk_weight"]
+ src__tagi__cli__display_utils___format_tags["_format_tags"]
+ src__tagi__config__Config__get_tag_for_path["get_tag_for_path"]
+ src__tagi__heuristics__metrics___calculate_test_impact["_calculate_test_impact"]
+ src__tagi__heuristics__metrics___extension_complexity_weight["_extension_complexity_weight"]
+ src__tagi__utils__change_filter___changes_matching_any["_changes_matching_any"]
+ src__tagi__analyzer__dependency_graph__analyze_python_imports["analyze_python_imports"]
+ src__tagi__cli__main__detect_provider["detect_provider"]
+ src__tagi__planner__grouper__group_by_tag["group_by_tag"]
+ src__tagi__cli__git_operations___execute_git_operations["_execute_git_operations"]
+ src__tagi__cli__core_commands__list_command["list_command"]
+ src__tagi__composer__formats___describe_changes["_describe_changes"]
+ src__tagi__planner__selector__select_changes_by_tag["select_changes_by_tag"]
+ src__tagi__utils__change_filter__filter_changes_by_tags_all["filter_changes_by_tags_all"]
+ src__tagi__utils__change_filter__resolve_filtered_changes["resolve_filtered_changes"]
+ src__tagi__utils__risk__average_risk["average_risk"]
+ src__tagi__composer___tags__summary_tag["summary_tag"]
+ src__tagi__cli__core_commands___do_list_groups["_do_list_groups"]
+ src__tagi__analyzer__dependency_graph__get_critical_path["get_critical_path"]
+ src__tagi__planner__grouper___get_primary_tag["_get_primary_tag"]
+ src__tagi__hooks__uninstall_hooks["uninstall_hooks"]
+ src__tagi__planner__sorter__group_by_complexity["group_by_complexity"]
src__tagi__cli__git_operations___ensure_tag_prefix["_ensure_tag_prefix"]
- src__tagi__cli__git_operations___is_known_tag["_is_known_tag"]
- src__tagi__heuristics__tags___custom_config_tags["_custom_config_tags"]
src__tagi__heuristics__rules__get_custom_heuristics["get_custom_heuristics"]
- src__tagi__analyzer__dependency_graph___dfs_visit["_dfs_visit"]
- src__tagi__utils__send_helpers__create_change_group["create_change_group"]
- src__tagi__providers__utils__pr__build_pr_command["build_pr_command"]
- src__tagi__cli__provider_commands__create_mr["create_mr"]
- src__tagi__utils__change_filter___resolve_tag_enums["_resolve_tag_enums"]
+ src__tagi__analyzer__dependency_graph___longest_path_length["_longest_path_length"]
+ src__tagi__utils__paths__path_endswith["path_endswith"]
src__tagi__heuristics__tags___tag_change["_tag_change"]
- src__tagi__cli__provider_commands___current_branch["_current_branch"]
- src__tagi__utils__change_filter___changes_matching_tag["_changes_matching_tag"]
- src__tagi__providers__utils__pr__execute_pr_command["execute_pr_command"]
- src__tagi__scanner__diff__get_diff["get_diff"]
- src__tagi__cli__inspection_commands__file_command["file_command"]
- src__tagi__cli__main__setup_logging["setup_logging"]
- src__tagi__config__load_config["load_config"]
- src__tagi__heuristics__scoring___tag_risk_weight["_tag_risk_weight"]
- src__tagi__cli__git_operations___execute_git_operations["_execute_git_operations"]
- src__tagi__composer___tags__all_tag_values["all_tag_values"]
+ src__tagi__cli__main___configure_command_logging["_configure_command_logging"]
+ src__tagi__planner__grouper__group_changes["group_changes"]
+ src__tagi__composer__formats___commit_type["_commit_type"]
+ src__tagi__utils__change_filter___resolve_tag_enums["_resolve_tag_enums"]
+ src__tagi__heuristics__scoring___lines_risk_weight["_lines_risk_weight"]
src__tagi__heuristics__tags__apply_path_tags["apply_path_tags"]
- src__tagi__analyzer__dependency_graph__build_dependency_graph["build_dependency_graph"]
- src__tagi__utils__publish_helpers__create_publish_group["create_publish_group"]
- src__tagi__providers__github__GitHubProvider__is_authenticated["is_authenticated"]
- src__tagi__composer__formats__generate_conventional_message["generate_conventional_message"]
- src__tagi__analyzer__dependency_graph___collect_import_names["_collect_import_names"]
- src__tagi__analyzer__dependency_graph__get_critical_path["get_critical_path"]
- src__tagi__composer___templates__render_template["render_template"]
- src__tagi__utils__change_filter___changes_matching_all["_changes_matching_all"]
- src__tagi__cli__main___resolve_send_target["_resolve_send_target"]
- src__tagi__cli__utility_commands___ensure_tag_prefix["_ensure_tag_prefix"]
- src__tagi__planner__grouper___get_primary_tag["_get_primary_tag"]
- src__tagi__cli__display_utils___display_changes_grouped["_display_changes_grouped"]
- src__tagi__cli__utility_commands__hooks_command["hooks_command"]
- src__tagi__cli__inspection_commands__inspect_command["inspect_command"]
- src__tagi__utils__change_filter__resolve_filtered_changes["resolve_filtered_changes"]
- src__tagi__scanner__status__scan_repo["scan_repo"]
+ src__tagi__utils__publish_helpers__detect_and_get_provider["detect_and_get_provider"]
+ src__tagi__heuristics__metrics___extension_impact_weight["_extension_impact_weight"]
+ src__tagi__cli__display_utils___display_groups["_display_groups"]
+ src__tagi__composer__summary__generate_summary["generate_summary"]
+ src__tagi__utils__change_filter___changes_matching_tag["_changes_matching_tag"]
src__tagi__heuristics__scoring__calculate_risk_score["calculate_risk_score"]
- src__tagi__cli__provider_commands__detect_provider_command["detect_provider_command"]
- src__tagi__cli__scan_utils__scan_and_tag["scan_and_tag"]
- src__tagi__cli__core_commands___do_list_groups["_do_list_groups"]
- src__tagi__cli__publishing_commands___ensure_tag_prefix["_ensure_tag_prefix"]
+ src__tagi__utils__paths__path_matches["path_matches"]
src__tagi__analyzer__dependency_graph___find_longest_start["_find_longest_start"]
- src__tagi__hooks___pre_commit_hook["_pre_commit_hook"]
- src__tagi__cli__display_utils___display_groups["_display_groups"]
- src__tagi__composer__formats___commit_type["_commit_type"]
+ src__tagi__utils__change_filter___changes_matching_all["_changes_matching_all"]
+ src__tagi__composer__formats___count_tags["_count_tags"]
+ src__tagi__cli__inspection_commands__file_command["file_command"]
+ src__tagi__cli__main___is_known_tag["_is_known_tag"]
+ src__tagi__utils__change_filter__filter_changes_by_tags_any["filter_changes_by_tags_any"]
+ src__tagi__cli__main___ensure_tag_prefix["_ensure_tag_prefix"]
+ src__tagi__cli__git_operations__auto_command["auto_command"]
+ src__tagi__utils__change_stats__calculate_tag_statistics["calculate_tag_statistics"]
src__tagi__heuristics__metrics___calculate_dependency_depth["_calculate_dependency_depth"]
- src__tagi__composer__summary__generate_summary["generate_summary"]
- src__tagi__config__Config__should_ignore["should_ignore"]
+ src__tagi__utils__change_stats__display_statistics_table["display_statistics_table"]
+ src__tagi__composer__commit_message__generate_commit_message["generate_commit_message"]
+ src__tagi__providers__utils__pr__build_pr_command["build_pr_command"]
+ src__tagi__utils__risk__total_lines_changed["total_lines_changed"]
+ src__tagi__heuristics__scoring___tag_risk_weight["_tag_risk_weight"]
+ src__tagi__analyzer__dependency_graph___collect_import_names["_collect_import_names"]
+ src__tagi__heuristics__tags__apply_tags["apply_tags"]
+ src__tagi__composer__formats__generate_detailed_message["generate_detailed_message"]
+ src__tagi__cli__core_commands__stats_command["stats_command"]
+ src__tagi__analyzer__dependency_graph__detect_cycles["detect_cycles"]
+ src__tagi__cli__display_utils___display_changes["_display_changes"]
+ src__tagi__cli__git_operations___is_known_tag["_is_known_tag"]
src__tagi__heuristics__metrics___calculate_impact["_calculate_impact"]
- src__tagi__providers__gitlab__GitLabProvider__create_pr["create_pr"]
- src__tagi__heuristics__metrics___extension_complexity_weight["_extension_complexity_weight"]
- src__tagi__hooks__uninstall_hooks["uninstall_hooks"]
- src__tagi__utils__change_filter___changes_matching_any["_changes_matching_any"]
- src__tagi__composer__commit_message___improve_with_llm["_improve_with_llm"]
+ src__tagi__hooks__run_hook["run_hook"]
+ src__tagi__providers__utils__auth__is_authenticated_from_result["is_authenticated_from_result"]
+ src__tagi__composer__formats__generate_oneline_message["generate_oneline_message"]
+ src__tagi__heuristics__tags___custom_config_tags["_custom_config_tags"]
+ src__tagi__composer___tags__all_tag_values["all_tag_values"]
+ src__tagi__providers__utils__pr__execute_pr_command["execute_pr_command"]
+ src__tagi__cli__main__setup_logging["setup_logging"]
src__tagi__hooks__list_hooks["list_hooks"]
- src__tagi__analyzer__dependency_graph__analyze_python_imports["analyze_python_imports"]
+ src__tagi__config__Config__should_ignore["should_ignore"]
+ src__tagi__cli__main___resolve_send_target["_resolve_send_target"]
src__tagi__utils__logger__setup_logger["setup_logger"]
- src__tagi__cli__publishing_commands__publish_command["publish_command"]
- src__tagi__analyzer__dependency_graph___mark["_mark"]
- src__tagi__analyzer__dependency_graph___reconstruct_critical_path["_reconstruct_critical_path"]
- src__tagi__utils__change_filter__filter_changes_by_tags_any["filter_changes_by_tags_any"]
- src__tagi__hooks___hooks_dir["_hooks_dir"]
- src__tagi__cli__utility_commands__summary_command["summary_command"]
- src__tagi__composer__formats__generate_detailed_message["generate_detailed_message"]
- src__tagi__heuristics__metrics___extension_impact_weight["_extension_impact_weight"]
- src__tagi__composer__formats__generate_oneline_message["generate_oneline_message"]
- src__tagi__cli__main__detect_provider["detect_provider"]
- src__tagi__composer__formats___count_tags["_count_tags"]
- src__tagi__hooks__check_hooks_installed["check_hooks_installed"]
- src__tagi__heuristics__tags___size_tags["_size_tags"]
+ src__tagi__cli__scan_utils__scan_and_tag["scan_and_tag"]
src__tagi__heuristics__rules___get_config_attr["_get_config_attr"]
- src__tagi__analyzer__dependency_graph___longest_path_length["_longest_path_length"]
- src__tagi__cli__main___configure_command_logging["_configure_command_logging"]
+ src__tagi__heuristics__metrics___calculate_stability["_calculate_stability"]
src__tagi__cli__utility_commands__draft_command["draft_command"]
- src__tagi__composer___tags__summary_tag["summary_tag"]
- src__tagi__utils__risk__average_risk["average_risk"]
- src__tagi__composer__formats___describe_changes["_describe_changes"]
- src__tagi__providers__utils__auth__is_authenticated_from_result["is_authenticated_from_result"]
- src__tagi__cli__git_operations__send_command["send_command"]
- src__tagi__hooks__run_hook["run_hook"]
- src__tagi__planner__selector__select_changes_by_tag["select_changes_by_tag"]
src__tagi__heuristics__metrics__calculate_metrics["calculate_metrics"]
- src__tagi__scanner__status__parse_status["parse_status"]
- src__tagi__heuristics__metrics___calculate_stability["_calculate_stability"]
- src__tagi__cli__display_utils___format_tags["_format_tags"]
- src__tagi__cli__git_operations___resolve_send_target["_resolve_send_target"]
- src__tagi__planner__grouper__group_changes["group_changes"]
- src__tagi__heuristics__metrics___calculate_test_impact["_calculate_test_impact"]
- src__tagi__utils__detect_provider__get_provider["get_provider"]
- src__tagi__heuristics__tags__apply_tags["apply_tags"]
- src__tagi__providers__utils__auth__get_auth_status_from_result["get_auth_status_from_result"]
- src__tagi__utils__change_filter__filter_changes_by_tag["filter_changes_by_tag"]
- src__tagi__providers__github__GitHubProvider__get_auth_status["get_auth_status"]
- src__tagi__scanner__files__count_lines_changed["count_lines_changed"]
- src__tagi__composer__formats___detailed_file_lines["_detailed_file_lines"]
- src__tagi__cli__display_utils___display_changes["_display_changes"]
- src__tagi__planner__grouper__group_by_tag["group_by_tag"]
- src__tagi__analyzer__metrics__MetricsCollector__collect["collect"]
- src__tagi__utils__risk__total_lines_changed["total_lines_changed"]
- src__tagi__cli__core_commands__list_command["list_command"]
- src__tagi__providers__gitlab__GitLabProvider__is_authenticated["is_authenticated"]
- src__tagi__planner__sorter__sort_by_complexity["sort_by_complexity"]
- src__tagi__cli__provider_commands__create_pr["create_pr"]
- src__tagi__analyzer__dependency_graph___cycle_from["_cycle_from"]
- src__tagi__utils__change_stats__calculate_tag_statistics["calculate_tag_statistics"]
- src__tagi__utils__publish_helpers__detect_and_get_provider["detect_and_get_provider"]
- src__tagi__cli__core_commands__stats_command["stats_command"]
- src__tagi__composer__commit_message__generate_commit_message["generate_commit_message"]
- src__tagi__cli__publishing_commands__deploy_command["deploy_command"]
- src__tagi__utils__summary_helpers__build_statistics_section["build_statistics_section"]
- src__tagi__cli__main___ensure_tag_prefix["_ensure_tag_prefix"]
- src__tagi__utils__change_filter__filter_changes_by_tags_all["filter_changes_by_tags_all"]
- src__tagi__cli__core_commands__scan_command["scan_command"]
- src__tagi__composer___tags__all_tags["all_tags"]
- src__tagi__heuristics__scoring___lines_risk_weight["_lines_risk_weight"]
- src__tagi__cli__git_operations__auto_command["auto_command"]
+ src__tagi__cli__core_commands__list_groups_command["list_groups_command"]
+ src__tagi__cli__publishing_commands___ensure_tag_prefix["_ensure_tag_prefix"]
+ src__tagi__analyzer__dependency_graph___dfs_visit["_dfs_visit"]
+ src__tagi__analyzer__dependency_graph___reconstruct_critical_path["_reconstruct_critical_path"]
src__tagi__cli__git_operations___filter_by_tag["_filter_by_tag"]
- src__tagi__utils__change_filter___normalize_tag["_normalize_tag"]
- src__tagi__utils__detect_provider__detect_git_provider["detect_git_provider"]
- src__tagi__heuristics__rules__get_custom_rules["get_custom_rules"]
- src__tagi__analyzer__dependency_graph___next_critical_node["_next_critical_node"]
- src__tagi__composer___tags__infer_scope["infer_scope"]
- src__tagi__planner__sorter__group_by_complexity["group_by_complexity"]
- src__tagi__utils__change_stats__display_statistics_table["display_statistics_table"]
- src__tagi__providers__github__GitHubProvider__create_pr["create_pr"]
- src__tagi__heuristics__scoring___change_type_risk_weight["_change_type_risk_weight"]
+ src__tagi__hooks___hooks_dir["_hooks_dir"]
+ src__tagi__analyzer__dependency_graph__build_dependency_graph["build_dependency_graph"]
+ src__tagi__planner__sorter__sort_by_complexity["sort_by_complexity"]
+ end
+ subgraph tagi__cli
+ tagi__cli__provider_commands__detect_provider_command["detect_provider_command"]
+ tagi__cli__provider_commands__create_pr["create_pr"]
+ tagi__cli__provider_commands__create_mr["create_mr"]
+ tagi__cli__provider_commands___current_branch["_current_branch"]
+ tagi__cli__provider_commands___pr_spec["_pr_spec"]
+ end
+ subgraph tagi__executor
+ tagi__executor__git__GitExecutor___run_command["_run_command"]
+ end
+ subgraph tagi__planner
+ tagi__planner__branch_grouper__group_by_branch["group_by_branch"]
+ tagi__planner__branch_grouper__get_branch_info["get_branch_info"]
+ end
+ subgraph tagi__providers
+ tagi__providers__gitlab__GitLabProvider__is_authenticated["is_authenticated"]
+ tagi__providers__github__GitHubProvider__is_authenticated["is_authenticated"]
+ tagi__providers__github__GitHubProvider__get_auth_status["get_auth_status"]
+ tagi__providers__base__BaseProvider___run_command["_run_command"]
+ tagi__providers__github__GitHubProvider__create_pr["create_pr"]
+ tagi__providers__gitlab__GitLabProvider__get_auth_status["get_auth_status"]
+ tagi__providers__gitlab__GitLabProvider__create_pr["create_pr"]
+ end
+ subgraph tagi__scanner
+ tagi__scanner__status__scan_repo["scan_repo"]
+ tagi__scanner__files__count_lines_changed["count_lines_changed"]
+ tagi__scanner__diff__get_staged_diff["get_staged_diff"]
+ tagi__scanner__diff__get_diff["get_diff"]
+ tagi__scanner__status__parse_status["parse_status"]
+ end
+ subgraph tagi__utils
+ tagi__utils__detect_provider__get_provider["get_provider"]
+ tagi__utils__detect_provider__detect_git_provider["detect_git_provider"]
+ tagi__utils__commands__run_command["run_command"]
end
+ src__tagi__config__Config__get_tag_for_path --> src__tagi__utils__paths__path_matches
+ src__tagi__config__Config__get_heuristics_for_path --> src__tagi__utils__paths__path_matches
+ src__tagi__config__Config__should_ignore --> src__tagi__utils__paths__path_matches
src__tagi__hooks___pre_commit_hook --> src__tagi__hooks___hooks_dir
src__tagi__hooks__install_hooks --> src__tagi__hooks___pre_commit_hook
src__tagi__hooks__install_hooks --> src__tagi__hooks___hooks_dir
@@ -161,11 +187,13 @@ flowchart LR
src__tagi__planner__grouper__group_changes --> src__tagi__utils__risk__total_lines_changed
src__tagi__planner__grouper__group_changes --> src__tagi__utils__risk__average_risk
src__tagi__planner__grouper__group_by_tag --> src__tagi__planner__selector__select_changes_by_tag
+ tagi__planner__branch_grouper__group_by_branch --> tagi__utils__commands__run_command
+ tagi__planner__branch_grouper__get_branch_info --> tagi__utils__commands__run_command
src__tagi__cli__git_operations___is_known_tag --> src__tagi__cli__git_operations___ensure_tag_prefix
src__tagi__cli__git_operations___resolve_send_target --> src__tagi__cli__git_operations___is_known_tag
src__tagi__cli__git_operations___filter_by_tag --> src__tagi__utils__change_filter__resolve_filtered_changes
src__tagi__cli__git_operations___filter_by_tag --> src__tagi__cli__git_operations___ensure_tag_prefix
- src__tagi__cli__git_operations___execute_git_operations --> src__tagi__utils__detect_provider__get_provider
+ src__tagi__cli__git_operations___execute_git_operations --> tagi__utils__detect_provider__get_provider
src__tagi__cli__git_operations__send_command --> src__tagi__cli__git_operations___resolve_send_target
src__tagi__cli__git_operations__auto_command --> src__tagi__cli__main___configure_command_logging
src__tagi__cli__git_operations__auto_command --> src__tagi__cli__git_operations__send_command
@@ -177,13 +205,14 @@ flowchart LR
src__tagi__cli__inspection_commands__filter_command --> src__tagi__utils__change_stats__display_statistics_table
src__tagi__cli__inspection_commands__filter_command --> src__tagi__cli__display_utils___display_changes
src__tagi__cli__inspection_commands__filter_command --> src__tagi__cli__scan_utils__scan_and_tag
- src__tagi__cli__inspection_commands__file_command --> src__tagi__scanner__diff__get_diff
- src__tagi__cli__provider_commands__detect_provider_command --> src__tagi__utils__detect_provider__get_provider
- src__tagi__cli__provider_commands___pr_spec --> src__tagi__cli__provider_commands___current_branch
- src__tagi__cli__provider_commands__create_pr --> src__tagi__utils__detect_provider__get_provider
- src__tagi__cli__provider_commands__create_pr --> src__tagi__cli__provider_commands___pr_spec
- src__tagi__cli__provider_commands__create_mr --> src__tagi__utils__detect_provider__get_provider
- src__tagi__cli__provider_commands__create_mr --> src__tagi__cli__provider_commands___pr_spec
+ src__tagi__cli__inspection_commands__file_command --> tagi__scanner__diff__get_diff
+ tagi__cli__provider_commands__detect_provider_command --> tagi__utils__detect_provider__get_provider
+ tagi__cli__provider_commands___current_branch --> tagi__utils__commands__run_command
+ tagi__cli__provider_commands___pr_spec --> tagi__cli__provider_commands___current_branch
+ tagi__cli__provider_commands__create_pr --> tagi__utils__detect_provider__get_provider
+ tagi__cli__provider_commands__create_pr --> tagi__cli__provider_commands___pr_spec
+ tagi__cli__provider_commands__create_mr --> tagi__utils__detect_provider__get_provider
+ tagi__cli__provider_commands__create_mr --> tagi__cli__provider_commands___pr_spec
src__tagi__cli__core_commands__scan_command --> src__tagi__cli__scan_utils__scan_and_tag
src__tagi__cli__core_commands__scan_command --> src__tagi__cli__display_utils___display_changes_grouped
src__tagi__cli__core_commands__scan_command --> src__tagi__cli__display_utils___display_changes
@@ -202,7 +231,7 @@ flowchart LR
src__tagi__cli__main___configure_command_logging --> src__tagi__utils__logger__setup_logger
src__tagi__cli__main___is_known_tag --> src__tagi__cli__main___ensure_tag_prefix
src__tagi__cli__main___resolve_send_target --> src__tagi__cli__main___is_known_tag
- src__tagi__cli__main__detect_provider --> src__tagi__cli__provider_commands__detect_provider_command
+ src__tagi__cli__main__detect_provider --> tagi__cli__provider_commands__detect_provider_command
src__tagi__cli__publishing_commands__publish_command --> src__tagi__cli__scan_utils__scan_and_tag
src__tagi__cli__publishing_commands__publish_command --> src__tagi__cli__publishing_commands___ensure_tag_prefix
src__tagi__cli__publishing_commands__publish_command --> src__tagi__utils__publish_helpers__create_publish_group
@@ -215,20 +244,27 @@ flowchart LR
src__tagi__cli__utility_commands__draft_command --> src__tagi__cli__utility_commands___ensure_tag_prefix
src__tagi__cli__utility_commands__draft_command --> src__tagi__utils__send_helpers__create_change_group
src__tagi__cli__utility_commands__draft_command --> src__tagi__composer__commit_message__generate_commit_message
- src__tagi__providers__gitlab__GitLabProvider__is_authenticated --> src__tagi__providers__utils__auth__is_authenticated_from_result
- src__tagi__providers__gitlab__GitLabProvider__get_auth_status --> src__tagi__providers__utils__auth__get_auth_status_from_result
- src__tagi__providers__gitlab__GitLabProvider__create_pr --> src__tagi__providers__utils__pr__execute_pr_command
- src__tagi__providers__gitlab__GitLabProvider__create_pr --> src__tagi__providers__utils__pr__build_pr_command
- src__tagi__providers__github__GitHubProvider__is_authenticated --> src__tagi__providers__utils__auth__is_authenticated_from_result
- src__tagi__providers__github__GitHubProvider__get_auth_status --> src__tagi__providers__utils__auth__get_auth_status_from_result
- src__tagi__providers__github__GitHubProvider__create_pr --> src__tagi__providers__utils__pr__execute_pr_command
- src__tagi__providers__github__GitHubProvider__create_pr --> src__tagi__providers__utils__pr__build_pr_command
- src__tagi__scanner__status__scan_repo --> src__tagi__config__load_config
- src__tagi__scanner__status__scan_repo --> src__tagi__config__Config__should_ignore
- src__tagi__scanner__status__scan_repo --> src__tagi__scanner__status__parse_status
+ tagi__providers__base__BaseProvider___run_command --> tagi__utils__commands__run_command
+ tagi__providers__gitlab__GitLabProvider__is_authenticated --> src__tagi__providers__utils__auth__is_authenticated_from_result
+ tagi__providers__gitlab__GitLabProvider__get_auth_status --> src__tagi__providers__utils__auth__get_auth_status_from_result
+ tagi__providers__gitlab__GitLabProvider__create_pr --> src__tagi__providers__utils__pr__execute_pr_command
+ tagi__providers__gitlab__GitLabProvider__create_pr --> src__tagi__providers__utils__pr__build_pr_command
+ tagi__providers__github__GitHubProvider__is_authenticated --> src__tagi__providers__utils__auth__is_authenticated_from_result
+ tagi__providers__github__GitHubProvider__get_auth_status --> src__tagi__providers__utils__auth__get_auth_status_from_result
+ tagi__providers__github__GitHubProvider__create_pr --> src__tagi__providers__utils__pr__execute_pr_command
+ tagi__providers__github__GitHubProvider__create_pr --> src__tagi__providers__utils__pr__build_pr_command
+ tagi__scanner__files__count_lines_changed --> tagi__utils__commands__run_command
+ tagi__scanner__status__scan_repo --> tagi__utils__commands__run_command
+ tagi__scanner__status__scan_repo --> src__tagi__config__load_config
+ tagi__scanner__status__scan_repo --> src__tagi__config__Config__should_ignore
+ tagi__scanner__status__scan_repo --> tagi__scanner__status__parse_status
+ tagi__scanner__diff__get_diff --> tagi__utils__commands__run_command
+ tagi__scanner__diff__get_staged_diff --> tagi__utils__commands__run_command
src__tagi__heuristics__scoring__calculate_risk_score --> src__tagi__heuristics__scoring___lines_risk_weight
src__tagi__heuristics__scoring__calculate_risk_score --> src__tagi__heuristics__scoring___tag_risk_weight
src__tagi__heuristics__scoring__calculate_risk_score --> src__tagi__heuristics__scoring___change_type_risk_weight
+ src__tagi__heuristics__metrics___extension_complexity_weight --> src__tagi__utils__paths__path_endswith
+ src__tagi__heuristics__metrics___extension_impact_weight --> src__tagi__utils__paths__path_endswith
src__tagi__heuristics__metrics__calculate_metrics --> src__tagi__heuristics__metrics___calculate_complexity
src__tagi__heuristics__metrics__calculate_metrics --> src__tagi__heuristics__metrics___calculate_impact
src__tagi__heuristics__metrics__calculate_metrics --> src__tagi__heuristics__metrics___calculate_stability
@@ -236,14 +272,18 @@ flowchart LR
src__tagi__heuristics__metrics__calculate_metrics --> src__tagi__heuristics__metrics___calculate_dependency_depth
src__tagi__heuristics__metrics___calculate_complexity --> src__tagi__heuristics__metrics___extension_complexity_weight
src__tagi__heuristics__metrics___calculate_impact --> src__tagi__heuristics__metrics___extension_impact_weight
+ src__tagi__heuristics__metrics___calculate_test_impact --> src__tagi__utils__paths__path_endswith
+ src__tagi__heuristics__metrics___calculate_test_impact --> src__tagi__utils__paths__path_matches
+ src__tagi__heuristics__metrics___calculate_dependency_depth --> src__tagi__utils__paths__path_endswith
src__tagi__heuristics__tags__apply_tags --> src__tagi__config__load_config
src__tagi__heuristics__tags__apply_tags --> src__tagi__heuristics__tags___tag_change
src__tagi__heuristics__tags___tag_change --> src__tagi__heuristics__tags___custom_config_tags
- src__tagi__heuristics__tags___tag_change --> src__tagi__scanner__files__count_lines_changed
+ src__tagi__heuristics__tags___tag_change --> tagi__scanner__files__count_lines_changed
src__tagi__heuristics__tags___tag_change --> src__tagi__heuristics__metrics__calculate_metrics
src__tagi__heuristics__tags___tag_change --> src__tagi__heuristics__scoring__calculate_risk_score
src__tagi__heuristics__tags___tag_change --> src__tagi__heuristics__tags__apply_path_tags
src__tagi__heuristics__tags___tag_change --> src__tagi__heuristics__tags___size_tags
+ src__tagi__heuristics__tags__apply_path_tags --> src__tagi__utils__paths__path_matches
src__tagi__heuristics__rules___get_config_attr --> src__tagi__config__load_config
src__tagi__heuristics__rules__get_custom_rules --> src__tagi__heuristics__rules___get_config_attr
src__tagi__heuristics__rules__get_custom_heuristics --> src__tagi__heuristics__rules___get_config_attr
@@ -263,16 +303,20 @@ flowchart LR
src__tagi__composer__commit_message__generate_commit_message --> src__tagi__config__load_config
src__tagi__composer___tags__all_tag_values --> src__tagi__composer___tags__all_tags
src__tagi__composer___tags__summary_tag --> src__tagi__composer___tags__all_tags
+ tagi__executor__git__GitExecutor___run_command --> tagi__utils__commands__run_command
src__tagi__utils__summary_helpers__build_statistics_section --> src__tagi__utils__risk__total_lines_changed
src__tagi__utils__summary_helpers__build_statistics_section --> src__tagi__utils__risk__average_risk
- src__tagi__utils__publish_helpers__detect_and_get_provider --> src__tagi__utils__detect_provider__get_provider
+ src__tagi__utils__publish_helpers__detect_and_get_provider --> tagi__utils__detect_provider__get_provider
src__tagi__utils__publish_helpers__create_publish_group --> src__tagi__utils__risk__total_lines_changed
src__tagi__utils__publish_helpers__create_publish_group --> src__tagi__utils__risk__average_risk
- src__tagi__utils__detect_provider__get_provider --> src__tagi__utils__detect_provider__detect_git_provider
+ tagi__utils__detect_provider__get_provider --> tagi__utils__detect_provider__detect_git_provider
+ tagi__utils__detect_provider__detect_git_provider --> tagi__utils__commands__run_command
src__tagi__utils__send_helpers__create_change_group --> src__tagi__utils__risk__total_lines_changed
src__tagi__utils__send_helpers__create_change_group --> src__tagi__utils__risk__average_risk
src__tagi__utils__change_stats__calculate_tag_statistics --> src__tagi__utils__risk__total_lines_changed
src__tagi__utils__change_stats__calculate_tag_statistics --> src__tagi__utils__risk__average_risk
+ src__tagi__utils__paths__path_matches --> src__tagi__utils__paths__path_key
+ src__tagi__utils__paths__path_endswith --> src__tagi__utils__paths__path_key
src__tagi__utils__change_filter___resolve_tag_enums --> src__tagi__utils__change_filter___normalize_tag
src__tagi__utils__change_filter__resolve_filtered_changes --> src__tagi__utils__change_filter___resolve_tag_enums
src__tagi__utils__change_filter__resolve_filtered_changes --> src__tagi__utils__change_filter___changes_matching_any
diff --git a/project/calls.toon.yaml b/project/calls.toon.yaml
index 1fc6976..05b4dae 100644
--- a/project/calls.toon.yaml
+++ b/project/calls.toon.yaml
@@ -1,7 +1,7 @@
# code2llm call graph | /home/tom/github/semcod/tagi
-# generated in 0.06s
-# nodes: 136 | edges: 144 | modules: 40
-# CC̄=2.9
+# generated in 0.07s
+# nodes: 147 | edges: 165 | modules: 45
+# CC̄=2.8
HUBS[20]:
src.tagi.cli.publishing_commands.publish_command
@@ -16,10 +16,10 @@ HUBS[20]:
CC=5 in:0 out:22 total:22
src.tagi.cli.inspection_commands.inspect_command
CC=7 in:0 out:17 total:17
- src.tagi.cli.scan_utils.scan_and_tag
- CC=3 in:11 out:6 total:17
src.tagi.utils.logger.setup_logger
CC=4 in:2 out:15 total:17
+ src.tagi.cli.scan_utils.scan_and_tag
+ CC=3 in:11 out:6 total:17
src.tagi.cli.utility_commands.draft_command
CC=4 in:0 out:17 total:17
src.tagi.cli.inspection_commands.filter_command
@@ -28,7 +28,7 @@ HUBS[20]:
CC=5 in:9 out:7 total:16
src.tagi.utils.change_stats.display_statistics_table
CC=1 in:4 out:12 total:16
- src.tagi.scanner.status.scan_repo
+ tagi.scanner.status.scan_repo
CC=7 in:0 out:15 total:15
src.tagi.cli.core_commands.stats_command
CC=7 in:0 out:15 total:15
@@ -40,8 +40,8 @@ HUBS[20]:
CC=2 in:1 out:10 total:11
src.tagi.cli.display_utils._display_changes
CC=3 in:3 out:8 total:11
- src.tagi.analyzer.dependency_graph._dfs_visit
- CC=5 in:2 out:8 total:10
+ tagi.utils.commands.run_command
+ CC=1 in:10 out:1 total:11
src.tagi.utils.risk.average_risk
CC=3 in:8 out:2 total:10
@@ -89,12 +89,6 @@ MODULES:
_resolve_send_target CC=5 out:5
detect_provider CC=1 out:1
setup_logging CC=2 out:4
- src.tagi.cli.provider_commands [5 funcs]
- _current_branch CC=2 out:2
- _pr_spec CC=1 out:2
- create_mr CC=4 out:8
- create_pr CC=4 out:8
- detect_provider_command CC=2 out:3
src.tagi.cli.publishing_commands [3 funcs]
_ensure_tag_prefix CC=2 out:1
deploy_command CC=5 out:22
@@ -127,17 +121,19 @@ MODULES:
generate_simple_message CC=5 out:6
src.tagi.composer.summary [1 funcs]
generate_summary CC=8 out:8
- src.tagi.config [2 funcs]
- should_ignore CC=3 out:2
+ src.tagi.config [4 funcs]
+ get_heuristics_for_path CC=4 out:2
+ get_tag_for_path CC=3 out:2
+ should_ignore CC=2 out:2
load_config CC=1 out:1
src.tagi.heuristics.metrics [8 funcs]
_calculate_complexity CC=1 out:6
- _calculate_dependency_depth CC=4 out:4
+ _calculate_dependency_depth CC=4 out:3
_calculate_impact CC=1 out:3
_calculate_stability CC=1 out:2
- _calculate_test_impact CC=4 out:2
- _extension_complexity_weight CC=3 out:2
- _extension_impact_weight CC=3 out:2
+ _calculate_test_impact CC=4 out:3
+ _extension_complexity_weight CC=3 out:1
+ _extension_impact_weight CC=3 out:1
calculate_metrics CC=1 out:6
src.tagi.heuristics.rules [3 funcs]
_get_config_attr CC=1 out:2
@@ -171,27 +167,12 @@ MODULES:
src.tagi.planner.sorter [2 funcs]
group_by_complexity CC=5 out:7
sort_by_complexity CC=1 out:4
- src.tagi.providers.github [3 funcs]
- create_pr CC=1 out:3
- get_auth_status CC=1 out:2
- is_authenticated CC=1 out:2
- src.tagi.providers.gitlab [3 funcs]
- create_pr CC=1 out:3
- get_auth_status CC=1 out:2
- is_authenticated CC=1 out:2
src.tagi.providers.utils.auth [2 funcs]
get_auth_status_from_result CC=2 out:0
is_authenticated_from_result CC=1 out:0
src.tagi.providers.utils.pr [2 funcs]
build_pr_command CC=5 out:2
execute_pr_command CC=2 out:0
- src.tagi.scanner.diff [1 funcs]
- get_diff CC=1 out:1
- src.tagi.scanner.files [1 funcs]
- count_lines_changed CC=7 out:7
- src.tagi.scanner.status [2 funcs]
- parse_status CC=4 out:0
- scan_repo CC=7 out:15
src.tagi.utils.change_filter [9 funcs]
_changes_matching_all CC=4 out:1
_changes_matching_any CC=4 out:1
@@ -205,11 +186,12 @@ MODULES:
src.tagi.utils.change_stats [2 funcs]
calculate_tag_statistics CC=1 out:2
display_statistics_table CC=1 out:12
- src.tagi.utils.detect_provider [2 funcs]
- detect_git_provider CC=4 out:2
- get_provider CC=3 out:3
src.tagi.utils.logger [1 funcs]
setup_logger CC=4 out:15
+ src.tagi.utils.paths [3 funcs]
+ path_endswith CC=1 out:2
+ path_key CC=1 out:1
+ path_matches CC=1 out:2
src.tagi.utils.publish_helpers [2 funcs]
create_publish_group CC=1 out:4
detect_and_get_provider CC=1 out:1
@@ -220,8 +202,45 @@ MODULES:
create_change_group CC=2 out:4
src.tagi.utils.summary_helpers [1 funcs]
build_statistics_section CC=1 out:4
+ tagi.cli.provider_commands [5 funcs]
+ _current_branch CC=2 out:2
+ _pr_spec CC=1 out:2
+ create_mr CC=4 out:8
+ create_pr CC=4 out:8
+ detect_provider_command CC=2 out:3
+ tagi.executor.git [1 funcs]
+ _run_command CC=1 out:1
+ tagi.planner.branch_grouper [2 funcs]
+ get_branch_info CC=5 out:6
+ group_by_branch CC=8 out:10
+ tagi.providers.base [1 funcs]
+ _run_command CC=1 out:1
+ tagi.providers.github [3 funcs]
+ create_pr CC=1 out:3
+ get_auth_status CC=1 out:2
+ is_authenticated CC=1 out:2
+ tagi.providers.gitlab [3 funcs]
+ create_pr CC=1 out:3
+ get_auth_status CC=1 out:2
+ is_authenticated CC=1 out:2
+ tagi.scanner.diff [2 funcs]
+ get_diff CC=1 out:1
+ get_staged_diff CC=1 out:1
+ tagi.scanner.files [1 funcs]
+ count_lines_changed CC=7 out:7
+ tagi.scanner.status [2 funcs]
+ parse_status CC=4 out:0
+ scan_repo CC=7 out:15
+ tagi.utils.commands [1 funcs]
+ run_command CC=1 out:1
+ tagi.utils.detect_provider [2 funcs]
+ detect_git_provider CC=5 out:2
+ get_provider CC=3 out:3
EDGES:
+ src.tagi.config.Config.get_tag_for_path → src.tagi.utils.paths.path_matches
+ src.tagi.config.Config.get_heuristics_for_path → src.tagi.utils.paths.path_matches
+ src.tagi.config.Config.should_ignore → src.tagi.utils.paths.path_matches
src.tagi.hooks._pre_commit_hook → src.tagi.hooks._hooks_dir
src.tagi.hooks.install_hooks → src.tagi.hooks._pre_commit_hook
src.tagi.hooks.install_hooks → src.tagi.hooks._hooks_dir
@@ -245,11 +264,13 @@ EDGES:
src.tagi.planner.grouper.group_changes → src.tagi.utils.risk.total_lines_changed
src.tagi.planner.grouper.group_changes → src.tagi.utils.risk.average_risk
src.tagi.planner.grouper.group_by_tag → src.tagi.planner.selector.select_changes_by_tag
+ tagi.planner.branch_grouper.group_by_branch → tagi.utils.commands.run_command
+ tagi.planner.branch_grouper.get_branch_info → tagi.utils.commands.run_command
src.tagi.cli.git_operations._is_known_tag → src.tagi.cli.git_operations._ensure_tag_prefix
src.tagi.cli.git_operations._resolve_send_target → src.tagi.cli.git_operations._is_known_tag
src.tagi.cli.git_operations._filter_by_tag → src.tagi.utils.change_filter.resolve_filtered_changes
src.tagi.cli.git_operations._filter_by_tag → src.tagi.cli.git_operations._ensure_tag_prefix
- src.tagi.cli.git_operations._execute_git_operations → src.tagi.utils.detect_provider.get_provider
+ src.tagi.cli.git_operations._execute_git_operations → tagi.utils.detect_provider.get_provider
src.tagi.cli.git_operations.send_command → src.tagi.cli.git_operations._resolve_send_target
src.tagi.cli.git_operations.auto_command → src.tagi.cli.main._configure_command_logging
src.tagi.cli.git_operations.auto_command → src.tagi.cli.git_operations.send_command
@@ -261,14 +282,9 @@ EDGES:
src.tagi.cli.inspection_commands.filter_command → src.tagi.utils.change_stats.display_statistics_table
src.tagi.cli.inspection_commands.filter_command → src.tagi.cli.display_utils._display_changes
src.tagi.cli.inspection_commands.filter_command → src.tagi.cli.scan_utils.scan_and_tag
- src.tagi.cli.inspection_commands.file_command → src.tagi.scanner.diff.get_diff
- src.tagi.cli.provider_commands.detect_provider_command → src.tagi.utils.detect_provider.get_provider
- src.tagi.cli.provider_commands._pr_spec → src.tagi.cli.provider_commands._current_branch
- src.tagi.cli.provider_commands.create_pr → src.tagi.utils.detect_provider.get_provider
- src.tagi.cli.provider_commands.create_pr → src.tagi.cli.provider_commands._pr_spec
- src.tagi.cli.provider_commands.create_mr → src.tagi.utils.detect_provider.get_provider
- src.tagi.cli.provider_commands.create_mr → src.tagi.cli.provider_commands._pr_spec
- src.tagi.cli.core_commands.scan_command → src.tagi.cli.scan_utils.scan_and_tag
- src.tagi.cli.core_commands.scan_command → src.tagi.cli.display_utils._display_changes_grouped
- src.tagi.cli.core_commands.scan_command → src.tagi.cli.display_utils._display_changes
- src.tagi.cli.core_commands.list_groups_command → src.tagi.cli.core_commands._do_list_groups
+ src.tagi.cli.inspection_commands.file_command → tagi.scanner.diff.get_diff
+ tagi.cli.provider_commands.detect_provider_command → tagi.utils.detect_provider.get_provider
+ tagi.cli.provider_commands._current_branch → tagi.utils.commands.run_command
+ tagi.cli.provider_commands._pr_spec → tagi.cli.provider_commands._current_branch
+ tagi.cli.provider_commands.create_pr → tagi.utils.detect_provider.get_provider
+ tagi.cli.provider_commands.create_pr → tagi.cli.provider_commands._pr_spec
diff --git a/project/calls.yaml b/project/calls.yaml
index 92aa937..9ae2de2 100644
--- a/project/calls.yaml
+++ b/project/calls.yaml
@@ -1,108 +1,115 @@
project: /home/tom/github/semcod/tagi
generated_from: code2llm call graph analysis
stats:
- total_nodes: 136
- total_edges: 144
- modules_count: 40
+ total_nodes: 147
+ total_edges: 165
+ modules_count: 45
nodes:
- src.tagi.analyzer.dependency_graph.detect_cycles:
- name: detect_cycles
+ src.tagi.analyzer.dependency_graph._mark:
+ name: _mark
module: src.tagi.analyzer.dependency_graph
- line: 184
- cyclomatic_complexity: 4
- calls_out: 1
- calls_in: 0
- src.tagi.cli.main._is_known_tag:
- name: _is_known_tag
- module: src.tagi.cli.main
- line: 57
+ line: 147
+ cyclomatic_complexity: 1
+ calls_out: 0
+ calls_in: 2
+ src.tagi.providers.utils.auth.get_auth_status_from_result:
+ name: get_auth_status_from_result
+ module: src.tagi.providers.utils.auth
+ line: 7
cyclomatic_complexity: 2
- calls_out: 2
- calls_in: 1
- src.tagi.providers.gitlab.GitLabProvider.get_auth_status:
- name: get_auth_status
- module: src.tagi.providers.gitlab
- line: 21
+ calls_out: 0
+ calls_in: 2
+ src.tagi.utils.summary_helpers.build_statistics_section:
+ name: build_statistics_section
+ module: src.tagi.utils.summary_helpers
+ line: 31
cyclomatic_complexity: 1
- calls_out: 2
- calls_in: 0
- src.tagi.composer.formats.generate_simple_message:
- name: generate_simple_message
- module: src.tagi.composer.formats
- line: 102
- cyclomatic_complexity: 5
- calls_out: 6
+ calls_out: 4
calls_in: 0
- src.tagi.cli.inspection_commands.filter_command:
- name: filter_command
- module: src.tagi.cli.inspection_commands
- line: 56
- cyclomatic_complexity: 6
- calls_out: 16
+ src.tagi.cli.utility_commands.hooks_command:
+ name: hooks_command
+ module: src.tagi.cli.utility_commands
+ line: 131
+ cyclomatic_complexity: 10
+ calls_out: 26
calls_in: 0
- src.tagi.cli.provider_commands._pr_spec:
- name: _pr_spec
- module: src.tagi.cli.provider_commands
- line: 37
- cyclomatic_complexity: 1
- calls_out: 2
- calls_in: 2
- src.tagi.heuristics.metrics._calculate_complexity:
- name: _calculate_complexity
- module: src.tagi.heuristics.metrics
- line: 89
- cyclomatic_complexity: 1
- calls_out: 6
+ src.tagi.cli.git_operations.send_command:
+ name: send_command
+ module: src.tagi.cli.git_operations
+ line: 90
+ cyclomatic_complexity: 7
+ calls_out: 26
calls_in: 1
- src.tagi.hooks.install_hooks:
- name: install_hooks
- module: src.tagi.hooks
- line: 17
- cyclomatic_complexity: 2
+ src.tagi.analyzer.metrics.MetricsCollector.collect:
+ name: collect
+ module: src.tagi.analyzer.metrics
+ line: 25
+ cyclomatic_complexity: 10
calls_out: 5
calls_in: 0
- src.tagi.cli.core_commands.list_groups_command:
- name: list_groups_command
- module: src.tagi.cli.core_commands
- line: 33
- cyclomatic_complexity: 1
+ src.tagi.composer.formats._detailed_file_lines:
+ name: _detailed_file_lines
+ module: src.tagi.composer.formats
+ line: 75
+ cyclomatic_complexity: 3
+ calls_out: 1
+ calls_in: 1
+ src.tagi.config.Config.get_heuristics_for_path:
+ name: get_heuristics_for_path
+ module: src.tagi.config
+ line: 89
+ cyclomatic_complexity: 4
calls_out: 2
calls_in: 0
- src.tagi.cli.git_operations._ensure_tag_prefix:
- name: _ensure_tag_prefix
- module: src.tagi.cli.git_operations
- line: 21
+ src.tagi.heuristics.tags._size_tags:
+ name: _size_tags
+ module: src.tagi.heuristics.tags
+ line: 60
+ cyclomatic_complexity: 3
+ calls_out: 0
+ calls_in: 1
+ src.tagi.utils.change_filter._normalize_tag:
+ name: _normalize_tag
+ module: src.tagi.utils.change_filter
+ line: 14
cyclomatic_complexity: 2
calls_out: 1
calls_in: 2
- src.tagi.cli.git_operations._is_known_tag:
- name: _is_known_tag
- module: src.tagi.cli.git_operations
- line: 28
+ src.tagi.utils.change_filter.filter_changes_by_tag:
+ name: filter_changes_by_tag
+ module: src.tagi.utils.change_filter
+ line: 84
+ cyclomatic_complexity: 1
+ calls_out: 1
+ calls_in: 0
+ src.tagi.composer.formats.generate_conventional_message:
+ name: generate_conventional_message
+ module: src.tagi.composer.formats
+ line: 42
+ cyclomatic_complexity: 4
+ calls_out: 5
+ calls_in: 0
+ src.tagi.cli.publishing_commands.publish_command:
+ name: publish_command
+ module: src.tagi.cli.publishing_commands
+ line: 23
+ cyclomatic_complexity: 11
+ calls_out: 36
+ calls_in: 0
+ src.tagi.composer.commit_message._improve_with_llm:
+ name: _improve_with_llm
+ module: src.tagi.composer.commit_message
+ line: 52
cyclomatic_complexity: 2
calls_out: 2
calls_in: 1
- src.tagi.heuristics.tags._custom_config_tags:
- name: _custom_config_tags
- module: src.tagi.heuristics.tags
- line: 48
- cyclomatic_complexity: 3
- calls_out: 3
+ src.tagi.composer._tags.infer_scope:
+ name: infer_scope
+ module: src.tagi.composer._tags
+ line: 41
+ cyclomatic_complexity: 7
+ calls_out: 2
calls_in: 1
- src.tagi.heuristics.rules.get_custom_heuristics:
- name: get_custom_heuristics
- module: src.tagi.heuristics.rules
- line: 18
- cyclomatic_complexity: 1
- calls_out: 1
- calls_in: 0
- src.tagi.analyzer.dependency_graph._dfs_visit:
- name: _dfs_visit
- module: src.tagi.analyzer.dependency_graph
- line: 158
- cyclomatic_complexity: 5
- calls_out: 8
- calls_in: 2
src.tagi.utils.send_helpers.create_change_group:
name: create_change_group
module: src.tagi.utils.send_helpers
@@ -110,118 +117,83 @@ nodes:
cyclomatic_complexity: 2
calls_out: 4
calls_in: 2
- src.tagi.providers.utils.pr.build_pr_command:
- name: build_pr_command
- module: src.tagi.providers.utils.pr
- line: 10
- cyclomatic_complexity: 5
- calls_out: 2
- calls_in: 2
- src.tagi.cli.provider_commands.create_mr:
- name: create_mr
- module: src.tagi.cli.provider_commands
- line: 62
- cyclomatic_complexity: 4
- calls_out: 8
- calls_in: 0
- src.tagi.utils.change_filter._resolve_tag_enums:
- name: _resolve_tag_enums
- module: src.tagi.utils.change_filter
- line: 24
+ src.tagi.analyzer.dependency_graph._cycle_from:
+ name: _cycle_from
+ module: src.tagi.analyzer.dependency_graph
+ line: 152
+ cyclomatic_complexity: 1
+ calls_out: 1
+ calls_in: 1
+ tagi.utils.detect_provider.get_provider:
+ name: get_provider
+ module: tagi.utils.detect_provider
+ line: 12
cyclomatic_complexity: 3
calls_out: 3
- calls_in: 1
- src.tagi.heuristics.tags._tag_change:
- name: _tag_change
- module: src.tagi.heuristics.tags
- line: 22
- cyclomatic_complexity: 2
- calls_out: 10
- calls_in: 1
- src.tagi.cli.provider_commands._current_branch:
- name: _current_branch
- module: src.tagi.cli.provider_commands
- line: 27
- cyclomatic_complexity: 2
+ calls_in: 6
+ src.tagi.hooks._pre_commit_hook:
+ name: _pre_commit_hook
+ module: src.tagi.hooks
+ line: 13
+ cyclomatic_complexity: 1
+ calls_out: 1
+ calls_in: 3
+ src.tagi.analyzer.dependency_graph._next_critical_node:
+ name: _next_critical_node
+ module: src.tagi.analyzer.dependency_graph
+ line: 226
+ cyclomatic_complexity: 5
calls_out: 2
calls_in: 1
- src.tagi.utils.change_filter._changes_matching_tag:
- name: _changes_matching_tag
- module: src.tagi.utils.change_filter
- line: 19
- cyclomatic_complexity: 3
- calls_out: 0
- calls_in: 1
- src.tagi.providers.utils.pr.execute_pr_command:
- name: execute_pr_command
- module: src.tagi.providers.utils.pr
- line: 35
+ src.tagi.cli.utility_commands._ensure_tag_prefix:
+ name: _ensure_tag_prefix
+ module: src.tagi.cli.utility_commands
+ line: 18
cyclomatic_complexity: 2
- calls_out: 0
- calls_in: 2
- src.tagi.scanner.diff.get_diff:
- name: get_diff
- module: src.tagi.scanner.diff
- line: 6
- cyclomatic_complexity: 1
calls_out: 1
- calls_in: 3
- src.tagi.cli.inspection_commands.file_command:
- name: file_command
+ calls_in: 1
+ src.tagi.cli.inspection_commands.inspect_command:
+ name: inspect_command
module: src.tagi.cli.inspection_commands
- line: 89
+ line: 19
cyclomatic_complexity: 7
- calls_out: 14
+ calls_out: 17
calls_in: 0
- src.tagi.cli.main.setup_logging:
- name: setup_logging
- module: src.tagi.cli.main
- line: 37
- cyclomatic_complexity: 2
- calls_out: 4
+ src.tagi.cli.utility_commands.summary_command:
+ name: summary_command
+ module: src.tagi.cli.utility_commands
+ line: 25
+ cyclomatic_complexity: 7
+ calls_out: 28
calls_in: 0
src.tagi.config.load_config:
name: load_config
module: src.tagi.config
- line: 124
+ line: 116
cyclomatic_complexity: 1
calls_out: 1
calls_in: 6
- src.tagi.heuristics.scoring._tag_risk_weight:
- name: _tag_risk_weight
- module: src.tagi.heuristics.scoring
- line: 34
- cyclomatic_complexity: 3
- calls_out: 2
- calls_in: 1
- src.tagi.cli.git_operations._execute_git_operations:
- name: _execute_git_operations
- module: src.tagi.cli.git_operations
- line: 71
- cyclomatic_complexity: 5
- calls_out: 11
- calls_in: 1
- src.tagi.composer._tags.all_tag_values:
- name: all_tag_values
- module: src.tagi.composer._tags
- line: 15
- cyclomatic_complexity: 2
+ src.tagi.heuristics.rules.get_custom_rules:
+ name: get_custom_rules
+ module: src.tagi.heuristics.rules
+ line: 13
+ cyclomatic_complexity: 1
calls_out: 1
calls_in: 0
- src.tagi.heuristics.tags.apply_path_tags:
- name: apply_path_tags
- module: src.tagi.heuristics.tags
- line: 69
- cyclomatic_complexity: 4
+ src.tagi.cli.publishing_commands.deploy_command:
+ name: deploy_command
+ module: src.tagi.cli.publishing_commands
+ line: 96
+ cyclomatic_complexity: 5
+ calls_out: 22
+ calls_in: 0
+ src.tagi.composer._templates.render_template:
+ name: render_template
+ module: src.tagi.composer._templates
+ line: 10
+ cyclomatic_complexity: 2
calls_out: 2
calls_in: 1
- src.tagi.analyzer.dependency_graph.build_dependency_graph:
- name: build_dependency_graph
- module: src.tagi.analyzer.dependency_graph
- line: 54
- cyclomatic_complexity: 3
- calls_out: 4
- calls_in: 0
src.tagi.utils.publish_helpers.create_publish_group:
name: create_publish_group
module: src.tagi.utils.publish_helpers
@@ -229,68 +201,61 @@ nodes:
cyclomatic_complexity: 1
calls_out: 4
calls_in: 1
- src.tagi.providers.github.GitHubProvider.is_authenticated:
+ src.tagi.utils.paths.path_key:
+ name: path_key
+ module: src.tagi.utils.paths
+ line: 12
+ cyclomatic_complexity: 1
+ calls_out: 1
+ calls_in: 2
+ tagi.providers.gitlab.GitLabProvider.is_authenticated:
name: is_authenticated
- module: src.tagi.providers.github
- line: 15
+ module: tagi.providers.gitlab
+ line: 16
cyclomatic_complexity: 1
calls_out: 2
calls_in: 0
- src.tagi.composer.formats.generate_conventional_message:
- name: generate_conventional_message
- module: src.tagi.composer.formats
- line: 42
- cyclomatic_complexity: 4
+ src.tagi.composer._tags.all_tags:
+ name: all_tags
+ module: src.tagi.composer._tags
+ line: 8
+ cyclomatic_complexity: 3
+ calls_out: 2
+ calls_in: 3
+ src.tagi.hooks.install_hooks:
+ name: install_hooks
+ module: src.tagi.hooks
+ line: 17
+ cyclomatic_complexity: 2
calls_out: 5
calls_in: 0
- src.tagi.analyzer.dependency_graph._collect_import_names:
- name: _collect_import_names
- module: src.tagi.analyzer.dependency_graph
- line: 10
- cyclomatic_complexity: 7
- calls_out: 5
- calls_in: 1
- src.tagi.analyzer.dependency_graph.get_critical_path:
- name: get_critical_path
- module: src.tagi.analyzer.dependency_graph
- line: 262
- cyclomatic_complexity: 2
- calls_out: 2
+ src.tagi.cli.inspection_commands.filter_command:
+ name: filter_command
+ module: src.tagi.cli.inspection_commands
+ line: 56
+ cyclomatic_complexity: 6
+ calls_out: 16
calls_in: 0
- src.tagi.composer._templates.render_template:
- name: render_template
- module: src.tagi.composer._templates
- line: 10
+ src.tagi.hooks.check_hooks_installed:
+ name: check_hooks_installed
+ module: src.tagi.hooks
+ line: 68
cyclomatic_complexity: 2
- calls_out: 2
+ calls_out: 3
calls_in: 1
- src.tagi.utils.change_filter._changes_matching_all:
- name: _changes_matching_all
- module: src.tagi.utils.change_filter
- line: 40
- cyclomatic_complexity: 4
- calls_out: 1
+ src.tagi.heuristics.metrics._calculate_complexity:
+ name: _calculate_complexity
+ module: src.tagi.heuristics.metrics
+ line: 88
+ cyclomatic_complexity: 1
+ calls_out: 6
calls_in: 1
- src.tagi.cli.main._resolve_send_target:
+ src.tagi.cli.git_operations._resolve_send_target:
name: _resolve_send_target
- module: src.tagi.cli.main
- line: 66
+ module: src.tagi.cli.git_operations
+ line: 37
cyclomatic_complexity: 5
calls_out: 5
- calls_in: 0
- src.tagi.cli.utility_commands._ensure_tag_prefix:
- name: _ensure_tag_prefix
- module: src.tagi.cli.utility_commands
- line: 18
- cyclomatic_complexity: 2
- calls_out: 1
- calls_in: 1
- src.tagi.planner.grouper._get_primary_tag:
- name: _get_primary_tag
- module: src.tagi.planner.grouper
- line: 54
- cyclomatic_complexity: 4
- calls_out: 0
calls_in: 1
src.tagi.cli.display_utils._display_changes_grouped:
name: _display_changes_grouped
@@ -299,138 +264,166 @@ nodes:
cyclomatic_complexity: 5
calls_out: 3
calls_in: 1
- src.tagi.cli.utility_commands.hooks_command:
- name: hooks_command
- module: src.tagi.cli.utility_commands
- line: 131
- cyclomatic_complexity: 10
- calls_out: 26
- calls_in: 0
- src.tagi.cli.inspection_commands.inspect_command:
- name: inspect_command
- module: src.tagi.cli.inspection_commands
- line: 19
- cyclomatic_complexity: 7
- calls_out: 17
+ src.tagi.cli.core_commands.scan_command:
+ name: scan_command
+ module: src.tagi.cli.core_commands
+ line: 14
+ cyclomatic_complexity: 3
+ calls_out: 7
calls_in: 0
- src.tagi.utils.change_filter.resolve_filtered_changes:
- name: resolve_filtered_changes
- module: src.tagi.utils.change_filter
- line: 45
+ src.tagi.composer.formats.generate_simple_message:
+ name: generate_simple_message
+ module: src.tagi.composer.formats
+ line: 102
cyclomatic_complexity: 5
- calls_out: 7
- calls_in: 9
- src.tagi.scanner.status.scan_repo:
- name: scan_repo
- module: src.tagi.scanner.status
- line: 11
- cyclomatic_complexity: 7
- calls_out: 15
+ calls_out: 6
calls_in: 0
- src.tagi.heuristics.scoring.calculate_risk_score:
- name: calculate_risk_score
+ src.tagi.heuristics.scoring._change_type_risk_weight:
+ name: _change_type_risk_weight
module: src.tagi.heuristics.scoring
- line: 20
+ line: 39
cyclomatic_complexity: 1
- calls_out: 4
- calls_in: 1
- src.tagi.cli.provider_commands.detect_provider_command:
- name: detect_provider_command
- module: src.tagi.cli.provider_commands
- line: 17
- cyclomatic_complexity: 2
- calls_out: 3
- calls_in: 1
- src.tagi.cli.scan_utils.scan_and_tag:
- name: scan_and_tag
- module: src.tagi.cli.scan_utils
- line: 10
- cyclomatic_complexity: 3
- calls_out: 6
- calls_in: 11
- src.tagi.cli.core_commands._do_list_groups:
- name: _do_list_groups
- module: src.tagi.cli.core_commands
- line: 47
- cyclomatic_complexity: 4
- calls_out: 7
- calls_in: 2
- src.tagi.cli.publishing_commands._ensure_tag_prefix:
- name: _ensure_tag_prefix
- module: src.tagi.cli.publishing_commands
- line: 16
- cyclomatic_complexity: 2
calls_out: 1
- calls_in: 2
- src.tagi.analyzer.dependency_graph._find_longest_start:
- name: _find_longest_start
- module: src.tagi.analyzer.dependency_graph
- line: 221
- cyclomatic_complexity: 1
- calls_out: 2
calls_in: 1
- src.tagi.hooks._pre_commit_hook:
- name: _pre_commit_hook
- module: src.tagi.hooks
- line: 13
+ tagi.providers.github.GitHubProvider.is_authenticated:
+ name: is_authenticated
+ module: tagi.providers.github
+ line: 15
cyclomatic_complexity: 1
- calls_out: 1
- calls_in: 3
- src.tagi.cli.display_utils._display_groups:
- name: _display_groups
+ calls_out: 2
+ calls_in: 0
+ src.tagi.cli.display_utils._format_tags:
+ name: _format_tags
module: src.tagi.cli.display_utils
- line: 52
+ line: 35
+ cyclomatic_complexity: 5
+ calls_out: 3
+ calls_in: 4
+ src.tagi.config.Config.get_tag_for_path:
+ name: get_tag_for_path
+ module: src.tagi.config
+ line: 73
+ cyclomatic_complexity: 3
+ calls_out: 2
+ calls_in: 0
+ src.tagi.heuristics.metrics._calculate_test_impact:
+ name: _calculate_test_impact
+ module: src.tagi.heuristics.metrics
+ line: 134
cyclomatic_complexity: 4
- calls_out: 6
+ calls_out: 3
calls_in: 1
- src.tagi.composer.formats._commit_type:
- name: _commit_type
- module: src.tagi.composer.formats
- line: 27
+ src.tagi.heuristics.metrics._extension_complexity_weight:
+ name: _extension_complexity_weight
+ module: src.tagi.heuristics.metrics
+ line: 34
cyclomatic_complexity: 3
- calls_out: 0
+ calls_out: 1
calls_in: 1
- src.tagi.heuristics.metrics._calculate_dependency_depth:
- name: _calculate_dependency_depth
- module: src.tagi.heuristics.metrics
- line: 151
+ src.tagi.utils.change_filter._changes_matching_any:
+ name: _changes_matching_any
+ module: src.tagi.utils.change_filter
+ line: 35
cyclomatic_complexity: 4
+ calls_out: 1
+ calls_in: 1
+ src.tagi.analyzer.dependency_graph.analyze_python_imports:
+ name: analyze_python_imports
+ module: src.tagi.analyzer.dependency_graph
+ line: 33
+ cyclomatic_complexity: 2
calls_out: 4
calls_in: 1
- src.tagi.composer.summary.generate_summary:
- name: generate_summary
- module: src.tagi.composer.summary
- line: 10
- cyclomatic_complexity: 8
- calls_out: 8
+ src.tagi.cli.main.detect_provider:
+ name: detect_provider
+ module: src.tagi.cli.main
+ line: 111
+ cyclomatic_complexity: 1
+ calls_out: 1
calls_in: 0
- src.tagi.config.Config.should_ignore:
- name: should_ignore
- module: src.tagi.config
- line: 113
- cyclomatic_complexity: 3
- calls_out: 2
+ src.tagi.planner.grouper.group_by_tag:
+ name: group_by_tag
+ module: src.tagi.planner.grouper
+ line: 37
+ cyclomatic_complexity: 1
+ calls_out: 1
+ calls_in: 0
+ src.tagi.cli.git_operations._execute_git_operations:
+ name: _execute_git_operations
+ module: src.tagi.cli.git_operations
+ line: 71
+ cyclomatic_complexity: 5
+ calls_out: 11
calls_in: 1
- src.tagi.heuristics.metrics._calculate_impact:
- name: _calculate_impact
- module: src.tagi.heuristics.metrics
- line: 107
+ src.tagi.cli.core_commands.list_command:
+ name: list_command
+ module: src.tagi.cli.core_commands
+ line: 40
cyclomatic_complexity: 1
- calls_out: 3
+ calls_out: 2
+ calls_in: 0
+ src.tagi.composer.formats._describe_changes:
+ name: _describe_changes
+ module: src.tagi.composer.formats
+ line: 35
+ cyclomatic_complexity: 2
+ calls_out: 2
calls_in: 1
- src.tagi.providers.gitlab.GitLabProvider.create_pr:
- name: create_pr
- module: src.tagi.providers.gitlab
- line: 41
+ src.tagi.planner.selector.select_changes_by_tag:
+ name: select_changes_by_tag
+ module: src.tagi.planner.selector
+ line: 8
+ cyclomatic_complexity: 3
+ calls_out: 0
+ calls_in: 1
+ src.tagi.utils.change_filter.filter_changes_by_tags_all:
+ name: filter_changes_by_tags_all
+ module: src.tagi.utils.change_filter
+ line: 110
cyclomatic_complexity: 1
- calls_out: 3
+ calls_out: 1
calls_in: 0
- src.tagi.heuristics.metrics._extension_complexity_weight:
- name: _extension_complexity_weight
- module: src.tagi.heuristics.metrics
- line: 33
+ src.tagi.utils.change_filter.resolve_filtered_changes:
+ name: resolve_filtered_changes
+ module: src.tagi.utils.change_filter
+ line: 45
+ cyclomatic_complexity: 5
+ calls_out: 7
+ calls_in: 9
+ src.tagi.utils.risk.average_risk:
+ name: average_risk
+ module: src.tagi.utils.risk
+ line: 22
cyclomatic_complexity: 3
calls_out: 2
+ calls_in: 8
+ src.tagi.composer._tags.summary_tag:
+ name: summary_tag
+ module: src.tagi.composer._tags
+ line: 20
+ cyclomatic_complexity: 3
+ calls_out: 2
+ calls_in: 4
+ src.tagi.cli.core_commands._do_list_groups:
+ name: _do_list_groups
+ module: src.tagi.cli.core_commands
+ line: 47
+ cyclomatic_complexity: 4
+ calls_out: 7
+ calls_in: 2
+ src.tagi.analyzer.dependency_graph.get_critical_path:
+ name: get_critical_path
+ module: src.tagi.analyzer.dependency_graph
+ line: 262
+ cyclomatic_complexity: 2
+ calls_out: 2
+ calls_in: 0
+ src.tagi.planner.grouper._get_primary_tag:
+ name: _get_primary_tag
+ module: src.tagi.planner.grouper
+ line: 54
+ cyclomatic_complexity: 4
+ calls_out: 0
calls_in: 1
src.tagi.hooks.uninstall_hooks:
name: uninstall_hooks
@@ -439,108 +432,192 @@ nodes:
cyclomatic_complexity: 3
calls_out: 3
calls_in: 0
- src.tagi.utils.change_filter._changes_matching_any:
- name: _changes_matching_any
- module: src.tagi.utils.change_filter
- line: 35
- cyclomatic_complexity: 4
+ src.tagi.planner.sorter.group_by_complexity:
+ name: group_by_complexity
+ module: src.tagi.planner.sorter
+ line: 80
+ cyclomatic_complexity: 5
+ calls_out: 7
+ calls_in: 0
+ src.tagi.cli.git_operations._ensure_tag_prefix:
+ name: _ensure_tag_prefix
+ module: src.tagi.cli.git_operations
+ line: 21
+ cyclomatic_complexity: 2
+ calls_out: 1
+ calls_in: 2
+ src.tagi.heuristics.rules.get_custom_heuristics:
+ name: get_custom_heuristics
+ module: src.tagi.heuristics.rules
+ line: 18
+ cyclomatic_complexity: 1
calls_out: 1
+ calls_in: 0
+ src.tagi.analyzer.dependency_graph._longest_path_length:
+ name: _longest_path_length
+ module: src.tagi.analyzer.dependency_graph
+ line: 203
+ cyclomatic_complexity: 4
+ calls_out: 3
+ calls_in: 2
+ src.tagi.utils.paths.path_endswith:
+ name: path_endswith
+ module: src.tagi.utils.paths
+ line: 22
+ cyclomatic_complexity: 1
+ calls_out: 2
+ calls_in: 6
+ src.tagi.heuristics.tags._tag_change:
+ name: _tag_change
+ module: src.tagi.heuristics.tags
+ line: 23
+ cyclomatic_complexity: 2
+ calls_out: 10
calls_in: 1
- src.tagi.composer.commit_message._improve_with_llm:
- name: _improve_with_llm
- module: src.tagi.composer.commit_message
- line: 52
+ src.tagi.cli.main._configure_command_logging:
+ name: _configure_command_logging
+ module: src.tagi.cli.main
+ line: 44
cyclomatic_complexity: 2
calls_out: 2
calls_in: 1
- src.tagi.hooks.list_hooks:
- name: list_hooks
- module: src.tagi.hooks
- line: 86
- cyclomatic_complexity: 5
- calls_out: 7
- calls_in: 0
- src.tagi.analyzer.dependency_graph.analyze_python_imports:
- name: analyze_python_imports
- module: src.tagi.analyzer.dependency_graph
- line: 33
+ tagi.cli.provider_commands.detect_provider_command:
+ name: detect_provider_command
+ module: tagi.cli.provider_commands
+ line: 17
cyclomatic_complexity: 2
- calls_out: 4
+ calls_out: 3
calls_in: 1
- src.tagi.utils.logger.setup_logger:
- name: setup_logger
- module: src.tagi.utils.logger
- line: 9
+ src.tagi.planner.grouper.group_changes:
+ name: group_changes
+ module: src.tagi.planner.grouper
+ line: 10
cyclomatic_complexity: 4
- calls_out: 15
- calls_in: 2
- src.tagi.cli.publishing_commands.publish_command:
- name: publish_command
- module: src.tagi.cli.publishing_commands
- line: 23
- cyclomatic_complexity: 11
- calls_out: 36
+ calls_out: 10
calls_in: 0
- src.tagi.analyzer.dependency_graph._mark:
- name: _mark
- module: src.tagi.analyzer.dependency_graph
- line: 147
- cyclomatic_complexity: 1
- calls_out: 0
- calls_in: 2
- src.tagi.analyzer.dependency_graph._reconstruct_critical_path:
- name: _reconstruct_critical_path
- module: src.tagi.analyzer.dependency_graph
- line: 244
+ src.tagi.composer.formats._commit_type:
+ name: _commit_type
+ module: src.tagi.composer.formats
+ line: 27
cyclomatic_complexity: 3
- calls_out: 4
+ calls_out: 0
calls_in: 1
- src.tagi.utils.change_filter.filter_changes_by_tags_any:
- name: filter_changes_by_tags_any
+ tagi.providers.github.GitHubProvider.get_auth_status:
+ name: get_auth_status
+ module: tagi.providers.github
+ line: 19
+ cyclomatic_complexity: 1
+ calls_out: 2
+ calls_in: 0
+ src.tagi.utils.change_filter._resolve_tag_enums:
+ name: _resolve_tag_enums
module: src.tagi.utils.change_filter
- line: 97
+ line: 24
+ cyclomatic_complexity: 3
+ calls_out: 3
+ calls_in: 1
+ src.tagi.heuristics.scoring._lines_risk_weight:
+ name: _lines_risk_weight
+ module: src.tagi.heuristics.scoring
+ line: 29
cyclomatic_complexity: 1
calls_out: 1
calls_in: 1
- src.tagi.hooks._hooks_dir:
- name: _hooks_dir
- module: src.tagi.hooks
- line: 9
+ src.tagi.heuristics.tags.apply_path_tags:
+ name: apply_path_tags
+ module: src.tagi.heuristics.tags
+ line: 70
+ cyclomatic_complexity: 4
+ calls_out: 2
+ calls_in: 1
+ src.tagi.utils.publish_helpers.detect_and_get_provider:
+ name: detect_and_get_provider
+ module: src.tagi.utils.publish_helpers
+ line: 10
cyclomatic_complexity: 1
calls_out: 1
- calls_in: 4
- src.tagi.cli.utility_commands.summary_command:
- name: summary_command
- module: src.tagi.cli.utility_commands
- line: 25
- cyclomatic_complexity: 7
- calls_out: 28
- calls_in: 0
- src.tagi.composer.formats.generate_detailed_message:
- name: generate_detailed_message
- module: src.tagi.composer.formats
- line: 84
- cyclomatic_complexity: 3
- calls_out: 6
calls_in: 0
src.tagi.heuristics.metrics._extension_impact_weight:
name: _extension_impact_weight
module: src.tagi.heuristics.metrics
line: 42
cyclomatic_complexity: 3
- calls_out: 2
+ calls_out: 1
calls_in: 1
- src.tagi.composer.formats.generate_oneline_message:
- name: generate_oneline_message
- module: src.tagi.composer.formats
- line: 115
- cyclomatic_complexity: 4
- calls_out: 3
+ tagi.planner.branch_grouper.group_by_branch:
+ name: group_by_branch
+ module: tagi.planner.branch_grouper
+ line: 7
+ cyclomatic_complexity: 8
+ calls_out: 10
calls_in: 0
- src.tagi.cli.main.detect_provider:
- name: detect_provider
- module: src.tagi.cli.main
- line: 111
+ tagi.planner.branch_grouper.get_branch_info:
+ name: get_branch_info
+ module: tagi.planner.branch_grouper
+ line: 56
+ cyclomatic_complexity: 5
+ calls_out: 6
+ calls_in: 0
+ src.tagi.cli.display_utils._display_groups:
+ name: _display_groups
+ module: src.tagi.cli.display_utils
+ line: 52
+ cyclomatic_complexity: 4
+ calls_out: 6
+ calls_in: 1
+ tagi.scanner.status.scan_repo:
+ name: scan_repo
+ module: tagi.scanner.status
+ line: 11
+ cyclomatic_complexity: 7
+ calls_out: 15
+ calls_in: 0
+ src.tagi.composer.summary.generate_summary:
+ name: generate_summary
+ module: src.tagi.composer.summary
+ line: 10
+ cyclomatic_complexity: 8
+ calls_out: 8
+ calls_in: 0
+ src.tagi.utils.change_filter._changes_matching_tag:
+ name: _changes_matching_tag
+ module: src.tagi.utils.change_filter
+ line: 19
+ cyclomatic_complexity: 3
+ calls_out: 0
+ calls_in: 1
+ src.tagi.heuristics.scoring.calculate_risk_score:
+ name: calculate_risk_score
+ module: src.tagi.heuristics.scoring
+ line: 20
+ cyclomatic_complexity: 1
+ calls_out: 4
+ calls_in: 1
+ src.tagi.utils.paths.path_matches:
+ name: path_matches
+ module: src.tagi.utils.paths
+ line: 17
+ cyclomatic_complexity: 1
+ calls_out: 2
+ calls_in: 6
+ src.tagi.analyzer.dependency_graph._find_longest_start:
+ name: _find_longest_start
+ module: src.tagi.analyzer.dependency_graph
+ line: 221
+ cyclomatic_complexity: 1
+ calls_out: 2
+ calls_in: 1
+ src.tagi.utils.change_filter._changes_matching_all:
+ name: _changes_matching_all
+ module: src.tagi.utils.change_filter
+ line: 40
+ cyclomatic_complexity: 4
+ calls_out: 1
+ calls_in: 1
+ tagi.providers.base.BaseProvider._run_command:
+ name: _run_command
+ module: tagi.providers.base
+ line: 50
cyclomatic_complexity: 1
calls_out: 1
calls_in: 0
@@ -551,82 +628,173 @@ nodes:
cyclomatic_complexity: 3
calls_out: 1
calls_in: 1
- src.tagi.hooks.check_hooks_installed:
- name: check_hooks_installed
- module: src.tagi.hooks
- line: 68
+ src.tagi.cli.inspection_commands.file_command:
+ name: file_command
+ module: src.tagi.cli.inspection_commands
+ line: 89
+ cyclomatic_complexity: 7
+ calls_out: 14
+ calls_in: 0
+ src.tagi.cli.main._is_known_tag:
+ name: _is_known_tag
+ module: src.tagi.cli.main
+ line: 57
cyclomatic_complexity: 2
- calls_out: 3
- calls_in: 1
- src.tagi.heuristics.tags._size_tags:
- name: _size_tags
- module: src.tagi.heuristics.tags
- line: 59
- cyclomatic_complexity: 3
- calls_out: 0
+ calls_out: 2
calls_in: 1
- src.tagi.heuristics.rules._get_config_attr:
- name: _get_config_attr
- module: src.tagi.heuristics.rules
- line: 8
+ src.tagi.utils.change_filter.filter_changes_by_tags_any:
+ name: filter_changes_by_tags_any
+ module: src.tagi.utils.change_filter
+ line: 97
cyclomatic_complexity: 1
- calls_out: 2
- calls_in: 2
- src.tagi.analyzer.dependency_graph._longest_path_length:
- name: _longest_path_length
- module: src.tagi.analyzer.dependency_graph
- line: 203
- cyclomatic_complexity: 4
- calls_out: 3
- calls_in: 2
- src.tagi.cli.main._configure_command_logging:
- name: _configure_command_logging
+ calls_out: 1
+ calls_in: 1
+ src.tagi.cli.main._ensure_tag_prefix:
+ name: _ensure_tag_prefix
module: src.tagi.cli.main
- line: 44
+ line: 50
cyclomatic_complexity: 2
- calls_out: 2
+ calls_out: 1
calls_in: 1
- src.tagi.cli.utility_commands.draft_command:
- name: draft_command
- module: src.tagi.cli.utility_commands
- line: 180
+ tagi.cli.provider_commands.create_pr:
+ name: create_pr
+ module: tagi.cli.provider_commands
+ line: 41
cyclomatic_complexity: 4
- calls_out: 17
+ calls_out: 8
calls_in: 0
- src.tagi.composer._tags.summary_tag:
- name: summary_tag
- module: src.tagi.composer._tags
- line: 20
- cyclomatic_complexity: 3
+ src.tagi.cli.git_operations.auto_command:
+ name: auto_command
+ module: src.tagi.cli.git_operations
+ line: 148
+ cyclomatic_complexity: 1
+ calls_out: 8
+ calls_in: 0
+ src.tagi.utils.change_stats.calculate_tag_statistics:
+ name: calculate_tag_statistics
+ module: src.tagi.utils.change_stats
+ line: 17
+ cyclomatic_complexity: 1
+ calls_out: 2
+ calls_in: 3
+ src.tagi.heuristics.metrics._calculate_dependency_depth:
+ name: _calculate_dependency_depth
+ module: src.tagi.heuristics.metrics
+ line: 148
+ cyclomatic_complexity: 4
+ calls_out: 3
+ calls_in: 1
+ tagi.utils.detect_provider.detect_git_provider:
+ name: detect_git_provider
+ module: tagi.utils.detect_provider
+ line: 29
+ cyclomatic_complexity: 5
calls_out: 2
+ calls_in: 1
+ src.tagi.utils.change_stats.display_statistics_table:
+ name: display_statistics_table
+ module: src.tagi.utils.change_stats
+ line: 29
+ cyclomatic_complexity: 1
+ calls_out: 12
calls_in: 4
- src.tagi.utils.risk.average_risk:
- name: average_risk
+ src.tagi.composer.commit_message.generate_commit_message:
+ name: generate_commit_message
+ module: src.tagi.composer.commit_message
+ line: 36
+ cyclomatic_complexity: 5
+ calls_out: 8
+ calls_in: 1
+ src.tagi.providers.utils.pr.build_pr_command:
+ name: build_pr_command
+ module: src.tagi.providers.utils.pr
+ line: 10
+ cyclomatic_complexity: 5
+ calls_out: 2
+ calls_in: 2
+ src.tagi.utils.risk.total_lines_changed:
+ name: total_lines_changed
module: src.tagi.utils.risk
- line: 22
+ line: 8
+ cyclomatic_complexity: 2
+ calls_out: 1
+ calls_in: 8
+ src.tagi.heuristics.scoring._tag_risk_weight:
+ name: _tag_risk_weight
+ module: src.tagi.heuristics.scoring
+ line: 34
cyclomatic_complexity: 3
calls_out: 2
- calls_in: 8
- src.tagi.composer.formats._describe_changes:
- name: _describe_changes
- module: src.tagi.composer.formats
- line: 35
+ calls_in: 1
+ src.tagi.analyzer.dependency_graph._collect_import_names:
+ name: _collect_import_names
+ module: src.tagi.analyzer.dependency_graph
+ line: 10
+ cyclomatic_complexity: 7
+ calls_out: 5
+ calls_in: 1
+ src.tagi.heuristics.tags.apply_tags:
+ name: apply_tags
+ module: src.tagi.heuristics.tags
+ line: 13
cyclomatic_complexity: 2
calls_out: 2
+ calls_in: 0
+ tagi.scanner.files.count_lines_changed:
+ name: count_lines_changed
+ module: tagi.scanner.files
+ line: 8
+ cyclomatic_complexity: 7
+ calls_out: 7
calls_in: 1
- src.tagi.providers.utils.auth.is_authenticated_from_result:
- name: is_authenticated_from_result
- module: src.tagi.providers.utils.auth
- line: 23
+ src.tagi.composer.formats.generate_detailed_message:
+ name: generate_detailed_message
+ module: src.tagi.composer.formats
+ line: 84
+ cyclomatic_complexity: 3
+ calls_out: 6
+ calls_in: 0
+ src.tagi.cli.core_commands.stats_command:
+ name: stats_command
+ module: src.tagi.cli.core_commands
+ line: 65
+ cyclomatic_complexity: 7
+ calls_out: 15
+ calls_in: 0
+ tagi.scanner.diff.get_staged_diff:
+ name: get_staged_diff
+ module: tagi.scanner.diff
+ line: 11
cyclomatic_complexity: 1
- calls_out: 0
- calls_in: 2
- src.tagi.cli.git_operations.send_command:
- name: send_command
+ calls_out: 1
+ calls_in: 0
+ src.tagi.analyzer.dependency_graph.detect_cycles:
+ name: detect_cycles
+ module: src.tagi.analyzer.dependency_graph
+ line: 184
+ cyclomatic_complexity: 4
+ calls_out: 1
+ calls_in: 0
+ src.tagi.cli.display_utils._display_changes:
+ name: _display_changes
+ module: src.tagi.cli.display_utils
+ line: 14
+ cyclomatic_complexity: 3
+ calls_out: 8
+ calls_in: 3
+ src.tagi.cli.git_operations._is_known_tag:
+ name: _is_known_tag
module: src.tagi.cli.git_operations
- line: 90
- cyclomatic_complexity: 7
- calls_out: 26
+ line: 28
+ cyclomatic_complexity: 2
+ calls_out: 2
+ calls_in: 1
+ src.tagi.heuristics.metrics._calculate_impact:
+ name: _calculate_impact
+ module: src.tagi.heuristics.metrics
+ line: 106
+ cyclomatic_complexity: 1
+ calls_out: 3
calls_in: 1
src.tagi.hooks.run_hook:
name: run_hook
@@ -635,258 +803,209 @@ nodes:
cyclomatic_complexity: 2
calls_out: 5
calls_in: 0
- src.tagi.planner.selector.select_changes_by_tag:
- name: select_changes_by_tag
- module: src.tagi.planner.selector
- line: 8
- cyclomatic_complexity: 3
- calls_out: 0
- calls_in: 1
- src.tagi.heuristics.metrics.calculate_metrics:
- name: calculate_metrics
- module: src.tagi.heuristics.metrics
- line: 51
+ src.tagi.providers.utils.auth.is_authenticated_from_result:
+ name: is_authenticated_from_result
+ module: src.tagi.providers.utils.auth
+ line: 23
cyclomatic_complexity: 1
- calls_out: 6
- calls_in: 1
- src.tagi.scanner.status.parse_status:
- name: parse_status
- module: src.tagi.scanner.status
- line: 57
- cyclomatic_complexity: 4
calls_out: 0
- calls_in: 1
- src.tagi.heuristics.metrics._calculate_stability:
- name: _calculate_stability
- module: src.tagi.heuristics.metrics
- line: 118
+ calls_in: 2
+ tagi.utils.commands.run_command:
+ name: run_command
+ module: tagi.utils.commands
+ line: 12
cyclomatic_complexity: 1
- calls_out: 2
- calls_in: 1
- src.tagi.cli.display_utils._format_tags:
- name: _format_tags
- module: src.tagi.cli.display_utils
- line: 35
- cyclomatic_complexity: 5
- calls_out: 3
- calls_in: 4
- src.tagi.cli.git_operations._resolve_send_target:
- name: _resolve_send_target
- module: src.tagi.cli.git_operations
- line: 37
- cyclomatic_complexity: 5
- calls_out: 5
- calls_in: 1
- src.tagi.planner.grouper.group_changes:
- name: group_changes
- module: src.tagi.planner.grouper
- line: 10
+ calls_out: 1
+ calls_in: 10
+ src.tagi.composer.formats.generate_oneline_message:
+ name: generate_oneline_message
+ module: src.tagi.composer.formats
+ line: 115
cyclomatic_complexity: 4
- calls_out: 10
+ calls_out: 3
calls_in: 0
- src.tagi.heuristics.metrics._calculate_test_impact:
- name: _calculate_test_impact
- module: src.tagi.heuristics.metrics
- line: 135
- cyclomatic_complexity: 4
- calls_out: 2
- calls_in: 1
- src.tagi.utils.detect_provider.get_provider:
- name: get_provider
- module: src.tagi.utils.detect_provider
- line: 12
+ src.tagi.heuristics.tags._custom_config_tags:
+ name: _custom_config_tags
+ module: src.tagi.heuristics.tags
+ line: 49
cyclomatic_complexity: 3
calls_out: 3
- calls_in: 6
- src.tagi.heuristics.tags.apply_tags:
- name: apply_tags
- module: src.tagi.heuristics.tags
- line: 12
+ calls_in: 1
+ src.tagi.composer._tags.all_tag_values:
+ name: all_tag_values
+ module: src.tagi.composer._tags
+ line: 15
cyclomatic_complexity: 2
- calls_out: 2
+ calls_out: 1
calls_in: 0
- src.tagi.providers.utils.auth.get_auth_status_from_result:
- name: get_auth_status_from_result
- module: src.tagi.providers.utils.auth
- line: 7
+ tagi.cli.provider_commands.create_mr:
+ name: create_mr
+ module: tagi.cli.provider_commands
+ line: 61
+ cyclomatic_complexity: 4
+ calls_out: 8
+ calls_in: 0
+ src.tagi.providers.utils.pr.execute_pr_command:
+ name: execute_pr_command
+ module: src.tagi.providers.utils.pr
+ line: 35
cyclomatic_complexity: 2
calls_out: 0
calls_in: 2
- src.tagi.utils.change_filter.filter_changes_by_tag:
- name: filter_changes_by_tag
- module: src.tagi.utils.change_filter
- line: 84
- cyclomatic_complexity: 1
- calls_out: 1
- calls_in: 0
- src.tagi.providers.github.GitHubProvider.get_auth_status:
- name: get_auth_status
- module: src.tagi.providers.github
- line: 20
- cyclomatic_complexity: 1
+ tagi.cli.provider_commands._current_branch:
+ name: _current_branch
+ module: tagi.cli.provider_commands
+ line: 27
+ cyclomatic_complexity: 2
calls_out: 2
+ calls_in: 1
+ src.tagi.cli.main.setup_logging:
+ name: setup_logging
+ module: src.tagi.cli.main
+ line: 37
+ cyclomatic_complexity: 2
+ calls_out: 4
calls_in: 0
- src.tagi.scanner.files.count_lines_changed:
- name: count_lines_changed
- module: src.tagi.scanner.files
- line: 6
- cyclomatic_complexity: 7
+ src.tagi.hooks.list_hooks:
+ name: list_hooks
+ module: src.tagi.hooks
+ line: 86
+ cyclomatic_complexity: 5
calls_out: 7
+ calls_in: 0
+ tagi.cli.provider_commands._pr_spec:
+ name: _pr_spec
+ module: tagi.cli.provider_commands
+ line: 36
+ cyclomatic_complexity: 1
+ calls_out: 2
+ calls_in: 2
+ src.tagi.config.Config.should_ignore:
+ name: should_ignore
+ module: src.tagi.config
+ line: 111
+ cyclomatic_complexity: 2
+ calls_out: 2
calls_in: 1
- src.tagi.composer.formats._detailed_file_lines:
- name: _detailed_file_lines
- module: src.tagi.composer.formats
- line: 75
- cyclomatic_complexity: 3
- calls_out: 1
- calls_in: 1
- src.tagi.cli.display_utils._display_changes:
- name: _display_changes
- module: src.tagi.cli.display_utils
- line: 14
+ src.tagi.cli.main._resolve_send_target:
+ name: _resolve_send_target
+ module: src.tagi.cli.main
+ line: 66
+ cyclomatic_complexity: 5
+ calls_out: 5
+ calls_in: 0
+ src.tagi.utils.logger.setup_logger:
+ name: setup_logger
+ module: src.tagi.utils.logger
+ line: 9
+ cyclomatic_complexity: 4
+ calls_out: 15
+ calls_in: 2
+ src.tagi.cli.scan_utils.scan_and_tag:
+ name: scan_and_tag
+ module: src.tagi.cli.scan_utils
+ line: 10
cyclomatic_complexity: 3
- calls_out: 8
- calls_in: 3
- src.tagi.planner.grouper.group_by_tag:
- name: group_by_tag
- module: src.tagi.planner.grouper
- line: 37
+ calls_out: 6
+ calls_in: 11
+ tagi.scanner.diff.get_diff:
+ name: get_diff
+ module: tagi.scanner.diff
+ line: 6
cyclomatic_complexity: 1
calls_out: 1
- calls_in: 0
- src.tagi.analyzer.metrics.MetricsCollector.collect:
- name: collect
- module: src.tagi.analyzer.metrics
- line: 25
- cyclomatic_complexity: 10
- calls_out: 5
- calls_in: 0
- src.tagi.utils.risk.total_lines_changed:
- name: total_lines_changed
- module: src.tagi.utils.risk
+ calls_in: 3
+ src.tagi.heuristics.rules._get_config_attr:
+ name: _get_config_attr
+ module: src.tagi.heuristics.rules
line: 8
- cyclomatic_complexity: 2
- calls_out: 1
- calls_in: 8
- src.tagi.cli.core_commands.list_command:
- name: list_command
- module: src.tagi.cli.core_commands
- line: 40
cyclomatic_complexity: 1
calls_out: 2
- calls_in: 0
- src.tagi.providers.gitlab.GitLabProvider.is_authenticated:
- name: is_authenticated
- module: src.tagi.providers.gitlab
- line: 16
+ calls_in: 2
+ src.tagi.heuristics.metrics._calculate_stability:
+ name: _calculate_stability
+ module: src.tagi.heuristics.metrics
+ line: 117
cyclomatic_complexity: 1
calls_out: 2
+ calls_in: 1
+ src.tagi.cli.utility_commands.draft_command:
+ name: draft_command
+ module: src.tagi.cli.utility_commands
+ line: 180
+ cyclomatic_complexity: 4
+ calls_out: 17
calls_in: 0
- src.tagi.planner.sorter.sort_by_complexity:
- name: sort_by_complexity
- module: src.tagi.planner.sorter
- line: 7
- cyclomatic_complexity: 1
- calls_out: 4
- calls_in: 2
- src.tagi.cli.provider_commands.create_pr:
+ tagi.providers.github.GitHubProvider.create_pr:
name: create_pr
- module: src.tagi.cli.provider_commands
- line: 42
- cyclomatic_complexity: 4
- calls_out: 8
+ module: tagi.providers.github
+ line: 30
+ cyclomatic_complexity: 1
+ calls_out: 3
calls_in: 0
- src.tagi.analyzer.dependency_graph._cycle_from:
- name: _cycle_from
- module: src.tagi.analyzer.dependency_graph
- line: 152
+ src.tagi.heuristics.metrics.calculate_metrics:
+ name: calculate_metrics
+ module: src.tagi.heuristics.metrics
+ line: 50
cyclomatic_complexity: 1
- calls_out: 1
+ calls_out: 6
calls_in: 1
- src.tagi.utils.change_stats.calculate_tag_statistics:
- name: calculate_tag_statistics
- module: src.tagi.utils.change_stats
- line: 17
+ src.tagi.cli.core_commands.list_groups_command:
+ name: list_groups_command
+ module: src.tagi.cli.core_commands
+ line: 33
cyclomatic_complexity: 1
calls_out: 2
- calls_in: 3
- src.tagi.utils.publish_helpers.detect_and_get_provider:
- name: detect_and_get_provider
- module: src.tagi.utils.publish_helpers
- line: 10
+ calls_in: 0
+ tagi.executor.git.GitExecutor._run_command:
+ name: _run_command
+ module: tagi.executor.git
+ line: 15
cyclomatic_complexity: 1
calls_out: 1
calls_in: 0
- src.tagi.cli.core_commands.stats_command:
- name: stats_command
- module: src.tagi.cli.core_commands
- line: 65
- cyclomatic_complexity: 7
- calls_out: 15
- calls_in: 0
- src.tagi.composer.commit_message.generate_commit_message:
- name: generate_commit_message
- module: src.tagi.composer.commit_message
- line: 36
- cyclomatic_complexity: 5
- calls_out: 8
- calls_in: 1
- src.tagi.cli.publishing_commands.deploy_command:
- name: deploy_command
- module: src.tagi.cli.publishing_commands
- line: 96
- cyclomatic_complexity: 5
- calls_out: 22
+ tagi.providers.gitlab.GitLabProvider.get_auth_status:
+ name: get_auth_status
+ module: tagi.providers.gitlab
+ line: 20
+ cyclomatic_complexity: 1
+ calls_out: 2
calls_in: 0
- src.tagi.utils.summary_helpers.build_statistics_section:
- name: build_statistics_section
- module: src.tagi.utils.summary_helpers
- line: 31
+ tagi.providers.gitlab.GitLabProvider.create_pr:
+ name: create_pr
+ module: tagi.providers.gitlab
+ line: 39
cyclomatic_complexity: 1
- calls_out: 4
+ calls_out: 3
calls_in: 0
- src.tagi.cli.main._ensure_tag_prefix:
+ src.tagi.cli.publishing_commands._ensure_tag_prefix:
name: _ensure_tag_prefix
- module: src.tagi.cli.main
- line: 50
+ module: src.tagi.cli.publishing_commands
+ line: 16
cyclomatic_complexity: 2
calls_out: 1
- calls_in: 1
- src.tagi.utils.change_filter.filter_changes_by_tags_all:
- name: filter_changes_by_tags_all
- module: src.tagi.utils.change_filter
- line: 110
- cyclomatic_complexity: 1
- calls_out: 1
- calls_in: 0
- src.tagi.cli.core_commands.scan_command:
- name: scan_command
- module: src.tagi.cli.core_commands
- line: 14
- cyclomatic_complexity: 3
- calls_out: 7
- calls_in: 0
- src.tagi.composer._tags.all_tags:
- name: all_tags
- module: src.tagi.composer._tags
- line: 8
+ calls_in: 2
+ src.tagi.analyzer.dependency_graph._dfs_visit:
+ name: _dfs_visit
+ module: src.tagi.analyzer.dependency_graph
+ line: 158
+ cyclomatic_complexity: 5
+ calls_out: 8
+ calls_in: 2
+ src.tagi.analyzer.dependency_graph._reconstruct_critical_path:
+ name: _reconstruct_critical_path
+ module: src.tagi.analyzer.dependency_graph
+ line: 244
cyclomatic_complexity: 3
- calls_out: 2
- calls_in: 3
- src.tagi.heuristics.scoring._lines_risk_weight:
- name: _lines_risk_weight
- module: src.tagi.heuristics.scoring
- line: 29
- cyclomatic_complexity: 1
- calls_out: 1
+ calls_out: 4
+ calls_in: 1
+ tagi.scanner.status.parse_status:
+ name: parse_status
+ module: tagi.scanner.status
+ line: 51
+ cyclomatic_complexity: 4
+ calls_out: 0
calls_in: 1
- src.tagi.cli.git_operations.auto_command:
- name: auto_command
- module: src.tagi.cli.git_operations
- line: 148
- cyclomatic_complexity: 1
- calls_out: 8
- calls_in: 0
src.tagi.cli.git_operations._filter_by_tag:
name: _filter_by_tag
module: src.tagi.cli.git_operations
@@ -894,70 +1013,37 @@ nodes:
cyclomatic_complexity: 3
calls_out: 4
calls_in: 1
- src.tagi.utils.change_filter._normalize_tag:
- name: _normalize_tag
- module: src.tagi.utils.change_filter
- line: 14
- cyclomatic_complexity: 2
- calls_out: 1
- calls_in: 2
- src.tagi.utils.detect_provider.detect_git_provider:
- name: detect_git_provider
- module: src.tagi.utils.detect_provider
- line: 29
- cyclomatic_complexity: 4
- calls_out: 2
- calls_in: 1
- src.tagi.heuristics.rules.get_custom_rules:
- name: get_custom_rules
- module: src.tagi.heuristics.rules
- line: 13
+ src.tagi.hooks._hooks_dir:
+ name: _hooks_dir
+ module: src.tagi.hooks
+ line: 9
cyclomatic_complexity: 1
calls_out: 1
- calls_in: 0
- src.tagi.analyzer.dependency_graph._next_critical_node:
- name: _next_critical_node
- module: src.tagi.analyzer.dependency_graph
- line: 226
- cyclomatic_complexity: 5
- calls_out: 2
- calls_in: 1
- src.tagi.composer._tags.infer_scope:
- name: infer_scope
- module: src.tagi.composer._tags
- line: 41
- cyclomatic_complexity: 7
- calls_out: 2
- calls_in: 1
- src.tagi.planner.sorter.group_by_complexity:
- name: group_by_complexity
- module: src.tagi.planner.sorter
- line: 80
- cyclomatic_complexity: 5
- calls_out: 7
- calls_in: 0
- src.tagi.utils.change_stats.display_statistics_table:
- name: display_statistics_table
- module: src.tagi.utils.change_stats
- line: 29
- cyclomatic_complexity: 1
- calls_out: 12
calls_in: 4
- src.tagi.providers.github.GitHubProvider.create_pr:
- name: create_pr
- module: src.tagi.providers.github
- line: 32
- cyclomatic_complexity: 1
- calls_out: 3
+ src.tagi.analyzer.dependency_graph.build_dependency_graph:
+ name: build_dependency_graph
+ module: src.tagi.analyzer.dependency_graph
+ line: 54
+ cyclomatic_complexity: 3
+ calls_out: 4
calls_in: 0
- src.tagi.heuristics.scoring._change_type_risk_weight:
- name: _change_type_risk_weight
- module: src.tagi.heuristics.scoring
- line: 39
+ src.tagi.planner.sorter.sort_by_complexity:
+ name: sort_by_complexity
+ module: src.tagi.planner.sorter
+ line: 7
cyclomatic_complexity: 1
- calls_out: 1
- calls_in: 1
+ calls_out: 4
+ calls_in: 2
edges:
+- caller: src.tagi.config.Config.get_tag_for_path
+ callee: src.tagi.utils.paths.path_matches
+ call_type: resolved
+- caller: src.tagi.config.Config.get_heuristics_for_path
+ callee: src.tagi.utils.paths.path_matches
+ call_type: resolved
+- caller: src.tagi.config.Config.should_ignore
+ callee: src.tagi.utils.paths.path_matches
+ call_type: resolved
- caller: src.tagi.hooks._pre_commit_hook
callee: src.tagi.hooks._hooks_dir
call_type: resolved
@@ -1027,6 +1113,12 @@ edges:
- caller: src.tagi.planner.grouper.group_by_tag
callee: src.tagi.planner.selector.select_changes_by_tag
call_type: resolved
+- caller: tagi.planner.branch_grouper.group_by_branch
+ callee: tagi.utils.commands.run_command
+ call_type: resolved
+- caller: tagi.planner.branch_grouper.get_branch_info
+ callee: tagi.utils.commands.run_command
+ call_type: resolved
- caller: src.tagi.cli.git_operations._is_known_tag
callee: src.tagi.cli.git_operations._ensure_tag_prefix
call_type: resolved
@@ -1040,7 +1132,7 @@ edges:
callee: src.tagi.cli.git_operations._ensure_tag_prefix
call_type: resolved
- caller: src.tagi.cli.git_operations._execute_git_operations
- callee: src.tagi.utils.detect_provider.get_provider
+ callee: tagi.utils.detect_provider.get_provider
call_type: resolved
- caller: src.tagi.cli.git_operations.send_command
callee: src.tagi.cli.git_operations._resolve_send_target
@@ -1076,25 +1168,28 @@ edges:
callee: src.tagi.cli.scan_utils.scan_and_tag
call_type: resolved
- caller: src.tagi.cli.inspection_commands.file_command
- callee: src.tagi.scanner.diff.get_diff
+ callee: tagi.scanner.diff.get_diff
call_type: resolved
-- caller: src.tagi.cli.provider_commands.detect_provider_command
- callee: src.tagi.utils.detect_provider.get_provider
+- caller: tagi.cli.provider_commands.detect_provider_command
+ callee: tagi.utils.detect_provider.get_provider
call_type: resolved
-- caller: src.tagi.cli.provider_commands._pr_spec
- callee: src.tagi.cli.provider_commands._current_branch
+- caller: tagi.cli.provider_commands._current_branch
+ callee: tagi.utils.commands.run_command
call_type: resolved
-- caller: src.tagi.cli.provider_commands.create_pr
- callee: src.tagi.utils.detect_provider.get_provider
+- caller: tagi.cli.provider_commands._pr_spec
+ callee: tagi.cli.provider_commands._current_branch
call_type: resolved
-- caller: src.tagi.cli.provider_commands.create_pr
- callee: src.tagi.cli.provider_commands._pr_spec
+- caller: tagi.cli.provider_commands.create_pr
+ callee: tagi.utils.detect_provider.get_provider
call_type: resolved
-- caller: src.tagi.cli.provider_commands.create_mr
- callee: src.tagi.utils.detect_provider.get_provider
+- caller: tagi.cli.provider_commands.create_pr
+ callee: tagi.cli.provider_commands._pr_spec
call_type: resolved
-- caller: src.tagi.cli.provider_commands.create_mr
- callee: src.tagi.cli.provider_commands._pr_spec
+- caller: tagi.cli.provider_commands.create_mr
+ callee: tagi.utils.detect_provider.get_provider
+ call_type: resolved
+- caller: tagi.cli.provider_commands.create_mr
+ callee: tagi.cli.provider_commands._pr_spec
call_type: resolved
- caller: src.tagi.cli.core_commands.scan_command
callee: src.tagi.cli.scan_utils.scan_and_tag
@@ -1151,7 +1246,7 @@ edges:
callee: src.tagi.cli.main._is_known_tag
call_type: resolved
- caller: src.tagi.cli.main.detect_provider
- callee: src.tagi.cli.provider_commands.detect_provider_command
+ callee: tagi.cli.provider_commands.detect_provider_command
call_type: resolved
- caller: src.tagi.cli.publishing_commands.publish_command
callee: src.tagi.cli.scan_utils.scan_and_tag
@@ -1189,38 +1284,53 @@ edges:
- caller: src.tagi.cli.utility_commands.draft_command
callee: src.tagi.composer.commit_message.generate_commit_message
call_type: resolved
-- caller: src.tagi.providers.gitlab.GitLabProvider.is_authenticated
+- caller: tagi.providers.base.BaseProvider._run_command
+ callee: tagi.utils.commands.run_command
+ call_type: resolved
+- caller: tagi.providers.gitlab.GitLabProvider.is_authenticated
callee: src.tagi.providers.utils.auth.is_authenticated_from_result
call_type: resolved
-- caller: src.tagi.providers.gitlab.GitLabProvider.get_auth_status
+- caller: tagi.providers.gitlab.GitLabProvider.get_auth_status
callee: src.tagi.providers.utils.auth.get_auth_status_from_result
call_type: resolved
-- caller: src.tagi.providers.gitlab.GitLabProvider.create_pr
+- caller: tagi.providers.gitlab.GitLabProvider.create_pr
callee: src.tagi.providers.utils.pr.execute_pr_command
call_type: resolved
-- caller: src.tagi.providers.gitlab.GitLabProvider.create_pr
+- caller: tagi.providers.gitlab.GitLabProvider.create_pr
callee: src.tagi.providers.utils.pr.build_pr_command
call_type: resolved
-- caller: src.tagi.providers.github.GitHubProvider.is_authenticated
+- caller: tagi.providers.github.GitHubProvider.is_authenticated
callee: src.tagi.providers.utils.auth.is_authenticated_from_result
call_type: resolved
-- caller: src.tagi.providers.github.GitHubProvider.get_auth_status
+- caller: tagi.providers.github.GitHubProvider.get_auth_status
callee: src.tagi.providers.utils.auth.get_auth_status_from_result
call_type: resolved
-- caller: src.tagi.providers.github.GitHubProvider.create_pr
+- caller: tagi.providers.github.GitHubProvider.create_pr
callee: src.tagi.providers.utils.pr.execute_pr_command
call_type: resolved
-- caller: src.tagi.providers.github.GitHubProvider.create_pr
+- caller: tagi.providers.github.GitHubProvider.create_pr
callee: src.tagi.providers.utils.pr.build_pr_command
call_type: resolved
-- caller: src.tagi.scanner.status.scan_repo
+- caller: tagi.scanner.files.count_lines_changed
+ callee: tagi.utils.commands.run_command
+ call_type: resolved
+- caller: tagi.scanner.status.scan_repo
+ callee: tagi.utils.commands.run_command
+ call_type: resolved
+- caller: tagi.scanner.status.scan_repo
callee: src.tagi.config.load_config
call_type: resolved
-- caller: src.tagi.scanner.status.scan_repo
+- caller: tagi.scanner.status.scan_repo
callee: src.tagi.config.Config.should_ignore
call_type: resolved
-- caller: src.tagi.scanner.status.scan_repo
- callee: src.tagi.scanner.status.parse_status
+- caller: tagi.scanner.status.scan_repo
+ callee: tagi.scanner.status.parse_status
+ call_type: resolved
+- caller: tagi.scanner.diff.get_diff
+ callee: tagi.utils.commands.run_command
+ call_type: resolved
+- caller: tagi.scanner.diff.get_staged_diff
+ callee: tagi.utils.commands.run_command
call_type: resolved
- caller: src.tagi.heuristics.scoring.calculate_risk_score
callee: src.tagi.heuristics.scoring._lines_risk_weight
@@ -1231,6 +1341,12 @@ edges:
- caller: src.tagi.heuristics.scoring.calculate_risk_score
callee: src.tagi.heuristics.scoring._change_type_risk_weight
call_type: resolved
+- caller: src.tagi.heuristics.metrics._extension_complexity_weight
+ callee: src.tagi.utils.paths.path_endswith
+ call_type: resolved
+- caller: src.tagi.heuristics.metrics._extension_impact_weight
+ callee: src.tagi.utils.paths.path_endswith
+ call_type: resolved
- caller: src.tagi.heuristics.metrics.calculate_metrics
callee: src.tagi.heuristics.metrics._calculate_complexity
call_type: resolved
@@ -1252,6 +1368,15 @@ edges:
- caller: src.tagi.heuristics.metrics._calculate_impact
callee: src.tagi.heuristics.metrics._extension_impact_weight
call_type: resolved
+- caller: src.tagi.heuristics.metrics._calculate_test_impact
+ callee: src.tagi.utils.paths.path_endswith
+ call_type: resolved
+- caller: src.tagi.heuristics.metrics._calculate_test_impact
+ callee: src.tagi.utils.paths.path_matches
+ call_type: resolved
+- caller: src.tagi.heuristics.metrics._calculate_dependency_depth
+ callee: src.tagi.utils.paths.path_endswith
+ call_type: resolved
- caller: src.tagi.heuristics.tags.apply_tags
callee: src.tagi.config.load_config
call_type: resolved
@@ -1262,7 +1387,7 @@ edges:
callee: src.tagi.heuristics.tags._custom_config_tags
call_type: resolved
- caller: src.tagi.heuristics.tags._tag_change
- callee: src.tagi.scanner.files.count_lines_changed
+ callee: tagi.scanner.files.count_lines_changed
call_type: resolved
- caller: src.tagi.heuristics.tags._tag_change
callee: src.tagi.heuristics.metrics.calculate_metrics
@@ -1276,6 +1401,9 @@ edges:
- caller: src.tagi.heuristics.tags._tag_change
callee: src.tagi.heuristics.tags._size_tags
call_type: resolved
+- caller: src.tagi.heuristics.tags.apply_path_tags
+ callee: src.tagi.utils.paths.path_matches
+ call_type: resolved
- caller: src.tagi.heuristics.rules._get_config_attr
callee: src.tagi.config.load_config
call_type: resolved
@@ -1333,6 +1461,9 @@ edges:
- caller: src.tagi.composer._tags.summary_tag
callee: src.tagi.composer._tags.all_tags
call_type: resolved
+- caller: tagi.executor.git.GitExecutor._run_command
+ callee: tagi.utils.commands.run_command
+ call_type: resolved
- caller: src.tagi.utils.summary_helpers.build_statistics_section
callee: src.tagi.utils.risk.total_lines_changed
call_type: resolved
@@ -1340,7 +1471,7 @@ edges:
callee: src.tagi.utils.risk.average_risk
call_type: resolved
- caller: src.tagi.utils.publish_helpers.detect_and_get_provider
- callee: src.tagi.utils.detect_provider.get_provider
+ callee: tagi.utils.detect_provider.get_provider
call_type: resolved
- caller: src.tagi.utils.publish_helpers.create_publish_group
callee: src.tagi.utils.risk.total_lines_changed
@@ -1348,8 +1479,11 @@ edges:
- caller: src.tagi.utils.publish_helpers.create_publish_group
callee: src.tagi.utils.risk.average_risk
call_type: resolved
-- caller: src.tagi.utils.detect_provider.get_provider
- callee: src.tagi.utils.detect_provider.detect_git_provider
+- caller: tagi.utils.detect_provider.get_provider
+ callee: tagi.utils.detect_provider.detect_git_provider
+ call_type: resolved
+- caller: tagi.utils.detect_provider.detect_git_provider
+ callee: tagi.utils.commands.run_command
call_type: resolved
- caller: src.tagi.utils.send_helpers.create_change_group
callee: src.tagi.utils.risk.total_lines_changed
@@ -1363,6 +1497,12 @@ edges:
- caller: src.tagi.utils.change_stats.calculate_tag_statistics
callee: src.tagi.utils.risk.average_risk
call_type: resolved
+- caller: src.tagi.utils.paths.path_matches
+ callee: src.tagi.utils.paths.path_key
+ call_type: resolved
+- caller: src.tagi.utils.paths.path_endswith
+ callee: src.tagi.utils.paths.path_key
+ call_type: resolved
- caller: src.tagi.utils.change_filter._resolve_tag_enums
callee: src.tagi.utils.change_filter._normalize_tag
call_type: resolved
@@ -1436,12 +1576,6 @@ modules:
- src.tagi.cli.main._resolve_send_target
- src.tagi.cli.main.detect_provider
- src.tagi.cli.main.setup_logging
- src.tagi.cli.provider_commands:
- - src.tagi.cli.provider_commands._current_branch
- - src.tagi.cli.provider_commands._pr_spec
- - src.tagi.cli.provider_commands.create_mr
- - src.tagi.cli.provider_commands.create_pr
- - src.tagi.cli.provider_commands.detect_provider_command
src.tagi.cli.publishing_commands:
- src.tagi.cli.publishing_commands._ensure_tag_prefix
- src.tagi.cli.publishing_commands.deploy_command
@@ -1475,6 +1609,8 @@ modules:
src.tagi.composer.summary:
- src.tagi.composer.summary.generate_summary
src.tagi.config:
+ - src.tagi.config.Config.get_heuristics_for_path
+ - src.tagi.config.Config.get_tag_for_path
- src.tagi.config.Config.should_ignore
- src.tagi.config.load_config
src.tagi.heuristics.metrics:
@@ -1518,27 +1654,12 @@ modules:
src.tagi.planner.sorter:
- src.tagi.planner.sorter.group_by_complexity
- src.tagi.planner.sorter.sort_by_complexity
- src.tagi.providers.github:
- - src.tagi.providers.github.GitHubProvider.create_pr
- - src.tagi.providers.github.GitHubProvider.get_auth_status
- - src.tagi.providers.github.GitHubProvider.is_authenticated
- src.tagi.providers.gitlab:
- - src.tagi.providers.gitlab.GitLabProvider.create_pr
- - src.tagi.providers.gitlab.GitLabProvider.get_auth_status
- - src.tagi.providers.gitlab.GitLabProvider.is_authenticated
src.tagi.providers.utils.auth:
- src.tagi.providers.utils.auth.get_auth_status_from_result
- src.tagi.providers.utils.auth.is_authenticated_from_result
src.tagi.providers.utils.pr:
- src.tagi.providers.utils.pr.build_pr_command
- src.tagi.providers.utils.pr.execute_pr_command
- src.tagi.scanner.diff:
- - src.tagi.scanner.diff.get_diff
- src.tagi.scanner.files:
- - src.tagi.scanner.files.count_lines_changed
- src.tagi.scanner.status:
- - src.tagi.scanner.status.parse_status
- - src.tagi.scanner.status.scan_repo
src.tagi.utils.change_filter:
- src.tagi.utils.change_filter._changes_matching_all
- src.tagi.utils.change_filter._changes_matching_any
@@ -1552,11 +1673,12 @@ modules:
src.tagi.utils.change_stats:
- src.tagi.utils.change_stats.calculate_tag_statistics
- src.tagi.utils.change_stats.display_statistics_table
- src.tagi.utils.detect_provider:
- - src.tagi.utils.detect_provider.detect_git_provider
- - src.tagi.utils.detect_provider.get_provider
src.tagi.utils.logger:
- src.tagi.utils.logger.setup_logger
+ src.tagi.utils.paths:
+ - src.tagi.utils.paths.path_endswith
+ - src.tagi.utils.paths.path_key
+ - src.tagi.utils.paths.path_matches
src.tagi.utils.publish_helpers:
- src.tagi.utils.publish_helpers.create_publish_group
- src.tagi.utils.publish_helpers.detect_and_get_provider
@@ -1567,6 +1689,40 @@ modules:
- src.tagi.utils.send_helpers.create_change_group
src.tagi.utils.summary_helpers:
- src.tagi.utils.summary_helpers.build_statistics_section
+ tagi.cli.provider_commands:
+ - tagi.cli.provider_commands._current_branch
+ - tagi.cli.provider_commands._pr_spec
+ - tagi.cli.provider_commands.create_mr
+ - tagi.cli.provider_commands.create_pr
+ - tagi.cli.provider_commands.detect_provider_command
+ tagi.executor.git:
+ - tagi.executor.git.GitExecutor._run_command
+ tagi.planner.branch_grouper:
+ - tagi.planner.branch_grouper.get_branch_info
+ - tagi.planner.branch_grouper.group_by_branch
+ tagi.providers.base:
+ - tagi.providers.base.BaseProvider._run_command
+ tagi.providers.github:
+ - tagi.providers.github.GitHubProvider.create_pr
+ - tagi.providers.github.GitHubProvider.get_auth_status
+ - tagi.providers.github.GitHubProvider.is_authenticated
+ tagi.providers.gitlab:
+ - tagi.providers.gitlab.GitLabProvider.create_pr
+ - tagi.providers.gitlab.GitLabProvider.get_auth_status
+ - tagi.providers.gitlab.GitLabProvider.is_authenticated
+ tagi.scanner.diff:
+ - tagi.scanner.diff.get_diff
+ - tagi.scanner.diff.get_staged_diff
+ tagi.scanner.files:
+ - tagi.scanner.files.count_lines_changed
+ tagi.scanner.status:
+ - tagi.scanner.status.parse_status
+ - tagi.scanner.status.scan_repo
+ tagi.utils.commands:
+ - tagi.utils.commands.run_command
+ tagi.utils.detect_provider:
+ - tagi.utils.detect_provider.detect_git_provider
+ - tagi.utils.detect_provider.get_provider
entry_points:
- src.tagi.analyzer.dependency_graph._LevelOrder.__init__
- src.tagi.analyzer.dependency_graph._LevelOrder._drain_level
@@ -1592,8 +1748,6 @@ entry_points:
- src.tagi.cli.main._resolve_send_target
- src.tagi.cli.main.detect_provider
- src.tagi.cli.main.setup_logging
-- src.tagi.cli.provider_commands.create_mr
-- src.tagi.cli.provider_commands.create_pr
- src.tagi.cli.publishing_commands.deploy_command
- src.tagi.cli.publishing_commands.publish_command
- src.tagi.cli.utility_commands.draft_command
@@ -1618,15 +1772,6 @@ entry_points:
- src.tagi.config.Config.get_tag_for_path
- src.tagi.config.Config.get_tags_for_path
- src.tagi.config.Config.get_template
-- src.tagi.executor.git.GitExecutor.__init__
-- src.tagi.executor.git.GitExecutor._run_command
-- src.tagi.executor.git.GitExecutor.add
-- src.tagi.executor.git.GitExecutor.commit
-- src.tagi.executor.git.GitExecutor.get_current_branch
-- src.tagi.executor.git.GitExecutor.get_remote_url
-- src.tagi.executor.git.GitExecutor.has_staged_changes
-- src.tagi.executor.git.GitExecutor.push
-- src.tagi.executor.git.GitExecutor.status
- src.tagi.executor.publish.PublishExecutor.__init__
- src.tagi.executor.publish.PublishExecutor.dry_run
- src.tagi.executor.publish.PublishExecutor.publish
@@ -1646,8 +1791,6 @@ entry_points:
- src.tagi.llm.llx_adapter.LlxAdapter.improve_message
- src.tagi.llm.llx_adapter.LlxAdapter.is_available
- src.tagi.models.change.ChangeMetrics.to_vector
-- src.tagi.planner.branch_grouper.get_branch_info
-- src.tagi.planner.branch_grouper.group_by_branch
- src.tagi.planner.grouper.group_by_risk
- src.tagi.planner.grouper.group_by_tag
- src.tagi.planner.grouper.group_changes
@@ -1659,25 +1802,7 @@ entry_points:
- src.tagi.planner.selector.select_small_changes
- src.tagi.planner.sorter.group_by_complexity
- src.tagi.planner.sorter.sort_by_tag_priority
-- src.tagi.providers.base.BaseProvider.__init__
-- src.tagi.providers.base.BaseProvider._check_git_remote_for_provider
-- src.tagi.providers.base.BaseProvider._get_git_remote_url
-- src.tagi.providers.base.BaseProvider._run_command
-- src.tagi.providers.base.BaseProvider.create_pr
-- src.tagi.providers.base.BaseProvider.detect_remote
-- src.tagi.providers.base.BaseProvider.get_auth_status
-- src.tagi.providers.base.BaseProvider.is_authenticated
- src.tagi.providers.detector.detect_provider
-- src.tagi.providers.github.GitHubProvider.create_pr
-- src.tagi.providers.github.GitHubProvider.detect_remote
-- src.tagi.providers.github.GitHubProvider.get_auth_status
-- src.tagi.providers.github.GitHubProvider.get_token
-- src.tagi.providers.github.GitHubProvider.is_authenticated
-- src.tagi.providers.gitlab.GitLabProvider.create_pr
-- src.tagi.providers.gitlab.GitLabProvider.detect_remote
-- src.tagi.providers.gitlab.GitLabProvider.get_auth_status
-- src.tagi.providers.gitlab.GitLabProvider.get_configured_host
-- src.tagi.providers.gitlab.GitLabProvider.is_authenticated
- src.tagi.providers.koru.KoruProvider.__init__
- src.tagi.providers.koru.KoruProvider._deployment_recommendations
- src.tagi.providers.koru.KoruProvider._make_api_request
@@ -1688,8 +1813,6 @@ entry_points:
- src.tagi.providers.koru.KoruProvider.get_topology
- src.tagi.providers.koru.KoruProvider.is_available
- src.tagi.providers.koru.KoruProvider.run_quality_gates
-- src.tagi.scanner.diff.get_staged_diff
-- src.tagi.scanner.status.scan_repo
- src.tagi.ui.design_tokens.DesignTokens.__init__
- src.tagi.ui.design_tokens.DesignTokens.get_css_string
- src.tagi.ui.design_tokens.DesignTokens.get_css_variables
@@ -1705,3 +1828,36 @@ entry_points:
- src.tagi.utils.summary_helpers.build_report_header
- src.tagi.utils.summary_helpers.build_statistics_section
- src.tagi.utils.summary_helpers.build_tag_distribution_section
+- tagi.cli.provider_commands.create_mr
+- tagi.cli.provider_commands.create_pr
+- tagi.executor.git.GitExecutor.__init__
+- tagi.executor.git.GitExecutor._run_command
+- tagi.executor.git.GitExecutor.add
+- tagi.executor.git.GitExecutor.commit
+- tagi.executor.git.GitExecutor.get_current_branch
+- tagi.executor.git.GitExecutor.get_remote_url
+- tagi.executor.git.GitExecutor.has_staged_changes
+- tagi.executor.git.GitExecutor.push
+- tagi.executor.git.GitExecutor.status
+- tagi.planner.branch_grouper.get_branch_info
+- tagi.planner.branch_grouper.group_by_branch
+- tagi.providers.base.BaseProvider.__init__
+- tagi.providers.base.BaseProvider._check_git_remote_for_provider
+- tagi.providers.base.BaseProvider._get_git_remote_url
+- tagi.providers.base.BaseProvider._run_command
+- tagi.providers.base.BaseProvider.create_pr
+- tagi.providers.base.BaseProvider.detect_remote
+- tagi.providers.base.BaseProvider.get_auth_status
+- tagi.providers.base.BaseProvider.is_authenticated
+- tagi.providers.github.GitHubProvider.create_pr
+- tagi.providers.github.GitHubProvider.detect_remote
+- tagi.providers.github.GitHubProvider.get_auth_status
+- tagi.providers.github.GitHubProvider.get_token
+- tagi.providers.github.GitHubProvider.is_authenticated
+- tagi.providers.gitlab.GitLabProvider.create_pr
+- tagi.providers.gitlab.GitLabProvider.detect_remote
+- tagi.providers.gitlab.GitLabProvider.get_auth_status
+- tagi.providers.gitlab.GitLabProvider.get_configured_host
+- tagi.providers.gitlab.GitLabProvider.is_authenticated
+- tagi.scanner.diff.get_staged_diff
+- tagi.scanner.status.scan_repo
diff --git a/project/compact_flow.mmd b/project/compact_flow.mmd
index 79c3aeb..c0d95b7 100644
--- a/project/compact_flow.mmd
+++ b/project/compact_flow.mmd
@@ -1,3 +1,19 @@
flowchart TD
-%% generated in 0.00s
- src__tagi["src.tagi
225 funcs"]
+%% generated in 0.01s
+ src__tagi["src.tagi
187 funcs"]
+ tagi__cli["tagi.cli
5 funcs"]
+ tagi__executor["tagi.executor
9 funcs"]
+ tagi__planner["tagi.planner
2 funcs"]
+ tagi__providers["tagi.providers
18 funcs"]
+ tagi__scanner["tagi.scanner
5 funcs"]
+ tagi__utils["tagi.utils
3 funcs"]
+ tagi__providers ==>|8| src__tagi
+ src__tagi ==>|4| tagi__scanner
+ tagi__cli ==>|4| tagi__utils
+ tagi__scanner ==>|4| tagi__utils
+ src__tagi -->|3| tagi__utils
+ tagi__planner -->|2| tagi__utils
+ tagi__scanner -->|2| src__tagi
+ src__tagi -->|1| tagi__cli
+ tagi__providers -->|1| tagi__utils
+ tagi__executor -->|1| tagi__utils
diff --git a/project/duplication.toon.yaml b/project/duplication.toon.yaml
index 7da8a6a..84fbf61 100644
--- a/project/duplication.toon.yaml
+++ b/project/duplication.toon.yaml
@@ -1,110 +1,61 @@
-# redup/duplication | 10 groups | 47f 3609L | 2026-05-26
+# redup/duplication | 7 groups | 53f 4261L | 2026-09-19
SUMMARY:
- files_scanned: 47
- total_lines: 3609
- dup_groups: 10
- dup_fragments: 20
+ files_scanned: 53
+ total_lines: 4261
+ dup_groups: 7
+ dup_fragments: 16
saved_lines: 77
- scan_ms: 2213
+ scan_ms: 661
-HOTSPOTS[7] (files with most duplication):
- src/tagi/utils/inspect_helpers.py dup=54L groups=2 frags=3 (1.5%)
- src/tagi/cli.py dup=39L groups=3 frags=5 (1.1%)
- src/tagi/providers/github.py dup=17L groups=4 frags=4 (0.5%)
- src/tagi/providers/gitlab.py dup=17L groups=4 frags=4 (0.5%)
- src/tagi/utils/publish_helpers.py dup=12L groups=1 frags=1 (0.3%)
- src/tagi/providers/detector.py dup=9L groups=1 frags=1 (0.2%)
- src/tagi/heuristics/rules.py dup=6L groups=1 frags=2 (0.2%)
+DUPLICATES[7] (ranked by impact):
+ [7418edf7ccbdf120] EXAC _ensure_tag_prefix L=8 N=4 saved=24 sim=1.00
+ src/tagi/cli/main.py:0-7 (_ensure_tag_prefix)
+ src/tagi/cli/git_operations.py:0-7 (_ensure_tag_prefix)
+ src/tagi/cli/publishing_commands.py:0-7 (_ensure_tag_prefix)
+ src/tagi/cli/utility_commands.py:0-7 (_ensure_tag_prefix)
+ [b657bfb2319252a0] EXAC _resolve_send_target L=19 N=2 saved=19 sim=1.00
+ src/tagi/cli/main.py:0-18 (_resolve_send_target)
+ src/tagi/cli/git_operations.py:0-23 (_resolve_send_target)
+ [17c84d2d23917fb1] EXAC _is_known_tag L=10 N=2 saved=10 sim=1.00
+ src/tagi/cli/main.py:0-9 (_is_known_tag)
+ src/tagi/cli/git_operations.py:0-9 (_is_known_tag)
+ [a099544d601e75e0] STRU get_token L=8 N=2 saved=8 sim=1.00
+ src/tagi/providers/github.py:0-7 (get_token)
+ src/tagi/executor/git.py:0-7 (get_current_branch)
+ [baf70879846cca92] STRU _changes_matching_tag L=6 N=2 saved=6 sim=1.00
+ src/tagi/utils/change_filter.py:0-5 (_changes_matching_tag)
+ src/tagi/planner/selector.py:0-5 (select_changes_by_tag)
+ [ec5f29e9c3061809] EXAC __init__ L=5 N=2 saved=5 sim=1.00
+ src/tagi/providers/base.py:0-4 (__init__)
+ src/tagi/executor/git.py:0-3 (__init__)
+ [161e0f409941bbdc] STRU is_authenticated L=5 N=2 saved=5 sim=1.00
+ src/tagi/providers/github.py:0-4 (is_authenticated)
+ src/tagi/providers/gitlab.py:0-4 (is_authenticated)
-DUPLICATES[10] (ranked by impact):
- [69031414365d89a7] STRU filter_changes_by_tags_any L=21 N=2 saved=21 sim=1.00
- src/tagi/utils/inspect_helpers.py:23-43 (filter_changes_by_tags_any)
- src/tagi/utils/inspect_helpers.py:46-66 (filter_changes_by_tags_all)
- [34f34aac7a5602b7] STRU filter_changes_by_tag L=12 N=2 saved=12 sim=1.00
- src/tagi/utils/inspect_helpers.py:9-20 (filter_changes_by_tag)
- src/tagi/utils/publish_helpers.py:28-39 (filter_changes_by_tag)
- [59cf75b9ca253237] STRU create_pr L=10 N=2 saved=10 sim=1.00
- src/tagi/cli.py:772-781 (create_pr)
- src/tagi/cli.py:784-793 (create_mr)
- [0defbec6f6d556b3] EXAC detect_provider L=9 N=2 saved=9 sim=1.00
- src/tagi/cli.py:761-769 (detect_provider)
- src/tagi/providers/detector.py:7-15 (detect_provider)
- [2f1566a469905cc9] STRU create_pr L=6 N=2 saved=6 sim=1.00
- src/tagi/providers/github.py:30-35 (create_pr)
- src/tagi/providers/gitlab.py:36-41 (create_pr)
- [54c9428ffca26dbc] STRU list_groups L=5 N=2 saved=5 sim=1.00
- src/tagi/cli.py:117-121 (list_groups)
- src/tagi/cli.py:125-129 (list_cmd)
- [9aaebb2fb961d57d] STRU is_authenticated L=4 N=2 saved=4 sim=1.00
- src/tagi/providers/github.py:13-16 (is_authenticated)
- src/tagi/providers/gitlab.py:11-14 (is_authenticated)
- [180c7709efe6a452] STRU get_auth_status L=4 N=2 saved=4 sim=1.00
- src/tagi/providers/github.py:18-21 (get_auth_status)
- src/tagi/providers/gitlab.py:16-19 (get_auth_status)
- [9e51ade4e046160f] STRU get_custom_rules L=3 N=2 saved=3 sim=1.00
- src/tagi/heuristics/rules.py:14-16 (get_custom_rules)
- src/tagi/heuristics/rules.py:19-21 (get_custom_heuristics)
- [ead418deaec12c72] STRU detect_remote L=3 N=2 saved=3 sim=1.00
- src/tagi/providers/github.py:37-39 (detect_remote)
- src/tagi/providers/gitlab.py:43-45 (detect_remote)
-
-REFACTOR[10] (ranked by priority):
- [1] ○ extract_function → src/tagi/utils/utils/filter_changes_by_tags_any.py
- WHY: 2 occurrences of 21-line block across 1 files — saves 21 lines
- FILES: src/tagi/utils/inspect_helpers.py
- [2] ○ extract_function → src/tagi/utils/utils/filter_changes_by_tag.py
- WHY: 2 occurrences of 12-line block across 2 files — saves 12 lines
- FILES: src/tagi/utils/inspect_helpers.py, src/tagi/utils/publish_helpers.py
- [3] ○ extract_function → src/tagi/utils/create_pr.py
- WHY: 2 occurrences of 10-line block across 1 files — saves 10 lines
- FILES: src/tagi/cli.py
- [4] ○ extract_function → src/tagi/utils/detect_provider.py
- WHY: 2 occurrences of 9-line block across 2 files — saves 9 lines
- FILES: src/tagi/cli.py, src/tagi/providers/detector.py
- [5] ○ extract_function → src/tagi/providers/utils/create_pr.py
+REFACTOR[7] (ranked by priority):
+ [1] ○ extract_function → src/tagi/cli/utils/_ensure_tag_prefix.py
+ WHY: 4 occurrences of 8-line block across 4 files — saves 24 lines
+ FILES: src/tagi/cli/git_operations.py, src/tagi/cli/main.py, src/tagi/cli/publishing_commands.py, src/tagi/cli/utility_commands.py
+ [2] ○ extract_function → src/tagi/cli/utils/_resolve_send_target.py
+ WHY: 2 occurrences of 19-line block across 2 files — saves 19 lines
+ FILES: src/tagi/cli/git_operations.py, src/tagi/cli/main.py
+ [3] ○ extract_function → src/tagi/cli/utils/_is_known_tag.py
+ WHY: 2 occurrences of 10-line block across 2 files — saves 10 lines
+ FILES: src/tagi/cli/git_operations.py, src/tagi/cli/main.py
+ [4] ○ extract_function → src/tagi/utils/get_token.py
+ WHY: 2 occurrences of 8-line block across 2 files — saves 8 lines
+ FILES: src/tagi/executor/git.py, src/tagi/providers/github.py
+ [5] ○ extract_function → src/tagi/utils/_changes_matching_tag.py
WHY: 2 occurrences of 6-line block across 2 files — saves 6 lines
- FILES: src/tagi/providers/github.py, src/tagi/providers/gitlab.py
- [6] ○ extract_function → src/tagi/utils/list_groups.py
- WHY: 2 occurrences of 5-line block across 1 files — saves 5 lines
- FILES: src/tagi/cli.py
+ FILES: src/tagi/planner/selector.py, src/tagi/utils/change_filter.py
+ [6] ○ extract_function → src/tagi/utils/__init__.py
+ WHY: 2 occurrences of 5-line block across 2 files — saves 5 lines
+ FILES: src/tagi/executor/git.py, src/tagi/providers/base.py
[7] ○ extract_function → src/tagi/providers/utils/is_authenticated.py
- WHY: 2 occurrences of 4-line block across 2 files — saves 4 lines
- FILES: src/tagi/providers/github.py, src/tagi/providers/gitlab.py
- [8] ○ extract_function → src/tagi/providers/utils/get_auth_status.py
- WHY: 2 occurrences of 4-line block across 2 files — saves 4 lines
+ WHY: 2 occurrences of 5-line block across 2 files — saves 5 lines
FILES: src/tagi/providers/github.py, src/tagi/providers/gitlab.py
- [9] ○ extract_function → src/tagi/heuristics/utils/get_custom_rules.py
- WHY: 2 occurrences of 3-line block across 1 files — saves 3 lines
- FILES: src/tagi/heuristics/rules.py
- [10] ○ extract_function → src/tagi/providers/utils/detect_remote.py
- WHY: 2 occurrences of 3-line block across 2 files — saves 3 lines
- FILES: src/tagi/providers/github.py, src/tagi/providers/gitlab.py
-
-QUICK_WINS[5] (low risk, high savings — do first):
- [1] extract_function saved=21L → src/tagi/utils/utils/filter_changes_by_tags_any.py
- FILES: inspect_helpers.py
- [2] extract_function saved=12L → src/tagi/utils/utils/filter_changes_by_tag.py
- FILES: inspect_helpers.py, publish_helpers.py
- [3] extract_function saved=10L → src/tagi/utils/create_pr.py
- FILES: cli.py
- [4] extract_function saved=9L → src/tagi/utils/detect_provider.py
- FILES: cli.py, detector.py
- [5] extract_function saved=6L → src/tagi/providers/utils/create_pr.py
- FILES: github.py, gitlab.py
-
-EFFORT_ESTIMATE (total ≈ 2.6h):
- medium filter_changes_by_tags_any saved=21L ~42min
- easy filter_changes_by_tag saved=12L ~24min
- easy create_pr saved=10L ~20min
- easy detect_provider saved=9L ~18min
- easy create_pr saved=6L ~12min
- easy list_groups saved=5L ~10min
- easy is_authenticated saved=4L ~8min
- easy get_auth_status saved=4L ~8min
- easy get_custom_rules saved=3L ~6min
- easy detect_remote saved=3L ~6min
METRICS-TARGET:
- dup_groups: 10 → 0
+ dup_groups: 7 → 0
saved_lines: 77 lines recoverable
diff --git a/project/evolution.toon.yaml b/project/evolution.toon.yaml
index 6d9fa71..7aa6bc3 100644
--- a/project/evolution.toon.yaml
+++ b/project/evolution.toon.yaml
@@ -1,4 +1,4 @@
-# code2llm/evolution | 225 func | 51f | 2026-09-19
+# code2llm/evolution | 229 func | 53f | 2026-09-19
# generated in 0.00s
NEXT[1] (ranked by impact):
@@ -11,7 +11,7 @@ RISKS[1]:
⚠ Splitting goal.yaml may break 0 import paths
METRICS-TARGET:
- CC̄: 2.9 → ≤2.0
+ CC̄: 2.8 → ≤2.0
max-CC: 11 → ≤5
god-modules: 1 → 0
high-CC(≥15): 0 → ≤0
@@ -42,4 +42,4 @@ PATTERNS (language parser shared logic):
- Standardized FunctionInfo/ClassInfo models
HISTORY:
- prev CC̄=2.9 → now CC̄=2.9
+ prev CC̄=2.8 → now CC̄=2.8
diff --git a/project/flow.mmd b/project/flow.mmd
index e8f955f..0857963 100644
--- a/project/flow.mmd
+++ b/project/flow.mmd
@@ -1,9 +1,17 @@
flowchart TD
-%% generated in 0.00s
+%% generated in 0.01s
%% Entry points (blue)
classDef entry fill:#4dabf7,stroke:#1971c2,color:#fff
+ subgraph CLI
+ tagi__cli__provider_commands__detect_provider_command["detect_provider_command"]
+ tagi__cli__provider_commands___current_branch["_current_branch"]
+ tagi__cli__provider_commands___pr_spec["_pr_spec"]
+ tagi__cli__provider_commands__create_pr["create_pr"]
+ tagi__cli__provider_commands__create_mr["create_mr"]
+ end
+
subgraph Core
src__tagi__config__Config___load_config["_load_config"]
src__tagi__config__Config___apply_sections["_apply_sections"]
@@ -20,7 +28,7 @@ flowchart TD
src__tagi__hooks__run_hook["run_hook"]
src__tagi__analyzer__dependency_graph__build_dependency_graph["build_dependency_graph"]
src__tagi__analyzer__dependency_graph___LevelOrder__levels["levels"]
- ...["+135 more"]
+ ...["+133 more"]
end
class src__tagi__config__Config___load_config,src__tagi__config__Config___apply_sections,src__tagi__config__Config__get_tag_for_path,src__tagi__config__Config__get_custom_tags_for_pattern,src__tagi__config__Config__get_tag_color,src__tagi__config__Config__get_heuristics_for_path,src__tagi__config__Config__get_tags_for_path,src__tagi__config__Config__get_tag_description,src__tagi__config__Config__get_template,src__tagi__hooks__install_hooks entry
diff --git a/project/index.html b/project/index.html
index b80cff4..22dab0c 100644
--- a/project/index.html
+++ b/project/index.html
@@ -1,5 +1,5 @@
-
+