Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
328 commits
Select commit Hold shift + click to select a range
57d4e92
Fix the fluent-chain hop: an empty type map I had stubbed and never f…
swapnilpaliwal-sd Aug 22, 2026
0d82759
Ask whether an engine could build the chains, not whether the parser did
swapnilpaliwal-sd Aug 22, 2026
0934e38
Measure reference linking per kind, against an in-root denominator
swapnilpaliwal-sd Aug 22, 2026
5b584d1
Emit py_type_parameter — 19 of 19 relations
swapnilpaliwal-sd Aug 22, 2026
1ce0f52
Add a link-feasibility gate, and test the "engine work" claim
swapnilpaliwal-sd Aug 22, 2026
fc81007
Resolve bare-name receivers through the scope chain, not just the inn…
swapnilpaliwal-sd Aug 22, 2026
51cb7ce
Make feasibility mean an answer exists, not that a mechanism does
swapnilpaliwal-sd Aug 22, 2026
032a96c
Add a golden regression corpus and a PEP 695 gate
swapnilpaliwal-sd Aug 22, 2026
613e0d3
Log the golden corpus and PEP 695 findings to the coordination channel
swapnilpaliwal-sd Aug 22, 2026
f1d3f48
Adjudicate py_block, and hash the service version as Java does
swapnilpaliwal-sd Aug 23, 2026
f2cbead
Give Python one test entry point and a category corpus, as Java has
swapnilpaliwal-sd Aug 23, 2026
4d35e16
Log the test restructure to the coordination channel
swapnilpaliwal-sd Aug 23, 2026
9c82f4f
Reject the LINE_COMMENT report, accept the missing kind column
swapnilpaliwal-sd Aug 23, 2026
9de837d
py_type_parameter: add kind at position 12 (arity 14 -> 15)
swapnilpaliwal-sd Aug 23, 2026
f757c25
Commit the symtable gate instead of running it from /tmp
swapnilpaliwal-sd Aug 23, 2026
d9c054b
Recover `type(obj).attr = value`, which the grammar reads as a type a…
swapnilpaliwal-sd Aug 23, 2026
9cd9025
NFKC-normalise identifiers, as CPython's tokeniser does
swapnilpaliwal-sd Aug 23, 2026
4f85cab
A walrus in a comprehension inherits an enclosing `global`
swapnilpaliwal-sd Aug 23, 2026
99874f4
Stop charging CPython 3.10's f-string column bug to the parser
swapnilpaliwal-sd Aug 23, 2026
610a3e4
A comprehension visits its element LAST, and a dictcomp's value first
swapnilpaliwal-sd Aug 23, 2026
1a2ec88
Adjudicate py_decorator and py_decorator_argument against ast
swapnilpaliwal-sd Aug 23, 2026
fcffe95
Emit the type links that live inside expressions, not declarations
swapnilpaliwal-sd Aug 23, 2026
f5e6036
except-clause types, owned by the binding they type
swapnilpaliwal-sd Aug 23, 2026
3e2e440
Link a field to its declared type, as java_type_reference does
swapnilpaliwal-sd Aug 23, 2026
6b4263d
Close the real NEEDS_FACT gap: `self.__dict__['x'] = v` defines a field
swapnilpaliwal-sd Aug 23, 2026
59092e9
Prove the CHA/RTA substrate by building it from the CSVs alone
swapnilpaliwal-sd Aug 23, 2026
dfd2ea2
Move the schema into src/, delete python-work, and check the spec dir…
swapnilpaliwal-sd Aug 23, 2026
3d743a7
Adjudicate call-site linking against CPython at runtime
swapnilpaliwal-sd Aug 23, 2026
afbb292
Two cross-package linking gaps found by running the corpus
swapnilpaliwal-sd Aug 23, 2026
ff1cb3b
Split UNLINKED into engine-derivable and truly unresolvable
swapnilpaliwal-sd Aug 23, 2026
4def23f
Document the parser as multi-language and move test data out of /tmp
swapnilpaliwal-sd Aug 23, 2026
ba41656
One README, and keep the oracle corpora out of the repo
swapnilpaliwal-sd Aug 23, 2026
ca960f2
Cut the oracle to nine files and add an edge-case ratchet
swapnilpaliwal-sd Aug 23, 2026
91834dd
Untrack the analyzer output directories
swapnilpaliwal-sd Aug 23, 2026
15755b1
Remove tools/ and the post-commit hook it installed
swapnilpaliwal-sd Aug 23, 2026
f9b3c68
Add the Python working agreement for the shared branch
swapnilpaliwal-sd Aug 23, 2026
c5b92a0
README: lead with Python, and claim only what is supported
swapnilpaliwal-sd Aug 23, 2026
a422aa3
Wire Python into extract.ts so one command handles both languages
swapnilpaliwal-sd Aug 23, 2026
abc5d73
Reduce src/test to two entry points and their fixtures
swapnilpaliwal-sd Aug 23, 2026
8cb17d4
Move the oracle out; the parser now tests against frozen expectations…
swapnilpaliwal-sd Aug 23, 2026
1af011e
Collapse the four gates into python-tests.ts
swapnilpaliwal-sd Aug 23, 2026
c7dbc60
Fix 21 of 28 build errors, and make the suite notice next time
swapnilpaliwal-sd Aug 23, 2026
30b7a8f
Fix the last 7 build errors; npm run build is clean
swapnilpaliwal-sd Aug 23, 2026
fb2f28f
Track the Python suite and its expectations — they were all gitignored
swapnilpaliwal-sd Aug 23, 2026
0059394
Add the three checks a golden cannot make
swapnilpaliwal-sd Aug 23, 2026
4137510
Merge pull request #1 from AxiomCodeAI/python-parser-work
swapnilpaliwal-sd Aug 27, 2026
551db56
Add the TypeScript working agreement for the parallel branch
swapnilpaliwal-sd Aug 27, 2026
c9fff13
Re-centre the TypeScript agreement on Java, not Python
swapnilpaliwal-sd Aug 27, 2026
e00db52
Reduce the TypeScript roster from six agents to four
swapnilpaliwal-sd Aug 27, 2026
3648ffe
Give the gate an owner, and say what ts-oracle actually produces
swapnilpaliwal-sd Aug 27, 2026
8f14c30
ts-fixtures: port 8 of 12 Java categories to TypeScript staging
swapnilpaliwal-sd Aug 27, 2026
f87baff
ts-fixtures: complete half one — all 12 Java categories ported
swapnilpaliwal-sd Aug 27, 2026
ead39a4
ts-oracle: propose the TypeScript fact-table schema (21 relations, 48…
swapnilpaliwal-sd Aug 27, 2026
93a9f74
ts-oracle: record the approved rulings and close OQ-3..OQ-8 by measur…
swapnilpaliwal-sd Aug 27, 2026
0024f02
ts-oracle: generate decls_base_ts.dl from the schema doc, with --chec…
swapnilpaliwal-sd Aug 27, 2026
8b8a153
ts-fixtures: restore legacy decorators, scoped to their own project
swapnilpaliwal-sd Aug 27, 2026
8619053
ts-fixtures: half two — the type system
swapnilpaliwal-sd Aug 27, 2026
e0330a5
ts-oracle: the merge-partition gate, its oracle, and the in-repo suite
swapnilpaliwal-sd Aug 27, 2026
770e9b4
README: add the TypeScript logo, ordered Python, TypeScript, Java
swapnilpaliwal-sd Aug 27, 2026
8effbd3
ts-oracle: the resolution expectations — the check Python never got
swapnilpaliwal-sd Aug 27, 2026
20149b8
ts-impl: the fact-row layer — enums, entity prefixes, and the 12 spin…
swapnilpaliwal-sd Aug 27, 2026
fdab4f3
gradle: the relation set — a script anchor, coordinates, catalogs, gaps
swapnilpaliwal-sd Aug 27, 2026
bba4a35
ts-impl: the syntactic binder and the governing-tsconfig resolver
swapnilpaliwal-sd Aug 27, 2026
7b3d5f1
gradle: the extractors — catalogs, coordinates, comments, and honest …
swapnilpaliwal-sd Aug 27, 2026
1734bf7
gradle: discovery, the project pass, and eight relations on disk
swapnilpaliwal-sd Aug 27, 2026
e45a17c
gradle: the test suite, a corpus gate, and the four defects they found
swapnilpaliwal-sd Aug 27, 2026
a7eb20a
ts-impl: the extractor, the analyzer, and the four pending checks wired
swapnilpaliwal-sd Aug 27, 2026
443bad4
gradle: a Gradle-backed oracle, and the project it invented
swapnilpaliwal-sd Aug 27, 2026
d795abd
gradle: document it, including what is still unverified
swapnilpaliwal-sd Aug 27, 2026
e4fb3da
gradle: untrack the node_modules symlink
swapnilpaliwal-sd Aug 27, 2026
7aefe6e
ts-impl: cross-module resolution, and the corpus measurement that for…
swapnilpaliwal-sd Aug 27, 2026
ca74470
ts-impl: ts_decorator and ts_decorator_argument, keyed on the GOVERNI…
swapnilpaliwal-sd Aug 27, 2026
1a1b3e7
gradle: test the entry point, and fix the three things it found
swapnilpaliwal-sd Aug 27, 2026
b0caec8
gradle: make the CLI actually runnable, and fix what a real repo exposed
swapnilpaliwal-sd Aug 27, 2026
53b678a
ts-impl: retract cross-file resolution; measure IR COMPLETENESS instead
swapnilpaliwal-sd Aug 27, 2026
719ef7f
ts-fixtures: deliberate-collision fixture, and fix a systematic natur…
swapnilpaliwal-sd Aug 27, 2026
b187ae4
ts-oracle: widen c16 to close the IIFE gap, and re-bless over the new…
swapnilpaliwal-sd Aug 27, 2026
b2e808a
ts-impl: restructure the enums to the Java/Python convention, and clo…
swapnilpaliwal-sd Aug 27, 2026
c755cf8
ts-impl: emit the remaining five relations — every parser-owned relat…
swapnilpaliwal-sd Aug 27, 2026
6124a5e
ts-impl: fill the nine declaration-to-expression FKs, and close two r…
swapnilpaliwal-sd Aug 27, 2026
de70cd8
ts-impl: fill the widened c16, and retire the bar it came with
swapnilpaliwal-sd Aug 27, 2026
d875ff9
ts-impl: syntactic recall to 100% — and `return ( … )` emitted nothin…
swapnilpaliwal-sd Aug 27, 2026
902331e
ts-oracle: anonymous-shape members get an owner FK — no new oracle ne…
swapnilpaliwal-sd Aug 27, 2026
1212dc3
Fix five IR gaps found by the type-directed-graph audit
swapnilpaliwal-sd Aug 27, 2026
543f4f8
ts-impl: fill the widened owner FK for anonymous shapes, and retire t…
swapnilpaliwal-sd Aug 27, 2026
3d08898
Merge pull request #3 from AxiomCodeAI/python-parser-work
swapnilpaliwal-sd Aug 27, 2026
eb92197
ts-impl: run the holdout — interface accessors and generic anonymous …
swapnilpaliwal-sd Aug 27, 2026
da61638
Two builtin/stub conflations found by measuring the whole stdlib
swapnilpaliwal-sd Aug 27, 2026
9243e16
ts-impl: adjudicate against the checker on unseen external code
swapnilpaliwal-sd Aug 27, 2026
1e09eb8
ts-impl: run NestJS, a third unseen corpus — decorators, DI, monorepo
swapnilpaliwal-sd Aug 27, 2026
b83fbf2
PD-11: a from-import resolves the MEMBER first, then the submodule
swapnilpaliwal-sd Aug 28, 2026
9b7b3db
Merge origin/main into gradle-parser
swapnilpaliwal-sd Aug 28, 2026
e093738
Merge pull request #2 from AxiomCodeAI/gradle-parser
swapnilpaliwal-sd Aug 28, 2026
6d0c1b5
ts-impl: walk JSX brace expressions — TSX call-site recall 68.7% -> 100%
swapnilpaliwal-sd Aug 28, 2026
5c2cc65
Merge pull request #4 from AxiomCodeAI/typescript-parser
swapnilpaliwal-sd Aug 28, 2026
201aa2e
Untrack the node_modules symlink, and close the gap that let it back
swapnilpaliwal-sd Aug 28, 2026
5b39653
Merge pull request #5 from AxiomCodeAI/fix/untrack-node-modules-symlink
swapnilpaliwal-sd Aug 28, 2026
21320db
Three declared-but-unemitted expression kinds, all the same defect shape
swapnilpaliwal-sd Aug 28, 2026
a793126
Merge remote-tracking branch 'origin/main' into typescript-parser
swapnilpaliwal-sd Aug 28, 2026
2d4f0e2
Merge pull request #6 from AxiomCodeAI/python-parser-work
swapnilpaliwal-sd Aug 28, 2026
6c837ba
ts: walk computed keys on object-literal members
swapnilpaliwal-sd Aug 28, 2026
81119e6
PD-12, and narrow the stub filter I over-corrected
swapnilpaliwal-sd Aug 28, 2026
a8c1eee
ts: DECORATOR_CALL, and the three block kinds that never emitted
swapnilpaliwal-sd Aug 28, 2026
304344b
Merge pull request #8 from AxiomCodeAI/python-parser-work
swapnilpaliwal-sd Aug 28, 2026
11616d5
Merge pull request #7 from AxiomCodeAI/fix/ts-object-literal-computed…
swapnilpaliwal-sd Aug 28, 2026
8baf18b
Report Python and TypeScript, and time every parser
swapnilpaliwal-sd Aug 28, 2026
7e753e2
Merge pull request #9 from AxiomCodeAI/python-parser-work
swapnilpaliwal-sd Aug 28, 2026
22f1cd2
Fix five symtable and field defects found at untested syntactic posit…
swapnilpaliwal-sd Aug 30, 2026
6084c76
Ignore all of python-work, not three named subfolders
swapnilpaliwal-sd Aug 30, 2026
39bc2c7
Add a construct x position gate, with negative dialect tests
swapnilpaliwal-sd Aug 30, 2026
7330b92
Merge pull request #11 from AxiomCodeAI/a3/python-defects
swapnilpaliwal-sd Aug 30, 2026
5ecc165
ts: a program is its roots PLUS everything they import
swapnilpaliwal-sd Aug 30, 2026
3eca892
ts: name the programs a run leaves out, not just count them
swapnilpaliwal-sd Aug 30, 2026
0d7522e
ts: a shape member with N signatures is not SOLE
swapnilpaliwal-sd Aug 30, 2026
83d5f1f
ts: emit TYPE_IMPORT_NODE — a module edge in a type position
swapnilpaliwal-sd Aug 30, 2026
f8ac083
Merge pull request #13 from AxiomCodeAI/ts/parser-fixes-to-main
swapnilpaliwal-sd Aug 30, 2026
677b38a
ts: write every relation atomically, and fail if a row is torn
swapnilpaliwal-sd Aug 30, 2026
617715f
ts: the overload IMPLEMENTATION is never a resolution candidate
swapnilpaliwal-sd Aug 30, 2026
5e25c2f
Merge pull request #14 from AxiomCodeAI/fix/ts-atomic-csv-writes
swapnilpaliwal-sd Aug 30, 2026
98d249a
ts: write every relation atomically, and fail if a row is torn
swapnilpaliwal-sd Aug 30, 2026
b5721ac
ts: the overload IMPLEMENTATION is never a resolution candidate
swapnilpaliwal-sd Aug 30, 2026
09a47b5
ts: every const was labelled AWAIT_USING
swapnilpaliwal-sd Aug 30, 2026
67d40d9
ts: emit the names a destructuring binds
swapnilpaliwal-sd Aug 30, 2026
937d2f8
Merge pull request #16 from AxiomCodeAI/ts/parser-fixes-round-2
swapnilpaliwal-sd Aug 30, 2026
41ec113
Remove the per-language contributing drafts
swapnilpaliwal-sd Aug 30, 2026
31eb342
Merge pull request #17 from AxiomCodeAI/chore/remove-contributing-drafts
swapnilpaliwal-sd Aug 30, 2026
0768f94
ts: record what a destructured name binds — closes #18
swapnilpaliwal-sd Aug 30, 2026
f195398
Merge pull request #19 from AxiomCodeAI/fix/ts-binding-source
swapnilpaliwal-sd Aug 30, 2026
dca99c1
ts: a gate check that a destructured name carries its source
swapnilpaliwal-sd Aug 30, 2026
7720520
Merge pull request #20 from AxiomCodeAI/test/ts-destructuring-binding…
swapnilpaliwal-sd Aug 30, 2026
5b2003f
ts: unique temp names, and verify a relation before publishing it
swapnilpaliwal-sd Aug 30, 2026
e8e7702
Escape every character a consumer treats as a line break
swapnilpaliwal-sd Aug 30, 2026
56b7714
Merge pull request #23 from AxiomCodeAI/fix/escape-all-line-breaks
swapnilpaliwal-sd Aug 30, 2026
6a8ca47
ts: every signature links the return reference it declares — closes #26
swapnilpaliwal-sd Aug 31, 2026
8db94d5
Merge pull request #27 from AxiomCodeAI/fix/ts-signature-return-link
swapnilpaliwal-sd Aug 31, 2026
7f12a31
ts: regression cover for the fixes that had none
swapnilpaliwal-sd Aug 31, 2026
f16ccd6
Merge pull request #28 from AxiomCodeAI/test/ts-regression-cover
swapnilpaliwal-sd Aug 31, 2026
75f23c9
ts: a pattern parameter emits the names it binds — closes #30
swapnilpaliwal-sd Aug 31, 2026
e230112
Merge pull request #31 from AxiomCodeAI/fix/ts-parameter-bound-names
swapnilpaliwal-sd Aug 31, 2026
634fba3
Remove third-party project names from parser source
swapnilpaliwal-sd Aug 31, 2026
4e45c28
Merge pull request #32 from AxiomCodeAI/chore/scrub-corpus-names
swapnilpaliwal-sd Aug 31, 2026
98b7a95
python: name a .pyi module exactly as the .py in the same position (#36)
swapnilpaliwal-sd Sep 1, 2026
bef07e2
ts: a destructured name links the value it came from — closes #34
swapnilpaliwal-sd Sep 1, 2026
c4e6637
Merge pull request #37 from AxiomCodeAI/fix/ts-destructured-initializ…
swapnilpaliwal-sd Sep 1, 2026
ca7983f
python: cover relative imports and mixed trees in the stub naming gat…
swapnilpaliwal-sd Sep 1, 2026
85fbf4c
python: ratchet every declared enum value against a producer (#39)
swapnilpaliwal-sd Sep 1, 2026
d2405dc
python: unwrap forward-reference quotes, and escape every free-text c…
swapnilpaliwal-sd Sep 1, 2026
fc9c162
Escape NUL and the rest of the C0 range in TSV output (#45)
swapnilpaliwal-sd Sep 1, 2026
005e440
python: classify a name reference from the binding instead of UNKNOWN…
swapnilpaliwal-sd Sep 1, 2026
47e2b2d
python: classify a TypeVar as TYPE_VAR, with its name and variance (#47)
swapnilpaliwal-sd Sep 1, 2026
aedfb52
python: delete PythonFieldWriteKind, a leftover of a removed relation…
swapnilpaliwal-sd Sep 1, 2026
ded2720
ts: an unresolved import still names its package
swapnilpaliwal-sd Sep 1, 2026
8e9089f
Merge pull request #49 from AxiomCodeAI/fix/ts-package-name-when-unre…
swapnilpaliwal-sd Sep 1, 2026
b35876c
python: gate that a qualified name depends on module position alone (…
swapnilpaliwal-sd Sep 1, 2026
164754b
ts: every annotated declaration names its type, not just its text
swapnilpaliwal-sd Sep 1, 2026
4e839f9
Merge pull request #51 from AxiomCodeAI/fix/ts-shape-member-type-link
swapnilpaliwal-sd Sep 1, 2026
65d5020
ts: a type reference names its entity, without type arguments
swapnilpaliwal-sd Sep 1, 2026
a313b02
Merge pull request #52 from AxiomCodeAI/fix/ts-entity-name-on-type-re…
swapnilpaliwal-sd Sep 1, 2026
92ce7b6
python: record filePath relative to the mserv, so two files are two m…
swapnilpaliwal-sd Sep 1, 2026
ca5d4e2
ts: pin column order append-only, and finish entityName for the brack…
swapnilpaliwal-sd Sep 1, 2026
fc10e70
Merge pull request #54 from AxiomCodeAI/fix/ts-column-order-gate
swapnilpaliwal-sd Sep 1, 2026
3b1d977
python: emit a TypeVar's bound as a reference owned by its binding (#55)
swapnilpaliwal-sd Sep 1, 2026
e18c093
ts: a mapped or infer type parameter names its bound
swapnilpaliwal-sd Sep 1, 2026
520c298
Merge pull request #59 from AxiomCodeAI/fix/ts-mapped-infer-constrain…
swapnilpaliwal-sd Sep 1, 2026
0ba2831
ts: a type variable names the parameter that declares it
swapnilpaliwal-sd Sep 1, 2026
eac30ec
Merge pull request #60 from AxiomCodeAI/fix/ts-type-variable-link
swapnilpaliwal-sd Sep 1, 2026
fcc845b
python: __all__ is only reported literal when it can be trusted (#63)
swapnilpaliwal-sd Sep 2, 2026
19fb626
ts: an object-literal member names the literal that owns it — closes …
swapnilpaliwal-sd Sep 2, 2026
55c5841
Merge pull request #64 from AxiomCodeAI/fix/ts-object-literal-method-…
swapnilpaliwal-sd Sep 2, 2026
b8da6c3
python: classify class-private names, and bind a function-scoped Type…
swapnilpaliwal-sd Sep 2, 2026
2d24fc4
java: META-INF/services names implementation classes, and they are no…
swapnilpaliwal-sd Sep 2, 2026
5693804
Merge pull request #68 from AxiomCodeAI/feat/java-services-extractor
swapnilpaliwal-sd Sep 2, 2026
ed6434e
ts: emit paths relative to baseMservPath, so a row is self-consistent…
swapnilpaliwal-sd Sep 2, 2026
ce7770d
Merge pull request #71 from AxiomCodeAI/fix/ts-workspace-file-paths
swapnilpaliwal-sd Sep 2, 2026
e446d22
ts: a parameter declared inside a type is a TYPE_VARIABLE — closes #6…
swapnilpaliwal-sd Sep 2, 2026
2ea291a
ts: stream rows to disk instead of accumulating them — closes #29 (#73)
swapnilpaliwal-sd Sep 2, 2026
438b91a
ts: extract every program under a root, not just the root's — closes …
swapnilpaliwal-sd Sep 2, 2026
8331cc8
ts: emit strictBindCallApply, resolved as the checker resolves it — c…
swapnilpaliwal-sd Sep 3, 2026
9d8c204
ts: a file's governing tsconfig is a function of the file, not of the…
swapnilpaliwal-sd Sep 4, 2026
49dfd19
ts: a decorator is descended once, not twice — closes #86 (#87)
swapnilpaliwal-sd Sep 4, 2026
2dd403d
ts: .d.mts and .d.cts are declaration files, and their stem is not `i…
swapnilpaliwal-sd Sep 4, 2026
29fbe56
ts: a variable's annotation can declare a SET of call signatures — re…
swapnilpaliwal-sd Sep 4, 2026
2e02abc
ts: declare strictBindCallApply, one extension helper, and regression…
swapnilpaliwal-sd Sep 4, 2026
699dc2f
java: a Java package is not a test directory (#99)
swapnilpaliwal-sd Sep 4, 2026
41f93d5
java: a record's implicit members are declared by the language, so em…
swapnilpaliwal-sd Sep 4, 2026
4c76525
java: emit the implicit members of enums and classes — closes #95, cl…
swapnilpaliwal-sd Sep 4, 2026
27c839e
java: extract the module declaration in module-info.java — closes #10…
swapnilpaliwal-sd Sep 4, 2026
acdaca6
Document the entry point that exists, not the one that does not — clo…
swapnilpaliwal-sd Sep 4, 2026
78697ee
java: a module import declaration is not a single-type import of a ty…
swapnilpaliwal-sd Sep 4, 2026
ef29ebb
ts: emit an object literal's property key — closes #111 (#112)
swapnilpaliwal-sd Sep 4, 2026
61fa815
java: a local class is not a member of the enclosing type — closes #1…
swapnilpaliwal-sd Sep 7, 2026
d674937
java: an anonymous class is keyed by its supertype, not by a running …
swapnilpaliwal-sd Sep 7, 2026
d8cfe07
java: every relation writer escapes what it writes, and a wrapped qua…
swapnilpaliwal-sd Sep 7, 2026
fddd1c1
java: an assert's condition and detail message are expressions, so ex…
swapnilpaliwal-sd Sep 7, 2026
3587119
test: a declared vocabulary member with no producer fails the suite (…
swapnilpaliwal-sd Sep 7, 2026
e29373a
java: an initializer body is an ordinary block, so extract it like on…
swapnilpaliwal-sd Sep 7, 2026
67756ae
java: a for statement's clauses are labelled, so read them by field —…
swapnilpaliwal-sd Sep 7, 2026
e8507e2
test: the unproduced vocabulary members are redundant, not defects (#…
swapnilpaliwal-sd Sep 7, 2026
c00a970
java: an arrow arm of a switch used as a value is not also a statemen…
swapnilpaliwal-sd Sep 7, 2026
15cb929
ts: compute hasJsxContent instead of hardcoding it false (#128)
swapnilpaliwal-sd Sep 7, 2026
12a1bf7
java: a ternary's operands are labelled, so read them by field (#133)
swapnilpaliwal-sd Sep 7, 2026
c381a43
java: a pattern binding's use site is a binding, not a field (#134)
swapnilpaliwal-sd Sep 7, 2026
9bd26c0
java: a comment is not an operand, so no read is shifted by one (#135)
swapnilpaliwal-sd Sep 7, 2026
486a68e
java: a pattern binding is scoped to the statement that declares it (…
swapnilpaliwal-sd Sep 7, 2026
4c1c71a
java: a brace-less lambda body is a statement, and a field lambda can…
swapnilpaliwal-sd Sep 7, 2026
3a21008
java: a ternary's operands come from the grammar's fields, not from a…
swapnilpaliwal-sd Sep 7, 2026
3f3a632
java: a comment inside an assert is not one of its operands (#132)
swapnilpaliwal-sd Sep 7, 2026
7974c68
java: an unbraced control-flow body in an initializer lambda is a sta…
swapnilpaliwal-sd Sep 7, 2026
a1ee506
java: a pattern binding's use site is a binding, and a field read in …
swapnilpaliwal-sd Sep 7, 2026
b2abfb6
java: a nested record pattern's components are components too — close…
swapnilpaliwal-sd Sep 7, 2026
70de2c4
java: nothing written once is recorded twice — closes #138 (#142)
swapnilpaliwal-sd Sep 7, 2026
6503fa4
python: a call whose result is splatted is still a named call (#146)
swapnilpaliwal-sd Sep 8, 2026
16deb0a
python: @cached_property is a property getter, not a method nobody ca…
swapnilpaliwal-sd Sep 8, 2026
6ed128b
python: a PEP 604 union is decomposed whatever its operands look like…
swapnilpaliwal-sd Sep 8, 2026
502f9c0
ts: record the module edge of an empty import, and group members of a…
swapnilpaliwal-sd Sep 8, 2026
c2c9937
ts: a subpath import reached through a stub package.json names its pa…
swapnilpaliwal-sd Sep 9, 2026
f131be0
python: async for and async with say so, so the right protocol edge c…
swapnilpaliwal-sd Sep 9, 2026
3dcb245
ts: the schema declares the vocabularies the extractors emit — closes…
swapnilpaliwal-sd Sep 9, 2026
77c89be
ts: name a computed member key when syntax fixes it, and group none w…
swapnilpaliwal-sd Sep 9, 2026
8f15f18
python: PEP 695 opens the annotation scopes CPython opens (#156)
swapnilpaliwal-sd Sep 9, 2026
6fb7fb3
python: rebuild the call the type-alias soft keyword swallows (#157)
swapnilpaliwal-sd Sep 9, 2026
45a228e
discovery: a polyglot repository is every language it holds, not the …
swapnilpaliwal-sd Sep 12, 2026
04db85e
Parser Support for JavaScript (#165)
swapnilpaliwal-sd Sep 13, 2026
52e440b
js: sweep instruments move to src/test/javascript-gates; tools/ remov…
swapnilpaliwal-sd Sep 13, 2026
a2cbede
js: the scrub inventory leaves the tree (#167)
swapnilpaliwal-sd Sep 13, 2026
e9a4ef9
schema: one markdown file in the repository — the frozen schemas beco…
swapnilpaliwal-sd Sep 13, 2026
e3131ce
js: comments after any token, the typed tag among same-name tags, the…
swapnilpaliwal-sd Sep 13, 2026
3fb8b1b
js: a parameter node sits in its function's scope — closes #171 (#173)
swapnilpaliwal-sd Sep 13, 2026
120e98d
js: JSX spread attributes reach the tree; the recall instrument names…
swapnilpaliwal-sd Sep 13, 2026
a1d9d8c
js: META_PROPERTY emits (#175); the #170 shapes ruled as named absenc…
swapnilpaliwal-sd Sep 13, 2026
50bdfad
js: a parameter's type comes from the last JSDoc block, as the compil…
swapnilpaliwal-sd Sep 13, 2026
0409275
js: a named default export is exported as default (#176); accessor-pa…
swapnilpaliwal-sd Sep 13, 2026
0f48c3f
ts: a callable that is not a member carries no member group key — clo…
swapnilpaliwal-sd Sep 14, 2026
9e14575
ts: a named default export is recorded under its own name — closes #1…
swapnilpaliwal-sd Sep 14, 2026
f24503a
reshape: src/ becomes graph/; the debug CSV directory becomes csv/
swapnilpaliwal-sd Sep 14, 2026
57aefb3
parser: merge AxiomCodeAI/parser into parser/ with its full history
swapnilpaliwal-sd Sep 14, 2026
d951fb4
reshape: parser as an npm workspace, bin/axiom-graph, skills/code-gra…
swapnilpaliwal-sd Sep 14, 2026
dd382cd
reshape: four path constructions that named src/ from pieces; a JDK-l…
swapnilpaliwal-sd Sep 14, 2026
b30d3bf
reshape: the engine's tests move to graph/test/; skills/ removed
swapnilpaliwal-sd Sep 14, 2026
cc094ed
reshape: csv-limit preflight imports ground-truth/score.py from graph…
swapnilpaliwal-sd Sep 14, 2026
ea829f8
reshape: the command is bin/axiomcode-graph — the company is AxiomCode
swapnilpaliwal-sd Sep 14, 2026
38f5335
reshape: package description names bin/axiomcode-graph
swapnilpaliwal-sd Sep 14, 2026
362783b
reshape: bin/axiomcode with parser | engine | all | test subcommands;…
swapnilpaliwal-sd Sep 14, 2026
aca6734
bin/axiomcode: the parser's version and test inclusion are options; t…
swapnilpaliwal-sd Sep 14, 2026
8279196
bin/axiomcode all: the parser emits every language it finds, so `all`…
swapnilpaliwal-sd Sep 14, 2026
6cae68a
bin/axiomcode parser: the IR is written per language, <ir>/<lang>/
swapnilpaliwal-sd Sep 14, 2026
a4f26c4
bin/axiomcode: one command for any repository — <src> <out>; --librar…
swapnilpaliwal-sd Sep 14, 2026
bc067d4
Merge main into reshape: the dispatch envelope (#474) lands under graph/
swapnilpaliwal-sd Sep 14, 2026
4d38712
parser: two projects of one language in a tree no longer overwrite ea…
swapnilpaliwal-sd Sep 14, 2026
e4005bf
LICENSE.md: Functional Source License 1.1 with Apache 2.0 future lice…
swapnilpaliwal-sd Sep 14, 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
  •  
  •  
  •  
11 changes: 7 additions & 4 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ call-chain-*.csv
# tables, and the raw per-language relations it was built from.
graph.sqlite
graph.sqlite-journal
graph/
csv/
raw/
client-ir/
library-ir/
Expand Down Expand Up @@ -227,7 +227,7 @@ $RECYCLE.BIN/
# checks the property beats a pattern list that tries to anticipate it.

# ── Java engine test suite: per-run work dirs and the generated JDK index ─────
test/java/.work/
graph/test/java/.work/

# Python bytecode from the test tools
__pycache__/
Expand All @@ -236,5 +236,8 @@ __pycache__/
# fixture harness work directories (generated per run). The plain `.work/` is the one
# run-tests.sh itself uses; the `.work-*` variants are the fixtures'. Only the latter was
# listed, so every run of the TypeScript suite left an untracked directory behind.
test/typescript/.work/
test/typescript/.work-*/
graph/test/typescript/.work/
graph/test/typescript/.work-*/

# the one-command pipeline keeps its IR and scratch here
.intermediate/
105 changes: 105 additions & 0 deletions LICENSE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
# Functional Source License, Version 1.1, Apache 2.0 Future License

## Abbreviation

FSL-1.1-Apache-2.0

## Notice

Copyright 2026, AxiomCode Inc.

## Terms and Conditions

### Licensor ("We")

The party offering the Software under these Terms and Conditions.

### The Software

The "Software" is each version of the software that we make available under
these Terms and Conditions, as indicated by our inclusion of these Terms and
Conditions with the Software.

### License Grant

Subject to your compliance with this License Grant and the Patents,
Redistribution and Trademark clauses below, we hereby grant you the right to
use, copy, modify, create derivative works, publicly perform, publicly display
and redistribute the Software for any Permitted Purpose identified below.

### Permitted Purpose

A Permitted Purpose is any purpose other than a Competing Use. A Competing Use
means making the Software available to others in a commercial product or
service that:

1. substitutes for the Software;

2. substitutes for any other product or service we offer using the Software
that exists as of the date we make the Software available; or

3. offers the same or substantially similar functionality as the Software.

Permitted Purposes specifically include using the Software:

1. for your internal use and access;

2. for non-commercial education;

3. for non-commercial research; and

4. in connection with professional services that you provide to a licensee
using the Software in accordance with these Terms and Conditions.

### Patents

To the extent your use for a Permitted Purpose would necessarily infringe our
patents, the license grant above includes a license under our patents. If you
make a claim against any party that the Software infringes or contributes to
the infringement of any patent, then your patent license to the Software ends
immediately.

### Redistribution

The Terms and Conditions apply to all copies, modifications and derivatives of
the Software.

If you redistribute any copies, modifications or derivatives of the Software,
you must include a copy of or a link to these Terms and Conditions and not
remove any copyright notices provided in or with the Software.

### Disclaimer

THE SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTIES OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING WITHOUT LIMITATION WARRANTIES OF FITNESS FOR A PARTICULAR
PURPOSE, MERCHANTABILITY, TITLE OR NON-INFRINGEMENT.

IN NO EVENT WILL WE HAVE ANY LIABILITY TO YOU ARISING OUT OF OR RELATED TO THE
SOFTWARE, INCLUDING INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES,
EVEN IF WE HAVE BEEN INFORMED OF THEIR POSSIBILITY IN ADVANCE.

### Trademarks

Except for displaying the License Details and identifying us as the origin of
the Software, you have no right under these Terms and Conditions to use our
trademarks, trade names, service marks or product names.

## Grant of Future License

We hereby irrevocably grant you an additional license to use the Software under
the Apache License, Version 2.0 that is effective on the second anniversary of
the date we make the Software available. On or after that date, you may use the
Software under the Apache License, Version 2.0, in which case the following
will apply:

Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License.

You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed
under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied. See the License for the
specific language governing permissions and limitations under the License.
77 changes: 56 additions & 21 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -127,26 +127,36 @@ receiver is a lambda parameter. Restricted to files of 1,000 lines or more, d1 r
## Run

```bash
npm install && npm run build

# 1. extract a relational IR from source (separate parser package)
node <parser>/dist/index.js <src-dir> <slug> false <IR-dir>

# 2. solve
bash src/pipeline/run-souffle.sh \
--language java \ # java | typescript | python
--client-ir <IR-dir> \
--library <platform-ir>[,<lib-ir>...] \ # platform library + the project's real dependencies
--intermediate <scratch> --output <out>
npm install && npm run build # builds the parser and the engine (Node ≥ 22.5)

bin/axiomcode all --src <project-dir> --out <out-dir> # source → <out-dir>/<lang>/graph.sqlite, per language found
# --language java | typescript | python restrict to one (the parser emits every language it finds)
# --version V stamp the IR (default: the source's git commit, else v1.0.0)
# --exclude-tests leave test code out (default: included)
# --library <platform-ir>[,<lib-ir>...] the platform library and real dependencies, when you have their IR
# --debug also write csv/*.csv and keep raw/

bin/axiomcode parser <src-dir> <ir-dir> # the two stages separately:
bin/axiomcode engine --language java --client-ir <ir-dir>/java --out <out-dir> # IR is written per language, <ir-dir>/<lang>/
bin/axiomcode test [java|typescript|python|parser|all]
```

**Outputs — the same in every language** ([`src/bundle/SCHEMA.md`](src/bundle/SCHEMA.md))
`bin/axiomcode` is the whole pipeline as subcommands: the parser (`parser/`) extracts a relational IR
from the source — every language it finds, in one pass — the engine (`graph/`) solves each language
separately, and `<out-dir>/<lang>/graph.sqlite` is the result (graphs are per language; a Java→TypeScript
call is not an edge in either). **No
Soufflé and no C++ compiler**: the rules compile to one self-contained executable, CI builds it for
Linux (x86_64, arm64), macOS (arm64) and Windows on every merge to `main` and commits it under
`binaries/<lang>/<platform>/`, so a checkout carries the engine for every platform. With `souffle`
installed the engine compiles locally instead.

**Outputs — the same in every language** ([`graph/bundle/SCHEMA.md`](graph/bundle/SCHEMA.md))

```
<out>/
graph.sqlite the contract: core tables, the language's ext_* relations, and the schema as tables
and only with --debug:
graph/<table>.csv the core tables as headered, tab-delimited text
csv/<table>.csv the core tables as headered, tab-delimited text
raw/ the per-language Soufflé relations, verbatim — engine-internal, not a contract
```

Expand Down Expand Up @@ -191,16 +201,37 @@ the omission is reported.
## Layout

```
src/engine/projections/ IR → typed relations
src/engine/containment/ ownership, type nesting
src/engine/resolution/ type resolution, hierarchy, generics, virtual dispatch
src/engine/expression-resolution/ call sites, callee resolution, overloads, lambdas
src/engine/call-edge-generation/ call classes, chain edges, lambda dispatch
src/souffle/ relation declarations + export manifest
src/pipeline/run-souffle.sh fact staging, compile cache, stage↔solve loop, then the bundle stage
src/bundle/ the output contract: schema as data, per-language adapters, CSV + SQLite writers
bin/axiomcode parser | engine | all | test — the pipeline as subcommands
parser/ the IR extractor (its own package; merged in with history)
graph/ the engine
<lang>/engine/projections/ IR → typed relations
<lang>/engine/containment/ ownership, type nesting
<lang>/engine/resolution/ type resolution, hierarchy, generics, virtual dispatch
<lang>/engine/expression-resolution/ call sites, callee resolution, overloads, lambdas
<lang>/engine/call-edge-generation/ call classes, chain edges, lambda dispatch
<lang>/souffle/ relation declarations + export manifest
<lang>/templates/ staging maps
pipeline/run-souffle.sh fact staging, engine resolution (committed / compiled / fetched), stage↔solve loop, then the bundle stage
bundle/ the output contract: schema as data (SCHEMA.md), per-language adapters, writers
test/<lang>/ the engine's regression suites, torture harnesses, oracles (graph/test/tools: platform preflights)
binaries/<lang>/<platform>/ CI-built engines, committed on merge (ENGINE_ID = the rules they were built from)
```

## Tests

```bash
bin/axiomcode test java # the engine's Java suite; --oracle also scores against javac/javap ground truth
bin/axiomcode test typescript # --oracle scores against the TypeScript compiler
bin/axiomcode test python # --oracle scores against CPython bytecode and tracing
bin/axiomcode test parser # the parser's own suites (bin/axiomcode test = everything)
```

Each suite parses its fixture cases with the parser in this repository (`AXIOM_PARSER` overrides),
solves them, guards that no call site was dropped, and diffs the normalised edges against a
golden. `--keep` retains the per-case work directories (`graph/test/<lang>/.work/<case>/out/graph.sqlite`
is a real bundle to poke at); `--bless` regenerates goldens — review the diff. The torture
harnesses (`graph/test/<lang>/torture/`) and the TypeScript corpus runner score real projects.

## Known limits

Stated because a graph you can't trust the boundaries of isn't useful:
Expand All @@ -214,3 +245,7 @@ Stated because a graph you can't trust the boundaries of isn't useful:
* **Function values in parameters or collections** are not tracked (fields and locals are).
* **Reflection** is out of scope by construction, and is reported as `ambiguous_unknown` rather than
silently omitted.

## License

[Functional Source License 1.1, Apache 2.0 Future License](LICENSE.md) (FSL-1.1-Apache-2.0) — Copyright 2026, AxiomCode Inc.
Loading