جلسه تمام شده است: ۸۶ گزارش در کمتر از شش ساعت مرور شده‌اند، برای همه Priority ثبت شده و میانهٔ زمان تصمیم فقط چهار دقیقه است. یک هفته بعد مشخص می‌شود گزارش «Cannot Reproduce» روی Build اشتباه بررسی شده، سه Duplicate بدون لینک به Canonical بسته شده‌اند و یک نقص با Severity بالا صرفاً به‌دلیل صدای بلندتر Stakeholder وارد Sprint شده است. سرعت بالا بود؛ اما آیا تریاژ واقعاً تصمیم معتبر تولید کرد؟

این راهنما Bug Triage را از یک جلسهٔ گفت‌وگو به Defect Triage Decision Protocol تبدیل می‌کند: Intake Query، Decision Packet، Classification و Severity/Priority Scheme، Authority، Disposition، SLA، Resume/Reopen، Evidence و Correction. هدف، حل نقص یا طراحی راه‌حل در جلسه نیست؛ هدف تولید یک تصمیم محدود، قابل‌ردیابی و قابل‌اصلاح دربارهٔ گام بعدی هر Anomaly است.

خلاصه اجرایی: تریاژ خوب چه خروجی دارد؟

  • ورودی تریاژ در آغاز «Anomaly report» است؛ تا پیش از تحلیل، الزاماً Product defect نیست.
  • Severity، Priority، Classification، Disposition، Status، Resolution و Assignee مفاهیم جدا هستند.
  • هر Decision باید Packet digest، Evidence، rationale، Unknown، Authority، Owner، dueAt و next state داشته باشد.
  • Accepted الزاماً «حتماً Fix می‌شود» نیست؛ Fixed الزاماً Verified نیست؛ Closed نیز صحت محصول را اثبات نمی‌کند.
  • DUPLICATE بدون Canonical link، NEEDS_INFO بدون Resume condition و DEFERRED بدون Review date تصمیم ناقص‌اند.
  • تریاژ می‌تواند Async، Event-driven یا Meeting باشد. ریتم، Timebox و شرکت‌کنندهٔ ثابت نسخهٔ عمومی ندارند.
  • سرعت تریاژ را کنار Reopen، Stale decision، Appeal، Decision reversal و Evidence completeness بسنجید.

هدف جست‌وجو و مرز این راهنما

Intent اصلی اطلاعاتی و اجرایی است: «جلسه تریاژ باگ چیست؟»، «Severity و Priority چه تفاوتی دارند؟»، «چه کسانی باید در Bug Triage باشند؟»، «چطور جلسه طولانی نشود؟» و «Disposition هر باگ چه باشد؟». این صفحه مالک پروتکل تصمیم تریاژ است.

برای چرخهٔ کامل Stateها به چرخه عمر باگ و مدیریت نقص، برای ساخت Report قابل‌بررسی به گزارش باگ قابل بازتولید، برای اجرای تست و ثبت Anomaly به فاز اجرای تست در STLC و برای Facilitation عمومی Review به راهنمای جلسه بازبینی تست مراجعه کنید. این مقاله نه Workflow عمومی را بازطراحی می‌کند و نه Root cause یا Fix design را در تریاژ حل می‌کند.

Bug Triage چیست؟

Bug Triage یک Capability تصمیم‌گیری روی گزارش‌های Anomaly است: ورودی‌های واجد شرایط را شناسایی، Packet را اعتبارسنجی، گزارش را classify، Impact/Risk را بررسی و Disposition/Owner/SLA/next state را ثبت می‌کند. ممکن است خروجی Fix، Investigate، Needs info، Duplicate، Defer، Accept risk، Route، Not applicable یا Close under policy باشد.

در ISTQB CTFL 4.0.1 نیز گزارش اولیه ممکن است بعداً Product defect، false positive یا change request تشخیص داده شود. فرایند حداقلی از ثبت تا تحلیل/طبقه‌بندی، انتخاب پاسخ مناسب و Closure را پوشش می‌دهد. بنابراین «Bug» در نام جلسه نباید نتیجهٔ بررسی را از قبل قطعی کند.

Anomaly، Failure، Defect و Change Request را یکی نکنید

مفهومتعریف عملی در این پروتکلخطای رایج
Observationآنچه در Subject/Context مشخص دیده شدهتفسیر را جای Evidence نوشتن
Anomalyاختلاف یا رویدادی که بررسی می‌خواهداز ابتدا Defect نامیدن
Failureرفتار مشاهده‌شده‌ای که با Oracle معتبر ناسازگار استهر Test fail را Product failure دانستن
Defectنقص منتسب به Work product پس از تحلیلبدون Cause evidence قطعی‌کردن
Testware issueاشکال در Check، Data، Oracle یا Harnessبه Product team تخصیص دادن
Environment issueObservation نامعتبر یا Failure محیطیCannot reproduce و بستن
Change requestرفتار فعلی با Basis سازگار اما انتظار جدید مطرح استSeverity مصنوعی برای گرفتن Priority

Triage Decision Protocol؛ قرارداد مرکزی

triageProtocol:
  id: TRIAGE-CHECKOUT-26
  version: 5
  purpose: "تعیین گام بعدی Anomalyهای Checkout"
  decisionScope: "classification, severity, priority inputs, disposition, owner, SLA"
  intakeQuery: "status=READY_FOR_TRIAGE AND product=SYN-CHECKOUT"
  cutoffAt: 2026-08-13T09:00:00Z
  eligibilityRule: packet-ready-v4
  dedupRule: observation-signature-plus-subject
  serviceClasses: [EXPEDITE, DATE_FIXED, STANDARD, INTANGIBLE]
  decisionVocabulary: [INVESTIGATE, ROUTE, FIX_CANDIDATE, NEEDS_INFO,
    DUPLICATE, DEFER, ACCEPT_RISK, NOT_A_DEFECT, CLOSE]
  claimLimit: "تصمیم گام بعد؛ نه Root cause، Fix، Quality یا Release"
  owner: defect-governance-owner
  unknowns: [real-provider-behavior]
  status: READY_FOR_TRIAGE_DECISION_REVIEW

هویت‌ها را پیش از تصمیم قفل کنید

  • Defect program/policy و Workflow version
  • Classification، Severity، Priority و Release policy version
  • Product/Goal/Risk register و Cutoff
  • Report ID/version و Observation ID
  • Repository، Commit، Build، Deployment، Environment و Data Pack
  • Expected reference، Actual evidence و Artifact digest

تصمیم دربارهٔ BUILD-R25 را نباید با Screenshot یا Log مربوط به BUILD-R24 توجیه کرد. تغییر Report پس از جلسه نیز باید Version جدید بسازد؛ وگرنه Decision record معلوم نمی‌کند بر اساس کدام اطلاعات گرفته شده است.

Intake Query؛ چه چیزی وارد تریاژ می‌شود؟

جلسه نباید با اسکرول‌کردن همهٔ Backlog شروع شود. Query نسخه‌دار باید Cutoff، Product/Service، State، Service class و eligibility را مشخص کند. Emergency incident، Security disclosure، Customer complaint، Test failure و static-analysis finding ممکن است مسیرهای متفاوت داشته باشند.

Intake classRouteچرا؟
Active incidentIncident response؛ link به defect follow-upContain/Recover مقدم است
Security disclosureRestricted security workflowNeed-to-know و coordinated response
Ready product anomalyStandard/expedite triagePacket برای تصمیم حاضر است
Missing evidencePre-triage enrichmentجلسه محل group reading نیست
Known duplicate candidateAsync canonical validationنیاز به جلسهٔ کامل ندارد
Change requestProduct discovery/backlog routeDefect scheme مناسب نیست

Readiness Rule؛ Decision Packet باید چه داشته باشد؟

بخشفیلد حداقلیکاربرد
IdentityReport/version، Observation، Subject/Build/Environmentنسبت‌دادن درست
ExpectationBasis/Oracle referenceتشخیص اختلاف
ActualEvidence artifact و digestبازبینی Observation
ReproductionREPRODUCED/INTERMITTENT/NOT_ATTEMPTED/INCONCLUSIVEنه شرط مطلق پذیرش
ImpactAffected scope و user/business impactSeverity/Priority input
RiskRisk IDs، exposure و uncertaintyتصمیم Contextual
RelationsDuplicate candidates و related changesDedup/attribution
Decision needRequested decision، readyAt و Unknownتمرکز تریاژ

قالب آماده Decision Packet

decisionPacket:
  id: PKT-26
  version: 3
  reportId: ANOM-SYN-26
  reportVersion: 4
  observationId: OBS-SYN-26
  subjectId: checkout-api@C26
  buildId: BUILD-SYN-26
  environmentId: ENV-SYN-26
  expectedRef: ORACLE-IDEMP-v7
  actualEvidence: artifacts/RUN-26/callback.json
  reproductionStatus: INTERMITTENT
  affectedScope: duplicate-callback/ledger
  userOrBusinessImpact: "دو Entry جعلی در Ledger مصنوعی"
  riskIds: [RISK-IDEMP-8]
  severityProposal: S2
  priorityInputs: [exposure-unknown, no-production-data]
  duplicateCandidates: [ANOM-SYN-18]
  relatedChanges: [CHANGE-26]
  workaround: replay-reconciliation-fixture
  unknowns: [real-provider-reordering]
  requestedDecision: INVESTIGATE_OR_DUPLICATE
  readyAt: 2026-08-13T09:00:00Z
  digest: sha256:packet-26
  redaction: synthetic-only

Severity و Priority؛ دو سؤال متفاوت

Severity میزان Impact یا اختلالِ Anomaly را در Subject/Context مشخص می‌کند. Priority ترتیب نسبی رسیدگی را با توجه به Severity، Exposure، Goal، زمان، dependency، workaround، cost of delay و Risk appetite تعیین می‌کند. هیچ‌کدام «واقعیت کاملاً عینی» نیستند؛ باید Scheme، Evidence، Authority و rationale داشته باشند.

پرسش Severityپرسش Priority
چه قابلیت/داده/کاربری مختل است؟نسبت به Workهای دیگر چه زمانی اقدام کنیم؟
Blast radius و recoverability چیست؟Exposure و deadline چیست؟
Workaround وجود دارد؟Cost of delay و dependency چیست؟
Integrity، safety، privacy یا money impact چیست؟Decision authority و Risk appetite چه می‌گویند؟
Evidence و Unknown چه‌اند؟با اطلاعات ناقص چه service class بدهیم؟

Severity Scheme را Contextual و نسخه‌دار کنید

سطح نمونهمعیار محدودنیازمند
S1Impact تعریف‌شدهٔ بحرانی با containment فوریEvidence/Unknown و escalation
S2قابلیت اصلی یا integrity مختل با workaround محدودscope و recoverability
S3Impact متوسط/محلی با workaround معتبرaffected population
S4Impact کوچک طبق Policyعدم اختلاط با Priority
UNKNOWNEvidence برای تعیین سطح کافی نیستInvestigation و dueAt

نام‌ها و تعداد Levelها استاندارد جهانی ثابت نیستند. «Crash همیشه S1» یا «غلط املایی همیشه Low» Context را حذف می‌کند. Crash در fixture داخلی و خطای کوچک نمایش مبلغ در نقطهٔ بسیار پرمواجهه می‌توانند تصمیم‌های متفاوتی بخواهند.

Priority را از Ranking مبهم به Service Class تبدیل کنید

Service classTrigger نمونهPolicy لازم
EXPEDITEImpact فعال و مجوز محدودWIP cap، escalation، exit
DATE_FIXEDتعهد/رویداد نسخه‌دارdate owner و consequence
STANDARDمقایسهٔ عادی Risk/value/costranking rule و review
INTANGIBLEکاهش Risk/debt بدون deadline نزدیکcapacity policy تا گم نشود
INVESTIGATEUnknown برای Priority زیاد استQuestion، owner و dueAt

Priority Matrix ابزار گفتگوست، نه ماشین حقیقت

ماتریس Severity×Exposure می‌تواند Baseline پیشنهاد دهد، اما dependency، deadline، recovery، workaround، compliance context و uncertainty را کامل نمی‌کند. Override باید مجاز اما شفاف باشد: چه کسی، چرا، بر اساس کدام Evidence و تا چه زمانی. برای ساخت مدل Risk و Exposure، راهنمای تست مبتنی بر ریسک مرجع تخصصی است.

priorityProposal = policy(severity, exposure, goalImpact,
  workaround, deadline, dependency, uncertainty)

finalPriority = authorityDecision(
  proposal, evidence, rationale, guardrails, reviewDue)

# نه رأی‌گیری، نه میانگین نظرها و نه بلندترین صدا

Disposition Vocabulary؛ هر خروجی دقیقاً چه تعهدی می‌سازد؟

Dispositionمعنافیلد اجباری
INVESTIGATEQuestion هنوز پاسخ نداردowner، question، dueAt
ROUTECapability/Workflow دیگری مناسب استdestination و accept confirmation
FIX_CANDIDATEکاندید بررسی/برنامه‌ریزی Fix استPriority و owner capability
NEEDS_INFOPacket برای تصمیم کافی نیستmissing info و resume condition
DUPLICATEObservation با Canonical واحد مدیریت می‌شودcanonical ID و merge evidence
DEFERفعلاً اقدام نمی‌شودrationale، owner، review/expiry
ACCEPT_RISKAuthority مجاز Risk را زمان‌دار می‌پذیردimpact، authority، expiry
NOT_A_DEFECTClassification دیگری معتبر استclassification و Evidence
CLOSEشرط Closure Policy برقرار استresolution و closure evidence

قالب آماده Triage Decision

triageDecision:
  id: TD-ANOM-SYN-26
  version: 2
  reportId: ANOM-SYN-26
  packetDigest: sha256:packet-26
  disposition: NEEDS_INFO
  classification: PRODUCT_ANOMALY_UNCONFIRMED
  severity: UNKNOWN
  priority: INVESTIGATE
  rationale: "Evidence از Ledger همان Run حاضر نیست"
  evidenceRefs: [OBS-SYN-26, RUN-SYN-26]
  unknowns: [commit-before-timeout]
  ownerCapability: stateful-investigation
  decisionAuthority: risk-product-owner
  decidedAt: 2026-08-13T09:10:00Z
  dueAt: 2026-08-13T12:00:00Z
  nextAction: collect-same-build-ledger-evidence
  nextState: WAITING_FOR_INFO
  resumeCondition: same-build-ledger-manifest-attached
  claimLimit: "گام بعد؛ نه نبود یا وجود قطعی Product defect"

Accepted، Fixed، Verified و Closed را جدا کنید

State/Resolutionآنچه می‌گویدآنچه نمی‌گوید
ACCEPTEDReport/Classification برای Workflow پذیرفته شدهFix قطعی یا زمان آن
IN_PROGRESSTask مالک فعال داردRoot cause قطعی
FIXEDProducer ادعای Repair داردVerification یا نبود Regression
VERIFIEDVerification طبق Scope Pass شدهکل محصول درست است
CLOSEDClosure rule و Resolution ثبت شدهIssue هرگز برنمی‌گردد
REOPENEDReopen trigger برقرار شدهمقصر بودن Fixer یا Tester

Cannot Reproduce؛ نه رد Report و نه اثبات نبود Defect

Cannot reproduce باید تعداد Attempt، Config، Build، Data، زمان، method و Evidence را ثبت کند. ممکن است علت intermittent behavior، محیط، داده، missing observability، رفع ضمنی یا Report ناقص باشد. خروجی می‌تواند INVESTIGATE، NEEDS_INFO، DEFER با telemetry، یا Close under policy باشد؛ اما «وجود ندارد» استنتاج مجاز نیست.

Duplicate؛ Canonical Record را زنده نگه دارید

  • Similarity کافی نیست؛ Observation، Subject، cause hypothesis و impact را مقایسه کنید.
  • Duplicate به Canonical ID لینک شود و Evidence/affected scope جدید merge یا reference شود.
  • Reporter notification و حق Reopen/Appeal باقی بماند.
  • اگر Canonical بسته شد، Duplicateهای متاثر در Correction scope باشند.
  • تعداد Duplicate را علیه Reporter یا تیم KPI نکنید.

Deferred و Accepted Risk باید منقضی شوند

Backlog گورستان تصمیم نیست. DEFER باید owner، rationale، trigger، reviewDue و stale policy داشته باشد. ACCEPT_RISK علاوه بر این‌ها به Authority مجاز، impact، alternatives، compensating control و expiry نیاز دارد. Priority پایین مجوز پذیرش دائمی Risk نیست.

Authority Matrix؛ چه کسی چه تصمیمی می‌گیرد؟

تصمیمCapability inputAuthority نمونه
Technical classificationDev/Test/Platform evidenceclassification owner
SeverityImpact/Domain/Risk analysisscheme-defined authority
PrioritySeverity، exposure، goal، dependencyproduct/risk authority
Risk acceptancealternatives/impact/expiryauthorized risk owner
Fix designtechnical analysisdelivery capability خارج تریاژ
Closure verificationsame-subject evidenceworkflow-defined reviewer

QA Lead، Product Owner یا Tech Lead به‌صورت جهانی مالک همهٔ این تصمیم‌ها نیستند. Assignee نیز صرفاً صاحب Task است، نه لزوماً Authority. مدل را بر اساس ساختار و Risk خودتان تعریف کنید.

چه کسانی باید در جلسه تریاژ شرکت کنند؟

تعداد یا عنوان ثابت وجود ندارد. Participant را از Packet و Decision need انتخاب کنید: Facilitator/Scribe، Evidence provider، Impact/Risk capability و Authority لازم. دیگران می‌توانند Async comment بدهند یا On-call باشند. چهار نقش ثابت، ۷–۸ نفر سقف جهانی یا حضور همهٔ Reporterها قاعدهٔ معتبر نیست.

نیازحضور/دسترسیاگر حاضر نیست
Observation clarificationReporter یا Evidence کافیNEEDS_INFO با resume
Technical classificationcapability مرتبطRoute/Investigate
ImpactProduct/Support/Domain evidenceSeverity UNKNOWN
Risk acceptanceAuthority یا delegation معتبرتصمیم متوقف/محدود
Conflictindependent reviewerrecusal و escalation

Async، Meeting یا Event-driven؟

Modeمناسب برایGuardrail
AsyncPacket کامل، Decision کم‌ابهام، timezone متفاوتSLA، audit trail، escalation
Scheduled meetingBatch محدود با چند Authority/تعارضagenda query، cutoff، WIP
Event-drivenExpedite یا Risk triggertrigger/authority/exit روشن
Hybridenrichment Async، تصمیم پیچیده synchronousعدم تکرار group reading

جلسه هدف نیست؛ Decision latency و validity هدف‌اند. اگر Async ظرف SLA تصمیم معتبر می‌دهد، دعوت جلسه اتلاف است. اگر تعارض Authority یا Unknown پرریسک است، comment thread ممکن است کافی نباشد.

Session Contract برای جلسه‌های لازم

triageSession:
  id: TS-26
  version: 2
  mode: HYBRID
  agendaQuery: TRIAGE-CHECKOUT-26@cutoff
  cutoffAt: 2026-08-13T09:00:00Z
  serviceClass: STANDARD
  participantCapabilities: [facilitation, evidence, impact, technical]
  decisionAuthorities: [risk-product-owner, classification-owner]
  conflictRule: evidence-first-plus-escalation
  recusalRule: declared-interest-or-authorship-bias
  timeboxPolicy: question-and-risk-based
  parkingRule: create-investigation-with-owner-dueAt
  queueId: Q-TRIAGE-SYN
  wipLimit: 12
  startedAt: 2026-08-13T09:05:00Z
  finishedAt: 2026-08-13T09:42:00Z
  scribe: decision-recorder
  auditLog: artifacts/TS-26/decisions.json
  status: CLOSED_WITH_ALL_ITEMS_DISPOSITIONED

Timebox؛ ۳ یا ۵ یا ۱۵ دقیقه قانون عمومی نیست

Timebox باید مانع Solution design و Root-cause deep dive شود، نه اینکه Decision ناقص را تحمیل کند. برای Standard item می‌توان limit کوتاه داشت؛ در Risk بالا یا Authority conflict، خروجی درست ممکن است INVESTIGATE با Owner باشد. اگر زمان تمام شد، Parking record باید Question، Evidence gap، Owner و dueAt بسازد.

آمادگی قبلی؛ ۲۴ ساعت نسخهٔ عمومی نیست

Lead time آمادگی به Service class، timezone، حجم Packet و Risk بستگی دارد. Expedited item نمی‌تواند ۲۴ ساعت صبر کند؛ Standard batch شاید بیشتر از یک روز نیاز داشته باشد. معیار درست این است که Packet در readyAt کامل باشد و Authority زمان کافی طبق SLA/Policy داشته باشد.

بحث Root Cause و طراحی Fix را کجا ببریم؟

تریاژ فقط به‌اندازه‌ای Cause/Complexity را بررسی می‌کند که Classification، Routing و Priority ممکن شود. Root-cause analysis، Architecture design و implementation planning Work item جدا با Capability و Evidence خود هستند. «این تابع را rewrite کنیم» اگر برای Disposition لازم نیست، Parking می‌شود.

Blameless با Accountability تناقض ندارد

جلسه نباید برای تحقیر Reporter، Author یا Tester استفاده شود. اما Blameless به معنی حذف Owner، Decision record یا بررسی Action نیست. زبان مناسب روی Observation، Context، Control و next action تمرکز دارد؛ رفتار نامناسب یا تخلف نیز باید از مسیر امن و دارای صلاحیت رسیدگی شود، نه دادگاه بداههٔ تریاژ. برای کنترل Anchoring، Authority bias و Confirmation bias نیز راهنمای سوگیری شناختی در تست نرم‌افزار را ببینید.

Conflict، Recusal و Appeal

  • اختلاف Severity را با Scheme/Evidence حل کنید؛ نه رأی‌گیری عنوان‌ها.
  • کسی که تعارض منافع یا Bias مستقیم دارد آن را اعلام و در صورت Policy از Authority کنار برود.
  • اگر Authority حاضر نیست، delegation نسخه‌دار یا Escalation لازم است.
  • Reporter و affected stakeholder باید مسیر Appeal با Evidence جدید داشته باشند.
  • Appeal علیه فرد KPI نشود و history تصمیم حفظ شود.

Reopen Policy؛ بازشدن مجدد شکست اخلاقی نیست

TriggerActionحفظ شود
Failure روی corrected buildREOPEN و link به verificationFix/Verify evidence
Scope جدید همان causeExpand یا related report طبق Policyaffected scope history
Evidence جدید برای Cannot reproduceResume investigationattempt history
Canonical duplicate نامعتبرUnlink/reclassifymerge decisions
Decision policy تغییر کردهReview stale decisionseffectiveFrom و supersedes

SLA؛ زمان پاسخ را با Service Class ببندید

SLA تریاژ زمان Fix نیست. می‌تواند زمان تا initial disposition، زمان تا information request یا time-to-escalation باشد. Clock start/pause/stop، timezone، business calendar و overdue outcome را بنویسید. Median تنها Tail و Itemهای Stale را پنهان می‌کند؛ percentile و age distribution را هم ببینید.

Correction؛ اگر تصمیم بر Packet اشتباه گرفته شد

correction:
  id: CORR-TRIAGE-26
  detectedAt: 2026-08-13T12:20:00Z
  cause: "Packet BUILD-SYN-25 به Decision BUILD-SYN-26 متصل بود"
  invalidPacket: PKT-25
  affectedDecisions: [TD-ANOM-SYN-26]
  affectedWorkflowItems: [FIX-CANDIDATE-26]
  containment: "Decision INVALID و Work متوقف شد"
  revalidation: PKT-26R1
  correctedDisposition: NEEDS_INFO
  republishStatus: COMPLETE
  notified: [reporter, owner, authority]
  prevention: packet-build-digest-rule
  status: CLOSED

ویرایش بی‌صدای Priority یا Resolution کافی نیست. Decision قبلی، downstream Work، Release evidence، Duplicate links و Dashboardهای متاثر باید پیدا و اصلاح شوند. History باید نشان دهد چه چیزی، چه زمانی و با کدام Authority تغییر کرده است.

آزمایشگاه مصنوعی Checkout فارسی

تمام مثال‌ها به `SYN-CHECKOUT` جدا و جعلی تعلق دارند: Order، PaymentAttempt، PSP Stub، Callback، Ledger و Reconciliation مصنوعی؛ timeout قبل/بعد از fake commit، Callback تکراری/دیر/جابجا و Failureهای Testware/Environment. هیچ شبکه، Production، شرکت، تیم، کاربر، پرداخت، بانک یا PSP واقعی وجود ندارد.

بعدFixture مصنوعیTriage input
MoneyIRR خیالی canonical؛ تومان فقط نمایش برچسب‌دارImpact و Basis جدا
Digitsفارسی، عربی و لاتینConfig و affected scope
Unicode/RTLNFC، RTL/LTR و stable IDActual evidence و Browser config
TimeUTC، Asia/Tehran و جلالی فقط نمایشیObservedAt/Cutoff روشن
Stateduplicate/late/reordered callbackReproduction/Unknown
IdentityTenant/Order/Attempt/Event/Ledger/Run/Build/Evidence جداPacket به same-Build متصل

هیچ نام، موبایل، ایمیل، IP، حساب، PAN، CVV2، OTP، Cookie، Token، Credential، Screenshot یا Log واقعی استفاده نشده و هیچ ادعای بانکی، مالی، حقوقی، مالیاتی، امنیتی، حریم خصوصی یا انطباق دربارهٔ ایران مطرح نیست.

آزمایش اجرایی SYN-DEFECT-TRIAGE-DECISION-۰۱

یک Validator مستقل، قطعی و بدون dependency با Node.js v26.۷.۰ اجرا شد. Dashboard سطحی ۸۶/۸۶ Report reviewed، ۸۶ Decision و میانهٔ چهار دقیقه را PASS نشان می‌داد. ممیزی قرارداد ۱۵۸ قاعده داشت.

گروهتعدادنمونه کنترل
Identity۱۸Policy، Workflow، Schemes، Build، Environment، Cutoff
Protocol۱۸Purpose، Scope، Query، Eligibility، Dedup، Vocabulary، Limit
Packet۲۴Report/Observation/Subject، Expected/Actual، Impact، Risk، digest
Decision۲۰Disposition، classification، severity، priority، authority، resume
Session۲۰Mode، agenda، capability، conflict، recusal، WIP، audit
Governance۱۸SLA، Reopen، Appeal، expiry، guardrail، Correction
ادعاهای ممنوع۳۳Severity=Priority، role/time/frequency ثابت، guarantees، AI closure
روابط بین‌فیلدی۷Packet/Report/Build، SLA، Duplicate، Needs-info، Authority

رکورد سطحی با ۱۵۳ Finding به HOLD رفت: همهٔ ۱۱۸ فیلد قرارداد و ۳۳ ادعای ممنوع Fail شدند و دو رابطهٔ SLA/Authority نیز نقض شد. پنج رابطهٔ دیگر به‌دلیل نبود داده یا Disposition شرطی فعال نشدند؛ شمارش برای «همه‌چیز قرمز» شدن دست‌کاری نشد.

fixture: SYN-DEFECT-TRIAGE-DECISION-01
rules: 158

superficial dashboard:
  reviewed: 86/86
  decisions: 86
  medianMinutes: 4
  dashboardVerdict: PASS
  contractStatus: HOLD
  findings: 153

corrected protocol:
  packet: PKT-26 / sha256:packet-26
  report: ANOM-SYN-26
  build: BUILD-SYN-26
  disposition: NEEDS_INFO
  resumeCondition: same-build-ledger-evidence
  decisionAuthority: risk-product-owner
  structuralFindings: 0
  status: READY_FOR_TRIAGE_DECISION_REVIEW

نسخهٔ اصلاح‌شده هویت‌ها، Schemeها، Intake، Packet و digest، Decision Authority، SLA، NEEDS_INFO/Resume، Session و Correction را کامل کرد و با صفر Finding به `READY_FOR_TRIAGE_DECISION_REVIEW` رسید. این وضعیت فقط آمادگی ساختاری تصمیم برای Review است؛ نه صدق Evidence، وجود قطعی Defect، درست‌بودن Severity/Priority، کفایت Fix، Product quality یا Release readiness.

شاخص‌های تریاژ؛ سرعت را با کیفیت تصمیم جفت کنید

MeasureCountermeasureخطر تفسیر
Time to initial dispositionEvidence completenessتصمیم سریعِ ضعیف
Queue age percentileService-class mixExpedite میانگین را تحریف می‌کند
Ready-first-timeReporter burden/accessibilityGate سخت گزارش را سرکوب می‌کند
Needs-info rateresume success/ageکم بودن می‌تواند Approval سطحی باشد
Duplicate ratecanonical-link validityReporter ranking ممنوع
Decision reversalnew-evidence rateتغییر همیشه خطا نیست
Reopen rateverification scopeسرزنش Fixer/Tester
Stale deferred agereview/expiry coverageBacklog کم با حذف صوری
Appeal outcomeequity/access reviewاعتراض زیاد یا کم به‌تنهایی خوب/بد نیست
Correction closureaffected-decision completenessClose اداری کافی نیست

Automation و AI در Defect Triage

Automation می‌تواند Packet readiness، duplicate candidate، SLA، stale decision و required field را بررسی کند. AI می‌تواند classification/Priority/route پیشنهاد دهد و مشابه‌ها را نشان دهد؛ اما پیشنهاد با تصمیم فرق دارد. حتی راهنمای رسمی Jira Triage Agent پیشنهادها را برای Accept/Reject کاربر ارائه می‌کند. Context، Policy و Authority انسانی همچنان لازم‌اند.

  • AI به‌تنهایی Report را Close، Risk را Accept یا Reporter را رتبه‌بندی نکند.
  • Model/prompt/policy/source و confidence نسخه‌دار باشند.
  • Reasoning proposal، Unknown و Human decision ثبت شوند.
  • اطلاعات شخصی، امنیتی و Production فقط طبق access/redaction policy مصرف شوند.
  • مسیر Appeal، correction و Manual fallback حفظ شود.

۳۴ ضدالگوی Bug Triage

ضدالگوخطراصلاح
هر Anomaly=DefectClassification از پیش قطعیanomaly-first
Severity=PriorityImpact و ordering مخلوطSchemeهای جدا
High severity=High priority همیشهExposure/goal حذفcontextual policy
Low severity=Low priority همیشهdeadline/visibility حذفpriority inputs
Priority حقیقت عینیAuthority پنهانrationale/version
بلندترین صداBias/قدرتevidence+authority
QA مالک هر دو SchemeRole universaldecision rights
PO مالک همهٔ تصمیم‌هاtechnical/risk authority مبهمauthority matrix
Assignee=Authoritytask/decision اختلاطseparate fields
Accepted=حتماً Fixتعهد کاذبdisposition semantics
Rejected=Reporter اشتباهسرزنش/سرکوبclassification+rationale
Cannot reproduce=نیستUnknown پنهانattempt/config/evidence
Duplicate بدون CanonicalEvidence گمlink/merge/reopen
Deferred بدون Reviewگورستان Backlogowner/expiry
Fixed=Verifiedادعای Producerindependent verification rule
Closed=Product correctClaim گستردهclosure limit
Triage حتماً جلسه استCeremonymode fit
روزانه برای همهریتم نامتناسبdemand/SLA
هفتگی برای همهRisk delayservice class
ارسال دقیقاً ۲۴ ساعت قبلقاعدهٔ ContextlessreadyAt policy
Timebox ثابت پنج دقیقهتصمیم ناقصquestion/risk-based
چهار Role ثابتعنوان به‌جای Capabilitydecision need
افراد بیشتر=بهترهزینه/حاشیهminimum capabilities
افراد کمتر=همیشه بهترAuthority/Evidence غایبon-call/delegation
Blameless=بدون AccountabilityAction بی‌Ownersystem focus+ownership
Root cause در Triageجلسه عمیقinvestigation work item
Solution design در TriageWIP و delayparking rule
رأی‌گیری SeverityPopularityscheme/evidence/authority
صفر Backlog=کیفیتClose صوریoutcome/guardrails
سرعت=کیفیتGoodhartdecision validity
همهٔ Defectها Fix شوندRisk/value نادیدهexplicit disposition
AI auto-closeAuthority واگذارhuman review
Edit بی‌HistoryAudit قطعversioned decision
Correction فقط Fielddownstream آلودهaffected-decision analysis

چک‌لیست ممیزی تریاژ نقص

  1. Program، Product، Goal، Risk و Defect Policy نسخه‌دارند؟
  2. Workflow و Classification/Severity/Priority Scheme مشخص‌اند؟
  3. Release Policy از Triage Decision جداست؟
  4. Repository، Commit، Build، Environment، Data و Cutoff قفل‌اند؟
  5. Protocol ID/version، Purpose و Decision scope دارد؟
  6. Intake Query و Eligibility rule قابل‌بازتولیدند؟
  7. Dedup rule پیش از دیدن نتیجه تعریف شده است؟
  8. Service class و Decision vocabulary روشن‌اند؟
  9. Claim limit نوشته شده است؟
  10. Packet ID/version و Report/Observation identity دارد؟
  11. Expected ref و Actual Evidence همان Subject‌اند؟
  12. Reproduction status تشخیصی و محدود است؟
  13. Affected scope، Impact و Risk IDs ثبت شده‌اند؟
  14. Severity فقط Proposal و مبتنی بر Scheme است؟
  15. Priority inputs و Unknownها دیده می‌شوند؟
  16. Duplicate candidate و related change لینک‌اند؟
  17. Packet digest به Decision متصل است؟
  18. Disposition و Classification جدا هستند؟
  19. Severity و Priority rationale دارند؟
  20. Evidence refs و Unknown در Decision حفظ‌اند؟
  21. Owner capability و Decision authority جدا هستند؟
  22. decidedAt، dueAt، next action و next state موجودند؟
  23. NEEDS_INFO دارای Resume condition است؟
  24. DUPLICATE دارای Canonical ID است؟
  25. DEFER/ACCEPT_RISK Owner و Expiry دارند؟
  26. Session Mode و participant capabilities متناسب‌اند؟
  27. Conflict، Recusal، Parking و Audit rules تعریف شده‌اند؟
  28. Queue/WIP و SLA clock policy مشخص‌اند؟
  29. Reopen و Appeal امن و Evidence-based هستند؟
  30. Correction affected decisions و republish را پوشش می‌دهد؟
  31. Measureها Guardrail دارند و افراد را رتبه‌بندی نمی‌کنند؟
  32. AI فقط پیشنهاد می‌دهد و Auto-close/Risk acceptance ندارد؟

برنامه ۳۰ روزه برای اصلاح Defect Triage

بازهکارخروجی
روز ۱–۵یک Product/Queue را Baseline و Decisionها را نمونه‌برداری کنیدCurrent state و Unknown
روز ۶–۱۰Schemeها، Intake، Packet و Vocabulary را نسخه‌دار کنیدProtocol v1
روز ۱۱–۱۵Authority، SLA، Resume/Duplicate/Defer rules را فعال کنیدDecision contract
روز ۱۶–۲۰Async/Meeting routing و Audit log را Pilot کنیدSession/Queue evidence
روز ۲۱–۲۵Reopen، Appeal و Correction drill اجرا کنیدAffected-decision path
روز ۲۶–۳۰Measureها و Guardrailها را بازبینی کنیدKeep/Adapt/Stop و Backlog محدود

Pilot با کاهش مدت جلسه موفق نمی‌شود. موفقیت یعنی Packetهای قابل‌تصمیم بیشتر، Decisionهای دارای Authority/Evidence، Duplicateهای متصل، Needs-infoهای Resumeشده، Deferredهای غیرکهنه و Correction قابل‌اجرای بهتر—بدون سرکوب Report یا افزایش بار نامرئی Reporter.

جمع‌بندی: جلسه را به Decision Protocol تبدیل کنید

ضدالگوی اصلی Bug Triage نه صرفاً سرزنش، جمعیت زیاد یا بحث طولانی است؛ نبود یک قرارداد تصمیم است. وقتی Intake، Packet، Scheme، Authority، Disposition، SLA، Resume/Reopen و Correction روشن باشند، بخشی از تریاژ Async می‌شود، جلسه‌های باقی‌مانده روی Unknown و تعارض واقعی تمرکز می‌کنند و هیچ تیک سبزی جای Evidence را نمی‌گیرد.


سوالات متداول درباره جلسه تریاژ نقص

جلسه تریاژ باگ چیست و چه خروجی باید داشته باشد؟

تریاژ Capability تحلیل و تصمیم روی Anomaly report است. خروجی حداقلی شامل Classification، Severity/Priority با rationale، Disposition، Owner capability، Authority، Evidence/Unknown، dueAt، next state و در موارد شرطی Resume/Canonical/Expiry است.

تفاوت Severity و Priority باگ چیست؟

Severity شدت Impact را در Context مشخص می‌کند؛ Priority ترتیب نسبی اقدام را با Severity، Exposure، Goal، deadline، dependency، workaround، uncertainty و Risk appetite می‌سازد. سطح بالا در یکی الزاماً سطح بالا در دیگری نیست.

چه کسانی باید در Bug Triage باشند؟

عنوان و تعداد ثابت وجود ندارد. فقط Capabilityهای لازم برای Evidence، Technical classification، Impact/Risk، Facilitation و Authority تصمیم را حاضر یا On-call کنید. Reporter می‌تواند با Packet کامل Async مشارکت کند؛ Authority نیز باید حاضر یا delegation معتبر داشته باشد.

هر چند وقت یک‌بار جلسه تریاژ برگزار شود؟

ریتم عمومی روزانه یا هفتگی وجود ندارد. Arrival rate، Risk، Service class، Queue age و SLA را ببینید. موارد کم‌ابهام Async، Expediteها Event-driven و Batchهای دارای تعارض در جلسهٔ زمان‌بندی‌شده تصمیم‌گیری شوند.

چطور از طولانی‌شدن جلسه تریاژ جلوگیری کنیم؟

Intake Query و Decision Packet را پیش از جلسه آماده، group reading را حذف، فقط Capability/Authority لازم را دعوت و Root cause/Fix design را Park کنید. Timebox باید Risk-based باشد و هر Item با Decision یا Investigation دارای Owner و dueAt خارج شود.

دیدگاهتان را بنویسید