@brunosps00/dev-workflow 2.5.0 → 2.7.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.
Files changed (59) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/CHANGELOG.md +101 -0
  3. package/README.md +8 -5
  4. package/lib/doctor.js +63 -11
  5. package/lib/hooks.js +112 -27
  6. package/lib/init.js +27 -11
  7. package/lib/migrate-skills.js +189 -39
  8. package/lib/removed-bundled-skills.js +4 -2
  9. package/lib/skill-registry.js +12 -2
  10. package/lib/uninstall.js +63 -7
  11. package/package.json +1 -1
  12. package/scaffold/en/agent-instructions.md +1 -1
  13. package/scaffold/en/commands/dw-brainstorm.md +2 -2
  14. package/scaffold/en/commands/dw-bugfix.md +1 -1
  15. package/scaffold/en/commands/dw-commit.md +1 -1
  16. package/scaffold/en/commands/dw-dockerize.md +2 -2
  17. package/scaffold/en/commands/dw-functional-doc.md +1 -1
  18. package/scaffold/en/commands/dw-harness-audit.md +1 -1
  19. package/scaffold/en/commands/dw-intel.md +1 -1
  20. package/scaffold/en/commands/dw-learn.md +1 -1
  21. package/scaffold/en/commands/dw-new-project.md +3 -3
  22. package/scaffold/en/commands/dw-plan.md +2 -2
  23. package/scaffold/en/commands/dw-qa.md +6 -5
  24. package/scaffold/en/commands/dw-redesign-ui.md +3 -3
  25. package/scaffold/en/commands/dw-review.md +2 -2
  26. package/scaffold/en/commands/dw-skill-health.md +24 -1
  27. package/scaffold/en/commands/dw-update.md +28 -11
  28. package/scaffold/en/references/invariants.md +7 -2
  29. package/scaffold/en/templates/project-onepager.md +1 -1
  30. package/scaffold/pt-br/agent-instructions.md +1 -1
  31. package/scaffold/pt-br/commands/dw-brainstorm.md +2 -2
  32. package/scaffold/pt-br/commands/dw-bugfix.md +1 -1
  33. package/scaffold/pt-br/commands/dw-commit.md +1 -1
  34. package/scaffold/pt-br/commands/dw-dockerize.md +2 -2
  35. package/scaffold/pt-br/commands/dw-functional-doc.md +1 -1
  36. package/scaffold/pt-br/commands/dw-harness-audit.md +1 -1
  37. package/scaffold/pt-br/commands/dw-intel.md +1 -1
  38. package/scaffold/pt-br/commands/dw-learn.md +1 -1
  39. package/scaffold/pt-br/commands/dw-new-project.md +3 -3
  40. package/scaffold/pt-br/commands/dw-plan.md +2 -2
  41. package/scaffold/pt-br/commands/dw-qa.md +6 -5
  42. package/scaffold/pt-br/commands/dw-redesign-ui.md +3 -3
  43. package/scaffold/pt-br/commands/dw-review.md +2 -2
  44. package/scaffold/pt-br/commands/dw-skill-health.md +24 -1
  45. package/scaffold/pt-br/commands/dw-update.md +28 -11
  46. package/scaffold/pt-br/references/invariants.md +8 -2
  47. package/scaffold/pt-br/templates/project-onepager.md +1 -1
  48. package/scaffold/scripts/hooks/git-guardrails.mjs +3 -2
  49. package/scaffold/scripts/hooks/session-cost.mjs +62 -21
  50. package/scaffold/scripts/hooks/statusline.mjs +14 -11
  51. package/scaffold/skills/docker-compose-recipes/references/compose-composition.md +1 -1
  52. package/scaffold/skills/dw-llm-eval/SKILL.md +3 -1
  53. package/scaffold/skills/dw-llm-eval/references/integration-with-dev-workflow-commands-detail.md +2 -2
  54. package/scaffold/skills/dw-llm-eval/references/reference-dataset.md +57 -3
  55. package/scaffold/skills/dw-ui-discipline/SKILL.md +8 -5
  56. package/scaffold/skills/dw-ui-discipline/references/accessibility-floor.md +20 -8
  57. package/scaffold/skills/dw-ui-discipline/references/content-stress.md +246 -0
  58. package/scaffold/skills/dw-ui-discipline/references/motion.md +205 -35
  59. package/scaffold/skills/dw-ui-discipline/references/responsive.md +44 -2
@@ -48,14 +48,14 @@ Compute `<target>` ONCE at the start; substitute it wherever you see `<target>`
48
48
 
49
49
  ## Complementary Skills
50
50
 
51
- When available under `./.agents/skills/`, these are invoked operationally:
51
+ When available under `./.dw/skills/`, these are invoked operationally:
52
52
 
53
53
  - `dw-testing-discipline`: **(UI mode — ALWAYS)** — core rules and 25 anti-patterns apply to every QA test authored. `references/playwright-recipes.md` for tactical patterns. `references/three-workflow-patterns.md` to pick the right verification mode (UI / network / perf). `references/security-boundary.md` for any flow that crosses an auth boundary.
54
54
  - `api-testing-recipes`: **(API mode — ALWAYS)** — validated snippets for `.http`, pytest+httpx, supertest, WebApplicationFactory, reqwest. Composes per-FR test files in `QA/scripts/api/` and JSONL logs in `QA/logs/api/`.
55
- - `dw-llm-eval`: **(AI mode — when invoked with `--ai`)** — runs reference dataset against current implementation. Computes precision@k / faithfulness / outcome accuracy. Logs JSONL to `QA/logs/ai/<feature>-<date>.jsonl`. Alerts on >10% metric regression vs prior run.
55
+ - `dw-llm-eval`: **(AI mode — when invoked with `--ai`)** — runs reference dataset against current implementation. Computes precision@k / faithfulness / outcome accuracy. Logs JSONL to `QA/logs/ai/<feature>-<date>.jsonl`. Lists per-case pass → fail flips vs prior run (each is a bug) and alerts on >10% metric regression.
56
56
  - `dw-debug-protocol`: **(in `--fix` mode — ALWAYS)** — six-step triage (Reproduce → Localize → Reduce → Fix Root Cause → Guard → Verify End-to-End) for each detected bug. Stop-the-line discipline; root-cause over symptom; regression test in same atomic commit.
57
57
  - `vercel-react-best-practices`: (UI mode) when React/Next.js regression risk is suspected.
58
- - `dw-ui-discipline`: (UI mode) when validating design consistency — anti-slop catalog + WCAG accessibility floor check.
58
+ - `dw-ui-discipline`: (UI mode) when validating design consistency — anti-slop catalog + WCAG accessibility floor check, plus the content-stress pass in `references/content-stress.md`.
59
59
  - `dw-chaos-engineering`: **(by name only)** — adversarial pass over a change whose normal tests already pass. Ask for it after QA is green when resilience matters more than coverage; it writes tests only, runs locally, and caps at 3 rounds. Never auto-invoked.
60
60
  - `dw-verify`: **(in `--fix` mode — ALWAYS)** — before marking any bug `Fixed` or `Closed`, requires VERIFICATION REPORT PASS (test + lint + build) AND retest evidence (screenshot in UI mode, JSONL log in API mode, eval-run delta in AI mode).
61
61
 
@@ -92,7 +92,8 @@ Read the affected module's quality baseline/TechSpec. Reuse valid required-check
92
92
  - Negative flows (unauthorized actions, malformed input).
93
93
  - Regressions (smoke check on adjacent surfaces).
94
94
  - WCAG 2.2 accessibility check per `dw-ui-discipline/references/accessibility-floor.md`.
95
- 4. **Capture evidence**: screenshots at 375px mobile + 1440px desktop, console logs, network HARs.
95
+ - Content stress per `dw-ui-discipline/references/content-stress.md` for every surface that renders user or API data: map the rendered fields and their limits, build a realistic worst-case fixture (plus empty, one and 1,000+ rows), inject it at the data boundary — the project's own fixtures/mocks, or `page.route()` in the test; never by editing the component — and check it at the real container width, 320px, 200% zoom, and dark mode/RTL when the product supports them. Each break goes to `bugs.md` with the reference's severity mapping (Broken → high, Ugly → medium, Fragile → low). Mobile-platform behaviour (sticky hover, input zoom, safe areas) does not reproduce in emulation: list it in `qa-report.md` as needing a real device instead of marking it passed.
96
+ 4. **Capture evidence**: screenshots at 375px mobile + 1440px desktop, console logs, network HARs; for the content-stress pass, screenshots of the worst-case fixture at 320px and at 200% zoom.
96
97
  5. **Detect stub/placeholder pages**: any page that looks "TODO" or has obvious dummy content → flag as a bug.
97
98
  6. **Write `qa-report.md`**: test plan, execution log, evidence references, bug count by severity.
98
99
  7. **Write `bugs.md`**: one entry per bug found, with severity, repro steps, evidence link, status (`Open`).
@@ -117,7 +118,7 @@ Read the affected module's quality baseline/TechSpec. Reuse valid required-check
117
118
  - Agent: outcome assertion + trajectory match (per `--ai-mode` parameter or feature config).
118
119
  - Classification: exact match accuracy.
119
120
  3. Log JSONL to `QA/logs/ai/<feature>-<date>.jsonl`.
120
- 4. Compare to prior run's JSONL — alert on >10% regression in any metric.
121
+ 4. Compare to the prior run's JSONL case by case: list every case that flipped pass → fail and file each one as a bug, whatever the averages say. Then alert on >10% regression in any metric. Run the `holdout` split too and report it apart from `dev`.
121
122
  5. Append AI-mode section to `qa-report.md`.
122
123
 
123
124
  ## Mode 1.5: Interactive UAT (`/dw-qa --uat`)
@@ -38,7 +38,7 @@ digraph redesign_decision {
38
38
 
39
39
  ## Complementary Skills
40
40
 
41
- When available in the project under `./.agents/skills/`, use these to guide the redesign:
41
+ When available in the project under `./.dw/skills/`, use these to guide the redesign:
42
42
 
43
43
  - `dw-ui-discipline`: **REQUIRED** — runs the 4-checkpoint hard-gate (brand authorities OR curated defaults; surface job sentence; complete state matrix; scene sentence) BEFORE any design proposal. The 14 anti-slop patterns are checked against each proposed direction. The WCAG 2.2 AA floor is non-negotiable at the validate step.
44
44
  - `vercel-react-best-practices`: use when the project is React/Next.js for performance and implementation patterns
@@ -58,10 +58,10 @@ Use diagnostic tools based on the project's framework:
58
58
  1. Identify the target: page, component, or route to be redesigned.
59
59
  2. **AUDIT**: read the current implementation, identify the CSS stack (Tailwind, CSS Modules, styled-components, etc.), capture the before-state screenshot (Playwright MCP, or `node .dw/scripts/lib/capture-screenshots.mjs` as the WSL-resilient fallback), run react-doctor if React project.
60
60
  3. Ask 3 to 5 questions about redesign goals: style direction, brand constraints, inspirations, target audience, priority devices.
61
- 4. **PROPOSE**: present 2 to 3 design directions after passing the `dw-ui-discipline` hard-gate (brand authorities or curated defaults selected; surface job sentence written; state matrix enumerated; scene sentence written). Each direction lists color palette, typography pairing, layout style, and rationale. Self-check each direction against the 14 anti-slop patterns. For EACH direction, explicitly describe the mobile layout (<=768px) and desktop layout (>=1024px), including how elements reorganize, stack, or hide between breakpoints.
61
+ 4. **PROPOSE**: present 2 to 3 design directions after passing the `dw-ui-discipline` hard-gate (brand authorities or curated defaults selected; surface job sentence written; state matrix enumerated; scene sentence written). Directions must diverge on a named axis — layout, density, personality, motion, or interaction model — and are named for that direction ("Quiet", "Editorial", "Dense"), never "Option A/B/C"; three tints of the same idea count as one direction. Each direction lists its axis, color palette, typography pairing, layout style, and rationale. Self-check each direction against the 14 anti-slop patterns. For EACH direction, explicitly describe the mobile layout (<=768px) and desktop layout (>=1024px), including how elements reorganize, stack, or hide between breakpoints.
62
62
  5. Wait for explicit user approval before implementing.
63
63
  6. **IMPLEMENT**: apply the chosen design with a mobile-first approach — implement the mobile layout first, then add media queries/breakpoints for tablet and desktop. Respect the existing stack. Use `vercel-react-best-practices` for React/Next.js. Maintain the project's CSS methodology.
64
- 7. **VALIDATE**: capture after-state in BOTH resolutions (mobile and desktop), compare before/after, verify accessibility against `dw-ui-discipline/references/accessibility-floor.md` (WCAG 2.2 AA — non-negotiable: contrast, focus-visible, keyboard nav, ARIA, no traps), run react-doctor `--diff` if React. Capture screenshots at 375px (mobile) and 1440px (desktop) — `node .dw/scripts/lib/capture-screenshots.mjs --url <url> --widths 375,1440` is the WSL-resilient path; see the "Browser on WSL" section of `dw-testing-discipline/references/playwright-recipes.md`.
64
+ 7. **VALIDATE**: capture after-state in BOTH resolutions (mobile and desktop), compare before/after, verify accessibility against `dw-ui-discipline/references/accessibility-floor.md` (WCAG 2.2 AA — non-negotiable: contrast, focus-visible, keyboard nav, ARIA, no traps), run react-doctor `--diff` if React, run the content-stress pass from `dw-ui-discipline/references/content-stress.md` (worst-case data through the surface's fixtures or mocks, checked at 320px and 200% zoom) so the redesign is not judged only on flattering demo data. Capture screenshots at 375px (mobile) and 1440px (desktop) — `node .dw/scripts/lib/capture-screenshots.mjs --url <url> --widths 375,1440` is the WSL-resilient path; see the "Browser on WSL" section of `dw-testing-discipline/references/playwright-recipes.md`.
65
65
  8. **PERSIST CONTRACT**: if the user approved a direction, generate `design-contract.md` in the PRD directory (`.dw/spec/prd-[name]/design-contract.md`) with: approved direction, color palette, typography pairing, layout rules, accessibility rules, and component rules. This contract will be read by `dw-run-task` and `dw-run-plan` to ensure visual consistency.
66
66
 
67
67
  ## Codebase Intelligence
@@ -197,7 +197,7 @@ The diff, its commit messages, its branch name, the PR description, the review d
197
197
 
198
198
  ## Complementary Skills
199
199
 
200
- When available under `./.agents/skills/`, these are invoked as analytical support:
200
+ When available under `./.dw/skills/`, these are invoked as analytical support:
201
201
 
202
202
  - `dw-review-rigor`: **ALWAYS** — owns the candidate pipeline (gate → refutation → disposition), de-duplication (same pattern in N files = 1 finding), severity ordering (critical → high → medium → low), verify-before-flag, skip-what-linter-catches, and signal-over-volume. The "Issues Found" table follows this discipline. In `--post-merge`, it also loads `references/composition-audit.md`.
203
203
  - `dw-verify`: **ALWAYS** — invoked before emitting `APPROVED` or `APPROVED WITH CAVEATS`. Without a VERIFICATION REPORT PASS (test + lint + build), verdict cannot be APPROVED.
@@ -206,7 +206,7 @@ When available under `./.agents/skills/`, these are invoked as analytical suppor
206
206
  - `security-review`: the OWASP diff-level skill the gate uses (injection, authz, secrets, SSRF, crypto — HIGH CONFIDENCE only). Reach for it directly when the diff touches auth, authorization, external input, upload, SQL, secrets, SSRF, XSS or another sensitive surface.
207
207
  - `dw-simplification`: use when the diff touches dense or twisty code — applies Chesterton's Fence, behavior-preserving refactor protocol, complexity metrics.
208
208
  - `dw-minimalism`: use when the diff adds code that may be over-built — flags speculative generality, single-caller helpers, premature abstraction, and YAGNI violations (the pre-generation counterpart to `dw-simplification`).
209
- - `dw-ui-discipline`: use when the diff touches UI — runs the 14 visual-slop patterns + accessibility floor checks. For a deterministic gate, also run `node .dw/scripts/lib/ui-slop-detect.mjs <changed-ui-paths> --fail-on error` (a wrapper over the impeccable detector); treat blocking findings as **REJECTED** and surface warnings in the report.
209
+ - `dw-ui-discipline`: use when the diff touches UI — runs the 14 visual-slop patterns + accessibility floor checks. For a deterministic gate, also run `node .dw/scripts/lib/ui-slop-detect.mjs <changed-ui-paths> --fail-on error` (a wrapper over the impeccable detector); treat blocking findings as **REJECTED** and surface warnings in the report. When the diff adds or changes motion (`transition`, `animation`, `@keyframes`, motion-library props), check it against the escalation triggers in `references/motion.md` §9; when it renders user or API data, check the static signals in `references/content-stress.md`. Both produce candidates for `dw-review-rigor`, at the severities those references set.
210
210
  - `dw-testing-discipline`: use when the diff touches tests — applies the 25 anti-patterns catalog + 6 agent guardrails (when tests were agent-authored).
211
211
  - `dw-llm-eval`: **REQUIRED when the diff touches AI/LLM feature code paths**. Reference dataset + ≥2 oracle rungs + judge calibration (if rung 4 used) + eval run results MUST be in the PR. Missing → REJECTED.
212
212
  - `vercel-react-best-practices`: use when the diff touches React/Next.js.
@@ -7,7 +7,7 @@ You are the dev-workflow skill and agent health auditor.
7
7
  - Use before promoting a learned pattern into a reusable skill.
8
8
 
9
9
  ## Process
10
- 1. Read `scaffold/skill-registry.json` when auditing the dev-workflow repo, or `.dw/skill-registry.json` + installed `.agents/skills/` in consumer projects.
10
+ 1. Read `scaffold/skill-registry.json` when auditing the dev-workflow repo, or `.dw/skill-registry.json` + the bundled skills installed in `.dw/skills/` in consumer projects. Skills under `.claude/skills/`, `.agents/skills/` and the other agent indexes are command wrappers or the user's own; a dev-workflow skill found there is a legacy copy that `update` removes.
11
11
  2. Group skills by `kind`: `protocol`, `domain-pack`, `recipe-pack`, `asset-pack`.
12
12
  3. Validate every skill has a trigger, expected output, owner, load policy, and context limit.
13
13
  4. Validate every bundled `SKILL.md` has a `## Structured Return` contract with `Status`, `Scope`, `Evidence`, `Artifacts`, `Decisions`, `Risks`, and `Next Step`.
@@ -59,6 +59,28 @@ Declare the window before any judgement: count the instrumented rows — those c
59
59
 
60
60
  Recommend demotion only when ALL hold: model-invocable cohort; at least 20 instrumented sessions or 30 days of window; zero references; no artifact signal; owner command reachable. Below that, print the counts and say the window is too short to conclude. Removing a bundled skill from the package is an append-only entry in `lib/removed-bundled-skills.js` — this command proposes, it never removes and never deletes files.
61
61
 
62
+ ### Commands — which entries earn their place in the index
63
+
64
+ Every installed `dw-*` command is one entry in each agent's skill index, and a crowded index degrades the choice the model makes there. Rows carrying a `commands` object record which commands the session loaded: a read of `.dw/commands/<name>.md` (every wrapper performs one) or a Skill-tool call naming the command. The skill rules apply unchanged: an absent `commands` key is no telemetry, the window is counted only from rows carrying `commands`, and the count measures loading, not success. The hook parses Claude Code transcripts only; when the project also runs Codex, Copilot or OpenCode, say that their sessions are not in the count.
65
+
66
+ Print one table: command, sessions that loaded it, references. Then, for each family of commands that share a purpose, print the members' counts side by side:
67
+
68
+ | Family | Members |
69
+ |---|---|
70
+ | Subagent handoff | `dw-subtask-start`, `dw-subtask-complete`, `dw-subtask-resume` |
71
+ | External runners | `dw-codex-run`, `dw-claude-run`, `dw-copilot-run` |
72
+ | Cloud skill installers | `dw-install-aws-skills`, `dw-install-azure-skills` |
73
+ | Install and context audits | `dw-skill-health`, `dw-harness-audit`, `dw-context-budget` |
74
+ | Session checkpoint | `dw-pause`, `dw-resume` |
75
+
76
+ Classify each family:
77
+
78
+ - `MERGE CANDIDATE` — the window holds at least 20 instrumented sessions or 30 days, and the whole family was loaded in fewer than 5% of them, or some member was never loaded while another was. One command with modes would cost the index fewer entries.
79
+ - `KEEP SEPARATE` — two or more members were each loaded in at least 5 sessions: the distinct names are in use, and merging them trades a measured habit for a smaller index.
80
+ - `TOO EARLY` — below the window threshold. Print the counts and say so.
81
+
82
+ Commands outside any family follow the skill wording: a model-invocable command with zero loads over a long enough window is an `IDLE CANDIDATE`, never "unused". A merge or removal in the package is a product decision recorded append-only in `lib/removed-commands.js` (the update then removes the old wrappers); this command proposes, it never renames, removes or edits commands. When auditing the dev-workflow repository itself there is no local telemetry: report `NO TELEMETRY` unless the maintainer supplies `costs.jsonl` files from consumer projects, and aggregate those per project before adding them up.
83
+
62
84
  ## Output
63
85
 
64
86
  When `.dw/config/routing-defaults.json` exists, compare its current candidates with the owner's `.dw/config/routing.json`. Report relevant differences and validate proposed models/capabilities before adoption. Different values can be intentional; do not treat them as failed migration or overwrite them automatically. Approved task assignments take precedence over either candidate file.
@@ -70,6 +92,7 @@ Include:
70
92
  - Registry/schema issues.
71
93
  - Structured-return coverage, including any skill missing the contract or status vocabulary.
72
94
  - Usage evidence: the declared window, the per-cohort tables, and every idle candidate with its window sentence. When telemetry is missing, say so instead of scoring.
95
+ - Command usage: the per-command table and each family's classification (`MERGE CANDIDATE`, `KEEP SEPARATE`, `TOO EARLY`).
73
96
  - Top 3 fixes.
74
97
 
75
98
  Final marker: `## SKILL-HEALTH COMPLETE`
@@ -24,14 +24,15 @@ Before overwriting managed files, create a snapshot:
24
24
  ```bash
25
25
  SNAPSHOT_DIR=".dw/.backup/$(date -u +%Y%m%dT%H%M%SZ)"
26
26
  mkdir -p "$SNAPSHOT_DIR"
27
- cp -r .dw/commands .dw/templates .dw/references .dw/scripts "$SNAPSHOT_DIR/" 2>/dev/null
27
+ cp -r .dw/commands .dw/templates .dw/references .dw/scripts .dw/skills "$SNAPSHOT_DIR/" 2>/dev/null
28
28
  [ -d .agents/skills ] && cp -r .agents/skills "$SNAPSHOT_DIR/agents-skills" 2>/dev/null
29
29
  # .claude/settings.json is now mutated by update (MCPs + hooks + statusLine)
30
30
  [ -f .claude/settings.json ] && mkdir -p "$SNAPSHOT_DIR/claude" && cp .claude/settings.json "$SNAPSHOT_DIR/claude/settings.json" 2>/dev/null
31
+ [ -f .dw/install-state.json ] && cp .dw/install-state.json "$SNAPSHOT_DIR/install-state.json" 2>/dev/null
31
32
  echo "Snapshot saved to $SNAPSHOT_DIR"
32
33
  ```
33
34
 
34
- Keep only the 3 most recent snapshots (remove older ones) to avoid buildup.
35
+ Keep only the 3 most recent snapshots in `.dw/.backup/` (remove older ones) to avoid buildup. `.dw/.migrated/` is not a snapshot: never prune it.
35
36
 
36
37
  ### 1. Record Current Version (Required)
37
38
 
@@ -85,7 +86,13 @@ The `update` command overwrites managed files and PRESERVES:
85
86
 
86
87
  The `update` command also runs the GSD migration step automatically — if a project has legacy `.planning/` (from prior GSD usage), the contents are migrated to `.dw/intel/`, `.dw/spec/active-session.md`, `.dw/spec/quick/`, etc., and `.planning/` is renamed to `.planning.gsd-archive-<DATE>/` for inspection. The `.claude/commands/gsd/`, `.claude/agents/gsd-*.md`, `.claude/hooks/gsd-*.js`, and `.claude/gsd-file-manifest.json` files are removed during the migration.
87
88
 
88
- If the update fails (network error, permission, package unavailable): report the error to the user and STOP. Do NOT attempt manual workarounds like copying files by hand.
89
+ The CLI never deletes what it retires: it moves it to `.dw/.migrated/<timestamp>/`, keeping the relative path, and prints the destination. It does this only after the new skills are in `.dw/skills/`, so an interrupted update leaves the old copies in place. What it retires, and how it decides:
90
+
91
+ - **Legacy bundled-skill copies** under `.agents/skills/` (`[moved]`): only when the copy is dev-workflow's. A same-named skill that is not is printed as `[kept]` and left alone.
92
+ - **Skills removed in past releases** (`[v<N>]`) and **removed command sources** (`[legacy]`): matched by name, so a same-named skill from elsewhere is moved too — the move is what makes that recoverable.
93
+ - **Orphan `dw-*` wrappers** (`[orphan]`): `dw-` is this package's namespace; a user skill named `dw-*` is moved, not lost.
94
+
95
+ If the update fails (network error, permission, package unavailable): report the error to the user and STOP. Do NOT attempt manual workarounds like copying files by hand. Give the user the snapshot path from step 0 and the two ways out: re-run the update once the cause is fixed (it is idempotent), or `/dw-update --rollback`.
89
96
 
90
97
  ### 4. Capture New Version
91
98
 
@@ -95,7 +102,7 @@ node -e 'const s = JSON.parse(require("node:fs").readFileSync(".dw/install-state
95
102
 
96
103
  ### Upgrade compatibility checks
97
104
 
98
- Read the refreshed `.dw/commands/dw-update.md` after the CLI completes. Use `.dw/install-state.json` and the CLI's `Installed version` output for the version delta: an `npx` package need not be resolvable from the consumer's `node_modules`. A missing or invalid new install state is a failed verification; do not claim the update succeeded.
105
+ Read the refreshed `.dw/commands/dw-update.md` after the CLI completes. Use `.dw/install-state.json` and the CLI's `Installed version` output for the version delta: an `npx` package need not be resolvable from the consumer's `node_modules`. A missing or invalid new install state is a failed verification; do not claim the update succeeded. The version read in step 4 must equal the right-hand side of the CLI's `Installed version: <old> -> <new>` line; if that line is missing, or the versions differ, the CLI did not finish and the update failed.
99
106
 
100
107
  For an upgrade from before 2.3.0 (or an unknown legacy version):
101
108
 
@@ -115,6 +122,7 @@ Present to the user:
115
122
  - Summary of what the `update` output showed (files copied, wrappers generated, MCPs configured)
116
123
  - The `Post-update agent actions` printed by the CLI
117
124
  - Any warnings or errors
125
+ - Every `[moved]`, `[v<N>]`, `[orphan]`, `[legacy]` or `[kept]` line from `Skill migration`, the `.dw/.migrated/<timestamp>/` path, and any file flagged `was not installed by dev-workflow` (the team's own addition: offer to bring it back into a skill of their own, never into `.dw/skills/`, which update overwrites)
118
126
 
119
127
  ### 6. Run Post-Update Agent Actions (Required)
120
128
 
@@ -143,19 +151,28 @@ If invoked with `--rollback`:
143
151
  1. List snapshots in `.dw/.backup/`
144
152
  2. If none exist: STOP and report "No snapshot available"
145
153
  3. If more than one exists: ask the user which to restore (default: most recent)
146
- 4. Confirm with the user: "Restore snapshot `<path>`? This OVERWRITES `.dw/commands/`, `.dw/templates/`, `.dw/references/`, `.dw/scripts/`, `.agents/skills/`, and `.claude/settings.json`. Proceed? [y/N]"
154
+ 4. Confirm with the user: "Restore snapshot `<path>`? This REPLACES `.dw/commands/`, `.dw/templates/`, `.dw/references/`, `.dw/scripts/` and `.dw/skills/` with the snapshot's copies (when the snapshot has them), copies the snapshot's `.agents/skills/` back over the current one without removing other entries, and restores `.claude/settings.json` and `.dw/install-state.json`. `.dw/templates/overrides/` is never touched. Proceed? [y/N]"
147
155
  5. Only after `y`: copy back
148
156
 
149
157
  ```bash
150
- cp -r "$SNAPSHOT_DIR/commands" .dw/
151
- cp -r "$SNAPSHOT_DIR/templates" .dw/
152
- cp -r "$SNAPSHOT_DIR/references" .dw/ 2>/dev/null
153
- cp -r "$SNAPSHOT_DIR/scripts" .dw/ 2>/dev/null
154
- [ -d "$SNAPSHOT_DIR/agents-skills" ] && cp -r "$SNAPSHOT_DIR/agents-skills" .agents/skills 2>/dev/null
158
+ SNAPSHOT_DIR=".dw/.backup/<chosen-timestamp>" # the snapshot confirmed in step 4
159
+ [ -d "$SNAPSHOT_DIR" ] || { echo "Snapshot not found: $SNAPSHOT_DIR"; exit 1; }
160
+ # Managed .dw folders are replaced, so files added by the newer release do not linger.
161
+ for d in commands references scripts skills; do
162
+ [ -d "$SNAPSHOT_DIR/$d" ] && rm -rf ".dw/$d" && cp -r "$SNAPSHOT_DIR/$d" .dw/
163
+ done
164
+ # .dw/templates/overrides/ is the owner's: restore the managed templates around it, never remove it.
165
+ if [ -d "$SNAPSHOT_DIR/templates" ]; then
166
+ find .dw/templates -mindepth 1 -maxdepth 1 ! -name overrides -exec rm -rf {} +
167
+ for f in "$SNAPSHOT_DIR/templates"/*; do [ "$(basename "$f")" = overrides ] || cp -r "$f" .dw/templates/; done
168
+ fi
169
+ # .agents/skills is shared with the user's own skills: merge, never replace.
170
+ [ -d "$SNAPSHOT_DIR/agents-skills" ] && mkdir -p .agents/skills && cp -r "$SNAPSHOT_DIR/agents-skills/." .agents/skills/ 2>/dev/null
155
171
  [ -f "$SNAPSHOT_DIR/claude/settings.json" ] && cp "$SNAPSHOT_DIR/claude/settings.json" .claude/settings.json 2>/dev/null
172
+ [ -f "$SNAPSHOT_DIR/install-state.json" ] && cp "$SNAPSHOT_DIR/install-state.json" .dw/install-state.json 2>/dev/null
156
173
  ```
157
174
 
158
- 6. Report: snapshot restored, version likely recovered (read from `.dw/commands/dw-help.md` or metadata if present)
175
+ 6. Report: snapshot restored, and the version from the restored `.dw/install-state.json` (or "unknown" when the snapshot predates it). A snapshot taken before 2.7.0 has no `skills/`: `.dw/skills/` then stays as it was, which is harmless (older commands read `.agents/skills/`), and the next update retires the restored `.agents/skills/` copies again.
159
176
 
160
177
  ## Advanced Options
161
178
 
@@ -50,8 +50,9 @@ it is the boundary working. An agent that cannot destroy work cannot be talked i
50
50
 
51
51
  **How this is enforced:** partly by `.dw/scripts/hooks/git-guardrails.mjs`, a `PreToolUse` hook that denies
52
52
  these patterns on Bash. The hook is **one implementation, not the source of the rule**, and it has two
53
- known limits: it only covers Bash under Claude Code, and it **fails open** — a parse error or a runtime
54
- fault allows the command through. So the rule binds even where the hook does not run.
53
+ known limits: it only covers Bash under Claude Code and Codex (Codex runs it only once the project and the
54
+ hook are trusted), and it **fails open** — a parse error or a runtime fault allows the command through. So
55
+ the rule binds even where the hook does not run.
55
56
 
56
57
  Two operations are deliberately left out of the hook and live only here: `rebase` and `commit --amend`.
57
58
  Both are routine on unpushed work, and a command line cannot tell pushed from unpushed. Denying them would
@@ -80,6 +81,10 @@ This floor is narrow by design. Something genuinely destructive that is not list
80
81
  apply the same standard: if the action destroys work with no second copy, rewrites shared history, or moves
81
82
  a credential, stop and ask. An extra confirmation costs a message.
82
83
 
84
+ The same holds for the skill folders agents share — `.agents/skills/`, `.claude/skills/`, `.codex/skills/`:
85
+ they hold the user's and other tools' skills too. Outside the CLI's own `update`/`uninstall`, list what
86
+ you would remove and ask per entry; move what is approved to `.dw/.migrated/<timestamp>/`, never `rm` it.
87
+
83
88
  ## Attribution
84
89
 
85
90
  The two-layer model — a floor that project rules may only tighten, never loosen — is adapted from the
@@ -80,7 +80,7 @@ services: []
80
80
  │ └── api/ (created by `pnpm dlx @nestjs/cli` or selected scaffold)
81
81
  ├── packages/
82
82
  │ └── shared/ (created by /dw-new-project)
83
- ├── docker-compose.dev.yml (composed from .agents/skills/docker-compose-recipes/)
83
+ ├── docker-compose.dev.yml (composed from .dw/skills/docker-compose-recipes/)
84
84
  ├── .env.example (consolidated from selected services)
85
85
  ├── .gitignore (per stack)
86
86
  ├── .dockerignore (per stack)
@@ -27,7 +27,7 @@ Na quebra de tasks, proponha desenvolvimento local ou cruzado e modelo, esforço
27
27
 
28
28
  Claude pode delegar implementação por `/dw-codex-run`; Codex pode usar `/dw-claude-run`. O parent conduz review, correções e continuidade. Agentes locais herdam o modelo da sessão salvo override aprovado na task. Delegue trabalho independente e delimitado quando melhorar qualidade ou tempo; mantenha trabalho pequeno ou acoplado local. Máximo de 3 workers por fluxo e nunca escritores simultâneos no mesmo worktree.
29
29
 
30
- Leia primeiro arquivos relevantes. Use `.dw/intel/` ou code-explorer quando ajudar em fluxos amplos ou desconhecidos, conferindo o índice contra o código atual. Carregue entrypoints de skills somente para tasks correspondentes e referências somente para o modo escolhido. Subagentes recebem um pacote compacto e retornam evidências e decisões, não logs completos.
30
+ Leia primeiro arquivos relevantes. Use `.dw/intel/` ou code-explorer quando ajudar em fluxos amplos ou desconhecidos, conferindo o índice contra o código atual. Carregue entrypoints de skills somente para tasks correspondentes e referências somente para o modo escolhido. As skills do dev-workflow ficam em `.dw/skills/<nome>/`; quando um comando nomear uma, leia de lá. `.agents/skills/` e `.claude/skills/` também guardam skills do usuário e de outras ferramentas: fora do `update`, não apague nada ali sem listar e perguntar antes. Subagentes recebem um pacote compacto e retornam evidências e decisões, não logs completos.
31
31
 
32
32
  ## Conclusão e limites
33
33
 
@@ -61,7 +61,7 @@ digraph brainstorm_decision {
61
61
 
62
62
  ## Skills Complementares
63
63
 
64
- Quando disponíveis no projeto em `./.agents/skills/`, use para enriquecer a ideação:
64
+ Quando disponíveis no projeto em `./.dw/skills/`, use para enriquecer a ideação:
65
65
 
66
66
  - `dw-council`: invocada pelo modo **council** do dispatcher — stress-test multi-advisor das opções mais promissoras com steel-manning obrigatório e concession tracking. O dispatcher dispara quando 2+ caminhos empatam OU consenso se forma rápido demais (sinal de false-consensus). Não roda em todo brainstorm — só quando os sinais justificam.
67
67
  - `dw-simplification`: invocada pelo modo **refactor-audit** — aplica Chesterton's Fence + métricas de complexidade + a nova referência **deep-modules** (deletion test, locality, leverage, interface depth) em todo smell flagueado.
@@ -345,7 +345,7 @@ entre turns e escreve arquivos. Por ser stateful e mutante, começa **só com in
345
345
 
346
346
  <critical>Pergunte exatamente UMA decisão não-resolvida por interação, e espere. Nunca despeje uma lista de perguntas.</critical>
347
347
 
348
- Grill é movido por duas skills internas (lidas por path em `./.agents/skills/`, nunca exportadas):
348
+ Grill é movido por duas skills internas (lidas por path em `./.dw/skills/`, nunca exportadas):
349
349
  - **`dw-grilling`** — o motor de entrevista em árvore de decisão (ordenação por dependência, uma decisão por
350
350
  turn, uma resposta recomendada para cada pergunta, fatos descobertos em vez de perguntados, o gate de
351
351
  shared-understanding).
@@ -36,7 +36,7 @@
36
36
 
37
37
  ## Skills Complementares
38
38
 
39
- Quando disponíveis no projeto em `./.agents/skills/`, use estas skills como suporte contextual sem substituir este comando:
39
+ Quando disponíveis no projeto em `./.dw/skills/`, use estas skills como suporte contextual sem substituir este comando:
40
40
 
41
41
  - `dw-debug-protocol`: **SEMPRE** — conduz o bug pelo six-step triage (Reproduzir → Localizar → Reduzir → Fix Root Cause → Guardar → Verificar End-to-End). Stop-the-line discipline; root-cause sobre symptom; regression test commitado no mesmo commit atômico. Para bugs não triviais, ou depois que a primeira tentativa de fix falhar, o Passo 1 precisa estabelecer um loop de feedback red-capable antes de teorizar. Bugs não-reprodutíveis seguem o sub-protocolo instrument-first — sem fix por palpite a não ser com acknowledgement explícito.
42
42
  - `dw-verify`: **SEMPRE** — em modo Direto, invocada antes do commit da correção. O VERIFICATION REPORT deve mostrar que o sintoma original do bug não se reproduz mais (não apenas que os testes passam).
@@ -11,7 +11,7 @@
11
11
 
12
12
  ## Skills Complementares
13
13
 
14
- Quando disponíveis no projeto em `./.agents/skills/`, use estas skills como suporte operacional sem substituir este comando:
14
+ Quando disponíveis no projeto em `./.dw/skills/`, use estas skills como suporte operacional sem substituir este comando:
15
15
 
16
16
  - `dw-git-discipline`: **SEMPRE** — aplica atomic commits (uma intenção lógica por commit; refactor separado de feature), formato Conventional Commits, lint+tests+build verdes ANTES do commit e proíbe pular hooks (`--no-verify`) ou amend de commits já empurrados. Em mudanças mistas, separa via `git add -p`.
17
17
 
@@ -44,7 +44,7 @@ Este comando e **complementar** ao `/dw-new-project`:
44
44
  - Relatório: `.dw/audit/dockerize-<YYYY-MM-DD>.md` (escopo PRD: `.dw/spec/prd-<slug>/dockerize.md`)
45
45
  - Artefatos dev gerados: `<SCOPE>/docker-compose.dev.yml`, `<SCOPE>/Dockerfile.dev`, `<SCOPE>/.dockerignore`
46
46
  - Artefatos prod gerados: `<SCOPE>/Dockerfile`, `<SCOPE>/docker-compose.prod.yml` (opcional), `<SCOPE>/.dockerignore`
47
- - Fonte das receitas: `.agents/skills/docker-compose-recipes/services/*.yml`
47
+ - Fonte das receitas: `.dw/skills/docker-compose-recipes/services/*.yml`
48
48
 
49
49
  ## Comportamento Obrigatório — Pipeline
50
50
 
@@ -163,7 +163,7 @@ Sem aprovação: escreve relatório (Fase 3 com `status: PLANNED`) e para.
163
163
  #### 2.1 Artefatos `--dev`
164
164
 
165
165
  **`docker-compose.dev.yml`**:
166
- - Componha blocos de `.agents/skills/docker-compose-recipes/services/*.yml` segundo `references/compose-composition.md`.
166
+ - Componha blocos de `.dw/skills/docker-compose-recipes/services/*.yml` segundo `references/compose-composition.md`.
167
167
  - Adicione service(s) do app no fim: `build: { context: ., dockerfile: Dockerfile.dev }`, `volumes` para hot reload (bind mount do source, anonymous volume para `node_modules`/`__pycache__`), `env_file: .env`, `depends_on` com `condition: service_healthy` segundo `references/healthcheck-patterns.md`.
168
168
  - Preserve a tag da imagem de cada recipe (NÃO converta nenhuma para digest — digest congela a base e nunca alcanca um rebuild de segurança), as vars de credencial obrigatórias e os binds em `127.0.0.1`. As portas loopback mantem intencionalmente a topologia `apps no host` funcionando.
169
169
  - Header: `# Generated by /dw-dockerize on YYYY-MM-DD`.
@@ -53,7 +53,7 @@ Funciona melhor com projeto analisado por `/dw-analyze-project`
53
53
 
54
54
  ## Skills complementares
55
55
 
56
- Quando disponíveis no projeto em `./.agents/skills/`, use estas skills como apoio operacional, sem substituir este comando como fonte de verdade:
56
+ Quando disponíveis no projeto em `./.dw/skills/`, use estas skills como apoio operacional, sem substituir este comando como fonte de verdade:
57
57
 
58
58
  - `dw-testing-discipline`: apoio para estruturar fluxos E2E (`references/playwright-recipes.md`), padrões de coleta de evidência, e aplicar core rules + hierarquia de seletores em qualquer teste referenciado pelo doc
59
59
  - `remotion-best-practices`: apoio obrigatório quando houver vídeo humano final, legendas, composição, transições, FFmpeg ou Remotion
@@ -29,7 +29,7 @@ Você é o auditor do harness dev-workflow.
29
29
  5. Recomende os 3 principais fixes.
30
30
 
31
31
  ## Triagem de degradação em runtime (sob demanda)
32
- O scorecard acima e saúde determinística da **instalação**. Se o problema for o *agente* se comportando mal em runtime (loops, desvio do objetivo, edições alucinadas, raciocínio degradado), o diagnóstico e outro: aponte o usuário para `.agents/skills/dw-debug-protocol/references/agent-degradation.md` (tabela sintoma→causa + recovery ordenado). Apenas informativo — não afeta o scorecard.
32
+ O scorecard acima e saúde determinística da **instalação**. Se o problema for o *agente* se comportando mal em runtime (loops, desvio do objetivo, edições alucinadas, raciocínio degradado), o diagnóstico e outro: aponte o usuário para `.dw/skills/dw-debug-protocol/references/agent-degradation.md` (tabela sintoma→causa + recovery ordenado). Apenas informativo — não afeta o scorecard.
33
33
 
34
34
  ## Saída
35
35
  Retorne um scorecard e não altere arquivos. Para drift de arquivo gerenciado, indique `dev-workflow repair`.
@@ -64,7 +64,7 @@ Não recuse responder — devolva a melhor info disponível.
64
64
 
65
65
  ### 2. Detecção do shape da query
66
66
 
67
- Classifique o `{{QUERY}}` em uma das formas documentadas em `.agents/skills/dw-codebase-intel/references/query-patterns.md`:
67
+ Classifique o `{{QUERY}}` em uma das formas documentadas em `.dw/skills/dw-codebase-intel/references/query-patterns.md`:
68
68
 
69
69
  - **where-is** — primário: `files.json`, secundário: `apis.json`
70
70
  - **what-uses** — primário: `deps.json` (libs) ou `files.json` (símbolos)
@@ -23,7 +23,7 @@ Colete sinais apenas do que já está persistido:
23
23
  4. **Apresente** os candidatos no chat como lista markdown — id, trigger, action, confidence, evidence. NÃO escreva ainda.
24
24
  5. **Pergunte**: "Aprovar quais para armazenar? (ids, ou 'todos', ou 'nenhum'). Algum para promover a principio de constitution?"
25
25
  6. Na aprovação:
26
- - Grave cada instinct aprovado em `.dw/memory/instincts/<slug>.md` no formato de `.agents/skills/dw-memory/references/instincts.md` (crie ou atualize; nunca duplique um id existente).
26
+ - Grave cada instinct aprovado em `.dw/memory/instincts/<slug>.md` no formato de `.dw/skills/dw-memory/references/instincts.md` (crie ou atualize; nunca duplique um id existente).
27
27
  - Para os que o usuário escolher promover, encaminhe ao fluxo de constitution — proponha um principio `P-NNN` em `severity: info` para o Step 8 do `/dw-analyze-project`. NÃO edite `.dw/constitution.md` direto sem o usuário reconfirmar.
28
28
  7. Atualize a confiança de instincts existentes que a nova evidência reconfirme ou contradiga.
29
29
 
@@ -39,7 +39,7 @@ Você é o líder de bootstrap de workspace do dev-workflow. Sua função é peg
39
39
  - One-pager do projeto: `.dw/spec/projects/{{PROJECT_NAME}}.md` (usa `.dw/templates/project-onepager.md`)
40
40
  - Relatório final: `.dw/spec/projects/{{PROJECT_NAME}}-bootstrap.md`
41
41
  - Rules semeadas: `.dw/rules/index.md` (mínimo, depois substituido/enriquecido por `/dw-analyze-project`)
42
- - Receitas de compose: `.agents/skills/docker-compose-recipes/services/*.yml`
42
+ - Receitas de compose: `.dw/skills/docker-compose-recipes/services/*.yml`
43
43
 
44
44
  ## Comportamento Obrigatório — Pipeline
45
45
 
@@ -157,7 +157,7 @@ Se fullstack:
157
157
 
158
158
  #### 3.3 Gerar `docker-compose.dev.yml`
159
159
 
160
- 1. Leia `.agents/skills/docker-compose-recipes/SKILL.md` e os `services/<nome>.yml` relevantes.
160
+ 1. Leia `.dw/skills/docker-compose-recipes/SKILL.md` e os `services/<nome>.yml` relevantes.
161
161
  2. Aplique o algoritmo de merge de `references/compose-composition.md`:
162
162
  - Concatene blocos sob `services:`.
163
163
  - Agregue volumes nomeados sob `volumes:`.
@@ -300,7 +300,7 @@ monorepo: <pnpm-workspaces|turborepo|nx|none>
300
300
  | ... | ... | ... |
301
301
 
302
302
  ## Servicos Compostos
303
- <tabela de servicos com porta + URL UI + requisitos de credenciais, vinda de .agents/skills/docker-compose-recipes/>
303
+ <tabela de servicos com porta + URL UI + requisitos de credenciais, vinda de .dw/skills/docker-compose-recipes/>
304
304
 
305
305
  ## Proximos Passos
306
306
  1. `cp .env.example .env`, gere secrets locais unicos e defina todo valor obrigatorio como `POSTGRES_PASSWORD`.
@@ -30,7 +30,7 @@ Você é um orquestrador de planejamento que conduz uma ideia pelo pipeline comp
30
30
 
31
31
  ## Skills Complementares
32
32
 
33
- Quando disponíveis em `./.agents/skills/`, use como suporte:
33
+ Quando disponíveis em `./.dw/skills/`, use como suporte:
34
34
 
35
35
  - `dw-source-grounding`: **SEMPRE** no estágio TechSpec — toda decisão de framework/library cita docs oficiais com versão + data.
36
36
  - `dw-ui-discipline`: **OBRIGATÓRIO** quando PRD tem superfícies de UI — roda as 4 grounding questions antes do design visual entrar no TechSpec.
@@ -169,7 +169,7 @@ Roda em modo padrão (após aprovação do TechSpec) OU `plan tasks`.
169
169
  3. **Cobertura end-to-end:** todo fluxo user-facing tem subtasks backend + frontend + UI funcional quando aplicável.
170
170
  4. **Test placement (`dw-testing-discipline`):** toda subtask que adiciona teste nomeia seu invariant per placement doctrine. Owning layer especificado.
171
171
  5. **Constitution alignment:** toda task lista `Constitution: respects P-NNN` ou `Constitution: deviates P-NNN — ADR planejado: <slug>` ou `Constitution: n/a — motivo: <one-liner>`.
172
- 6. **Subtask LLM-eval (quando aplicável):** se PRD tem feature AI, uma task deve incluir Eval Plan subtask (reference dataset path, oracle rungs, judge calibration, target metrics).
172
+ 6. **Subtask LLM-eval (quando aplicável):** se PRD tem feature AI, uma task deve incluir Eval Plan subtask (reference dataset path, oracle rungs, judge calibration, target metrics), ordenada antes das subtasks de implementação: spec do comportamento (quando / faz / não deve / continua funcionando), casos, e uma run baseline no código atual em que os casos do comportamento novo falham.
173
173
  7. **Declaração de dependência:** cada task lista explicitamente de quais tasks anteriores depende. Escreva o campo como `Depends on: none` ou `Depends on: 1.0, 2.0` em `tasks.md` e em cada `<N>_task.md`. Validação rejeita ciclos.
174
174
  8. **Outputs:**
175
175
  - Summary: `.dw/spec/prd-<feature-slug>/tasks.md`
@@ -48,14 +48,14 @@ Compute `<target>` UMA VEZ no início; substitua onde aparecer `<target>` abaixo
48
48
 
49
49
  ## Skills Complementares
50
50
 
51
- Quando disponíveis em `./.agents/skills/`, invocadas operacionalmente:
51
+ Quando disponíveis em `./.dw/skills/`, invocadas operacionalmente:
52
52
 
53
53
  - `dw-testing-discipline`: **(modo UI — SEMPRE)** — core rules e 25 anti-patterns valem pra todo teste QA. `references/playwright-recipes.md` pra patterns táticos. `references/three-workflow-patterns.md` pra escolher modo de verificação (UI / network / perf). `references/security-boundary.md` pra fluxos que cruzam auth.
54
54
  - `api-testing-recipes`: **(modo API — SEMPRE)** — snippets validados pra `.http`, pytest+httpx, supertest, WebApplicationFactory, reqwest. Compõe per-FR test files em `QA/scripts/api/` e logs JSONL em `QA/logs/api/`.
55
- - `dw-llm-eval`: **(modo AI — quando invocado com `--ai`)** — roda reference dataset contra implementação atual. Computa precision@k / faithfulness / outcome accuracy. Loga JSONL em `QA/logs/ai/<feature>-<date>.jsonl`. Alerta em regressão >10% vs run anterior.
55
+ - `dw-llm-eval`: **(modo AI — quando invocado com `--ai`)** — roda reference dataset contra implementação atual. Computa precision@k / faithfulness / outcome accuracy. Loga JSONL em `QA/logs/ai/<feature>-<date>.jsonl`. Lista flips pass → fail por caso vs run anterior (cada um é bug) e alerta em regressão >10% de métrica.
56
56
  - `dw-debug-protocol`: **(em modo `--fix` — SEMPRE)** — six-step triage (Reproduzir → Localizar → Reduzir → Fix Root Cause → Guardar → Verify End-to-End) pra cada bug detectado. Stop-the-line discipline; root-cause sobre symptom; regression test no mesmo commit atômico.
57
57
  - `vercel-react-best-practices`: (modo UI) quando risco de regressão React/Next.js suspeitado.
58
- - `dw-ui-discipline`: (modo UI) ao validar consistência de design — anti-slop catalog + WCAG accessibility floor.
58
+ - `dw-ui-discipline`: (modo UI) ao validar consistência de design — anti-slop catalog + WCAG accessibility floor, mais o passe de content stress de `references/content-stress.md`.
59
59
  - `dw-chaos-engineering`: **(só por nome)** — passagem adversarial sobre uma mudança cujos testes normais já passam. Peça depois do QA verde, quando resiliência importa mais que cobertura; escreve só testes, roda local e tem teto de 3 rodadas. Nunca é invocada sozinha.
60
60
  - `dw-verify`: **(em modo `--fix` — SEMPRE)** — antes de marcar bug como `Fixed` ou `Closed`, requer VERIFICATION REPORT PASS (test + lint + build) E evidência de reteste (screenshot em UI, JSONL log em API, eval-run delta em AI).
61
61
 
@@ -92,7 +92,8 @@ Leia a baseline de qualidade/TechSpec do módulo afetado. Reutilize evidência v
92
92
  - Fluxos negativos (ações não autorizadas, input malformado).
93
93
  - Regressions (smoke check em surfaces adjacentes).
94
94
  - WCAG 2.2 accessibility per `dw-ui-discipline/references/accessibility-floor.md`.
95
- 4. **Capturar evidência**: screenshots em 375px mobile + 1440px desktop, console logs, network HARs.
95
+ - Content stress per `dw-ui-discipline/references/content-stress.md` em toda surface que renderiza dado de usuário ou de API: mapear os campos renderizados e seus limites, montar uma fixture de pior caso realista (mais vazio, um item e 1.000+ linhas), injetá-la na fronteira de dados — fixtures/mocks do próprio projeto, ou `page.route()` no teste; nunca editando o componente — e checar na largura real do container, em 320px, com zoom de 200% e em dark mode/RTL quando o produto suporta. Cada quebra vai para `bugs.md` com o mapeamento de severidade da reference (Broken → high, Ugly → medium, Fragile → low). Comportamento de plataforma mobile (hover preso, zoom em input, safe areas) não reproduz em emulação: liste em `qa-report.md` como pendente de aparelho real em vez de marcar como aprovado.
96
+ 4. **Capturar evidência**: screenshots em 375px mobile + 1440px desktop, console logs, network HARs; no passe de content stress, screenshots da fixture de pior caso em 320px e com zoom de 200%.
96
97
  5. **Detectar páginas stub/placeholder**: qualquer página com "TODO" ou conteúdo dummy óbvio → flagar como bug.
97
98
  6. **Escrever `qa-report.md`**: test plan, execution log, refs de evidência, contagem de bugs por severity.
98
99
  7. **Escrever `bugs.md`**: uma entrada por bug com severity, repro steps, link de evidência, status (`Open`).
@@ -117,7 +118,7 @@ Leia a baseline de qualidade/TechSpec do módulo afetado. Reutilize evidência v
117
118
  - Agent: outcome assertion + trajectory match (per parâmetro `--ai-mode` ou config da feature).
118
119
  - Classification: exact match accuracy.
119
120
  3. Logar JSONL em `QA/logs/ai/<feature>-<date>.jsonl`.
120
- 4. Comparar com JSONL da run anterior — alertar em regressão >10% em qualquer métrica.
121
+ 4. Comparar com o JSONL da run anterior caso a caso: listar todo caso que virou pass → fail e registrar cada um como bug, seja qual for a média. Depois alertar em regressão >10% em qualquer métrica. Rodar também o split `holdout` e reportar separado do `dev`.
121
122
  5. Anexar seção modo-AI em `qa-report.md`.
122
123
 
123
124
  ## Modo 1.5: UAT Interativo (`/dw-qa --uat`)
@@ -38,7 +38,7 @@ digraph redesign_decision {
38
38
 
39
39
  ## Skills Complementares
40
40
 
41
- Quando disponíveis no projeto em `./.agents/skills/`, use para guiar o redesign:
41
+ Quando disponíveis no projeto em `./.dw/skills/`, use para guiar o redesign:
42
42
 
43
43
  - `dw-ui-discipline`: **OBRIGATÓRIO** — roda o hard-gate de 4 checkpoints (brand authorities OU curated defaults; surface job sentence; state matrix completa; scene sentence) ANTES de qualquer proposta. Os 14 anti-slop patterns são checados contra cada direção. O WCAG 2.2 AA floor é não-negociável no step de validate.
44
44
  - `vercel-react-best-practices`: use quando o projeto for React/Next.js para padrões de performance e implementação
@@ -58,10 +58,10 @@ Utilize ferramentas de diagnóstico conforme o framework do projeto:
58
58
  1. Identifique o alvo: página, componente ou rota que será redesenhada.
59
59
  2. **AUDITAR**: leia a implementação atual, identifique stack CSS (Tailwind, CSS Modules, styled-components, etc.), capture o screenshot do estado-antes (Playwright MCP, ou `node .dw/scripts/lib/capture-screenshots.mjs` como fallback resiliente no WSL), rode react-doctor se projeto React.
60
60
  3. Faça 3 a 5 perguntas sobre objetivos do redesign: direção de estilo, constraints de marca, inspirações, público-alvo, dispositivos prioritários.
61
- 4. **PROPOR**: apresente 2 a 3 direções de design depois de passar pelo hard-gate de `dw-ui-discipline` (brand authorities ou curated defaults; surface job sentence; state matrix enumerada; scene sentence). Cada direção lista paleta de cores, par tipográfico, estilo de layout e racional. Self-check de cada direção contra os 14 anti-slop patterns. Para CADA direção, descreva explicitamente o layout mobile (<=768px) e o layout desktop (>=1024px), incluindo como os elementos se reorganizam, empilham ou escondem entre breakpoints.
61
+ 4. **PROPOR**: apresente 2 a 3 direções de design depois de passar pelo hard-gate de `dw-ui-discipline` (brand authorities ou curated defaults; surface job sentence; state matrix enumerada; scene sentence). As direções precisam divergir num eixo nomeado — layout, densidade, personalidade, motion ou modelo de interação — e recebem o nome da direção ("Quiet", "Editorial", "Dense"), nunca "Opção A/B/C"; três tons da mesma ideia contam como uma direção só. Cada direção lista seu eixo, paleta de cores, par tipográfico, estilo de layout e racional. Self-check de cada direção contra os 14 anti-slop patterns. Para CADA direção, descreva explicitamente o layout mobile (<=768px) e o layout desktop (>=1024px), incluindo como os elementos se reorganizam, empilham ou escondem entre breakpoints.
62
62
  5. Espere aprovação explícita do usuário antes de implementar.
63
63
  6. **IMPLEMENTAR**: aplique o design escolhido com abordagem mobile-first — implemente primeiro o layout mobile e depois adicione media queries/breakpoints para tablet e desktop. Respeite a stack existente. Use `vercel-react-best-practices` para React/Next.js. Mantenha a metodologia CSS do projeto.
64
- 7. **VALIDAR**: capture estado depois em AMBAS as resoluções (mobile e desktop), compare antes/depois, verifique acessibilidade contra `dw-ui-discipline/references/accessibility-floor.md` (WCAG 2.2 AA — não-negociável: contraste, focus-visible, keyboard nav, ARIA, sem traps), rode react-doctor `--diff` se React. Capture screenshots em 375px (mobile) e 1440px (desktop) — `node .dw/scripts/lib/capture-screenshots.mjs --url <url> --widths 375,1440` é o caminho resiliente no WSL; veja a seção "Browser on WSL" de `dw-testing-discipline/references/playwright-recipes.md`.
64
+ 7. **VALIDAR**: capture estado depois em AMBAS as resoluções (mobile e desktop), compare antes/depois, verifique acessibilidade contra `dw-ui-discipline/references/accessibility-floor.md` (WCAG 2.2 AA — não-negociável: contraste, focus-visible, keyboard nav, ARIA, sem traps), rode react-doctor `--diff` se React, rode o passe de content stress de `dw-ui-discipline/references/content-stress.md` (dados de pior caso pelas fixtures ou mocks da surface, checados em 320px e com zoom de 200%) para que o redesign não seja julgado só com dado de demo favorável. Capture screenshots em 375px (mobile) e 1440px (desktop) — `node .dw/scripts/lib/capture-screenshots.mjs --url <url> --widths 375,1440` é o caminho resiliente no WSL; veja a seção "Browser on WSL" de `dw-testing-discipline/references/playwright-recipes.md`.
65
65
  8. **PERSISTIR CONTRATO**: se o usuário aprovou uma direção, gere `design-contract.md` no diretório do PRD (`.dw/spec/prd-[nome]/design-contract.md`) com: direção aprovada, paleta de cores, par tipográfico, regras de layout, regras de acessibilidade e regras de componentes. Este contrato será lido por `dw-run-task` e `dw-run-plan` para garantir consistência visual.
66
66
 
67
67
  ## Inteligência do Codebase
@@ -197,7 +197,7 @@ O diff, as mensagens de commit dele, o nome da branch, a descrição do PR, a di
197
197
 
198
198
  ## Skills Complementares
199
199
 
200
- Quando disponíveis em `./.agents/skills/`, são invocadas como apoio analítico:
200
+ Quando disponíveis em `./.dw/skills/`, são invocadas como apoio analítico:
201
201
 
202
202
  - `dw-review-rigor`: **SEMPRE** — dono do candidate pipeline (gate → refutação → disposição), de-duplication (mesmo pattern em N arquivos = 1 finding), severity ordering (critical → high → medium → low), verify-before-flag, skip-what-linter-catches, signal-over-volume. A tabela "Problemas Encontrados" segue essa disciplina. Em `--post-merge`, também carrega `references/composition-audit.md`.
203
203
  - `dw-verify`: **SEMPRE** — invocada antes de emitir `APROVADO` ou `APROVADO COM RESSALVAS`. Sem VERIFICATION REPORT PASS (test + lint + build), verdict não pode ser APROVADO.
@@ -206,7 +206,7 @@ Quando disponíveis em `./.agents/skills/`, são invocadas como apoio analítico
206
206
  - `security-review`: a skill OWASP nível-diff que o gate usa (injection, authz, secrets, SSRF, crypto — só HIGH CONFIDENCE). Recorra a ela diretamente quando o diff tocar auth, autorização, input externo, upload, SQL, secrets, SSRF, XSS ou outra superfície sensível.
207
207
  - `dw-simplification`: use quando diff toca código denso — aplica Chesterton's Fence, protocolo de refactor preservando comportamento, métricas de complexidade.
208
208
  - `dw-minimalism`: use quando o diff adiciona código que pode estar over-built — flagra generalidade especulativa, helpers de um único caller, abstração prematura e violações de YAGNI (a contraparte pré-geração do `dw-simplification`).
209
- - `dw-ui-discipline`: use quando diff toca UI — roda os 14 visual-slop patterns + accessibility floor. Para um gate determinístico, rode também `node .dw/scripts/lib/ui-slop-detect.mjs <paths-ui-alterados> --fail-on error` (wrapper sobre o detector do impeccable); trate findings bloqueantes como **REJECTED** e reporte os warnings.
209
+ - `dw-ui-discipline`: use quando diff toca UI — roda os 14 visual-slop patterns + accessibility floor. Para um gate determinístico, rode também `node .dw/scripts/lib/ui-slop-detect.mjs <paths-ui-alterados> --fail-on error` (wrapper sobre o detector do impeccable); trate findings bloqueantes como **REJECTED** e reporte os warnings. Quando o diff adiciona ou muda motion (`transition`, `animation`, `@keyframes`, props de biblioteca de animação), cheque contra os gatilhos de escalonamento de `references/motion.md` §9; quando renderiza dado de usuário ou de API, cheque os sinais estáticos de `references/content-stress.md`. Ambos geram candidatos para o `dw-review-rigor`, nas severidades que essas references definem.
210
210
  - `dw-testing-discipline`: use quando diff toca testes — aplica catálogo de 25 anti-patterns + 6 agent guardrails (quando testes foram agent-authored).
211
211
  - `dw-llm-eval`: **OBRIGATÓRIO quando diff toca código de feature AI/LLM**. Reference dataset + ≥2 oracle rungs + judge calibration (se rung 4 usado) + eval run results DEVEM estar no PR. Faltando → REPROVADO.
212
212
  - `vercel-react-best-practices`: use quando diff toca React/Next.js.
@@ -7,7 +7,7 @@ Você é o auditor de saúde de skills e agentes do dev-workflow.
7
7
  - Use antes de promover um aprendizado para skill reutilizavel.
8
8
 
9
9
  ## Processo
10
- 1. Leia `scaffold/skill-registry.json` ao auditar o repo dev-workflow, ou `.dw/skill-registry.json` + `.agents/skills/` em projetos consumidores.
10
+ 1. Leia `scaffold/skill-registry.json` ao auditar o repo dev-workflow, ou `.dw/skill-registry.json` + as skills bundled instaladas em `.dw/skills/` em projetos consumidores. Skills em `.claude/skills/`, `.agents/skills/` e nos demais índices de agente são wrappers de comando ou do próprio usuário; uma skill do dev-workflow encontrada lá é cópia legada que o `update` remove.
11
11
  2. Agrupe skills por `kind`: `protocol`, `domain-pack`, `recipe-pack`, `asset-pack`.
12
12
  3. Valide que toda skill tem trigger, output esperado, owner, load policy e limite de contexto.
13
13
  4. Valide que todo `SKILL.md` bundled tem contrato `## Structured Return` com `Status`, `Scope`, `Evidence`, `Artifacts`, `Decisions`, `Risks` e `Next Step`.
@@ -59,6 +59,28 @@ Declare a janela antes de qualquer julgamento: conte as linhas instrumentadas
59
59
 
60
60
  Recomende rebaixar só quando TUDO valer: coorte invocável por modelo; ao menos 20 sessões instrumentadas ou 30 dias de janela; zero referências; sem sinal de artefato; comando owner alcançável. Abaixo disso, mostre as contagens e diga que a janela é curta demais para concluir. Remover skill bundled do pacote é entrada append-only em `lib/removed-bundled-skills.js` — este comando propõe, nunca remove e nunca deleta arquivo.
61
61
 
62
+ ### Comandos — quais entradas merecem lugar no índice
63
+
64
+ Todo comando `dw-*` instalado é uma entrada no índice de skills de cada agente, e índice lotado piora a escolha que o modelo faz ali. Linhas com o objeto `commands` registram quais comandos a sessão carregou: uma leitura de `.dw/commands/<nome>.md` (todo wrapper faz uma) ou uma chamada da ferramenta Skill nomeando o comando. As regras das skills valem sem mudança: chave `commands` ausente é falta de telemetria, a janela é contada só pelas linhas que trazem `commands`, e a contagem mede carregamento, não sucesso. O hook lê só transcripts do Claude Code; quando o projeto também roda Codex, Copilot ou OpenCode, diga que essas sessões não entram na conta.
65
+
66
+ Mostre uma tabela: comando, sessões que o carregaram, referências. Depois, para cada família de comandos com o mesmo propósito, mostre as contagens dos membros lado a lado:
67
+
68
+ | Família | Membros |
69
+ |---|---|
70
+ | Handoff de subagente | `dw-subtask-start`, `dw-subtask-complete`, `dw-subtask-resume` |
71
+ | Runners externos | `dw-codex-run`, `dw-claude-run`, `dw-copilot-run` |
72
+ | Instaladores de skills de nuvem | `dw-install-aws-skills`, `dw-install-azure-skills` |
73
+ | Auditorias de instalação e contexto | `dw-skill-health`, `dw-harness-audit`, `dw-context-budget` |
74
+ | Checkpoint de sessão | `dw-pause`, `dw-resume` |
75
+
76
+ Classifique cada família:
77
+
78
+ - `CANDIDATA A FUSÃO` — a janela tem ao menos 20 sessões instrumentadas ou 30 dias, e a família inteira foi carregada em menos de 5% delas, ou algum membro nunca foi carregado enquanto outro foi. Um comando com modos custaria menos entradas no índice.
79
+ - `MANTER SEPARADOS` — dois ou mais membros foram carregados, cada um, em ao menos 5 sessões: os nomes distintos estão em uso, e fundir troca um hábito medido por um índice menor.
80
+ - `CEDO DEMAIS` — abaixo do limiar da janela. Mostre as contagens e diga isso.
81
+
82
+ Comandos fora de família seguem a redação das skills: comando invocável por modelo com zero carregamentos numa janela longa o bastante é `CANDIDATO A OCIOSO`, nunca "não usado". Fusão ou remoção no pacote é decisão de produto registrada append-only em `lib/removed-commands.js` (o update então remove os wrappers antigos); este comando propõe, nunca renomeia, remove ou edita comandos. Ao auditar o próprio repositório dev-workflow não há telemetria local: reporte `SEM TELEMETRIA`, a menos que o mantenedor forneça os `costs.jsonl` de projetos consumidores, e agregue esses por projeto antes de somar.
83
+
62
84
  ## Saída
63
85
 
64
86
  Quando `.dw/config/routing-defaults.json` existir, compare seus candidatos atuais com o `.dw/config/routing.json` do proprietário. Relate diferenças relevantes e valide modelos/capacidades propostos antes da adoção. Valores diferentes podem ser intencionais; não os trate como falha de migração nem sobrescreva automaticamente. Atribuições de tarefas aprovadas têm precedência sobre ambos os arquivos de candidatos.
@@ -70,6 +92,7 @@ Inclua:
70
92
  - Issues de registry/schema.
71
93
  - Cobertura de retorno estruturado, incluindo qualquer skill sem contrato ou vocabulario de status.
72
94
  - Evidência de uso: a janela declarada, as tabelas por coorte e toda candidata a ociosa com sua frase de janela. Sem telemetria, diga isso em vez de pontuar.
95
+ - Uso de comandos: a tabela por comando e a classificação de cada família (`CANDIDATA A FUSÃO`, `MANTER SEPARADOS`, `CEDO DEMAIS`).
73
96
  - Top 3 fixes.
74
97
 
75
98
  Marcador final: `## SKILL-HEALTH COMPLETE`