@event4u/agent-config 8.9.0 → 8.10.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 (117) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +41 -0
  3. package/README.md +5 -5
  4. package/dist/agent-src/commands/cost/report.md +13 -3
  5. package/dist/agent-src/commands/tests/create.md +28 -6
  6. package/dist/agent-src/commands/work.md +33 -0
  7. package/dist/agent-src/commands/worktree/cleanup.md +78 -0
  8. package/dist/agent-src/commands/worktree/create.md +62 -0
  9. package/dist/agent-src/commands/worktree/status.md +63 -0
  10. package/dist/agent-src/commands/worktree/verify.md +70 -0
  11. package/dist/agent-src/commands/worktree.md +85 -0
  12. package/dist/agent-src/contexts/execution/orchestration-telemetry.md +47 -34
  13. package/dist/agent-src/rules/design-fidelity.md +40 -0
  14. package/dist/agent-src/rules/spreadsheet-source-quality.md +61 -0
  15. package/dist/agent-src/skills/accessibility-auditor/evals/evals.json +15 -0
  16. package/dist/agent-src/skills/analysis-skill-router/evals/evals.json +13 -0
  17. package/dist/agent-src/skills/api-testing/SKILL.md +15 -1
  18. package/dist/agent-src/skills/character-consistency/evals/evals.json +16 -0
  19. package/dist/agent-src/skills/command-routing/evals/evals.json +14 -0
  20. package/dist/agent-src/skills/dashboard-design/evals/evals.json +16 -0
  21. package/dist/agent-src/skills/dcf-modeling/evals/evals.json +20 -0
  22. package/dist/agent-src/skills/decision-record/evals/evals.json +20 -0
  23. package/dist/agent-src/skills/design-intelligence/evals/evals.json +14 -0
  24. package/dist/agent-src/skills/design-review/SKILL.md +6 -0
  25. package/dist/agent-src/skills/design-system-capture/SKILL.md +21 -0
  26. package/dist/agent-src/skills/design-system-capture/evals/evals.json +15 -0
  27. package/dist/agent-src/skills/developer-like-execution/evals/evals.json +16 -0
  28. package/dist/agent-src/skills/doc-coauthoring/SKILL.md +27 -0
  29. package/dist/agent-src/skills/doc-coauthoring/evals/evals.json +16 -0
  30. package/dist/agent-src/skills/editorial-calendar/evals/domain-truth.json +16 -0
  31. package/dist/agent-src/skills/editorial-calendar/evals/evals.json +16 -0
  32. package/dist/agent-src/skills/estimate-ticket/evals/evals.json +16 -0
  33. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +30 -0
  34. package/dist/agent-src/skills/existing-ui-audit/evals/triggers.json +47 -0
  35. package/dist/agent-src/skills/fe-design/SKILL.md +36 -5
  36. package/dist/agent-src/skills/fe-design/evals/triggers.json +47 -0
  37. package/dist/agent-src/skills/forecasting/evals/evals.json +20 -0
  38. package/dist/agent-src/skills/fundraising-narrative/evals/domain-truth.json +16 -0
  39. package/dist/agent-src/skills/fundraising-narrative/evals/evals.json +16 -0
  40. package/dist/agent-src/skills/html-deck/SKILL.md +27 -0
  41. package/dist/agent-src/skills/iconography/SKILL.md +24 -0
  42. package/dist/agent-src/skills/incident-commander/evals/domain-truth.json +16 -0
  43. package/dist/agent-src/skills/incident-commander/evals/evals.json +20 -0
  44. package/dist/agent-src/skills/launch-readiness/evals/evals.json +21 -0
  45. package/dist/agent-src/skills/logging-monitoring/evals/evals.json +16 -0
  46. package/dist/agent-src/skills/messaging-architecture/evals/domain-truth.json +16 -0
  47. package/dist/agent-src/skills/messaging-architecture/evals/evals.json +16 -0
  48. package/dist/agent-src/skills/perf-feedback-craft/evals/evals.json +16 -0
  49. package/dist/agent-src/skills/pest-testing/SKILL.md +1 -1
  50. package/dist/agent-src/skills/playwright-testing/SKILL.md +16 -0
  51. package/dist/agent-src/skills/prompt-engineering-patterns/evals/evals.json +16 -0
  52. package/dist/agent-src/skills/refine-prompt/evals/evals.json +16 -0
  53. package/dist/agent-src/skills/refine-ticket/evals/evals.json +16 -0
  54. package/dist/agent-src/skills/release-comms/evals/evals.json +16 -0
  55. package/dist/agent-src/skills/rice-prioritization/evals/evals.json +20 -0
  56. package/dist/agent-src/skills/runway-cognition/evals/evals.json +20 -0
  57. package/dist/agent-src/skills/scenario-modeling/evals/evals.json +20 -0
  58. package/dist/agent-src/skills/spreadsheet-authoring/SKILL.md +98 -0
  59. package/dist/agent-src/skills/spreadsheet-authoring/evals/triggers.json +47 -0
  60. package/dist/agent-src/skills/systematic-debugging/evals/evals.json +20 -0
  61. package/dist/agent-src/skills/test-case-discovery/SKILL.md +118 -0
  62. package/dist/agent-src/skills/test-case-discovery/evals/triggers.json +52 -0
  63. package/dist/agent-src/skills/test-driven-development/SKILL.md +32 -6
  64. package/dist/agent-src/skills/test-driven-development/evals/evals.json +16 -0
  65. package/dist/agent-src/skills/testing-anti-patterns/SKILL.md +7 -6
  66. package/dist/agent-src/skills/threat-modeling/evals/evals.json +21 -0
  67. package/dist/agent-src/skills/typography-system/evals/evals.json +14 -0
  68. package/dist/agent-src/skills/unit-economics-modeling/evals/evals.json +24 -0
  69. package/dist/agent-src/skills/verify-completion-evidence/evals/evals.json +16 -0
  70. package/dist/agent-src/skills/vision-articulation/evals/evals.json +16 -0
  71. package/dist/agent-src/skills/voice-and-tone-design/evals/evals.json +16 -0
  72. package/dist/agent-src/skills/worktree-lifecycle/SKILL.md +180 -0
  73. package/dist/agent-src/skills/worktree-lifecycle/evals/triggers.json +52 -0
  74. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  75. package/dist/discovery/deprecation-report.md +1 -1
  76. package/dist/discovery/discovery-manifest.json +249 -32
  77. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  78. package/dist/discovery/discovery-manifest.summary.md +6 -6
  79. package/dist/discovery/orphan-report.md +1 -1
  80. package/dist/discovery/packs.json +22 -13
  81. package/dist/discovery/trust-report.md +4 -4
  82. package/dist/discovery/workspaces.json +22 -11
  83. package/dist/mcp/registry-manifest.json +2 -2
  84. package/dist/router.json +1 -1
  85. package/docs/CLAIMS.md +3 -3
  86. package/docs/architecture.md +3 -3
  87. package/docs/catalog.md +19 -8
  88. package/docs/command-flows.md +6 -1
  89. package/docs/contracts/CHANGELOG-conventions.md +6 -0
  90. package/docs/contracts/design-artifact-lifecycle.md +93 -0
  91. package/docs/contracts/design-artifact-verification.md +30 -1
  92. package/docs/contracts/release-pr-gating.md +26 -0
  93. package/docs/contracts/release-sizing.md +85 -0
  94. package/docs/contracts/surface-agent-contracts.md +153 -0
  95. package/docs/decisions/ADR-115-command-cluster-consolidation-phase-4.md +1 -1
  96. package/docs/distribution/consumer-matrix.md +96 -0
  97. package/docs/featured-skills.md +2 -2
  98. package/docs/getting-started-by-role.md +1 -1
  99. package/docs/getting-started.md +2 -2
  100. package/docs/governance-advantage.md +1 -1
  101. package/docs/proof.md +4 -4
  102. package/docs/release-runbook.md +3 -0
  103. package/docs/self-review-gate.md +51 -0
  104. package/package.json +1 -1
  105. package/src/scripts/_lib/orchestration_record.ts +13 -0
  106. package/src/scripts/_lib/orchestration_savings.ts +52 -0
  107. package/src/scripts/check_release_adjacent_health.ts +121 -0
  108. package/src/scripts/check_rule_invariants.ts +275 -0
  109. package/src/scripts/consumer_matrix.ts +353 -0
  110. package/src/scripts/generate_index.ts +3 -2
  111. package/src/scripts/lint_changelog_rollback.ts +293 -0
  112. package/src/scripts/orchestration_record.ts +16 -0
  113. package/src/scripts/orchestration_savings_report.ts +36 -3
  114. package/src/scripts/second_brain_retrieval.ts +44 -2
  115. package/src/scripts/self_review_gate.test.ts +65 -0
  116. package/src/scripts/self_review_gate.ts +272 -0
  117. package/src/scripts/trigger_eval_grandfather.json +223 -224
@@ -33,6 +33,36 @@ Do NOT use when:
33
33
  - `directive_set="backend"` — no UI surface to inventory
34
34
  - The audit findings already exist in `state.ui_audit` for this state-file (cached) — re-run only if `package.json` or `composer.json` mtime changed
35
35
 
36
+ ## Resource-first context gate (design fidelity)
37
+
38
+ Any request to **recreate, redesign, mock, prototype, or improve** a UI runs
39
+ this gate BEFORE styling — the Inspect stage of the
40
+ [design-artifact lifecycle](../../../docs/contracts/design-artifact-lifecycle.md).
41
+ Design starts from project truth, not generic aesthetic memory.
42
+
43
+ - **Search first (owned UI).** Before proposing anything, search the project
44
+ for: design tokens, global CSS, the component library / design system (§ 2),
45
+ supplied screenshots or exported design context, Figma/exported context when
46
+ connected, assets (logos, icons, fonts), and copy tone. Procedure steps 1–5
47
+ produce this inventory — do not skip them for a "quick" redesign.
48
+ - **Hard stop on a promised-but-inaccessible source.** When the user explicitly
49
+ references a design system, local folder, Figma file, or codebase you cannot
50
+ read, STOP and ask for access — never invent a design from memory to paper
51
+ over the missing source. A promised source that can't be reached is a blocking
52
+ question ([`ask-when-uncertain`](../../rules/ask-when-uncertain.md)), not a
53
+ licence to improvise. (fixture: `daf-inaccessible-design-system`.)
54
+ - **Source priority — code beats screenshots.** For exact values (tokens,
55
+ spacing, component props) the design-system/code context is authoritative; a
56
+ screenshot conveys gestalt but is not enough for component/token fidelity.
57
+ Never read pixel values off a screenshot when the source is available.
58
+ - **Tool composition — inspect before you generate.** Owned UI → repository
59
+ search + local files FIRST. Connected/imported design data (Figma, tokens
60
+ export) → that connector next, when available. Browser / image search → only
61
+ for public references or current product/place imagery, never a substitute
62
+ for inspecting owned code. Generated imagery → only when the user asks for
63
+ synthetic assets, or no real inspection is required. (fixtures:
64
+ `daf-no-context`, `daf-missing-asset`.)
65
+
36
66
  ## Procedure: Audit the existing UI surface
37
67
 
38
68
  ### 0. Inspect stack and input
@@ -0,0 +1,47 @@
1
+ {
2
+ "skill": "existing-ui-audit",
3
+ "last_eval": "2026-07-10",
4
+ "description": "5 should-trigger + 5 should-not-trigger queries for the resource-first context gate (road-to-design-artifact-fidelity Phase 2). Should-trigger covers the four Phase-2 cases — redesign with code present, screenshot-only, no-assets/owned-UI, and an inaccessible referenced source — plus an improve-existing case; all require inventorying project context BEFORE styling rather than starting from aesthetic memory. Should-not-trigger covers near-miss neighbours whose vocabulary overlaps (backend/API, non-UI, general design knowledge, a genuinely trivial one-line UI edit) that must NOT force a full audit.",
5
+ "queries": [
6
+ {
7
+ "q": "redesign our dashboard — the React components are in src/components, make it cleaner",
8
+ "trigger": true
9
+ },
10
+ {
11
+ "q": "here is a screenshot of our current app, recreate this screen for us",
12
+ "trigger": true
13
+ },
14
+ {
15
+ "q": "rebuild our landing page in the same style as the rest of the product",
16
+ "trigger": true
17
+ },
18
+ {
19
+ "q": "match our Figma file at this link and rebuild the settings page (you may not be able to open it)",
20
+ "trigger": true
21
+ },
22
+ {
23
+ "q": "improve the UI of our existing checkout flow",
24
+ "trigger": true
25
+ },
26
+ {
27
+ "q": "add a rate limiter to the /orders API endpoint",
28
+ "trigger": false
29
+ },
30
+ {
31
+ "q": "write the SQL migration that adds a status column to the orders table",
32
+ "trigger": false
33
+ },
34
+ {
35
+ "q": "what is the difference between CSS flexbox and grid?",
36
+ "trigger": false
37
+ },
38
+ {
39
+ "q": "fix the typo in the README heading",
40
+ "trigger": false
41
+ },
42
+ {
43
+ "q": "explain how our CI release pipeline is structured",
44
+ "trigger": false
45
+ }
46
+ ]
47
+ }
@@ -43,6 +43,15 @@ Do NOT use this skill to:
43
43
  - Audit an existing UI — that is `existing-ui-audit`
44
44
  - Drive the full UI flow — that is the `directives/ui/` orchestrator
45
45
 
46
+ > **Resource-first, before taste.** Any request to recreate / redesign / mock /
47
+ > prototype / improve an existing UI runs the
48
+ > [resource-first context gate](../existing-ui-audit/SKILL.md#resource-first-context-gate-design-fidelity)
49
+ > FIRST — search the project's tokens/design-system/assets, hard-stop and ask
50
+ > when a referenced source is inaccessible (never invent from memory), and
51
+ > prefer code over screenshots for exact values. Planning here starts from that
52
+ > inventory, not from generic aesthetic memory (design-artifact lifecycle,
53
+ > Inspect stage).
54
+
46
55
  ## How the directive set cites this skill
47
56
 
48
57
  `directives/ui/design.ts` produces the design brief (layout, components,
@@ -247,11 +256,33 @@ Animate `transform` and `opacity` only. Why: these run on the GPU compositor thr
247
256
 
248
257
  ## Presenting variants
249
258
 
250
- This skill produces ONE refined solution. When the user wants multiple options
251
- to compare (or a live tweak panel over one design), hand off to
252
- [`design-variations`](../design-variations/SKILL.md) — it owns the
253
- basic→bold variation method and the single-file tweak-panel mechanics
254
- (CSS custom properties + floating "Tweaks" panel + `localStorage`).
259
+ This skill produces ONE refined solution by default. **Plan the variation
260
+ decision before generating** — do not reflexively emit one generic design when
261
+ exploration was asked, nor spam options when one production answer was asked.
262
+
263
+ - **Decide whether to vary (ask only if ambiguous).** For ambiguous creative
264
+ work, decide the variation count and the axis that varies — visual direction,
265
+ UX flow, interaction model, copy, density, or brand strictness. Ask about
266
+ count + axis only when the choice changes the work materially; for a clear
267
+ implementation task, proceed with one answer. (fixture: `daf-requested-variations`.)
268
+ - **Variation floors.** When the user asks to explore, produce **two to three
269
+ meaningfully different** options along the stated axis — different *decisions*,
270
+ not the same layout recoloured. When the user asks for one production answer,
271
+ produce one; no decorative option spam. (fixtures: `daf-requested-variations`,
272
+ `daf-unwanted-variations`.)
273
+ - **Canvas / exploration contract (host-neutral).** Presenting side-by-side
274
+ concepts: give each a **stable frame label**, keep frames flat (no nested
275
+ cards), use generous spacing, and — on tools with a canvas — export-safe
276
+ coordinates so the layout survives export. Same labelled-frames shape whether
277
+ the host has a real canvas or just stacked sections.
278
+ - **Cost / UX tie-breaker.** Ask about the axis only when it changes the work
279
+ materially; otherwise choose a strong default and **document the axis used in
280
+ the handoff** ("explored along visual-direction; density held constant").
281
+
282
+ Hand off the actual variation **mechanics** — the basic→bold method and the
283
+ single-file tweak-panel (CSS custom properties + floating "Tweaks" panel +
284
+ `localStorage`) — to [`design-variations`](../design-variations/SKILL.md): this
285
+ section owns the *planning decision*, that skill owns the *execution*.
255
286
 
256
287
  ## Cross-task design memory — read DESIGN.md / PRODUCT.md first
257
288
 
@@ -0,0 +1,47 @@
1
+ {
2
+ "skill": "fe-design",
3
+ "last_eval": "2026-07-10",
4
+ "description": "5 should-trigger + 5 should-not-trigger queries for the variation & canvas planning layer (road-to-design-artifact-fidelity Phase 4). Should-trigger covers exploration / variation planning and UI-design decisions where fe-design plans BEFORE generating (give me directions, explore, plan the flow, pattern choice). Should-not-trigger covers near-misses that must NOT invoke design planning: pure implementation of an already-selected design (apply-step), inventorying existing UI (existing-ui-audit), a surgical one-line edit, and non-UI/backend work.",
5
+ "queries": [
6
+ {
7
+ "q": "give me three directions for the pricing page",
8
+ "trigger": true
9
+ },
10
+ {
11
+ "q": "explore a few visual directions for the dashboard before we commit",
12
+ "trigger": true
13
+ },
14
+ {
15
+ "q": "design the multi-step onboarding flow",
16
+ "trigger": true
17
+ },
18
+ {
19
+ "q": "should this filter be a modal or an inline panel?",
20
+ "trigger": true
21
+ },
22
+ {
23
+ "q": "plan the responsive layout for the settings screen",
24
+ "trigger": true
25
+ },
26
+ {
27
+ "q": "implement the selected checkout design in React exactly as approved",
28
+ "trigger": false
29
+ },
30
+ {
31
+ "q": "what form components do we already have in the codebase?",
32
+ "trigger": false
33
+ },
34
+ {
35
+ "q": "change the primary button colour to green",
36
+ "trigger": false
37
+ },
38
+ {
39
+ "q": "add a database index on orders.status",
40
+ "trigger": false
41
+ },
42
+ {
43
+ "q": "fix the failing unit test in the auth module",
44
+ "trigger": false
45
+ }
46
+ ]
47
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "skill": "forecasting",
3
+ "_calibration": "Behavioural fixture (road-to-skill-eval-coverage Phase 2, default-surface). Deterministic assertions on a real output property where reliable; rubric pins the qualitative core as a known-limit (pass ratified in PR review, not a hidden judge). finding_floor n is a conservative floor, not a calibrated per-host number.",
4
+ "scenarios": [
5
+ {
6
+ "id": "reconcile-topdown-bottomup",
7
+ "prompt": "Top-down says $30M ARR, bottom-up commit sums to $8.1M for Q1. Build the forecast call.",
8
+ "assertions": [
9
+ {
10
+ "kind": "contains",
11
+ "value": "confidence"
12
+ },
13
+ {
14
+ "kind": "rubric",
15
+ "criterion": "States the construction shape (top-down/bottom-up/hybrid) and attaches a confidence band; when they diverge, the divergence IS the forecast — not either single number."
16
+ }
17
+ ]
18
+ }
19
+ ]
20
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "skill": "fundraising-narrative",
3
+ "domain": "founder",
4
+ "_note": "Rubric domain-truth fixture (road-to-domain-soundness Phase 2, rubric target). The criterion names a CITED EXTERNAL practice/standard — NOT the skill's own output (blocker: domain-competence-for-answer-keys, option a). Authored as a maintainer-RATIFICATION CANDIDATE: rubric is NON-deterministic (pinned-judge known-limit); the Phase-3 run + --write-floor ratchet-pin + per-domain backed-CLAIMS remain the maintainer's gate.",
5
+ "cases": [
6
+ {
7
+ "id": "matches-venture-pitch-arc",
8
+ "scenario": "Draft the fundraising narrative for our seed round.",
9
+ "source": "The standard venture seed-pitch narrative arc (problem -> why-now -> insight/solution -> traction -> team -> ask), the widely-taught pitch-structure convention.",
10
+ "check": {
11
+ "kind": "rubric",
12
+ "criterion": "Matches the standard venture pitch arc: problem, why-now, insight/solution, traction evidence, team, and a specific ask; surfaces the key risk and issues NO invest/raise verdict (finance safety floor) - not a feature list or an unopposed hype narrative."
13
+ }
14
+ }
15
+ ]
16
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "skill": "fundraising-narrative",
3
+ "_calibration": "Behavioural fixture (road-to-skill-eval-coverage Phase 2, default-surface). Deterministic assertions on a real output property where reliable; rubric pins the qualitative core as a known-limit (pass ratified in PR review, not a hidden judge). finding_floor n is a conservative floor, not a calibrated per-host number.",
4
+ "scenarios": [
5
+ {
6
+ "id": "raise-narrative",
7
+ "prompt": "Draft the fundraising narrative for our seed round.",
8
+ "assertions": [
9
+ {
10
+ "kind": "rubric",
11
+ "criterion": "Builds a narrative around traction + why-now + why-us with a stated ask; surfaces the risk, does not issue a raise/don't-raise verdict (finance safety floor)."
12
+ }
13
+ ]
14
+ }
15
+ ]
16
+ }
@@ -24,6 +24,12 @@ letterbox to any viewport. A deck is fixed-canvas media (default 1920×1080,
24
24
 
25
25
  ## When to use
26
26
 
27
+ > **Cross-surface handoff.** A deck often consumes upstream analysis
28
+ > (spreadsheet → deck, research → deck). Read the handoff envelope from
29
+ > [`surface-agent-contracts`](../../../docs/contracts/surface-agent-contracts.md#cross-surface-handoff-envelope):
30
+ > trust `verification_already_done` (don't recompute the source's numbers),
31
+ > carry the asset list, and keep source restrictions intact.
32
+
27
33
  - The user asks for a deck, presentation, slides, or a pitch as a web/HTML
28
34
  deliverable.
29
35
 
@@ -32,6 +38,27 @@ one-off) → [`canvas-design`](../canvas-design/SKILL.md). Responsive product
32
38
  UI → [`fe-design`](../fe-design/SKILL.md) + stack executor. Multiple styled
33
39
  options of one screen → [`design-variations`](../design-variations/SKILL.md).
34
40
 
41
+ ## Deck fidelity floor
42
+
43
+ The deck surface's floor (per
44
+ [`surface-agent-contracts`](../../../docs/contracts/surface-agent-contracts.md)):
45
+
46
+ - **Outline before slides.** Draft the slide outline (title + one-line intent
47
+ per slide) before building any slide; when audience or tone is ambiguous, ask
48
+ once. (fixture: `ssac-deck-missing-notes`.)
49
+ - **Labels + speaker notes.** Every slide carries a stable label and speaker
50
+ notes, not just on-slide text.
51
+ - **Visual rhythm + readable scale.** Consistent spacing/hierarchy across
52
+ slides; never sub-readable text (the type floors below). (fixture:
53
+ `ssac-tiny-slide-text`.)
54
+ - **Image/asset provenance.** Real assets via the project path, no invented
55
+ brand evidence ([`design-fidelity`](../../rules/design-fidelity.md) § Asset &
56
+ imagery discipline).
57
+ - **Export verification.** Verify the deck exports/renders
58
+ ([`design-artifact-verification`](../../../docs/contracts/design-artifact-verification.md));
59
+ on a host without export capability, say what could not be verified rather
60
+ than claiming a clean export.
61
+
35
62
  ## Procedure
36
63
 
37
64
  1. **Discovery.** Confirm: audience (engineers / executives / customers —
@@ -51,6 +51,30 @@ execution:
51
51
  5. **Verify** — check the resolved name on `iconify.design/icon/{set}:{name}`;
52
52
  confirm the icon renders as expected before shipping.
53
53
 
54
+ ## Iconography floor (design fidelity)
55
+
56
+ Before resolving any new icon, honour the project's existing icon system — the
57
+ Inspect stage of the
58
+ [design-artifact lifecycle](../../../docs/contracts/design-artifact-lifecycle.md).
59
+
60
+ - **Inspect first.** Detect the icon set already in use (imports, existing
61
+ `set:name` usages, brand assets) before picking one. A new icon matches the
62
+ incumbent set's **stroke weight, fill style, corner radius, size, and
63
+ metaphor** — do not introduce a second visual language (see
64
+ [`icon-consistency`](../../rules/icon-consistency.md)).
65
+ - **No emoji-as-icon in serious UI.** An emoji is not an icon — never substitute
66
+ `⚙️`/`🔔`/`✅` for a real icon in a product/admin/marketing surface (functional
67
+ CLI/status markers are a different context, out of scope here).
68
+ - **No hand-rolled icons when a set exists.** If the project has an icon library
69
+ or brand mark, use it — do not hand-author a one-off SVG that drifts from the
70
+ system. Hand-rolling is for a genuinely missing glyph, and then it matches the
71
+ set's grid + stroke.
72
+ - **Flag substitutions when the exact asset is absent.** When the needed icon or
73
+ brand mark does not exist in the set, pick the nearest and **state the
74
+ substitution** ("no exact 'sync' glyph in Heroicons; used `arrow-path`") rather
75
+ than silently approximating or inventing. (fixtures: `daf-emoji-as-icon`,
76
+ `daf-fake-svg-logo`.)
77
+
54
78
  ## Output format
55
79
 
56
80
  1. **Iconify name** — `set:name` string, e.g. `lucide:arrow-right`.
@@ -0,0 +1,16 @@
1
+ {
2
+ "skill": "incident-commander",
3
+ "domain": "ops",
4
+ "_note": "Rubric domain-truth fixture (road-to-domain-soundness Phase 2, rubric target). The criterion names a CITED EXTERNAL practice/standard — NOT the skill's own output (blocker: domain-competence-for-answer-keys, option a). Authored as a maintainer-RATIFICATION CANDIDATE: rubric is NON-deterministic (pinned-judge known-limit); the Phase-3 run + --write-floor ratchet-pin + per-domain backed-CLAIMS remain the maintainer's gate.",
5
+ "cases": [
6
+ {
7
+ "id": "matches-ics-sre-incident-practice",
8
+ "scenario": "Production checkout is failing for all users. Coordinate the incident from declaration to mitigation.",
9
+ "source": "Incident Command System (ICS — FEMA/NIMS) + Google SRE incident management ('SRE Workbook', Incident Response): declared severity, distinct IC/comms/ops roles, comms cadence, mitigation-before-root-cause.",
10
+ "check": {
11
+ "kind": "rubric",
12
+ "criterion": "Matches ICS / SRE incident-management practice: declares a severity level, assigns distinct Incident-Commander / communications / ops-lead roles, sets an external comms cadence, and drives mitigation before root-cause — not ad-hoc firefighting or a single-person response."
13
+ }
14
+ }
15
+ ]
16
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "skill": "incident-commander",
3
+ "_calibration": "Behavioural fixture (road-to-skill-eval-coverage Phase 2, default-surface). Deterministic assertions on a real output property where reliable; rubric pins the qualitative core as a known-limit (pass ratified in PR review, not a hidden judge). finding_floor n is a conservative floor, not a calibrated per-host number.",
4
+ "scenarios": [
5
+ {
6
+ "id": "coordinate-incident",
7
+ "prompt": "Production is down — checkout is failing for all users. Coordinate the incident.",
8
+ "assertions": [
9
+ {
10
+ "kind": "contains",
11
+ "value": "sever"
12
+ },
13
+ {
14
+ "kind": "rubric",
15
+ "criterion": "Declares a severity, assigns IC/comms/ops roles, sets a comms cadence, and drives to mitigation-before-root-cause — matches a named IC practice."
16
+ }
17
+ ]
18
+ }
19
+ ]
20
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "skill": "launch-readiness",
3
+ "_calibration": "Behavioural fixture (road-to-skill-eval-coverage Phase 2, default-surface). Deterministic assertions on a real output property where reliable; rubric pins the qualitative core as a known-limit (pass ratified in PR review, not a hidden judge). finding_floor n is a conservative floor, not a calibrated per-host number.",
4
+ "scenarios": [
5
+ {
6
+ "id": "launch-go-no-go",
7
+ "prompt": "Are we ready to launch this feature to production?",
8
+ "assertions": [
9
+ {
10
+ "kind": "finding_floor",
11
+ "n": 3,
12
+ "pattern": "(?m)^\\s*[-*+]\\s+"
13
+ },
14
+ {
15
+ "kind": "rubric",
16
+ "criterion": "Surfaces blast radius, rollback path, and observability/monitoring as explicit gates; a missing gate blocks go."
17
+ }
18
+ ]
19
+ }
20
+ ]
21
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "skill": "logging-monitoring",
3
+ "_calibration": "Behavioural fixture (road-to-skill-eval-coverage Phase 2, default-surface). Deterministic assertions on a real output property where reliable; rubric pins the qualitative core as a known-limit (pass ratified in PR review, not a hidden judge). finding_floor n is a conservative floor, not a calibrated per-host number.",
4
+ "scenarios": [
5
+ {
6
+ "id": "add-logging-endpoint",
7
+ "prompt": "Add logging to this login endpoint so we can debug failures.",
8
+ "assertions": [
9
+ {
10
+ "kind": "rubric",
11
+ "criterion": "Logs allowlisted structured fields (user_id, request_id, outcome) — never the raw request/credential/PII; the credential never reaches the log stream."
12
+ }
13
+ ]
14
+ }
15
+ ]
16
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "skill": "messaging-architecture",
3
+ "domain": "content",
4
+ "_note": "Rubric domain-truth fixture (road-to-domain-soundness Phase 2, rubric target). The criterion names a CITED EXTERNAL practice/standard — NOT the skill's own output (blocker: domain-competence-for-answer-keys, option a). Authored as a maintainer-RATIFICATION CANDIDATE: rubric is NON-deterministic (pinned-judge known-limit); the Phase-3 run + --write-floor ratchet-pin + per-domain backed-CLAIMS remain the maintainer's gate.",
5
+ "cases": [
6
+ {
7
+ "id": "matches-message-house-model",
8
+ "scenario": "Design the messaging architecture for our product launch.",
9
+ "source": "The message-house framework (one core message -> supporting pillars -> proof points per pillar) + positioning-before-messaging (Dunford, 'Obviously Awesome').",
10
+ "check": {
11
+ "kind": "rubric",
12
+ "criterion": "Matches the message-house model: exactly one core message, a small set of supporting pillars, and concrete proof points under each pillar, grounded in a NAMED target audience - not a flat list of slogans or adjectives."
13
+ }
14
+ }
15
+ ]
16
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "skill": "messaging-architecture",
3
+ "_calibration": "Behavioural fixture (road-to-skill-eval-coverage Phase 2, default-surface). Deterministic assertions on a real output property where reliable; rubric pins the qualitative core as a known-limit (pass ratified in PR review, not a hidden judge). finding_floor n is a conservative floor, not a calibrated per-host number.",
4
+ "scenarios": [
5
+ {
6
+ "id": "design-messaging",
7
+ "prompt": "Design the messaging architecture for our product.",
8
+ "assertions": [
9
+ {
10
+ "kind": "rubric",
11
+ "criterion": "Produces a layered message hierarchy (core → pillars → proof) grounded in a named audience, not generic slogans."
12
+ }
13
+ ]
14
+ }
15
+ ]
16
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "skill": "perf-feedback-craft",
3
+ "_calibration": "Behavioural fixture (road-to-skill-eval-coverage Phase 2, default-surface). Deterministic assertions on a real output property where reliable; rubric pins the qualitative core as a known-limit (pass ratified in PR review, not a hidden judge). finding_floor n is a conservative floor, not a calibrated per-host number.",
4
+ "scenarios": [
5
+ {
6
+ "id": "perf-review-feedback",
7
+ "prompt": "Give this engineer performance feedback: they ship fast but skip tests.",
8
+ "assertions": [
9
+ {
10
+ "kind": "rubric",
11
+ "criterion": "Names the specific behaviour + its impact with an example, is balanced (strength + growth), and gives an actionable next step — not vague praise/blame."
12
+ }
13
+ ]
14
+ }
15
+ ]
16
+ }
@@ -56,6 +56,7 @@ discipline, mock-isolation gates, and the 12 process rationalizations
56
56
  - Keep setup minimal and relevant.
57
57
  - Favor confidence and maintainability over excessive mocking.
58
58
  - Cover happy path, validation failures, authorization failures, and important edge cases.
59
+ - Enumerate the cases BEFORE writing — run the [`test-case-discovery`](../test-case-discovery/SKILL.md) funnel; floor per behavior: 1 happy + 1 boundary + 1 error (+1 abuse on security paths).
59
60
 
60
61
  ## TDD workflow (Red-Green-Refactor)
61
62
 
@@ -291,7 +292,6 @@ When generating Pest tests:
291
292
  - assert both response and side effects where relevant
292
293
  - keep tests readable, isolated, and maintainable
293
294
 
294
-
295
295
  ### Filter Pest output
296
296
 
297
297
  When triaging a verbose run, narrow the output with `--filter` (Pest)
@@ -13,6 +13,11 @@ packs:
13
13
 
14
14
  ## When to use
15
15
 
16
+ > **Design verification.** When exercising a UI artifact, run the
17
+ > [design-artifact verification checklist](../../../docs/contracts/design-artifact-verification.md#verification-checklist)
18
+ > (open → console/load → viewport → text-fit → assets → interaction) and capture
19
+ > evidence; a design task with browser capability present is not "done" without it.
20
+
16
21
  Use this skill when:
17
22
  - Writing end-to-end tests with Playwright
18
23
  - Automating browser interactions for testing
@@ -31,6 +36,7 @@ Use this skill when:
31
36
  3. **Check existing tests** — match patterns in `tests/e2e/` or `e2e/`.
32
37
  4. **Check test utilities** — look for page objects, fixtures, helpers.
33
38
  5. **Check CI setup** — how are E2E tests run in the pipeline?
39
+ 6. **Enumerate the cases** — run the [`test-case-discovery`](../test-case-discovery/SKILL.md) funnel per user flow before writing specs; cover the happy flow AND at least one boundary (empty state, max input) and one error path (failed request, validation rejection) per flow — never the happy flow alone.
34
40
 
35
41
  ## Test structure
36
42
 
@@ -183,6 +189,12 @@ jq '.suites[].specs[] | select(.tests[].results[].status=="failed")' pw.json
183
189
  rg --color=never 'getByRole.*Submit' test-results/
184
190
  ```
185
191
 
192
+ **Run verification.** The test run's **exit code** is the pass/fail signal — `0`
193
+ means every spec passed, non-zero means at least one failed. Read the **command
194
+ output** (or the `--reporter=json` above) to **diagnose** the failing spec's
195
+ **root cause**; do not blindly re-run hoping it turns green — a retry-until-pass
196
+ is not a fix, and a flaky green hides the real defect.
197
+
186
198
  ## Avoiding flaky tests
187
199
 
188
200
  | Problem | Solution |
@@ -263,3 +275,7 @@ await page.route('**/api/users', route =>
263
275
  - Do NOT test implementation details — test user-visible behavior.
264
276
  - Do NOT put assertions in Page Objects — assertions belong in test files.
265
277
  - Do NOT commit `.only` — enforce via `forbidOnly: !!process.env.CI`.
278
+
279
+ ## Anti-bruteforce — diagnose before retry
280
+
281
+ When a spec fails, do not retry blindly by re-running, swapping locators at random, or bumping timeouts until green. Diagnose the root cause first: open the trace viewer, inspect the failing locator's `aria` tree, identify the real reason (timing, locator, app state), then apply a targeted fix. Trial-and-error locator swaps mask flaky test design.
@@ -0,0 +1,16 @@
1
+ {
2
+ "skill": "prompt-engineering-patterns",
3
+ "_calibration": "Behavioural fixture (road-to-skill-eval-coverage Phase 2, default-surface). Deterministic assertions on a real output property where reliable; rubric pins the qualitative core as a known-limit (pass ratified in PR review, not a hidden judge). finding_floor n is a conservative floor, not a calibrated per-host number.",
4
+ "scenarios": [
5
+ {
6
+ "id": "apply-prompt-pattern",
7
+ "prompt": "Which prompting pattern should I use to get structured extraction from messy text, and why?",
8
+ "assertions": [
9
+ {
10
+ "kind": "rubric",
11
+ "criterion": "Names a concrete pattern (e.g. schema-constrained/structured-output, few-shot) matched to the extraction task, with the trade-off — not a generic tips list."
12
+ }
13
+ ]
14
+ }
15
+ ]
16
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "skill": "refine-prompt",
3
+ "_calibration": "Behavioural fixture (road-to-skill-eval-coverage Phase 2, default-surface). Deterministic assertions on a real output property where reliable; rubric pins the qualitative core as a known-limit (pass ratified in PR review, not a hidden judge). finding_floor n is a conservative floor, not a calibrated per-host number.",
4
+ "scenarios": [
5
+ {
6
+ "id": "refine-a-prompt",
7
+ "prompt": "Improve this prompt: 'write good marketing copy'.",
8
+ "assertions": [
9
+ {
10
+ "kind": "rubric",
11
+ "criterion": "Adds role, concrete task, constraints, and success criteria; removes vague adjectives — a measurably tighter prompt, not a paraphrase."
12
+ }
13
+ ]
14
+ }
15
+ ]
16
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "skill": "refine-ticket",
3
+ "_calibration": "Behavioural fixture (road-to-skill-eval-coverage Phase 2, default-surface). Deterministic assertions on a real output property where reliable; rubric pins the qualitative core as a known-limit (pass ratified in PR review, not a hidden judge). finding_floor n is a conservative floor, not a calibrated per-host number.",
4
+ "scenarios": [
5
+ {
6
+ "id": "refine-ticket-dor",
7
+ "prompt": "Refine this ticket: 'make search better'.",
8
+ "assertions": [
9
+ {
10
+ "kind": "rubric",
11
+ "criterion": "Tightens to a bounded scope with acceptance criteria + a definition-of-ready; asks the one blocking question rather than guessing scope."
12
+ }
13
+ ]
14
+ }
15
+ ]
16
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "skill": "release-comms",
3
+ "_calibration": "Behavioural fixture (road-to-skill-eval-coverage Phase 2, default-surface). Deterministic assertions on a real output property where reliable; rubric pins the qualitative core as a known-limit (pass ratified in PR review, not a hidden judge). finding_floor n is a conservative floor, not a calibrated per-host number.",
4
+ "scenarios": [
5
+ {
6
+ "id": "write-release-note",
7
+ "prompt": "Write the release announcement for our v-next dashboard redesign.",
8
+ "assertions": [
9
+ {
10
+ "kind": "rubric",
11
+ "criterion": "Leads with user value + what changed, notes any migration/breaking step, and matches the product voice — not a raw changelog dump."
12
+ }
13
+ ]
14
+ }
15
+ ]
16
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "skill": "rice-prioritization",
3
+ "_calibration": "Behavioural fixture (road-to-skill-eval-coverage Phase 2, default-surface). Deterministic assertions on a real output property where reliable; rubric pins the qualitative core as a known-limit (pass ratified in PR review, not a hidden judge). finding_floor n is a conservative floor, not a calibrated per-host number.",
4
+ "scenarios": [
5
+ {
6
+ "id": "rice-rank-three",
7
+ "prompt": "Prioritize these three features with RICE: A (reach 5000, impact 2, conf 80%, effort 3), B (reach 1000, impact 3, conf 100%, effort 1), C (reach 8000, impact 1, conf 50%, effort 5).",
8
+ "assertions": [
9
+ {
10
+ "kind": "contains",
11
+ "value": "RICE"
12
+ },
13
+ {
14
+ "kind": "rubric",
15
+ "criterion": "Computes RICE = Reach×Impact×Confidence/Effort per item (A≈2667, B=3000, C=800) and ranks by the score, not by gut feel."
16
+ }
17
+ ]
18
+ }
19
+ ]
20
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "skill": "runway-cognition",
3
+ "_calibration": "Behavioural fixture (road-to-skill-eval-coverage Phase 2, default-surface). Deterministic assertions on a real output property where reliable; rubric pins the qualitative core as a known-limit (pass ratified in PR review, not a hidden judge). finding_floor n is a conservative floor, not a calibrated per-host number.",
4
+ "scenarios": [
5
+ {
6
+ "id": "runway-shape-and-decision",
7
+ "prompt": "We have $4.2M cash and burn $560k/month. How long do we have and what should we do?",
8
+ "assertions": [
9
+ {
10
+ "kind": "contains",
11
+ "value": "runway"
12
+ },
13
+ {
14
+ "kind": "rubric",
15
+ "criterion": "Computes months-of-runway = cash/burn (≈7.5) AND frames raise/hold/cut-vs-grow as a shape against the org-stage band, not a single number."
16
+ }
17
+ ]
18
+ }
19
+ ]
20
+ }