Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
403 commits
Select commit Hold shift + click to select a range
f115f5d
engine: resolve reads of module-level consts through their import bin…
swapnilpaliwal-sd Sep 30, 2026
699d90e
impact: a callback or dependency given to one instance reaches caller…
swapnilpaliwal-sd Sep 30, 2026
0548acd
context/impact: lockfiles and manifest package lists are never text l…
swapnilpaliwal-sd Sep 30, 2026
5e2290d
context/impact: manifest package lists are never text leads, in any m…
swapnilpaliwal-sd Sep 30, 2026
e492c51
Merge pull request #1830 from AxiomCodeAI/apps/javascript/graph-prove…
swapnilpaliwal-sd Sep 30, 2026
9212383
Merge pull request #1828 from AxiomCodeAI/apps/typescript/keyed-inpro…
swapnilpaliwal-sd Sep 30, 2026
5ca5f0e
Merge pull request #1826 from AxiomCodeAI/apps/javascript/const-objec…
swapnilpaliwal-sd Sep 30, 2026
6a98539
Merge remote-tracking branch 'origin/0.1.9' into HEAD
swapnilpaliwal-sd Sep 30, 2026
b502950
changed, test-impact, impact: a mapper XML statement is its mapper me…
swapnilpaliwal-sd Sep 30, 2026
7ca9b40
impact: mapper parameters, reflective copies and bound keys as field …
swapnilpaliwal-sd Sep 30, 2026
cf1f5b9
impact, test-impact, path: a servlet filter runs for the tests that l…
swapnilpaliwal-sd Sep 30, 2026
ddf331c
Merge branch '0.1.9' into apps/integration-0.1.9
swapnilpaliwal-sd Sep 30, 2026
b6375b3
TypeScript: each key of a module-level const object literal is a decl…
swapnilpaliwal-sd Sep 30, 2026
0f207ca
impact: a const table's key spelled like a class answers as the key
swapnilpaliwal-sd Sep 30, 2026
d0cb0d7
TypeScript: a key read in a parameter's decorator is read by its method
swapnilpaliwal-sd Sep 30, 2026
982dd5c
TypeScript: a key read in a parameter's default is read by its method
swapnilpaliwal-sd Sep 30, 2026
673ccc5
TypeScript suite: a const table's key is scored under its module, as …
swapnilpaliwal-sd Sep 30, 2026
47bcadc
TypeScript: one owner for a const table's keys after the index-side d…
swapnilpaliwal-sd Sep 30, 2026
a627e1d
changed: charge an edit inside a multi-line field initializer to that…
swapnilpaliwal-sd Sep 30, 2026
d2afa19
changed: a const object's data key edit is its initializer; a table's…
swapnilpaliwal-sd Sep 30, 2026
610623e
Merge pull request #1838 from AxiomCodeAI/apps/integration-0.1.9
swapnilpaliwal-sd Sep 30, 2026
49e1512
impact: a call on a package's value is not a by-name caller of a proj…
swapnilpaliwal-sd Sep 30, 2026
3c09f9c
Merge pull request #1829 from AxiomCodeAI/apps/typescript/const-objec…
swapnilpaliwal-sd Sep 30, 2026
c17d28e
Merge pull request #1825 from AxiomCodeAI/apps/javascript/context-tex…
swapnilpaliwal-sd Sep 30, 2026
96085c5
Merge pull request #1839 from AxiomCodeAI/apps/typescript/multiline-c…
swapnilpaliwal-sd Sep 30, 2026
a1c01a9
Merge apps/integration-0.1.9; IMPACT_VERSION 62 carries this PR's fac…
swapnilpaliwal-sd Sep 30, 2026
d6dcbfa
Merge remote-tracking branch 'origin/0.1.9' into HEAD
swapnilpaliwal-sd Sep 30, 2026
37c13aa
Merge apps/integration-0.1.9; goldens regenerated from the merged engine
swapnilpaliwal-sd Sep 30, 2026
4eca851
Merge apps/integration-0.1.9
swapnilpaliwal-sd Sep 30, 2026
4933404
Merge pull request #1836 from AxiomCodeAI/apps/typescript/imported-co…
swapnilpaliwal-sd Sep 30, 2026
f47d7f1
Merge pull request #1840 from AxiomCodeAI/apps/javascript/by-name-row…
swapnilpaliwal-sd Sep 30, 2026
4330a3f
Merge apps/integration-0.1.9; the export manifest keeps both field_ac…
swapnilpaliwal-sd Sep 30, 2026
20e123f
Merge apps/integration-0.1.9
swapnilpaliwal-sd Sep 30, 2026
69620fb
Merge pull request #1837 from AxiomCodeAI/apps/javascript/per-instanc…
swapnilpaliwal-sd Sep 30, 2026
c1dbec4
impact: word interface dispatch as certain, and say when the answer i…
swapnilpaliwal-sd Sep 30, 2026
5c2d691
Merge branch 'apps/integration-0.1.9' into fix/impact-trustworthy-output
swapnilpaliwal-sd Sep 30, 2026
ca3a86d
impact: keep internal oracle figures out of the answer
swapnilpaliwal-sd Sep 30, 2026
fbb0ef6
Merge branch 'fix/impact-trustworthy-output' of https://github.com/Ax…
swapnilpaliwal-sd Sep 30, 2026
37ece4c
impact: word the complete line without the by-name label
swapnilpaliwal-sd Sep 30, 2026
6369393
Merge pull request #1841 from AxiomCodeAI/fix/impact-trustworthy-output
swapnilpaliwal-sd Oct 1, 2026
7ce9d88
Aid grep instead of replacing it: a grep note says only what grep can…
swapnilpaliwal-sd Oct 1, 2026
c8754cb
grep aid: name who enters a declaration nothing in the code calls; te…
swapnilpaliwal-sd Oct 1, 2026
ad9da59
Merge pull request #1842 from AxiomCodeAI/apps/feed/grep-aid
swapnilpaliwal-sd Oct 1, 2026
1568508
grep aid: off, false and 0 all switch it off
swapnilpaliwal-sd Oct 1, 2026
f119e79
Merge pull request #1843 from AxiomCodeAI/apps/feed/grep-aid
swapnilpaliwal-sd Oct 1, 2026
061bf35
impact: keep the direct callers and every link grep cannot make, each…
swapnilpaliwal-sd Oct 1, 2026
5f91567
Merge pull request #1844 from AxiomCodeAI/apps/feed/grep-aid-direct
swapnilpaliwal-sd Oct 1, 2026
9f127c5
test-impact: a helper beside the tests is the route, not a test; far …
swapnilpaliwal-sd Oct 1, 2026
8dfdb4d
changed: a declaration longer or gone in the base than in the graph's…
swapnilpaliwal-sd Oct 1, 2026
2f13a96
index: look up symbols by id and refs and literals by file and line t…
swapnilpaliwal-sd Oct 1, 2026
b43cebe
Merge pull request #1847 from AxiomCodeAI/fix/graph-lookup-indexes
swapnilpaliwal-sd Oct 1, 2026
3b2a584
build: export impact's facts in the background once the graph is quer…
swapnilpaliwal-sd Oct 1, 2026
0df85ac
Merge pull request #1845 from AxiomCodeAI/apps/javascript/test-impact…
swapnilpaliwal-sd Oct 2, 2026
fc6c771
Merge pull request #1846 from AxiomCodeAI/apps/java/changed-maps-hunk…
swapnilpaliwal-sd Oct 2, 2026
8077b7e
Merge remote-tracking branch 'origin/0.1.9' into pr1848
swapnilpaliwal-sd Oct 2, 2026
1cb2b38
Merge pull request #1848 from AxiomCodeAI/fix/graph-lookup-indexes
swapnilpaliwal-sd Oct 2, 2026
f574692
tests: a failing case prints the tail of its output, where a tracebac…
swapnilpaliwal-sd Oct 2, 2026
d65fd56
context: export the graph's facts before reading its edges
swapnilpaliwal-sd Oct 2, 2026
147f4a8
Merge pull request #1849 from AxiomCodeAI/fix/context-crash-after-bg-…
swapnilpaliwal-sd Oct 2, 2026
82a0ab2
impact/path: one facts export per graph, however many queries arrive …
swapnilpaliwal-sd Oct 2, 2026
1205b15
impact: an undeclared name that arrives through an import hints at --…
swapnilpaliwal-sd Oct 3, 2026
e8fc153
Merge pull request #1850 from AxiomCodeAI/perf/single-flight-export
swapnilpaliwal-sd Oct 3, 2026
6dde0de
impact/path: the facts export stops paying per-row SQL — 171 s to 55 …
swapnilpaliwal-sd Oct 3, 2026
0d9913f
Merge pull request #1851 from AxiomCodeAI/perf/site-file-per-graph
swapnilpaliwal-sd Oct 3, 2026
8ba21f1
The MCP surface is impact, path and tests: search is the agent's own
swapnilpaliwal-sd Oct 3, 2026
966ed85
perf(python): read the parsed tree through a one-pass plain-JS mirror
swapnilpaliwal-sd Oct 3, 2026
67034be
Merge apps/integration-0.1.9: their find removal wins; find leaves th…
swapnilpaliwal-sd Oct 3, 2026
f4242c3
perf(java,csharp): read parsed trees through the shared one-pass mirror
swapnilpaliwal-sd Oct 4, 2026
7671600
perf(typescript,build): verify CSV rows at append; reuse closure-pass…
swapnilpaliwal-sd Oct 4, 2026
5925beb
Merge pull request #1852 from AxiomCodeAI/chore/surface-path-impact-only
swapnilpaliwal-sd Oct 5, 2026
d515f5d
Merge pull request #1853 from AxiomCodeAI/perf/parser-one-walk
swapnilpaliwal-sd Oct 6, 2026
e6fb608
Only the supported surface is dispatched: find, graph, diff and insta…
swapnilpaliwal-sd Oct 6, 2026
679d357
perf(python): the parse stage runs on a pool of worker threads, byte-…
swapnilpaliwal-sd Oct 6, 2026
941a913
parse pool: the thread machinery moves to parse-pool-core, for every …
swapnilpaliwal-sd Oct 6, 2026
f86f0e0
path: the methods behind a [by name] caller are counted, with named n…
swapnilpaliwal-sd Oct 6, 2026
e1b6d44
surface: a bound: line survives to the front door
swapnilpaliwal-sd Oct 6, 2026
26839a2
perf(csharp): the parse stage runs on a pool of worker threads, byte-…
swapnilpaliwal-sd Oct 6, 2026
6939e24
perf(java): the parse stage runs on a pool of worker threads, byte-id…
swapnilpaliwal-sd Oct 6, 2026
d9b7bbb
perf(typescript): the parse stage runs on a pool of worker threads, b…
swapnilpaliwal-sd Oct 6, 2026
be91d28
perf(javascript): the parse stage runs on a pool of worker threads, b…
swapnilpaliwal-sd Oct 6, 2026
7ed366d
Merge remote-tracking branches 'origin/pp/java-parse-pool' and 'origi…
swapnilpaliwal-sd Oct 6, 2026
1111bec
Merge remote-tracking branch 'origin/pp/js-parse-pool' into HEAD
swapnilpaliwal-sd Oct 6, 2026
9395005
python: an imported module-level instance types its receiver across t…
swapnilpaliwal-sd Oct 6, 2026
1c41ba2
path: --json says what the prose says — verified and the unresolved c…
swapnilpaliwal-sd Oct 6, 2026
a662d1a
mcp: context is back on the surface — the narrative verb beside find
swapnilpaliwal-sd Oct 6, 2026
8986b77
context: a task in another language names the lexical limit, not a pa…
swapnilpaliwal-sd Oct 6, 2026
f030c39
index: literals carry numbers and booleans, and a constant answers wi…
swapnilpaliwal-sd Oct 6, 2026
b43c6d6
Merge apps/integration-0.1.9: context stays on the surface the trim n…
swapnilpaliwal-sd Oct 7, 2026
95a86dc
surfaces: context is the fifth public verb, with its one option
swapnilpaliwal-sd Oct 7, 2026
a3ab44a
engine: the solve runs in parallel where it is safe — linux-x64 by de…
swapnilpaliwal-sd Oct 7, 2026
a30511e
Merge pull request #1855 from AxiomCodeAI/fix/path-name-matched-callers
swapnilpaliwal-sd Oct 7, 2026
bab23ba
Merge pull request #1856 from AxiomCodeAI/fix/1140-imported-instance-…
swapnilpaliwal-sd Oct 7, 2026
3a10e11
Merge pull request #1857 from AxiomCodeAI/fix/constants-queryable
swapnilpaliwal-sd Oct 7, 2026
243a4b2
java rules: a local-variable use resolves to its declaration once, be…
swapnilpaliwal-sd Oct 7, 2026
e6790bc
Merge remote-tracking branch 'origin/apps/integration-0.1.9' into HEAD
swapnilpaliwal-sd Oct 7, 2026
054187e
parser: an HTML and CSS front end on tree-sitter, with its specificat…
JaredHLZhang Oct 7, 2026
3c6cec8
engine-package test: the stub include dir carries the header the seql…
swapnilpaliwal-sd Oct 7, 2026
c2a566b
engine-package test: pin the solve flavor serial — the probe made pre…
swapnilpaliwal-sd Oct 7, 2026
ddfaf04
Merge pull request #1859 from AxiomCodeAI/fix/engine-package-seqlock-…
swapnilpaliwal-sd Oct 7, 2026
bdc0a0a
Merge branch 'apps/integration-0.1.9' into apps/web-front-end-0.1.9
swapnilpaliwal-sd Oct 7, 2026
1d74f20
Merge pull request #1858 from AxiomCodeAI/apps/web-front-end-0.1.9
swapnilpaliwal-sd Oct 7, 2026
be2bf4a
python rules: the two joins that were two thirds of a large subject's…
swapnilpaliwal-sd Oct 7, 2026
4eab3a8
Merge remote-tracking branch 'origin/apps/integration-0.1.9' into HEAD
swapnilpaliwal-sd Oct 7, 2026
d3e2a48
typescript rules: the three shapes the profile named — 192s to 99s se…
swapnilpaliwal-sd Oct 7, 2026
5f68c70
typescript case: a chained access typed through a parameter's inline …
swapnilpaliwal-sd Oct 8, 2026
7f4ef52
python rules, round two: the attribute prefix hoisted, the diagnostic…
swapnilpaliwal-sd Oct 8, 2026
eb0d952
Merge pull request #1860 from AxiomCodeAI/perf/ts-datalog-rules
swapnilpaliwal-sd Oct 8, 2026
86da814
engine: darwin-arm64 solves in parallel — the residual crash was unfe…
swapnilpaliwal-sd Oct 8, 2026
954c901
bundle: multi-row inserts, and the honest number the quiet box gave
swapnilpaliwal-sd Oct 8, 2026
894a6d0
engine-package test: the stub include dir carries BTree.h's publicati…
swapnilpaliwal-sd Oct 8, 2026
d6bc9b7
darwin-arm64 parallel goes back to opt-in: a harder repro still crash…
swapnilpaliwal-sd Oct 8, 2026
c4c55cf
seqlock-fix-3: a fence before every store that makes a new btree node…
swapnilpaliwal-sd Oct 8, 2026
9df8377
build-engines: the vendored headers carry the fix-3 fences, not just …
swapnilpaliwal-sd Oct 8, 2026
9603b02
build-engines: find the souffle headers instead of assuming the doubl…
swapnilpaliwal-sd Oct 8, 2026
e328b42
parallel solve on every served platform
swapnilpaliwal-sd Oct 8, 2026
9606b3e
overlay: the mingw-compile guards — a Windows clone builds its engine…
swapnilpaliwal-sd Oct 8, 2026
07b133f
refresh: batch edits where a rebuild is slow
swapnilpaliwal-sd Oct 8, 2026
2ac093a
Merge pull request #1862 from AxiomCodeAI/fix/refresh-batch-trigger
swapnilpaliwal-sd Oct 8, 2026
bf2e7fe
csharp rules: the per-tier tally counts each tier once, not once per …
swapnilpaliwal-sd Oct 8, 2026
ee35163
python rules, round three: the pairing key materialized, the leftover…
swapnilpaliwal-sd Oct 8, 2026
3672603
javascript rules: the two cross-product anchors that were half the solve
swapnilpaliwal-sd Oct 8, 2026
ba3e49f
query: answer mid-edit at once, and index the no-caller lookups
swapnilpaliwal-sd Oct 8, 2026
b5d6d73
Merge pull request #1864 from AxiomCodeAI/perf/query-speed
swapnilpaliwal-sd Oct 8, 2026
7328f5b
Merge pull request #1861 from AxiomCodeAI/perf/ts-datalog-rules
swapnilpaliwal-sd Oct 8, 2026
5b1087b
Merge pull request #1863 from AxiomCodeAI/perf/js-cs-datalog-rules
swapnilpaliwal-sd Oct 8, 2026
eb60c9f
engines: node >=22.5.0, the floor the product actually has
swapnilpaliwal-sd Oct 8, 2026
896e395
Merge pull request #1866 from AxiomCodeAI/fix/node-engines-22-5
swapnilpaliwal-sd Oct 8, 2026
85e92fe
mcp: a bare AXIOMCODE_BASH is a program on PATH, not a missing file (…
swapnilpaliwal-sd Oct 8, 2026
981fdf2
mcp: on Windows a bare AXIOMCODE_BASH stays an error, never WSL's bash
swapnilpaliwal-sd Oct 8, 2026
ad2e39d
Merge remote-tracking branch 'origin/apps/integration-0.1.9' into fix…
swapnilpaliwal-sd Oct 8, 2026
2893531
node: the floor is 22.13, said before anything runs (#1865)
swapnilpaliwal-sd Oct 8, 2026
e87b491
README: Node 22.13 is the floor, and a query answers mid-edit at once
swapnilpaliwal-sd Oct 8, 2026
2e3c17c
parser: 0.2.0, and the README names HTML and CSS up front
swapnilpaliwal-sd Oct 8, 2026
e0e8450
Merge pull request #1867 from AxiomCodeAI/fix/1357-bash-name-on-path
swapnilpaliwal-sd Oct 8, 2026
192f73f
Merge branch 'apps/integration-0.1.9' into chore/parser-0.2.0
swapnilpaliwal-sd Oct 8, 2026
c5831e6
Merge pull request #1868 from AxiomCodeAI/chore/parser-0.2.0
swapnilpaliwal-sd Oct 8, 2026
88c0baa
feed: the search runs untouched — the pre-search directive is removed
swapnilpaliwal-sd Oct 8, 2026
034e7b4
seqlock-fix-4: the optimistic descent must not dereference a null child
swapnilpaliwal-sd Oct 8, 2026
029b814
typescript: a test the build tsconfig excludes joins the program it i…
swapnilpaliwal-sd Oct 9, 2026
b115cf2
index: a file named test.ts that registers a test is a test
swapnilpaliwal-sd Oct 9, 2026
74858c4
query --json: one document when no language's graph answers
swapnilpaliwal-sd Oct 9, 2026
d749cf3
feed: no hook annotates a read or a search; the graph answers when asked
swapnilpaliwal-sd Oct 9, 2026
c4528f6
typescript: a JavaScript test of TypeScript source joins the program …
swapnilpaliwal-sd Oct 9, 2026
dd6538e
typescript: the site that creates a Proxy hands over its handler's traps
swapnilpaliwal-sd Oct 9, 2026
a811ccf
Merge pull request #1874 from AxiomCodeAI/fix/ts-test-impact
swapnilpaliwal-sd Oct 9, 2026
6453aa5
typescript: a JSX attribute hands its function to the element, and a …
swapnilpaliwal-sd Oct 9, 2026
b2e7cda
typescript: a call through an imported const runs the function it holds
swapnilpaliwal-sd Oct 9, 2026
5c2130a
typescript: a call on the platform's own objects is no by-name caller…
swapnilpaliwal-sd Oct 9, 2026
92d7cee
fix(parser/js): an import resolves to the code it runs, not a declara…
swapnilpaliwal-sd Oct 9, 2026
21c0f9f
typescript: a list's element is typed through a type variable's const…
swapnilpaliwal-sd Oct 9, 2026
3388587
fix(js): a test file's calls do not decide whether the program's argu…
swapnilpaliwal-sd Oct 9, 2026
408d01f
fix(js): a call of what a project wrapper returned runs what that sit…
swapnilpaliwal-sd Oct 9, 2026
3652330
Merge pull request #1871 from AxiomCodeAI/feed/directive-moves-post
swapnilpaliwal-sd Oct 9, 2026
b690a5d
Merge pull request #1872 from AxiomCodeAI/fix/speculative-fetch-guard
swapnilpaliwal-sd Oct 9, 2026
9d52b70
fix(parser/python): an import of a module shipped with a .pyi beside …
swapnilpaliwal-sd Oct 9, 2026
221e3b6
fix(python): type a test parameter by the fixture the runner hands it
swapnilpaliwal-sd Oct 9, 2026
6bc6ce6
fix(python): a decorator returning update_wrapper(wrapper, f) or cast…
swapnilpaliwal-sd Oct 9, 2026
6aae527
fix(impact): a call under `if __name__ == "__main__":` is not taken b…
swapnilpaliwal-sd Oct 9, 2026
bfb7089
fix(impact): a conjunctive main guard (`cond and __name__ == "__main_…
swapnilpaliwal-sd Oct 9, 2026
cafd6d2
fix(impact): an on-demand protocol member is reached from test code t…
swapnilpaliwal-sd Oct 9, 2026
b0dca3c
fix(python): `obj.x = v` and `del obj.x` are calls to the property's …
swapnilpaliwal-sd Oct 9, 2026
ba6d9ba
fix(python): a local's Optional/union annotation types it, and every …
swapnilpaliwal-sd Oct 9, 2026
78eaedb
fix(impact): a src-layout module is imported by its package name, and…
swapnilpaliwal-sd Oct 9, 2026
80fade8
refresh: batch every 5 edits, not 3, where a rebuild is slow
swapnilpaliwal-sd Oct 9, 2026
9e4379e
csharp: a name written inside a namespace is read from that namespace
swapnilpaliwal-sd Oct 9, 2026
d867f4f
path: a C# source file is an endpoint
swapnilpaliwal-sd Oct 9, 2026
ea42c61
csharp: a using resource is typed by its initializer
swapnilpaliwal-sd Oct 9, 2026
59a1ce9
csharp: a constructor runs its base class's parameterless constructor
swapnilpaliwal-sd Oct 9, 2026
0966ce7
csharp: an unstaged receiver keeps its type name for extension matching
swapnilpaliwal-sd Oct 9, 2026
21917af
csharp: a static member read through its type name types the chain
swapnilpaliwal-sd Oct 9, 2026
c0dab0b
csharp: a constructed generic type is a static receiver
swapnilpaliwal-sd Oct 9, 2026
8061569
impact: a Java type's initializer is run by whoever uses the type
swapnilpaliwal-sd Oct 9, 2026
34b9ebf
parser: a field initializer written after a comment is read
swapnilpaliwal-sd Oct 9, 2026
7422e84
impact: the at-load hop sees a test that reads a static field
swapnilpaliwal-sd Oct 9, 2026
b73381c
impact: the members a library runs on a Java object reach whoever bui…
swapnilpaliwal-sd Oct 9, 2026
299b63b
Merge pull request #1879 from AxiomCodeAI/refresh/batch-5
swapnilpaliwal-sd Oct 9, 2026
5d153ad
fix(parser/python): an import of a module shipped with a .pyi beside …
swapnilpaliwal-sd Oct 9, 2026
cba62f5
Merge origin/fix/parser-py-module-prefers-source into the 0.1.9 impac…
swapnilpaliwal-sd Oct 9, 2026
d08b4a5
Merge origin/fix/js-impact-loop into the 0.1.9 impact-loop batch
swapnilpaliwal-sd Oct 9, 2026
1ec53ab
Merge origin/fix/ts-impact-loop-2 into the 0.1.9 impact-loop batch
swapnilpaliwal-sd Oct 9, 2026
76b4292
Merge origin/fix/java-impact-loop into the 0.1.9 impact-loop batch
swapnilpaliwal-sd Oct 9, 2026
8deef3e
Merge origin/fix/cs-impact-loop into the 0.1.9 impact-loop batch
swapnilpaliwal-sd Oct 9, 2026
6495d8f
Merge local/py-1873 into the 0.1.9 impact-loop batch
swapnilpaliwal-sd Oct 9, 2026
ab1e09b
fix(impact): a test that spawns `python -m pkg` runs pkg/__main__.py
swapnilpaliwal-sd Oct 9, 2026
d202458
fix(python): getattr(self, f"visit_{...}") dispatches to the visit_* …
swapnilpaliwal-sd Oct 9, 2026
ee7d906
fix(python): `with X() as y` types y as X where X.__enter__ returns s…
swapnilpaliwal-sd Oct 9, 2026
b836d07
fix(python): a loop over a mapping's .items()/.values()/.keys() types…
swapnilpaliwal-sd Oct 9, 2026
e4eeb91
fix(python): a parametrize row or a fixture's params= value types the…
swapnilpaliwal-sd Oct 9, 2026
8b6c3ec
fix(python): repr(x), len(x), str(x) and the other one-dunder builtin…
swapnilpaliwal-sd Oct 9, 2026
0646c84
fix(python): a parameter's default value reaches it, as a call-site a…
swapnilpaliwal-sd Oct 9, 2026
857e8f1
fix(parser/python): an import more qualified than a module resolves t…
swapnilpaliwal-sd Oct 9, 2026
32f0b35
feat(python): library callback summaries -- what an installed library…
swapnilpaliwal-sd Oct 9, 2026
9938c30
feat(impact): walk a library calling back into the client, as its own…
swapnilpaliwal-sd Oct 9, 2026
cf5b8bd
feat(path, impact): a library's hand-back is a hop path walks and a d…
swapnilpaliwal-sd Oct 9, 2026
92bf8ed
Merge Python recall fixes (#1883) onto the 0.1.9 batch
swapnilpaliwal-sd Oct 10, 2026
026edf7
Merge Python library callback summaries (#1884) onto the 0.1.9 batch
swapnilpaliwal-sd Oct 10, 2026
48841c5
fix(python): the dispatch cap is off by default for Python; re-freeze…
swapnilpaliwal-sd Oct 10, 2026
3d60d3e
impact: a test whose registrar call opens on an earlier line is a test
swapnilpaliwal-sd Oct 10, 2026
0ad6936
impact: a vitest / jest set-up file runs before the tests it configures
swapnilpaliwal-sd Oct 10, 2026
9f7d084
fix(python): an operator or a truth test runs its operand's dunder
swapnilpaliwal-sd Oct 10, 2026
a4119ef
fix(python): a library class named through a dotted base, a star re-e…
swapnilpaliwal-sd Oct 10, 2026
0e934b6
fix(impact, path): a library-callback site keeps its name match unles…
swapnilpaliwal-sd Oct 10, 2026
ec6e30d
fix(context): a report whose headline names no code chooses its scope…
swapnilpaliwal-sd Oct 10, 2026
4b50e8e
Merge pull request #1882 from AxiomCodeAI/release/0.1.9-impact-loops
swapnilpaliwal-sd Oct 10, 2026
36cfe80
Merge pull request #1885 from AxiomCodeAI/fix/py-recall-combined
swapnilpaliwal-sd Oct 10, 2026
6ff9a13
docs(skill): explain --library: one entry per dependency, comma-separ…
swapnilpaliwal-sd Oct 10, 2026
a159869
docs(skill): a --library entry is a library IR (the parser's CSV tabl…
swapnilpaliwal-sd Oct 10, 2026
145d8a8
docs(skill): --library wording matches what was checked: `~` after a …
swapnilpaliwal-sd Oct 10, 2026
a9e41b6
feat(index): `--library auto` stages the dependencies the project imp…
swapnilpaliwal-sd Oct 10, 2026
491209c
fix(path): a TypeScript library method is found by its member name; c…
swapnilpaliwal-sd Oct 10, 2026
0e043b3
feat(index): `--library auto` finds a Java project's dependencies thr…
swapnilpaliwal-sd Oct 10, 2026
0a7ec6a
feat(index): `--library auto` compiles a C# project's NuGet packages …
swapnilpaliwal-sd Oct 10, 2026
ccc20b6
feat(index): `--library auto` decompiles a Java dependency that ships…
swapnilpaliwal-sd Oct 10, 2026
25296c2
typescript: Object.assign(fn, members) evaluates to fn, so a call of …
swapnilpaliwal-sd Oct 10, 2026
26b20b4
query: a call that selected an overload signature reaches the overloa…
swapnilpaliwal-sd Oct 10, 2026
c3138c8
feat(refresh): a graph built with --library is stale when a dependenc…
swapnilpaliwal-sd Oct 10, 2026
7ccf339
Merge branch 'apps/integration-0.1.9' into fix/py-recall-3
swapnilpaliwal-sd Oct 10, 2026
bab2b30
feat(refresh): a Java dependency fetched after the build makes a --li…
swapnilpaliwal-sd Oct 10, 2026
473bbb3
Merge pull request #1886 from AxiomCodeAI/fix/py-recall-3
swapnilpaliwal-sd Oct 10, 2026
a963360
Merge pull request #1890 from AxiomCodeAI/apps/integration-0.1.9
swapnilpaliwal-sd Oct 10, 2026
c933dd3
fix(impact): two static over-reach sources in Python transitive impact
swapnilpaliwal-sd Oct 10, 2026
65510f0
fix(python-engine): a class-object parameter under a union constructs…
swapnilpaliwal-sd Oct 10, 2026
b9c2707
Merge branch 'apps/integration-0.1.9' into fix/context-sensitive-reach
swapnilpaliwal-sd Oct 10, 2026
345ded8
impact: a JavaScript / TypeScript test that never loads the changed f…
swapnilpaliwal-sd Oct 10, 2026
f0edf90
feat(links): agent-asserted call edges — list unknown sites, link the…
swapnilpaliwal-sd Oct 10, 2026
5a39161
javascript: a test that never loads the change is not selected; a moc…
swapnilpaliwal-sd Oct 10, 2026
17d6faa
Merge origin/apps/integration-0.1.9 into fix/js-impact-f1
swapnilpaliwal-sd Oct 10, 2026
ea07409
feat(links): columns, rejections, candidates, derived edges on a link…
swapnilpaliwal-sd Oct 10, 2026
98a78e9
feat(links): a construction links only to its type; not:<target> reje…
swapnilpaliwal-sd Oct 10, 2026
ac21c00
docs(readme): the axiomcode link row in the CLI table
swapnilpaliwal-sd Oct 10, 2026
517fa3b
fix(csharp): accessors dispatch, implicit statement calls, base overl…
swapnilpaliwal-sd Oct 10, 2026
3407450
Merge remote-tracking branch 'origin/fix/context-sensitive-reach' int…
swapnilpaliwal-sd Oct 10, 2026
6aa8e76
Merge branch 'fix/js-impact-f1' into feat/asserted-edges
swapnilpaliwal-sd Oct 10, 2026
fd88fb6
Merge branch 'feat/asserted-edges' into fix/ts-recall-next
swapnilpaliwal-sd Oct 10, 2026
0b3cabd
Merge branch 'fix/ts-recall-next' into fix/ts-impact-f1
swapnilpaliwal-sd Oct 10, 2026
0dbe14c
fix(java): narrower `at load` hop, platform receivers as boundaries, …
swapnilpaliwal-sd Oct 10, 2026
34d0c5f
chore(bundle): regenerate SCHEMA.md for the C# relations
swapnilpaliwal-sd Oct 10, 2026
a523fd3
Merge pull request #1891 from AxiomCodeAI/fix/context-sensitive-reach
swapnilpaliwal-sd Oct 10, 2026
c3c885b
Merge pull request #1894 from AxiomCodeAI/fix/js-impact-f1
swapnilpaliwal-sd Oct 10, 2026
67e996a
Merge pull request #1895 from AxiomCodeAI/feat/asserted-edges
swapnilpaliwal-sd Oct 10, 2026
b26f444
Merge pull request #1888 from AxiomCodeAI/fix/ts-recall-next
swapnilpaliwal-sd Oct 10, 2026
d859ee3
fix(csharp): follow a function handed to a parameter; type a collecti…
swapnilpaliwal-sd Oct 10, 2026
91fc1aa
Merge pull request #1893 from AxiomCodeAI/fix/ts-impact-f1
swapnilpaliwal-sd Oct 10, 2026
f08880e
Merge branch 'apps/integration-0.1.9' into fix/cs-reach-loop
swapnilpaliwal-sd Oct 10, 2026
1393e3e
fix(csharp): an argument's shape prunes overloads; a library-typed re…
swapnilpaliwal-sd Oct 10, 2026
f137788
fix(csharp): initializer writes, null-conditional reads, enumerator e…
swapnilpaliwal-sd Oct 10, 2026
32c5d04
Merge remote-tracking branch 'origin/apps/integration-0.1.9' into fix…
swapnilpaliwal-sd Oct 10, 2026
26badfb
Merge pull request #1896 from AxiomCodeAI/fix/cs-reach-loop
swapnilpaliwal-sd Oct 10, 2026
630dc8a
Merge pull request #1898 from AxiomCodeAI/fix/java-reach-loop
swapnilpaliwal-sd Oct 10, 2026
b2bf49b
Merge pull request #1903 from AxiomCodeAI/apps/integration-0.1.9
swapnilpaliwal-sd Oct 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 4 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,7 @@
*.jpg binary
*.pdf binary
*.sqlite binary

# A torture fixture whose CRLF line endings ARE the trap it sets (a BOM and CRLF in one
# page); normalising it would remove the case the suite asserts.
parser/src/test-data/web/torture/quirks.html -text
71 changes: 65 additions & 6 deletions .github/workflows/build-engines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,9 @@ jobs:
id="$(bash graph/pipeline/run-souffle.sh --language "$lang" --print-engine-id)"
echo "$lang: $id"; printf '%s' "$id" > "gen/$lang.id"
bash graph/pipeline/run-souffle.sh --language "$lang" --emit-program "gen/$lang.dl"
souffle -I graph -g "gen/$lang.cpp" "gen/$lang.dl" 2> "gen/$lang.gen.log" || { cat "gen/$lang.gen.log"; exit 1; }
# -j makes souffle EMIT the parallel loops (without it the C++ has none); whether a
# platform's binary runs them in parallel is decided at compile time below.
souffle -I graph -j 8 -g "gen/$lang.cpp" "gen/$lang.dl" 2> "gen/$lang.gen.log" || { cat "gen/$lang.gen.log"; exit 1; }
awk '/No rules\/facts defined/{skip=2;next} skip>0{skip--;next} {print}' "gen/$lang.gen.log"
done
# the query programs: self-contained (no #include), keyed by dl_program.py itself
Expand All @@ -89,6 +91,33 @@ jobs:
bash .github/scripts/query-smoke.sh expect gen/queries
cp .github/scripts/query-smoke.sh gen/queries/smoke.sh
cp -r /usr/include/souffle gen/souffle
# the seqlock fix (see souffle_overlay in run-souffle.sh): the write-entry RMW
# must be seq_cst or a weakly-ordered CPU lets data stores pass the version-odd
# store and readers validate garbage. Patched here so every platform's binary
# is built from the same fixed headers; the engine id carries +seqlock-fix-4,
# so these headers must carry the SAME patches run-souffle's overlay applies —
# a binary labeled fix-4 but built from lesser headers is the exact mislabeling
# the salt exists to prevent.
# the header layout differs by install (deb: souffle/utility; brew: souffle/souffle/utility),
# so the patched files are FOUND, not assumed — a miss fails the build here, loudly
PU=$(find gen/souffle -name ParallelUtil.h | head -1); [ -n "$PU" ]
sed -i 's/version\.fetch_or(0x1, std::memory_order_acquire)/version.fetch_or(0x1, std::memory_order_seq_cst)/g' "$PU"
grep -q 'fetch_or(0x1, std::memory_order_seq_cst)' "$PU"
! grep -q 'fetch_or(0x1, std::memory_order_acquire)' "$PU"
# fix-3: the publication fences, applied by the same anchored patch the local
# overlay uses (extracted from run-souffle.sh so the two cannot drift)
BT=$(find gen/souffle -name BTree.h | head -1); [ -n "$BT" ]
awk '/^import glob, os, sys$/,/^PYEOF$/' graph/pipeline/run-souffle.sh | sed '$d' > /tmp/fences.py
python3 /tmp/fences.py "$BT"
[ "$(grep -c 'seqlock-fix-3' "$BT")" = "4" ]
# fix-4: the speculative-fetch guards, applied by the same extracted patch
FW=$(find gen/souffle -name ConcurrentFlyweight.h | head -1); [ -n "$FW" ]
RT=$(find gen/souffle -name RecordTableImpl.h | head -1); [ -n "$RT" ]
[ "$(grep -c 'seqlock-fix-4' "$FW")" = "1" ]
[ "$(grep -c 'seqlock-fix-4' "$RT")" = "1" ]
[ "$(grep -c 'seqlock-fix-4' "$BT")" = "1" ]
BD=$(find gen/souffle -name BTreeDelete.h | head -1); [ -n "$BD" ]
[ "$(grep -c 'seqlock-fix-4' "$BD")" = "1" ]
# one key for the whole set; a partial match restores the previous set
echo "key=$(cat gen/*.id gen/queries/*.id | sha256sum | cut -c1-16)" >> "$GITHUB_OUTPUT"
# The compile flags live in THIS file and ENGINE_ID does not cover them, so its
Expand All @@ -104,8 +133,8 @@ jobs:
fail-fast: false
matrix:
target:
- { os: ubuntu-24.04, platform: linux-x64 }
- { os: ubuntu-24.04-arm, platform: linux-arm64 }
- { os: ubuntu-24.04, platform: linux-x64, manylinux: quay.io/pypa/manylinux_2_28_x86_64 }
- { os: ubuntu-24.04-arm, platform: linux-arm64, manylinux: quay.io/pypa/manylinux_2_28_aarch64 }
- { os: windows-2025, platform: win32-x64 }
runs-on: ${{ matrix.target.os }}
steps:
Expand All @@ -119,14 +148,31 @@ jobs:
path: engines
key: engines-${{ matrix.target.platform }}-${{ needs.generate.outputs.flags }}-${{ needs.generate.outputs.key }}
restore-keys: engines-${{ matrix.target.platform }}-${{ needs.generate.outputs.flags }}-
- name: Compile every language (Linux)
# THE GLIBC FLOOR. A binary links against the glibc of the machine that built it, and runs only where that
# glibc or a newer one is installed. Built on ubuntu-24.04 (glibc 2.39) every engine needed GLIBC_2.38, so it
# would not start on Ubuntu 22.04, Debian 12, RHEL 9 or Amazon Linux 2023: the official python and node
# Docker images, most CI and most servers. The compile therefore runs inside manylinux_2_28 (glibc 2.28,
# the floor Python wheels use), and the step after it fails the build if any binary asks for more.
- name: Compile every language (Linux, manylinux_2_28)
if: startsWith(matrix.target.platform, 'linux')
env:
MANYLINUX: ${{ matrix.target.manylinux }}
run: |
set -e
docker run --rm -v "$PWD:/w" -w /w -e LANGUAGES="$LANGUAGES" -u "$(id -u):$(id -g)" "$MANYLINUX" bash -ec '
c++ --version | head -1; ldd --version | head -1
for lang in $LANGUAGES; do
if cmp -s "gen/$lang.id" "engines/$lang/ENGINE_ID"; then echo "$lang: cached, rules unchanged"; continue; fi
mkdir -p "engines/$lang"
c++ -std=c++17 -O3 -w -static-libstdc++ -static-libgcc -I gen "gen/$lang.cpp" -o "engines/$lang/axiomcode-engine-$lang"
# OpenMP on BOTH architectures: the arm64 crash mode was two weak-ordering
# holes in the vendored headers (write-entry RMW + unfenced node publication),
# both patched above and validated 10/10 under load on linux-arm64 and
# darwin-arm64 (seqlock-fix-3). libgomp links STATICALLY so the binary runs on
# machines with no gcc runtime. The .parallel marker beside the binary is what
# run-souffle.sh reads to pass a real -j at run time.
OMP="-fopenmp -Wl,-Bstatic,-lgomp,-Bdynamic"
c++ -std=c++17 -O3 -w $OMP -static-libstdc++ -static-libgcc -I gen "gen/$lang.cpp" -o "engines/$lang/axiomcode-engine-$lang"
[ -n "$OMP" ] && touch "engines/$lang/axiomcode-engine-$lang.parallel"
cp "gen/$lang.id" "engines/$lang/ENGINE_ID"
done
mkdir -p engines/queries
Expand All @@ -136,7 +182,19 @@ jobs:
c++ -std=c++17 -O3 -w -static-libstdc++ -static-libgcc -I gen "$cpp" -o "engines/queries/axiomcode-query-$q"
cp "gen/queries/$q.id" "engines/queries/$q.id"
done
'
ls -la engines/*; ldd engines/java/axiomcode-engine-java || true
- name: Linux binaries need no glibc newer than 2.28
if: startsWith(matrix.target.platform, 'linux')
run: |
set -e
bad=0
for f in engines/*/axiomcode-*; do
need="$(objdump -T "$f" | grep -o 'GLIBC_[0-9.]*' | sed 's/GLIBC_//' | sort -V | tail -1)"
echo "$f needs glibc $need"
if [ "$(printf '%s\n2.28\n' "$need" | sort -V | tail -1)" != 2.28 ]; then echo "::error::$f needs glibc $need (> 2.28)"; bad=1; fi
done
exit $bad
- uses: ilammy/msvc-dev-cmd@v1
if: startsWith(matrix.target.platform, 'win32')
with: { arch: x64 }
Expand All @@ -148,8 +206,9 @@ jobs:
fc /b gen\%%L.id engines\%%L\ENGINE_ID >nul 2>&1
if errorlevel 1 (
if not exist engines\%%L mkdir engines\%%L
cl /nologo /std:c++17 /O2 /EHsc /bigobj /w /permissive- /Zc:__cplusplus /D_CRT_SECURE_NO_WARNINGS /DNOMINMAX /DUSE_CUSTOM_GETOPTLONG /I gen gen\%%L.cpp /Fe:engines\%%L\axiomcode-engine-%%L.exe
cl /nologo /std:c++17 /O2 /EHsc /bigobj /w /permissive- /Zc:__cplusplus /D_CRT_SECURE_NO_WARNINGS /DNOMINMAX /DUSE_CUSTOM_GETOPTLONG /openmp /I gen gen\%%L.cpp /Fe:engines\%%L\axiomcode-engine-%%L.exe
if errorlevel 1 exit /b 1
type nul > engines\%%L\axiomcode-engine-%%L.exe.parallel
copy /y gen\%%L.id engines\%%L\ENGINE_ID
) else (
echo %%L: cached, rules unchanged
Expand Down
44 changes: 42 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ permissions:
contents: read

env:
# bin/axiomcode and the parser need Node ≥ 22.5.
# bin/axiomcode and the parser need Node ≥ 22.13 (node:sqlite without a flag).
NODE_VERSION: '22'
SOUFFLE_VERSION: '2.5'
SOUFFLE_SHA512: '6b86e554f6aa5abf8a8b55d8312ae37c0957c5bd6c9edeea89246db9406f645ec5e600b84fe6636b1c163da556f0da6c3d2dad46c1083413f2fcf4f95b9ac62c'
Expand Down Expand Up @@ -253,7 +253,7 @@ jobs:
needs: [changes]
if: needs.changes.outputs.code == 'true'
runs-on: ubuntu-24.04
timeout-minutes: 45
timeout-minutes: 90
env:
# the engine is compiled for any x86-64 runner, so a cached one can be restored
# on whichever runner this job lands (see the engine cache step below)
Expand Down Expand Up @@ -371,6 +371,16 @@ jobs:
if: matrix.lang == 'csharp'
run: dotnet build -c Release graph/test/csharp/ground-truth/AxiomCsOracle

# `--library auto` decompiles a dependency that ships no sources jar; the Java query case for it needs Vineflower
- name: fetch the decompiler `--library auto` uses for Java class jars
if: matrix.lang == 'java'
run: mvn -q dependency:get -Dartifact=org.vineflower:vineflower:1.10.1

# `--library auto` compiles a NuGet package by decompiling it; the query case for it needs the decompiler
- name: install the decompiler `--library auto` uses for NuGet packages
if: matrix.lang == 'csharp'
run: dotnet tool install -g ilspycmd --version 8.2.0.7535

- name: cache the Soufflé package
uses: actions/cache@v4
with:
Expand Down Expand Up @@ -448,6 +458,36 @@ jobs:
# AXIOM_SUITE_JOBS=1 here would run them one at a time, as they used to.
run: bash .github/scripts/run-suite.sh ${{ matrix.lang }} ${{ matrix.oracle }}

# THE QUERY LAYER'S CASES (tests/run.py): what impact, path, context, changed and test-impact answer on small
# projects written for one behaviour each. Every case must pass, and a case marked pending that now passes fails
# the run until the mark is removed, so a fix for one shape cannot quietly break another's answer. The suite
# calls the verbs directly, so it checks their own answers, not the front-door rendering (tests/front_door.py).
- name: ${{ matrix.lang }} query cases
env:
AXIOM_PARSER: ${{ github.workspace }}/parser/dist/index.js
AXIOM_SOUFFLE_CACHE: ${{ github.workspace }}/.souffle-cache
run: python3 tests/run.py --lang ${{ matrix.lang }} --jobs 4

# the small surface as users and agents get it: find / impact / path / tests through the installed command and
# the MCP server, answered as places with their code, and the direct calls and flags that keep the old answers
- name: the front door answers as places with their code
if: matrix.lang == 'python'
env:
AXIOM_PARSER: ${{ github.workspace }}/parser/dist/index.js
AXIOM_SOUFFLE_CACHE: ${{ github.workspace }}/.souffle-cache
run: python3 tests/front_door.py

# The hooks answer impact from SQL (graph_sql.impact_shaped) and fall back to the rules (dl/impact.dl) only when
# it declines, so the two must list the same rows for the same edit: tests/fastpath.py indexes a small case, asks
# both on each target shape, and runs hooks/changes.py on one edit through each path. Same parser and engine
# cache as the suite above. Not typescript: its case needs the TypeScript engine; javascript has no case.
- name: the hooks' fast path agrees with the rules (${{ matrix.lang }})
if: matrix.lang == 'python' || matrix.lang == 'java' || matrix.lang == 'csharp'
env:
AXIOM_PARSER: ${{ github.workspace }}/parser/dist/index.js
AXIOM_SOUFFLE_CACHE: ${{ github.workspace }}/.souffle-cache
run: python3 tests/fastpath.py --lang ${{ matrix.lang }}

# Saved whether or not the suite passed. The binary does not depend on the verdict:
# run-souffle.sh publishes it only whole and verified (a temp name, then a rename),
# so a red run's engine is as good as a green one's, and the run that most needs the
Expand Down
Loading
Loading