Entity Resolution
Entity Resolution
jjj uses flexible entity resolution that lets you reference problems, solutions, critiques, and milestones in multiple ways. You can use whichever method is most convenient for your workflow.
Resolution Methods
When you reference an entity (e.g., jjj problem show "auth bug"), jjj tries to resolve it in this order:
1. Full UUID
The most explicit method. Entity IDs are UUID7 format:
01957d3e-a8b2-7def-8c3a-9f4e5d6c7b8aUUID7 identifiers are time-ordered, meaning entities created later have lexicographically larger IDs. This provides natural chronological sorting in listings.
2. Truncated Prefix
Like git short hashes, you can use the first N characters of the UUID (minimum 6 hex characters):
jjj problem show 01957djjj solution accept 01958aIn listings, jjj automatically calculates the shortest unique prefix for each entity:
Problems: 01957d App crashes on startup [open] 01958a Login is slow [open] 01958b Search performance [in_progress]If your prefix matches multiple entities, jjj extends it automatically or prompts you to be more specific.
3. Fuzzy Title Match
The most human-friendly method. Type any part of the entity’s title:
jjj problem show "auth bug"jjj solution resume "connection pooling"jjj critique address "error handling"Fuzzy matching is case-insensitive and matches partial strings:
"auth"matches “Fix authentication bug”"search slow"matches “Search is slow”"v1.0"matches “v1.0 Release”
Disambiguation
Interactive Mode (TTY)
When multiple entities match your query in an interactive terminal, jjj shows a fuzzy-searchable picker:
Multiple problems match "auth":> Fix authentication bug [open] Update auth module [in_progress] Auth token expiration [solved]
Use arrow keys to select, type to filterUse arrow keys to navigate and press Enter to select. You can also type to further filter the results.
Non-Interactive Mode (Scripts/Pipes)
When running in scripts or piped commands, jjj returns an error with suggestions:
Error: Ambiguous match for "auth"
Did you mean one of these? 01957d Fix authentication bug 01958a Update auth module 01958b Auth token expiration
Specify a longer prefix or more specific title.Context-Aware Resolution
Commands know what entity type they expect, so you don’t need type prefixes:
# These work because the command implies the typejjj problem show "auth bug" # Searches problems onlyjjj solution accept "pooling" # Searches solutions onlyjjj critique address "error" # Searches critiques onlyMixed-Type Listings
In commands that show multiple entity types (like jjj status), type prefixes distinguish entities:
Next Actions: p/01957d App crashes on startup [open] s/01958a Add connection pooling [review] c/01958b Missing error handling [open]The p/, s/, c/, m/ prefixes indicate:
p/= Problems/= Solutionc/= Critiquem/= Milestone
Examples
Creating Related Entities
# Create a problemjjj problem new "Search is slow" --priority high
# Reference by title when creating a solutionjjj solution new "Add search index" --problem "Search is slow"
# Partial match works toojjj solution new "Use caching" --problem "slow"
# Reference solution by title when creating critiquejjj critique new "search index" "Missing pagination" --severity mediumChaining Operations
# Address a critique by partial titlejjj critique address "pagination"
# Accept the solutionjjj solution accept "search index"
# Solve the problemjjj problem solve "Search"Filtering Lists
# Filter solutions by problem titlejjj solution list --problem "auth"
# Filter critiques by solutionjjj critique list --solution "pooling"Best Practices
-
Use titles for readability:
jjj solution accept "pooling"is clearer thanjjj solution accept 01958a -
Use prefixes in scripts: For automation, use the prefix from
--jsonoutput to avoid ambiguity -
Be specific enough: If “auth” matches multiple items, try “auth bug” or “authentication”
-
Check listings first: Run
jjj problem listto see available prefixes and titles -
Trust the picker: In interactive mode, let the fuzzy picker help you find the right entity