@windyroad/retrospective 0.26.0 → 0.26.1-preview.814

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.
@@ -78,5 +78,5 @@
78
78
  }
79
79
  },
80
80
  "name": "wr-retrospective",
81
- "version": "0.26.0"
81
+ "version": "0.26.1"
82
82
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@windyroad/retrospective",
3
- "version": "0.26.0",
3
+ "version": "0.26.1-preview.814",
4
4
  "description": "Session retrospectives that update briefings and create problem tickets",
5
5
  "bin": {
6
6
  "windyroad-retrospective": "./bin/install.mjs"
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: wr-retrospective:analyze-context
3
- description: Deep context-usage analyzer. Runs richer heuristics than run-retro Step 2c — per-turn attribution, per-plugin decomposition, suggestion generation, policy-breach detection. Produces a markdown report at docs/retros/<date>-context-analysis.md with an HTML-comment trailer carrying the bucket-snapshot for delta-from-prior comparison. Auto-fires from run-retro Step 2c when the combined trigger holds (calendar-elapse >14 days OR delta >20% any bucket, once-per-day guard) per ADR-043 Amendment 2026-06-08; also user-invokable on demand.
3
+ description: Deep context-usage analyzer. Runs richer heuristics than run-retro Step 2c — per-turn attribution, per-plugin decomposition, suggestion generation, policy-breach detection. Produces a markdown report at docs/retros/<date>-context-analysis.md with an HTML-comment trailer carrying the bucket-snapshot for delta-from-prior comparison. Auto-fires from run-retro Step 2c when the combined trigger holds (calendar-elapse >14 days OR a bucket changes >20% AND >10 KB, once-per-day guard) per ADR-043 Amendments 2026-06-08 / 2026-06-17; also user-invokable on demand.
4
4
  allowed-tools: Read, Write, Edit, Bash, Glob, Grep, Skill
5
5
  ---
6
6
 
@@ -13,11 +13,11 @@ This skill is the **deep layer** of the two-layer design in **ADR-043** (Progres
13
13
  ## When to use
14
14
 
15
15
  - The user invokes `/wr-retrospective:analyze-context` directly.
16
- - **Auto-fired by run-retro Step 2c** when the combined trigger holds (calendar-elapse >14 days OR delta >20% any bucket since prior snapshot) and the once-per-day guard is not satisfied (no `docs/retros/<TODAY>-context-analysis.md` exists). Per ADR-043 Amendment 2026-06-08 (P295 settlement).
16
+ - **Auto-fired by run-retro Step 2c** when the combined trigger holds (calendar-elapse >14 days OR a bucket's byte total changes by >20% AND by more than the 10 KB absolute minimum-delta floor since prior snapshot) and the once-per-day guard is not satisfied (no `docs/retros/<TODAY>-context-analysis.md` exists). Per ADR-043 Amendment 2026-06-08 (P295 settlement) + Amendment 2026-06-17 (P372 absolute-floor gate on the delta axis).
17
17
  - The user is preparing to trim context — e.g. before a release that introduces new hooks or skills, or after observing early compaction in long-running AFK loops.
18
18
  - The user wants a baseline snapshot at a known-good moment (e.g. immediately after a P091-cluster fix lands).
19
19
 
20
- **Auto-fires from run-retro Step 2c, silent in interactive and AFK modes.** Per ADR-043 Amendment 2026-06-08 + ADR-044 framework-resolution boundary, this skill auto-fires from the cheap layer when the combined trigger condition holds (calendar-elapse OR delta breach, capped at once per day). The skill never invokes `AskUserQuestion` — it writes a committed `docs/retros/<TODAY>-context-analysis.md` report and exits. AFK orchestrators read the resulting report on iteration close; the user reviews on return.
20
+ **Auto-fires from run-retro Step 2c, silent in interactive and AFK modes.** Per ADR-043 Amendment 2026-06-08 + ADR-044 framework-resolution boundary, this skill auto-fires from the cheap layer when the combined trigger condition holds (calendar-elapse OR a delta breach clearing both the 20% and the 10 KB absolute floor, capped at once per day). The skill never invokes `AskUserQuestion` — it writes a committed `docs/retros/<TODAY>-context-analysis.md` report and exits. AFK orchestrators read the resulting report on iteration close; the user reviews on return.
21
21
 
22
22
  ## Output Formatting
23
23
 
@@ -55,7 +55,7 @@ After reading the briefing tree, score every entry in `docs/briefing/*.md` to de
55
55
  |-------------|--------|
56
56
  | >= +3 | Promote to Critical Points candidate. The agent adds the entry to the Critical Points roll-up in `docs/briefing/README.md` during Step 3. |
57
57
  | 0 .. +2 | Keep in the topic file. No roll-up change. |
58
- | <= -3 | Route to the **delete queue**. These entries are surfaced for user confirmation in a single batched `AskUserQuestion` at the end of this step. |
58
+ | <= -3 | **Silent removal** — no `AskUserQuestion`. The agent removes / trims the entry as part of Step 3 briefing curation and surfaces each removal in the Step 5 retro summary's Signal-vs-Noise Pass table with its score + ADR-026 citation; the user audits there and corrects via P078 authentic-correction if a removal was wrong (removals are reversible from git). See **Delete handling** below. |
59
59
 
60
60
  **Per-entry persistence format**: each briefing entry carries a trailing HTML comment block:
61
61
 
@@ -68,18 +68,9 @@ The comment block is appended to the list item (or heading) that contains the en
68
68
 
69
69
  **Classification ownership (policy-authorised per ADR-013 Rule 5)**: the agent owns silent classification. No `AskUserQuestion` is fired for individual entry promotions, demotions, or keep decisions. The agent applies the ADR-026 heuristic directly: entry cited in a tool call (or paraphrased in reasoning) during the session = signal; never loaded or loaded-but-unused = noise; ambiguous cases still classify but with a tentative flag the next retro resolves.
70
70
 
71
- **Delete queue confirmation**: after scoring all entries, if any entries have a score <= -3:
71
+ **Delete handling — silent (no `AskUserQuestion`)**: entries scored <= -3 are handled SILENTLY. NO `AskUserQuestion` fires to confirm deletes, at any score band, in interactive OR AFK mode. This is the load-bearing direction every other authority already states: ADR-044's framework-resolution boundary lists "Briefing add / remove / rotate" as a framework-mediated NOT-an-`AskUserQuestion` surface; Step 3's "Removals are silent (P135 / ADR-044)" clause; CLAUDE.md MANDATORY P132 worked-example list (which names "run-retro Step 1.5 silent classification, Step 3 briefing removals"); and ADR-013 Rules 1/5. The agent classifies, the deletes are applied during Step 3 briefing curation, and each removal surfaces in the Step 5 retro summary's "Signal-vs-Noise Pass" table (each candidate with its score + the ADR-026 citation that led to the noise classification). The user audits the Step 5 table and corrects via P078 authentic-correction if a removal was wrong (removals are reversible from git). The AFK queue-and-continue surfacing is specified in the fallback paragraph below (P352).
72
72
 
73
- 1. Present a single `AskUserQuestion` with `header: "Delete briefing entries?"` and `multiSelect: false`.
74
- 2. The question body lists each delete candidate with its score and the ADR-026 citation that led to the noise classification.
75
- 3. Options (up to 4 per prompt, sequential if > 4):
76
- 1. `Confirm all deletions` — description: "Remove all listed entries from their topic files."
77
- 2. `Delete selected only` — description: "The agent will present a follow-up with per-entry checkboxes."
78
- 3. `Keep all (defer to next retro)` — description: "Leave entries in place; scores remain unchanged."
79
- 4. `Review individually` — description: "Present each entry one at a time for keep/delete decision."
80
- 4. If the queue is empty, skip the prompt entirely.
81
-
82
- If the user chooses `Delete selected only` or `Review individually`, present subsequent `AskUserQuestion` calls as needed, respecting the 4-option cap per ADR-013 Rule 1.
73
+ Firing a batched `AskUserQuestion` to confirm deletes is the inverse-P078 lazy-deferral trap — sub-contracting a framework-resolved decision back to the user (lazy classification per the Step 2d Ask Hygiene Pass). It is superseded prose; do NOT reintroduce it.
83
74
 
84
75
  **Tier 1 budget guard**: if promoting all score >= +3 entries would breach the 2 KB / ~10-bullet Critical Points budget (ADR-040), promote only the highest-scored entries until the budget is met and surface the remainder as a budget-overflow advisory in the retro summary.
85
76
 
@@ -92,7 +83,7 @@ If the user chooses `Delete selected only` or `Review individually`, present sub
92
83
  - "Weaker evidence so defer to user pick" — the pass IS the evidence-gathering step. Citing "weaker evidence" without running the pass is circular.
93
84
  - Fabricating "wrap-mode vs mid-session" exemptions that do not exist in this SKILL — Step 1.5 fires uniformly regardless of when run-retro is invoked.
94
85
 
95
- Per ADR-044 framework-resolution boundary: Step 1.5 is mechanical (silent classification + AFK queue surfacing). The pass MUST emit a populated Signal-vs-Noise table in Step 5 (or, in interactive mode, the delete-queue prompt). An empty / "Deferred" emit without scan evidence is a Step 1.5 violation per P332. Same lost-observation hazard P148 captures: the silent skip has zero recovery affordance, while the populated table preserves the agent's judgement on disk for user audit.
86
+ Per ADR-044 framework-resolution boundary: Step 1.5 is mechanical (silent classification + AFK queue surfacing). The pass MUST emit a populated Signal-vs-Noise table in Step 5. An empty / "Deferred" emit without scan evidence is a Step 1.5 violation per P332. Same lost-observation hazard P148 captures: the silent skip has zero recovery affordance, while the populated table preserves the agent's judgement on disk for user audit.
96
87
 
97
88
  **See also**: P148 (Step 4b Stage 1 anti-pattern driver — same class, different step); P332 (run-retro meta-surface recurrence driver).
98
89
 
@@ -248,12 +239,12 @@ Per **ADR-043** (Progressive context-usage measurement and reporting for retrosp
248
239
  4. **Auto-invoke the deep layer when the combined trigger holds (ADR-043 Amendment 2026-06-08, settles P295)**. After rendering the cheap-layer report, evaluate the combined whichever-comes-first trigger:
249
240
 
250
241
  - **Calendar-elapse**: the most recent `docs/retros/*-context-analysis.md` (lex-desc sort on date in filename) is older than 14 days, OR no prior report exists.
251
- - **Delta-breach**: any bucket's byte total in the just-rendered report has changed by more than 20% versus the prior snapshot (HTML-comment trailer from step 2).
242
+ - **Delta-breach**: any bucket's byte total in the just-rendered report has BOTH (a) changed by more than 20% versus the prior snapshot (HTML-comment trailer from step 2) AND (b) changed by more than the absolute minimum-delta floor of 10 KB — i.e. `|current − prior| > 10240` bytes. Both conditions are required. The absolute floor suppresses negligible-delta noise: a small bucket (`project-claude-md`, `jtbd`) can trip the 20% rule on a sub-2 KB edit (e.g. `project-claude-md` 4277→5897 bytes = +37.9% but only +1620 absolute), which does not warrant the deep layer's committed-report + subagent cost. The 10 KB floor is `not estimated — chosen as initial value, reassess after 6 months of cross-project use` per ADR-026, symmetric with the 14-day / 20% grounding (ADR-043 Amendment 2026-06-17). The calendar-elapse axis still re-fires a large-but-stable bucket every 14 days regardless of delta, so the floor loses no coverage of the dominant context cost.
252
243
  - **Once-per-day guard**: if `docs/retros/<TODAY>-context-analysis.md` already exists (where `<TODAY>` is the current ISO date), treat the trigger as already-satisfied and skip auto-invocation. The snapshot artefact itself is the state; no new persistent state file is needed.
253
244
 
254
245
  When the trigger holds AND the once-per-day guard is not satisfied, invoke `/wr-retrospective:analyze-context` via the Skill tool. The deep layer is silent (never invokes `AskUserQuestion`) and produces a committed `docs/retros/<TODAY>-context-analysis.md` report. Record the auto-invocation outcome in the cheap-layer section: `Deep analysis auto-fired — see docs/retros/<TODAY>-context-analysis.md.` Identical behaviour in interactive and AFK modes per ADR-013 Rule 6 + ADR-044 framework-resolution boundary — auto-invocation is framework-resolved mechanical action, not a user-decided surface.
255
246
 
256
- When the trigger does NOT hold (no calendar elapse AND no delta breach), emit a one-line note: `Cadence trigger inactive — next auto-fire when calendar-elapse >14 days OR delta >20% any bucket.` This is non-blocking and never a prompt.
247
+ When the trigger does NOT hold (no calendar elapse AND no qualifying delta breach — a delta breach qualifies only when it clears BOTH the 20% and the 10 KB floor), emit a one-line note: `Cadence trigger inactive — next auto-fire when calendar-elapse >14 days OR a bucket changes >20% AND >10 KB.` This is non-blocking and never a prompt.
257
248
 
258
249
  When the trigger holds but the once-per-day guard fires (today's report already exists), emit: `Cadence trigger holds; auto-fire skipped — docs/retros/<TODAY>-context-analysis.md already present.`
259
250
 
@@ -74,13 +74,21 @@ setup() {
74
74
  [ "$status" -eq 0 ]
75
75
  }
76
76
 
77
- @test "run-retro: Step 1.5 delete queue uses single batched AskUserQuestion (ADR-013 Rule 1)" {
78
- run grep -F 'Delete briefing entries?' "$SKILL_MD"
77
+ @test "run-retro: Step 1.5 delete queue is silent no AskUserQuestion (ADR-044 / P132; reconciled by P393)" {
78
+ # Step 1.5 deletes are SILENT (framework-mediated per ADR-044 "Briefing add/remove/rotate"
79
+ # + the CLAUDE.md P132 worked-example "run-retro Step 1.5 silent classification, Step 3
80
+ # briefing removals"). The superseded "single batched AskUserQuestion to confirm deletes"
81
+ # prose was a self-contradiction against Step 3's "Removals are silent" clause; reconciled
82
+ # to silent-delete by P393. This asserts the reconciled contract.
83
+ run grep -F 'Silent removal' "$SKILL_MD"
79
84
  [ "$status" -eq 0 ]
80
- run grep -F 'Confirm all deletions' "$SKILL_MD"
85
+ run grep -F 'Delete handling — silent' "$SKILL_MD"
81
86
  [ "$status" -eq 0 ]
82
- run grep -F 'Keep all (defer to next retro)' "$SKILL_MD"
87
+ run grep -F 'do NOT reintroduce it' "$SKILL_MD"
83
88
  [ "$status" -eq 0 ]
89
+ # negative: the superseded delete-confirmation prompt must NOT return
90
+ run grep -F 'Delete briefing entries?' "$SKILL_MD"
91
+ [ "$status" -ne 0 ]
84
92
  }
85
93
 
86
94
  @test "run-retro: Step 1.5 AFK fallback defers delete queue to retro summary (ADR-013 Rule 6)" {