git-cleaner-tui 2.2.0__tar.gz → 2.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- git_cleaner_tui-2.4.0/.env +1 -0
- git_cleaner_tui-2.4.0/.github/workflows/release.yml +23 -0
- git_cleaner_tui-2.4.0/.graphify_uncached.txt +5 -0
- git_cleaner_tui-2.4.0/.opencode/.gitignore +5 -0
- git_cleaner_tui-2.4.0/.opencode/plugins/graphify.js +22 -0
- git_cleaner_tui-2.4.0/AGENTS.md +79 -0
- {git_cleaner_tui-2.2.0 → git_cleaner_tui-2.4.0}/PKG-INFO +1 -1
- git_cleaner_tui-2.4.0/graphify-out/GRAPH_REPORT.md +171 -0
- git_cleaner_tui-2.4.0/graphify-out/cache/0f012533be5fcb3459a4bb3da7bc957d451598acec210864f9d0e222cc67ead8.json +1 -0
- git_cleaner_tui-2.4.0/graphify-out/cache/247f3e76aa463e92992ca778651e7febe12f93b7a9e0ee16862943a72a8b9b83.json +1 -0
- git_cleaner_tui-2.4.0/graphify-out/cache/269075f0058c05f880cccceee5d52f0a531288b190136664300144a39de300cb.json +1 -0
- git_cleaner_tui-2.4.0/graphify-out/cache/366a2072f9bf3f07312f17b95ec04d347c3dcd6ede25ccd369454b6455801d1b.json +1 -0
- git_cleaner_tui-2.4.0/graphify-out/cache/3d83cd38256a990ea1c07285b9319eeb1ec6b399736039bc5d52605d1c3cd022.json +1 -0
- git_cleaner_tui-2.4.0/graphify-out/cache/4994e78248fe57734ee56ef13e90e9f324ec1addbcb986e6eed705da5d302504.json +1 -0
- git_cleaner_tui-2.4.0/graphify-out/cache/4f6b2dcf5005aa2728236eca6d11fa987d2ec6397e21c067ecc3a6da77d8d867.json +1 -0
- git_cleaner_tui-2.4.0/graphify-out/cache/67a7e24cf77023d0e2dd5d5553f3cd9e4b571f5e94fe568a84f7320258323b3f.json +1 -0
- git_cleaner_tui-2.4.0/graphify-out/cache/81421ad4e439db75ba9403e95b968d83a34c3148768d65a1c33c1bcb3640e896.json +1 -0
- git_cleaner_tui-2.4.0/graphify-out/cache/819cebf2e5f97ef60f221ac1269a5256a8ee2bf6ae1d70f25021e3039e9a22ed.json +1 -0
- git_cleaner_tui-2.4.0/graphify-out/cache/c77c733b637164943e0e50983ddfc18e6feb0912066d38ba54f4bff79700d1a1.json +1 -0
- git_cleaner_tui-2.4.0/graphify-out/cache/ed23a449f35b32f027d97db1fe9239516f48c59d21f0120304e5b7c57246512f.json +1 -0
- git_cleaner_tui-2.4.0/graphify-out/cost.json +12 -0
- git_cleaner_tui-2.4.0/graphify-out/graph.html +257 -0
- git_cleaner_tui-2.4.0/graphify-out/graph.json +7296 -0
- git_cleaner_tui-2.4.0/graphify-out/manifest.json +19 -0
- git_cleaner_tui-2.4.0/opencode.json +6 -0
- {git_cleaner_tui-2.2.0 → git_cleaner_tui-2.4.0}/pyproject.toml +1 -1
- {git_cleaner_tui-2.2.0 → git_cleaner_tui-2.4.0}/src/git_cleaner/app.py +10 -10
- {git_cleaner_tui-2.2.0 → git_cleaner_tui-2.4.0}/uv.lock +1 -1
- {git_cleaner_tui-2.2.0 → git_cleaner_tui-2.4.0}/.gitignore +0 -0
- {git_cleaner_tui-2.2.0 → git_cleaner_tui-2.4.0}/.superpowers/brainstorm/-1783610394.49273/state/server-stopped +0 -0
- {git_cleaner_tui-2.2.0 → git_cleaner_tui-2.4.0}/.superpowers/brainstorm/brainstorm-1783610443.14345/state/server-stopped +0 -0
- {git_cleaner_tui-2.2.0 → git_cleaner_tui-2.4.0}/.superpowers/brainstorm/brainstorm-1783610443.14345/state/server.err +0 -0
- {git_cleaner_tui-2.2.0 → git_cleaner_tui-2.4.0}/.superpowers/brainstorm/brainstorm-1783610443.14345/state/server.log +0 -0
- {git_cleaner_tui-2.2.0 → git_cleaner_tui-2.4.0}/.superpowers/brainstorm/brainstorm-1783610469.94912/content/sidebar-layouts.html +0 -0
- {git_cleaner_tui-2.2.0 → git_cleaner_tui-2.4.0}/.superpowers/brainstorm/brainstorm-1783610469.94912/content/waiting.html +0 -0
- {git_cleaner_tui-2.2.0 → git_cleaner_tui-2.4.0}/.superpowers/brainstorm/brainstorm-1783610469.94912/state/events +0 -0
- {git_cleaner_tui-2.2.0 → git_cleaner_tui-2.4.0}/.superpowers/brainstorm/brainstorm-1783610469.94912/state/server-stopped +0 -0
- {git_cleaner_tui-2.2.0 → git_cleaner_tui-2.4.0}/README.md +0 -0
- {git_cleaner_tui-2.2.0 → git_cleaner_tui-2.4.0}/logo/logo.png +0 -0
- {git_cleaner_tui-2.2.0 → git_cleaner_tui-2.4.0}/src/git_cleaner/__init__.py +0 -0
- {git_cleaner_tui-2.2.0 → git_cleaner_tui-2.4.0}/src/git_cleaner/__main__.py +0 -0
- {git_cleaner_tui-2.2.0 → git_cleaner_tui-2.4.0}/src/git_cleaner/cli.py +0 -0
- {git_cleaner_tui-2.2.0 → git_cleaner_tui-2.4.0}/src/git_cleaner/config.py +0 -0
- {git_cleaner_tui-2.2.0 → git_cleaner_tui-2.4.0}/src/git_cleaner/git_ops.py +0 -0
- {git_cleaner_tui-2.2.0 → git_cleaner_tui-2.4.0}/tests/__init__.py +0 -0
- {git_cleaner_tui-2.2.0 → git_cleaner_tui-2.4.0}/tests/test_config.py +0 -0
- {git_cleaner_tui-2.2.0 → git_cleaner_tui-2.4.0}/tests/test_git_ops.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
PYPI_TOKEN=pypi-AgEIcHlwaS5vcmcCJDA0NmQ4ZWM5LTMzNmItNGNiZC05NmI5LTZjZTMzOWE3MmI0ZAACKlszLCI0NzQ0MTczNi0zYmNiLTQzZGItOWJhYS1jMmIxYTA3YzA2ZjUiXQAABiCNqoFBxGQrz8o0sQnbBlie_Tk39L0SoaKSYd5sFj7iBw
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags: ["v*"]
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
release:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
permissions:
|
|
11
|
+
contents: write
|
|
12
|
+
steps:
|
|
13
|
+
- uses: actions/checkout@v4
|
|
14
|
+
|
|
15
|
+
- uses: actions/setup-python@v5
|
|
16
|
+
with:
|
|
17
|
+
python-version: "3.12"
|
|
18
|
+
|
|
19
|
+
- run: pip install build; python -m build -o dist .
|
|
20
|
+
|
|
21
|
+
- uses: softprops/action-gh-release@v2
|
|
22
|
+
with:
|
|
23
|
+
files: dist/*
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// graphify OpenCode plugin
|
|
2
|
+
// Injects a knowledge graph reminder before bash tool calls when the graph exists.
|
|
3
|
+
import { existsSync } from "fs";
|
|
4
|
+
import { join } from "path";
|
|
5
|
+
|
|
6
|
+
export const GraphifyPlugin = async ({ directory }) => {
|
|
7
|
+
let reminded = false;
|
|
8
|
+
|
|
9
|
+
return {
|
|
10
|
+
"tool.execute.before": async (input, output) => {
|
|
11
|
+
if (reminded) return;
|
|
12
|
+
if (!existsSync(join(directory, "graphify-out", "graph.json"))) return;
|
|
13
|
+
|
|
14
|
+
if (input.tool === "bash") {
|
|
15
|
+
output.args.command =
|
|
16
|
+
'echo "[graphify] Knowledge graph available. Read graphify-out/GRAPH_REPORT.md for god nodes and architecture context before searching files." && ' +
|
|
17
|
+
output.args.command;
|
|
18
|
+
reminded = true;
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
};
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# AGENTS.md — Git Cleaner (git-cleaner-tui)
|
|
2
|
+
|
|
3
|
+
## Quick start
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
uv sync --dev
|
|
7
|
+
uv run git-cleaner-tui # CWD must be a git repo
|
|
8
|
+
uv run git-cleaner-tui --repo /path
|
|
9
|
+
uv run pytest # 23 tests, <10s
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## Package structure
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
src/git_cleaner/
|
|
16
|
+
├── cli.py # entrypoint: git_cleaner.cli:main (lazy-imports app.py)
|
|
17
|
+
├── app.py # Textual App (~1450 lines), all screens/widgets in one file
|
|
18
|
+
├── git_ops.py # BranchInfo/StashInfo dataclasses, git subprocess wrappers
|
|
19
|
+
├── config.py # TOML config: protected, blacklist, theme, bookmarks
|
|
20
|
+
└── __main__.py # python -m git_cleaner support
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
- Build: `hatchling`, no extra config
|
|
24
|
+
- Dependencies: `textual`, `textual-timepiece`, `whenever`
|
|
25
|
+
- Dev dependencies: `pytest` only — no linter, no typechecker, no formatter config in repo
|
|
26
|
+
|
|
27
|
+
## Config
|
|
28
|
+
|
|
29
|
+
`~/.git-branch-cleaner.toml` (global) and/or repo `.git-branch-cleaner.toml`:
|
|
30
|
+
|
|
31
|
+
```toml
|
|
32
|
+
[protected]
|
|
33
|
+
patterns = ["release/*", "hotfix/*"]
|
|
34
|
+
|
|
35
|
+
[blacklist]
|
|
36
|
+
patterns = ["archive/*"]
|
|
37
|
+
|
|
38
|
+
[theme]
|
|
39
|
+
name = "textual-dark"
|
|
40
|
+
|
|
41
|
+
[bookmarks]
|
|
42
|
+
paths = ['C:\\path\\to\\repo']
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
**Gotcha:** `save_bookmarks()` writes TOML with **single-quoted literal strings** — critical for Windows backslash paths. Double-quoted strings would corrupt the config (backslashes escape). If editing `config.py`, preserve single-quote output in `save_bookmarks()`.
|
|
46
|
+
|
|
47
|
+
## Tests
|
|
48
|
+
|
|
49
|
+
- Tests create **real git repos** in `tempfile.TemporaryDirectory` — no mocks, slow but thorough
|
|
50
|
+
- `test_git_ops.py` uses `_init_git_repo()` helper that calls `git init -b main`, adds commits, creates branches
|
|
51
|
+
- No test markers, no conftest, no fixtures
|
|
52
|
+
- Single command: `uv run pytest`
|
|
53
|
+
|
|
54
|
+
## Key conventions
|
|
55
|
+
|
|
56
|
+
- All TUI screens/widgets live in one file (`app.py`). Adding a new content screen means adding a new class there.
|
|
57
|
+
- CSS is embedded as a module-level string in `app.py` (not separate `.tcss` files).
|
|
58
|
+
- Git operations use `subprocess.run` with `capture_output=True`, never `gitpython`.
|
|
59
|
+
- `BranchInfo` dataclass has optional fields: `author`, `ahead`, `behind`, `has_upstream`, `commit_hash`, `is_protected`, `is_blacklisted`.
|
|
60
|
+
- `list_branches()` uses a single `git for-each-ref` call with `--format` — the core perf trick.
|
|
61
|
+
- Version lives only in `pyproject.toml`. Bump there, build with `uv build`, publish with `uv publish --token`.
|
|
62
|
+
|
|
63
|
+
## Publishing
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
uv build
|
|
67
|
+
uv publish --token "$env:PYPI_TOKEN"
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Token lives in `.env` at repo root: `PYPI_TOKEN=pypi-...`. Loaded automatically by OpenCode / uv in dev sessions — no need to paste it.
|
|
71
|
+
|
|
72
|
+
## graphify
|
|
73
|
+
|
|
74
|
+
This project has a graphify knowledge graph at graphify-out/.
|
|
75
|
+
|
|
76
|
+
Rules:
|
|
77
|
+
- Before answering architecture or codebase questions, read graphify-out/GRAPH_REPORT.md for god nodes and community structure
|
|
78
|
+
- If graphify-out/wiki/index.md exists, navigate it instead of reading raw files
|
|
79
|
+
- After modifying code files in this session, run `graphify update .` to keep the graph current (AST-only, no API cost)
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
# Graph Report - . (2026-07-13)
|
|
2
|
+
|
|
3
|
+
## Corpus Check
|
|
4
|
+
- 17 files · ~192,440 words
|
|
5
|
+
- Verdict: corpus is large enough that graph structure adds value.
|
|
6
|
+
|
|
7
|
+
## Summary
|
|
8
|
+
- 230 nodes · 424 edges · 18 communities detected
|
|
9
|
+
- Extraction: 73% EXTRACTED · 27% INFERRED · 0% AMBIGUOUS · INFERRED: 113 edges (avg confidence: 0.65)
|
|
10
|
+
- Token cost: 0 input · 0 output
|
|
11
|
+
|
|
12
|
+
## Community Hubs (Navigation)
|
|
13
|
+
- [[_COMMUNITY_Branch Browser Widget|Branch Browser Widget]]
|
|
14
|
+
- [[_COMMUNITY_App Scaffold & Dialogs|App Scaffold & Dialogs]]
|
|
15
|
+
- [[_COMMUNITY_Config & Bookmarks Module|Config & Bookmarks Module]]
|
|
16
|
+
- [[_COMMUNITY_Git Maintenance Operations|Git Maintenance Operations]]
|
|
17
|
+
- [[_COMMUNITY_Core Git Wrappers|Core Git Wrappers]]
|
|
18
|
+
- [[_COMMUNITY_UI Footer Components|UI Footer Components]]
|
|
19
|
+
- [[_COMMUNITY_Project Features Documentation|Project Features Documentation]]
|
|
20
|
+
- [[_COMMUNITY_Maintenance Dashboard Widget|Maintenance Dashboard Widget]]
|
|
21
|
+
- [[_COMMUNITY_README & Agent Instructions|README & Agent Instructions]]
|
|
22
|
+
- [[_COMMUNITY_Helper AST Extraction|Helper: AST Extraction]]
|
|
23
|
+
- [[_COMMUNITY_Helper File Detection|Helper: File Detection]]
|
|
24
|
+
- [[_COMMUNITY_Helper Sem Cache Check|Helper: Sem Cache Check]]
|
|
25
|
+
- [[_COMMUNITY_Init Helper Script|Init Helper Script]]
|
|
26
|
+
- [[_COMMUNITY_Init Helper Script|Init Helper Script]]
|
|
27
|
+
- [[_COMMUNITY_Init Helper Script|Init Helper Script]]
|
|
28
|
+
- [[_COMMUNITY_Maintenance Feature Doc|Maintenance Feature Doc]]
|
|
29
|
+
- [[_COMMUNITY_Stash Browser Feature Doc|Stash Browser Feature Doc]]
|
|
30
|
+
- [[_COMMUNITY_Multi-Repo Bookmarks Doc|Multi-Repo Bookmarks Doc]]
|
|
31
|
+
|
|
32
|
+
## God Nodes (most connected - your core abstractions)
|
|
33
|
+
1. `BranchInfo` - 33 edges
|
|
34
|
+
2. `StashInfo` - 29 edges
|
|
35
|
+
3. `BranchesContent` - 28 edges
|
|
36
|
+
4. `MaintenanceContent` - 21 edges
|
|
37
|
+
5. `MainScreen` - 19 edges
|
|
38
|
+
6. `_init_git_repo()` - 16 edges
|
|
39
|
+
7. `StashContent` - 11 edges
|
|
40
|
+
8. `GitCleanerApp` - 10 edges
|
|
41
|
+
9. `RepoSwitcher` - 9 edges
|
|
42
|
+
10. `RepoFooter` - 8 edges
|
|
43
|
+
|
|
44
|
+
## Surprising Connections (you probably didn't know these)
|
|
45
|
+
- `Initialize a git repo with some branches for testing.` --uses--> `BranchInfo` [INFERRED]
|
|
46
|
+
tests\test_git_ops.py → src\git_cleaner\git_ops.py
|
|
47
|
+
- `Deleting current branch should fail.` --uses--> `BranchInfo` [INFERRED]
|
|
48
|
+
tests\test_git_ops.py → src\git_cleaner\git_ops.py
|
|
49
|
+
- `delete_remote_branches should fail when there's no remote configured.` --uses--> `BranchInfo` [INFERRED]
|
|
50
|
+
tests\test_git_ops.py → src\git_cleaner\git_ops.py
|
|
51
|
+
- `RepoFooter` --uses--> `BranchInfo` [INFERRED]
|
|
52
|
+
src\git_cleaner\app.py → src\git_cleaner\git_ops.py
|
|
53
|
+
- `RepoFooter` --uses--> `StashInfo` [INFERRED]
|
|
54
|
+
src\git_cleaner\app.py → src\git_cleaner\git_ops.py
|
|
55
|
+
|
|
56
|
+
## Hyperedges (group relationships)
|
|
57
|
+
- **Git Cleaner Core Architecture** — config_module, git_ops_module, tui_app, cli_entry_point [EXTRACTED 0.90]
|
|
58
|
+
|
|
59
|
+
## Communities
|
|
60
|
+
|
|
61
|
+
### Community 0 - "Branch Browser Widget"
|
|
62
|
+
Cohesion: 0.09
|
|
63
|
+
Nodes (8): _age_from(), BranchesContent, _is_stale(), MainScreen, _on_author_changed(), _on_search_changed(), _upstream_str(), Screen
|
|
64
|
+
|
|
65
|
+
### Community 1 - "App Scaffold & Dialogs"
|
|
66
|
+
Cohesion: 0.1
|
|
67
|
+
Nodes (29): App, ConfirmationDialog, GitCleanerApp, Stashes tab: list stashes with drop/apply/pop actions., Single screen with tabbed content: Branches, Maintenance, Stashes., Modal dialog to confirm branch deletion., Modal to manage bookmarked repos and switch between them., Main TUI application for git branch cleaning. (+21 more)
|
|
68
|
+
|
|
69
|
+
### Community 2 - "Config & Bookmarks Module"
|
|
70
|
+
Cohesion: 0.1
|
|
71
|
+
Nodes (26): add_bookmark(), get_blacklist_patterns(), get_protected_patterns(), load_bookmarks(), load_theme(), _load_toml(), matches_any(), Add a repo path to bookmarks if not already present. (+18 more)
|
|
72
|
+
|
|
73
|
+
### Community 3 - "Git Maintenance Operations"
|
|
74
|
+
Cohesion: 0.09
|
|
75
|
+
Nodes (26): apply_stash(), expire_reflog(), get_branch_details(), get_git_dir_size(), get_object_stats(), _human_size(), list_stashes(), _parse_stash_subject() (+18 more)
|
|
76
|
+
|
|
77
|
+
### Community 4 - "Core Git Wrappers"
|
|
78
|
+
Cohesion: 0.12
|
|
79
|
+
Nodes (29): delete_branches(), delete_remote_branches(), get_repo_root(), list_branches(), Delete local branches by name. Returns list of names that failed to delete., Delete remote branches via git push origin --delete. Returns list of names, Find the git working tree root for a given path., Run ``git gc`` (optionally ``--aggressive``). When *on_output* is provided, (+21 more)
|
|
80
|
+
|
|
81
|
+
### Community 5 - "UI Footer Components"
|
|
82
|
+
Cohesion: 0.14
|
|
83
|
+
Nodes (3): RepoFooter, StashContent, Footer
|
|
84
|
+
|
|
85
|
+
### Community 6 - "Project Features Documentation"
|
|
86
|
+
Cohesion: 0.14
|
|
87
|
+
Nodes (17): Blacklisted Branch Patterns, Branch Browser Feature, Branch Deletion Undo, BranchInfo Dataclass, CLI Entry Point (cli.py), Config Module (config.py), CSV/JSON Export, Date Range Filtering (+9 more)
|
|
88
|
+
|
|
89
|
+
### Community 7 - "Maintenance Dashboard Widget"
|
|
90
|
+
Cohesion: 0.23
|
|
91
|
+
Nodes (2): MaintenanceContent, Vertical
|
|
92
|
+
|
|
93
|
+
### Community 8 - "README & Agent Instructions"
|
|
94
|
+
Cohesion: 0.5
|
|
95
|
+
Nodes (4): AGENTS.md - Agent Instructions, README.md - Project Documentation, Git Cleaner TUI Project, Git Cleaner Logo
|
|
96
|
+
|
|
97
|
+
### Community 9 - "Helper: AST Extraction"
|
|
98
|
+
Cohesion: 1.0
|
|
99
|
+
Nodes (0):
|
|
100
|
+
|
|
101
|
+
### Community 10 - "Helper: File Detection"
|
|
102
|
+
Cohesion: 1.0
|
|
103
|
+
Nodes (0):
|
|
104
|
+
|
|
105
|
+
### Community 11 - "Helper: Sem Cache Check"
|
|
106
|
+
Cohesion: 1.0
|
|
107
|
+
Nodes (0):
|
|
108
|
+
|
|
109
|
+
### Community 12 - "Init Helper Script"
|
|
110
|
+
Cohesion: 1.0
|
|
111
|
+
Nodes (0):
|
|
112
|
+
|
|
113
|
+
### Community 13 - "Init Helper Script"
|
|
114
|
+
Cohesion: 1.0
|
|
115
|
+
Nodes (0):
|
|
116
|
+
|
|
117
|
+
### Community 14 - "Init Helper Script"
|
|
118
|
+
Cohesion: 1.0
|
|
119
|
+
Nodes (0):
|
|
120
|
+
|
|
121
|
+
### Community 15 - "Maintenance Feature Doc"
|
|
122
|
+
Cohesion: 1.0
|
|
123
|
+
Nodes (1): Maintenance Dashboard Feature
|
|
124
|
+
|
|
125
|
+
### Community 16 - "Stash Browser Feature Doc"
|
|
126
|
+
Cohesion: 1.0
|
|
127
|
+
Nodes (1): Stash Browser Feature
|
|
128
|
+
|
|
129
|
+
### Community 17 - "Multi-Repo Bookmarks Doc"
|
|
130
|
+
Cohesion: 1.0
|
|
131
|
+
Nodes (1): Multi-Repo Bookmarks Feature
|
|
132
|
+
|
|
133
|
+
## Knowledge Gaps
|
|
134
|
+
- **43 isolated node(s):** `Return merged list of protected branch patterns. Order of precedence (last`, `Return merged list of blacklist patterns from global + project config.`, `Check if a branch name matches any of the given fnmatch patterns.`, `Return the saved theme name, or the default.`, `Persist the theme name to the global config file.` (+38 more)
|
|
135
|
+
These have ≤1 connection - possible missing edges or undocumented components.
|
|
136
|
+
- **Thin community `Helper: AST Extraction`** (1 nodes): `_step_ast.py`
|
|
137
|
+
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
138
|
+
- **Thin community `Helper: File Detection`** (1 nodes): `_step_detect.py`
|
|
139
|
+
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
140
|
+
- **Thin community `Helper: Sem Cache Check`** (1 nodes): `_step_sem_cache.py`
|
|
141
|
+
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
142
|
+
- **Thin community `Init Helper Script`** (1 nodes): `__init__.py`
|
|
143
|
+
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
144
|
+
- **Thin community `Init Helper Script`** (1 nodes): `__main__.py`
|
|
145
|
+
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
146
|
+
- **Thin community `Init Helper Script`** (1 nodes): `__init__.py`
|
|
147
|
+
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
148
|
+
- **Thin community `Maintenance Feature Doc`** (1 nodes): `Maintenance Dashboard Feature`
|
|
149
|
+
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
150
|
+
- **Thin community `Stash Browser Feature Doc`** (1 nodes): `Stash Browser Feature`
|
|
151
|
+
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
152
|
+
- **Thin community `Multi-Repo Bookmarks Doc`** (1 nodes): `Multi-Repo Bookmarks Feature`
|
|
153
|
+
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
154
|
+
|
|
155
|
+
## Suggested Questions
|
|
156
|
+
_Questions this graph is uniquely positioned to answer:_
|
|
157
|
+
|
|
158
|
+
- **Why does `BranchInfo` connect `App Scaffold & Dialogs` to `Branch Browser Widget`, `Git Maintenance Operations`, `Core Git Wrappers`, `UI Footer Components`, `Maintenance Dashboard Widget`?**
|
|
159
|
+
_High betweenness centrality (0.215) - this node is a cross-community bridge._
|
|
160
|
+
- **Why does `BranchesContent` connect `Branch Browser Widget` to `App Scaffold & Dialogs`, `UI Footer Components`, `Maintenance Dashboard Widget`?**
|
|
161
|
+
_High betweenness centrality (0.153) - this node is a cross-community bridge._
|
|
162
|
+
- **Why does `StashInfo` connect `App Scaffold & Dialogs` to `Branch Browser Widget`, `Git Maintenance Operations`, `UI Footer Components`, `Maintenance Dashboard Widget`?**
|
|
163
|
+
_High betweenness centrality (0.143) - this node is a cross-community bridge._
|
|
164
|
+
- **Are the 31 inferred relationships involving `BranchInfo` (e.g. with `RepoFooter` and `BranchesContent`) actually correct?**
|
|
165
|
+
_`BranchInfo` has 31 INFERRED edges - model-reasoned connections that need verification._
|
|
166
|
+
- **Are the 27 inferred relationships involving `StashInfo` (e.g. with `RepoFooter` and `BranchesContent`) actually correct?**
|
|
167
|
+
_`StashInfo` has 27 INFERRED edges - model-reasoned connections that need verification._
|
|
168
|
+
- **Are the 2 inferred relationships involving `BranchesContent` (e.g. with `BranchInfo` and `StashInfo`) actually correct?**
|
|
169
|
+
_`BranchesContent` has 2 INFERRED edges - model-reasoned connections that need verification._
|
|
170
|
+
- **Are the 2 inferred relationships involving `MaintenanceContent` (e.g. with `BranchInfo` and `StashInfo`) actually correct?**
|
|
171
|
+
_`MaintenanceContent` has 2 INFERRED edges - model-reasoned connections that need verification._
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"nodes": [{"id": "tests_init_py", "label": "__init__.py", "file_type": "code", "source_file": "tests\\__init__.py", "source_location": "L1"}], "edges": [], "raw_calls": []}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"nodes": [{"id": "tests_test_config_py", "label": "test_config.py", "file_type": "code", "source_file": "tests\\test_config.py", "source_location": "L1"}, {"id": "test_config_test_default_protected_patterns", "label": "test_default_protected_patterns()", "file_type": "code", "source_file": "tests\\test_config.py", "source_location": "L6"}, {"id": "test_config_test_project_config_adds_protected_patterns", "label": "test_project_config_adds_protected_patterns()", "file_type": "code", "source_file": "tests\\test_config.py", "source_location": "L16"}, {"id": "test_config_test_blacklist_returns_empty_when_no_config", "label": "test_blacklist_returns_empty_when_no_config()", "file_type": "code", "source_file": "tests\\test_config.py", "source_location": "L27"}, {"id": "test_config_test_blacklist_from_project_config", "label": "test_blacklist_from_project_config()", "file_type": "code", "source_file": "tests\\test_config.py", "source_location": "L34"}, {"id": "test_config_test_matches_any_exact_match", "label": "test_matches_any_exact_match()", "file_type": "code", "source_file": "tests\\test_config.py", "source_location": "L44"}, {"id": "test_config_test_matches_any_wildcard", "label": "test_matches_any_wildcard()", "file_type": "code", "source_file": "tests\\test_config.py", "source_location": "L48"}, {"id": "test_config_test_matches_any_no_match", "label": "test_matches_any_no_match()", "file_type": "code", "source_file": "tests\\test_config.py", "source_location": "L52"}, {"id": "test_config_rationale_7", "label": "Should include main, master, develop by default with no config files.", "file_type": "rationale", "source_file": "tests\\test_config.py", "source_location": "L7"}, {"id": "test_config_rationale_17", "label": "Project-level .git-branch-cleaner.toml should add patterns.", "file_type": "rationale", "source_file": "tests\\test_config.py", "source_location": "L17"}], "edges": [{"source": "tests_test_config_py", "target": "tempfile", "relation": "imports", "confidence": "EXTRACTED", "source_file": "tests\\test_config.py", "source_location": "L1", "weight": 1.0}, {"source": "tests_test_config_py", "target": "pathlib", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "tests\\test_config.py", "source_location": "L2", "weight": 1.0}, {"source": "tests_test_config_py", "target": "git_cleaner_config", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "tests\\test_config.py", "source_location": "L3", "weight": 1.0}, {"source": "tests_test_config_py", "target": "test_config_test_default_protected_patterns", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests\\test_config.py", "source_location": "L6", "weight": 1.0}, {"source": "tests_test_config_py", "target": "test_config_test_project_config_adds_protected_patterns", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests\\test_config.py", "source_location": "L16", "weight": 1.0}, {"source": "tests_test_config_py", "target": "test_config_test_blacklist_returns_empty_when_no_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests\\test_config.py", "source_location": "L27", "weight": 1.0}, {"source": "tests_test_config_py", "target": "test_config_test_blacklist_from_project_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests\\test_config.py", "source_location": "L34", "weight": 1.0}, {"source": "tests_test_config_py", "target": "test_config_test_matches_any_exact_match", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests\\test_config.py", "source_location": "L44", "weight": 1.0}, {"source": "tests_test_config_py", "target": "test_config_test_matches_any_wildcard", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests\\test_config.py", "source_location": "L48", "weight": 1.0}, {"source": "tests_test_config_py", "target": "test_config_test_matches_any_no_match", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tests\\test_config.py", "source_location": "L52", "weight": 1.0}, {"source": "test_config_rationale_7", "target": "test_config_test_default_protected_patterns", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests\\test_config.py", "source_location": "L7", "weight": 1.0}, {"source": "test_config_rationale_17", "target": "test_config_test_project_config_adds_protected_patterns", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "tests\\test_config.py", "source_location": "L17", "weight": 1.0}], "raw_calls": [{"caller_nid": "test_config_test_default_protected_patterns", "callee": "TemporaryDirectory", "source_file": "tests\\test_config.py", "source_location": "L8"}, {"caller_nid": "test_config_test_default_protected_patterns", "callee": "Path", "source_file": "tests\\test_config.py", "source_location": "L9"}, {"caller_nid": "test_config_test_default_protected_patterns", "callee": "get_protected_patterns", "source_file": "tests\\test_config.py", "source_location": "L10"}, {"caller_nid": "test_config_test_project_config_adds_protected_patterns", "callee": "TemporaryDirectory", "source_file": "tests\\test_config.py", "source_location": "L18"}, {"caller_nid": "test_config_test_project_config_adds_protected_patterns", "callee": "Path", "source_file": "tests\\test_config.py", "source_location": "L19"}, {"caller_nid": "test_config_test_project_config_adds_protected_patterns", "callee": "write_text", "source_file": "tests\\test_config.py", "source_location": "L20"}, {"caller_nid": "test_config_test_project_config_adds_protected_patterns", "callee": "get_protected_patterns", "source_file": "tests\\test_config.py", "source_location": "L23"}, {"caller_nid": "test_config_test_blacklist_returns_empty_when_no_config", "callee": "TemporaryDirectory", "source_file": "tests\\test_config.py", "source_location": "L28"}, {"caller_nid": "test_config_test_blacklist_returns_empty_when_no_config", "callee": "Path", "source_file": "tests\\test_config.py", "source_location": "L29"}, {"caller_nid": "test_config_test_blacklist_returns_empty_when_no_config", "callee": "get_blacklist_patterns", "source_file": "tests\\test_config.py", "source_location": "L30"}, {"caller_nid": "test_config_test_blacklist_from_project_config", "callee": "TemporaryDirectory", "source_file": "tests\\test_config.py", "source_location": "L35"}, {"caller_nid": "test_config_test_blacklist_from_project_config", "callee": "Path", "source_file": "tests\\test_config.py", "source_location": "L36"}, {"caller_nid": "test_config_test_blacklist_from_project_config", "callee": "write_text", "source_file": "tests\\test_config.py", "source_location": "L37"}, {"caller_nid": "test_config_test_blacklist_from_project_config", "callee": "get_blacklist_patterns", "source_file": "tests\\test_config.py", "source_location": "L40"}, {"caller_nid": "test_config_test_matches_any_exact_match", "callee": "matches_any", "source_file": "tests\\test_config.py", "source_location": "L45"}, {"caller_nid": "test_config_test_matches_any_wildcard", "callee": "matches_any", "source_file": "tests\\test_config.py", "source_location": "L49"}, {"caller_nid": "test_config_test_matches_any_no_match", "callee": "matches_any", "source_file": "tests\\test_config.py", "source_location": "L53"}]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"nodes": [{"id": "graphify_out_step_ast_py", "label": "_step_ast.py", "file_type": "code", "source_file": "graphify-out\\_step_ast.py", "source_location": "L1"}], "edges": [{"source": "graphify_out_step_ast_py", "target": "json", "relation": "imports", "confidence": "EXTRACTED", "source_file": "graphify-out\\_step_ast.py", "source_location": "L1", "weight": 1.0}, {"source": "graphify_out_step_ast_py", "target": "graphify_extract", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "graphify-out\\_step_ast.py", "source_location": "L2", "weight": 1.0}, {"source": "graphify_out_step_ast_py", "target": "pathlib", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "graphify-out\\_step_ast.py", "source_location": "L3", "weight": 1.0}, {"source": "graphify_out_step_ast_py", "target": "ast", "relation": "imports", "confidence": "EXTRACTED", "source_file": "graphify-out\\_step_ast.py", "source_location": "L6", "weight": 1.0}], "raw_calls": []}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"nodes": [{"id": "graphify_out_step_detect_py", "label": "_step_detect.py", "file_type": "code", "source_file": "graphify-out\\_step_detect.py", "source_location": "L1"}], "edges": [{"source": "graphify_out_step_detect_py", "target": "json", "relation": "imports", "confidence": "EXTRACTED", "source_file": "graphify-out\\_step_detect.py", "source_location": "L1", "weight": 1.0}, {"source": "graphify_out_step_detect_py", "target": "graphify_detect", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "graphify-out\\_step_detect.py", "source_location": "L2", "weight": 1.0}, {"source": "graphify_out_step_detect_py", "target": "pathlib", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "graphify-out\\_step_detect.py", "source_location": "L3", "weight": 1.0}], "raw_calls": []}
|