Deferred and refused ideas. For shipped work see Changelog.md; for runnable recipes see Examples.md; for forward-looking items see TODO.md.
-
Multicore for the post-Agda passes. Agda's
TCMand theBackend'hooks are serial (upstream contract) and unsafe to fork. The post-Agda IO inpostCompileAD—backfillAccess'sfindPrivateRangesscan,collectHighlightedSnippets, thePrecomputeline scan — would be safe, but walltime there isn't dominant. Revisit on a profile. -
Daemon / persistent mode (
agda-deps daemon). Amortise cabal+Agda startup (measured ~25 min over a 776-commit walk) by keeping one process consuming newline-delimited JSON commands. Large: Agda'sTCMholds persistent state (stDecodedModules/stVisitedModules/ mtime-based.agdaiinvalidation) that reuse across commits would touch. Cheaper win first: parallelise the walker's per-commit loop. (Calling the installed binary instead ofcabal runis already possible — see the install recipe.) -
Snippet bundle hashing for the
--skip-agdadrawer. Thebig-module-dag-podsdrawer keys defs by a Murmur-on-prettyShowhash thatSkipAgdadoesn't reimplement, so it shows a fallback. Add a JS-side hash or pre-bake a hash→name map intograph.jsonfor a future--skip-agda --with-sourcemode. -
Sub-modules in the source scan.
Precompute.parseHeaderreads only the firstmodule …per file; nestedmodule Foo.Inner whereblocks are missed. Fine for--skip-agdatoday. -
Scale validation at 100k modules.
big-module-dag-podshas the right shape but is untested at that size; tuneBUCKET_SIZE/EDGE_BUDGET/VIEWPORT_PADfrom a real corpus when one's available. -
External-module heuristic for
--skip-agda. A module is external iff its source is outsidecwdor it appears only as an import target. Could grow to read.agda-libdepend:libraries for better multi-library classification. -
Schema bump to v3.
kind,reexports[], anddefinitionEdgesProvenancewere all added additively underschemaVersion: 2. A v3 bump becomes honest at the next incompatible change. -
Warm-
.agdaiedge loss. A warm, non-incremental run emits a slightly poorer main-module graph than a cold run (dead-private pattern helpers lose edges/kind/type), because thegetSignaturedead-private recovery only seesstSignature, which holds just the entry module's defs. Main-module-only; imported modules are cache-state independent. Mitigated (the golden is a cold run;--incrementalserves the complete fragment). A root fix would need recovering dead-private defs from outsidestSignature.
-
Stable
def_idacross runs. Refused on principle — belongs in a history/diff tool. Content/signature hashes and user pragmas are heuristics that break on refactors; QNames are the closest thing Agda ships and we already emit them. Rename detection isgit log --follow's job. -
Inliner gap (producer side). Won't fix on the producer: Agda inlines every
{-# INLINE #-}call before the backend hook, so the call edges are unrecoverable from post-elaboration syntax, and keeping INLINE functions as nodes just creates zero-caller orphans that read as falsedead. Handled consumer-side by a source scan. Fixture:test/InlineGap.agda. -
first_seen/last_seen, per-commitchurn/ pivot hints. Out of scope — multi-commit context is a history-tool concern.first_seencould become a daemon-mode field if the daemon ever lands. -
Per-commit
present: [qname]set. Redundant —defs.names(packed) anddefinitions[].name(expanded) already enumerate every def seen this run.