Repository navigation
Let tasks point at Devbook pages and chapters - #938
Merged
Merged
Conversation
A task now carries a list of Devbook references (`<path>` or `<path>#<anchor>`) as its own field, the way spec-manager links backlog items to spec pages. The list is kept out of the entry text, stored in SQLite (additive `devbook_refs` column) and carried by sync. - Domain: TaskDevbookReference value object; TaskItem.SetDevbookReferences (whole list, ordered, de-duplicated; a bare area path is stored under `.devbook/`); ITaskItems.SetDevbookReferencesAsync. - Resolution: IDevbookReferenceResolver port in Tasks.Abstractions, answered by DevbookReferenceResolver in Infrastructure.Devbook (database first, then the file, off the render thread). States: chapter, page, unknown-heading, unknown-page, outside-devbook, unverified. - MCP: set_devbook_references and list_devbook_references; read_item returns the references. - Import: a plan entry's `devbook:` token sets the references; a re-import without one keeps those added by hand. - Desktop: a Devbook group in the task panel with DevbookReferenceChip (status pill, broken marker, open/remove), a page/chapter picker, a row indicator, and opening a reference in the Devbook pane. - TagMultiSelect: ShowSelected, MatchValue, MaxOptions, @Bind input, single-line options; Escape now closes an open picker before the entry. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…inking-df47b0 # Conflicts: # src/Modules/Tasks/Backlog.Modules.Tasks.UI/TasksPane.razor
JSdotNet
added a commit
that referenced
this pull request
Oct 3, 2026
Main registered IDevbookReferenceResolver inline in both desktop heads (#938) while this branch moved those blocks into the shared composition; the registration now sits in AddDevbookAdapters beside the search tiers, and DevbookModuleServices lists it so both heads are checked to resolve it. DevbookMarkdownSyncWriter.cs, added on main (#939), joins the file-IO ratchet. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Tasks can now point at Devbook pages and chapters, the way spec-manager links backlog items to spec pages. A reference is
<path>or<path>#<anchor>, for example.devbook/domain/tasks/domain.md#task.References live in a field of their own on the task. They never appear in the entry text. Each one is resolved when it is read, so a renamed chapter still shows on the task, marked as broken.
Changes
TaskDevbookReferencevalue object.TaskItem.SetDevbookReferencestakes the whole list, keeps its order and drops duplicates.arc42,domain,tech,designorai) is stored under.devbook/.ITaskItems.SetDevbookReferencesAsyncandTaskItemDto.DevbookReferences.devbook_refscolumn, added the additive way (ADR 0006).TaskPayload.DevbookReferencesis the last field and defaults to empty.TaskReplicaMergemaps it both ways.devbook:<path>[#anchor], and the token may repeat. Import moves the tokens into the field.devbook:token, so references added by hand survive.IDevbookReferenceResolveris a port owned by Tasks.Abstractions. The module boundary rules stop a module UI from referencing Devbook.Abstractions, so the port is answered by an adapter in Infrastructure.Devbook.chapter,page,unknown-heading,unknown-page,outside-devbookorunverified, with its title and status.set_devbook_referencesreplaces the whole list.list_devbook_referencesreturns each reference resolved.read_itemnow includesdevbookReferences.DevbookReferenceChips, a new library component. Each chip shows the status pill and a broken marker, and can be opened or removed. Accessible names carry the location and, for a broken reference, the problem.DevbookOpenRequest, so remounting the pane does not replay an old request.TagMultiSelectgainsShowSelected,MatchValueandMaxOptions.@bind:get/set, which fixes keystrokes dropped while typing fast.TagMultiSelect.Testing
Backlog.WithoutAppHeads.slnf, Release,-warnaserror,--no-incremental) is clean, and so is the DebugBacklog.slnbuild with the MAUI heads.dotnet testacross the solution: 10,848 passed, 0 failed, 1 skipped (the E2E suite, which is gated onBACKLOG_E2E). New tests cover the domain, SQLite, sync, import, resolver, MCP, bUnit UI and component behaviour.build.mjs --checkandcheck-metadata.mjs.Known limits, deliberately out of scope
#anchor. Every chapter link in the Devbook pane already behaves this way.Verification
#anchor.devbook/domain/tasks/features.md,domain.md.devbook/domain/devbook/domain.md#task-link,#cross-linking(draft)DevbookReferenceChipAll three non-aligned rows are left to a follow-up devbook change.
Related
No issue; this was an ad-hoc request. Refs ADR 0002, 0006, 0007 and 0012.
Follow-up: the devbook chapters (
.devbook/domain/tasks/) do not describe this feature yet. The draftTask LinkandCross-Linkingchapters in.devbook/domain/devbook/domain.mdmodel a link that the Devbook context owns, which needs reconciling. Both belong in a separate devbook change.Checklist
🤖 Generated with Claude Code