Roadmap#
This page is the canonical roadmap. The README carries a short pointer so it does not drift from here.
Release runway sprint (May 2026)#
task_id: jaxlint-runway-2026-05
Packaging runway toward public PyPI jaxlint 0.1.x (MIT license, metadata, CI, governance, Trusted Publishing).
ID |
Deliverable |
Phase |
Status |
|---|---|---|---|
RR1 |
|
R1 |
In progress |
RR2 |
Version reset 0.1.0a1 (pre-release alpha); README / |
R1 |
In progress |
RR3 |
|
R2 |
In progress |
RR4 |
Full pytest + coverage on every PR ( |
R3 |
Shipped |
RR5 |
LSP subprocess smoke via |
R4 |
Shipped |
RR6 |
|
R4 |
In progress |
RR7 |
Public GitHub repo + RTD stable 200; shrink |
R5 |
blocked on public GitHub |
RR8 |
|
R6 |
In progress |
RR9 |
OpenCode staging evidence (MCP + LSP) |
R7 |
blocked on public GitHub |
Product vision#
jaxlint stays easy to drive from CI and editors: a JAX-aware static checker and doc-quality tool whose library surface (jaxlint.core) stays import-light (no JAX) while jaxlint[hlo] can go deeper where JAX and exports are already available.
Shipped baseline (current release)#
This section tracks what is in the repository today. Packaged releases use the version in pyproject.toml (currently 0.1.0a1); treat that as the source of truth for semver, not an informal “v0.1” label.
Already in tree today:
Area |
Status |
|---|---|
CLI ( |
Stable for core flows; |
Rules |
JL/JD/JM catalogue with fixtures and docs. |
Config |
|
Testing |
Pytest markers ( |
Docs |
Sphinx + MyST + Read the Docs (HTML plus PDF plus htmlzip on version builds). |
|
Optional imports; CLI only checks the extra — merge-blocking |
Near term (next few releases)#
Focus: integrations, ergonomics, and trust without bloating jaxlint.core.
Canonical hosted URLs#
Trusted HTTP status values below come from curl -sI -L (not “should be 200”); both canonical URLs still 404 as of the last check.
URL |
Kind |
Last checked |
HTTP status |
|
Next review |
|---|---|---|---|---|---|
|
Read the Docs project |
2026-05-06 |
404 ( |
Ignored in |
2026-10-01 |
|
GitHub repository root |
2026-05-06 |
404 (GitHub “not found” page) |
Same — ignored until the repo is reachable with a stable 200. |
2026-10-01 |
Output formats — Shipped: GitHub annotation JSON, SARIF 2.1.0 (
--format sarif),compacttext, andrich(--format rich; explicitrichdependency). Shipped (0.4.0): Rich panel + severity summary,COLUMNS/ terminal width / fallback 120, optional OSC 8file:hyperlinks when stdout is a TTY and colors are on. Shipped (0.4.1): SARIFtool.driver.rules, per-resultruleIndex, optionalhelpUriviasarif-rule-docs-baseconfig (HTTPS). Remaining: optional further polish if desired.Hosted docs hygiene —
sphinx.fail_on_warningis already on in.readthedocs.yml. Partial: canonical URLs still 404 — see Canonical hosted URLs;linkcheck_ignoreindocs/conf.pystays until both return stable 200 (next review 2026-10-01).CI parity — Shipped: required
jax-hlojob installsjaxlint[hlo]and runspytest -m needs_jax(merge-blocking). PRlint-testjobs run full pytest + coverage withuv sync --all-groups --extra lsp --extra mcpon 3.11 / 3.12 (nomain-only partial suite).API reference — Shipped: Sphinx autodoc / autosummary for
jaxlint.core(and configuration types underjaxlint.core.config; seeapiin the docs toctree).jaxlint.hlostays a narrative-only page (hlo) so JAX is not imported on RTD builders.HLO credibility — Shipped: targeted pytest for
SemanticAnalyzer/GraphAuditSensor(get_operations,audit_kernel/audit_exported, while and outfeed violation paths,instrument_and_runcheckify failure). Shipped (goldens): StableHLO text fixtures undertests/fixtures/hlo/— outfeed /stablehlo.whileaudit_exportedpaths plus add+constant and multiply+reshape inventory goldens (duck-typed fake exports;@pytest.mark.needs_jax,jaxlint[hlo]in CI; merge-blockingjax-hlo— see Changelog). Remaining: broaden golden coverage for more export-heavy cases (and optional broader MLIR parsing) as needed.
Medium term#
Initiative |
Goal |
|---|---|
Language Server (LSP) |
Shipped (v1): optional |
HLO diagnostics |
Optional analysers over lowered IR/text (similar in spirit to “HLO dump regex” tooling described in jaxbeans discussions): scatter→gather fusion gaps, noisy kernel launches — scoped to |
Performance at scale |
Shipped (May 2026): opt-in disk cache via |
Config evolution |
Shipped (May 2026): |
Polish horizon#
Optional extensions and housekeeping — no committed delivery date. Revisit when effort/reward or external prerequisites (for example public RTD/GitHub URLs) line up.
Track |
Details |
|---|---|
CLI output |
Further |
Hosted docs |
When canonical Read the Docs and GitHub URLs return stable 200, shrink |
HLO goldens |
Broader StableHLO / export-heavy fixtures under |
LSP |
Incremental editor ergonomics that stay thin and aligned with |
Config / SARIF |
Org-specific severity or policy layers on top of the built-in catalogue + |
HLO diagnostics (rules) |
|
Longer horizon / exploratory#
These are not committed milestones; revisit when upstream JAX and IDE ecosystems move.
Idea |
Notes |
|---|---|
MCP server |
v1 (0.2.3): optional |
Math semantics |
Beyond delimiter/LaTeX structure: optional SymPy-backed checks — opt-in dependency. |
Deeper parallelism / sharding UX |
New rules aligned with JAX |
How to steer this roadmap#
Open issues or RFC-style PRs that spell out rule IDs, default severity, config keys, and test fixtures. Breaking changes should bump minor/major semver and mention migration in the Sphinx Changelog.
Current sprint notes (May 2026 — Config evolution)#
Theme: Per-rule severity overrides, jaxlint.toml / --config file, cache namespace v2, SARIF/GitHub aligned with effective severity.
task_id: jaxlint-sprint-2026-05
Artifact: .praxia/sprint-2026-05-config-evolution.md
ID |
Deliverable |
Status |
|---|---|---|
CF1 |
|
Shipped |
CF2 |
|
Shipped |
CF3 |
|
Shipped |
CF4 |
SARIF / GitHub JSON use runner |
Shipped |
CF5 |
|
Shipped |
CF6 |
Docs ( |
Shipped |
Outcome review: APPROVE (after remediation: cache fingerprint regression test for severity-only override delta).
Current sprint notes (May 2026 — LSP debounce / cancellation)#
Theme: Server-side textDocument/didChange debounce (JAXLINT_LSP_DEBOUNCE_MS) with generation + didClose cancellation, canonical file:// keys, live buffer read after debounce.
task_id: jaxlint-sprint-2026-05-06
ID |
Deliverable |
Status |
|---|---|---|
DB1 |
|
Shipped |
DB2 |
Generation guard + |
Shipped |
DB3 |
|
Shipped |
DB4 |
Subprocess tests (debounce=0 baseline + rapid-change coalescing test) |
Shipped |
DB5 |
|
Shipped |
Outcome review: APPROVE-with-nits (full pytest + ruff; reviewer nits: optional non-file:// subprocess smoke, changelog redundancy vs Unreleased).
Current sprint notes (May 2026 — Native jaxlint.toml manifest)#
Theme: First-class [jaxlint] table in jaxlint.toml with legacy [tool.jaxlint] compatibility (same file), pyproject.toml unchanged ([tool.jaxlint] only).
task_id: jaxlint-sprint-2026-05-05
ID |
Deliverable |
Status |
|---|---|---|
JX1 |
|
Shipped |
JX2 |
Mutual exclusion ( |
Shipped |
JX3 |
|
Shipped |
JX4 |
Cache fingerprint equivalence ( |
Shipped |
JX5 |
Docs + changelog 0.3.1 |
Shipped |
Outcome review: APPROVE-with-nits (full pytest + ruff verified locally).
Current sprint notes (May 2026 — Agent-grade MCP v1 / “nascency”)#
Theme: Structured MCP responses, run_checks passthrough options from agents, and a jaxlint_capabilities introspection tool — backward compatible by default.
task_id: jaxlint-sprint-2026-05-nascency
ID |
Deliverable |
Status |
|---|---|---|
MC1 |
|
Shipped |
MC2 |
|
Shipped |
MC3 |
|
Shipped |
MC4 |
|
Shipped |
MC5 |
Docs + version 0.2.3 (changelog, README, roadmap) |
Shipped |
Current sprint notes (May 2026 — LSP nits + MCP preview)#
Theme: LSP test/CI/doc alignment (markers, didClose coverage, contributing truth) plus an optional MCP stdio preview for agent workflows.
task_id: jaxlint-sprint-2026-05-oda
ID |
Deliverable |
Status |
|---|---|---|
N1 |
Module-level |
Shipped |
N2 |
CI |
Shipped |
N3 |
Stdio test: |
Shipped |
N4 |
|
Shipped |
N5 |
|
Shipped |
M1 |
|
Shipped |
M2 |
|
Shipped |
Current sprint notes (November 2026 — LSP v1)#
Theme: Diagnostics-only language server — optional jaxlint[lsp] + editor stdio integration without JAX/HLO scope creep.
task_id: jaxlint-sprint-2026-11
ID |
Deliverable |
Status |
|---|---|---|
L01 |
Optional |
Shipped |
L02 |
|
Shipped |
L03 |
|
Shipped |
L04 |
|
Shipped |
L05 |
Subprocess JSON-RPC tests ( |
Shipped |
L06 |
CI ( |
Shipped |
Review |
Outcome audit (2026-05-05): APPROVE-with-nits — no blocking gaps vs DoD; follow-ups tracked below |
Recorded |
Open TODOs (LSP v1 reviewer nits)#
Non-blocking polish from the outcome review; not duplicated as GitHub issues in-repo.
LSP tests: add subprocess/integration coverage that
textDocument/didClosetriggerspublishDiagnosticswith an empty list (today only open/change are asserted).Markers: either add
@pytest.mark.lsptotests/test_lsp_convert.pysopytest -m lspruns convert + stdio suites, or document indocs/contributing.mdthat CI names those files explicitly andlspis stdio-focused.Contributing docs: add a short Language server (
jaxlint[lsp]) subsection under Contributing (uv sync --extra lsp, suggested pytest invocations, marker meaning).
Current sprint notes (May 2026 — Disk cache / P09)#
Theme: Opt-in disk cache for jaxlint check — roadmap P09 from the August scale sprint (now delivered).
task_id: jaxlint-sprint-2026-05-p09-cache (artifact: .praxia/sprint-2026-05-disk-cache.md)
ID |
Deliverable |
Status |
|---|---|---|
P09a |
|
Shipped |
P09b |
|
Shipped |
P09c |
Runner wraps per-file diagnostics with cache get/put |
Shipped |
P09d |
|
Shipped |
P09e |
POSIX |
Shipped |
P09f |
Tests: warm/cold, parallel, invalidation, namespace, CLI, corrupt blob |
Shipped |
Current sprint notes (August 2026 — Scale & performance)#
Theme: Scale & performance — cut redundant I/O/AST work on jaxlint check, file-level parallelism, documented run_checks sort contract.
task_id: jaxlint-sprint-2026-08-scale (execution artifact: .agents/REFACTOR_ROADMAP)
ID |
Deliverable |
Status |
|---|---|---|
P01 |
|
Shipped |
P02 |
Perf sensors |
Shipped |
P03 |
|
Shipped |
P04 |
|
Shipped |
P05 |
|
Shipped |
P06 |
CLI |
Shipped |
P07 |
|
Shipped |
P08 |
Docs: cli, changelog, roadmap, library |
Shipped |
P09 |
Opt-in disk cache ( |
Shipped (May 2026 sprint; see above) |
Current sprint notes (July 2026 — Trust surfaces)#
Theme: Trust surfaces — docs link hygiene evidence, HLO golden coverage (strategy B), roadmap truthfulness.
ID |
Deliverable |
Status |
|---|---|---|
D02 |
URL verification ( |
Done — both canonical URLs return HTTP/2 404 (2026-05-05); documented in |
D01 |
|
Partial — ignores retained; comments refreshed with evidence; next review 2026-10-01. |
H01 |
Golden MLIR: add + constants ( |
Done — |
H02 |
Golden MLIR: multiply + reshape + constants |
Done — |
H03 |
|
Done — |
R01 |
README blurb alignment |
R01 deferred (no change this sprint). |
Previous sprint (June 2026 — Ergonomics)#
Theme: Ergonomics — human-readable CLI output without changing machine-oriented formats. Outcome: Completed for Rich CLI; partial for hosted-docs link trim (same 404 evidence as July).
Deliverable |
Status |
|---|---|
|
Landed |
Trim |
Partial — superseded by July 2026 D01/D02 evidence in |
Pin JAX in |
Done — pins |
Golden StableHLO: |
Done |
Previous sprint (May 2026): Golden StableHLO fixtures + needs_jax wiring, changelog + docs index, roadmap / packaging version narrative (see shipped baseline and Changelog).