Skip to content

Releases: Lockyc/mycelium

v0.8.0

Choose a tag to compare

@Lockyc Lockyc released this 11 Oct 06:06
  • feat(scan): a broken sidecar becomes an invalid-sidecar finding, not a failed scan
  • refactor: use slices.Contains and strings.TrimRight over hand-rolled helpers
  • docs(comments): state the rule, not the history behind it
  • feat: validate lints kind/status; audit reports unknown edge types
  • fix(release): refuse to release from anywhere but dev
  • fix(query): reject extra positional arguments instead of dropping them
  • fix(scan): skip an unreadable subdirectory instead of aborting the scan
  • fix(demo): always build myco fresh into the temp workspace
  • fix(hub): a fresh hub starts before the first push
  • fix(hub): stamp docGraph.url only on a component whose payload is served
  • fix(transport): bound node push and hub query with HTTP timeouts
  • fix(hub): write graph.json, MAP.md and repos/ atomically
  • feat(audit): report a duplicate-name finding when two entries share a name
  • fix(graph): CanonicalID drops the port and strips .git after the slash
  • fix(graph): Used by follows use edges that target a capability
  • docs(claude): drop the v0.5.0 map-size and fill-rate measurements
  • docs(examples): the demo's audit reports an orphan by design
  • docs(schema): list nodes among graph.json's top-level keys
  • docs(readme): scan records the commit at the scanned ref, not tags
  • docs(claude): /q/* has no auth gate; reads are gated by the deployment
  • fix(release): advance main with ff-only fetches, so a clone without a local main releases

Full Changelog: v0.7.2...v0.8.0

v0.7.2

Choose a tag to compare

@Lockyc Lockyc released this 09 Oct 09:52
  • docs: myco query flags go anywhere; list every components filter
  • docs: add the deferred-work register (docs/FOLLOWUPS.md), wired from CLAUDE.md
  • chore(deps): bump the actions group with 2 updates (#1)
  • chore(meta): curate GitHub topics
  • chore(meta): clarify repo summary / GitHub description
  • chore(deps): bump github.com/pelletier/go-toml/v2 in the gomod group

v0.7.1

Choose a tag to compare

@Lockyc Lockyc released this 19 Jul 03:52

myco query is now the frictionless first-class way to explore the graph, and
the docs are reframed to match. Non-breaking.

myco query — first-class, no jq, no schema knowledge

  • Default hub via $MYCELIUM_HUB. --url now defaults to $MYCELIUM_HUB, so
    myco query <name> needs no flag — set the env var once and query the live graph
    directly. An explicit --dir still selects a local artifact over the ambient hub.
  • Flags work in any position. myco query used-by config-core --url <hub> no
    longer silently drops the trailing flag — the CLI loop-parses so flags and the
    positional can interleave.
  • A real error when no source is configured. No --url, no $MYCELIUM_HUB, and no
    local graph.json now yields "no graph source: set $MYCELIUM_HUB … or pass
    --url/--dir"
    instead of a cryptic open graph.json: no such file.

Docs reframed to the real hierarchy

MAP.md (its generated preamble), README, and schema/graph.md now lead with the
same model: read MAP.md to orient → query with myco query (first-class, no need
to know the JSON shape) → hand-written jq over the raw graph.json for
specific/programmatic cases only → /q/* over URL is a bonus
for when the binary
isn't around.

Full Changelog: v0.7.0...v0.7.1

v0.7.0

Choose a tag to compare

@Lockyc Lockyc released this 19 Jul 03:10

First-class graph queries, and a breaking graph.json shape change.

⚠️ Breaking: graph.json components are now flat

Each component's declared mycelium.toml fields serialize at the component top
level — .components[].summary, .components[].provides[], .components[].stack[] —
instead of under a .sidecar wrapper. This makes components consistent with overlay
nodes (already flat).

Migration: any consumer that queried .components[].sidecar.provides[] must drop
the .sidecar hop → .components[].provides[] (same for summary, stack).

First-class queries — no hand-written jq

Mycelium now provides the common graph queries instead of leaving agents to
construct them:

  • myco query <name> [args] — capability, component, components (filtered by
    kind/stack), used-by, uses, search — over a local graph.json (--dir) or
    a live hub (--url); readable text, or --json to pipe. Bare myco query prints a
    self-documenting index.
  • Hub /q/* routes — the same queries over HTTP: GET /q (index),
    /q/capability/<name>, /q/components?kind=&stack=, /q/used-by/<name>,
    /q/search?q=. Already-filtered JSON, explicit 404 on an unknown query name — never
    the silent-empty result that hand-written jq gives.

Query semantics live once in internal/query; the CLI and the HTTP routes are thin
adapters over it. Docs (MAP.md, schema/graph.md §Querying, README) now lead with the
query interface and demote jq to a labelled fallback.

Full Changelog: v0.6.2...v0.7.0

v0.6.2

Choose a tag to compare

@Lockyc Lockyc released this 18 Jul 11:00

Makes each repo's doc-graph self-navigating from graph.json.

  • docGraph.url — each component's doc-graph digest now carries a url linking
    straight to that repo's full doc-graph payload (e.g.
    /repos/github.com/lockyc/mycelium/docgraph.json). A consumer reading the digest
    in graph.json follows the link instead of translating the component's id
    into the route by hand. The digest still answers "healthy / how big" inline; the
    url is the one extra hop, and only when you want to walk the full graph.
  • The route is single-sourced (RepoDocGraphRoute / the RepoDocGraph*
    constants): the hub stamps the url, writes the payload, and the serve handler
    parses the same prefix/suffix — the link a consumer follows and the route the hub
    answers cannot drift.

Additive and backward-compatible: url is a new field on the existing docGraph
digest (schemaVersion 1 unchanged); relative, so it resolves against whichever hub
served the graph.

Full Changelog: v0.6.1...v0.6.2

v0.6.1

Choose a tag to compare

@Lockyc Lockyc released this 18 Jul 10:02

Completes the v0.6.0 doc-graph ingestion feature: the node now captures each repo's
doc-graph digest on a bare repo store, not just working-tree checkouts.

  • Digests captured on bare repos. The node runs docgraph graph --json --ref <scanned ref> (docgraph v3.1.0's ref mode reads the committed ref from the git
    object store), so it no longer skips bare repos — the reference deployment's bare
    Forgejo store now populates docGraph digests and serves /repos/<id>/docgraph.json.
  • Ref-consistency resolved. The digest now reflects the exact ref Mycelium
    scanned
    (the same ref used for the sidecar and recorded commit), on every repo —
    not the node's working-tree state. This closes the working-tree caveat of v0.6.0.
  • Runtime requirement: capturing digests needs docgraph v3.1.0+ on the node's
    PATH. An older or absent docgraph degrades gracefully to no digest — the scan
    never fails.

No change to the graph.json / docGraph shape (schemaVersion 1); digests simply
start appearing where the store is bare.

Full Changelog: v0.6.0...v0.6.1

v0.6.0

Choose a tag to compare

@Lockyc Lockyc released this 18 Jul 06:56

Mycelium now ingests each repo's docgraph doc-graph during scan, so "which repo" and "what are its docs / is its doc-graph healthy" become one query against the served graph. The node shells out to docgraph graph --json per repo (read-only, best-effort — an absent binary, a bare repo, or bad output degrades to no doc-graph and never fails the scan), pins schemaVersion 1, and both summarizes and stores the result.

Doc-graph ingestion

  • Per-component docGraph digest in graph.json — a compact summary (doc count, content/metadata edge counts, island paths, and which conventional entry docs are present), carried on each Component. The queryable "is this repo's doc-graph healthy / how big" signal, kept small on purpose (island paths but not full node/edge lists).
  • Full per-repo payload served at GET /repos/<id>/docgraph.json — the complete docgraph graph --json, pushed out-of-band on the manifest and written by the hub to repos/<id>/docgraph.json. Never inlined into graph.json; there for traversal when the digest isn't enough.
  • MAP.md rot flag — a component with ≥1 doc-graph island gets a terse docs: N islands ⚠ marker; a clean doc-graph adds nothing to the map.
  • myco audit doc-rot signals — new fleet-wide doc-rot (a repo with unfindable/unplaced docs) and docgraph-version (a repo whose docgraph is newer than the pinned schemaVersion 1) findings, turning per-repo doc rot into an ecosystem-visible fact.
  • Ref caveat (v1): docgraph audits the working tree while Mycelium scans a committed ref, so a doc-graph reflects the node's checkout state — documented in schema/graph.md; a precise per-ref capture is deferred until a real divergence bites.

Docs & tooling

  • Conformed the doc graph to docgraph v3 and flipped the pre-push hook to the /v3 install path.
  • Regenerated the docgraph pre-push hook; added a just install recipe.
  • schema/graph.md, CLAUDE.md, and README.md reconciled to the built behavior — the digest shape, the /repos/<id>/docgraph.json route, the schemaVersion pin, and the ref caveat.

No breaking changes: the docGraph field is additive and omitted when a repo has no docs or no docgraph on the node.

Full Changelog: v0.5.0...v0.6.0

v0.5.0

Choose a tag to compare

@Lockyc Lockyc released this 16 Jul 23:31

Breaking release. The word "catalog" is gone from Mycelium. A catalog is a browse-list of obtainable items; Mycelium's output has edges, which a catalog structurally can't express. The merged model is a graph — so the artifacts are now named for what they are and for the job each does.

There are no compatibility shims. The old names are gone, and the old routes return 404.

Breaking — rendered artifacts

Before After Job
CATALOG.md MAP.md the lossy map to read into context to orient
catalog.json graph.json the full-fidelity graph to query with jq

The filenames now carry the usage rule that the docs used to have to assert: read the map, query the graph.

Breaking — HTTP routes

  • /CATALOG.md → /MAP.md
  • /catalog.json → /graph.json
  • / still serves the map (now MAP.md)

The old paths return 404, enforced by a regression test.

Breaking — CLI flags

build, serve, and audit now all take --dir for the artifact directory (replacing --catalog and build's --out). One directory concept, one flag name.

  • myco build --dir .
  • myco serve --dir .
  • myco audit --dir .

scan --out is unchanged — it names a file (the manifest), a genuinely different concept. This is the point of the change: --out now means exactly one thing, where before it meant "a file" on scan and "a directory" on build.

Breaking — schema and sidecar

  • schema/catalog.md → schema/graph.md
  • This repo's own mycelium.toml capability catalog → ecosystem-graph

Internal

  • internal/catalog → internal/graph; type Catalog → type Graph
  • Artifact filenames now have a single source of truth (graph.MapName, graph.GraphJSONName) rather than being re-encoded per package

Upgrading

Update any consumer that fetches /CATALOG.md or /catalog.json, and any invocation passing --catalog or build --out. A myco serve invocation still passing --catalog is a hard parse error, not a warning — if you run the hub from a service unit, update the unit and the binary together.

Full Changelog: v0.4.0...v0.5.0

v0.4.0

Choose a tag to compare

@Lockyc Lockyc released this 15 Jul 22:27

Full Changelog: v0.3.0...v0.4.0

v0.3.0

Choose a tag to compare

@Lockyc Lockyc released this 05 Jul 06:34

Feature release.

  • CATALOG.md now renders each component's tags as backtick pills under its kind/status line, so signals that previously lived only in catalog.json (e.g. a prelaunch tag, or stack/domain tags) are visible in the map agents read.

Full Changelog: v0.2.1...v0.3.0