Commit 0cf4c36a2e
Unsigned
Layout: unified · split
Hutch/App/HutchIntents.swift +4 −2
| @@ -134,7 +134,8 @@ struct SearchHutchIntent: AppIntent { | |||
| 134 | 134 | ||
| 135 | var route: HutchRoute { | 135 | var route: HutchRoute { |
| 136 | let normalized = query.trimmingCharacters(in: .whitespacesAndNewlines) | 136 | let normalized = query.trimmingCharacters(in: .whitespacesAndNewlines) |
| 137 | // TODO: Route to global local search once Hutch has one. | 137 | // Routes to Lookup for now; repoint at a global content search when Hutch |
| 138 | // gains one — tracked in ROADMAP.md § "App Intent gaps". | ||
| 138 | return normalized.isEmpty ? .lookup : .search(query: normalized) | 139 | return normalized.isEmpty ? .lookup : .search(query: normalized) |
| 139 | } | 140 | } |
| 140 | 141 | ||
| @@ -145,7 +146,8 @@ struct SearchHutchIntent: AppIntent { | |||
| 145 | } | 146 | } |
| 146 | } | 147 | } |
| 147 | 148 | ||
| 148 | // TODO: Add OpenSavedSearchIntent when Hutch has global saved-search persistence. | 149 | // An OpenSavedSearchIntent belongs here once Hutch has global saved-search |
| 150 | // persistence — tracked in ROADMAP.md § "App Intent gaps". | ||
| 149 | 151 | ||
| 150 | // MARK: - App Entities | 152 | // MARK: - App Entities |
| 151 | 153 | ||
ROADMAP.md +22 −2
| @@ -244,8 +244,10 @@ Won't Fix, with reasons (resolve in SonarCloud's web UI, not in code): | |||
| 244 | - **`javascript:S7785`** — prefers top-level `await` for `injectBannerIfEnabled()`, | 244 | - **`javascript:S7785`** — prefers top-level `await` for `injectBannerIfEnabled()`, |
| 245 | but `content.js` is a classic content script, not a module. Top-level `await` | 245 | but `content.js` is a classic content script, not a module. Top-level `await` |
| 246 | would be a syntax error. Not applicable. | 246 | would be a syntax error. Not applicable. |
| 247 | - **5× `swift:S1135`** — TODO comments (INFO). Two in `HutchIntents` name real | 247 | - **5× `swift:S1135`** — TODO comments (INFO). The two in `HutchIntents` named |
| 248 | gaps; leave them until those features land. | 248 | real gaps and are now promoted to "App Intent gaps" below, with the inline |
| 249 | `TODO`s replaced by plain references — so those two clear. The remaining three | ||
| 250 | (`DeepLink`, `NotificationPreferencesViewModel` ×2) stay until addressed. | ||
| 249 | 251 | ||
| 250 | The 3 hotspots are the part actually worth thought: | 252 | The 3 hotspots are the part actually worth thought: |
| 251 | 253 | ||
| @@ -315,6 +317,24 @@ sequenced after the ingest rather than planned now. Read | |||
| 315 | `api/graph/schema.graphqls` in `hub.sr.ht` before committing the version number. | 317 | `api/graph/schema.graphqls` in `hub.sr.ht` before committing the version number. |
| 316 | The bucket may be empty. | 318 | The bucket may be empty. |
| 317 | 319 | ||
| 320 | ### App Intent gaps — unscheduled | ||
| 321 | |||
| 322 | Two App Intents in `HutchIntents.swift` are placeholders for features Hutch does | ||
| 323 | not have yet. Both are gated on the same missing capability — a global | ||
| 324 | search/persistence layer — so neither is schedulable until that lands. (These | ||
| 325 | were the two `swift:S1135` TODOs; promoted here so the code carries a reference | ||
| 326 | rather than a bare `TODO`.) | ||
| 327 | |||
| 328 | - **Global content search.** `SearchHutchIntent` accepts a query but routes to | ||
| 329 | the Lookup screen — sourcehut entity resolution — because Hutch has no | ||
| 330 | full-text search across tickets, repos, and lists. Its own description says | ||
| 331 | "Opens Hutch lookup with a search query." When a real search exists, repoint | ||
| 332 | the `.search` route in `SearchHutchIntent.route`. | ||
| 333 | - **`OpenSavedSearchIntent`.** Saved searches are per-tracker only | ||
| 334 | (`TicketSavedFilterStore`, `ScopedSearchHistoryStore`); there is no global | ||
| 335 | saved-search store for an intent to open. Add the intent once global | ||
| 336 | saved-search persistence exists. | ||
| 337 | |||
| 318 | ### Swift 6 language mode — no release of its own | 338 | ### Swift 6 language mode — no release of its own |
| 319 | 339 | ||
| 320 | The project builds in Swift 5 language mode with | 340 | The project builds in Swift 5 language mode with |