Skip to content

Commit 6b670c0

Browse files
gtrabancoclaude
andcommitted
feat(skills): the detectors audit the workflow discipline itself
What a frontier model assumes, an open model must be told — the detector skills now verify the executors' rules held, mechanically (run the command, never infer): audit-docs 1.5.0 adds workflow-discipline checks 10-13 (phase naming, per-phase docs, branch/PR discipline vs the forge, commit format + dependency closures); product-audit 1.6.0 adds an explicit Workflow discipline dimension composing them; review-change 1.7.0 runs a mechanical discipline check at every checkpoint (axis workflow); audit-pr 1.5.0 blocks on a done row missing its PR link. Changelogs EN/ES. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 parent 0797d09 commit 6b670c0

6 files changed

Lines changed: 81 additions & 17 deletions

File tree

CHANGELOG.es.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ Cómo funciona el pinning realmente, **verificado** contra el CLI `skills`:
141141
#### `review-change`
142142
| Versión | Fecha | Tipo | Qué cambió |
143143
|---|---|---|---|
144+
| 1.7.0 | 2026-07-03 | menor | Check mecánico de disciplina del workflow en cada revisión (eje `workflow`): formato de commits, etiquetas de fase, docs por fase, sin commits en la rama por defecto, idioma de artefactos. |
144145
| 1.6.0 | 2026-07-03 | menor | Contrato de turno al inicio (informe en formato fijo + PASS|FAIL + todo hallazgo enrutado + → Next: impreso al final). |
145146
| 1.5.0 | 2026-07-02 | menor | Compone el pack de revisión interno propio (`review-*`) — las skills externas pasan a extras opcionales, nunca dependencias; contrato de salida fijo "Return exactly" que termina en PASS|FAIL; nota de equivalencia de modelos en la descripción. |
146147
| 1.4.0 | 2026-07-02 | minor | Añadida la sección Portability; "componer in-turn" definido genéricamente como ejecutar dentro de la misma conversación. |
@@ -153,6 +154,7 @@ Cómo funciona el pinning realmente, **verificado** contra el CLI `skills`:
153154
#### `audit-pr`
154155
| Versión | Fecha | Tipo | Qué cambió |
155156
|---|---|---|---|
157+
| 1.5.0 | 2026-07-03 | menor | El gate de Traceability también bloquea si la fila done no lleva su referencia de PR enlazada. |
156158
| 1.4.0 | 2026-07-03 | menor | Contrato de turno al inicio (bloque de veredicto fijo; nada fusionado/editado; → Next: impreso al final). |
157159
| 1.3.1 | 2026-07-02 | parche | Nota de equivalencia de modelos en la descripción (edita model:/effort: para modelos no-Claude / de libre inferencia). |
158160
| 1.3.0 | 2026-07-02 | minor | Añadida la sección Portability con los fallbacks estándar para agentes distintos de Claude Code. |
@@ -166,6 +168,7 @@ Cómo funciona el pinning realmente, **verificado** contra el CLI `skills`:
166168
#### `product-audit`
167169
| Versión | Fecha | Tipo | Qué cambió |
168170
|---|---|---|---|
171+
| 1.6.0 | 2026-07-03 | menor | Dimensión explícita de disciplina del workflow — compone los checks 1-13 de audit-docs mecánicamente; nunca asume que una regla se cumplió. |
169172
| 1.5.0 | 2026-07-03 | menor | Contrato de turno al inicio (informe completo en formato fijo; solo informe; → Next: impreso al final). |
170173
| 1.4.0 | 2026-07-02 | menor | Barre todos los ejes con el pack de revisión interno (sin dependencias de skills externas); nota de equivalencia de modelos en la descripción. |
171174
| 1.3.0 | 2026-07-02 | minor | Añadida la sección Portability; el tip de ultracode ahora indica el fallback secuencial para agentes sin él. |
@@ -181,6 +184,7 @@ Cómo funciona el pinning realmente, **verificado** contra el CLI `skills`:
181184
#### `audit-docs`
182185
| Versión | Fecha | Tipo | Qué cambió |
183186
|---|---|---|---|
187+
| 1.5.0 | 2026-07-03 | menor | Checks de disciplina del workflow 10-13 (comandos mecánicos, no inferencia): nombrado de fases, disciplina de docs por fase, disciplina de rama/PR contra el forge, formato de commits + cierres de dependencias. |
184188
| 1.4.0 | 2026-07-03 | menor | Nuevo check 9: integridad de enlaces de PR en filas `done` — toda fila done del roadmap/índice lleva `done · [#<pr>](url)`; un done sin PR localizable es severidad alta. product-audit lo hereda al componer esta skill. |
185189
| 1.3.0 | 2026-07-03 | menor | Contrato de turno al inicio (informe fijo + PASS|FAIL; sin reescrituras no pedidas; → Next: impreso al final). |
186190
| 1.2.0 | 2026-07-02 | menor | Formato de informe fijo (tabla de hallazgos + conteo de checks + decisión PASS|FAIL); nota de equivalencia de modelos. |
@@ -248,6 +252,18 @@ Cómo funciona el pinning realmente, **verificado** contra el CLI `skills`:
248252

249253
## Registro cronológico (más reciente primero)
250254

255+
- **2026-07-03 (5) — los detectores auditan la disciplina.** Las skills
256+
ejecutoras imponen las reglas del workflow al escribir; ahora las detectoras
257+
verifican que de verdad se cumplieron, mecánicamente (ejecuta el comando,
258+
nunca infieras — lo que un modelo frontier asume, a un modelo abierto hay que
259+
decírselo): `audit-docs` 1.5.0 gana los checks de disciplina 10-13 (nombrado
260+
de fases, docs por fase, disciplina de rama/PR contra el forge, formato de
261+
commits + cierres de dependencias); `product-audit` 1.6.0 estrena la
262+
dimensión explícita de disciplina del workflow componiéndolos;
263+
`review-change` 1.7.0 corre un check mecánico de disciplina en cada
264+
checkpoint (eje `workflow`); `audit-pr` 1.5.0 bloquea si una fila done no
265+
lleva su enlace de PR.
266+
251267
- **2026-07-03 (4) — cierre de PR explícito.** Evidencia de campo (runs de
252268
Hermes dejaban filas del roadmap como `done` a secas mientras Claude producía
253269
`done · #51`): abrir el PR tiene ahora un cierre deletreado — **imprimir la

CHANGELOG.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ How pinning actually works, verified against the `skills` CLI:
139139
#### `review-change`
140140
| Version | Date | Type | What changed |
141141
|---|---|---|---|
142+
| 1.7.0 | 2026-07-03 | minor | Mechanical workflow-discipline check at every review (axis `workflow`): commit format, phase labels, per-phase docs, no default-branch commits, artifact language. |
142143
| 1.6.0 | 2026-07-03 | minor | Turn contract at the top (fixed-format report + PASS|FAIL + every finding routed + → Next: printed last). |
143144
| 1.5.0 | 2026-07-02 | minor | Composes the workflow's own internal review pack (`review-*`) — external skills are now optional extras, never dependencies; fixed "Return exactly" output contract ending in PASS|FAIL; model-equivalence note in the description. |
144145
| 1.4.0 | 2026-07-02 | minor | Added the Portability section; "compose in-turn" defined generically as running within the same conversation. |
@@ -151,6 +152,7 @@ How pinning actually works, verified against the `skills` CLI:
151152
#### `audit-pr`
152153
| Version | Date | Type | What changed |
153154
|---|---|---|---|
155+
| 1.5.0 | 2026-07-03 | minor | Traceability gate also blocks on a done row missing its linked PR reference. |
154156
| 1.4.0 | 2026-07-03 | minor | Turn contract at the top (fixed verdict block; nothing merged/edited; → Next: printed last). |
155157
| 1.3.1 | 2026-07-02 | patch | Model-equivalence note in the description (edit model:/effort: for non-Claude / free-inference models). |
156158
| 1.3.0 | 2026-07-02 | minor | Added the Portability section with the standard non-Claude-Code fallbacks. |
@@ -164,6 +166,7 @@ How pinning actually works, verified against the `skills` CLI:
164166
#### `product-audit`
165167
| Version | Date | Type | What changed |
166168
|---|---|---|---|
169+
| 1.6.0 | 2026-07-03 | minor | Explicit Workflow discipline dimension — composes audit-docs checks 1-13 mechanically; never assumes a rule held. |
167170
| 1.5.0 | 2026-07-03 | minor | Turn contract at the top (full fixed-format report; report-only; → Next: printed last). |
168171
| 1.4.0 | 2026-07-02 | minor | Sweeps every axis via the internal review pack (no external skill dependencies); model-equivalence note in the description. |
169172
| 1.3.0 | 2026-07-02 | minor | Added the Portability section; the ultracode tip now states the sequential fallback for agents without it. |
@@ -179,6 +182,7 @@ How pinning actually works, verified against the `skills` CLI:
179182
#### `audit-docs`
180183
| Version | Date | Type | What changed |
181184
|---|---|---|---|
185+
| 1.5.0 | 2026-07-03 | minor | Workflow-discipline checks 10-13 (mechanical commands, not inference): phase naming, per-phase doc discipline, branch/PR discipline vs the forge, commit format + dependency closures. |
182186
| 1.4.0 | 2026-07-03 | minor | New check 9: PR-link integrity on `done` rows — every done roadmap/fix-index row carries `done · [#<pr>](url)`; a done with no findable PR is high severity. product-audit inherits it by composing this skill. |
183187
| 1.3.0 | 2026-07-03 | minor | Turn contract at the top (fixed report + PASS|FAIL; no unrequested rewrites; → Next: printed last). |
184188
| 1.2.0 | 2026-07-02 | minor | Fixed report format (findings table + checks-run count + PASS|FAIL decision); model-equivalence note. |
@@ -246,6 +250,17 @@ How pinning actually works, verified against the `skills` CLI:
246250

247251
## Release log (chronological, newest first)
248252

253+
- **2026-07-03 (5) — the detectors audit the discipline.** The executor skills
254+
enforce the workflow's rules at write time; now the detector skills verify
255+
they actually held, mechanically (run the command, never infer — what a
256+
frontier model assumes, an open model must be told): `audit-docs` 1.5.0 gains
257+
workflow-discipline checks 10-13 (phase naming, per-phase docs, branch/PR
258+
discipline vs the forge, commit format + dependency closures);
259+
`product-audit` 1.6.0 gets an explicit Workflow-discipline dimension
260+
composing them; `review-change` 1.7.0 runs a mechanical discipline check at
261+
every checkpoint (axis `workflow`); `audit-pr` 1.5.0 blocks on a done row
262+
missing its PR link.
263+
249264
- **2026-07-03 (4) — explicit PR close-out.** Field evidence (Hermes runs left
250265
roadmap rows as bare `done` while Claude runs produced `done · #51`): opening
251266
the PR now has a spelled-out close-out — **print the PR URL in the chat**

skills/audit-docs/SKILL.md

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
name: audit-docs
33
user-invocable: true
4-
version: 1.4.0
4+
version: 1.5.0
55
model: sonnet
66
effort: medium
77
author: "Gabriel Trabanco <gtrabanco@users.noreply.github.com>"
@@ -74,6 +74,31 @@ Run these and collect findings (cite paths/lines/issue numbers each):
7474
the row update; a `done` with no PR found at all is HIGH severity (the unit
7575
may never have been closed out).
7676

77+
**Workflow discipline (checks 10–13)** — the executor skills enforce these at
78+
write time; this audit verifies they actually held. Each check is mechanical:
79+
run the command shown, don't infer.
80+
81+
10. **Phase naming.** `grep -rnE '\bS[0-9]+\b|\bStep [0-9]' docs/features/*/{PLAN,TASKS,progress}.md`
82+
must return nothing — plans use `P1, P2, …` ("phases") only. Any hit: LOW
83+
(rename), plus check the executor argument still resolves.
84+
11. **Per-phase doc discipline.** For every M/L feature `in-progress`/`done`:
85+
completed phases are ticked in `TASKS.md`, `progress.md` has one entry per
86+
completed phase, and (features planned under the current template) the
87+
final phase ends with the literal close-out tasks (open PR + print URL,
88+
link roadmap row, push the link commit). A `done` feature with unticked
89+
tasks or a phase missing from `progress.md`: HIGH.
90+
12. **Branch & PR discipline vs the forge.** For every `done` unit: its PR
91+
exists, targets the default branch, has a non-empty body, and carries
92+
`Closes #<n>` when the unit is issue-born (SPEC references an issue).
93+
Also scan recent default-branch history (`git log --first-parent`) for
94+
feature/fix-scoped changes committed directly without a PR: HIGH.
95+
13. **Commit format & dependency discipline.** Sample the unit branches'
96+
commits: `<type>(<scope>): <summary>` conventional format (violations:
97+
LOW). Every `in-progress`/`done` row's `Depends on:` closure was merged —
98+
a unit built on unmerged deps is HIGH unless `decisions.md` records a
99+
user-forced override (`--force`), which downgrades it to LOW (documented
100+
risk).
101+
77102
Adapt the list to what the project has; skip checks for absent structures and
78103
say so.
79104

@@ -86,11 +111,11 @@ say so.
86111
```
87112
AUDIT DOCS — scope: <docs tree / roadmap / fix index / issues checked>
88113
89-
| # | Check (1-9) | Finding | Sev | Evidence | Proposed fix |
114+
| # | Check (1-13) | Finding | Sev | Evidence | Proposed fix |
90115
|---|-------------|---------|-----|----------|--------------|
91116
| 1 | <which> | <what> | high|low | <path:line / #issue> | <smallest action> |
92117
93-
Checks run: <n>/9 (skipped: <which + why — absent structures only>)
118+
Checks run: <n>/13 (skipped: <which + why — absent structures only>)
94119
Summary: <1-2 sentences>
95120
Decision: PASS | FAIL (FAIL if any high-severity finding is open)
96121
```

skills/audit-pr/SKILL.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
name: audit-pr
33
user-invocable: true
4-
version: 1.4.0
4+
version: 1.5.0
55
argument-hint: <pr-number> (optional — defaults to the current branch's PR)
66
model: opus
77
effort: high
@@ -84,7 +84,7 @@ A gate that can't be confirmed is a **blocker**, not a pass — never assume gre
8484
| **All phases complete** | Feature: every phase in `PLAN.md`/`TASKS.md` is done and logged in `progress.md`. Fix: the SPEC is fully implemented. | Any unchecked task or unimplemented phase without an explicit, tracked deferral. |
8585
| **Scope integrity** | The PR implements the SPEC and no more; out-of-scope work was split out. | Undocumented scope creep, or in-scope work missing. |
8686
| **Docs updated** | Every "Affected docs" criterion is satisfied; per-phase docs (`progress`/`testing`/`known-issues`/`decisions`) reflect reality; the doc map still resolves. **Never merge with documentation still pending.** | A doc the map or SPEC requires is stale, missing, pending, or contradicts the code. |
87-
| **Traceability** | `Closes #N` is in the PR body when the work is issue-born (from `plan-feature-from-issue` or `plan-fix`); the roadmap/fix-index entry matches and is **still present** (the issue/fix-index entry is removed only *after* merge, never before). | Issue-born work without `Closes #N`; a roadmap/index entry out of sync; or the issue/fix-index entry dropped before merge. |
87+
| **Traceability** | `Closes #N` is in the PR body when the work is issue-born (from `plan-feature-from-issue` or `plan-fix`); the roadmap/fix-index entry matches, is **still present** (removed only *after* merge, never before), and carries the linked PR reference (`done · [#<pr>](<pr-url>)`). | Issue-born work without `Closes #N`; a roadmap/index entry out of sync; the entry dropped before merge; or a `done` row without its PR link. |
8888
| **Tests** | New behavior is covered at the right layer (prefer integration); acceptance criteria map to tests; no regression-risk tests left red. | New behavior untested, or tests assert nothing meaningful. |
8989
| **Verification gate / CI** | The project's gate passes — type-check, tests, build — and `statusCheckRollup` is green. | Any required check failing, pending, or absent where the project requires one. |
9090
| **Mergeability** | Branch is off the default base, independently mergeable (no conflicts), not stacked on another PR, not draft. | Wrong base, conflicts, stacked dependency, or still draft. |

skills/product-audit/SKILL.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
name: product-audit
33
user-invocable: true
4-
version: 1.5.0
4+
version: 1.6.0
55
argument-hint: <path-or-area> (optional — defaults to the whole product)
66
model: opus
77
effort: max
@@ -91,6 +91,7 @@ pack covers every axis).
9191
| **Brand / voice** | User-facing copy vs. the brand guide | surfaces with copy |
9292
| **Tech debt** | Accumulated shortcuts, TODO/FIXME, stale abstractions | all |
9393
| **Process & docs** | Incomplete phases, aging open issues, **solvable known-issues**, doc completeness, missing/optimizable workflow docs | all |
94+
| **Workflow discipline** | The workflow's own rules held: branch/PR discipline, `done · #<pr>` links, phase naming (`P1…`), per-phase docs, commit format, dependency closures, artifact language — **run `audit-docs` checks 1–13 mechanically** (compose it); never assume a rule held because it "should" | all |
9495
| **Roadmap coherence** | Stale/obsolete/superseded features, missing dependencies, gaps & opportunities | all |
9596

9697
Skip inapplicable axes (no a11y/SEO/brand for a CLI/library/infra product) and

skills/review-change/SKILL.md

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
name: review-change
33
user-invocable: true
4-
version: 1.6.0
4+
version: 1.7.0
55
argument-hint: <path-or-glob>
66
model: opus
77
effort: high
@@ -95,51 +95,58 @@ Every axis maps to a skill of the workflow's **own internal review pack**
9595
Findings get axis `spec-drift` in the table. Catching drift at a phase
9696
checkpoint is far cheaper than at the `audit-pr` merge gate. (No SPEC found →
9797
note it and skip.)
98-
3. **Applicable pack passes.** For each axis the matrix + footprint mark as
98+
3. **Workflow-discipline check (mechanical, every review).** On the branch
99+
under review, verify and file findings under axis `workflow`:
100+
commits follow `<type>(<scope>): <summary>`; phase labels in touched
101+
planning docs are `P1, P2, …` (never `S1`/"Steps"); the phase's per-phase
102+
docs were updated (TASKS ticks, progress entry); no commit landed on the
103+
default branch; artifacts are in the project's declared docs language.
104+
Run the greps/`git log` — don't infer compliance.
105+
4. **Applicable pack passes.** For each axis the matrix + footprint mark as
99106
relevant, run the workflow's own internal skill for it (`review-code`,
100107
`review-security`, `review-verify`, `review-debt`, `review-design`,
101108
`review-a11y`, `review-brand`, `review-perf`, `review-seo`) — composed in-turn
102109
(this same conversation), each returning its fixed-format table + PASS|FAIL.
103110
**Skip the rest** and say which you skipped and why. The pack ships with the
104111
workflow, so an applicable pass can never be "missing".
105-
4. **Optional extras.** If the project recorded additional platform review skills
112+
5. **Optional extras.** If the project recorded additional platform review skills
106113
(stack-specific linters, framework skills) and they are installed, run them
107114
**in addition** — their findings merge into the same table. Never treat an
108115
absent extra as a gap; the pack already covered the axis.
109-
5. **Synthesize.** Merge all findings into **one** decision table, deduped by
116+
6. **Synthesize.** Merge all findings into **one** decision table, deduped by
110117
`file:line`. Keep `review-implementation`'s columns (Sev, Class, WHY, impl risk,
111118
long-term impact, premature-opt?, route) and add an **Axis** column.
112-
6. **Manual-verification checklist.** List what automated review **cannot** confirm
119+
7. **Manual-verification checklist.** List what automated review **cannot** confirm
113120
and a human must check — visual correctness, real-device/locale behavior, UX
114121
feel, perf under load, anything marked *verify*. Be explicit so the dev has zero
115122
doubt about what to eyeball.
116-
7. **Triage everything not fixed now.** For **every** finding you don't route to
123+
8. **Triage everything not fixed now.** For **every** finding you don't route to
117124
`fix-now` (postpone / ignore / intentional-tradeoff), run it through
118125
`triage-issue` (compose in-turn — i.e. within this same conversation/run; equal
119126
tier) to decide and record its home: a
120127
tracked issue with a trigger, a documented decision (`decisions.md` / a comment),
121128
or a justified drop. **No non-fix-now finding may end without a destination** — the
122129
point is to never silently lose one, and to catch the few that actually deserve an
123130
issue or a doc note.
124-
8. **Report — return exactly this structure** (fixed output contract; nothing
131+
9. **Report — return exactly this structure** (fixed output contract; nothing
125132
more, nothing less):
126133

127134
```
128135
REVIEW CHANGE — scope: <scope>
129136
Axes run: <list> Skipped: <list + why>
130137
131-
<the synthesized decision table (step 5)>
138+
<the synthesized decision table (step 6)>
132139
133140
Manual verification (a human must check):
134141
- <item> …
135142
136-
Non-fix-now destinations (step 7): <n> triaged — <issue #s / decisions / drops>
143+
Non-fix-now destinations (step 8): <n> triaged — <issue #s / decisions / drops>
137144
138145
Summary: <1-2 sentences>
139146
Decision: PASS | FAIL (FAIL while any fix-now finding is open)
140147
```
141148

142-
9. **Next step.** Close with the `→ Next:` block:
149+
10. **Next step.** Close with the `→ Next:` block:
143150

144151
```
145152
→ Next: /audit-pr — merge gate (when the table is clean)
@@ -171,7 +178,7 @@ For a change to a backend export module (no UI surface):
171178
172179
## Routing
173180

174-
Every non-`fix-now` finding is routed **through `triage-issue`** (step 7) so its
181+
Every non-`fix-now` finding is routed **through `triage-issue`** (step 8) so its
175182
disposition is a decision, not a default:
176183

177184
- **fix-now**`plan-fix``execute-phase --fix`, or fold into the current phase

0 commit comments

Comments
 (0)