Bugzilla Triage
Guidance for triaging bugs against the default Bugzilla 5.0+/Harmony data
model: status workflow, resolutions, dependency trees, and duplicates. Every
rule below is sourced from Bugzilla's public documentation or the public
bugzilla/harmony source tree — see the reference/ files for full quotes
and links. If a convention isn't cited to one of those sources, treat it as
outside this skill's scope rather than assumed.
Status and resolution
Bugzilla's default install workflow only permits specific status
transitions, enforced in code (Bugzilla::Bug::_check_bug_status throws
illegal_bug_status_transition for anything not in the graph) and defined
by Bugzilla::Install::STATUS_WORKFLOW:
(none) -> UNCONFIRMED | CONFIRMED | IN_PROGRESS
UNCONFIRMED -> CONFIRMED | IN_PROGRESS | RESOLVED
CONFIRMED -> IN_PROGRESS | RESOLVED
IN_PROGRESS -> CONFIRMED | RESOLVED
RESOLVED -> UNCONFIRMED | CONFIRMED | VERIFIED
VERIFIED -> UNCONFIRMED | CONFIRMED
When triaging:
- Don't propose a transition outside this graph (e.g.
IN_PROGRESSstraight toVERIFIED) — it isn't legal in the default workflow. RESOLVEDrequires a resolution; moving offRESOLVED/VERIFIEDback to an open status clears it (_check_bug_statusinBugzilla::Bug).- A closed bug reopened to
UNCONFIRMEDalso resetseverconfirmed. IN_PROGRESScan require a target milestone if the installation hasmusthavemilestoneonacceptenabled — check before flagging a triage as incomplete over a missing milestone.
Resolutions shipped by default are FIXED, INVALID, WONTFIX,
DUPLICATE, and WORKSFORME (plus the empty value an open bug carries) —
the set Bugzilla::DB::ENUM_DEFAULTS seeds at install. MOVED is not a
Harmony default, though older releases and many long-lived installations
carry it. Resolutions are admin-configurable and the Bugzilla docs
deliberately don't fix a canonical list, so confirm against the actual
installation before asserting a resolution exists. See
reference/status-and-resolution.md for the sourced list and caveats.
Dependency trees (Depends On / Blocks)
"Depends On" and "Blocks" are inverse views of the same relationship. The
docs define both directions in one sentence: "If this bug cannot be fixed
unless other bugs are fixed (depends on), or this bug stops other bugs being
fixed (blocks), their numbers are recorded here." (2.3. Understanding a
Bug). In code this is the
dependencies entry of Bugzilla::Bug::BUG_RELATIONS (dependson /
blocked fields); Harmony also tracks a separate regressions relation
(regressed_by / regresses) — don't conflate the two when reading a bug's
relationships.
Before adding a dependency edge, Bugzilla itself walks the existing tree
recursively (_check_relationship_loop in Bugzilla::Bug) and refuses to
create a cycle. When triaging a dependency tree by hand, apply the same
check: a bug cannot depend on something that (transitively) already depends
on it.
"Blocker" is not the same field as "Blocks". Severity blocker is a
per-bug field value; the docs describe the scale as running "from blocker
("application unusable") to trivial ("minor cosmetic issue")" (2.3.
Understanding a Bug), independent of whether the
bug structurally blocks any other bug. A bug can be severity=blocker with an
empty Blocks list, and a bug with a long Blocks list can be severity=normal.
Judge "is this a blocker" on severity/impact; judge "what does this block"
on the dependency tree — don't use one to infer the other.
Duplicate detection
Bugzilla surfaces likely duplicates at file time by searching existing
summaries in the same product/component as the reporter types (enter_bug.cgi).
When triaging a report that looks like a duplicate:
- Marking a bug DUPLICATE requires the target bug ID;
Bugzilla::Bug::_check_dup_idresolves the ultimate duplicate target (sodup_idalways points at a non-duplicate bug) and refuses to create a duplicate loop. set_dup_idforces the resolution toDUPLICATEif it isn't already, and adds aCMT_HAS_DUPE-typed comment to the target bug recording the link.- Don't mark something a duplicate just because it's similar — confirm the underlying root cause matches, since the DUPLICATE resolution merges CC and vote weight onto the target bug.
See reference/dependencies-and-duplicates.md for source snippets.