Example: Relevance Assessment Workflow
Four representative cases: three showing how the verdict changes depending on what the code investigation finds, and one showing the skill halting before any investigation happens.
Case 1: Bug silently fixed by a refactor (No longer relevant)
User request: "Is PM-XXXX still relevant?"
Ticket: Bug: a cache extension method calls cache.Get(key) outside a try/catch, so a cache connection failure throws an unhandled exception instead of returning null.
Workflow:
- Fetch PM-XXXX via
get_issue→ extract the described behavior and identifiers:TryGetValue,DistributedCacheExtensions,cache.Get. The ticket links a commit inbitwarden/server, so repo scope is explicit — no confirmation needed.serverresolves to a sibling checkout. - Grep in
server/src/→DistributedCacheExtensions.csexists,TryGetValuepresent. - Read the file → the method exists but has zero callers in the codebase — the code path described by the ticket is dead.
git logon the file → confirms no callers were added recently; the extension was made obsolete by a service refactor.
Verdict: No longer relevant. TryGetValue still has the exception-swallowing bug described in the ticket, but the method has no callers — the code path it describes is unreachable. Safe to close with a note that the method can be deleted.
Case 2: Task implementation gap confirmed (Still relevant)
User request: "Is PM-YYYY still relevant?"
Ticket: Task: when only one member/group has "Can Manage" permission on a collection, that row should be disabled (greyed out) with a tooltip, rather than allowing removal and showing a validation error on save.
Workflow:
- Fetch PM-YYYY via
get_issue→ identifiers extracted:validateCanManagePermission,managePermissionRequired,AccessItemView,readonly. No repo is named; the Angular component names and web-vault framing point toclients. Proposeclientswith that reasoning, user confirms. - Grep in
clients/apps/web/src/→validateCanManagePermissionfound incollection-dialog.component.ts:564and wired into the form at lines 331–333. The i18n keymanagePermissionRequiredresolves to "At least one member or group must have can manage permission." - Read
collection-dialog.component.html→ an error div shows themanagePermissionRequiredmessage when the validator fires — the error-on-submit path is what's there. - Check
AccessItemViewmodel → has areadonlyflag that disables the permission editor and keeps the row selected, but no logic in the component or template computes "this is the last Manage-permission row → setreadonly: true." git log --sinceon both files → no recent commits touching the disabled-row behavior.
Verdict: Still relevant. The current implementation is the error-on-submit model: validateCanManagePermission blocks save when no Manage permission exists, showing an error at collection-dialog.component.html:91-96. The required behavior — proactively disabling the last Manage row with a tooltip — has not been implemented. AccessItemView.readonly could support it, but the reactive logic that sets it has never been written.
Case 3: Spike obsoleted by later architectural work (No longer relevant)
User request: "Is PM-ZZZZ still relevant?"
Ticket: Spike from 2022: ~7,000 users have Premium = false but a future PremiumExpirationDate. The referenced code in UserService.cs sets Premium = false while preserving the expiration date. Investigate whether this is broken or intentional.
Workflow:
- Fetch PM-ZZZZ via
get_issue→ identifiers extracted:DisablePremiumAsync,PremiumExpirationDate,Premium = false. The ticket citesUserService.csbut names no repo — a file path alone is weak evidence, so proposeserverand confirm before searching. - Grep in
server/src/→DisablePremiumAsyncstill present atUserService.cs:894; setsuser.Premium = falsewithuser.PremiumExpirationDate = expirationDate— same as described. - Search how
Premiumis used for access control →ValidateUserPremiumAsyncinLicensingService.csreturnsuser.Premiumdirectly for cloud users. No check onPremiumExpirationDate. - Find a more recent
UserPremiumAccessViewSQL view →PersonalPremiummapped directly fromU.[Premium]; expiration date not consulted.
Verdict: No longer relevant as an open investigation. The inconsistency (Premium = false with a future PremiumExpirationDate) still exists in the data, but later billing system work answered the spike's question in code: PremiumExpirationDate is billing lifecycle metadata and plays no role in access gating on cloud — user.Premium is the sole gate. The data inconsistency has no user-facing impact. Safe to close with a note documenting this as intentional design.
Case 4: Required repo not available (Halt, no verdict)
User request: "Is PM-WWWW still relevant?"
Ticket: Bug: on Android, the autofill accessibility service stops offering suggestions after the device is rotated while the inline suggestion sheet is open.
Workflow:
- Fetch PM-WWWW via
get_issue→ identifiers extracted:AutofillService, inline suggestion, configuration change. No repo named; the platform framing points toandroid. Proposeandroidwith that reasoning, user confirms. - Resolve
androidto a path → not the current working directory, and no sibling directory of that name exists.git -C ../android rev-parse --show-toplevelfails. - Ask whether to clone
bitwarden/android. User declines. - Stop. No searches are run.
Outcome: No verdict. Report that the assessment could not be completed because android is not available locally and cloning was declined.
Note what is deliberately not done here: the skill does not fall back to grepping whatever repos happen to be on disk, and does not return "Cannot determine". Grepping an absent repo yields zero matches, which looks exactly like the code having been deleted — enough to produce a confident "No longer relevant" on a live bug. The same halt applies if the ticket had spanned android and clients and only android were missing: a partial search is not downgraded to a weaker verdict, it is refused.