Roadmap¶
What we’re building next, in order. This page is direction, not dates.
What we’re building next¶
1. Audit — impact analysis¶
The flagship feature of v0.6. Given an item, traverse typed edges
(depends / blocks / supersedes / conflicts) and report the
blast radius: every item reachable from the root within the five-hop
ceiling, each annotated with the edge type that first reached it.
Surfaces on all three interfaces: lp impact <id>, the luplo_impact
MCP tool, and GET /items/{id}/impact. Same structured answer in every
case, so an LLM can cite a decision graph the same way a human reads the
tree.
This is the feature that makes “what breaks if I change this?” a queryable question. Without it, luplo is an aliasing search over a decision log. With it, luplo is the only tool that answers the question by construction rather than by vibe.
2. Slack /archive¶
Ingestion vertical one. A Slack slash command that pulls a thread into
a sync_job, which the worker structures into an item and hands back
to the user as a draft — never a silent write. This preserves the
augment-not-replace commitment while
making decisions that happened in Slack actually findable later.
/archive ships after Audit, not before. A decision archiver without
impact analysis is a crowded category. The loop that creates lock-in
is archive-a-decision → six-months-later Audit shows you what depends
on it. Ship the loop, not half of it.
3. Notion webhook¶
Ingestion vertical two. A Notion Public Integration plus a webhook
receiver: page-updated events enqueue sync_jobs, the worker fetches
current content, diffs against the previous version in items_history,
and proposes an update — same draft-then-confirm pattern as /archive.
Shared infrastructure with /archive through a small ExternalSource
protocol, so adding Confluence, Linear, and similar ingestion sources
later is mechanical.
4. Rule pack¶
Declarative checks that run over the item graph. A rule is a function
that returns findings; luplo ships five starter rules with v0.6 (missing
rationale, undated retention, dangling edge, unresolved conflict,
unlinked policy). Surfaces as lp check, luplo_check, and
GET /checks — structured findings an LLM or a CI job can act on.
Rules are deterministic (SQL plus Python). There is no “LLM-powered compliance checker” on this roadmap. Hallucination plus regulatory context is not a product, it is a liability.
What we’re explicitly not building¶
See Philosophy for the five refusals in full. The short list of proposals that will be declined regardless of how they are framed:
A plugin runtime that loads third-party Python into luplo.
A vector-first search mode.
A traversal depth knob that exceeds five hops.
A
PATCH /itemsthat edits an existing row in place.A “general memory” surface for non-engineering state.
None of these are rejected because they are hard to build. They are rejected because building them changes what luplo is.
How to influence the roadmap¶
Open an issue for a feature request or a bug report. Link to an existing decision in the repo if one already covers the ground.
Open a PR for bug fixes and small, well-scoped improvements (typos, doc fixes, test coverage).
Open an issue first for architectural PRs (new subsystems, new storage shapes, new surfaces). Large PRs without a prior discussion tend to be declined even when the code is good — the shape of luplo is a curated decision.
Version policy¶
luplo follows Semantic Versioning. While the
version is 0.x, minor-version bumps (0.x → 0.(x+1)) may contain
breaking changes; patch bumps are bug fixes only. Once 1.0.0 is
tagged, the public CLI, MCP tool, and HTTP surface become a stability
commitment.
Until 1.0, the roadmap above is the main source of intent. Changes
to that intent happen on this page, in git history, and nowhere else.