feat(skills): add decorrelated review lenses to sdlc-review

Teach the kanban reviewer to vary its inspection lens per review round
instead of repeating the same framing: round 1 reads the artifact cold
before the implementer narrative, round 2 checks out and empirically
executes the work, round 3+ audits strictly against the original
acceptance criteria and every prior request_changes item. The round is
derived from the changes_requested entries already visible in the
reviewer's worker context (live-verified against build_worker_context
across two real request_review/request_changes rounds on an isolated
board). Also adds a lens-variation note for parallel delegate_task
review fan-outs. Contract test updated with section order and lens
assertions.
This commit is contained in:
Teknium
2026-08-10 12:50:14 -07:00
parent a98aee47ce
commit 411a07481b
2 changed files with 35 additions and 2 deletions

View File

@@ -1,7 +1,7 @@
---
name: sdlc-review
description: Review Kanban handoffs and route verified outcomes.
version: 1.0.0
version: 1.1.0
author: Jakub Wolniewicz (@frizikk) + Hermes Agent
license: MIT
platforms: [linux, macos, windows]
@@ -54,6 +54,24 @@ This skill is loaded automatically by the review dispatcher. Start with `kanban_
A requested-changes transition returns the task to its original implementer. When that implementer requests review again without naming a reviewer, the persisted reviewer provenance routes the re-review back to the same reviewer profile.
## Review Lenses
Vary how you look at the work on each round instead of repeating the same inspection. Decorrelated lenses catch different defect classes: a cold read of the artifact surfaces design and correctness problems that the implementer's narrative would have framed away, execution surfaces claims that do not reproduce, and a strict contract audit surfaces quiet scope drift. Repeating the round-1 lens on round 3 mostly re-finds what round 1 already found.
Determine the current round from the history the task record already gives you: count the `changes_requested` entries in the "Prior attempts on this task" section of your worker context (also visible as prior runs in `kanban_show`). The current review round is that count plus one. Round 1 therefore shows zero `changes_requested` attempts; round 2 shows one; and so on.
| Round | Lens | How to apply it |
|---|---|---|
| 1 | Artifact | Read the diff or deliverable cold, before the implementer's summary. Form an independent judgment, then compare it against the handoff narrative and investigate every mismatch. |
| 2 | Execution | Check out the work and actually run it via `terminal`: build, test, and exercise the reported behavior yourself. Verify each handoff claim empirically instead of re-reading the artifact. |
| 3+ | Contract | Re-read the ORIGINAL task body and acceptance criteria, then audit the deliverable strictly against them. Also verify that every item from every prior `kanban_request_changes` round actually landed. |
The baseline duties in the Procedure section still apply on every round; the lens sets which inspection you lead with and weight most heavily.
### Lens variation for ad-hoc review fan-outs
The same principle applies outside the Kanban review lane. When spawning multiple parallel reviewers via `delegate_task`, give each reviewer a different lens — one diff-only brief, one full-context brief, one checkout-and-run brief — rather than identical briefs. Identical briefs produce correlated verdicts and duplicate findings; varied briefs cover more defect classes for the same review spend.
## Procedure
### 1. Orient from the durable task record

View File

@@ -19,6 +19,7 @@ REQUIRED_SECTIONS = [
"## Prerequisites",
"## How to Run",
"## Quick Reference",
"## Review Lenses",
"## Procedure",
"## Pitfalls",
"## Verification",
@@ -72,9 +73,23 @@ def test_skill_documents_native_review_actions(
def test_verdicts_route_through_distinct_terminal_actions(skill_text: str) -> None:
quick_reference = skill_text.split("## Quick Reference", 1)[1].split(
"## Procedure", 1
"## Review Lenses", 1
)[0]
assert "Approve" in quick_reference and "`kanban_complete`" in quick_reference
assert "Request changes" in quick_reference
assert "`kanban_request_changes`" in quick_reference
assert "Escalate" in quick_reference and "`kanban_block`" in quick_reference
def test_review_lenses_vary_per_round(skill_text: str) -> None:
lenses = skill_text.split("## Review Lenses", 1)[1].split("## Procedure", 1)[0]
# Round derivation must key off history the reviewer actually sees.
assert "`changes_requested`" in lenses
assert "Prior attempts on this task" in lenses
# One distinct lens per round.
for lens in ("Artifact", "Execution", "Contract"):
assert lens in lenses
# Execution lens must direct empirical verification via the terminal.
assert "`terminal`" in lenses
# Fan-out note: parallel reviewers get different briefs.
assert "`delegate_task`" in lenses