@windyroad/itil 0.21.7 → 0.22.0-preview.243
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -404,6 +404,8 @@ After writing the new `.open.md` file, regenerate `docs/problems/README.md` to i
|
|
|
404
404
|
|
|
405
405
|
**Mechanism**: use the same rendering rules as Step 7's P062 block (glob `docs/problems/*.open.md` / `*.known-error.md` / `*.verifying.md` / `*.parked.md`; rank open/known-error by WSJF; list verifyings in the Verification Queue ordered by release age; list parkeds in the Parked section). The refresh is a **render, not a re-rank** — existing WSJF values on the other ticket files are trusted per P062's established discipline. Only the new ticket's own WSJF is consumed from its freshly-written file.
|
|
406
406
|
|
|
407
|
+
**WSJF Rankings tie-break sort (P138)**: rows in the WSJF Rankings table are sorted by the multi-key `(WSJF desc, Known-Error-first, Effort-divisor asc, Reported-date asc, ID asc)` so the rendered top-to-bottom row order matches `/wr-itil:work-problems` SKILL.md Step 3's tie-break selection 1:1. The first key (WSJF desc) sets the tier; within a tier the next three keys are the canonical tie-break ladder (Known Error before Open; smaller effort before larger; older Reported date before newer); ID asc is the deterministic final tiebreaker for full-tie cases. The table MUST include a `Reported` column so the third tie-break input is visible to README readers — without it, users cannot reconcile the rendered order against the orchestrator's selection. <!-- TIE-BREAK-LADDER-SOURCE: /wr-itil:work-problems SKILL.md Step 3 --> Any future change to the tie-break ladder MUST update this render block, the Step 7 P062 block, the Step 9e template, AND `/wr-itil:review-problems` SKILL.md Step 3 / Step 5 — drift here re-opens P138.
|
|
408
|
+
|
|
407
409
|
1. After `Write`-ing the new `.open.md` file (and, for multi-concern splits per step 4b, after all split files are written), regenerate `docs/problems/README.md` in-place reflecting the new filename set.
|
|
408
410
|
2. Update the "Last reviewed" line's parenthetical to name the new ticket (e.g. `P<NNN> opened — <one-line title>`) so the next session's fast-path check has a human-readable audit marker.
|
|
409
411
|
3. `git add docs/problems/README.md` — the stage list at Step 11 must include it alongside the new `.open.md` file (Step 11's `git add -u` catch-all handles tracked-file modifications; the new README render lands via this path when README.md already exists in git, and via an explicit `git add docs/problems/README.md` when it is newly created).
|
|
@@ -544,6 +546,8 @@ Every Step 7 status transition (Open → Known Error, Known Error → Verificati
|
|
|
544
546
|
|
|
545
547
|
The refresh uses the same rendering rules as Step 9e (glob `docs/problems/*.open.md` / `*.known-error.md` / `*.verifying.md` / `*.parked.md`; rank open/known-error by WSJF; list verifyings in the Verification Queue ordered by release age; list parkeds in the Parked section) but skips the full re-scoring pass — existing WSJF values on the ticket files are trusted. The refresh is a render, not a re-rank.
|
|
546
548
|
|
|
549
|
+
**WSJF Rankings tie-break sort (P138)**: rows in the WSJF Rankings table are sorted by the multi-key `(WSJF desc, Known-Error-first, Effort-divisor asc, Reported-date asc, ID asc)` so the rendered top-to-bottom row order matches `/wr-itil:work-problems` SKILL.md Step 3's tie-break selection 1:1. Within each WSJF tier, rows are ordered by the canonical tie-break ladder: Known Error before Open, smaller Effort before larger, older Reported date before newer. The table MUST include a `Reported` column so the third tie-break input is visible to README readers. <!-- TIE-BREAK-LADDER-SOURCE: /wr-itil:work-problems SKILL.md Step 3 --> Any future change to the tie-break ladder MUST update this render block, the Step 5 P094 block, the Step 9e template, AND `/wr-itil:review-problems` SKILL.md Step 3 / Step 5 — drift here re-opens P138.
|
|
550
|
+
|
|
547
551
|
**Mechanism:**
|
|
548
552
|
|
|
549
553
|
1. After renaming + Editing + `git add`-ing the transitioned ticket file (per the staging-trap rule above), regenerate `docs/problems/README.md` in-place reflecting the new filename set and the transitioned ticket's new Status.
|
|
@@ -631,10 +635,10 @@ The re-rate pass is part of Step 9b's output — a re-rate row appears in the st
|
|
|
631
635
|
|
|
632
636
|
**Step 9c: Present summary and select problem to work**
|
|
633
637
|
|
|
634
|
-
After reviewing all problems, present a WSJF-ranked table for open/known-error problems (the main dev-work queue):
|
|
638
|
+
After reviewing all problems, present a WSJF-ranked table for open/known-error problems (the main dev-work queue). Sort rows by `(WSJF desc, Known-Error-first, Effort-divisor asc, Reported-date asc, ID asc)` so row order matches `/wr-itil:work-problems` Step 3 tie-break selection 1:1 (P138):
|
|
635
639
|
|
|
636
|
-
| WSJF | ID | Title | Severity | Status | Effort | Notes |
|
|
637
|
-
|
|
640
|
+
| WSJF | ID | Title | Severity | Status | Effort | Reported | Notes |
|
|
641
|
+
|------|-----|-------|----------|--------|--------|----------|-------|
|
|
638
642
|
|
|
639
643
|
Then present a separate **Verification Queue** section for `.verifying.md` files (per ADR-022 — ranked by release age, oldest first; no WSJF because the multiplier is 0). Highlight each ticket whose release age is **≥ 14 days** (the within-skill default per P048 Candidate 4 — tunable; if it needs cross-skill consistency later, promote to policy) with a `likely verified` marker in the final column. This makes the Verification Queue not just a list but a ranked view of which verifications are most likely ready to close:
|
|
640
644
|
|
|
@@ -677,7 +681,9 @@ When evidence is **ambiguous, contested, or absent** (no specific in-session cit
|
|
|
677
681
|
|
|
678
682
|
**Step 9e: Update files and refresh README.md cache**
|
|
679
683
|
|
|
680
|
-
Edit each problem file where the priority changed. Then write/overwrite `docs/problems/README.md` with the current ranked table so future `work` invocations can skip the full re-scan
|
|
684
|
+
Edit each problem file where the priority changed. Then write/overwrite `docs/problems/README.md` with the current ranked table so future `work` invocations can skip the full re-scan.
|
|
685
|
+
|
|
686
|
+
**WSJF Rankings tie-break sort (P138)**: rows in the WSJF Rankings table are sorted by the multi-key `(WSJF desc, Known-Error-first, Effort-divisor asc, Reported-date asc, ID asc)` so the rendered top-to-bottom row order matches `/wr-itil:work-problems` SKILL.md Step 3's tie-break selection 1:1. Within a WSJF tier, rows are ordered by the canonical tie-break ladder: Known Error before Open, smaller Effort before larger, older Reported date before newer. The `Reported` column MUST appear so the third tie-break input is visible to README readers. <!-- TIE-BREAK-LADDER-SOURCE: /wr-itil:work-problems SKILL.md Step 3 --> Any future change to the tie-break ladder MUST update this template, the Step 5 P094 block, the Step 7 P062 block, AND `/wr-itil:review-problems` SKILL.md Step 3 / Step 5 — drift here re-opens P138.
|
|
681
687
|
|
|
682
688
|
```markdown
|
|
683
689
|
# Problem Backlog
|
|
@@ -687,9 +693,9 @@ Edit each problem file where the priority changed. Then write/overwrite `docs/pr
|
|
|
687
693
|
|
|
688
694
|
## WSJF Rankings
|
|
689
695
|
|
|
690
|
-
| WSJF | ID | Title | Severity | Status | Effort |
|
|
691
|
-
|
|
692
|
-
| <score> | P<NNN> | <title> | <severity> | <status> | <effort> |
|
|
696
|
+
| WSJF | ID | Title | Severity | Status | Effort | Reported |
|
|
697
|
+
|------|-----|-------|----------|--------|--------|----------|
|
|
698
|
+
| <score> | P<NNN> | <title> | <severity> | <status> | <effort> | <YYYY-MM-DD> |
|
|
693
699
|
...
|
|
694
700
|
|
|
695
701
|
## Verification Queue
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
#!/usr/bin/env bats
|
|
2
|
+
|
|
3
|
+
# P138: docs/problems/README.md WSJF Rankings table row order must match
|
|
4
|
+
# /wr-itil:work-problems SKILL.md Step 3's tie-break selection 1:1, and
|
|
5
|
+
# the table must include a Reported date column so the third tie-break
|
|
6
|
+
# input is visible to README readers.
|
|
7
|
+
#
|
|
8
|
+
# Hybrid coverage per ADR-005 + ADR-037:
|
|
9
|
+
# - Structural contract-assertions (Permitted Exception per ADR-005 /
|
|
10
|
+
# contract-assertion pattern per ADR-037): each of the five render-
|
|
11
|
+
# block sites carries the canonical TIE-BREAK-LADDER-SOURCE marker
|
|
12
|
+
# and the Reported column.
|
|
13
|
+
# - One behavioural fixture sort: 4 tickets with equal WSJF differing
|
|
14
|
+
# by Status / Effort / Reported. Apply the documented multi-key
|
|
15
|
+
# sort. Assert the output row order matches the tie-break ladder
|
|
16
|
+
# result derived from /wr-itil:work-problems Step 3 selection rules.
|
|
17
|
+
#
|
|
18
|
+
# @problem P138
|
|
19
|
+
# @jtbd JTBD-001 (enforce governance without slowing down — predictable
|
|
20
|
+
# orchestrator behaviour visible from rendered README)
|
|
21
|
+
# @jtbd JTBD-006 (progress backlog AFK — README and orchestrator agree
|
|
22
|
+
# on next ticket)
|
|
23
|
+
#
|
|
24
|
+
# Cross-reference:
|
|
25
|
+
# P138: docs/problems/138-readme-wsjf-row-order-doesnt-match-work-problems-tie-break.*.md
|
|
26
|
+
# ADR-005 — plugin testing strategy / Permitted Exception
|
|
27
|
+
# ADR-037 — contract-assertion bats pattern
|
|
28
|
+
# ADR-044 — decision delegation contract; tie-break ladder is framework-resolved
|
|
29
|
+
|
|
30
|
+
setup() {
|
|
31
|
+
REPO_ROOT="$(cd "$(dirname "$BATS_TEST_FILENAME")/../../../../.." && pwd)"
|
|
32
|
+
MANAGE_SKILL="$REPO_ROOT/packages/itil/skills/manage-problem/SKILL.md"
|
|
33
|
+
REVIEW_SKILL="$REPO_ROOT/packages/itil/skills/review-problems/SKILL.md"
|
|
34
|
+
WORK_SKILL="$REPO_ROOT/packages/itil/skills/work-problems/SKILL.md"
|
|
35
|
+
|
|
36
|
+
TEST_TMP="$(mktemp -d)"
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
teardown() {
|
|
40
|
+
if [ -n "${TEST_TMP:-}" ] && [ -d "$TEST_TMP" ]; then
|
|
41
|
+
rm -rf "$TEST_TMP"
|
|
42
|
+
fi
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
# ---------------------------------------------------------------------------
|
|
46
|
+
# Structural contract-assertions — TIE-BREAK-LADDER-SOURCE marker
|
|
47
|
+
# ---------------------------------------------------------------------------
|
|
48
|
+
|
|
49
|
+
@test "manage-problem Step 5 P094 (refresh on new ticket) carries the TIE-BREAK-LADDER-SOURCE marker" {
|
|
50
|
+
# P138 Phase 2: each render block must carry the canonical greppable
|
|
51
|
+
# marker pointing back to /wr-itil:work-problems Step 3 (the
|
|
52
|
+
# framework-resolved source of the tie-break ladder per ADR-044).
|
|
53
|
+
# Drift across the render sites re-opens P138.
|
|
54
|
+
run grep -F '<!-- TIE-BREAK-LADDER-SOURCE: /wr-itil:work-problems SKILL.md Step 3 -->' "$MANAGE_SKILL"
|
|
55
|
+
[ "$status" -eq 0 ]
|
|
56
|
+
# Marker must appear at multiple sites (Step 5 P094, Step 7 P062, Step 9e).
|
|
57
|
+
count=$(grep -c -F '<!-- TIE-BREAK-LADDER-SOURCE: /wr-itil:work-problems SKILL.md Step 3 -->' "$MANAGE_SKILL")
|
|
58
|
+
[ "$count" -ge 3 ]
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
@test "review-problems Step 3 (Present the refreshed ranking) carries the TIE-BREAK-LADDER-SOURCE marker" {
|
|
62
|
+
run grep -F '<!-- TIE-BREAK-LADDER-SOURCE: /wr-itil:work-problems SKILL.md Step 3 -->' "$REVIEW_SKILL"
|
|
63
|
+
[ "$status" -eq 0 ]
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
@test "work-problems Step 1 (Scan the backlog) carries the TIE-BREAK-LADDER-SOURCE marker" {
|
|
67
|
+
run grep -F '<!-- TIE-BREAK-LADDER-SOURCE: /wr-itil:work-problems SKILL.md Step 3 -->' "$WORK_SKILL"
|
|
68
|
+
[ "$status" -eq 0 ]
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
# ---------------------------------------------------------------------------
|
|
72
|
+
# Structural contract-assertions — multi-key sort spec wording
|
|
73
|
+
# ---------------------------------------------------------------------------
|
|
74
|
+
|
|
75
|
+
@test "manage-problem render blocks document the multi-key sort spec verbatim" {
|
|
76
|
+
# The exact spec must appear so the agent applying the render produces
|
|
77
|
+
# the same row order as /wr-itil:work-problems Step 3.
|
|
78
|
+
run grep -F '(WSJF desc, Known-Error-first, Effort-divisor asc, Reported-date asc, ID asc)' "$MANAGE_SKILL"
|
|
79
|
+
[ "$status" -eq 0 ]
|
|
80
|
+
count=$(grep -c -F '(WSJF desc, Known-Error-first, Effort-divisor asc, Reported-date asc, ID asc)' "$MANAGE_SKILL")
|
|
81
|
+
[ "$count" -ge 3 ]
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
@test "review-problems documents the multi-key sort spec verbatim" {
|
|
85
|
+
run grep -F '(WSJF desc, Known-Error-first, Effort-divisor asc, Reported-date asc, ID asc)' "$REVIEW_SKILL"
|
|
86
|
+
[ "$status" -eq 0 ]
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
@test "work-problems Step 1 documents the multi-key sort spec verbatim" {
|
|
90
|
+
run grep -F '(WSJF desc, Known-Error-first, Effort-divisor asc, Reported-date asc, ID asc)' "$WORK_SKILL"
|
|
91
|
+
[ "$status" -eq 0 ]
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
# ---------------------------------------------------------------------------
|
|
95
|
+
# Structural contract-assertions — Reported column present in templates
|
|
96
|
+
# ---------------------------------------------------------------------------
|
|
97
|
+
|
|
98
|
+
@test "manage-problem Step 9e README template includes the Reported column" {
|
|
99
|
+
# The Step 9e block writes the README template that downstream renderings
|
|
100
|
+
# copy. Without the Reported column in the template, the third tie-break
|
|
101
|
+
# input remains invisible to README readers and P138 recurs.
|
|
102
|
+
run grep -F '| WSJF | ID | Title | Severity | Status | Effort | Reported |' "$MANAGE_SKILL"
|
|
103
|
+
[ "$status" -eq 0 ]
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
@test "review-problems Step 5 README template includes the Reported column" {
|
|
107
|
+
run grep -F '| WSJF | ID | Title | Severity | Status | Effort | Reported |' "$REVIEW_SKILL"
|
|
108
|
+
[ "$status" -eq 0 ]
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
# ---------------------------------------------------------------------------
|
|
112
|
+
# Structural contract-assertions — cross-coupling drift warning
|
|
113
|
+
# ---------------------------------------------------------------------------
|
|
114
|
+
|
|
115
|
+
@test "manage-problem render blocks warn that drift re-opens P138" {
|
|
116
|
+
# The cross-coupling note must explicitly name P138 so future agents
|
|
117
|
+
# who consider relaxing the multi-key sort see the regression risk.
|
|
118
|
+
count=$(grep -c -F 'drift here re-opens P138' "$MANAGE_SKILL")
|
|
119
|
+
[ "$count" -ge 3 ]
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
@test "review-problems renders the drift-re-opens-P138 warning" {
|
|
123
|
+
run grep -F 'drift re-opens P138' "$REVIEW_SKILL"
|
|
124
|
+
[ "$status" -eq 0 ]
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
# ---------------------------------------------------------------------------
|
|
128
|
+
# Behavioural fixture: multi-key sort produces tie-break-ladder order
|
|
129
|
+
# ---------------------------------------------------------------------------
|
|
130
|
+
|
|
131
|
+
@test "behavioural: multi-key sort on 4 same-WSJF tickets matches tie-break ladder order" {
|
|
132
|
+
# Fixture: 4 tickets all at WSJF 6.0, differing by Status / Effort /
|
|
133
|
+
# Reported date. Encode each as a tab-separated row whose columns are
|
|
134
|
+
# the multi-key sort axes (WSJF, KE_flag where 0=KE+1=Open, Effort
|
|
135
|
+
# divisor, Reported date, ID, Title). Apply the documented sort and
|
|
136
|
+
# assert the output row order matches the tie-break ladder result.
|
|
137
|
+
#
|
|
138
|
+
# Tickets:
|
|
139
|
+
# T1: Open, S, Reported 2026-04-27, severity 6, WSJF 6.0
|
|
140
|
+
# T2: Open, M, Reported 2026-04-26, severity 12, WSJF 6.0
|
|
141
|
+
# T3: KE, S, Reported 2026-04-25, severity 3, WSJF 6.0 (3*2/1=6.0)
|
|
142
|
+
# T4: KE, M, Reported 2026-04-24, severity 6, WSJF 6.0 (6*2/2=6.0)
|
|
143
|
+
#
|
|
144
|
+
# Tie-break ladder per /wr-itil:work-problems Step 3:
|
|
145
|
+
# 1. Known-Error first → T3, T4 before T1, T2
|
|
146
|
+
# 2. Smaller effort first → T3 (S) before T4 (M); T1 (S) before T2 (M)
|
|
147
|
+
# 3. Older reported date first → not exercised here because effort
|
|
148
|
+
# already distinguishes within Status (intentional: this is the
|
|
149
|
+
# same shape as a real backlog).
|
|
150
|
+
#
|
|
151
|
+
# Expected order: T3, T4, T1, T2
|
|
152
|
+
#
|
|
153
|
+
# NB: Reported-date field is included in the sort key but not exercised
|
|
154
|
+
# by this fixture (effort distinguishes pairs). The Reported-only test
|
|
155
|
+
# below adds explicit coverage of the third tie-break level.
|
|
156
|
+
|
|
157
|
+
fixture_in="$TEST_TMP/fixture.tsv"
|
|
158
|
+
cat >"$fixture_in" <<'EOF'
|
|
159
|
+
6.0 1 1 2026-04-27 201 T1: Open S
|
|
160
|
+
6.0 1 2 2026-04-26 202 T2: Open M
|
|
161
|
+
6.0 0 1 2026-04-25 203 T3: KE S
|
|
162
|
+
6.0 0 2 2026-04-24 204 T4: KE M
|
|
163
|
+
EOF
|
|
164
|
+
|
|
165
|
+
# Multi-key sort spec from SKILL.md:
|
|
166
|
+
# k1: WSJF desc -> -k1,1nr
|
|
167
|
+
# k2: KE_flag asc (0 KE) -> -k2,2n
|
|
168
|
+
# k3: Effort divisor asc -> -k3,3n
|
|
169
|
+
# k4: Reported asc -> -k4,4
|
|
170
|
+
# k5: ID asc -> -k5,5n
|
|
171
|
+
sorted=$(sort -t$'\t' -k1,1nr -k2,2n -k3,3n -k4,4 -k5,5n "$fixture_in" | cut -f6)
|
|
172
|
+
expected="T3: KE S
|
|
173
|
+
T4: KE M
|
|
174
|
+
T1: Open S
|
|
175
|
+
T2: Open M"
|
|
176
|
+
[ "$sorted" = "$expected" ]
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
@test "behavioural: multi-key sort exercises the third tie-break level (Reported date) when Status + Effort tie" {
|
|
180
|
+
# Fixture: 3 tickets all at WSJF 6.0, all KE, all Effort S, differing
|
|
181
|
+
# only by Reported date and ID. The first two tie-break levels do not
|
|
182
|
+
# distinguish them; only the Reported-date axis decides the order.
|
|
183
|
+
# This is the explicit regression guard for the third tie-break level
|
|
184
|
+
# being silently dropped — exactly the failure mode P138 documents.
|
|
185
|
+
#
|
|
186
|
+
# Expected order (older Reported first, then ID asc as final tiebreak):
|
|
187
|
+
# T_a (Reported 2026-04-22) → T_b (Reported 2026-04-25) → T_c (Reported 2026-04-27)
|
|
188
|
+
fixture_in="$TEST_TMP/fixture-reported.tsv"
|
|
189
|
+
cat >"$fixture_in" <<'EOF'
|
|
190
|
+
6.0 0 1 2026-04-25 302 T_b: KE S older
|
|
191
|
+
6.0 0 1 2026-04-27 303 T_c: KE S newest
|
|
192
|
+
6.0 0 1 2026-04-22 301 T_a: KE S oldest
|
|
193
|
+
EOF
|
|
194
|
+
|
|
195
|
+
sorted=$(sort -t$'\t' -k1,1nr -k2,2n -k3,3n -k4,4 -k5,5n "$fixture_in" | cut -f6)
|
|
196
|
+
expected="T_a: KE S oldest
|
|
197
|
+
T_b: KE S older
|
|
198
|
+
T_c: KE S newest"
|
|
199
|
+
[ "$sorted" = "$expected" ]
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
@test "behavioural: tie-break flips when WSJF differs (sort respects k1 first)" {
|
|
203
|
+
# Regression guard: ensure the multi-key sort doesn't reorder across
|
|
204
|
+
# WSJF tiers. A higher-WSJF Open ticket must outrank a lower-WSJF KE
|
|
205
|
+
# ticket — the WSJF axis dominates the Status axis.
|
|
206
|
+
fixture_in="$TEST_TMP/fixture-tiers.tsv"
|
|
207
|
+
cat >"$fixture_in" <<'EOF'
|
|
208
|
+
6.0 0 2 2026-04-20 401 T_low: KE M low-WSJF
|
|
209
|
+
12.0 1 1 2026-04-30 402 T_high: Open S high-WSJF
|
|
210
|
+
EOF
|
|
211
|
+
|
|
212
|
+
sorted=$(sort -t$'\t' -k1,1nr -k2,2n -k3,3n -k4,4 -k5,5n "$fixture_in" | cut -f6)
|
|
213
|
+
expected="T_high: Open S high-WSJF
|
|
214
|
+
T_low: KE M low-WSJF"
|
|
215
|
+
[ "$sorted" = "$expected" ]
|
|
216
|
+
}
|
|
@@ -65,11 +65,11 @@ Re-read the WSJF Prioritisation → "Transitive dependencies (P076)" subsection
|
|
|
65
65
|
|
|
66
66
|
After re-scoring, present three sections matching the README.md format (same rendering used by `/wr-itil:list-problems` and by the README cache — Step 5 writes the same layout):
|
|
67
67
|
|
|
68
|
-
**WSJF Rankings** — dev-work queue (open + known-error), sorted by WSJF
|
|
68
|
+
**WSJF Rankings** — dev-work queue (open + known-error), sorted by the multi-key `(WSJF desc, Known-Error-first, Effort-divisor asc, Reported-date asc, ID asc)` so rendered top-to-bottom row order matches `/wr-itil:work-problems` SKILL.md Step 3 tie-break selection 1:1 (P138). Within each WSJF tier, rows follow the canonical tie-break ladder: Known Error before Open, smaller Effort before larger, older Reported date before newer. The `Reported` column MUST appear so the third tie-break input is visible to README readers. <!-- TIE-BREAK-LADDER-SOURCE: /wr-itil:work-problems SKILL.md Step 3 --> Any change to the tie-break ladder MUST update this rendering block, Step 5's README template, AND `/wr-itil:manage-problem` SKILL.md Step 5 P094 / Step 7 P062 / Step 9e — drift re-opens P138.
|
|
69
69
|
|
|
70
70
|
```
|
|
71
|
-
| WSJF | ID | Title | Severity | Status | Effort | Notes |
|
|
72
|
-
|
|
71
|
+
| WSJF | ID | Title | Severity | Status | Effort | Reported | Notes |
|
|
72
|
+
|------|-----|-------|----------|--------|--------|----------|-------|
|
|
73
73
|
```
|
|
74
74
|
|
|
75
75
|
**Verification Queue** — `.verifying.md` tickets, sorted by release age (oldest first). Highlight any ticket whose release age is **≥ 14 days** with a `yes (N days)` marker in the `Likely verified?` column (within-skill default per P048 Candidate 4 — tunable; promote to cross-skill policy if needed):
|
|
@@ -119,11 +119,11 @@ Write / overwrite `docs/problems/README.md` with the refreshed ranking so future
|
|
|
119
119
|
|
|
120
120
|
## WSJF Rankings
|
|
121
121
|
|
|
122
|
-
Dev-work queue only. Verification Pending (`.verifying.md`, WSJF multiplier 0) and Parked (`.parked.md`, multiplier 0) tickets are excluded per ADR-022 — surfaced in their own sections below.
|
|
122
|
+
Dev-work queue only. Verification Pending (`.verifying.md`, WSJF multiplier 0) and Parked (`.parked.md`, multiplier 0) tickets are excluded per ADR-022 — surfaced in their own sections below. Rows sort by `(WSJF desc, Known-Error-first, Effort-divisor asc, Reported-date asc, ID asc)` so top-to-bottom order matches `/wr-itil:work-problems` Step 3 tie-break selection 1:1 (P138). The `Reported` column MUST appear.
|
|
123
123
|
|
|
124
|
-
| WSJF | ID | Title | Severity | Status | Effort |
|
|
125
|
-
|
|
126
|
-
| <score> | P<NNN> | <title> | <severity> | <status> | <effort> |
|
|
124
|
+
| WSJF | ID | Title | Severity | Status | Effort | Reported |
|
|
125
|
+
|------|-----|-------|----------|--------|--------|----------|
|
|
126
|
+
| <score> | P<NNN> | <title> | <severity> | <status> | <effort> | <YYYY-MM-DD> |
|
|
127
127
|
...
|
|
128
128
|
|
|
129
129
|
## Verification Queue
|
|
@@ -100,6 +100,8 @@ This is a robustness layer ON TOP of P094 + P062, not a supersession — both pe
|
|
|
100
100
|
|
|
101
101
|
Read `docs/problems/README.md` if it exists and is fresh (check via git history — see manage-problem step 9 for the cache freshness check). If stale or missing, scan all `.open.md` and `.known-error.md` files in `docs/problems/`, extract their WSJF scores, and rank them.
|
|
102
102
|
|
|
103
|
+
**README row order matches Step 3 tie-break selection (P138)**: as of P138, the README's WSJF Rankings table is rendered with the multi-key sort `(WSJF desc, Known-Error-first, Effort-divisor asc, Reported-date asc, ID asc)`. The cache-fresh path can therefore read the rendered table top-to-bottom and the first row is the orchestrator's pick — no in-memory tie-break re-application needed. The slow path scan must apply the same multi-key sort. <!-- TIE-BREAK-LADDER-SOURCE: /wr-itil:work-problems SKILL.md Step 3 -->
|
|
104
|
+
|
|
103
105
|
Exclude:
|
|
104
106
|
- `.closed.md` files (done)
|
|
105
107
|
- `.parked.md` files (blocked on upstream)
|