Conversation
|
Thanks for contributing an extension to Vicinae! 👋 Before publication, this pull request receives two reviews:
✅ Ready for human review. The automated reviewer approved the latest commit and a maintainer has been notified. No blocking findings remain on the latest commit. The automated reviewer examines only the current commit. New commits invalidate its previous decision and start another review. |
clankus-aurelius
left a comment
There was a problem hiding this comment.
Found one publication-blocking data-loss issue and two correctness problems affecting persistence and bulk tag assignment.
Automated review found 1 publication-blocking issue.
This is an AI-generated first pass and may be mistaken. If a finding is unclear or incorrect, reply in the relevant thread and mention @aurelleb.
| } catch { | ||
| return; |
There was a problem hiding this comment.
🔴 Blocking — Failed workspace scans are treated as complete
Rule: CORRECTNESS-001
A root readdir failure is swallowed, so scanWorkspaceProjects returns an empty, non-truncated result. useProjectDiscovery consequently marks the unavailable workspace as completely scanned, replaces its cached projects, and allows pruneMissingProjects to permanently remove its pins and recents—for example when a removable or network workspace is temporarily unavailable.
Suggested resolution: Propagate or explicitly record a root-directory read failure so scanWorkspace returns complete: false. Preserve the previous project set and exclude that root from pruning until a successful scan occurs.
| const current = getOrCreateSlot(key, initialValue); | ||
| // Writes before LocalStorage loads would persist defaults and skip hydration. | ||
| if (!current.hydrated) { | ||
| return; | ||
| } |
There was a problem hiding this comment.
🟠 Warning — Pre-hydration writes are silently discarded
Rule: CORRECTNESS-001
Every setter returns without writing while its individual key is loading. New settings and tag screens remain interactive without checking those hydration states, so an immediate tag creation, preference change, reset, or settings import can report success while some or all changes are lost.
Suggested resolution: Queue writes made during hydration and apply them after the stored value loads, or keep all affected mutation UI disabled until every relevant key is hydrated. Do not silently resolve setter calls that performed no write.
| <ActionPanel> | ||
| <Action icon={Icon.Check} onAction={save} shortcut={{ key: "s", modifiers: ["cmd"] }} title="Save Assignments" /> | ||
| <Action icon={Icon.CheckList} onAction={selectAllFiltered} title="Select All Shown" /> | ||
| <Action icon={Icon.XMarkCircle} onAction={clearFiltered} title="Clear Selection" /> |
There was a problem hiding this comment.
🟠 Warning — “Select All Shown” includes projects hidden by search
Rule: CORRECTNESS-001
selectAllFiltered operates only on the workspace-filtered collection; Vicinae applies text search afterward, as the preceding comment acknowledges. Using this action while searching therefore assigns the tag to projects that are not shown.
Suggested resolution: Either make the bulk operation honor the current text search or rename both occurrences of the action to state that it selects every project in the workspace filter, and clarify that search does not limit it.
Fail root workspace reads as incomplete scans so pins survive, queue pre-hydration writes instead of dropping them, and scope bulk select-all naming to the workspace filter.
clankus-aurelius
left a comment
There was a problem hiding this comment.
All previously reported issues are resolved by the incremental changes. No new actionable issue was introduced.
Automated extension review passed. A maintainer review is still required.
This is an AI-generated first pass and may be mistaken. If a finding is unclear or incorrect, reply in the relevant thread and mention @aurelleb.
|
@aurelleb automated review passed for |
Summary
Screenshots