@windyroad/itil 0.25.0 → 0.26.0
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/.claude-plugin/plugin.json +1 -1
- package/README.md +3 -0
- package/bin/wr-itil-reconcile-rfcs +2 -0
- package/hooks/hooks.json +6 -0
- package/hooks/itil-rfc-trailer-advisory.sh +198 -0
- package/hooks/lib/create-gate.sh +30 -0
- package/hooks/manage-problem-enforce-create.sh +89 -44
- package/hooks/test/itil-rfc-trailer-advisory.bats +273 -0
- package/hooks/test/manage-problem-enforce-create.bats +105 -1
- package/package.json +1 -1
- package/scripts/reconcile-rfcs.sh +329 -0
- package/scripts/test/reconcile-rfcs.bats +433 -0
- package/scripts/test/update-problem-rfcs-section.bats +242 -0
- package/scripts/update-problem-rfcs-section.sh +160 -0
- package/skills/capture-rfc/SKILL.md +276 -0
- package/skills/manage-rfc/SKILL.md +260 -0
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: wr-itil:manage-rfc
|
|
3
|
+
description: Heavyweight RFC intake + lifecycle management following the ADR-060 Problem-RFC-Story framework. Creates new RFCs (delegates to /wr-itil:capture-rfc for the lightweight path), updates existing RFCs, transitions through proposed → accepted → in-progress → verifying → closed lifecycle, runs WSJF re-rank reviews, and refreshes docs/rfcs/README.md per the P062 / P094 contract pattern.
|
|
4
|
+
allowed-tools: Read, Write, Edit, Bash, Grep, Glob, Task
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Manage RFC Skill
|
|
8
|
+
|
|
9
|
+
Create, update, or transition RFC tickets following the Problem-RFC-Story framework introduced by ADR-060 (accepted 2026-05-05). This skill is the heavyweight counterpart to `/wr-itil:capture-rfc` — it owns the full intake flow, lifecycle transitions, batch review, and README refresh.
|
|
10
|
+
|
|
11
|
+
**Related JTBDs**: JTBD-008 (primary — Decompose a Fix Into Coordinated Changes; this skill governs the lifecycle of decomposed work), JTBD-001 (extended scope — change-set-level governance), JTBD-101 (atomic-fix-adopter friction guard — RFC ceremony only fires on opt-in invocations).
|
|
12
|
+
|
|
13
|
+
## RFC Lifecycle
|
|
14
|
+
|
|
15
|
+
| Status | File suffix | Meaning | Entry criteria |
|
|
16
|
+
|--------|-----------|---------|----------------|
|
|
17
|
+
| **Proposed** | `.proposed.md` | RFC captured, scope not yet ratified | Driving problem(s) traced; capture-rfc complete |
|
|
18
|
+
| **Accepted** | `.accepted.md` | Scope ratified, ready to start work | Architect+JTBD reviews passed; tasks decomposed; commits-to-be-authored named |
|
|
19
|
+
| **In-Progress** | `.in-progress.md` | Work underway, commits landing | First commit with `Refs: RFC-<NNN>` trailer authored |
|
|
20
|
+
| **Verifying** | `.verifying.md` | Work shipped, awaiting verification | All tasks complete; release marker present in `## Verification` |
|
|
21
|
+
| **Closed** | `.closed.md` | Verified; RFC complete | User confirms verification; driving problem(s) Closed or trace-bounded-escape applies |
|
|
22
|
+
|
|
23
|
+
Each transition is a `git mv` + Edit + restage + README refresh + commit per ADR-014.
|
|
24
|
+
|
|
25
|
+
## I1 enforcement at lifecycle transitions
|
|
26
|
+
|
|
27
|
+
Per ADR-060 § Decision Outcome line 97 + § Confirmation criteria 1+2:
|
|
28
|
+
|
|
29
|
+
| Transition | I1 enforcement |
|
|
30
|
+
|------------|---------------|
|
|
31
|
+
| capture-time (`/wr-itil:capture-rfc`) | **Hard-block** on missing/malformed/unresolved problem-trace. Deny logged to `logs/rfc-capture-denials.jsonl`. |
|
|
32
|
+
| `proposed → accepted` | Hard-block if any `problems:` entry is no longer resolvable (deleted ticket file). Architect+JTBD re-review gate fires here. |
|
|
33
|
+
| `accepted → in-progress` | **Hard-block** (irreversible state per ADR-060 line 97) if any traced problem is missing or orphan (Closed/Parked allowed only via `Refs: RFC-<NNN>` retro-pattern; bounded-escape carve-out applies to retrospective RFCs only — see capture-rfc Step 2 rationale). |
|
|
34
|
+
| `in-progress → verifying` | **Hard-block** (irreversible state) — same rules as `→ in-progress`. |
|
|
35
|
+
| `verifying → closed` | **Advisory-with-escalation**: if driving problem is Closed/Parked AND no still-open trace exists, emit warning naming the trace history; proceed if user confirms (or AFK fallback per ADR-013 Rule 6). This is the bounded escape per ADR-060 line 97 — closing an RFC whose driving problem was already closed is the legitimate retrospective-completion path. |
|
|
36
|
+
|
|
37
|
+
## WSJF Prioritisation (RFC-level Phase 1)
|
|
38
|
+
|
|
39
|
+
Per ADR-060 § Decisions Resolved: WSJF placement is **RFC-level for Phase 1**. Story-level WSJF is structurally impossible without story-mapping infrastructure (Phase 2 deferred).
|
|
40
|
+
|
|
41
|
+
**WSJF = (Severity × Status Multiplier) / Effort**
|
|
42
|
+
|
|
43
|
+
- Severity = inherited from highest-severity traced problem (max across the `problems:` list).
|
|
44
|
+
- Status Multiplier:
|
|
45
|
+
|
|
46
|
+
| Status | Multiplier |
|
|
47
|
+
|--------|-----------|
|
|
48
|
+
| Accepted | 2.0 |
|
|
49
|
+
| In-Progress | 1.5 |
|
|
50
|
+
| Proposed | 1.0 |
|
|
51
|
+
| Verifying | 0 (excluded — user-side) |
|
|
52
|
+
| Closed | 0 (excluded — done) |
|
|
53
|
+
|
|
54
|
+
- Effort = S / M / L / XL same divisors as problem WSJF (S=1, M=2, L=4, XL=8). Marginal effort per RFC; transitive effort propagation deferred to Phase 2 when multi-RFC dependencies surface.
|
|
55
|
+
|
|
56
|
+
## Steps
|
|
57
|
+
|
|
58
|
+
### 0. Preflight (Phase 1 cross-directory)
|
|
59
|
+
|
|
60
|
+
Same Phase 1 sequencing note as capture-rfc Step 0: `wr-itil-reconcile-readme docs/problems` is the Phase 1 preflight (Slice 3 ships `wr-itil-reconcile-rfcs`; once it lands, this preflight calls both).
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
wr-itil-reconcile-readme docs/problems > /tmp/wr-itil-drift-$$.txt
|
|
64
|
+
reconcile_exit=$?
|
|
65
|
+
if [ "$reconcile_exit" -eq 1 ]; then
|
|
66
|
+
wr-itil-classify-readme-drift /tmp/wr-itil-drift-$$.txt docs/problems
|
|
67
|
+
classify_exit=$?
|
|
68
|
+
rm -f /tmp/wr-itil-drift-$$.txt
|
|
69
|
+
fi
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### 1. Parse arguments
|
|
73
|
+
|
|
74
|
+
The argument shape determines the operation:
|
|
75
|
+
|
|
76
|
+
- **Empty** → halt with stderr directive: "manage-rfc requires an argument: `<RFC-NNN>` for update, `<RFC-NNN> <status>` for transition, `review` for batch re-rank, `list` for display. To create a new RFC use /wr-itil:capture-rfc directly."
|
|
77
|
+
- **`RFC-<NNN>` bare** → update flow (Step 6).
|
|
78
|
+
- **`RFC-<NNN> <status>`** where `<status>` ∈ `{accepted, in-progress, verifying, close}` → transition (Step 7).
|
|
79
|
+
- **`review`** → batch re-rank (Step 9).
|
|
80
|
+
- **`list`** → display (Step 8).
|
|
81
|
+
- **Anything else** → halt with stderr directive directing the user to capture-rfc for new RFCs.
|
|
82
|
+
|
|
83
|
+
The lightweight + heavyweight split per ADR-032 + ADR-010 amended Skill Granularity rule means manage-rfc does NOT host new-RFC creation inline. Capture-rfc owns the intake; manage-rfc owns lifecycle.
|
|
84
|
+
|
|
85
|
+
### 6. Update flow (bare `RFC-<NNN>`)
|
|
86
|
+
|
|
87
|
+
Find the file matching the RFC ID:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
ls docs/rfcs/RFC-<NNN>-*.md 2>/dev/null
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Apply the update — typical edits:
|
|
94
|
+
- Filling `## Scope` after architect+JTBD review.
|
|
95
|
+
- Decomposing `## Tasks` into ordered work-items.
|
|
96
|
+
- Adding `## Related` entries.
|
|
97
|
+
- Updating `decision-makers` or `adrs` frontmatter when ADRs are referenced mid-RFC execution.
|
|
98
|
+
|
|
99
|
+
#### README refresh on conditional update (P094 mirror)
|
|
100
|
+
|
|
101
|
+
If the update changed any ranking-bearing field (Status, Severity-via-problems, Effort, WSJF), regenerate `docs/rfcs/README.md` in-place reflecting the new ranking and stage it in the same commit. If the edit touched only `## Summary`, `## Scope`, `## Tasks`, `## Related`, or other non-ranking sections, skip the refresh.
|
|
102
|
+
|
|
103
|
+
**Mechanism** mirrors P094 in `manage-problem` Step 6 — render not re-rank; trust other RFC files' stored WSJF; consume only the post-edit RFC's WSJF for the ranking table.
|
|
104
|
+
|
|
105
|
+
### 7. Status transitions
|
|
106
|
+
|
|
107
|
+
Each transition is a `git mv` + Edit + `git add` (P057 staging trap) + README refresh + commit.
|
|
108
|
+
|
|
109
|
+
**Pre-flight checks before each transition**:
|
|
110
|
+
|
|
111
|
+
| Transition | Checks |
|
|
112
|
+
|------------|--------|
|
|
113
|
+
| `proposed → accepted` | All `problems:` entries resolve. Architect re-review PASS. JTBD re-review PASS. `## Scope` populated (not "deferred"). `## Tasks` decomposed (≥ 1 task; not just deferred placeholder). |
|
|
114
|
+
| `accepted → in-progress` | First commit referencing `Refs: RFC-<NNN>` exists OR is being authored in this same commit. I1 hard-block on missing/orphan trace. |
|
|
115
|
+
| `in-progress → verifying` | All `## Tasks` checked. `## Verification` section drafted (release marker, user-side check, trace closure path). I1 hard-block on missing/orphan trace. |
|
|
116
|
+
| `verifying → closed` | User explicitly confirms (or AFK Rule 6 fallback for evidence-based close per ADR-022 / ADR-044 framework-resolved silent dispatch). I1 advisory-with-escalation if driving problems Closed/Parked. |
|
|
117
|
+
|
|
118
|
+
If any pre-flight fails: report which checks failed; do NOT proceed; offer `AskUserQuestion` for direction-setting decisions (e.g., "scope still says deferred — populate now or park the transition?") only when the resolution is genuinely user-direction territory per ADR-044.
|
|
119
|
+
|
|
120
|
+
#### Transition mechanics
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
git mv docs/rfcs/RFC-<NNN>-<slug>.<old-status>.md docs/rfcs/RFC-<NNN>-<slug>.<new-status>.md
|
|
124
|
+
# ... use the Edit tool to update Status field + add transition-specific sections (e.g. ## Verification on `→ verifying`) ...
|
|
125
|
+
git add docs/rfcs/RFC-<NNN>-<slug>.<new-status>.md
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
**P057 staging trap rule**: re-stage explicitly after the Edit tool runs. `git mv` alone stages only the rename, not subsequent content edits.
|
|
129
|
+
|
|
130
|
+
#### README refresh on every transition (P062 mirror)
|
|
131
|
+
|
|
132
|
+
After renaming + Editing + `git add`-ing the transitioned RFC file, regenerate `docs/rfcs/README.md` in-place reflecting the new filename set and the transitioned RFC's new Status. Stage the refreshed README with the same commit. The "Last reviewed" line on `docs/rfcs/README.md` follows the same P134 truncation discipline as `docs/problems/README.md`: single most-recent fragment on line 3; displaced fragments rotate to `docs/rfcs/README-history.md` (created on first rotation). Soft cap ≤ 1024 bytes per fragment; hard ceiling 5120 bytes per ADR-040 Tier 3 envelope.
|
|
133
|
+
|
|
134
|
+
#### Reverse trace on driving problem(s) (skill-side primary surface)
|
|
135
|
+
|
|
136
|
+
Per ADR-060 Phase 1 item 10 + Confirmation criterion 3 + architect Q1 verdict (skill-side primary, hook-side advisory for arbitrary commits): every transition refreshes the `## RFCs` section on each driving problem ticket inline in the same commit per ADR-014 single-commit grain.
|
|
137
|
+
|
|
138
|
+
For each `P<NNN>` in the transitioned RFC's frontmatter `problems:` list:
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
for pid_token in $(awk '/^problems:/{gsub(/[][]/,"");gsub(/,/,"\n");for(i=2;i<=NF;i++)print $i;exit}' "$rfc_file"); do
|
|
142
|
+
pid_num="${pid_token#P}"
|
|
143
|
+
problem_file=$(ls docs/problems/${pid_num}-*.md 2>/dev/null | head -1)
|
|
144
|
+
[ -z "$problem_file" ] && continue
|
|
145
|
+
bash "$(wr-itil-script-path 2>/dev/null || echo packages/itil/scripts)/update-problem-rfcs-section.sh" "$problem_file" docs/rfcs
|
|
146
|
+
git add "$problem_file"
|
|
147
|
+
done
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
The helper (`packages/itil/scripts/update-problem-rfcs-section.sh`) is idempotent and applies lazy-empty discipline (zero traced RFCs → section absent — protects atomic-fix-adopter friction guard per JTBD-101). After the transition, the helper:
|
|
151
|
+
- Updates the row's `Status` column to the new lifecycle status.
|
|
152
|
+
- Removes the row when this transition de-traces a problem (frontmatter `problems:` edit removed the entry).
|
|
153
|
+
- No-op when the table is already current (idempotent contract).
|
|
154
|
+
|
|
155
|
+
The trailer hook (`itil-rfc-trailer-advisory.sh`) sits on top of this skill-side contract as a drift-detection backstop for ARBITRARY commits (e.g. `feat(...)` commits with `Refs: RFC-<NNN>` trailers authored outside the RFC skills) — it never auto-fixes; it advises.
|
|
156
|
+
|
|
157
|
+
### 8. List flow (`list`)
|
|
158
|
+
|
|
159
|
+
Read all `.proposed.md`, `.accepted.md`, `.in-progress.md` files in `docs/rfcs/`. Extract ID, title, status, traced problems. Sort by Status priority (Accepted > In-Progress > Proposed) then by `Reported` ASC. Display as a markdown table.
|
|
160
|
+
|
|
161
|
+
### 9. Review flow (`review`)
|
|
162
|
+
|
|
163
|
+
Batch re-rank all RFCs and refresh `docs/rfcs/README.md`.
|
|
164
|
+
|
|
165
|
+
**Step 9a**: Read `RISK-POLICY.md` for current Severity bands.
|
|
166
|
+
|
|
167
|
+
**Step 9b**: For each RFC in `proposed`/`accepted`/`in-progress` status:
|
|
168
|
+
1. Read the RFC file + each traced problem file.
|
|
169
|
+
2. Severity = `max(Severity(problem) for problem in problems)` (highest-severity trace dominates).
|
|
170
|
+
3. Re-estimate Effort against current `## Scope` + `## Tasks` decomposition.
|
|
171
|
+
4. WSJF = (Severity × Status Multiplier) / Effort divisor.
|
|
172
|
+
5. Update WSJF/Effort lines in the RFC file if changed.
|
|
173
|
+
|
|
174
|
+
**Step 9c**: Present a WSJF-ranked table (open + accepted + in-progress only). Verifying RFCs go in a Verification Queue section sorted by Released date ASC (canonical VQ sort direction per P150). Closed RFCs go in a Closed section (cosmetic, no ranking).
|
|
175
|
+
|
|
176
|
+
**Step 9d**: For each `.verifying.md` RFC, collect in-session evidence per ADR-044 framework-resolved silent dispatch (mirrors `manage-problem` Step 9d). Concrete + unambiguous citation → close on evidence via the transition path. Ambiguous/absent → leave as Verifying.
|
|
177
|
+
|
|
178
|
+
**Step 9e**: Update changed files; refresh `docs/rfcs/README.md`; refresh the `## RFCs` reverse-trace section on every problem ticket whose traced RFCs changed status or title in this batch (per ADR-060 Phase 1 item 10 + Confirmation criterion 3 — skill-side primary):
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
# Aggregate the union of P<NNN> across all RFCs touched in this review.
|
|
182
|
+
for problem_file in $(printf '%s\n' "${touched_problem_files[@]}" | sort -u); do
|
|
183
|
+
bash "$(wr-itil-script-path 2>/dev/null || echo packages/itil/scripts)/update-problem-rfcs-section.sh" "$problem_file" docs/rfcs
|
|
184
|
+
git add "$problem_file"
|
|
185
|
+
done
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
The helper is idempotent — a problem ticket whose `## RFCs` table is already current emits no diff, and `git add` of an unchanged file is a no-op. Any drift gets fixed in this commit per ADR-014 single-commit grain. Commit per ADR-014:
|
|
189
|
+
|
|
190
|
+
```
|
|
191
|
+
docs(rfcs): review — re-rank RFC priorities
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### 11. Report + commit
|
|
195
|
+
|
|
196
|
+
After any operation, report the file path created/modified, the RFC ID, current status, and any quality-check warnings.
|
|
197
|
+
|
|
198
|
+
Commit conventions per operation:
|
|
199
|
+
|
|
200
|
+
| Operation | Commit message |
|
|
201
|
+
|-----------|---------------|
|
|
202
|
+
| Update (no transition) | `docs(rfcs): update RFC-<NNN> — <change summary>` |
|
|
203
|
+
| `proposed → accepted` | `docs(rfcs): RFC-<NNN> accepted — <one-line scope summary>` |
|
|
204
|
+
| `accepted → in-progress` | usually folded into the first `feat(...)` / `fix(...)` / `chore(...)` commit that authors the RFC's first task — rename rides with that commit and trailer is `Refs: RFC-<NNN>` |
|
|
205
|
+
| `in-progress → verifying` | usually folded into the final task commit — rename + `## Verification` edit ride with the shipping commit |
|
|
206
|
+
| `verifying → closed` | `docs(rfcs): close RFC-<NNN> <title>` |
|
|
207
|
+
| Review/re-rank | `docs(rfcs): review — re-rank RFC priorities` |
|
|
208
|
+
|
|
209
|
+
All commit messages on RFC-bearing commits carry the `Refs: RFC-<NNN>` trailer (ADR-060 finding 8 + Phase 1 item 12).
|
|
210
|
+
|
|
211
|
+
Satisfy the commit gate per ADR-014 — primary path delegates to `wr-risk-scorer:pipeline` subagent; fallback invokes `/wr-risk-scorer:assess-release` skill.
|
|
212
|
+
|
|
213
|
+
### 12. Auto-release (skip in AFK orchestrator)
|
|
214
|
+
|
|
215
|
+
Same conditional drain as `manage-problem` Step 12: if not in an AFK orchestrator AND `.changeset/` is non-empty AND push/release within appetite, run `npm run push:watch` then `npm run release:watch`. Held-changeset window per ADR-042 / P162 governs which changesets graduate; RFC-shaped held changesets graduate atomically per ADR-060 architect finding 12.
|
|
216
|
+
|
|
217
|
+
## Held-changeset window scope (Phase 1)
|
|
218
|
+
|
|
219
|
+
Phase 1 of the RFC framework (Slices 2-5 per `docs/plans/170-rfc-framework-story-map.md`) ships under a held-changeset window. ADR-042 auto-apply is paused until RFC-001 (P168 retro) reaches `closed` status. Counterfactual risk assessment per P162 governs graduation: delay-risk vs release-risk. The full chain graduates atomically — the entire RFC-001 commit chain ships or nothing does.
|
|
220
|
+
|
|
221
|
+
## Composition with capture-rfc
|
|
222
|
+
|
|
223
|
+
| Concern | manage-rfc (this skill) | capture-rfc (sibling) |
|
|
224
|
+
|---------|-------------------------|----------------------|
|
|
225
|
+
| New RFC creation | Out of scope; redirect to capture-rfc | Owns the lightweight path |
|
|
226
|
+
| Lifecycle transitions | Owns proposed → accepted → in-progress → verifying → closed | Out of scope |
|
|
227
|
+
| WSJF re-rank | Step 9 review owns batch re-rank | Out of scope |
|
|
228
|
+
| README refresh | P094 / P062 inline (regenerate + stage in same commit) | Deferred (capture-time speed) |
|
|
229
|
+
| Commit grain | One commit per intake / per transition / per review | One commit per capture |
|
|
230
|
+
| AskUserQuestion authority | direction-setting (transition-trigger ambiguity), deviation-approval (scope expansion mid-RFC), silent-mechanical (status renames, README refresh) | direction-setting (problem-trace), taste (title), silent-mechanical (everything else) |
|
|
231
|
+
|
|
232
|
+
The two skills share the `/tmp/wr-itil-rfc-capture-grep-${SESSION_ID}` create-gate marker (sibling to `/tmp/manage-problem-grep-${SESSION_ID}`).
|
|
233
|
+
|
|
234
|
+
## Related
|
|
235
|
+
|
|
236
|
+
- **ADR-060** — Problem-RFC-Story framework with mandatory problem-trace and unified problem ontology.
|
|
237
|
+
- **P170** — driver problem ticket.
|
|
238
|
+
- **`docs/plans/170-rfc-framework-story-map.md`** — Slice 2 task B5.T4 lands this skill.
|
|
239
|
+
- **JTBD-008** (primary), JTBD-001 (extended scope), JTBD-101 (atomic-fix-adopter friction guard).
|
|
240
|
+
- **`docs/rfcs/README.md`** — lifecycle index + frontmatter shape (Slice 2 B5.T1 + B5.T2 — `adc53c8`).
|
|
241
|
+
- **`packages/itil/skills/capture-rfc/SKILL.md`** — sibling lightweight capture skill.
|
|
242
|
+
- **`packages/itil/skills/manage-problem/SKILL.md`** — heavyweight counterpart at the problem tier; structural template for this skill.
|
|
243
|
+
- **ADR-014** — single-commit governance grain.
|
|
244
|
+
- **ADR-022** — lifecycle suffix-based (RFC mirrors).
|
|
245
|
+
- **ADR-032** — lightweight + heavyweight split.
|
|
246
|
+
- **ADR-038** — progressive disclosure; future REFERENCE.md split deferred per ADR-054.
|
|
247
|
+
- **ADR-042** — held-changeset auto-apply; window discipline.
|
|
248
|
+
- **ADR-044** — decision delegation contract; authority classes.
|
|
249
|
+
- **ADR-049** — `wr-itil-reconcile-rfcs` shim grammar (Slice 3).
|
|
250
|
+
- **ADR-051** — load-bearing-from-the-start; I1 hard-block on day one.
|
|
251
|
+
- **ADR-052** — behavioural-tests default; bats coverage in Slice 2 B5.T5.
|
|
252
|
+
- **P057** — staging trap rule (re-stage after Edit on every transition).
|
|
253
|
+
- **P062** — README refresh on transition.
|
|
254
|
+
- **P094** — README refresh on conditional update.
|
|
255
|
+
- **P118** — README reconciliation contract.
|
|
256
|
+
- **P132** + inverse-P078 — mechanical-stage carve-outs prevent over-asking.
|
|
257
|
+
- **P134** — Last-reviewed line discipline (single fragment + history archive).
|
|
258
|
+
- **P138** — tie-break ladder consistency.
|
|
259
|
+
- **P150** — Verification Queue sort direction.
|
|
260
|
+
- **P162** — held-changeset graduation criteria.
|