codemap-core 0.1.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.
- codemap_core-0.1.0/.gitignore +43 -0
- codemap_core-0.1.0/CHANGELOG.md +541 -0
- codemap_core-0.1.0/LICENSE +21 -0
- codemap_core-0.1.0/PKG-INFO +480 -0
- codemap_core-0.1.0/README.md +413 -0
- codemap_core-0.1.0/docs/adr/0000-template.md +28 -0
- codemap_core-0.1.0/docs/adr/0001-symbol-id-format.md +43 -0
- codemap_core-0.1.0/docs/adr/0002-storage-backend.md +37 -0
- codemap_core-0.1.0/docs/adr/0003-module-boundaries.md +32 -0
- codemap_core-0.1.0/docs/adr/0004-indexer-bridge-plugin.md +35 -0
- codemap_core-0.1.0/docs/adr/0005-exit-codes.md +37 -0
- codemap_core-0.1.0/docs/adr/0006-schema-version.md +33 -0
- codemap_core-0.1.0/docs/adr/0007-diagnostic-isolation.md +33 -0
- codemap_core-0.1.0/docs/adr/0008-atomic-write.md +37 -0
- codemap_core-0.1.0/docs/adr/0009-quality-gates.md +38 -0
- codemap_core-0.1.0/docs/adr/0010-benchmark-regression.md +58 -0
- codemap_core-0.1.0/docs/adr/0011-language-neutrality.md +50 -0
- codemap_core-0.1.0/docs/adr/0012-first-language-cohort.md +40 -0
- codemap_core-0.1.0/docs/bridges/http_route.md +132 -0
- codemap_core-0.1.0/docs/cli.md +139 -0
- codemap_core-0.1.0/docs/configuration.md +105 -0
- codemap_core-0.1.0/docs/indexers/python.md +150 -0
- codemap_core-0.1.0/docs/performance.md +73 -0
- codemap_core-0.1.0/docs/plugin-guide.md +153 -0
- codemap_core-0.1.0/pyproject.toml +237 -0
- codemap_core-0.1.0/src/codemap/__init__.py +7 -0
- codemap_core-0.1.0/src/codemap/cli/__init__.py +3 -0
- codemap_core-0.1.0/src/codemap/cli/_common.py +90 -0
- codemap_core-0.1.0/src/codemap/cli/commands/__init__.py +3 -0
- codemap_core-0.1.0/src/codemap/cli/commands/callees.py +102 -0
- codemap_core-0.1.0/src/codemap/cli/commands/callers.py +107 -0
- codemap_core-0.1.0/src/codemap/cli/commands/config.py +78 -0
- codemap_core-0.1.0/src/codemap/cli/commands/diagnostics.py +142 -0
- codemap_core-0.1.0/src/codemap/cli/commands/doctor.py +158 -0
- codemap_core-0.1.0/src/codemap/cli/commands/get.py +93 -0
- codemap_core-0.1.0/src/codemap/cli/commands/index.py +725 -0
- codemap_core-0.1.0/src/codemap/cli/commands/routes.py +104 -0
- codemap_core-0.1.0/src/codemap/cli/commands/search.py +78 -0
- codemap_core-0.1.0/src/codemap/cli/commands/trace.py +179 -0
- codemap_core-0.1.0/src/codemap/cli/main.py +140 -0
- codemap_core-0.1.0/src/codemap/cli/renderers/__init__.py +3 -0
- codemap_core-0.1.0/src/codemap/cli/renderers/json.py +32 -0
- codemap_core-0.1.0/src/codemap/cli/renderers/text.py +24 -0
- codemap_core-0.1.0/src/codemap/config/__init__.py +31 -0
- codemap_core-0.1.0/src/codemap/config/loader.py +96 -0
- codemap_core-0.1.0/src/codemap/config/schema.py +122 -0
- codemap_core-0.1.0/src/codemap/core/__init__.py +7 -0
- codemap_core-0.1.0/src/codemap/core/bridge/__init__.py +8 -0
- codemap_core-0.1.0/src/codemap/core/bridge/base.py +38 -0
- codemap_core-0.1.0/src/codemap/core/bridge/http_route.py +374 -0
- codemap_core-0.1.0/src/codemap/core/bridge/python_cross_module.py +120 -0
- codemap_core-0.1.0/src/codemap/core/bridge/registry.py +117 -0
- codemap_core-0.1.0/src/codemap/core/graph.py +183 -0
- codemap_core-0.1.0/src/codemap/core/models.py +299 -0
- codemap_core-0.1.0/src/codemap/core/store.py +78 -0
- codemap_core-0.1.0/src/codemap/core/symbol.py +314 -0
- codemap_core-0.1.0/src/codemap/diagnostics/__init__.py +3 -0
- codemap_core-0.1.0/src/codemap/diagnostics/exit_codes.py +30 -0
- codemap_core-0.1.0/src/codemap/diagnostics/logging.py +65 -0
- codemap_core-0.1.0/src/codemap/diagnostics/progress.py +68 -0
- codemap_core-0.1.0/src/codemap/indexers/__init__.py +9 -0
- codemap_core-0.1.0/src/codemap/indexers/_example_lang.py +135 -0
- codemap_core-0.1.0/src/codemap/indexers/base.py +77 -0
- codemap_core-0.1.0/src/codemap/indexers/python.py +577 -0
- codemap_core-0.1.0/src/codemap/indexers/registry.py +104 -0
- codemap_core-0.1.0/src/codemap/io/__init__.py +8 -0
- codemap_core-0.1.0/src/codemap/io/atomic.py +97 -0
- codemap_core-0.1.0/src/codemap/io/base.py +12 -0
- codemap_core-0.1.0/src/codemap/io/json_store.py +433 -0
- codemap_core-0.1.0/src/codemap/io/lock.py +87 -0
- codemap_core-0.1.0/src/codemap/io/manifest.py +90 -0
- codemap_core-0.1.0/src/codemap/mcp/__init__.py +3 -0
- codemap_core-0.1.0/tests/__init__.py +0 -0
- codemap_core-0.1.0/tests/bench/__init__.py +0 -0
- codemap_core-0.1.0/tests/bench/conftest.py +41 -0
- codemap_core-0.1.0/tests/bench/test_index_perf.py +45 -0
- codemap_core-0.1.0/tests/bench/test_query_perf.py +62 -0
- codemap_core-0.1.0/tests/e2e/__init__.py +0 -0
- codemap_core-0.1.0/tests/e2e/test_cli.py +169 -0
- codemap_core-0.1.0/tests/e2e/test_config_integration.py +186 -0
- codemap_core-0.1.0/tests/e2e/test_cross_module_callers.py +79 -0
- codemap_core-0.1.0/tests/e2e/test_diagnostics.py +211 -0
- codemap_core-0.1.0/tests/e2e/test_error_experience.py +142 -0
- codemap_core-0.1.0/tests/e2e/test_http_pipeline.py +138 -0
- codemap_core-0.1.0/tests/e2e/test_incremental.py +153 -0
- codemap_core-0.1.0/tests/e2e/test_query_commands.py +332 -0
- codemap_core-0.1.0/tests/fixtures/indexers/python/basics/expected/symbol_ids.txt +6 -0
- codemap_core-0.1.0/tests/fixtures/indexers/python/basics/input/pkg/mod.py +18 -0
- codemap_core-0.1.0/tests/fixtures/indexers/python/imports/expected/symbol_ids.txt +2 -0
- codemap_core-0.1.0/tests/fixtures/indexers/python/imports/input/users.py +14 -0
- codemap_core-0.1.0/tests/fixtures/indexers/python/inheritance/expected/symbol_ids.txt +7 -0
- codemap_core-0.1.0/tests/fixtures/indexers/python/inheritance/input/shapes.py +20 -0
- codemap_core-0.1.0/tests/fixtures/smoke/a.example +5 -0
- codemap_core-0.1.0/tests/fixtures/smoke/b.example +1 -0
- codemap_core-0.1.0/tests/integration/__init__.py +0 -0
- codemap_core-0.1.0/tests/integration/test_http_route_bridge_e2e.py +102 -0
- codemap_core-0.1.0/tests/unit/__init__.py +0 -0
- codemap_core-0.1.0/tests/unit/test_config.py +191 -0
- codemap_core-0.1.0/tests/unit/test_graph.py +180 -0
- codemap_core-0.1.0/tests/unit/test_http_route_bridge.py +383 -0
- codemap_core-0.1.0/tests/unit/test_indexer_registry.py +169 -0
- codemap_core-0.1.0/tests/unit/test_io.py +418 -0
- codemap_core-0.1.0/tests/unit/test_models.py +254 -0
- codemap_core-0.1.0/tests/unit/test_python_cross_module_bridge.py +230 -0
- codemap_core-0.1.0/tests/unit/test_python_indexer.py +626 -0
- codemap_core-0.1.0/tests/unit/test_symbol.py +268 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# Build artifacts
|
|
7
|
+
build/
|
|
8
|
+
dist/
|
|
9
|
+
*.egg-info/
|
|
10
|
+
*.egg
|
|
11
|
+
.eggs/
|
|
12
|
+
|
|
13
|
+
# Test / coverage
|
|
14
|
+
.pytest_cache/
|
|
15
|
+
.coverage
|
|
16
|
+
.coverage.*
|
|
17
|
+
htmlcov/
|
|
18
|
+
coverage.xml
|
|
19
|
+
.tox/
|
|
20
|
+
.mypy_cache/
|
|
21
|
+
.ruff_cache/
|
|
22
|
+
.benchmarks/
|
|
23
|
+
|
|
24
|
+
# Virtualenv
|
|
25
|
+
.venv/
|
|
26
|
+
venv/
|
|
27
|
+
env/
|
|
28
|
+
|
|
29
|
+
# uv / pdm lockfiles (commit uv.lock once we settle)
|
|
30
|
+
# uv.lock
|
|
31
|
+
|
|
32
|
+
# IDE
|
|
33
|
+
.idea/
|
|
34
|
+
.vscode/
|
|
35
|
+
*.swp
|
|
36
|
+
*.swo
|
|
37
|
+
|
|
38
|
+
# OS
|
|
39
|
+
.DS_Store
|
|
40
|
+
Thumbs.db
|
|
41
|
+
|
|
42
|
+
# CodeMap own index when dogfooding
|
|
43
|
+
.codemap/
|
|
@@ -0,0 +1,541 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to CodeMap will be documented here.
|
|
4
|
+
|
|
5
|
+
Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
6
|
+
Versioning: [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
During `0.x`, MINOR may introduce breaking changes — they will be marked `BREAKING:`.
|
|
8
|
+
|
|
9
|
+
## [Unreleased]
|
|
10
|
+
|
|
11
|
+
### Added — Three new language plugins (`codemap-javascript`, `codemap-vue`, `codemap-jsp`)
|
|
12
|
+
|
|
13
|
+
Plugin family grows 15 → 18. Each ships as an independent PyPI
|
|
14
|
+
distribution at `0.2.0a1`.
|
|
15
|
+
|
|
16
|
+
* **`codemap-javascript`** — covers `*.js` / `*.jsx` / `*.mjs` /
|
|
17
|
+
`*.cjs` via `tree-sitter-javascript`. Symbol coverage mirrors
|
|
18
|
+
`codemap-typescript` (top-level functions, classes with methods,
|
|
19
|
+
module-level `const` / `let` / `var`). Sibling of
|
|
20
|
+
`codemap-typescript` — install either or both depending on the code
|
|
21
|
+
base.
|
|
22
|
+
|
|
23
|
+
* **`codemap-vue`** — covers `*.vue` Single File Components. Since
|
|
24
|
+
`tree-sitter-vue` is not on PyPI, the plugin uses a permissive
|
|
25
|
+
regex-driven SFC scanner (`codemap_vue.sfc.extract_script_blocks`)
|
|
26
|
+
to locate every top-level `<script>` block and read its `lang=`
|
|
27
|
+
attribute, then dispatches the inner bytes to
|
|
28
|
+
`tree-sitter-javascript` (always required) or
|
|
29
|
+
`tree-sitter-typescript` (optional `[typescript]` extra, only
|
|
30
|
+
required when a block declares `lang="ts"` / `lang="tsx"`).
|
|
31
|
+
Symbol line numbers are translated back to the original `.vue`
|
|
32
|
+
coordinate space so `codemap get` jumps to the right line even
|
|
33
|
+
when `<script>` follows a long `<template>`.
|
|
34
|
+
|
|
35
|
+
* **`codemap-jsp`** — covers `*.jsp` / `*.jspx` / `*.tag` / `*.tagx`
|
|
36
|
+
for legacy Java web projects. Scans top-level constructs via regex
|
|
37
|
+
(`codemap_jsp.sfc.extract`) — page imports, includes, declaration
|
|
38
|
+
blocks (`<%! ... %>`), scriptlets, `<form action="...">`, and
|
|
39
|
+
`<a href="...">` — then parses each declaration block as a Java
|
|
40
|
+
member context using a synthetic `class _S { … }` wrapper so
|
|
41
|
+
`tree-sitter-java` emits `field_declaration` / `method_declaration`
|
|
42
|
+
/ nested `class_declaration` rather than `local_variable_declaration`.
|
|
43
|
+
Form actions and links are surfaced as `extra.http_client_calls` on
|
|
44
|
+
the page-level pseudo-class symbol, ready to be linked to server
|
|
45
|
+
controllers by the `http_route` bridge — the standard JSP →
|
|
46
|
+
Controller navigation chain.
|
|
47
|
+
|
|
48
|
+
`codemap doctor` now lists **18 indexers** (4 built-in + 14 plugins).
|
|
49
|
+
|
|
50
|
+
## [0.1.0] — 2026-06-03
|
|
51
|
+
|
|
52
|
+
First stable PyPI release. The CLI is now installable via:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
pipx install codemap-core
|
|
56
|
+
# or
|
|
57
|
+
pip install codemap-core
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
…plus language adapters as separate distributions (`codemap-bash`,
|
|
61
|
+
`codemap-c`, `codemap-cpp`, `codemap-csharp`, `codemap-go`,
|
|
62
|
+
`codemap-java`, `codemap-kotlin`, `codemap-php`, `codemap-ruby`,
|
|
63
|
+
`codemap-rust`, `codemap-scala`, `codemap-sql`, `codemap-swift`,
|
|
64
|
+
`codemap-typescript`). `pipx inject codemap codemap-<lang>` is the
|
|
65
|
+
canonical pattern for adding language support to a `pipx`-installed
|
|
66
|
+
CLI.
|
|
67
|
+
|
|
68
|
+
### Changed — `README.md` / `INSTALL.md` switch to PyPI-first installation
|
|
69
|
+
|
|
70
|
+
Both `README.md` / `README.zh-CN.md` / `INSTALL.md` / `INSTALL.zh-CN.md`
|
|
71
|
+
and the 14 plugin READMEs now show `pip install codemap-core` and
|
|
72
|
+
`pip install codemap-<lang>` as the primary install path. The
|
|
73
|
+
`git+https://github.com/qxbyte/codemap.git[#subdirectory=…]` form is
|
|
74
|
+
retained as a fallback for users who want to track `main` or pin to a
|
|
75
|
+
specific commit before the next PyPI release.
|
|
76
|
+
|
|
77
|
+
### Fixed — `publish.yml`: `uv venv` does not bootstrap `pip` (2026-06-01)
|
|
78
|
+
|
|
79
|
+
The publish workflow's "Create isolated build venv" step was calling
|
|
80
|
+
`<venv>/bin/pip`, but `uv venv` (unlike `python -m venv`) intentionally
|
|
81
|
+
does not install `pip` into the venv. All 15 publish jobs failed at
|
|
82
|
+
exit 127 ("`pip: command not found`") under tag `v0.1.0a2`.
|
|
83
|
+
|
|
84
|
+
Fix: use `uv pip install --python <venv>/bin/python build twine`, the
|
|
85
|
+
same shape as the `bench.yml` fix in PR #3. Validated under tag
|
|
86
|
+
`v0.1.0a3` — 16/16 jobs green on TestPyPI.
|
|
87
|
+
|
|
88
|
+
### Added — `bench.yml`: PR-vs-main median delta comparison (2026-05-31)
|
|
89
|
+
|
|
90
|
+
The benchmark CI workflow now checks out `main` into a separate
|
|
91
|
+
`git worktree`, runs the `pytest-benchmark` suite against both PR HEAD
|
|
92
|
+
and main, then compares per-test median deltas. Threshold: ≥20%
|
|
93
|
+
regression on any benchmark fails the job; ≤−20% improvement and
|
|
94
|
+
in-band changes pass with `warn` / `ok` flags surfaced in the job
|
|
95
|
+
summary.
|
|
96
|
+
|
|
97
|
+
### Documented — PyPI rate-limit findings
|
|
98
|
+
|
|
99
|
+
Empirically, PyPI applies a per-account new-project-creation throttle:
|
|
100
|
+
roughly **4 new project registrations per 24-hour sliding window**.
|
|
101
|
+
File uploads (`.whl` / `.tar.gz`) to already-existing projects use a
|
|
102
|
+
separate, much looser bucket. The 0.1.0 release was paced across two
|
|
103
|
+
days to stay within this limit; subsequent maintenance releases are
|
|
104
|
+
unaffected because the projects already exist. The corresponding
|
|
105
|
+
support ticket is `pypi/support#10881`.
|
|
106
|
+
|
|
107
|
+
## [0.1.0a1] — 2026-05-30
|
|
108
|
+
|
|
109
|
+
First PyPI release rehearsal. Pre-release artifacts are published to
|
|
110
|
+
TestPyPI and (rate-permitting) PyPI under the new distribution names.
|
|
111
|
+
|
|
112
|
+
### Changed — Distribution rename: `codemap` → `codemap-core`
|
|
113
|
+
|
|
114
|
+
The PyPI distribution name for the main package becomes `codemap-core`.
|
|
115
|
+
Reason: `codemap` is held by an unrelated, actively-maintained PyPI
|
|
116
|
+
project (Sarthak Mishra, latest `2.0.0`); `code-map` (the obvious
|
|
117
|
+
hyphenated variant) is rejected by PyPI's similarity check because the
|
|
118
|
+
edit distance from `codemap` is 1. The `-core` suffix mirrors the
|
|
119
|
+
plugin naming convention — `codemap-core` is the engine, `codemap-java`
|
|
120
|
+
/ `codemap-go` / etc. are language adapters.
|
|
121
|
+
|
|
122
|
+
Behavior:
|
|
123
|
+
|
|
124
|
+
* **Import path is unchanged** — `from codemap.core.models import Symbol`
|
|
125
|
+
still works; the wheel still ships `src/codemap/` to `site-packages/codemap/`.
|
|
126
|
+
* **CLI command is unchanged** — `codemap doctor`, `codemap index .`, etc.
|
|
127
|
+
still appear on `$PATH` after install.
|
|
128
|
+
* **Install command does change** — users moving from a git-based install
|
|
129
|
+
to PyPI will use `pip install codemap-core` (not `pip install codemap`).
|
|
130
|
+
|
|
131
|
+
### Changed — Plugins now depend on `codemap-core` with a version range
|
|
132
|
+
|
|
133
|
+
Each of the 14 language plugins replaces its bare `"codemap"` dependency
|
|
134
|
+
with `"codemap-core>=0.1.0a1,<0.2"`. The lower bound admits the alpha
|
|
135
|
+
series; the upper bound stops a future BREAKING bump to `0.2.x` from
|
|
136
|
+
silently pulling an incompatible engine.
|
|
137
|
+
|
|
138
|
+
### Added — `.github/workflows/publish.yml` (Trusted Publishing)
|
|
139
|
+
|
|
140
|
+
Tag-driven publish pipeline:
|
|
141
|
+
|
|
142
|
+
* `v<X>.<Y>.<Z>(a|b|rc)<N>` → TestPyPI
|
|
143
|
+
* `v<X>.<Y>.<Z>` → PyPI
|
|
144
|
+
* anything else → workflow fails fast
|
|
145
|
+
|
|
146
|
+
15-package matrix (1 main + 14 plugins), each step:
|
|
147
|
+
|
|
148
|
+
1. `uv` installs Python 3.13 + `build` + `twine`
|
|
149
|
+
2. `python -m build` produces `dist/*.tar.gz` and `dist/*.whl`
|
|
150
|
+
3. `twine check dist/*` validates metadata + README rendering
|
|
151
|
+
4. `pypa/gh-action-pypi-publish@release/v1` uploads via OIDC
|
|
152
|
+
|
|
153
|
+
Uses GitHub Environments (`pypi` / `testpypi`) for Trusted Publishing.
|
|
154
|
+
`id-token: write` permission grants the OIDC token; no PyPI API token
|
|
155
|
+
is stored in repository secrets. `skip-existing: true` makes re-runs
|
|
156
|
+
idempotent.
|
|
157
|
+
|
|
158
|
+
### Added — `twine>=5.0` to `[dev]` extras
|
|
159
|
+
|
|
160
|
+
For local manual `twine check` / `twine upload` outside CI.
|
|
161
|
+
|
|
162
|
+
### Added — Distribution metadata polish
|
|
163
|
+
|
|
164
|
+
Main `pyproject.toml` gains:
|
|
165
|
+
|
|
166
|
+
* `Environment :: Console`,
|
|
167
|
+
`Intended Audience :: Information Technology`,
|
|
168
|
+
`Operating System :: MacOS`,
|
|
169
|
+
`Operating System :: POSIX :: Linux`,
|
|
170
|
+
`Topic :: Software Development :: Libraries :: Python Modules`
|
|
171
|
+
classifiers.
|
|
172
|
+
* `Changelog` URL in `[project.urls]`.
|
|
173
|
+
|
|
174
|
+
### Validated locally (2026-05-30)
|
|
175
|
+
|
|
176
|
+
* `python -m build` succeeds for all 15 packages; 30 artifacts produced
|
|
177
|
+
(15 sdists + 15 wheels).
|
|
178
|
+
* `twine check dist/* plugins/*/dist/*` reports **30 PASSED**.
|
|
179
|
+
* All 15 names uploaded to **TestPyPI** successfully:
|
|
180
|
+
<https://test.pypi.org/project/codemap-core/0.1.0a1/> and the 14
|
|
181
|
+
matching `codemap-<lang>` siblings.
|
|
182
|
+
* Production **PyPI** upload was rate-limited (HTTP 429) after the
|
|
183
|
+
first batch; a background retry loop with `--skip-existing` brings
|
|
184
|
+
the remaining names up over the following minutes.
|
|
185
|
+
|
|
186
|
+
### Added — Bilingual `INSTALL.md` install guide (2026-05-30)
|
|
187
|
+
|
|
188
|
+
- New `INSTALL.md` (English) and `INSTALL.zh-CN.md` (Simplified
|
|
189
|
+
Chinese) walk through `pipx` / `uv tool` / `pip` installation paths
|
|
190
|
+
for the main CLI, then `pipx inject` / `uv tool inject` / `pip
|
|
191
|
+
install` for the 14 language plugins. Covers the `[watch]` extra,
|
|
192
|
+
offline wheel-bundle distribution, upgrade/uninstall, and a
|
|
193
|
+
troubleshooting matrix for the common gotchas (Python < 3.11,
|
|
194
|
+
`command not found`, plugin not discovered, slow first install,
|
|
195
|
+
`tree-sitter-*` build failures, partial plugin removal).
|
|
196
|
+
- Both files end with a verbatim **validation log** captured on a
|
|
197
|
+
fresh Python 3.12 virtualenv on 2026-05-30 against
|
|
198
|
+
[`c4cd436`](https://github.com/qxbyte/codemap/commit/c4cd436):
|
|
199
|
+
install (2 m 05 s), `doctor` on a clean install (2 indexers, 2
|
|
200
|
+
bridges), Java plugin inject (15.6 s, auto-discovered), index a
|
|
201
|
+
mixed Java + Python fixture (6 symbols, 1 route, 0 diagnostics),
|
|
202
|
+
and `--json` output for AI agents.
|
|
203
|
+
- Both `README.md` and `README.zh-CN.md` now link to the install
|
|
204
|
+
guide near the top, ahead of their own (lighter) install sections.
|
|
205
|
+
|
|
206
|
+
### Added — C / C++ / C# / Scala independent PyPI plugins (2026-05-30)
|
|
207
|
+
|
|
208
|
+
- `plugins/codemap-c/` — `tree-sitter-c` backed. Captures
|
|
209
|
+
`function_definition`, named `struct_specifier` / `union_specifier`
|
|
210
|
+
with bodies (with their `field_declaration` members), named
|
|
211
|
+
`enum_specifier` (with enumerators as fields), `type_definition`
|
|
212
|
+
(`typedef`), object and function-like `preproc_def` macros, and
|
|
213
|
+
top-level `declaration` with an initializer. Function bodies are
|
|
214
|
+
opaque so locals do not leak as script-level symbols.
|
|
215
|
+
15 unit tests. Scheme `scip-c`. Files: `*.c`, `*.h`.
|
|
216
|
+
- `plugins/codemap-cpp/` — `tree-sitter-cpp` backed. Recurses through
|
|
217
|
+
`namespace_definition` so descriptors carry the full namespace chain;
|
|
218
|
+
unwraps `template_declaration` to surface the inner function or class.
|
|
219
|
+
Captures `class_specifier` / `struct_specifier` / `union_specifier`
|
|
220
|
+
(with `extra.cpp_kind`), `enum_specifier`, top-level and in-class
|
|
221
|
+
`function_definition` (as `function` / `method`), and data-member
|
|
222
|
+
`field_declaration`. 13 unit tests. Scheme `scip-cpp`. Files: `*.cpp`,
|
|
223
|
+
`*.cc`, `*.cxx`, `*.hpp`, `*.hh`, `*.hxx`.
|
|
224
|
+
- `plugins/codemap-csharp/` — `tree-sitter-c-sharp` backed.
|
|
225
|
+
`namespace_declaration` is walked and dotted `qualified_name`
|
|
226
|
+
(`App.Core.Util`) is split into individual NAMESPACE descriptors.
|
|
227
|
+
Captures `class_declaration` / `interface_declaration` /
|
|
228
|
+
`struct_declaration` / `record_declaration` / `enum_declaration` /
|
|
229
|
+
`delegate_declaration` (all as `class` with distinguishing
|
|
230
|
+
`extra.csharp_kind`), `method_declaration`, `property_declaration`,
|
|
231
|
+
multi-declarator `field_declaration`, and `enum_member_declaration`.
|
|
232
|
+
13 unit tests. Scheme `scip-csharp`. Files: `*.cs`, `*.csx`.
|
|
233
|
+
- `plugins/codemap-scala/` — `tree-sitter-scala` backed. Leading
|
|
234
|
+
`package_clause` prefixes every symbol with NAMESPACE descriptors.
|
|
235
|
+
Captures `class_definition` (including `case class` — with its
|
|
236
|
+
`class_parameter`s emitted as fields), `object_definition`,
|
|
237
|
+
`trait_definition`, top-level `type_definition`,
|
|
238
|
+
`function_definition` / `function_declaration` (as methods), and
|
|
239
|
+
`val_definition` / `var_definition` (as fields, tagged with
|
|
240
|
+
`extra.scala_kind`). Nested members inside template bodies are
|
|
241
|
+
scoped under the enclosing type. 13 unit tests. Scheme `scip-scala`.
|
|
242
|
+
Files: `*.scala`, `*.sc`.
|
|
243
|
+
- `codemap doctor` now lists **15 indexers** (the four built-ins plus
|
|
244
|
+
ten plugin-shipped grammars).
|
|
245
|
+
|
|
246
|
+
### Fixed — CI: `astral-sh/setup-uv@v3` fails without `uv.lock` (2026-05-30)
|
|
247
|
+
|
|
248
|
+
- Both `test.yml` and `bench.yml` workflows enabled `cache: true` on
|
|
249
|
+
`setup-uv@v3`, which defaults its dependency glob to `**/uv.lock`.
|
|
250
|
+
We don't commit a lockfile yet, so the action failed with
|
|
251
|
+
*"No file in ... matched to [**/uv.lock]"* before any tests ran.
|
|
252
|
+
- Set `cache-dependency-glob: "pyproject.toml"` so the cache keys on a
|
|
253
|
+
file that actually exists. No effect on local development.
|
|
254
|
+
|
|
255
|
+
### Added — SQL (DDL) and Bash independent PyPI plugins (2026-05-30)
|
|
256
|
+
|
|
257
|
+
- `plugins/codemap-sql/` — `tree-sitter-sql` backed. DDL only: emits
|
|
258
|
+
`class` symbols for `CREATE TABLE` / `CREATE VIEW`, `variable`
|
|
259
|
+
symbols for `CREATE INDEX`, and `field` symbols for each
|
|
260
|
+
`column_definition` attached to the parent table.
|
|
261
|
+
`SELECT`/`INSERT`/`UPDATE`/`DELETE` are intentionally ignored.
|
|
262
|
+
13 unit tests. Scheme `scip-sql`. Files: `*.sql`, `*.ddl`.
|
|
263
|
+
- `plugins/codemap-bash/` — `tree-sitter-bash` backed. Captures
|
|
264
|
+
`function_definition`, top-level `variable_assignment`, and
|
|
265
|
+
`declaration_command` keywords (`readonly` / `declare` / `export` /
|
|
266
|
+
`local` / `typeset`) tagged via `extra.bash_kind`. Function-internal
|
|
267
|
+
state is deliberately not surfaced. Extensionless files with a bash
|
|
268
|
+
shebang are also accepted via `supports()`. 14 unit tests. Scheme
|
|
269
|
+
`scip-bash`. Files: `*.sh`, `*.bash`, `*.bats`.
|
|
270
|
+
- README (both languages) updated with the two new install commands,
|
|
271
|
+
the bigger doctor table, and the longer indexer reference table.
|
|
272
|
+
|
|
273
|
+
### Added — Swift, Kotlin, Ruby, PHP independent PyPI plugins (2026-05-30)
|
|
274
|
+
|
|
275
|
+
- `plugins/codemap-swift/` — `tree-sitter-swift` backed. Class / struct /
|
|
276
|
+
enum / protocol kept under `extra.swift_kind`; functions and `init`
|
|
277
|
+
inside types become methods; top-level `let`/`var` become variables.
|
|
278
|
+
14 unit tests. Scheme `scip-swift`.
|
|
279
|
+
- `plugins/codemap-kotlin/` — `tree-sitter-kotlin` backed. Class /
|
|
280
|
+
interface / object under `extra.kotlin_kind`, package header captured
|
|
281
|
+
as `extra.package`, `fun` inside type → method, top-level `val`/`var`
|
|
282
|
+
→ variable. Supports both `.kt` and `.kts`. 14 unit tests. Scheme
|
|
283
|
+
`scip-kotlin`.
|
|
284
|
+
- `plugins/codemap-ruby/` — `tree-sitter-ruby` backed. Class / module
|
|
285
|
+
under `extra.ruby_kind`, top-level `def` → function, `def` inside
|
|
286
|
+
type → method, `def self.x` → method with `extra.ruby_kind=singleton`.
|
|
287
|
+
Nested module/class produces qualified `Outer#Inner#m()` IDs. 13 unit
|
|
288
|
+
tests. Scheme `scip-ruby`.
|
|
289
|
+
- `plugins/codemap-php/` — `tree-sitter-php` backed. Class / interface /
|
|
290
|
+
trait / enum under `extra.php_kind`, `namespace_definition` captured
|
|
291
|
+
as `extra.namespace`, method / property / const declarations inside
|
|
292
|
+
types, free `function_definition` at module level, top-level `const`
|
|
293
|
+
as variable. 13 unit tests. Scheme `scip-php`.
|
|
294
|
+
- README (both languages) updated with 4 new subdirectory install
|
|
295
|
+
commands and the expanded doctor table (10 indexers total: 1
|
|
296
|
+
reference + 9 language plugins).
|
|
297
|
+
- End-to-end smoke fixture: 9 User-class files across Java / Go / Rust /
|
|
298
|
+
TypeScript / Python / Swift / Kotlin / Ruby / PHP indexed in one
|
|
299
|
+
`codemap index` pass — 24 symbols across 9 SCIP schemes, 0
|
|
300
|
+
diagnostics, both bridges executed.
|
|
301
|
+
|
|
302
|
+
### Added — Java, Go, Rust independent PyPI plugins (2026-05-30)
|
|
303
|
+
|
|
304
|
+
- `plugins/codemap-java/` — Java indexer backed by `tree-sitter-java`.
|
|
305
|
+
Captures class / interface / enum / record / method / constructor /
|
|
306
|
+
field declarations, honours `package` declarations as `extra.package`,
|
|
307
|
+
and walks nested types via a class stack. SCIP scheme `scip-java`.
|
|
308
|
+
14 unit tests.
|
|
309
|
+
- `plugins/codemap-go/` — Go indexer backed by `tree-sitter-go`.
|
|
310
|
+
Captures function / method (receiver-aware) / struct / interface /
|
|
311
|
+
type / const / var declarations. `func (u *User) Login()` produces
|
|
312
|
+
`scip-go . . . main.go/User#Login().` so both value and pointer
|
|
313
|
+
receivers feed into the same `User#…` namespace. 13 unit tests.
|
|
314
|
+
- `plugins/codemap-rust/` — Rust indexer backed by `tree-sitter-rust`.
|
|
315
|
+
Captures free functions, methods inside `impl` (both inherent and
|
|
316
|
+
`impl Trait for Type`) attached to the impl'd type, trait method
|
|
317
|
+
signatures attached to the trait, plus struct / enum / trait / const /
|
|
318
|
+
static items. SCIP scheme `scip-rust`. 13 unit tests.
|
|
319
|
+
- Each plugin ships with its own `pyproject.toml`, `README.md`,
|
|
320
|
+
`src/codemap_<lang>/`, and `tests/`, depends only on `codemap +
|
|
321
|
+
tree-sitter-<lang>`, and registers its indexer through the
|
|
322
|
+
`codemap.indexers` entry-point group — identical mechanism to the
|
|
323
|
+
built-in Python indexer and the previously shipped
|
|
324
|
+
`codemap-typescript` plugin.
|
|
325
|
+
- README (both English and Simplified Chinese) updated with subdirectory
|
|
326
|
+
install commands for all four language plugins and the updated
|
|
327
|
+
`codemap doctor` indexer table.
|
|
328
|
+
- End-to-end smoke test on a 5-language fixture (Java + Go + Rust + TS +
|
|
329
|
+
Python User class): 13 symbols emitted across 5 schemes, all bridges
|
|
330
|
+
ran successfully, 0 diagnostics.
|
|
331
|
+
|
|
332
|
+
### Added — TypeScript indexer as an independent PyPI plugin (2026-05-30)
|
|
333
|
+
|
|
334
|
+
- New `plugins/codemap-typescript/` package: a fully independent
|
|
335
|
+
Python distribution implementing the `Indexer` Protocol for
|
|
336
|
+
TypeScript / TSX. Backed by `tree-sitter-typescript`. Recognises
|
|
337
|
+
`function_declaration`, `class_declaration`, `interface_declaration`,
|
|
338
|
+
`method_definition`, module-level `lexical_declaration` (const/let),
|
|
339
|
+
and `import_statement`. SCIP scheme `scip-typescript`.
|
|
340
|
+
- The plugin lives in its own directory with its own `pyproject.toml`,
|
|
341
|
+
`README.md`, `src/codemap_typescript/`, and tests. It declares one
|
|
342
|
+
entry-point — `codemap.indexers.typescript = codemap_typescript:Type
|
|
343
|
+
ScriptIndexer` — and that single line is the only coupling to the host
|
|
344
|
+
CodeMap repo. After `pip install -e plugins/codemap-typescript/`,
|
|
345
|
+
`codemap doctor` lists `typescript` next to the built-in `python` and
|
|
346
|
+
`_example_lang` indexers on **identical terms** (ADR-004 + ADR-L001).
|
|
347
|
+
- 14 plugin-local unit tests cover the indexer's symbol generation,
|
|
348
|
+
scheme consistency, TSX support, syntax-error and invalid-UTF8
|
|
349
|
+
diagnostics, and the nested-class case.
|
|
350
|
+
- New `docs/plugin-guide.md` walks third-party authors through the
|
|
351
|
+
process step by step using the TypeScript plugin as the reference.
|
|
352
|
+
- End-to-end smoke test against a sample TS + TSX project: 9 symbols
|
|
353
|
+
emitted across function / class / interface / method / variable
|
|
354
|
+
kinds; both `.ts` and `.tsx` file patterns work.
|
|
355
|
+
|
|
356
|
+
### Added — Incremental + watch (2026-05-30)
|
|
357
|
+
|
|
358
|
+
- `codemap index --incremental` compares each file's sha256 against the
|
|
359
|
+
previous `manifest.files` entry and only re-parses changed files. Deleted
|
|
360
|
+
files are removed; new files are picked up. Bridges re-run from scratch
|
|
361
|
+
on every incremental pass via a new `JsonStore.clear_bridge_outputs()`
|
|
362
|
+
helper so cross-module aliases / routes always reflect the current state.
|
|
363
|
+
- `codemap index --watch` keeps the process alive, runs an initial
|
|
364
|
+
(incremental) pass, and re-indexes after every batch of file-system
|
|
365
|
+
events (debounced 500 ms). Requires the `watchdog` extra
|
|
366
|
+
(`pip install codemap[watch]`); the runtime check exits 69 (`EX_UNAVAILABLE`)
|
|
367
|
+
with a friendly install hint when watchdog is missing.
|
|
368
|
+
- Watch mode ignores events under `.codemap/` to avoid feedback loops on
|
|
369
|
+
its own writes.
|
|
370
|
+
- 7 e2e tests cover the no-op fast path, modified / deleted / new files,
|
|
371
|
+
bridge re-evaluation after a rename, fallback to full when no prior
|
|
372
|
+
index exists, and a real subprocess-based watch test that proves the
|
|
373
|
+
watcher reacts to a live file change.
|
|
374
|
+
|
|
375
|
+
### Added — Cross-module Python call resolution (2026-05-30)
|
|
376
|
+
|
|
377
|
+
- New `codemap.core.bridge.python_cross_module.PythonCrossModuleBridge`
|
|
378
|
+
resolves the synthetic `scip-python . . . <module>/<leaf>.` targets the
|
|
379
|
+
Python indexer emits for cross-file imports. The bridge looks for a
|
|
380
|
+
local symbol with the matching leaf name; if the file stem also matches
|
|
381
|
+
the last namespace segment of the synthetic target the alias confidence
|
|
382
|
+
is `high`, otherwise it falls back to `medium` for unambiguous single
|
|
383
|
+
candidates and bails on ambiguity.
|
|
384
|
+
- `JsonStore.callers` / `callees` now transparently expand aliases via a
|
|
385
|
+
reverse-alias index built at load time, so query commands automatically
|
|
386
|
+
see cross-module callers without the caller doing anything special.
|
|
387
|
+
- On the CodeMap repo itself, `callers SymbolID#` now finds 10 callers
|
|
388
|
+
across http_route.py / _example_lang.py / python.py / test_symbol.py
|
|
389
|
+
rather than just the 1 same-file reference visible before.
|
|
390
|
+
- 10 unit tests + 3 e2e tests cover happy paths (file-stem match,
|
|
391
|
+
single-candidate by leaf), explicit skips (no candidates, ambiguous
|
|
392
|
+
candidates, non-python scheme, non-call edges, already-resolved
|
|
393
|
+
targets, dedup), and the multi-file callers behaviour through the CLI.
|
|
394
|
+
|
|
395
|
+
### Added — Diagnostics command + error UX (2026-05-30)
|
|
396
|
+
|
|
397
|
+
- New `codemap diagnostics` command lists diagnostics recorded during the
|
|
398
|
+
last `codemap index`. Filters: `--severity` (error/warning/info),
|
|
399
|
+
`--producer` (indexer or bridge name), `--code` (e.g. `ROUTE001`),
|
|
400
|
+
`--limit`. Both human and JSON outputs.
|
|
401
|
+
- Indexer crashes mid-file now become an `INDEXER_CRASH` diagnostic
|
|
402
|
+
instead of being buried in stderr. Bridge crashes become
|
|
403
|
+
`BRIDGE_CRASH`. Unreadable source files become `IO001`. The run
|
|
404
|
+
completes either way.
|
|
405
|
+
- `codemap index --dry-run` walks the project and reports the per-indexer
|
|
406
|
+
file counts without writing `.codemap/`.
|
|
407
|
+
- Friendly CLI exception wrapper: unhandled exceptions print a short
|
|
408
|
+
marked-up "Internal error" message with the issue tracker URL and exit
|
|
409
|
+
70 (`EX_SOFTWARE`). Set `CODEMAP_FULL_TRACEBACK=1` for the full
|
|
410
|
+
traceback.
|
|
411
|
+
|
|
412
|
+
### Added — Configuration file (2026-05-30)
|
|
413
|
+
|
|
414
|
+
- `.codemap/config.yaml` now actually loads, replacing the previous empty
|
|
415
|
+
placeholder. Three layers are merged in order: built-in defaults →
|
|
416
|
+
`~/.config/codemap/config.yaml` → `<project>/.codemap/config.yaml`.
|
|
417
|
+
Recursive mapping merge means each layer only has to mention what it
|
|
418
|
+
changes.
|
|
419
|
+
- New schema (`codemap.config.schema.Config`, pydantic-backed,
|
|
420
|
+
`extra=forbid` so typos surface as errors):
|
|
421
|
+
- `storage.backend` (`json` | `sqlite`)
|
|
422
|
+
- `index.ignore` (glob patterns on both file names and project-relative
|
|
423
|
+
paths), `index.max_file_bytes`, `index.follow_symlinks`
|
|
424
|
+
- `indexers.enabled` / `indexers.disabled`
|
|
425
|
+
- `bridges.enabled` / `bridges.disabled`
|
|
426
|
+
- `codemap index` honours every field — `ignore` filters the walk,
|
|
427
|
+
`max_file_bytes` replaces the previously hard-coded limit, and
|
|
428
|
+
enabled/disabled lists shape which indexers / bridges run.
|
|
429
|
+
- New `codemap config show [--project P]` command prints the merged
|
|
430
|
+
configuration (rendered YAML + source paths or a JSON envelope) so it's
|
|
431
|
+
obvious which layer contributed which value.
|
|
432
|
+
- Validation errors surface as `EX_CONFIG` (exit 78) with the offending
|
|
433
|
+
field path, never as a stack trace.
|
|
434
|
+
- 15 unit tests + 10 e2e tests cover schema defaults, layer merging,
|
|
435
|
+
YAML errors, validation errors, ignore / max_file_bytes / disabled
|
|
436
|
+
indexers / disabled bridges in action. `docs/configuration.md`
|
|
437
|
+
documents every key.
|
|
438
|
+
|
|
439
|
+
### Added — Python HTTP recognition + benchmark gate (2026-05-30)
|
|
440
|
+
|
|
441
|
+
- **Python indexer** now produces `http_route` and `http_calls` metadata
|
|
442
|
+
for the `http_route` bridge to consume — meaning the cross-language
|
|
443
|
+
pipeline works end-to-end on real Python projects, not just synthetic
|
|
444
|
+
fixtures. Recognises FastAPI-style verb decorators (`@app.get("/x")`),
|
|
445
|
+
Flask-style `@route("/x", methods=[...])`, and `requests` / `httpx` /
|
|
446
|
+
`aiohttp` / `urllib3` client calls. URL-like heuristic (`/` or `http(s)://`)
|
|
447
|
+
filters out incidental `dict.get("key")` calls. 17 new unit tests cover
|
|
448
|
+
the matrix; 4 e2e tests prove `codemap routes` and `codemap callers`
|
|
449
|
+
surface the linked client→server graph after a single `codemap index`.
|
|
450
|
+
- **Benchmark suite** (`tests/bench/`) with `pytest-benchmark`, gated behind
|
|
451
|
+
the `bench` marker so the default `pytest` run is unaffected. Six
|
|
452
|
+
measurements: full-index throughput, callers / callees / search / walk /
|
|
453
|
+
shortest_path. Targets are documented in `docs/performance.md`.
|
|
454
|
+
- **ADR-010 (benchmark regression gate)** flipped from Proposed to
|
|
455
|
+
**Accepted**. Current baseline on the CodeMap repo: full-index 73 ms /
|
|
456
|
+
callers 4.7 µs / callees 26 µs / walk depth-10 72 µs — every target from
|
|
457
|
+
design §21 cleared by orders of magnitude. `.github/workflows/bench.yml`
|
|
458
|
+
runs the suite on every PR and fails the build on ≥ 20 % median
|
|
459
|
+
regression vs. main.
|
|
460
|
+
|
|
461
|
+
### Added — Query commands (2026-05-30)
|
|
462
|
+
|
|
463
|
+
- `codemap search QUERY` — keyword search across symbol IDs / signatures / docs.
|
|
464
|
+
- `codemap get <symbol-id>` — fetch one symbol's definition site, doc, and a
|
|
465
|
+
source-line snippet. Exits 1 if not found, 64 (`EX_USAGE`) on malformed
|
|
466
|
+
SymbolID, 66 (`EX_NOINPUT`) when `.codemap/` is missing.
|
|
467
|
+
- `codemap callers <symbol-id> [-d N]` — every edge whose target matches the
|
|
468
|
+
given id (depth-limited).
|
|
469
|
+
- `codemap callees <symbol-id> [-d N]` — every edge whose source matches.
|
|
470
|
+
- `codemap trace --from <id> [--to <id>] [-d N]` — BFS downstream walk or
|
|
471
|
+
bidirectional shortest-path between two symbols, with rich-tree text output
|
|
472
|
+
and a structured JSON envelope.
|
|
473
|
+
- `codemap routes [--method M]` — list every HTTP route the `http_route`
|
|
474
|
+
bridge has registered, with handler `file:line` references.
|
|
475
|
+
- `codemap.core.graph` — depth-limited downstream `walk_chain` and
|
|
476
|
+
bidirectional `shortest_path` (capped per-side, so `-d N` finds paths up
|
|
477
|
+
to `2N` hops).
|
|
478
|
+
- All commands accept `--project / -p`, support `--json`, and use the same
|
|
479
|
+
exit-code conventions (ADR-005). 14 graph unit tests + 19 end-to-end CLI
|
|
480
|
+
tests cover the new surface. `docs/cli.md` documents every command and its
|
|
481
|
+
JSON shape.
|
|
482
|
+
|
|
483
|
+
### Added — Sprint M-1 — HTTP route bridge (2026-05-30)
|
|
484
|
+
|
|
485
|
+
- `codemap.core.bridge.http_route.HttpRouteBridge` — first cross-language
|
|
486
|
+
Bridge. Reads `Symbol.extra["http_route"]` (server-side) and
|
|
487
|
+
`Symbol.extra["http_calls"]` (client-side) metadata and emits
|
|
488
|
+
`Route` / `Alias` / `Edge` entries pivoting on a synthetic
|
|
489
|
+
`scip-route` intermediate symbol per `(method, path)`.
|
|
490
|
+
- Path-variable matching (`/user/{id}` ↔ `/user/42`), context-path
|
|
491
|
+
prefix joining (`context_path` + `path` → `full_path`), and query-string
|
|
492
|
+
stripping on the client URL.
|
|
493
|
+
- Diagnostics: `ROUTE001` for duplicate server handlers on the same route;
|
|
494
|
+
`ROUTE002` for high-confidence client calls with no matching server
|
|
495
|
+
route. Low-confidence (dynamic) client URLs do not warn.
|
|
496
|
+
- Tests: 21 unit cases (covering empty inputs, malformed metadata,
|
|
497
|
+
path-variable matching, cross-language aggregation, etc.) plus 1
|
|
498
|
+
integration test wiring the Bridge through a real `JsonStore` round
|
|
499
|
+
trip on disk. `docs/bridges/http_route.md` documents the metadata
|
|
500
|
+
contract and known limitations.
|
|
501
|
+
- Registered via `[project.entry-points."codemap.bridges"] http_route =
|
|
502
|
+
"codemap.core.bridge.http_route:HttpRouteBridge"` — on equal footing
|
|
503
|
+
with any third-party Bridge (ADR-004).
|
|
504
|
+
|
|
505
|
+
### Added — Sprint N-1 — Python indexer (2026-05-30)
|
|
506
|
+
|
|
507
|
+
- `codemap.indexers.python.PythonIndexer` — first real-language indexer.
|
|
508
|
+
Built on the stdlib `ast` module; produces `function` / `method` /
|
|
509
|
+
`class` / `field` / `variable` symbols and `calls` / `imports` /
|
|
510
|
+
`extends` edges. Diagnostics are isolated per file (syntax errors,
|
|
511
|
+
non-UTF-8 sources do not abort a run).
|
|
512
|
+
- SymbolID scheme `scip-python`; the file path is encoded as a chain of
|
|
513
|
+
`namespace` descriptors, matching the SCIP convention.
|
|
514
|
+
- 25 unit cases + 3 golden directory fixtures under
|
|
515
|
+
`tests/fixtures/indexers/python/`. Dogfood baseline on this repository:
|
|
516
|
+
48 files / 437 symbols / 1232 edges / 0 diagnostics.
|
|
517
|
+
- `docs/indexers/python.md` documents the resolution policy, the
|
|
518
|
+
confidence ladder, and known limitations.
|
|
519
|
+
|
|
520
|
+
### Changed
|
|
521
|
+
|
|
522
|
+
- `JsonStore` integrity check now treats only missing edge **sources** as
|
|
523
|
+
corruption; missing edge **targets** are normal (external library
|
|
524
|
+
references the indexer did not cover). Design doc §6.4 updated to
|
|
525
|
+
match.
|
|
526
|
+
|
|
527
|
+
### Added — Sprint 0 — Engineering scaffolding (2026-05-30)
|
|
528
|
+
|
|
529
|
+
- Project layout following ADR-003 (`core` / `io` / `indexers` / `cli` / `mcp` separation).
|
|
530
|
+
- `pyproject.toml` (Hatch backend) with quality-gate configuration: ruff, mypy strict, pytest, coverage, import-linter.
|
|
531
|
+
- `SymbolID` (SCIP format) with parse / `to_string` round-trip — ADR-001.
|
|
532
|
+
- Pydantic data models with `schema_version` enforcement — ADR-006.
|
|
533
|
+
- `SymbolStore` Protocol + JSON backend with atomic writes and file locking — ADR-002, ADR-008.
|
|
534
|
+
- `Indexer` / `Bridge` Protocols with entry_points registry — ADR-004.
|
|
535
|
+
- Typer CLI skeleton: `--version`, `--help`, `doctor`, `index`.
|
|
536
|
+
- Diagnostics: sysexits.h exit codes, structured logging — ADR-005.
|
|
537
|
+
- CI: GitHub Actions matrix (Python 3.11/3.12/3.13 × macOS/Linux), lint + type + test + build.
|
|
538
|
+
- ADRs 0001–0012 documenting Day-1 decisions (including ADR-L001 language neutrality).
|
|
539
|
+
- Reference indexer `_example_lang` to validate end-to-end pipeline.
|
|
540
|
+
|
|
541
|
+
[Unreleased]: https://github.com/qxbyte/codemap/compare/v0.0.0...HEAD
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Xue Qiang
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|