Skip to content

Commit 505346c

Browse files
authored
Merge pull request #23 from gtrabanco/feat/05-adversarial-context-clean-review
feat(review): adversarial find stance + context-clean end-review contract
2 parents 28bd8a2 + 2f94ec7 commit 505346c

9 files changed

Lines changed: 343 additions & 8 deletions

File tree

CHANGELOG.es.md

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,7 @@ Cómo funciona el pinning realmente, **verificado** contra el CLI `skills`:
198198
#### `review-change`
199199
| Versión | Fecha | Tipo | Qué cambió |
200200
|---|---|---|---|
201+
| 1.11.0 | 2026-07-09 | menor | El turn contract gana una casilla obligatoria de contexto limpio: la revisión final obligatoria de fin de unidad debe correr en una conversación que NO implementó el cambio — si lo hizo, PARAR y hacer hand-off a una nueva. "When to use" reescrito para exponer el requisito en prosa (la sección Portability ya existente referencia la línea de preferencia de familia de modelo cruzada de la feature 04; sin cambios aquí). |
201202
| 1.10.2 | 2026-07-09 | parche | El invariante de modelo en Portability se extiende: "nunca revises con un modelo más débil — y prefiere una familia de modelo distinta a la del autor" (instancias de la misma familia comparten puntos ciegos de entrenamiento; una familia cruzada descorrelaciona errores). Solo redacción. |
202203
| 1.10.1 | 2026-07-05 | parche | Referencias cruzadas actualizadas para `execute-phase` 1.14.0: el hand-off cada 2 fases se describe ahora como checkpoint recomendado y omitible; la revisión final obligatoria antes del merge no cambia. |
203204
| 1.10.0 | 2026-07-05 | menor | Envelope máquina: cada invocación termina ahora con un bloque JSON fijo (state, unit, phase, pr, findings, blockers, dependencies, next + pista de tier de modelo) para orquestación programática — esquema en la skill interna `orchestration-envelope`, protocolo en `docs/workflow/ORCHESTRATION.md`. Los hallazgos fix-now y los números de issue creados viajan en el envelope; la deriva de SPEC recurrente activa el flag de recomendación de product-audit. |
@@ -303,7 +304,8 @@ Cómo funciona el pinning realmente, **verificado** contra el CLI `skills`:
303304
| Skill | Versión | Fecha | Tipo | Qué cambió |
304305
|---|---|---|---|---|
305306
| `orchestration-envelope` | 1.0.0 | 2026-07-05 || Nuevo contrato interno: el esquema JSON del envelope máquina (11 estados, claves fijas, regla de parseo último-json-cercado) que toda skill de cara al usuario emite como su salida final absoluta. |
306-
| `review-implementation` | 1.0.3 | 2026-07-04 | parche | Sin cambio de comportamiento: el frontmatter `model:`/`effort:` de esta skill se trasladó a `docs/workflow/model-routing.yml` (usado solo para construir la rama `#claude`). |
307+
| `review-implementation` | 1.1.0 | 2026-07-09 | menor | La postura de la Fase 1 ("Find") ahora es adversarial por defecto: "asume que el diff está MAL — tu trabajo es probar que no funciona". La tabla de ejes y la rúbrica de clasificación de la Fase 2 no cambian. |
308+
| | 1.0.3 | 2026-07-04 | parche | Sin cambio de comportamiento: el frontmatter `model:`/`effort:` de esta skill se trasladó a `docs/workflow/model-routing.yml` (usado solo para construir la rama `#claude`). |
307309
| | 1.0.2 | 2026-07-02 | parche | La referencia a revisiones companion ahora apunta al pack de revisión interno (`review-*`) |
308310
| | 1.0.1 | 2026-06-09 | parche | Descripción acortada 96 → 36 palabras (contexto siempre cargado); cuerpo sin cambios |
309311
| | 1.0.0 | 2026-06-05 || El motor de hallazgos + rúbrica de clasificación que compone `review-change` |
@@ -346,6 +348,18 @@ Cómo funciona el pinning realmente, **verificado** contra el CLI `skills`:
346348

347349
## Registro cronológico (más reciente primero)
348350

351+
- **2026-07-09 — revisión adversarial con contexto limpio.** Endurece la
352+
revisión final obligatoria de fin de unidad contra el fallo de compartir
353+
contexto, donde la conversación que escribió un cambio también lo revisa:
354+
la postura de la Fase 1 de `review-implementation` 1.1.0 ahora es
355+
adversarial por defecto ("asume que el diff está MAL — prueba que no
356+
funciona"), y `review-change` 1.11.0 gana una casilla obligatoria en su
357+
turn contract que exige que la revisión final corra en una conversación
358+
que no implementó el cambio (si lo hizo, PARAR y hacer hand-off). Referencia
359+
la línea de preferencia de familia de modelo cruzada de la feature
360+
`04-running-economically` en lugar de repetirla. Feature
361+
`05-adversarial-context-clean-review`.
362+
349363
- **2026-07-05 — recuperación de caídas del orquestador.** Los drivers
350364
externos (incluidos servidores Node/opencode solo-REST) ganan una ruta de
351365
reinicio segura: `workflow-status` 1.1.0 clasifica los turnos

CHANGELOG.md

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,7 @@ How pinning actually works, verified against the `skills` CLI:
196196
#### `review-change`
197197
| Version | Date | Type | What changed |
198198
|---|---|---|---|
199+
| 1.11.0 | 2026-07-09 | minor | Turn contract gains a mandatory context-clean box: the mandatory end-of-unit review must run in a conversation that did NOT implement the change — if it did, STOP and hand off to a fresh one. "When to use" reworded to state the requirement in prose (the pre-existing Portability section already points to feature 04's cross-family model-preference line; unchanged here). |
199200
| 1.10.2 | 2026-07-09 | patch | Portability's model invariant extended: "never review with a weaker model — and prefer a different model **family** than the writer's" (same-family instances share training blind spots; cross-family decorrelates errors). Wording-only. |
200201
| 1.10.1 | 2026-07-05 | patch | Cross-references updated for `execute-phase` 1.14.0: the every-2-phases hand-off is now described as a recommended, skippable checkpoint; the mandatory-before-merge end review is unchanged. |
201202
| 1.10.0 | 2026-07-05 | minor | Machine envelope: every invocation now ends with a fixed JSON block (state, unit, phase, pr, findings, blockers, dependencies, next + model-tier hint) for programmatic orchestration — schema in the internal `orchestration-envelope` skill, protocol in `docs/workflow/ORCHESTRATION.md`. fix-now findings and filed issue numbers ride the envelope; recurring SPEC drift sets the product-audit recommendation flag. |
@@ -301,7 +302,8 @@ How pinning actually works, verified against the `skills` CLI:
301302
| Skill | Version | Date | Type | What changed |
302303
|---|---|---|---|---|
303304
| `orchestration-envelope` | 1.0.0 | 2026-07-05 || New internal contract: the machine-envelope JSON schema (11 states, fixed keys, last-fenced-json parse rule) every user-facing skill emits as its absolute last output. |
304-
| `review-implementation` | 1.0.3 | 2026-07-04 | patch | No behavior change: this skill's `model:`/`effort:` frontmatter moved to `docs/workflow/model-routing.yml` (used only to build the `#claude` branch). |
305+
| `review-implementation` | 1.1.0 | 2026-07-09 | minor | Phase 1 ("Find") stance is now adversarial by default: "assume the diff is WRONG — your job is to prove it does not work." The axis table and the Phase 2 classification rubric are unchanged. |
306+
| | 1.0.3 | 2026-07-04 | patch | No behavior change: this skill's `model:`/`effort:` frontmatter moved to `docs/workflow/model-routing.yml` (used only to build the `#claude` branch). |
305307
| | 1.0.2 | 2026-07-02 | patch | Companion-review reference now points at the internal review pack (`review-*`) |
306308
| | 1.0.1 | 2026-06-09 | patch | Description shortened 96 → 36 words (always-loaded context); body unchanged |
307309
| | 1.0.0 | 2026-06-05 || The findings engine + classification rubric `review-change` composes |
@@ -344,6 +346,17 @@ How pinning actually works, verified against the `skills` CLI:
344346

345347
## Release log (chronological, newest first)
346348

349+
- **2026-07-09 — adversarial context-clean review.** Hardens the mandatory
350+
end-of-unit review against the context-sharing failure mode where the
351+
conversation that wrote a change also reviews it: `review-implementation`
352+
1.1.0's Phase 1 stance is now adversarial by default ("assume the diff is
353+
WRONG — prove it does not work"), and `review-change` 1.11.0 gains a
354+
mandatory turn-contract box requiring the end review to run in a
355+
conversation that did not implement the change (STOP and hand off
356+
otherwise). References feature `04-running-economically`'s cross-family
357+
model-preference line rather than restating it. Feature
358+
`05-adversarial-context-clean-review`.
359+
347360
- **2026-07-05 — orchestrator crash recovery.** External drivers (REST-only
348361
Node/opencode servers included) get a safe restart path: `workflow-status`
349362
1.1.0 classifies interrupted turns from ground truth into

README.es.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ con ningún modelo. Un único camino disciplinado:
107107

108108
| Skill | Alcance | Qué hace |
109109
| --------------- | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
110-
| `review-change` | el **cambio** | Ejecuta solo las revisiones que **aplican a tu plataforma** (código, seguridad, verify, diseño, a11y, marca, rendimiento, SEO) y clasifica → una tabla de decisión + una checklist explícita de verificación manual; un árbol sucio o commits sin push en la rama del PR son hallazgos `workflow` fix-now |
110+
| `review-change` | el **cambio** | Ejecuta solo las revisiones que **aplican a tu plataforma** (código, seguridad, verify, diseño, a11y, marca, rendimiento, SEO) — adversariales por defecto, asumiendo que el diff está mal hasta probar lo contrario — y clasifica → una tabla de decisión + una checklist explícita de verificación manual; un árbol sucio o commits sin push en la rama del PR son hallazgos `workflow` fix-now. La revisión final obligatoria **debe correr en una conversación que no implementó el cambio** — si lo hizo, parar y hacer hand-off a una nueva |
111111
| `audit-pr` | el **PR** | Gate de fusión: criterios de aceptación cumplidos, todas las fases hechas, docs/tests/CI en verde, `Closes #N`, ejes de revisión limpios → **listo para fusionar o una lista de bloqueantes**, siempre con la URL completa del PR; con MERGE-READY publica un comentario datado y ligado al SHA en el propio PR. Auto-merge opt-in: con una política documentada fusiona PRs MERGE-READY tras un checklist de limpieza fail-closed (algo pendiente → push, esperar CI, re-auditar) |
112112
| `product-audit` | el **producto** | Chequeo de salud periódico de espectro completo; mina las docs de features → propone issues + altas/bajas en el roadmap (**nunca arregla automáticamente**) |
113113
| `audit-docs` | las **docs** | Audita docs ↔ roadmap ↔ código ↔ índice de fixes en busca de desviaciones |

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ path: **plan → execute → review → audit → merge.**
105105

106106
| Skill | Scope | What it does |
107107
| --------------- | --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
108-
| `review-change` | the **change** | Runs only the reviews that **apply to your platform** (code, security, verify, design, a11y, brand, perf, SEO) and classifies → one decision table + an explicit manual-verification checklist; a dirty tree or unpushed commits on the PR branch are fix-now `workflow` findings |
108+
| `review-change` | the **change** | Runs only the reviews that **apply to your platform** (code, security, verify, design, a11y, brand, perf, SEO) — adversarially by default, assuming the diff is wrong until proven otherwise — and classifies → one decision table + an explicit manual-verification checklist; a dirty tree or unpushed commits on the PR branch are fix-now `workflow` findings. The mandatory end review **must run in a conversation that did not implement the change** — if it did, stop and hand off to a fresh one |
109109
| `audit-pr` | the **PR** | Merge gate: acceptance met, all phases done, docs/tests/CI green, `Closes #N`, review axes clean → **merge-ready or a list of blockers**, always with the PR's full URL; on MERGE-READY it posts a dated, SHA-bound comment on the PR itself. Opt-in auto-merge: with a documented policy it merges MERGE-READY PRs after a fail-closed cleanliness checklist (anything pending → push, wait for CI, re-audit) |
110110
| `product-audit` | the **product** | Periodic full-spectrum health check; mines feature docs → proposes issues + roadmap add/remove (**never auto-fixes**) |
111111
| `audit-docs` | the **docs** | Audits docs ↔ roadmap ↔ code ↔ fix index for drift |
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# Completion checklist — 05-adversarial-context-clean-review
2+
3+
- Schema migration applied — n/a, docs-only change.
4+
- Core layer has no outer imports — n/a, no code.
5+
- Orchestration idempotent + typed errors — n/a, no code.
6+
- Adapters implement ports — n/a, no code.
7+
- Tests pass — n/a, no test layer; textual/structural gate below is "green".
8+
- Type-check/lint green — `npx skills add . --list` discovers both edited
9+
skills; frontmatter parses.
10+
- UI strings localized — n/a, no UI.
11+
- Domain value-object rules respected — n/a, no code.
12+
- User-facing limitations disclosed — n/a, internal workflow-quality change,
13+
no external product surface.
14+
- New deps pinned — n/a, no dependencies added.
15+
16+
## Acceptance criteria verification
17+
18+
1. `grep -iq "assume the diff is wrong" skills/review-implementation/SKILL.md`
19+
→ PASS.
20+
2. Phase 1 axis table (10 axes) and the entire Phase 2 classification section
21+
are unchanged in structure — confirmed by diff review: only the Phase 1
22+
opening sentence changed; the axis table and Phase 2 are untouched.
23+
3. `grep -n "did NOT implement" skills/review-change/SKILL.md` → matches
24+
inside the `## Turn contract` fence.
25+
4. Cross-family model preference is referenced (not re-authored) in
26+
`review-change`'s Portability section, which already pointed at the
27+
preference; `review-change`'s "When to use" points at the same
28+
turn-contract box rather than restating feature 04's text.
29+
5. `grep -rq "adversarial N\|--adversarial" skills/review-change
30+
skills/review-implementation` → no match (PASS, nothing introduced).
31+
6. `review-implementation` 1.0.3 → 1.1.0 (minor); `review-change` 1.10.2 →
32+
1.11.0 (minor). Matching rows added to `CHANGELOG.md` and
33+
`CHANGELOG.es.md`; README/README.es.md skills tables updated for
34+
`review-change`'s cell (behavior changed); model/effort tables untouched
35+
(no tier change).
36+
7. `npx skills add . --list` still discovers every skill, both edited files
37+
parse.
38+
39+
## Decisions not captured in the SPEC
40+
41+
None — implementation followed the SPEC's Design section verbatim (Edit 1,
42+
Edit 2, no caller edits needed since neither `audit-pr` nor `product-audit`
43+
restate the neutral Phase 1 stance).

0 commit comments

Comments
 (0)