Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
292 commits
Select commit Hold shift + click to select a range
4561da2
refactor(extract): extract symbol-resolution subsystem into extractors/
TPAteeq Jul 8, 2026
97a289c
refactor(main): move install/platform CLI dispatch into install.dispa…
TPAteeq Jul 8, 2026
9b4ffda
build: package the new graphify.exporters subpackage
TPAteeq Jul 8, 2026
5015212
refactor(extract): extract the _extract_generic tree-sitter engine in…
TPAteeq Jul 8, 2026
563bb59
refactor(extract): migrate pascal, objc, and julia extractors to extr…
TPAteeq Jul 8, 2026
247b2ae
refactor(main): move the command dispatch into graphify/cli.py
TPAteeq Jul 8, 2026
87b330c
Release 0.9.11
safishamsi Jul 8, 2026
00dd978
fix(extract): emit Kotlin enum entries as nodes with case_of edges (#…
ivanzhl Jul 8, 2026
ea8b804
Fix uv interpreter detection falling back to graphify-less python (#1…
mohammedMsgm Jul 8, 2026
e2d4753
Changelog: fold #1700 (Kotlin enums) and #1735 (uv probe) into 0.9.11
safishamsi Jul 8, 2026
2f9deae
fix(serve): scale per-term exact/prefix score tiers by squared term c…
fkhawajagh Jul 8, 2026
d89efbf
fix(extract): scope Pascal/Delphi call resolution + resolve inherited…
richtext Jul 8, 2026
d2d1f68
fix: surface silently-skipped dirs in enumeration + dedup Pascal edges
safishamsi Jul 9, 2026
ee1ff3d
fix(extract): resolve Java cross-module type references by import (#1…
safishamsi Jul 9, 2026
9c27a52
test(extractors): guard facade + registry identity for the per-langua…
Cekaru Jul 9, 2026
29a6954
fix(build): make ghost-node merge deterministic across process runs (…
erasmust-dotcom Jul 9, 2026
8b7ffc5
fix(extract): warn when files skip extraction for a missing optional …
rithyKabir Jul 9, 2026
bdc6e53
fix(build): don't bind imports/references across a language boundary …
philberndt Jul 9, 2026
c5db9ff
fix(cli): keep outputs/cache with --out / --graph, not the corpus or …
bbqboogiedwonsen Jul 10, 2026
dae602c
fix(extract): resolve Java member calls by receiver type (#1696)
oleksii-tumanov Jul 10, 2026
51b15a9
fix(update): preserve surviving hyperedges on AST-only rebuild (#1755)
oleksii-tumanov Jul 10, 2026
d68bf28
fix(extract): create json_config reference target nodes (#1764)
oleksii-tumanov Jul 10, 2026
35665a7
fix(pg_introspect): read FKs from pg_constraint so read-only roles ge…
rithyKabir Jul 10, 2026
4c075f9
docs(readme): unlink YC S26 badge until the public company page is live
safishamsi Jul 10, 2026
ce5af6f
test: guard to_html/sanitize_label against null source_file/label (#1…
safishamsi Jul 10, 2026
3c3b655
fix(extract): rewire cross-module function references to their defini…
EmilNyg Jul 10, 2026
df74ab4
test(csharp): chained call off new X(...) resolves (#1770)
safishamsi Jul 10, 2026
5777fec
fix(extract): route .rake files to the Ruby extractor + resolution (#…
krishnateja7 Jul 11, 2026
a646d66
fix(bash): link executed scripts across files (#1756)
balloon72 Jul 11, 2026
15a8653
fix(analyze): exclude rationale nodes from suggested-question gap cou…
balloon72 Jul 11, 2026
b688a26
fix(path): prefer full-token label matches when resolving path endpoi…
CJNA Jul 11, 2026
0d0e578
test(cli): graph.json node ids are portable across checkout paths (#1…
safishamsi Jul 11, 2026
091f609
fix(build): never prune a re-extracted source in build_merge (#1796)
erichkusuki Jul 11, 2026
0efb2a4
docs: point all website links at graphify.com
safishamsi Jul 11, 2026
591da76
fix(watch): require deletion evidence before evicting a missing sourc…
CJNA Jul 11, 2026
71d7ab9
fix(build): merge markdown quick-scan doc node into its semantic _doc…
jerp86 Jul 12, 2026
da71f82
fix(querylog): make the query log opt-in, off by default (#1797)
adam-pond-agent Jul 12, 2026
eec7a01
docs(changelog): finalize 0.9.13 notes and 0.9.12 section
safishamsi Jul 12, 2026
373bc8e
fix(sln): keep Visual Studio solution-folder node ids relative (#1789)
safishamsi Jul 12, 2026
90b545c
fix(cli): survive early pipe close (#1807); skip .nox venvs (#1804)
safishamsi Jul 12, 2026
5f57c46
fix(detect,hooks): honor .git/info/exclude; guard worktrees (#1810, #…
safishamsi Jul 12, 2026
a46eee4
fix(export): coerce non-scalar attrs in graphml; harden pipe-close flush
safishamsi Jul 12, 2026
579ba1d
fix(cache): scope semantic cache writes to extracted files (#1757)
TPAteeq Jul 12, 2026
da9616d
fix(cache): scope the incremental checkpoint write too (#1757 followup)
safishamsi Jul 12, 2026
6ca8604
fix(query): dedup seeds by label to stop generic-symbol flooding (#1766)
safishamsi Jul 13, 2026
c3a42a3
fix(extract): write AST cache to CWD, decoupled from the key anchor (…
safishamsi Jul 13, 2026
94d3099
fix(cache): stat-index must follow the cache location, not the key an…
safishamsi Jul 13, 2026
98c7ec0
fix(export): close stored XSS + broken neighbor links in graph.html (…
safishamsi Jul 13, 2026
8a5287a
fix(detect): honor nested .gitignore/.graphifyignore files below the …
Mohak-Agrawal Jul 13, 2026
7ca43ab
test(detect): harden nested-ignore tests (#1847 followup)
safishamsi Jul 13, 2026
6eb5923
fix(watch): forward community_labels to to_json in _rebuild_code
Jul 13, 2026
961b78e
test(watch): assert update writes community_name (#1855 followup); ch…
safishamsi Jul 13, 2026
cfc7cf2
fix(cache): resolve FileSlice via unit_path in checkpoint allowlist (…
safishamsi Jul 13, 2026
20405a8
fix(dedup): report fuzzy count in summary when exact_merges is 0 (#1857)
thejesh23 Jul 13, 2026
e32be08
fix(detect): legacy-manifest branch must `!=`-compare mtime to catch …
thejesh23 Jul 13, 2026
3684078
docs(changelog): record #1862 and #1860 in the unreleased 0.9.16 section
safishamsi Jul 13, 2026
fb4d452
fix(detect): scope nested ignore patterns to their own subtree (#1873)
Alwyn93 Jul 14, 2026
40eae3c
test(watch): pin update-with-nested-gitignore (#1880); changelog for …
safishamsi Jul 14, 2026
1aca158
fix(cargo): honor `package = "..."` rename when resolving internal de…
thejesh23 Jul 13, 2026
4ac5f07
fix(watch): preserve semantic edges of re-extracted sources (#1865)
xor-xe Jul 13, 2026
2210d69
docs(changelog): record #1865 and #1858 in the unreleased 0.9.16 section
safishamsi Jul 14, 2026
70bc9ca
fix(dedup): let the defining file win an ID collision, and warn only …
bchan84x Jul 13, 2026
fd54f0e
fix(dedup): deterministic collision survivor + bare-file definer (#18…
safishamsi Jul 14, 2026
2795a18
fix(exclude): persist --exclude so rebuilds re-apply it (#1886)
safishamsi Jul 14, 2026
060dd63
fix(extract): resolve Python module-qualified calls to calls edges (#…
safishamsi Jul 14, 2026
f80e4fa
test(watch): pin update discovers newly-added files/dirs (#1837)
safishamsi Jul 14, 2026
4f6106a
fix(cli): send missing-skill warning to stderr
Mzt00 Jul 14, 2026
8361a81
fix(extract): recognize uppercase TypeScript
xkam7ar Jul 14, 2026
5c0a04c
fix(extract): filter Kotlin builtin/stdlib types from references graph
kebwlmbhee Jul 14, 2026
e1b8a17
docs(changelog): record #1881, #1876, #1893 in the unreleased 0.9.16 …
safishamsi Jul 14, 2026
b3dc15b
fix(extract): close residual absolute-path/username leaks (#1899)
safishamsi Jul 14, 2026
a4ab6ed
fix(llm): reconcile dispatched vs returned files in semantic extract …
safishamsi Jul 14, 2026
a0e4a1c
docs(changelog): date 0.9.16 for release
safishamsi Jul 14, 2026
75b7279
docs(readme): point star-history at Graphify-Labs org; X handle to @g…
safishamsi Jul 14, 2026
ef8771e
fix: correct postgres install hint to graphifyy (#1906); classify .sk…
safishamsi Jul 14, 2026
107cea0
fix(serve): drop German and Romance question stopwords from query ter…
safishamsi Jul 14, 2026
876c043
fix(export): prune orphaned Obsidian notes on re-export (#1896)
safishamsi Jul 14, 2026
f2a6139
Fix spurious hooksPath warning and register graph.json merge driver
safishamsi Jul 14, 2026
0cacd70
fix(llm): drop out-of-scope nodes from the merged extraction result (…
safishamsi Jul 14, 2026
b1e313c
fix(cli): stamp freshly-extracted semantic docs in the manifest (#1897)
safishamsi Jul 14, 2026
43b2aff
chore: open 0.9.17 with 8 batch fixes (#1895 #1897 #1902 #1907 #1896 …
safishamsi Jul 14, 2026
75cf56b
fix(detect,cli): excluded files are pruned from graph and manifest, n…
safishamsi Jul 15, 2026
49df466
fix(sql): recover CREATE FUNCTION/PROCEDURE from tree-sitter ERROR no…
safishamsi Jul 15, 2026
0d78391
docs(changelog): record #1908/#1909 and #1910 in unreleased 0.9.17
safishamsi Jul 15, 2026
2851f31
fix: treat .cjs (explicit CommonJS) as a code extension
Kookwater Jul 15, 2026
76f5bc9
fix(watch): stop AST-quick-scanning docs that already have semantic n…
safishamsi Jul 15, 2026
d916c61
fix(cache): stop persisting dangling edges/hyperedges in the semantic…
safishamsi Jul 15, 2026
b7ddee3
fix(extract): make --mode deep effective over a warm cache; add --for…
safishamsi Jul 15, 2026
1c280e4
docs(changelog): record #1894(PR-1) #1916 #1915 #1912 in unreleased 0…
safishamsi Jul 15, 2026
ff999a9
perf(serve): collapse T+1 per-term scoring passes into one traversal
Sirhan1 Jul 14, 2026
c0875cc
test(serve): rebase #1900 test onto #1918 _score_query API; bench new…
safishamsi Jul 15, 2026
19c496d
fix(build): make _semantic_id_remap idempotent to stop id accretion (…
safishamsi Jul 15, 2026
cb96bda
fix: preserve semantic layer, stamp hyperedges, PHP namespaces, ignor…
safishamsi Jul 15, 2026
ecf1416
docs: cut 0.9.17 changelog and credit @zuwasi for Amp platform suppor…
safishamsi Jul 16, 2026
5840d0b
fix(pg_introspect): emit FK DDL before function stubs so unparseable …
sekmur Jul 15, 2026
0d018b4
fix(cache): key semantic cache on the extraction prompt (#1939)
SinghAman21 Jul 16, 2026
84638cb
chore: begin 0.9.18 development cycle
safishamsi Jul 16, 2026
ee74d80
fix(merge-chunks): validate untrusted subagent chunk JSON before merging
TPAteeq Jul 16, 2026
3305ef1
fix(merge-chunks): coerce non-numeric chunk token counts (follow-up t…
safishamsi Jul 16, 2026
fcc01db
fix(extract): don't force-write a partial graph over a complete one
TPAteeq Jul 16, 2026
0f93685
fix(extract): extend the incomplete-build shrink guard to the --no-cl…
TPAteeq Jul 16, 2026
7d53a02
fix(extract): fail closed on malformed existing graph + honor walk_er…
safishamsi Jul 16, 2026
f38e980
fix(io): write graph.json and manifest.json atomically
TPAteeq Jul 16, 2026
16fe8f3
fix(io): route the remaining graph/manifest writers through the atomi…
safishamsi Jul 16, 2026
90dcb6a
fix(cache): don't promote truncated LLM chunks to the semantic cache …
TPAteeq Jul 16, 2026
479f1af
fix(cache): mark files partial on empty-parse truncation (follow-up t…
safishamsi Jul 16, 2026
741876b
fix(llm): downgrade unverifiable code-typed semantic nodes to UNVERIFIED
TPAteeq Jul 16, 2026
8bc477f
fix(llm): move the unverifiable-node flag to a real, consumed field (…
safishamsi Jul 16, 2026
b193607
docs: record the #1949-#1953 integrity-cluster fixes in the 0.9.18 ch…
safishamsi Jul 16, 2026
dea6ec0
fix(extract): remove dangling alias import edges
oleksii-tumanov Jul 17, 2026
5a480a8
fix(merge-chunks): fail when no chunk validates
oleksii-tumanov Jul 16, 2026
5163a62
fix(watch): widen semantic-doc gate to the doc-shaped file_type subse…
alphanury Jul 16, 2026
dd0f8ec
fix(build): coerce null/malformed edge weight to the 1.0 default (#1960)
safishamsi Jul 17, 2026
9ee151d
fix(detect): spare genuine source from the Stage 1 sensitive-dir drop…
alphanury Jul 16, 2026
431dd18
fix(detect): keep .tfvars out of the graph under the sensitive-dir ca…
safishamsi Jul 17, 2026
824cac7
fix(detect): clear stale semantic_hash for dispatched-but-omitted fil…
alphanury Jul 16, 2026
709b208
test(cache): pin the #1948 x #1950 interaction (truncated doc's hash …
safishamsi Jul 17, 2026
be80ee8
fix(extract): anchor source_file on the scan root, not the --out dir …
SinghAman21 Jul 16, 2026
8cee776
docs: cut 0.9.18 changelog and document the incomplete-build refusal …
safishamsi Jul 17, 2026
689dd6c
feat(hook): opt-in strict PreToolUse guard + stop crying wolf (#1840)
safishamsi Jul 17, 2026
995508c
fix(cache): key file_hash stat-index memo by salt, not absolute path …
safishamsi Jul 18, 2026
a038684
Fix DreamMaker parent-relative #include paths (lstrip charset misuse)
Osamaali313 Jul 17, 2026
a86666a
fix(prs): decode gh/git/claude output as UTF-8, not the Windows cp125…
LukeTheoJohnson Jul 17, 2026
d56b70a
fix(resolution): repoint cross-extension re-exports without leaking a…
alphanury Jul 17, 2026
aad5955
fix(detect): keep ignore globs within path segments
oleksii-tumanov Jul 17, 2026
f17e2c5
fix: add --no-gitignore extraction opt-out
Mzt00 Jul 17, 2026
704e687
test: update watch ignore loader mock
Mzt00 Jul 17, 2026
caa6f9e
fix(extract): persist --no-gitignore instead of clobbering it (follow…
safishamsi Jul 18, 2026
5b8480a
docs: changelog entries for the #1989/#1971/#1975/#1978/#1980 fixes
safishamsi Jul 18, 2026
fb992ce
docs: cut 0.9.19, document install --strict, fix #1814 credit
safishamsi Jul 18, 2026
b77a01e
docs: correct #1971 credit (@Mzt00 fix, @JensD-git report; not @mzt006)
safishamsi Jul 18, 2026
9bf14a4
docs: rebrand the built-on-graphify section to graphify Enterprise + …
safishamsi Jul 18, 2026
e5a4b51
fix(extract): rewrite alias re-export targets
oleksii-tumanov Jul 17, 2026
faa0ac2
fix(install): emit hook exe paths with forward slashes so Git Bash do…
varuntej07 Jul 18, 2026
0224bca
fix(install): fire the search nudge on Claude Code's Grep tool, not j…
mdshzb04 Jul 18, 2026
0816630
fix(cache): anchor semantic cache writes to cache_root so --out round…
mdshzb04 Jul 18, 2026
a30e933
chore: begin 0.9.20 cycle + changelog for #1986/#1987/#1990/#1991/#1983
safishamsi Jul 18, 2026
4f9752c
chore: point project URLs at the canonical Graphify-Labs/graphify repo
safishamsi Jul 18, 2026
6534a87
ci: add PyPI trusted-publishing workflow (publish.yml)
safishamsi Jul 18, 2026
edec9ea
docs: date 0.9.20 for release
safishamsi Jul 18, 2026
c105633
fix: drop collapsed import self-loops
Endogen Jul 19, 2026
220a675
fix(llm): fall back to OLLAMA_HOST when OLLAMA_BASE_URL is unset
kimdzhekhon Jul 19, 2026
b35898a
fix(extract): initialize detection for pathless Postgres
oleksii-tumanov Jul 19, 2026
c57d571
fix(extract): honor persisted excludes on re-extract
oleksii-tumanov Jul 19, 2026
fab28ab
fix(extract): resolve alias re-exports and imports through barrels to…
HerenderKumar Jul 19, 2026
868f75d
fix(llm): OLLAMA_HOST fallback in detect_backend + default port (foll…
safishamsi Jul 20, 2026
e7ad693
fix(extract): don't guess an ambiguous barrel re-export (follow-up to…
safishamsi Jul 20, 2026
78a1b80
chore: begin 0.9.21 cycle + changelog for #1940/#2027/#2030/#2037/#1983
safishamsi Jul 20, 2026
94189ba
fix(watch): correct semantic-node eviction/preservation on update
safishamsi Jul 20, 2026
6a56763
fix(build): form-insensitive prune + scan-root marker (#2012)
safishamsi Jul 20, 2026
9c2e0fc
fix(skillgen): stamp only produced-output files in the update runbook…
safishamsi Jul 20, 2026
86fd1e4
chore: changelog for 0.9.21 data-integrity fixes (#2051/#2056/#2014/#…
safishamsi Jul 20, 2026
f6974ea
fix(watch): don't evict remote-source nodes after URL slash-collapse …
safishamsi Jul 20, 2026
6bbc9d1
chore: bump to 0.9.22; date 0.9.21 changelog
safishamsi Jul 20, 2026
b890ca6
fix(serve): reorder except clauses so the corrupted-graph message is …
kimdzhekhon Jul 19, 2026
67608c2
test(serve): pin generic ValueError message against clause-order regr…
kimdzhekhon Jul 19, 2026
db410d0
fix(detect): stop silent data loss from env-dir pruning and absolute-…
safishamsi Jul 20, 2026
1f4e3b2
fix(cli): wire god-nodes subcommand + accept --output alias on extrac…
safishamsi Jul 20, 2026
f1405dd
fix(extract): nested types get a contains edge from the enclosing typ…
safishamsi Jul 20, 2026
fecf9aa
fix(build): disambiguate colliding file-node labels for discovery (#2…
safishamsi Jul 20, 2026
8ce9f6b
docs: changelog for the 0.9.22 data-integrity/correctness batch
safishamsi Jul 20, 2026
5b05f0d
fix(cli): disambiguate file labels on the --no-cluster extract path t…
safishamsi Jul 20, 2026
abff1b1
docs(readme): surface the graphify.com waitlist above the fold
safishamsi Jul 20, 2026
b96effd
fix(install): uninstall must not delete a user's ### graphify H3 sect…
safishamsi Jul 21, 2026
b194301
fix(path): deterministic route + honest edge relation, not fabricated…
safishamsi Jul 21, 2026
87c8704
fix(label): --no-label placeholders no longer permanently suppress re…
safishamsi Jul 21, 2026
cdeba1d
fix(build): ghost-merge keys on full source_file, not bare basename (…
safishamsi Jul 21, 2026
bb46763
fix(extract): resolve Python imports regardless of scan root (src-lay…
safishamsi Jul 21, 2026
afa7c0d
chore: bump to 0.9.23; changelog for #2062/#2074/#2073/#2068/#2072; d…
safishamsi Jul 21, 2026
10b7105
fix(extract): harden #2072 src-layout resolution (adversarial-review …
safishamsi Jul 21, 2026
1fbc623
fix(query): report real call-site lines + stop silent query truncatio…
safishamsi Jul 21, 2026
c83085c
docs: date 0.9.23 for release
safishamsi Jul 21, 2026
abb85cc
docs(readme): troubleshoot an older graphifyy shadowing `uv run` (#1540)
HerenderKumar Jul 21, 2026
bb8f5bd
docs(cli): surface --code-only in the extract usage and README (#2071)
HerenderKumar Jul 21, 2026
a59abaf
docs: --code-only is an extract flag, not a skill flag (follow-up to …
safishamsi Jul 21, 2026
fef9dbb
feat(serve): honor a token_budget on get_neighbors/get_community
ojmucianski Jul 21, 2026
deb2620
feat(serve): announce get_neighbors/get_community truncation at the t…
safishamsi Jul 21, 2026
4ace951
fix: preserve calls edge direction in graphify query output
Yyunozor Jul 21, 2026
53d0f88
test(serve): guard + direction tests for dangling _src/_tgt (follow-u…
safishamsi Jul 21, 2026
e32c9f4
chore: bump to 0.9.24; changelog for #2080/#2069/#2075/#2085
safishamsi Jul 21, 2026
0ef452c
fix: group cut connections by file on explain for high-degree nodes
Yyunozor Jul 21, 2026
4c759b6
fix(cli): deterministic tie-break for grouped explain tail (follow-up…
safishamsi Jul 22, 2026
cc70085
fix(extract): resolve calls edges through an aliased Python import (#…
Yyunozor Jul 21, 2026
8c5f585
test(extract): external-alias negative + warm-cache coverage for #208…
safishamsi Jul 22, 2026
7116a6f
fix(llm): pin claude-cli output to a JSON schema when supported (#2076)
Yyunozor Jul 21, 2026
16315f1
fix(llm): parse claude-cli structured_output, not the prose result fi…
safishamsi Jul 22, 2026
5a4b207
fix(dedup): preserve same-source node attributes
Synvoya Jul 22, 2026
866d503
fix(dedup): order-independent gap-fill, source_file gate, _origin/Non…
safishamsi Jul 22, 2026
82c46e5
docs: changelog for #2093/#2102/#2095/#2094 (0.9.24)
safishamsi Jul 22, 2026
36b5e77
fix(detect): stop the sensitive-file filter from dropping topic docs …
safishamsi Jul 22, 2026
65b81bf
fix(skillgen): skill flow lists skipped-sensitive filenames, not just…
safishamsi Jul 22, 2026
a3e283e
docs: changelog for #2106 (0.9.24)
safishamsi Jul 22, 2026
8658cc3
fix(skillgen): commit rendered skill artifacts for the #2106 traceabi…
safishamsi Jul 22, 2026
2da192d
fix(extract): bound the XAML code-behind .cs scan so it can't hang
safishamsi Jul 22, 2026
9b1ac65
docs: changelog for the XAML .cs-scan hang fix (0.9.24)
safishamsi Jul 22, 2026
ad53f75
chore(release): 0.9.24
safishamsi Jul 22, 2026
0d1f25c
refactor(detect): remove dead .graphifyinclude handling (#2112)
safishamsi Jul 22, 2026
363f036
docs(readme): drop the broken star-history chart
safishamsi Jul 22, 2026
ba7f9ea
chore: relicense from MIT to Apache-2.0
safishamsi Jul 22, 2026
2fa6cd3
chore(release): 0.9.25
safishamsi Jul 22, 2026
f6742bb
fix(extract): exclude class refs from indirect_call edges (#2137)
Rishet11 Jul 23, 2026
26cac41
test(extract): cover cross-file class-ref indirect_call suppression (…
Rishet11 Jul 23, 2026
e1e041b
fix(hooks): accept Windows backslash paths in interpreter allowlist (…
Rishet11 Jul 23, 2026
ce9ea7d
test(hooks): surface bash failures in _shell_verdict helper
Rishet11 Jul 23, 2026
ca3113a
fix(hooks): arm the rebuild timeout without SIGALRM on Windows
Rishet11 Jul 24, 2026
0da6929
fix(hooks): match the post-checkout log prefix in the timeout fallback
Rishet11 Jul 24, 2026
bdcae25
fix(extract): resolve bash calls into sourced-file functions (#2141)
HerenderKumar Jul 24, 2026
0019fc4
fix(extract): resolve bash source edges built from ${VAR} paths (#2079)
HerenderKumar Jul 23, 2026
7e955d2
fix(detect): honor ignore files saved with a UTF-8 BOM (#2163)
safishamsi Jul 24, 2026
eebf030
test(extract): cover calls into a ${VAR}-sourced bash lib (follow-up …
safishamsi Jul 24, 2026
a4fb87d
chore: bump to 0.9.26; changelog for #2137/#2126/#2148/#2141/#2079/#2163
safishamsi Jul 24, 2026
66d8110
chore(release): 0.9.26
safishamsi Jul 24, 2026
794cf9e
fix(extract): emit references edges for Python decorators (#2154)
Rishet11 Jul 25, 2026
8d8005b
test(extract): cover Python decorator reference edges (#2154)
Rishet11 Jul 25, 2026
9be3459
fix(resolution): honor jsconfig.json and compilerOptions.baseUrl (#2153)
Rishet11 Jul 25, 2026
6107f14
test(resolution): cover jsconfig/baseUrl module resolution (#2153)
Rishet11 Jul 25, 2026
33aa89c
fix(extract,analyze): filter Swift/Foundation/SwiftUI builtins from r…
MasterFede5 Jul 24, 2026
c18ec81
test: sandbox HOME for the whole suite so installers can't touch real…
safishamsi Jul 25, 2026
05ee568
fix(install): never clobber an unparseable settings file; back up bef…
safishamsi Jul 25, 2026
137dcf2
fix(extract): incremental --no-cluster merges instead of overwriting …
safishamsi Jul 25, 2026
fbc24c7
fix(extract): suppress builtin/stdlib Python decorators from referenc…
safishamsi Jul 25, 2026
a8da0d3
chore: bump to 0.9.27; changelog for #2167/#2169/#2154/#2153/#2147/#2168
safishamsi Jul 25, 2026
52e1ed4
test(resolution): assert canonical import-target ids in jsconfig test…
safishamsi Jul 25, 2026
4191b7d
chore: sync uv.lock to 0.9.27
safishamsi Jul 26, 2026
556e615
fix: skip the process pool when only one worker is available (#2173)
Souptik96 Jul 25, 2026
4710b86
fix: resolve bash sources for extensionless libs and bare names (#2171)
Souptik96 Jul 25, 2026
44241dd
fix: resolve ${VAR} bash sources against the variable's real base (#2…
Souptik96 Jul 25, 2026
cfe15f9
fix: pin interpreters whose path contains a space (#2166)
Souptik96 Jul 25, 2026
ffa2a24
fix: recover every declared SQL routine from unparseable PL/pgSQL (#2…
Souptik96 Jul 25, 2026
911d581
fix: document the Codex PreToolUse hook as an intentional no-op (#2165)
Souptik96 Jul 25, 2026
9eb76ac
fix: review follow-ups for the bash/SQL contributor PRs (#2171/#2172/…
safishamsi Jul 26, 2026
d16510e
fix(extract): canonicalize regex-rescue import target ids (#2195)
safishamsi Jul 26, 2026
e395ff9
fix(dedup): merge cross-file concept nodes with identical normalized …
safishamsi Jul 26, 2026
334cff6
fix(cache): portable stat-index keys + normalized semantic source_fil…
safishamsi Jul 26, 2026
8adb261
fix(build): fold legacy node/edge aliases and re-key absolute-derived…
safishamsi Jul 26, 2026
0858954
feat(csharp): namespace-aware member-call resolution + shadow poisoni…
safishamsi Jul 26, 2026
b4dd6d7
docs: changelog for the Track A / node-identity / C# batch (0.9.27)
safishamsi Jul 26, 2026
f5a3592
chore(release): 0.9.27
safishamsi Jul 26, 2026
62b1d43
docs(readme): link the YC badge to the company page
safishamsi Jul 26, 2026
d1f303e
fix(swift): extract computed & observed properties (#2181)
ozdemirsarman Jul 26, 2026
06e5978
fix(detect): NFC-normalize manifest keys so --update survives macOS p…
SyedFahad7 Jul 26, 2026
072698a
fix(detect): NFC both sides of relpath for portable manifests on macOS
SyedFahad7 Jul 26, 2026
6d42c48
fix(watch): stop incremental rebuilds from reusing stale community la…
bobspryn Jul 26, 2026
498b76b
fix(watch): keep a visualization when the graph outgrows the viz cap
bobspryn Jul 26, 2026
d91a987
fix(extract): stamp target_file on Python imports and markdown refs s…
safishamsi Jul 27, 2026
2f78439
fix: load raw edges-keyed graphs + stop pruning alive files as delete…
safishamsi Jul 27, 2026
bdb6788
fix(install): scope uninstall to project_dir instead of always deleti…
safishamsi Jul 27, 2026
753a6ac
test(detect): regression for NFC manifest keys on macOS --update (#2221)
safishamsi Jul 27, 2026
bbc4e51
chore: bump to 0.9.28; changelog for #2211/#2213/#2210/#2212/#2215/#2…
safishamsi Jul 27, 2026
1644230
chore(release): 0.9.28
safishamsi Jul 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 55 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
name: Publish to PyPI

# Publishes graphifyy to PyPI via OpenID Connect (trusted publishing) — no API
# token or password. Fires when a GitHub Release is published (i.e. after
# `gh release create ... --latest`), builds the sdist + wheel, guards that the
# package version matches the release tag, then uploads with an OIDC token.
#
# One-time PyPI setup (Manage project -> Publishing -> Add a GitHub publisher):
# Owner: Graphify-Labs
# Repository: graphify
# Workflow name: publish.yml
# Environment name: pypi
on:
release:
types: [published]
# Manual re-run escape hatch (still requires the release tag to be checked out).
workflow_dispatch:

permissions:
contents: read

jobs:
publish:
name: Build and publish graphifyy
runs-on: ubuntu-latest
environment:
name: pypi
url: https://pypi.org/project/graphifyy/
permissions:
id-token: write # REQUIRED: mint the OIDC token PyPI verifies. Nothing else.
steps:
- uses: actions/checkout@v4

- name: Install uv
uses: astral-sh/setup-uv@v6

- name: Build sdist + wheel
run: uv build --sdist --wheel

- name: Guard — package version must match the release tag
if: github.event_name == 'release'
run: |
VERSION=$(grep -m1 '^version = ' pyproject.toml | sed -E 's/^version = "(.*)"/\1/')
TAG="${GITHUB_REF_NAME#v}"
echo "pyproject version: $VERSION | release tag: $TAG"
if [ "$VERSION" != "$TAG" ]; then
echo "::error::pyproject version ($VERSION) does not match release tag ($TAG); refusing to publish."
exit 1
fi

- name: Twine metadata check
run: uvx twine check dist/*

- name: Publish to PyPI (trusted publishing)
uses: pypa/gh-action-pypi-publish@release/v1
301 changes: 301 additions & 0 deletions CHANGELOG.md

Large diffs are not rendered by default.

223 changes: 202 additions & 21 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -1,21 +1,202 @@
MIT License

Copyright (c) 2026 Safi Shamsi

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.

"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.

"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.

"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.

"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.

"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.

"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).

"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.

"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."

"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:

(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and

(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and

(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and

(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.

You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work.

To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.

Copyright [yyyy] [name of copyright owner]

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.
21 changes: 21 additions & 0 deletions LICENSE-MIT
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
MIT License

Copyright (c) 2026 Safi Shamsi

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
8 changes: 8 additions & 0 deletions NOTICE
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
Graphify
Copyright 2026 Safi Shamsi and the Graphify contributors.

This product is licensed under the Apache License, Version 2.0 (see LICENSE).

Portions of this software were contributed under the MIT License prior to the
relicensing and remain available under those terms. The original MIT license
text is retained in LICENSE-MIT.
Loading