╭ changed ──────────────╮ │src/ui/Repo/Patches.zig│ ╰───────────────────────╯ ╭───────────╮ │← all files│ ╰───────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────╮ │298 empty.drafts = drafts_window; │ │299 if (draft_selected) empty.view = .drafts; │ │300 │ │301 - // an explicitly named posted patch or tag that doesn't exist is a bad url │ │302 - // (NotFound -> 404); drafts and bare routes can use the empty fallback. │ │303 - const strict = tagged or (rooted and !draft_selected); │ │301 + // an explicitly named posted patch that doesn't exist is a bad url │ │302 + // (NotFound -> 404); drafts, tags, and bare routes can use the empty fallback.│ │303 + const strict = rooted and !draft_selected; │ │304 │ │305 // a repo with no consumed events has no moment yet. │ │306 const gpa = arena.child_allocator; │ ╰────────────────────────────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │322 var closed_set: ?DB.SortedSet(.read_only) = null; │ │323 var merged_set: ?DB.SortedSet(.read_only) = null; │ │324 if (tagged) { │ │325 - const tag_to_patches_cursor = try haxy_moment.getCursor(hash.hashInt(repo_opts.hash, evt.Patch.tag_status_to_id_set_key)) orelse return error.NotFound;│ │326 - const tag_to_patches = try DB.SortedMap(.read_only).init(tag_to_patches_cursor); │ │327 - const decoded = std.Uri.percentDecodeInPlace(try aa.dupe(u8, empty.tag)); │ │328 - open_set = try Threads.tagStatusSet(Self, DB, tag_to_patches, decoded, .open); │ │329 - closed_set = try Threads.tagStatusSet(Self, DB, tag_to_patches, decoded, .closed); │ │330 - merged_set = try Threads.tagStatusSet(Self, DB, tag_to_patches, decoded, .merged); │ │331 - // a tag no patch carries is a bad url │ │332 - if (open_set == null and closed_set == null and merged_set == null) return error.NotFound; │ │325 + if (try haxy_moment.getCursor(hash.hashInt(repo_opts.hash, evt.Patch.tag_status_to_id_set_key))) |tag_to_patches_cursor| { │ │326 + const tag_to_patches = try DB.SortedMap(.read_only).init(tag_to_patches_cursor); │ │327 + const decoded = std.Uri.percentDecodeInPlace(try aa.dupe(u8, empty.tag)); │ │328 + open_set = try Threads.tagStatusSet(Self, DB, tag_to_patches, decoded, .open); │ │329 + closed_set = try Threads.tagStatusSet(Self, DB, tag_to_patches, decoded, .closed); │ │330 + merged_set = try Threads.tagStatusSet(Self, DB, tag_to_patches, decoded, .merged); │ │331 + } │ │332 } else if (try haxy_moment.getCursor(hash.hashInt(repo_opts.hash, evt.Patch.status_to_id_set_key))) |status_to_patches_cursor| { │ │333 const status_to_patches = try DB.SortedMap(.read_only).init(status_to_patches_cursor); │ │334 open_set = try Threads.statusSet(Self, DB, status_to_patches, .open); │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯