kanonarion

command module
v0.16.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 31, 2026 License: Apache-2.0 Imports: 4 Imported by: 0

README

Kanonarion

Dependency assurance software for Go.

Kanonarion is a deterministic, local source of truth about your dependencies - what's in them, how they're licensed, how to call them, and which known vulnerabilities your code actually reaches. Developers query it from the CLI with human-readable output; AI coding agents get JSON. Both get the same answer, computed from your real dependency tree - not a model's best guess. The questions you would answer by hand, burn through tokens, or skip are answered quickly and correctly.

It surfaces evidence, not verdicts. Where the answer is uncertain, it says so, and in what way it is uncertain — never collapsing uncertainty into "safe."

A single binary. SQLite-backed local store. No SaaS, no account, no proprietary scanner deciding for you. The facts are public; the judgment is local and yours.


Why Kanonarion?

Modern AI coding agents (Claude, Copilot, Cursor, Junie) should be asking questions about dependencies constantly - what's the API, is this CVE reachable, can I use this license commercially, how do I call this function. Without a local fact store, the agent usually doesn't ask at all - it guesses. That's what I found writing Kanonarion. When you force the agent to find the answers you pay in tokens and latency.

Kanonarion solves this by running a walk → extract → query pipeline once per dependency set, then serving all facts locally at query time. The agent asks Kanonarion instead of guessing. The answers are deterministic and reproducible.


How it works

walk  →  extract  →  query commands
  1. walk <module@version> - resolves the full transitive dependency graph and persists a WalkRecord to the local SQLite store.
  2. extract [walk-id] - runs the licence, interface and examples stages for every module in the walk. The call graph is opt-in (--stages callgraph) because it can exhaust RAM on a large walk; inspect runs it. Vulnerabilities are vuln-scan's.
  3. Query commands - fast, offline reads from the local store. No network required.

The store lives at ~/.kanonarion by default. All metadata is in a single SQLite database; module ZIPs are content-addressed blobs. Every network fetch is verified against the Go checksum database and, where git is available, cross-checked against the upstream repository. A fetch from a carried-in module cache (--from-modcache, for an air-gapped host) is anchored on your go.sum instead, and the record says so.


Uncertainty is a first-class state

Kanonarion never silently renders uncertainty as certainty.

A vulnerability finding carries one of five reachability states: reachable, not reachable, package level only (the advisory names no symbol, so symbol-level reachability was never determinable), not affected, or withdrawn. Beside the state it carries a soundness value that says how thorough the search behind a negative was - a "not reachable" that rests on the scanner's silence is labelled as that, not as a clean result. A module nobody could scan reads Unscannable, never Clean.

A licence record is Detected, Multiple, Ambiguous, Unclassified, None, PerFile or ExtractionFailed. Licence text that could not be classified is never reported as no licence, and neither is ever rendered as "allowed": an unknown licence blocks by default in the production scope. Where several licences apply, the record says whether they are a choice (A OR B) or separate grants (A AND B), and what that reading was based on.

If kanonarion can't determine something, it says so, and a command that refuses names the command that would produce the missing answer.


Quick start

# Install (puts `kanonarion` on your PATH)
go install code.eitanity.com/kanonarion@latest

# Analyse a single module end to end (walk → extract → vuln-scan → context).
# One module = a result you can read and sanity-check on one screen.
kanonarion inspect github.com/spf13/cobra@v1.8.1

# --- Query the store (offline, no network) ---

# Show a module's public API
kanonarion interface-show github.com/spf13/cobra@v1.8.1

# Find usage examples for a symbol
kanonarion examples-find GenManTree

# List vulnerability scan runs
kanonarion vuln-scan-list

# Check licences
kanonarion license-list

Analyse your own project. Run kanonarion from your project root and it defaults to your go.mod's dependency set:

cd ~/my-project
kanonarion inspect          # same as --gomod ./go.mod (your code-scope deps)
kanonarion audit            # one-line-per-module fetch + licence + vuln report

This walks the full transitive closure, so it can take anywhere from seconds to tens of minutes depending on how many dependencies you have - the vulnerability scan dominates, as govulncheck analyses the project. Narrow or widen the set with --tool / --project; see the CLI reference.

audit, inspect (no argument), and vuln-scan --gomod are project-rooted: they derive each module's vulnerability status from a single scan of your project's real build, so an in-build dependency reads Clean/Affected, never un-analysable merely for a build your project never produces. A single-module inspect <module@version> or vuln-scan --module <module@version> is the coordinate-keyed view: it scans that module in isolation as its own main module, which is the intended "look at it on its own" analysis and is unchanged. (vuln-scan --module resolves the latest walk rooted at that coordinate — a walk that merely contains it as a dependency is a different thing, and is scanned by its walk id.)

A module whose every matched advisory was retracted upstream reads Withdrawn, not Clean, and is reported in its own section with the retraction date. Clean says no advisory ever applied; Withdrawn says one did and was withdrawn.

Drive the pipeline stage by stage. walk, extract, and vuln-scan all key off a walk id, which walk prints:

# Walk a module and its full transitive closure; keep its walk id (needs jq)
WALK_ID=$(kanonarion walk github.com/spf13/cobra@v1.8.1 --json | jq -r '.id')

# Extract the facts for that walk (licences, interfaces, examples).
# Call graphs are opt-in: add --stages callgraph, or let `inspect` run them.
kanonarion extract "$WALK_ID"

# Scan that walk for vulnerabilities (add --reachability to triage by reachability)
kanonarion vuln-scan "$WALK_ID"

Agentic coding workflow

Kanonarion is designed to be called directly from agent tool-use. The recommended pattern in agent guidelines:

Situation Command
User adds or upgrades a dependency walk <module@version> then extract
Onboard a new module end-to-end inspect <module@version> (walk + extract + vuln-scan + context)
Load everything known about a module into the agent's context context <module@version> --json
"What's the API for X?" interface-show <module@version> --json
Inspect a specific type or function interface-show <module@version> --symbol <Name>
Everything about a symbol (signature, docs, examples) symbol-context <Name> --json
"How do I use X?" examples-find <symbol> then examples-show
"Which library should I use for X?" symbol-find <Name>
"Should we adopt this library?" inspect <module@version>, then read fetch (authenticity), provenance, license, latest, vuln-show and capability for it
"Is this advisory reachable from my code?" reachability <module@version> --vuln <id> --gomod ./go.mod
"What can this dependency actually do?" capability <module@version>
"Can I use this commercially?" license <module@version>
"Is my dependency closure licence-compatible?" license-compat <root-module@version> --target-license <SPDX> (the coordinate a stored walk is rooted at; @local for your own project)
Generate a third-party attribution / NOTICE file notice --package ./cmd/<binary>
"What does function F call?" callees '<fully.qualified.Symbol>'
"What calls function F?" / impact analysis callers '<fully.qualified.Symbol>'
"Which types implement this interface?" / port-change scoping implementers '<pkg/path.Interface>'
Scope an answer to production code only add --exclude-tests to any of the three, to context <dir>, or to a go.mod read (context --gomod, latest --gomod) - every go.mod answer states its test scope either way
Make those queries resolve my own project's symbols local <dir>
Dependency upgraded - what changed in the graph? walk-diff <old-id> <new-id>
"What changed in the API between two versions, and do we call any of it?" interface-diff <module@a> <module@b> --used-by ./go.mod
"How does my own code use this dependency?" usage <module@version>
"Did the licence change between two versions?" license-diff <module@a> <module@b>
"Who in my build depends on X?" dependents <module>
"Does this dependency compile a C library into my binary?" native <module@version>, native-list
"When did we first know about this advisory?" store ledger, vuln-scan-history <walk-id>, vuln-scan-diff <run-a> <run-b>
"Was every module actually cross-verified?" verification-coverage <walk-id>
Produce an SBOM for a build sbom <walk-id>
"Is there a newer version of X?" latest <module>
Audit this project's supply-chain hygiene directives / godebug / vendor / fips

All query commands support --json for machine-readable output, making them easy to parse in agent tool implementations.


Key features

  • Offline-first. After the initial walk and extract, all queries are local SQLite reads. No network calls, no rate limits.
  • Deterministic. Pinned versions, checksum-verified ZIPs, sorted JSON output. The same query returns the same result today and a year from now.
  • No SaaS, no phone home. A single binary that runs where you run it. No account, no telemetry, no vendor in the loop.
  • Reachability-aware vulnerability scanning. Integrates govulncheck with optional --reachability filtering. Every finding states whether a path from your entry points to the vulnerable symbol was found, was not found, or was never determinable because the advisory names no symbol for that module path - and says which, so the triage is yours to make on evidence rather than on a severity number.
  • Licence compliance with provenance. Per-module SPDX licence detection with a full transitive summary. Each record states its status, what each licence file covers (the module's code, documentation, a bundled component), and whether several licences are a choice or separate grants. A licence or copyright a person determined by reading upstream is recorded in the config with who decided, when and on what basis, and the attribution document prints it as a human determination, not a detection.
  • Interface extraction. Full public API surface - types, functions, methods, constants - in structured JSON the agent can consume directly, measured in one named build frame (goos/goarch plus cgo) rather than every platform at once.
  • Call graph with a three-valued answer. A call graph across your project and its dependencies, for impact analysis and reachability queries. Every answer says whether an empty result is a measurement (RESOLVED-ABSENT) or an undecided one (UNRESOLVED, naming what blocked it) - so "nothing calls this" is never a guess dressed as a fact. _test.go declarations are in the graph and tagged, because test fakes are most of the edit surface of an interface change; --exclude-tests narrows any query to production code and says so on the answer, empty or not.
  • Interface implementers. implementers lists the concrete types satisfying an interface, including ones that satisfy it only by embedding - the question a port-signature change actually raises, and one a grep for the method name answers wrongly.
  • Usage examples. Example* functions harvested from each module's own test files, so the agent codes against patterns the module's authors wrote and test.
  • Upgrade evidence. interface-diff --used-by compares two versions' public API and joins the result against your own call graph, so a bump is judged on the symbols you call rather than on the whole changelog. usage lists what your code uses from one dependency, with call-site counts. An empty signature diff is reported as exactly that - the behaviour may still have moved - and the output says what would answer it.
  • Native code in a Go binary. A cgo module can compile a whole C library into your binary that no Go advisory database indexes. native records what a module ships or links and names the component where it can; native-list asks the whole store. A module with no native record was not examined, and the output says that rather than implying it is clean.
  • Append-only evidence. Records are sealed with a content hash and never rewritten. A re-scan adds a generation; the earlier one stays readable as what was concluded then. Every record names the pipeline version that produced it; call-graph, interface and vulnerability records also name the Go toolchain, and a call-graph record names the analyser library. store ledger, vuln-scan-history and vuln-scan-diff answer "what did we know, and when".
  • The standard library and the toolchain are in scope. The standard library is a node in the graph with its own chain of custody, and audit checks the Go toolchain itself against its advisories.
  • Air-gapped and vendored builds. walk --from-modcache acquires from a carried-in module cache; vendor reconciles a vendor/ tree against what the manifest resolves, because a vendored tree is the build.
  • Policy gates. Walk-traversal rules in YAML - max depth, whether replace directives and indirect requirements are followed, and which VCS forges may be cross-verified against - validated with policy validate.
  • SBOM generation. CycloneDX 1.6 software bill of materials from any walk, with a full dependency graph and per-component SHA-256/384/512 artefact hashes computed at download. The Go standard library is a first-class component, verified against Go's published source-tarball checksum; --stdlib-from-gomod pins its version to the go.mod directive for reproducible release artifacts.
  • Auditable evidence chain. Every fetch, verification and policy decision is recorded in an append-only audit.jsonl.

Store layout

The default (SQLite) backend's layout:

~/.kanonarion/
  mirror.db          # SQLite - all metadata (walks, interfaces, vulns, licences, …)
  blobs/             # Content-addressed module ZIPs
  sumdb/             # Checksum database client state
  audit.jsonl        # Append-only event log: walks, extractions, scans, SBOMs, custody
  config.yaml        # Optional - preferences, licence policy, recorded determinations

Policy files

Place a .kanonarion/policy.yaml in your project root (Kanonarion searches upward from cwd). Policies control walk traversal - the maximum depth, whether replace directives are followed, and whether indirect requirements are traversed - and the fetch stage's allowed_vcs_hosts, the set of forges a module's repository may be cloned from during cross-verification. Omitting allowed_vcs_hosts keeps the built-in forge set; see policy.

# Validate a single policy file
kanonarion policy validate .kanonarion/policy.yaml

# Validate all policy files in a directory
kanonarion policy validate docs/examples/policies

Example policies are in docs/examples/policies/.


Exit codes

Every command uses the same codes, so a caller can tell "no record yet" from "the evidence is in doubt":

Code Meaning
0 Success
1 Partial - an answer, with a statement of what it missed
2 The work could not complete
4 No record - the message names the command that produces it
5 A policy or publication gate fired on real findings
10 Recorded evidence is in doubt: a failed hash, or two records that disagree
20 Never reached an answer: bad argument, missing toolchain, no store

The full contract, including output channels and listing shape, is in docs/cli/conventions.md.


Observability

Logging defaults to --log-level warn. Long runs narrate on stderr with a throttled progress heartbeat, silenced by --no-progress. --log-level info adds per-module detail; debug adds memory telemetry for troubleshooting large closures.


Documentation


Requirements

Kanonarion is a single binary, but it shells out to a handful of external tools. Have these on PATH:

Tool When it's needed Install
Go 1.27.3+ (an older Go with the default GOTOOLCHAIN=auto downloads it) Install and runtime - kanonarion drives the go toolchain (go list, go mod download, go test -c, go tool nm) to resolve build lists and analyse binaries. go.dev/dl
git Runtime - VCS cross-verification (the fetch stage compares the proxy zip against the upstream source repository). Optional: without git, fetches still verify against the Go checksum database but record an unverified VCS status; pass --skip-vcs-verify to skip explicitly. system package manager
govulncheck Runtime - required by vuln-scan / inspect. The scan fails fast with an actionable error if it's missing. It type-checks source in-process, so the Go release it was built with must be at least the one your project's go directive names; a scan that meets that gap names the tool and the command that rebuilds it. go install golang.org/x/vuln/cmd/govulncheck@latest
jq Optional - only the shell snippets in this README use it to pull a walk id out of --json output. system package manager

Network access is needed for the first run of a given module set only (module downloads, checksum database, VCS cross-verification, vulnerability database snapshot). Every query afterwards is served from the local store at ~/.kanonarion with no network calls. Project-rooted commands (audit, inspect, vuln-scan) serve a stored scan run rather than re-scanning, and name the run they reused; the conditions are in reuse and re-derivation. audit's staleness column asks the module proxy for each module's latest version, but serves a recorded lookup younger than staleness.ttl (default 1h), so a warm run costs nothing outbound. --fresh refreshes the advisory database; --force re-fetches the module set and re-measures.

Building from source

Contributors build from a checkout instead of go install:

make build     # compile binary to ./kanonarion
make test      # run all tests with race detector
make coverage  # generate coverage report
make lint      # go vet, staticcheck, govulncheck, gosec
go tool golangci-lint run ./...   # golangci-lint is separate from make lint

Status

Kanonarion is open source under Apache-2.0 and is in active development. If your organisation is using AI coding tools against Go codebases under regulatory scrutiny - DORA, CRA, NIS2, EU AI Act, the Australian ISM - and you'd like to shape the roadmap, get in touch.

Documentation

Overview

Command kanonarion is the root entry point for the CLI.

It exists so `go install code.eitanity.com/kanonarion@latest` resolves a main package at the module root: `go install <module>@latest` only builds a package whose import path equals the module path. The canonical build target remains ./cmd/kanonarion (used by the Makefile, release workflow, and the --package examples); this file is a thin duplicate of that entry point so the bare module coordinate installs the same binary.

Directories

Path Synopsis
cmd
kanonarion command
internal
adapters/blobcodec
Package blobcodec provides transparent zstd compression for SQLite BLOB columns.
Package blobcodec provides transparent zstd compression for SQLite BLOB columns.
adapters/blobstore/localfs
Package localfs implements ports.BlobStore using the local filesystem.
Package localfs implements ports.BlobStore using the local filesystem.
adapters/blobstore/modcache
Package modcache implements a ports.BlobStore backed by a Go module cache ($GOMODCACHE).
Package modcache implements a ports.BlobStore backed by a Go module cache ($GOMODCACHE).
adapters/childproc
Package childproc spawns child processes that cannot outlive their parent.
Package childproc spawns child processes that cannot outlive their parent.
adapters/clock
Package clock provides ports.Clock implementations for production and tests.
Package clock provides ports.Clock implementations for production and tests.
adapters/factstore/sqlite
Package sqlite implements ports.FactStore using a SQLite database via modernc.org/sqlite (pure Go, no CGO).
Package sqlite implements ports.FactStore using a SQLite database via modernc.org/sqlite (pure Go, no CGO).
adapters/goenv
Package goenv resolves Go environment values the way the go command resolves them, and states the one question every network egress in this tool has to ask before it opens a socket: does this environment forbid the network?
Package goenv resolves Go environment values the way the go command resolves them, and states the one question every network egress in this tool has to ask before it opens a socket: does this environment forbid the network?
adapters/interrupt
Package interrupt tells an operation that stopped because the operator cancelled the run apart from one that failed on its own terms, and counts the former so the run can state the interruption once.
Package interrupt tells an operation that stopped because the operator cancelled the run apart from one that failed on its own terms, and counts the former so the run can state the interruption once.
adapters/meminfo
Package meminfo reads how much memory the host can hand to new work.
Package meminfo reads how much memory the host can hand to new work.
adapters/proxy/direct
Package direct implements ports.ModuleProxy against a Go module proxy (default: proxy.golang.org).
Package direct implements ports.ModuleProxy against a Go module proxy (default: proxy.golang.org).
adapters/proxy/modcache
Package modcache implements ports.ModuleProxy against a local Go module cache ($GOMODCACHE) instead of a network module proxy.
Package modcache implements ports.ModuleProxy against a local Go module cache ($GOMODCACHE) instead of a network module proxy.
adapters/proxy/private
Package private routes each module between the configured module proxy and the module cache: a module the private-module matcher names is never sent to a proxy, and every other module takes the proxy exactly as before.
Package private routes each module between the configured module proxy and the module cache: a module the private-module matcher names is never sent to a proxy, and every other module takes the proxy exactly as before.
adapters/recordseal
Package recordseal tells a record written by an older shape apart from a record that has been altered.
Package recordseal tells a record written by an older shape apart from a record that has been altered.
adapters/signer/noop
Package noop provides the OSS default ports.Signer: an unconfigured signer that yields no attestation.
Package noop provides the OSS default ports.Signer: an unconfigured signer that yields no attestation.
adapters/sumdb/gosum
Package gosum implements ports.SumDBClient using golang.org/x/mod/sumdb.
Package gosum implements ports.SumDBClient using golang.org/x/mod/sumdb.
adapters/sumdb/gosumfile
Package gosumfile implements ports.SumDBClient against a project's local go.sum file instead of the network checksum database (sum.golang.org).
Package gosumfile implements ports.SumDBClient against a project's local go.sum file instead of the network checksum database (sum.golang.org).
adapters/sumdb/retrying
Package retrying decorates a ports.SumDBClient with bounded exponential-backoff retries for transient checksum-database lookup failures.
Package retrying decorates a ports.SumDBClient with bounded exponential-backoff retries for transient checksum-database lookup failures.
adapters/vcs/gitenv
Package gitenv builds the constrained environment and command-line overrides shared by every adapter in this repository that shells out to git.
Package gitenv builds the constrained environment and command-line overrides shared by every adapter in this repository that shells out to git.
adapters/vcs/gitexec
Package gitexec implements ports.VCSClient by shelling out to the git binary.
Package gitexec implements ports.VCSClient by shelling out to the git binary.
adapters/vulndbdir
Package vulndbdir is the shared-kernel adapter for reading an extracted govulncheck advisory database directory — the file:// layout a scan is pointed at — and reporting how many advisories it holds.
Package vulndbdir is the shared-kernel adapter for reading an extracted govulncheck advisory database directory — the file:// layout a scan is pointed at — and reporting how many advisories it holds.
adapters/vulndbindex
Package vulndbindex is the shared-kernel adapter that decodes index/modules.json, the module index an advisory database carries.
Package vulndbindex is the shared-kernel adapter that decodes index/modules.json, the module index an advisory database carries.
adapters/yamlkeys
Package yamlkeys refuses a YAML mapping key that the Go type it decodes into does not name, so a misspelt setting is an error rather than a setting that silently never applies.
Package yamlkeys refuses a YAML mapping key that the Go type it decodes into does not name, so a misspelt setting is an error rather than a setting that silently never applies.
adapters/ziparchive
Package ziparchive is the shared-kernel adapter for reading ZIP archives.
Package ziparchive is the shared-kernel adapter for reading ZIP archives.
audit
Package audit defines the context-neutral audit-event vocabulary.
Package audit defines the context-neutral audit-event vocabulary.
callgraph/adapters/analyser/staticcha
Package staticcha implements ports.CallGraphAnalyser using Class Hierarchy Analysis (CHA) via golang.org/x/tools/go/callgraph/cha.
Package staticcha implements ports.CallGraphAnalyser using Class Hierarchy Analysis (CHA) via golang.org/x/tools/go/callgraph/cha.
callgraph/adapters/analyser/staticcha/tinycgo
Package tinycgo loads a Go closure as TinyGo builds it.
Package tinycgo loads a Go closure as TinyGo builds it.
callgraph/adapters/analyser/staticcha/tinycgo/tinycgotest
Package tinycgotest builds a TinyGo frame for tests without the tinygo command: a fake TINYGOROOT from tinycgo's testdata, and a merged GOROOT that links this toolchain's source beside the fake's packages, as tinygo merges its own.
Package tinycgotest builds a TinyGo frame for tests without the tinygo command: a fake TINYGOROOT from tinycgo's testdata, and a merged GOROOT that links this toolchain's source beside the fake's packages, as tinygo merges its own.
callgraph/adapters/analyser/staticcha/tinylower
Package tinylower names the runtime functions TinyGo's compiler calls for constructs go/ssa represents as instructions or builtins rather than calls: map and channel operations, string operators, append, panics, bounds checks, heap allocation and the rest.
Package tinylower names the runtime functions TinyGo's compiler calls for constructs go/ssa represents as instructions or builtins rather than calls: map and channel operations, string operators, append, panics, bounds checks, heap allocation and the rest.
callgraph/adapters/modulecache
Package modulecache materialises the module cache an isolated call-graph analysis reads, from the bytes kanonarion's own store holds.
Package modulecache materialises the module cache an isolated call-graph analysis reads, from the bytes kanonarion's own store holds.
callgraph/adapters/store/sqlite
Package sqlite implements ports.CallGraphStore using a SQLite database via modernc.org/sqlite (pure Go, no CGO).
Package sqlite implements ports.CallGraphStore using a SQLite database via modernc.org/sqlite (pure Go, no CGO).
callgraph/application
Package application contains the callgraph use cases.
Package application contains the callgraph use cases.
callgraph/domain
Package domain defines the types and invariants for call graph extraction.
Package domain defines the types and invariants for call graph extraction.
callgraph/ports
Package ports defines the interfaces the callgraph application layer requires from the outside world.
Package ports defines the interfaces the callgraph application layer requires from the outside world.
canonicalshape
Package canonicalshape pins the exact bytes a record domain seals over.
Package canonicalshape pins the exact bytes a record domain seals over.
capability/application
Package application wires the capability domain analysis to a source of stored call graph records.
Package application wires the capability domain analysis to a source of stored call graph records.
capability/domain
Package domain implements capability (permission) analysis over a Go module's static call graph.
Package domain implements capability (permission) analysis over a Go module's static call graph.
cli
cli/testfakes
Package testfakes provides in-memory fakes for all CLI use-case interfaces.
Package testfakes provides in-memory fakes for all CLI use-case interfaces.
composition
Package composition is the neutral composition root shared by the CLI and the public façade (pkg/kanonarion).
Package composition is the neutral composition root shared by the CLI and the public façade (pkg/kanonarion).
composition/cgchild
Package cgchild runs the call-graph child: the process extraction and reachability start, from the running executable, to analyse one module's call graph and write it to the store.
Package cgchild runs the call-graph child: the process extraction and reachability start, from the running executable, to analyse one module's call graph and write it to the store.
composition/storage
Package storage is the single value through which the composition roots reach everything the pipeline persists: every record store, the blob store, the audit sink, the attestation store and the signer.
Package storage is the single value through which the composition roots reach everything the pipeline persists: every record store, the blob store, the audit sink, the attestation store and the signer.
composition/storage/sqlite
Package sqlite is the SQLite and local-filesystem storage backend: mirror.db for every record store, a content-addressed blob directory, and audit.jsonl, all under one store root.
Package sqlite is the SQLite and local-filesystem storage backend: mirror.db for every record store, a content-addressed blob directory, and audit.jsonl, all under one store root.
config
Package config provides the ConfigSpec registration mechanism used by modules to declare their configuration schema and built-in defaults.
Package config provides the ConfigSpec registration mechanism used by modules to declare their configuration schema and built-in defaults.
config/adapters/store/yaml
Package yaml implements ConfigStore by reading a YAML config file from disk.
Package yaml implements ConfigStore by reading a YAML config file from disk.
config/domain
Package domain contains the core types for the config bounded context.
Package domain contains the core types for the config bounded context.
config/ports
Package ports defines the interfaces the config bounded context exposes.
Package ports defines the interfaces the config bounded context exposes.
coordinate
Package coordinate is a Shared Kernel: it holds ModuleCoordinate, the one value object with genuine cross-context fan-out (module identity — path and version).
Package coordinate is a Shared Kernel: it holds ModuleCoordinate, the one value object with genuine cross-context fan-out (module identity — path and version).
coordinate/coordinatetest
Package coordinatetest builds module coordinates for tests.
Package coordinatetest builds module coordinates for tests.
directive/adapters/parser/xmod
Package xmod implements ports.DirectiveParser using golang.org/x/mod/modfile.
Package xmod implements ports.DirectiveParser using golang.org/x/mod/modfile.
directive/adapters/store/sqlite
Package sqlite implements ports.DirectiveStore using the shared SQLite database.
Package sqlite implements ports.DirectiveStore using the shared SQLite database.
directive/application
Package application orchestrates directive detection: load via ports, delegate classification to the domain, evaluate governance via the config policy, persist the record and emit audit facts.
Package application orchestrates directive detection: load via ports, delegate classification to the domain, evaluate governance via the config policy, persist the record and emit audit facts.
directive/domain
Package domain holds the pure business rules for the directive bounded context: detection, risk classification and deterministic ordering of go.mod / go.work `replace` and `exclude` directives.
Package domain holds the pure business rules for the directive bounded context: detection, risk classification and deterministic ordering of go.mod / go.work `replace` and `exclude` directives.
directive/ports
Package ports declares the interfaces the directive application depends on.
Package ports declares the interfaces the directive application depends on.
driver
Package driver holds the narrow write/serving driver use cases the public façade graduates: composition-root entrypoints that orchestrate existing per-context use cases into a single high-level operation, without exposing the bulk pipeline.
Package driver holds the narrow write/serving driver use cases the public façade graduates: composition-root entrypoints that orchestrate existing per-context use cases into a single high-level operation, without exposing the bulk pipeline.
example/adapters/parser/goast
Package goast implements ports.ExampleParser using go/parser, go/ast and go/format over the _test.go entries of a module zip.
Package goast implements ports.ExampleParser using go/parser, go/ast and go/format over the _test.go entries of a module zip.
example/adapters/store/sqlite
Package sqlite implements ports.ExampleStore using a SQLite database via modernc.org/sqlite (pure Go, no CGO).
Package sqlite implements ports.ExampleStore using a SQLite database via modernc.org/sqlite (pure Go, no CGO).
example/application
Package application contains the example-function harvesting use case: reading a module's zip from the blob store, scanning _test.go files for Example* functions, extracting their bodies and output comments via the Go AST, and persisting an ExampleRecord.
Package application contains the example-function harvesting use case: reading a module's zip from the blob store, scanning _test.go files for Example* functions, extracting their bodies and output comments via the Go AST, and persisting an ExampleRecord.
example/domain
Package domain defines the types and invariants for example-function harvesting.
Package domain defines the types and invariants for example-function harvesting.
example/ports
Package ports defines the interfaces the example application layer requires from the outside world.
Package ports defines the interfaces the example application layer requires from the outside world.
exitcode
Package exitcode is the process exit-code taxonomy and the classification of an error onto it, shared by the kanonarion binary and the call-graph child an importing application serves, so the two exit alike.
Package exitcode is the process exit-code taxonomy and the classification of an error onto it, shared by the kanonarion binary and the call-graph child an importing application serves, so the two exit alike.
extract/adapters/extractor/local
Package local implements ports.Extractor by routing each named stage to its corresponding local use case.
Package local implements ports.Extractor by routing each named stage to its corresponding local use case.
extract/adapters/stages/local
Package local implements ports.StageRegistry with the built-in extraction stages (license, interface, callgraph, example) in canonical execution order.
Package local implements ports.StageRegistry with the built-in extraction stages (license, interface, callgraph, example) in canonical execution order.
extract/adapters/store/sqlite
Package sqlite implements ports.ExtractionStore on SQLite.
Package sqlite implements ports.ExtractionStore on SQLite.
extract/application
Package application contains the extraction orchestration use case.
Package application contains the extraction orchestration use case.
extract/domain
Package domain defines the types and invariants for a coordinated extraction operation.
Package domain defines the types and invariants for a coordinated extraction operation.
extract/ports
Package ports defines the interfaces the extract application layer requires from the outside world.
Package ports defines the interfaces the extract application layer requires from the outside world.
failurecause
Package failurecause names what a failed or incomplete measurement is a statement about: the thing under analysis, or the run that tried to analyse it.
Package failurecause names what a failed or incomplete measurement is a statement about: the thing under analysis, or the run that tried to analyse it.
fetch/application
Package application contains the fetch use cases.
Package application contains the fetch use cases.
fetch/domain
Package domain contains the core model for the fetch bounded context.
Package domain contains the core model for the fetch bounded context.
fetch/fetchtest
Package fetchtest builds fetch fact records for tests.
Package fetchtest builds fetch fact records for tests.
fetch/ports
Package ports defines the interfaces the fetch application layer requires from the outside world.
Package ports defines the interfaces the fetch application layer requires from the outside world.
fips/adapters/scanner/gosrc
Package gosrc implements ports.FIPSScanner by reading a project's go.mod toolchain directive and walking its source tree for FIPS-relevant import paths.
Package gosrc implements ports.FIPSScanner by reading a project's go.mod toolchain directive and walking its source tree for FIPS-relevant import paths.
fips/adapters/store/sqlite
Package sqlite implements ports.FIPSStore using the shared SQLite database.
Package sqlite implements ports.FIPSStore using the shared SQLite database.
fips/adapters/vendortree
Package vendortree adapts the vendor bounded context's scanner onto the fips context's VendoredModuleLister port, so a finding in a vendored file can name the module that published it without the fips context learning how modules.txt is read.
Package vendortree adapts the vendor bounded context's scanner onto the fips context's VendoredModuleLister port, so a finding in a vendored file can name the module that published it without the fips context learning how modules.txt is read.
fips/application
Package application orchestrates FIPS assessment: load via ports, delegate classification to the domain catalogue, evaluate governance via the config policy, persist the record and emit audit facts.
Package application orchestrates FIPS assessment: load via ports, delegate classification to the domain catalogue, evaluate governance via the config policy, persist the record and emit audit facts.
fips/domain
Package domain holds the pure business rules for the fips bounded context assessment modelling, toolchain & algorithm catalogues, and the deterministic ordering of FIPS findings.
Package domain holds the pure business rules for the fips bounded context assessment modelling, toolchain & algorithm catalogues, and the deterministic ordering of FIPS findings.
fips/ports
Package ports declares the interfaces the fips application depends on.
Package ports declares the interfaces the fips application depends on.
godebug/adapters/scanner/gosrc
Package gosrc implements ports.GoDebugScanner by scanning a project's Go source tree for `//go:debug name=value` directives.
Package gosrc implements ports.GoDebugScanner by scanning a project's Go source tree for `//go:debug name=value` directives.
godebug/adapters/store/sqlite
Package sqlite implements ports.GoDebugStore using the shared SQLite database.
Package sqlite implements ports.GoDebugStore using the shared SQLite database.
godebug/adapters/vendortree
Package vendortree adapts the vendor bounded context's scanner onto the godebug context's VendoredModuleLister port, so a directive found in a vendored file can name the module that published it without the godebug context learning how modules.txt is read.
Package vendortree adapts the vendor bounded context's scanner onto the godebug context's VendoredModuleLister port, so a directive found in a vendored file can name the module that published it without the godebug context learning how modules.txt is read.
godebug/application
Package application orchestrates godebug detection: load via ports, delegate classification to the domain taxonomy, evaluate governance via the config policy, persist the record and emit audit facts.
Package application orchestrates godebug detection: load via ports, delegate classification to the domain taxonomy, evaluate governance via the config policy, persist the record and emit audit facts.
godebug/domain
Package domain holds the pure business rules for the godebug bounded context: detection-result modelling, versioned taxonomy classification and deterministic ordering of GODEBUG / //go:debug settings.
Package domain holds the pure business rules for the godebug bounded context: detection-result modelling, versioned taxonomy classification and deterministic ordering of GODEBUG / //go:debug settings.
godebug/ports
Package ports declares the interfaces the godebug application depends on.
Package ports declares the interfaces the godebug application depends on.
gotoolchain
Package gotoolchain names the Go toolchain that produced a stored record.
Package gotoolchain names the Go toolchain that produced a stored record.
iface/adapters/extractor/godoc
Package godoc implements ports.InterfaceExtractor using go/parser and go/doc.
Package godoc implements ports.InterfaceExtractor using go/parser and go/doc.
iface/adapters/spelling/goast
Package goast reads Go declaration TEXT.
Package goast reads Go declaration TEXT.
iface/adapters/store/sqlite
Package sqlite implements ports.InterfaceStore using a SQLite database via modernc.org/sqlite (pure Go, no CGO).
Package sqlite implements ports.InterfaceStore using a SQLite database via modernc.org/sqlite (pure Go, no CGO).
iface/application
Package application contains the ExtractInterfaceUseCase, which orchestrates blob retrieval, interface extraction, hashing, and persistence for a single module coordinate.
Package application contains the ExtractInterfaceUseCase, which orchestrates blob retrieval, interface extraction, hashing, and persistence for a single module coordinate.
iface/domain
Package domain defines the types and invariants for public interface extraction.
Package domain defines the types and invariants for public interface extraction.
iface/ports
Package ports defines the interfaces the iface application layer requires from the outside world.
Package ports defines the interfaces the iface application layer requires from the outside world.
license/adapters/detector/licensecheck
Package licensecheck wraps github.com/google/licensecheck as a ports.LicenseDetector.
Package licensecheck wraps github.com/google/licensecheck as a ports.LicenseDetector.
license/adapters/overrides/yaml
Package yaml implements license/ports.LicenseOverrideStore over the license_overrides section of config.yaml.
Package yaml implements license/ports.LicenseOverrideStore over the license_overrides section of config.yaml.
license/adapters/snippetscan
Package snippetscan walks a module's first-party Go source for SPDX snippet blocks marking third-party code transcribed into it.
Package snippetscan walks a module's first-party Go source for SPDX snippet blocks marking third-party code transcribed into it.
license/adapters/store/sqlite
Package sqlite implements ports.LicenseStore using a SQLite database via modernc.org/sqlite (pure Go, no CGO).
Package sqlite implements ports.LicenseStore using a SQLite database via modernc.org/sqlite (pure Go, no CGO).
license/application
Package application contains the license extraction use case: reading a module's zip from the blob store, scanning it for license files, classifying each with the configured detector, and persisting a LicenceRecord.
Package application contains the license extraction use case: reading a module's zip from the blob store, scanning it for license files, classifying each with the configured detector, and persisting a LicenceRecord.
license/domain
Package domain defines the license bounded context's core model: the per-module license extraction record produced by scanning module zips for license files, classifying each against known SPDX identifiers, and deriving a primary license determination.
Package domain defines the license bounded context's core model: the per-module license extraction record produced by scanning module zips for license files, classifying each against known SPDX identifiers, and deriving a primary license determination.
license/ports
Package ports defines the interfaces the license application layer requires from the outside world.
Package ports defines the interfaces the license application layer requires from the outside world.
local/adapters/dependencies/store
Package store provides a DependencyLoader adapter backed by the global callgraph store.
Package store provides a DependencyLoader adapter backed by the global callgraph store.
local/adapters/importer/golist
Package golist implements ports.ImportAnalyser by running go list -json -deps against the workspace directory and grouping imported packages by module.
Package golist implements ports.ImportAnalyser by running go list -json -deps against the workspace directory and grouping imported packages by module.
local/adapters/probe/builder
Package builder implements ports.SymbolTableProber.
Package builder implements ports.SymbolTableProber.
local/adapters/snapshot/walkdir
Package walkdir provides an fs.WalkDir-based SnapshotBuilder.
Package walkdir provides an fs.WalkDir-based SnapshotBuilder.
local/adapters/symbols/gopackages
Package gopackages implements ports.SymbolAnalyser using go/packages type-checking to identify which exported symbols from dependency packages are referenced by the local workspace (~2-5s).
Package gopackages implements ports.SymbolAnalyser using go/packages type-checking to identify which exported symbols from dependency packages are referenced by the local workspace (~2-5s).
local/adapters/vulnfindings/store
Package store provides a VulnFindingLoader adapter backed by the global vulnerability store.
Package store provides a VulnFindingLoader adapter backed by the global vulnerability store.
local/application
Package application orchestrates local workspace analysis.
Package application orchestrates local workspace analysis.
local/domain
Package domain defines the Snapshot type — a frozen, deterministic map of Go workspace files used as the shared foundation for local workspace analysis.
Package domain defines the Snapshot type — a frozen, deterministic map of Go workspace files used as the shared foundation for local workspace analysis.
local/localtest
Package localtest fabricates the one host condition the local analysis adapters cannot otherwise be tested against: an installed Go toolchain older than the tree being analysed, with a newer one already unpacked somewhere the analysis is allowed to reach.
Package localtest fabricates the one host condition the local analysis adapters cannot otherwise be tested against: an installed Go toolchain older than the tree being analysed, with a newer one already unpacked somewhere the analysis is allowed to reach.
local/ports
Package ports defines the interfaces for local workspace analysis.
Package ports defines the interfaces for local workspace analysis.
native/adapters/gosource
Package gosource implements the native context's GoSourceReader port over go/parser.
Package gosource implements the native context's GoSourceReader port over go/parser.
native/adapters/store/sqlite
Package sqlite implements ports.NativeStore using the shared SQLite database.
Package sqlite implements ports.NativeStore using the shared SQLite database.
native/application
Package application orchestrates the embedded-native-component measurement: read the module's verified zip through the blob port, decide which files the Go build compiles as native code, hand them to the domain for identification, and persist the record.
Package application orchestrates the embedded-native-component measurement: read the module's verified zip through the blob port, decide which files the Go build compiles as native code, hand them to the domain for identification, and persist the record.
native/domain
Package domain holds the pure rules for the embedded-native-component context: which files inside a module artefact the Go build compiles as native code, which third-party library those files are, and the canonical ordering and content hash of the resulting record.
Package domain holds the pure rules for the embedded-native-component context: which files inside a module artefact the Go build compiles as native code, which third-party library those files are, and the canonical ordering and content hash of the resulting record.
native/ports
Package ports declares the interfaces the native application layer requires from the outside world.
Package ports declares the interfaces the native application layer requires from the outside world.
recordstamp
Package recordstamp holds the one shape a record's timestamp takes, so that a log line and a stored record can be laid beside each other.
Package recordstamp holds the one shape a record's timestamp takes, so that a log line and a stored record can be laid beside each other.
sbom/adapters/generator/cyclonedx
Package cyclonedx implements ports.SBOMGenerator producing CycloneDX 1.6 JSON.
Package cyclonedx implements ports.SBOMGenerator producing CycloneDX 1.6 JSON.
sbom/adapters/nativefacts
Package nativefacts reads a module's stored native-component measurement so an SBOM can list the C library a cgo module compiles into the binary from source its own published zip ships.
Package nativefacts reads a module's stored native-component measurement so an SBOM can list the C library a cgo module compiles into the binary from source its own published zip ships.
sbom/adapters/origin/fetchfacts
Package fetchfacts reads a module's recorded origin from the fetch ledger so an SBOM can carry references to where the bytes actually came from instead of URLs assembled from the module path.
Package fetchfacts reads a module's recorded origin from the fetch ledger so an SBOM can carry references to where the bytes actually came from instead of URLs assembled from the module path.
sbom/adapters/store/sqlite
Package sqlite implements ports.SBOMStore using a SQLite database.
Package sqlite implements ports.SBOMStore using a SQLite database.
sbom/adapters/vendortree
Package vendortree adapts the vendor bounded context's scanner onto the SBOM context's VendorTreeReader port, so an SBOM can state its coverage of the vendored tree without the SBOM context learning how modules.txt is read.
Package vendortree adapts the vendor bounded context's scanner onto the SBOM context's VendorTreeReader port, so an SBOM can state its coverage of the vendored tree without the SBOM context learning how modules.txt is read.
sbom/application
Package application contains the SBOM use cases.
Package application contains the SBOM use cases.
sbom/domain
Package domain defines the types and policy for Software Bill of Materials generation.
Package domain defines the types and policy for Software Bill of Materials generation.
sbom/ports
Package ports defines the interfaces the sbom application layer requires from the outside world.
Package ports defines the interfaces the sbom application layer requires from the outside world.
staleness/adapters/golist
Package golist answers the staleness context's latest-version question for a whole set of modules in one call, by asking the go command.
Package golist answers the staleness context's latest-version question for a whole set of modules in one call, by asking the go command.
staleness/adapters/proxy
Package proxy adapts the module-proxy client to the staleness context's LatestResolver port.
Package proxy adapts the module-proxy client to the staleness context's LatestResolver port.
staleness/adapters/proxy/retrying
Package retrying decorates a staleness ports.LatestResolver so a lookup the proxy has not finished is asked again until it answers or its window closes.
Package retrying decorates a staleness ports.LatestResolver so a lookup the proxy has not finished is asked again until it answers or its window closes.
staleness/adapters/store/sqlite
Package sqlite implements ports.Ledger using the shared SQLite database.
Package sqlite implements ports.Ledger using the shared SQLite database.
staleness/application
Package application resolves a module's staleness through the ledger.
Package application resolves a module's staleness through the ledger.
staleness/domain
Package domain holds the staleness bounded context: what "how far behind is this dependency" means, and the module-path arithmetic that answering it honestly requires.
Package domain holds the staleness bounded context: what "how far behind is this dependency" means, and the module-path arithmetic that answering it honestly requires.
staleness/ports
Package ports declares the staleness context's driven interfaces.
Package ports declares the staleness context's driven interfaces.
stdlib/adapters/gitlsremote
Package gitlsremote implements ports.CommitResolver by running `git ls-remote` against the Go source repository to resolve a release tag to its commit — the VCS-anchor half of the standard-library chain of custody.
Package gitlsremote implements ports.CommitResolver by running `git ls-remote` against the Go source repository to resolve a release tag to its commit — the VCS-anchor half of the standard-library chain of custody.
stdlib/adapters/godev
Package godev implements the go.dev/dl-backed ports: the release manifest client and the source-tarball downloader.
Package godev implements the go.dev/dl-backed ports: the release manifest client and the source-tarball downloader.
stdlib/adapters/licenseident
Package licenseident adapts the licence-extraction stage's detector to the standard-library ports.LicenseIdentifier, so the stdlib licence is classified by the same corpus every module licence is, rather than asserted.
Package licenseident adapts the licence-extraction stage's detector to the standard-library ports.LicenseIdentifier, so the stdlib licence is classified by the same corpus every module licence is, rather than asserted.
stdlib/adapters/localsource
Package localsource implements ports.LocalSourceReader over the local Go toolchain's install tree: it exposes $GOROOT/src as an fs.FS for digesting and reads $GOROOT/LICENSE for classification.
Package localsource implements ports.LocalSourceReader over the local Go toolchain's install tree: it exposes $GOROOT/src as an fs.FS for digesting and reads $GOROOT/LICENSE for classification.
stdlib/adapters/store/sqlite
Package sqlite implements ports.Store for standard-library facts using the shared mirror.db via modernc.org/sqlite (pure Go, no CGO).
Package sqlite implements ports.Store for standard-library facts using the shared mirror.db via modernc.org/sqlite (pure Go, no CGO).
stdlib/adapters/toolchainenv
Package toolchainenv implements ports.ToolchainInspector by probing the local Go toolchain with `go env GOROOT GOVERSION`.
Package toolchainenv implements ports.ToolchainInspector by probing the local Go toolchain with `go env GOROOT GOVERSION`.
stdlib/adapters/walkbridge
Package walkbridge adapts the standard-library acquisition use-case to the walk stage's StdlibAcquirer port.
Package walkbridge adapts the standard-library acquisition use-case to the walk stage's StdlibAcquirer port.
stdlib/application
Package application holds the standard-library chain-of-custody use-case: it acquires the canonical source tarball, verifies its integrity against Go's published checksum, records the VCS anchor, computes the artefact digests, extracts the licence, and caches the derived facts by Go version.
Package application holds the standard-library chain-of-custody use-case: it acquires the canonical source tarball, verifies its integrity against Go's published checksum, records the VCS anchor, computes the artefact digests, extracts the licence, and caches the derived facts by Go version.
stdlib/domain
Package domain holds the standard-library chain-of-custody value objects.
Package domain holds the standard-library chain-of-custody value objects.
stdlib/ports
Package ports declares the boundaries the standard-library acquisition use-case drives: the go.dev/dl release manifest and tarball, the googlesource commit anchor, licence identification, and the fact cache.
Package ports declares the boundaries the standard-library acquisition use-case drives: the go.dev/dl release manifest and tarball, the googlesource commit anchor, licence identification, and the fact cache.
tinygo/adapters/github
Package github reads TinyGo's releases from GitHub: the asset listing with its published digests, and the release archive, measured as it streams in.
Package github reads TinyGo's releases from GitHub: the asset listing with its published digests, and the release archive, measured as it streams in.
tinygo/adapters/store/sqlite
Package sqlite keeps TinyGo release measurements in the shared mirror.db.
Package sqlite keeps TinyGo release measurements in the shared mirror.db.
tinygo/adapters/walkbridge
Package walkbridge adapts the TinyGo release acquirer to the walk stage's TinyGoReleaseAcquirer port, so the walk tree does not import this context.
Package walkbridge adapts the TinyGo release acquirer to the walk stage's TinyGoReleaseAcquirer port, so the walk tree does not import this context.
tinygo/application
Package application measures a TinyGo release archive against the digest GitHub publishes for it, serving a held measurement when there is one.
Package application measures a TinyGo release archive against the digest GitHub publishes for it, serving a held measurement when there is one.
tinygo/domain
Package domain holds the TinyGo release-archive measurement: which archive GitHub publishes for a TinyGo release and host platform, whether the bytes downloaded match the digest published for it, and the SHA-256 of every file under the archive's src directory.
Package domain holds the TinyGo release-archive measurement: which archive GitHub publishes for a TinyGo release and host platform, whether the bytes downloaded match the digest published for it, and the SHA-256 of every file under the archive's src directory.
tinygo/ports
Package ports declares the boundaries the TinyGo release measurement drives: GitHub's release listing, the archive download, the measurement store and the clock.
Package ports declares the boundaries the TinyGo release measurement drives: GitHub's release listing, the archive download, the measurement store and the clock.
vendortree/adapters/scanner/localfs
Package localfs implements ports.VendorScanner against the local filesystem.
Package localfs implements ports.VendorScanner against the local filesystem.
vendortree/adapters/store/sqlite
Package sqlite implements ports.VendorStore using the shared SQLite database.
Package sqlite implements ports.VendorStore using the shared SQLite database.
vendortree/adapters/zipsource/blobstore
Package blobstore implements ports.VerifiedModuleZipSource over the content-addressed blob store the fetch pipeline writes.
Package blobstore implements ports.VerifiedModuleZipSource over the content-addressed blob store the fetch pipeline writes.
vendortree/application
Package application orchestrates vendored-closure reconciliation: load via the scanner port, delegate finding aggregation to the domain, evaluate governance via the config policy, persist the record and emit an audit fact.
Package application orchestrates vendored-closure reconciliation: load via the scanner port, delegate finding aggregation to the domain, evaluate governance via the config policy, persist the record and emit an audit fact.
vendortree/domain
Package domain holds the pure business rules for the vendor bounded context reconciling a project's vendor/ tree, vendor/modules.txt, go.mod require set and go.sum into a classified set of findings (drift / inconsistency / unverified) plus a deterministic record.
Package domain holds the pure business rules for the vendor bounded context reconciling a project's vendor/ tree, vendor/modules.txt, go.mod require set and go.sum into a classified set of findings (drift / inconsistency / unverified) plus a deterministic record.
vendortree/ports
Package ports declares the interfaces the vendor application depends on.
Package ports declares the interfaces the vendor application depends on.
versionorder
Package versionorder holds the two version comparisons this codebase makes, so that neither is spelled as a string idiom again.
Package versionorder holds the two version comparisons this codebase makes, so that neither is spelled as a string idiom again.
vuln/adapters/fetch
Package fetch adapts the fetch context's FetchModuleUseCase to the vuln context's ports.ModuleFetcher.
Package fetch adapts the fetch context's FetchModuleUseCase to the vuln context's ports.ModuleFetcher.
vuln/adapters/reachability
Package reachability implements ports.ReachabilityAnalyser using static call-graph analysis.
Package reachability implements ports.ReachabilityAnalyser using static call-graph analysis.
vuln/adapters/rootclass
Package rootclass classifies the root of a stored reachability route against the call graph the answer was computed over.
Package rootclass classifies the root of a stored reachability route against the call graph the answer was computed over.
vuln/adapters/store/sqlite
Package sqlite implements ports.VulnerabilityStore on SQLite.
Package sqlite implements ports.VulnerabilityStore on SQLite.
vuln/adapters/vendorclosure/vendortree
Package vendortree satisfies the vuln stage's VendoredClosureReader port from the vendor bounded context's filesystem scanner.
Package vendortree satisfies the vuln stage's VendoredClosureReader port from the vendor bounded context's filesystem scanner.
vuln/adapters/vuln/govulncheck
Package govulncheck implements ports.VulnerabilityScanner by driving the external govulncheck binary.
Package govulncheck implements ports.VulnerabilityScanner by driving the external govulncheck binary.
vuln/adapters/vulndb/osv
Package osv implements ports.VulnerabilityDatabase against the Go vulnerability database at vuln.go.dev.
Package osv implements ports.VulnerabilityDatabase against the Go vulnerability database at vuln.go.dev.
vuln/application
Package application orchestrates vulnerability scanning use cases.
Package application orchestrates vulnerability scanning use cases.
vuln/domain
Package domain defines the types and invariants for vulnerability scanning.
Package domain defines the types and invariants for vulnerability scanning.
vuln/ports
Package ports defines the interfaces the vuln application layer requires from the outside world.
Package ports defines the interfaces the vuln application layer requires from the outside world.
vuln/vulntest
Package vulntest builds vulnerability-database snapshots for tests.
Package vulntest builds vulnerability-database snapshots for tests.
walk/adapters/buildlist/gotoolchain
Package gotoolchain implements ports.BuildListResolver by delegating build-list computation to the Go toolchain.
Package gotoolchain implements ports.BuildListResolver by delegating build-list computation to the Go toolchain.
walk/adapters/buildlist/tinygo
Package tinygo asks the tinygo command what a TinyGo target means: its platform, build tags and the GOROOT it builds with.
Package tinygo asks the tinygo command what a TinyGo target means: its platform, build tags and the GOROOT it builds with.
walk/adapters/buildlist/tinygotest
Package tinygotest installs a fake tinygo command for tests: a script that answers `version`, `info -json -target=<t>`, `list -target=<t> -json runtime` and `env TINYGOROOT` from fixtures, exits 1 for any other target, and logs every call.
Package tinygotest installs a fake tinygo command for tests: a script that answers `version`, `info -json -target=<t>`, `list -target=<t> -json runtime` and `env TINYGOROOT` from fixtures, exits 1 for any other target, and logs every call.
walk/adapters/fetcher/local
Package local provides a ModuleFetcher adapter backed by the local FetchModuleUseCase.
Package local provides a ModuleFetcher adapter backed by the local FetchModuleUseCase.
walk/adapters/fetcher/retrying
Package retrying decorates a walkports.ModuleFetcher with bounded exponential-backoff retries for transient network failures.
Package retrying decorates a walkports.ModuleFetcher with bounded exponential-backoff retries for transient network failures.
walk/adapters/gomod/xmod
Package xmod implements the GoModParser port using golang.org/x/mod/modfile.
Package xmod implements the GoModParser port using golang.org/x/mod/modfile.
walk/adapters/localfs
Package localfs provides a walk adapter that implements walkports.LocalModuleFetcher by creating FactRecords from local filesystem source trees instead of fetching from a module proxy.
Package localfs provides a walk adapter that implements walkports.LocalModuleFetcher by creating FactRecords from local filesystem source trees instead of fetching from a module proxy.
walk/adapters/policy/localfile
Package localfile implements PolicyStore by reading a YAML policy file from disk.
Package localfile implements PolicyStore by reading a YAML policy file from disk.
walk/adapters/walks/sqlite
Package sqlite implements ports.WalkStore using a SQLite database via modernc.org/sqlite (pure Go, no CGO).
Package sqlite implements ports.WalkStore using a SQLite database via modernc.org/sqlite (pure Go, no CGO).
walk/application
Package application implements the GraphResolver: a service that takes a target module coordinate and produces a complete, deterministic dependency Graph representing the transitive closure under Go's minimum version selection (MVS).
Package application implements the GraphResolver: a service that takes a target module coordinate and produces a complete, deterministic dependency Graph representing the transitive closure under Go's minimum version selection (MVS).
walk/domain
Package domain defines the walk bounded context's core model: the dependency graph produced by resolving a target module's complete transitive closure under Go's minimum version selection (MVS), and the WalkRecord aggregate root that persists a completed walk as a tamper-evident fact.
Package domain defines the walk bounded context's core model: the dependency graph produced by resolving a target module's complete transitive closure under Go's minimum version selection (MVS), and the WalkRecord aggregate root that persists a completed walk as a tamper-evident fact.
walk/ports
Package ports defines the interfaces the walk application layer requires from the outside world.
Package ports defines the interfaces the walk application layer requires from the outside world.
wireshape
Package wireshape enumerates the collections a record domain seals over.
Package wireshape enumerates the collections a record domain seals over.
pkg
kanonarion
Package kanonarion is the public API façade for the kanonarion module.
Package kanonarion is the public API façade for the kanonarion module.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL