Product backlog

What is queued for ugraph, in the order it is likely to land, with the reason each item exists. Items are sized against one principle: the deterministic core stays deterministic, and anything that needs a model stays opt-in and machine-checked.

Read this as a plan, not a promise. Only the items marked shipped exist in v0.1.0 today. See the changelog for exactly what that is. Everything else is intent, and priorities move when real use says they should. No dates are given because none have been committed.
shipped — in v0.1.0 in progress — being built now planned — accepted, not started considering — unresolved question first

Now

4 items · target 0.2.0

Making v0.1.0 installable by someone who is not you. Nothing here adds a feature; all of it removes a reason the tool cannot be handed over.

UG-01

Bundle templates/ and skills/ into the wheel

ugraph init and ugraph skills install resolve their payload from _bundled/, falling back to a source-checkout path. Package both so an installed wheel scaffolds and installs without the repository present.

Why: the two commands a first-time user runs first are the two that depend on files the wheel does not yet carry.

in progress
packaging
UG-02

pyproject.toml, a tagged release, and PyPI

Publish as ugraph-kit with a pinned dependency set (python-frontmatter, plus tomli below Python 3.11), and an [api] extra for the Anthropic and OpenAI backends. Tag 0.1.0 from the commit the changelog describes.

Why: pip install ugraph-kit is the difference between a tool and a folder of scripts.

in progress
packagingrelease
UG-03

Test suite over the three gates, run in CI

Fixture knowledge bases: one clean, one with every lint error, one with a paraphrased quote and a fabricated timestamp, asserted against lint, verify and index --check, including the byte-identical rebuild property.

Why: the product claim is that these three commands can be trusted as gates. An untested gate is an opinion.

planned
qualitycore
UG-04

ugraph doctor

One command that reports the resolved KB root and which of the five resolution rules produced it, whether yt-dlp is on PATH, which extraction backend is reachable, and whether the scaffold is complete, then names the fix for each failure.

Why: every setup failure today surfaces as a different command failing for a reason that is really about configuration.

planned
dx

Next

6 items · target 0.3.0

Automating the sources you capture by hand today, and giving agents a first-class way in.

UG-05

RSS and blog ingest adapter

A second ugraph.sources module that fetches posts automatically and lands them as the same pair of pages every adapter writes: an immutable capture in raw/ and a stub in sources/. Paragraph anchors take the place of timestamps for provenance.

Why: the ledger already keys on the universal slug rather than anything video-shaped, so a new adapter appears in every report the day it lands, with nothing added to the ledger.

planned
adapters
UG-06

Podcast adapter with local transcription

Pull an audio feed and transcribe it locally into the same timestamped markdown shape other captures use, so verify works on it unchanged.

Why: the highest-value material in this space is audio-only, and the verification model needs nothing but real time markers.

planned
adapters
UG-07

Phase-B assistance — propose, never merge

A pass that clusters candidates across sources and proposes canonical merges with their evidence, presented for accept, reject or split. The tool writes nothing until a human answers.

Why: collapsing ten talks into one page is where the format's value lives and there is no mechanical check for getting it wrong, so this stays a proposal surface, not a batch job.

planned
coreagents
UG-08

MCP server over a knowledge base

Expose the KB to any MCP-speaking agent as a small tool surface: read the index, follow a typed edge, fetch a page, and resolve a citation back to its transcript marker, read-only by default.

Why: a filesystem is already an agent-navigable interface, but an explicit citation-resolution tool is what makes an agent cite instead of paraphrase.

planned
agents
UG-09

Incremental lint and verify

Cache results against a content hash per page so a re-run only re-checks what changed, with an explicit --full to force a cold pass.

Why: a pre-commit gate that takes ten seconds on a large KB is a gate people start skipping.

planned
coreperformance
UG-10

ugraph watch

Rebuild indexes and re-lint the touched subtree on save, so an editing session in Obsidian never drifts from what index --check would say.

Why: the byte-identical index property is only useful if you find out you broke it before CI does.

planned
dx

Later

6 items

Accepted in principle, not scheduled. Each waits on something in Now or Next.

UG-11

Local document adapter — PDF, EPUB, a folder of notes

Ingest a directory of documents with page or heading anchors as the provenance unit.

Why: the most-cited material in a serious knowledge base is usually already on the reader's disk.

planned
adapters
UG-12

Saved-thread adapter

Long-form threads and forum posts, captured immutably with per-post anchors.

Why: named in the design notes as the case that proves the slug-keyed ledger generalizes.

considering
adapters
UG-13

Structural queries over the derived graph

Answer the questions traversal cannot answer: concepts citing a single source that sit in two clusters, orphan clusters, entities with no implementing concept, all without introducing a graph database.

Why: the export exists precisely so a real query tool can answer these; today the answer is "load the whole export into a model context", which stops scaling eventually.

planned
core
UG-14

ugraph taxonomy

Inspect, extend and validate the closed vocabulary from the CLI, with a migration path when a domain is renamed.

Why: the taxonomy is a closed set the linter enforces, so editing it by hand is the one place a user can silently invalidate every page at once.

planned
dxcore
UG-15

ugraph publish — static site export of a KB

Render a knowledge base as a linked static site, with transcript deep links intact.

Why: a KB that only its author can read wastes the work; relative markdown links already map onto a static site with no rewriting.

considering
dx
UG-16

Windows and a full CI matrix

Verify POSIX-separated page identity, path resolution and the raw-tree exclusion on Windows, across supported Python versions.

Why: a page's identity is a POSIX-separated relative path by design; that guarantee is asserted in code but never yet run on the platform it protects against.

planned
quality

Under consideration

5 items

Each has an unresolved design question that has to be answered before it can be scheduled. Listed so the question is visible, not to imply it is coming.

UG-17

Source drift detection

Notice when a source changes after extraction (a re-uploaded video, an edited post) and marks every page citing it for review.

Open question: a transcript is declared immutable. Does a changed upstream produce a second immutable capture, or invalidate the first?

considering
core
UG-18

Non-English sources and translated quotes

Ingest a non-English transcript and carry provenance through a translation.

Open question: a translated quote is by definition not a literal substring of its source, which is the one check the format refuses to weaken.

considering
coreadapters
UG-19

More extraction backends

Additional API providers behind the same Backend interface.

Open question: extraction output is machine-checked, so provider choice barely affects quality. Is the maintenance worth it beyond the two that exist?

considering
agents
UG-20

Team mode — review workflow on Phase B

Multiple contributors proposing and reviewing canonicalization decisions.

Open question: pull requests on a markdown repository may already be the whole feature. Anything more has to earn its complexity against that.

considering
collaboration
UG-21

Obsidian plugin surface

Run the gates and read the ledger from inside the vault the KB often lives in.

Open question: the format's premise is that a plain filesystem is enough. A plugin risks making one editor the privileged way in, the exact dependency the wikilink rule exists to prevent.

considering
integrations

Explicitly not doing

3 items

Recorded so the same proposals do not get relitigated. Each is a decision, not a gap.

NO-01

An authoritative graph database

The graph export stays derived and disposable; markdown stays the source of truth.

Why not: a second system in the loop drifts from the files, needs its own migration story, and turns git diff into something unreadable. Regenerating the export costs milliseconds.

declined
core
NO-02

Embeddings and chunk retrieval

No vector store, no chunking, no top-k.

Why not: the format's whole bet is that an index plus typed links you can read and fix beats a similarity score you cannot inspect.

declined
core
NO-03

Auto-repairing transcripts

verify reports; it never rewrites.

Why not: machine captions carry real disfluencies and mistranscriptions. Normalizing them away destroys the evidence the checker exists to protect.

declined
core

Shipped, not planned.

The changelog is the other half of this page: exactly what exists today, and the reasoning behind the decisions that got it here.

Read the changelog Back to overview