Skip to content

feat(settings): complete the search index and give every row a symbol and subtext#672

Merged
FuJacob merged 2 commits into
mainfrom
feat/settings-index-symbol-audit
Jun 11, 2026
Merged

feat(settings): complete the search index and give every row a symbol and subtext#672
FuJacob merged 2 commits into
mainfrom
feat/settings-index-symbol-audit

Conversation

@FuJacob

@FuJacob FuJacob commented Jun 11, 2026

Copy link
Copy Markdown
Owner

Summary

Audit of every Settings row against the search index. The index had drifted from the panes: recently shipped settings (Ghost Text Size, Suggest in Integrated Terminals, the runtime Status row) were unfindable in search, several rows had no leading SF Symbol (the integrated-terminal toggle and all three typo toggles), two rows were bare LabeledContent with neither symbol nor subtext (Apple Intelligence "Availability", models folder "Path"), and a few titles were stale or inconsistently cased ("Toggle Tabby" predates the Cotabby rename). Every settings row now uses SettingsRowLabel with a symbol and a clear one-line description, and the index matches the rows it navigates to.

Validation

swiftlint lint --quiet
# exit 0

xcodebuild test -project Cotabby.xcodeproj -scheme Cotabby -destination 'platform=macOS' \
  -derivedDataPath build/DerivedData -only-testing:CotabbyTests/SettingsIndexTests \
  CODE_SIGNING_ALLOWED=NO CODE_SIGNING_REQUIRED=NO
# ** TEST SUCCEEDED **  4 tests, 0 failures
  • Every SF Symbol name referenced was validated to resolve via NSImage(systemSymbolName:) (symbol names are not compile-checked; a typo renders an empty icon).
  • New SettingsIndexTests pin the hygiene rules: every item has a non-empty title/symbol/keywords, ids are unique, and real queries ("ghost text size", "terminal", "vscode", "typo", "battery") land on the right items, so the next shipped-but-unindexed setting fails CI instead of silently vanishing from search.
  • Not screenshotted: pure label/icon additions using the existing SettingsRowLabel component and layout.

Linked issues

None.

Risk / rollout notes

  • UI-only label changes plus index entries; no settings storage, bindings, or behavior changed.
  • LabeledContent("Availability") { … } and LabeledContent("Path") { … } became explicit label: closures with SettingsRowLabel, which adds the standard description line under those two rows (Engine & Model pane).
  • Visible copy changes: "Toggle Tabby" → "Toggle Cotabby", "Switch based on power source" → "Switch Based on Power Source", "Also use LM Studio models" → "Also Use LM Studio Models", "Path" → "Models Folder", and a tightened integrated-terminals description.
  • project.pbxproj regenerated by XcodeGen for the new test file (CI verifies it matches project.yml).

Greptile Summary

This PR audits every Settings row against the search index, adding missing SettingsItem entries (ghostTextSize, modelStatus, suggestInIntegratedTerminals), adding SF Symbols to rows that had none (typo toggles, integrated-terminal toggle), converting two bare LabeledContent rows to SettingsRowLabel (Apple Intelligence "Availability" and models "Path"), and fixing stale/inconsistent titles ("Toggle Tabby" → "Toggle Cotabby", casing fixes). A new SettingsIndexTests file pins hygiene rules and query-to-item expectations so future drift fails CI.

  • Index completeness: Three previously unfindable settings (ghostTextSize, modelStatus, suggestInIntegratedTerminals) are now indexed with titles, symbols, and keyword lists; several index titles were updated to match their rendered pane labels.
  • Symbol and label audit: All SettingsRowLabel usages now carry systemImage; the two bare LabeledContent rows gain a SettingsRowLabel label closure with a description line, and titles for battery/power rows were shortened to match the pane copy.
  • Test coverage: SettingsIndexTests checks uniqueness of ids, non-emptiness of title/symbol/keywords for every item, and that real user queries resolve to the correct items.

Confidence Score: 4/5

Safe to merge after reconciling the index title for Apple Intelligence Availability with its rendered pane label.

The change is UI-only: label text, SF Symbols, and search-index entries — no storage, bindings, or behavior is touched. One title mismatch was introduced: the index advertises "Apple Intelligence Availability" while the pane still renders the row as "Availability", repeating the exact pattern that was just fixed for modelStatus. That divergence means a user who finds the row through search sees a different label in results than on the settings pane itself. Everything else — new index entries, symbol additions, test hygiene — is correct and well-covered by the new SettingsIndexTests.

Cotabby/UI/Settings/SettingsIndex.swift and Cotabby/UI/Settings/Panes/EngineAndModelPaneView.swift — the appleIntelligenceAvailability title needs to be consistent between the index and the pane label.

Important Files Changed

Filename Overview
Cotabby/UI/Settings/SettingsIndex.swift Three missing cases added; titles, symbols, and keywords updated throughout. One new title mismatch introduced: index says "Apple Intelligence Availability" but pane label says "Availability".
CotabbyTests/SettingsIndexTests.swift New test file; pins index hygiene (non-empty title/symbol/keywords, unique ids) and validates recently added items resolve from real queries.
Cotabby/UI/Settings/Panes/EngineAndModelPaneView.swift Two bare LabeledContent rows converted to SettingsRowLabel with description; "Status" title promoted to "Model Status"; casing fixes on power-switching labels.
Cotabby/UI/Settings/Panes/WritingPaneView.swift Adds systemImage to all three typo-correction toggles; description text tweaked to add trailing comma before new parameter.
Cotabby/UI/Settings/Panes/AppsPaneView.swift Adds systemImage: "terminal" to the integrated-terminal toggle; description text tightened.
Cotabby/UI/Settings/Panes/ShortcutsPaneView.swift Single title rename: "Toggle Tabby" → "Toggle Cotabby".
Cotabby/UI/Settings/Panes/AboutPaneView.swift Check-for-updates button gains a Label with an SF Symbol icon.
Cotabby.xcodeproj/project.pbxproj SettingsIndexTests.swift wired into the test target; generated by XcodeGen.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    subgraph Index["SettingsIndex.swift (single source)"]
        A[SettingsItem enum case]
        B[title: String]
        C[systemImage: String]
        D[keywords: String array]
        E[category: SettingsCategory]
    end

    subgraph Search["Search flow"]
        F[User types query]
        G["results(for:) filters allCases"]
        H[Matches title / category / keywords]
        I[Search result shown with index title + symbol]
        J[User taps → navigates to pane]
    end

    subgraph Panes["Settings Pane Views"]
        K["SettingsRowLabel(title:description:systemImage:)"]
    end

    A --> B & C & D & E
    F --> G --> H --> I --> J --> K

    style Index fill:#e8f4f8,stroke:#4a90d9
    style Search fill:#f8f4e8,stroke:#d9a44a
    style Panes fill:#f4f8e8,stroke:#4ad9a4
Loading

Fix All in Codex Fix All in Claude Code

Reviews (2): Last reviewed commit: "fix(settings): match Model Status row la..." | Re-trigger Greptile

… and subtext

The Settings search index had drifted from the panes: Ghost Text Size,
Suggest in Integrated Terminals, and the runtime Status row were not
findable, and several index titles/symbols no longer matched the rows
they navigate to (Toggle Tabby vs Toggle Cotabby, Battery Model vs On
Battery, battery.100 vs battery.100.bolt).

- Index: add ghostTextSize, suggestInIntegratedTerminals, modelStatus;
  align titles and symbols with the actual rows.
- Symbols: the integrated-terminal toggle and the three typo toggles had
  no leading symbol; the Apple Intelligence Availability and models
  folder Path rows were bare LabeledContent with no symbol or subtext.
  All rows now use SettingsRowLabel with a symbol and a one-line
  description.
- Naming: Toggle Tabby -> Toggle Cotabby (stale pre-rename title); Title
  Case for 'Switch Based on Power Source' and 'Also Use LM Studio
  Models'; About's update button gains its symbol.
- Tests: new SettingsIndexTests pin the hygiene rules (every item has a
  title/symbol/keywords, unique ids, and real queries land on recently
  shipped settings) so the index can't silently drift again.
- project.pbxproj regenerated by xcodegen for the new test file.
Comment thread Cotabby/UI/Settings/SettingsIndex.swift
The Engine & Model "Runtime" status row rendered as "Status" while the
search index lists it as "Model Status", so a search result and the row
it navigates to disagreed. Promote the row label to "Model Status" so the
two match and the label stays descriptive in the flat search results list,
outside its pane's "Runtime" section context.
@FuJacob FuJacob merged commit c00cc32 into main Jun 11, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant