Replies: 1 comment
|
One more thought on visualization and interaction — this pattern composes naturally with MCP (Model Context Protocol). A jj MCP server that exposes revset queries and
This also enables an interesting standup pattern: the assistant asks the developer structured questions ("What did you accomplish? What's blocked?"), then writes the answers as a jj change with trailers — creating a queryable standup history in the same graph as the code and tickets. The key insight is that because everything is local and filesystem-speed, the MCP tool calls return instantly. There's no API latency to work around. The AI assistant can do dozens of queries in a single conversation turn to build up a rich view. This wouldn't require any changes to jj itself — just an MCP server that wraps the CLI. But the |
Uh oh!
There was an error while loading. Please reload this page.
Context: The Lost Mental Model Problem
As AI coding assistants become more capable, a new problem is emerging: engineers lose the mental model of systems they didn't personally build. When an AI agent produces 20+ changes in a session, the human can't reconstruct why something was built the way it was — only what was built.
Reference: Finding the Right Amount of AI
Traditional ticket systems (Jira, Linear, GitHub Issues) are separated from code by a network boundary. When agents produce changes at filesystem speed, any networked system becomes stale instantly. The intent trail breaks.
Observation: jj's Change Model Enables Something New
jj treats empty changes as first-class citizens. Combined with native trailer parsing (
commit.trailers()) and revsets, this enables a pattern I haven't seen explored:Use empty jj changes as structured work items (tickets), with implementations stacking on top.
A "ticket" as an empty change:
An implementation stacked on the ticket:
The
Implements:trailer or the graph ancestry (implementation is a descendant of ticket) links them.Querying with revsets:
Why jj and Not Git
--allow-emptyneeded, tools don't strip themgit log --grepcommit.trailers()already exists in the template systemWhat Would Make This More Ergonomic
Two small features would transform this from "works with substring matching" to "precise and fast":
trailer(key, value)revset filter — match commits by specific trailer key/value pairs. Follows the exact shape of the existingdescription()filter predicate. The trailer parser is already injj-lib.commit.trailer(key)template method — direct access to a specific trailer value without filtering the full.trailers()list.Both follow existing patterns in the codebase and serve use cases beyond this one (Gerrit
Change-Idqueries,Signed-off-byfiltering, any trailer-based workflow).The Speed Argument
A typical AI-assisted session produces 20-50 changes per hour. At that rate:
jj new --no-edit+jj describe= <10ms. The ticket system literally cannot fall behind because it IS the workspace.Open Questions
I'd love community input on:
trailer()revset andcommit.trailer(key)template be welcome as PRs? They're useful independently of this pattern, but this pattern is the strongest motivating use case.jj logwith templates works, but has anyone explored richer views (e.g., kanban-style TUI) built on revset queries?This isn't a feature request — it's an exploration of something jj's design uniquely enables. Curious whether others have experimented with similar patterns.
All reactions