Releases: Flux-Frontiers/swift_kg
Release list
SwiftKG v0.4.0
Release Notes -- v0.4.0
Released: 2026-09-29
A validation release. SwiftKG no longer carries its own copies of the input
validators and uses the ones in kgmodule-utils instead. Extraction,
resolution, the graph schema and the MCP tool surface are unchanged and no
index needs rebuilding. One behavior changes at the edges: integer arguments
are now checked more strictly, so a bool or a fractional float is rejected
where it used to be silently coerced.
What changed
The local validators are gone. bounded_int and require_query lived in
swift_kg.validation as copies of the SDK's helpers. They are deleted, and the
callers import them from kg_utils.validation. The module keeps only what is
specific to Swift: MAX_QUERY_LEN, normalize_node_id and known_prefix.
The query() override is deleted. It existed only to validate its
arguments. The base class now bounds q, k, hop and max_nodes in both
query() and pack(), and SwiftKG sets its 500-character query cap through
the max_query_len class attribute. pack() keeps an override for one reason:
it bounds max_lines, which the SDK does not check.
Stricter integer checks. The SDK's bounded_int rejects a bool and a
non-integral float. The old local copy accepted both, so k=True was treated
as 1 and k=3.7 as 3. Both now raise ValueError. This is the reason for the
minor version bump.
kgmodule-utils floor raised to >=0.26.0, the latest release. The lock
moves from 0.23.0 to 0.26.0 and changes only fleet packages.
Upgrading
If you call the Python API or MCP tools with well-formed integers, nothing
changes. If any caller passes a bool or a float with a fractional part for
k, hop, max_nodes or max_lines, change it to an int; it will now raise
ValueError. No data migration, rebuild or configuration change is needed.
pip install --upgrade swift-kg is enough.
Full changelog: CHANGELOG.md
SwiftKG v0.3.0
Release Notes -- v0.3.0
Released: 2026-09-21
A dependency and packaging release. Nothing in extraction, resolution, query or
the MCP surface changes, and no index needs rebuilding. What moves is what
SwiftKG requires of its environment: it now floors kgmodule-utils at 0.23.0
and mcp at 1.3.0, and a typing workaround that 0.23.0 made unnecessary has
been deleted.
What changed
The __enter__ override is gone. It existed for one reason: KGModule
typed __enter__ as returning the base class, so with SwiftKG(...) as kg:
lost the subclass surface under ty and every repo that hit this wrote the
same three-line override to narrow it back. kgmodule-utils 0.23.0 returns
Self instead, which makes all of those redundant at once. SwiftKG's copy is
deleted here and ty is clean without it. This is the fleet's standing rule
applied to itself: when several repos independently write the same override,
the override is the thing to delete, and the base class is where the fix
belongs.
The mcp floor was wrong, and it matters more here than elsewhere. It read
>=1.0.0 and now reads >=1.3.0,<2. mcp.server.fastmcp does not exist at
all below 1.2.0, and its FastMCP accepts instructions= and lifespan= only
from 1.3.0. SwiftKG is one of the few fleet servers that passes both, so a
resolver landing below 1.3.0 would have broken swiftkg-mcp at construction
rather than merely ignoring an argument. Every lock already resolved far above
it, so this corrects a declaration that was untrue rather than an environment
that was broken. The <2 cap stays: mcp 2.0 removed the bundled
mcp.server.fastmcp module entirely.
The maintainer-only kg Poetry group is gone. It held doc-kg and
pycode-kg, which this package runs but never imports. Under the fleet's
"tools are global" rule a tool is installed once with uv tool and is never a
dependency of the repo, and the test is the import. This does not affect anyone
installing swift-kg from PyPI, since the group was never part of the
published metadata.
Upgrading
Nothing to do. No data migration, no rebuild, no configuration change. If you
install from PyPI, pip install --upgrade swift-kg picks up the new floors and
resolves the same versions your environment almost certainly already had.
Contributors working in a clone need one command, once, because the pre-commit
hook that pycodekg install-hooks wrote used to point into .venv/bin and the
tools no longer live there:
pycodekg install-hooks --forceFull changelog: CHANGELOG.md
SwiftKG v0.2.1
Release Notes — v0.2.1
Released: 2026-09-15
This is a documentation-only release: SwiftKG now has a citable archive.
What changed
A Zenodo concept DOI. v0.2.0 minted the first archived release on Zenodo,
so there was nothing to cite before now. CITATION.cff, the README badge row,
and a new README citation section (APA and BibTeX) all point at the concept
DOI, 10.5281/zenodo.22759432, which resolves to whichever version is newest
rather than pinning to this one. No code changed.
Upgrading
Nothing to do. If you cite SwiftKG, use the DOI above.
Full changelog: CHANGELOG.md
SwiftKG v0.2.0
Release Notes — v0.2.0
Released: 2026-09-14
SwiftKG's graph now resolves the symbols it references instead of leaving
edges pointing at nothing, and a build can be scoped to the source directories
that actually matter. Alongside those two changes, a mkdocs-material
documentation site ships, the CLI and MCP surfaces gain parity fixes with
PyCodeKG, and a run of extraction and analysis bugs found by adversarial
fixtures are fixed.
What changed
Symbol resolution is real. Previously the extractor wrote edges pointing
at sym:<name> stub IDs but never emitted a node for them — on Alamofire,
1415 edges pointed at 392 IDs no row defined — and SwiftKG never ran a
resolution pass at all, so no RESOLVES_TO edge existed despite centrality,
CodeRank and callers() all depending on one. SwiftKG now emits a
deduplicated symbol node per stub and resolves it through the new
swift_kg.resolution module. Resolution is pruned harder than PyCodeKG's:
Swift member names are short and heavily overloaded, so a bare-name match
with more than one candidate (85% of raw resolutions on Alamofire) is dropped
rather than kept at low confidence, alongside stdlib member names and
self-links. Existing snapshots will read as behind after the next rebuild,
since total_nodes now counts the stub nodes too — that's expected, not a
regression; re-save the snapshot.
Builds can be scoped to real source. --include-dir / --exclude-dir
land on build, update, build-sqlite and analyze, matching pycodekg.
Without them, indexing Tests/ and Example/ alongside a library's actual
source skews every metric the analysis report computes — on Alamofire it
dragged doc-comment coverage from 56.5% down to a blended 31.5% and put two
test-support files in the top three of every structural ranking.
A documentation site. mkdocs.yml, an mkdocstrings-generated API
reference, and a Docs workflow publish to GitHub Pages on every push to
main that touches the source. SwiftKG is the first of the code-KG modules
to carry one.
CLI/MCP parity and hardening. swiftkg analyze gains -j/--json and
-q/--quiet to match pycodekg analyze, plus a quality block in its
compiled results. Every bound on the MCP surface — list_nodes, find_node,
public_api, coderank's radius, and the Swift-specific tools that had
read the graph directly — now rejects an out-of-range argument with a message
naming the accepted range, instead of silently truncating.
A run of extraction and analysis fixes. A nested type with a repo-unique
name no longer absorbs every reference to that name repository-wide,
including references to a same-named standard-library type. An enum's raw
value type (enum Sections: Int) is no longer recorded as a protocol
conformance. swiftkg analyze now sees the snapshots it was given, a
library's public API is no longer flagged as dead code, and a handful of
smaller report and lookup bugs — double-printed output, unnormalized quoted
node IDs, stale TypeScriptKG wording — are corrected.
Upgrading
Rebuild the graph (swiftkg build) to pick up symbol resolution — existing
indices carry no symbol nodes or RESOLVES_TO edges. If you track
snapshots, re-save one after the rebuild; the node-count jump from the new
stub nodes will otherwise read as drift. No other migration is needed.
Full changelog: CHANGELOG.md