Skip to content

Exact Label Matching for Phase Detection

Quick Start: Sequant’s phase mapper now uses exact label equality instead of substring matching, preventing labels like "docstring" from accidentally triggering the docs pipeline.

Previously, phase detection used label.includes(targetLabel) to check GitHub issue labels against known label sets. This caused substring collisions where unrelated labels could trigger incorrect workflows:

Label on IssueWould MatchTriggered PipelineCorrect?
docstringdocsDocs (skip spec)No
debuggingbugBug fix (skip spec)No
patchworkpatchBug fix (skip spec)No
webinarwebUI (add test phase)No
complexitycomplexQuality loopNo
insecuritysecuritySecurity reviewNo

Now all label checks use exact equality (===), so only labels that exactly match a known value will trigger their associated pipeline.

All label arrays in the phase mapper use exact matching:

Label SetRecognized LabelsEffect
BUG_LABELSbug, fix, hotfix, patchSkip spec phase
DOCS_LABELSdocs, documentation, readmeSkip spec phase
UI_LABELSui, frontend, admin, web, browserAdd test phase
COMPLEX_LABELScomplex, refactor, breaking, majorEnable quality loop
SECURITY_LABELSsecurity, auth, authentication, permissions, adminAdd security-review phase

No changes to how you label issues. Labels must now match exactly (case-insensitive) to trigger pipeline behavior. For example:

  • bug → triggers bug fix pipeline
  • Bug → triggers bug fix pipeline (case-insensitive)
  • debugging → does not trigger bug fix pipeline
  • docs → triggers docs pipeline
  • docstring → does not trigger docs pipeline

Issue isn’t getting the expected pipeline

Section titled “Issue isn’t getting the expected pipeline”

Symptoms: An issue with a label like documentation-update runs the standard spec → exec → qa pipeline instead of the docs shortcut.

Solution: Check that the label exactly matches one of the recognized labels listed above. Compound labels like documentation-update won’t match — use documentation instead.

Symptoms: After upgrading, an issue that previously got a shortened pipeline now gets the full pipeline.

Solution: This is likely because the old substring matching was triggering on a partial match. Review the issue’s labels and ensure they use one of the exact recognized values.


Generated for Issue #461 on 2026-03-26