@event4u/agent-config 7.1.0 → 7.3.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 (85) hide show
  1. package/.claude-plugin/marketplace.json +2 -1
  2. package/CHANGELOG.md +80 -0
  3. package/README.md +9 -10
  4. package/dist/agent-src/rules/brand-source-of-truth.md +10 -0
  5. package/dist/agent-src/rules/delegation-policy.md +1 -0
  6. package/dist/agent-src/rules/legal-safety-floor.md +42 -4
  7. package/dist/agent-src/rules/output-discipline.md +85 -0
  8. package/dist/agent-src/rules/telegraph-speak.md +4 -1
  9. package/dist/agent-src/rules/token-budget-discipline.md +94 -0
  10. package/dist/agent-src/skills/accessibility-auditor/SKILL.md +20 -5
  11. package/dist/agent-src/skills/blade-ui/SKILL.md +9 -0
  12. package/dist/agent-src/skills/bug-analyzer/evals/evals.json +13 -0
  13. package/dist/agent-src/skills/code-review/evals/evals.json +21 -0
  14. package/dist/agent-src/skills/contract-review/SKILL.md +3 -2
  15. package/dist/agent-src/skills/dashboard-design/SKILL.md +21 -5
  16. package/dist/agent-src/skills/design-intelligence/SKILL.md +96 -0
  17. package/dist/agent-src/skills/design-review/SKILL.md +83 -0
  18. package/dist/agent-src/skills/design-system-capture/SKILL.md +234 -0
  19. package/dist/agent-src/skills/design-tokens/SKILL.md +1 -0
  20. package/dist/agent-src/skills/dpa-review/SKILL.md +3 -2
  21. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +15 -4
  22. package/dist/agent-src/skills/fe-design/SKILL.md +98 -16
  23. package/dist/agent-src/skills/flux/SKILL.md +8 -0
  24. package/dist/agent-src/skills/iconography/SKILL.md +1 -0
  25. package/dist/agent-src/skills/legal-intake-triage/SKILL.md +3 -2
  26. package/dist/agent-src/skills/legal-practice-profile/SKILL.md +3 -2
  27. package/dist/agent-src/skills/livewire/SKILL.md +8 -0
  28. package/dist/agent-src/skills/nda-triage/SKILL.md +3 -2
  29. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +21 -9
  30. package/dist/agent-src/skills/skill-writing/SKILL.md +18 -0
  31. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +7 -10
  32. package/dist/agent-src/skills/tailwind-engineer/SKILL.md +17 -7
  33. package/dist/agent-src/skills/typography-system/SKILL.md +14 -0
  34. package/dist/agent-src/skills/ui-component-architect/SKILL.md +9 -0
  35. package/dist/discovery/deprecation-report.md +1 -1
  36. package/dist/discovery/discovery-manifest.json +123 -59
  37. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  38. package/dist/discovery/discovery-manifest.summary.md +8 -8
  39. package/dist/discovery/orphan-report.md +1 -1
  40. package/dist/discovery/packs.json +18 -15
  41. package/dist/discovery/trust-report.md +5 -5
  42. package/dist/discovery/workspaces.json +15 -12
  43. package/dist/mcp/registry-manifest.json +3 -3
  44. package/dist/router.json +1 -1
  45. package/dist/server/routes/wizard.js +4 -3
  46. package/dist/server/routes/wizard.js.map +1 -1
  47. package/dist/server/schemas/settings.js +9 -0
  48. package/dist/server/schemas/settings.js.map +1 -1
  49. package/dist/ui/assets/{index-CoQo90sz.js → index-UjcTG_9O.js} +2 -2
  50. package/dist/ui/assets/index-UjcTG_9O.js.map +1 -0
  51. package/dist/ui/index.html +1 -1
  52. package/docs/RELEASE_STORY_TEMPLATE.md +37 -0
  53. package/docs/architecture.md +3 -3
  54. package/docs/contracts/capability-boundary.md +64 -0
  55. package/docs/contracts/discovery-manifest.schema.json +2 -2
  56. package/docs/contracts/governance-enforcement-projection.md +154 -0
  57. package/docs/contracts/package-self-orientation.md +3 -0
  58. package/docs/contracts/subagent-boundary.md +54 -0
  59. package/docs/decisions/ADR-013-discovery-frontmatter-contract.md +13 -0
  60. package/docs/decisions/ADR-107-legal-domain-pack-adoption.md +19 -0
  61. package/docs/enforcement-by-host.md +35 -0
  62. package/docs/getting-started.md +1 -1
  63. package/docs/guidelines/agent-infra/domain-pack-architecture.md +1 -0
  64. package/docs/guidelines/design-antipatterns-triggers.json +17 -0
  65. package/docs/guidelines/design-antipatterns.md +170 -0
  66. package/docs/guidelines/design-modes.md +97 -0
  67. package/package.json +1 -1
  68. package/src/config/agent-settings.template.yml +31 -0
  69. package/src/config/discovery/packs.yml +16 -5
  70. package/src/config/discovery/workspaces.yml +4 -4
  71. package/src/scripts/_lib/eval_discrimination.ts +95 -0
  72. package/src/scripts/_lib/trigger_routers.ts +268 -0
  73. package/src/scripts/bench_ab_v2_run.ts +38 -0
  74. package/src/scripts/check_trunk_drift.ts +67 -0
  75. package/src/scripts/cross_model_smoke.ts +245 -0
  76. package/src/scripts/lint_design_quality.ts +321 -0
  77. package/src/scripts/lint_discovery_vocabulary.ts +4 -4
  78. package/src/scripts/lint_legal_pack.ts +62 -4
  79. package/src/scripts/lint_output_slop.ts +223 -0
  80. package/src/scripts/lint_pack_risk_class.ts +79 -0
  81. package/src/scripts/run_skill_evals.ts +38 -0
  82. package/src/scripts/schemas/agent-settings.schema.json +12 -0
  83. package/src/scripts/schemas/skill.schema.json +5 -0
  84. package/src/scripts/skill_linter.ts +26 -10
  85. package/dist/ui/assets/index-CoQo90sz.js.map +0 -1
@@ -6,7 +6,7 @@
6
6
  },
7
7
  "metadata": {
8
8
  "description": "Shared agent configuration — skills for AI coding tools (Claude Code, Augment, Cursor, Cline, Windsurf, Gemini CLI).",
9
- "version": "7.1.0",
9
+ "version": "7.3.0",
10
10
  "keywords": [
11
11
  "agent-config",
12
12
  "skills",
@@ -258,6 +258,7 @@
258
258
  "./dist/agent-src/skills/design-intelligence",
259
259
  "./dist/agent-src/skills/design-review",
260
260
  "./dist/agent-src/skills/design-tokens",
261
+ "./dist/agent-src/skills/design-system-capture",
261
262
  "./dist/agent-src/skills/devcontainer",
262
263
  "./dist/agent-src/skills/developer-like-execution",
263
264
  "./dist/agent-src/skills/discovery-interview",
package/CHANGELOG.md CHANGED
@@ -948,6 +948,86 @@ our recommendation order, not its support status.
948
948
  > that forces a new era split (`# Era: 7.1.x`, etc.) — see
949
949
  > [`docs/contracts/CHANGELOG-conventions.md § Era splits`](docs/contracts/CHANGELOG-conventions.md).
950
950
 
951
+ ## [7.3.0](https://github.com/event4u-app/agent-config/compare/7.2.0...7.3.0) (2026-06-25)
952
+
953
+ ### Features
954
+
955
+ * **bench:** opt-in hardened arms for governance-enforcement eval ([af9a0e0](https://github.com/event4u-app/agent-config/commit/af9a0e07a2c2312f6b53782a8fcb44b2bde35635))
956
+ * **evals:** cross-model canary workflow + robust smoke (T-005) ([d062095](https://github.com/event4u-app/agent-config/commit/d06209535731d27446768442c081fcac151b3f20))
957
+ * **evals:** cross-model trigger smoke — SDK-free fetch routers + runner (Phase 0 T-004 keystone) ([1a8df9c](https://github.com/event4u-app/agent-config/commit/1a8df9cc83f2a9ace2e4a45eb9d66be6b51be5ae))
958
+ * **evals:** finding_floor assertion kind — deterministic count gate (Phase 1) ([7f0e9e6](https://github.com/event4u-app/agent-config/commit/7f0e9e617a741b1f778d9cacdde145ef4a300994))
959
+ * **evals:** graded negative-control discrimination primitive (Phase 0 T-003) ([5407121](https://github.com/event4u-app/agent-config/commit/54071210ecbfc8b6807fa37d726ea27654d22158))
960
+
961
+ ### Bug Fixes
962
+
963
+ * **skills:** declare top-level skill field in bug-analyzer/code-review evals ([7c7f2e3](https://github.com/event4u-app/agent-config/commit/7c7f2e3adf181f2a1e936cb028538b3471e8f15e))
964
+ * **skill-linter:** accept finding_floor eval assertion kind ([bb629f9](https://github.com/event4u-app/agent-config/commit/bb629f98c41c09912a6d67d31ceef25a49becb56))
965
+ * **evals:** GeminiRouter JSON output contract — closes the format divergence (Phase 0b) ([f739b32](https://github.com/event4u-app/agent-config/commit/f739b320a1dcb54350d44a67009e634a421034ed))
966
+ * **evals:** drop legacy-path literal from a comment (ADR-051 guard) ([48328f0](https://github.com/event4u-app/agent-config/commit/48328f0bd0f9c36cd8d0f11c2bbc206c49faefc6))
967
+ * **harvest:** drop illustrative ellipsis path that tripped check_references ([94e6098](https://github.com/event4u-app/agent-config/commit/94e6098bf7d4a6e5127729db103a04b61dfc8f39))
968
+
969
+ ### Documentation
970
+
971
+ * **roadmap:** enforcement honest-null; archive positioning roadmap ([226bf33](https://github.com/event4u-app/agent-config/commit/226bf3394b905a7dbd45fd74c55ab3a001ddaf2f))
972
+ * **readme:** lead with capability; add host-enforcement matrix ([531327d](https://github.com/event4u-app/agent-config/commit/531327d465ed0cc2803b1ee1900d5b551dacbdc0))
973
+ * **harvest:** wider-coverage baseline (10 skills) + agent-ide-plugin security-lessons note ([4a2aaaa](https://github.com/event4u-app/agent-config/commit/4a2aaaaac0b6fbd1467b254207690f5adaacf7d8))
974
+ * **harvest:** Phase 0b resolved — record the 3-variant format-fix evidence + flip checkbox ([a64dcab](https://github.com/event4u-app/agent-config/commit/a64dcab235efb41170cb28fd4603ae2f3fd1de25))
975
+ * **harvest:** cross-model baseline + outcome read (T-006); credential blocker resolved ([b4e8453](https://github.com/event4u-app/agent-config/commit/b4e84534064fe91f4609e2e06fbd04e957f2e2fa))
976
+ * **harvest:** Phase 0 evidence — capability matrix, fixture-portability audit, vendor-credential gate decision ([cb64570](https://github.com/event4u-app/agent-config/commit/cb64570b414c3a4d2e3ec34dda70137f513bbfa5))
977
+
978
+ ### Tests
979
+
980
+ * **evals:** starter behavioral evals.json fixtures (Phase 1, T-001 0-fixtures gap) ([dd6861b](https://github.com/event4u-app/agent-config/commit/dd6861bff4d66d7458468f0a9b2490ac088157c7))
981
+
982
+ ### Chores
983
+
984
+ * **roadmap:** archive operator-runtime-harvest (core complete) + park residuals in later/ ([69ef1ac](https://github.com/event4u-app/agent-config/commit/69ef1ac91af47c3c462f4453f74eeb94fece310b))
985
+ * **roadmap:** defer Phase 2 (won't-build-speculatively) — undershoot guard + catalog target ([9f37fa8](https://github.com/event4u-app/agent-config/commit/9f37fa8fcf29f1822a5739d916b5510047a9f23d))
986
+ * **roadmap:** close T-005 + Phase G (honest-null) + plugin note; mark human/parallel residuals ([a0d7f80](https://github.com/event4u-app/agent-config/commit/a0d7f806ac5ed048b19b9c20e41ba392328f3393))
987
+ * **roadmap:** Phase 0 — T-004 + T-006 done (live smoke ran); T-005 re-scoped (cost), Phase 0b actionable ([036e66f](https://github.com/event4u-app/agent-config/commit/036e66f98d3cc805e0128a86ab01ee15fd771bb1))
988
+ * **dist:** sync eval-fixture projection for the new behavioral evals.json ([01cc089](https://github.com/event4u-app/agent-config/commit/01cc08994ebf11d7cf894822b73a4374b7ef0ee9))
989
+ * **roadmap:** Phase 1 — finding_floor mechanism + fixtures done; calibration deferred on P0 ([3a5bc28](https://github.com/event4u-app/agent-config/commit/3a5bc28083206118352b1dd641d76326ac58114d))
990
+ * **roadmap:** Phase 0 — mark T-000..T-003 done, T-004..T-006 deferred on credentials ([4f302ee](https://github.com/event4u-app/agent-config/commit/4f302ee9270b02488d1dce6d285520984d01ab40))
991
+
992
+ ## [7.2.0](https://github.com/event4u-app/agent-config/compare/7.1.0...7.2.0) (2026-06-24)
993
+
994
+ ### Features
995
+
996
+ * **design-craft:** wire existing design/frontend skills into the anti-slop layer ([4ac512c](https://github.com/event4u-app/agent-config/commit/4ac512c294c47c54c04e71a12d2a85e6a8600d93))
997
+ * **design-craft:** add anti-slop enforcement + design memory + token governance ([4c07b60](https://github.com/event4u-app/agent-config/commit/4c07b60195db52a938f41445a347a0bec3331bc2))
998
+ * **product-clarity:** process wins (release-story, trunk-drift, explainability) ([f91b898](https://github.com/event4u-app/agent-config/commit/f91b898d7ae833bd4eb7b1577e7ae5f78ee96be4))
999
+ * **governance:** capability lifecycle view + complete capability-governance ([f299791](https://github.com/event4u-app/agent-config/commit/f2997914a3f9e25fc0a26b4a202e3f521a0471b7))
1000
+ * **governance:** subagent boundary contract ([8ed4181](https://github.com/event4u-app/agent-config/commit/8ed4181afbff73cb99b764ac695354c0bb1f073f))
1001
+ * **governance:** skill-growth gate in the authoring flow ([a9a3b80](https://github.com/event4u-app/agent-config/commit/a9a3b80ab7dfbcfee0cb8f0c51d5744aabb03bd7))
1002
+ * **governance:** capability-boundary matrix + risk_class invariant ([7b683b8](https://github.com/event4u-app/agent-config/commit/7b683b864188f40424c4a9399a6a931081e14291))
1003
+ * **legal-review-prep:** attorney-framing-review promotion tripwire ([551fe8b](https://github.com/event4u-app/agent-config/commit/551fe8b4b7e817c5f81adddfe8d85220f3ef30a7))
1004
+ * **legal-review-prep:** high-risk pack metadata ([554282e](https://github.com/event4u-app/agent-config/commit/554282e4b12575dc884c078f45b560facea60be1))
1005
+ * **legal-review-prep:** council / deep-research gate on legal work-product ([7b44c89](https://github.com/event4u-app/agent-config/commit/7b44c8961d94ae9a5b99329a80ff725db2d0c6d5))
1006
+ * **legal-review-prep:** install consent gate (checkbox + flag + floor refusal) ([af2ee1d](https://github.com/event4u-app/agent-config/commit/af2ee1dbc18446f77f0d13e79b11551634f15d2c))
1007
+ * **legal-review-prep:** hard individual-case STOP in the floor + lint ([71860da](https://github.com/event4u-app/agent-config/commit/71860da9699d8537a81942ff4d59aeca6fbd2a96))
1008
+
1009
+ ### Bug Fixes
1010
+
1011
+ * **lint:** trim telegraph-speak amendment to clear long_rule warning ([95d54c6](https://github.com/event4u-app/agent-config/commit/95d54c6852c2344f3402f5f9730185a400fc4941))
1012
+ * **lint:** add model_tier to design-system-capture skill ([57c3a6d](https://github.com/event4u-app/agent-config/commit/57c3a6defd57a771a9f86805b9634f3b73a6afee))
1013
+ * **framework-neutrality:** drop npm-install literal in design-intelligence ([aeadec5](https://github.com/event4u-app/agent-config/commit/aeadec54038c0d43aed75ea30f30574a2d6b7d65))
1014
+ * **ci:** Zod settings parity + router minification for tokens.rich_skills ([88930da](https://github.com/event4u-app/agent-config/commit/88930da1786731a9cc1317b841646477f77ad1d1))
1015
+ * **ci:** strict-TS null-safety in design-craft linters ([3cac522](https://github.com/event4u-app/agent-config/commit/3cac522ed8234190a6d361735bc323616b11393b))
1016
+ * **ci:** broken refs + unused var in design-craft additions ([2e0c2a7](https://github.com/event4u-app/agent-config/commit/2e0c2a785596c67fb4114ead09caea57aeb6e0ab))
1017
+ * **portability:** drop task-invocation from shipped /create-pr command ([e03f97a](https://github.com/event4u-app/agent-config/commit/e03f97a14ea38439ba41427448f7d77c868959c4))
1018
+
1019
+ ### Documentation
1020
+
1021
+ * **roadmaps:** add legal-review-prep + capability-governance + product-clarity roadmaps ([e3ad120](https://github.com/event4u-app/agent-config/commit/e3ad120893dd20cea79c7875558137f42d2797da))
1022
+
1023
+ ### Refactoring
1024
+
1025
+ * **legal:** rename legal pack to legal-review-prep ([fb34133](https://github.com/event4u-app/agent-config/commit/fb3413305718d321b435514e5f0ab0f4122e37b7))
1026
+
1027
+ ### Chores
1028
+
1029
+ * **sync:** condense design-craft skills/rules + sync dist/agent-src/ ([3a3e6e1](https://github.com/event4u-app/agent-config/commit/3a3e6e1f668128e386ca7d19ffe031a09a391fcd))
1030
+
951
1031
  ## [7.1.0](https://github.com/event4u-app/agent-config/compare/7.0.2...7.1.0) (2026-06-24)
952
1032
 
953
1033
  ### Features
package/README.md CHANGED
@@ -4,17 +4,22 @@
4
4
 
5
5
  [![Smoke](https://github.com/event4u-app/agent-config/actions/workflows/smoke.yml/badge.svg)](https://github.com/event4u-app/agent-config/actions/workflows/smoke.yml) [![Public install smoke (3 OS × 2 Node)](https://github.com/event4u-app/agent-config/actions/workflows/smoke-public-install.yml/badge.svg)](https://github.com/event4u-app/agent-config/actions/workflows/smoke-public-install.yml) [![npm](https://img.shields.io/npm/v/@event4u/agent-config?style=flat-square&label=npm&color=orange)](https://www.npmjs.com/package/@event4u/agent-config) [![agent-config MCP server](https://glama.ai/mcp/servers/event4u-app/agent-config/badges/score.svg)](https://glama.ai/mcp/servers/event4u-app/agent-config)
6
6
 
7
+ [![Skills](https://img.shields.io/badge/Skills-258-orange?style=flat-square)](dist/agent-src/skills/) [![Rules](https://img.shields.io/badge/Rules-93-orange?style=flat-square)](dist/agent-src/rules/) [![Commands](https://img.shields.io/badge/Commands-162-orange?style=flat-square)](dist/agent-src/commands/) [![Guidelines](https://img.shields.io/badge/Guidelines-86-orange?style=flat-square)](docs/guidelines/) [![Personas](https://img.shields.io/badge/Personas-26-orange?style=flat-square)](dist/agent-src/personas/) [![Advisors](https://img.shields.io/badge/Advisors-5-orange?style=flat-square)](dist/agent-src/personas/advisors/)
8
+
7
9
  > **Choose your experience — developer · founder · content · agency · finance · ops. Add packs. Get a focused command set, not a 500-artefact dump.** Bring your own AI provider.
8
10
 
9
- Six role-shaped entry paths, one shared **skills + rules + commands** layer that turns any host agent (Claude Code, Augment, Cursor, Copilot, Windsurf) into a reliable team member — without locking you to a single model or vendor.
11
+ **258 skills, 162 commands, 93 governed rules** — plus a capability router that loads the right skill on intent, and multi-agent orchestration with consensus review. The whole layer is compiled into 7+ host agents (Claude Code, Cursor, Augment, Cline, Windsurf, Copilot, Gemini) with **zero runtime daemon**. Six role-shaped entry paths sit on top, so any host becomes a reliable team member — without locking you to a single model or vendor.
10
12
 
11
13
  ### What's different
12
14
 
13
- Three things this package ships that a README scan slides right past:
15
+ It is both deep **and** disciplined — and honest about what it deliberately is not:
14
16
 
17
+ - **Depth that routes itself** — 258 skills + 162 commands, with a capability router that loads the right one on intent, not a 500-artefact context dump.
18
+ - **Governance on every host** — rules compiled into each tool's native format at projection time; deterministic runtime hooks added on hook-capable hosts ([enforcement by host](docs/enforcement-by-host.md)).
15
19
  - **Surgical uninstall** — removes only its own keys from a shared host config (matched by JSON-pointer + SHA-256), never a neighbour tool's entries.
16
20
  - **Pack-scoped install** — writes the active pack only, not a 500-artefact dump.
17
- - **Portability guard** — works in any project; source confidentiality is CI-enforced.
21
+
22
+ **What it deliberately is *not*** — a content + governance layer, not a runtime: **no background daemon, no separate state database, no self-rewriting memory, no auto-build pipeline.** The host agent runs the loop; every learned change is human-reviewed; the same layer stays portable across tools. Capability without a process to babysit.
18
23
 
19
24
  See exactly [what works on which host](docs/capability-matrix.md), or jump to [things you can do in a minute](docs/cookbook.md).
20
25
 
@@ -85,13 +90,7 @@ is platform operation, not a user-work flow.)
85
90
 
86
91
  > **Legal Pack — not legal advice.** The EU/DE legal pack (contract/NDA/DPA review, triage) is a **research-and-drafting aid only** — it does not provide legal advice, does not replace a qualified lawyer, and must not be relied on for any concrete matter. It produces general information and general templates, never individual-case examination. Read [`LEGAL_NOTICE.md`](LEGAL_NOTICE.md) before use.
87
92
 
88
- <details>
89
- <summary><b>Catalog at a glance</b> — raw artefact counts (maintainer reference)</summary>
90
-
91
- [![Skills](https://img.shields.io/badge/Skills-257-orange?style=flat-square)](dist/agent-src/skills/) [![Rules](https://img.shields.io/badge/Rules-91-orange?style=flat-square)](dist/agent-src/rules/) [![Commands](https://img.shields.io/badge/Commands-162-orange?style=flat-square)](dist/agent-src/commands/) [![Guidelines](https://img.shields.io/badge/Guidelines-84-orange?style=flat-square)](docs/guidelines/) [![Personas](https://img.shields.io/badge/Personas-26-orange?style=flat-square)](dist/agent-src/personas/) [![Advisors](https://img.shields.io/badge/Advisors-5-orange?style=flat-square)](dist/agent-src/personas/advisors/)
92
-
93
- The headline is the **experience** (profile + packs), not the raw counts. Full catalog: [`docs/catalog.md`](docs/catalog.md).
94
- </details>
93
+ > Full catalog — every skill, rule, command, guideline: [`docs/catalog.md`](docs/catalog.md). The headline is the **experience** (profile + packs) **and** the depth behind it.
95
94
 
96
95
  ## Use it in your project
97
96
 
@@ -51,7 +51,17 @@ corpus from quietly replacing a value the brand already defines.
51
51
  marked as corpus-sourced, until `brand-identity` defines real tokens.
52
52
  - Non-brand surfaces.
53
53
 
54
+ ## Design register note
55
+
56
+ When a consumer brand profile is present, the brand register ("the impression IS
57
+ the product") is active — use `brand-identity`, `iconography`, and
58
+ `design-intelligence` as the primary skill cluster. For product/dashboard/admin
59
+ surfaces within the same brand, the product register ("design serves the task")
60
+ may apply per-surface. See [`docs/guidelines/design-modes.md`](../docs/guidelines/design-modes.md)
61
+ for the full Brand-mode vs Product-mode discriminator.
62
+
54
63
  ## See also
55
64
 
56
65
  - [`brand-consistency`](brand-consistency.md) — validates emitted artifacts against the authoritative brand profile this rule establishes.
57
66
  - [`brand`](../skills/brand/SKILL.md) — the gap-fill corpus this rule subordinates to consumer brand.
67
+ - [`docs/guidelines/design-modes.md`](../docs/guidelines/design-modes.md) — brand vs product register discriminator and routing.
@@ -80,5 +80,6 @@ primitive → run in-session (clean no-op).
80
80
  ## See also
81
81
 
82
82
  - [`subagent-orchestration`](../skills/subagent-orchestration/SKILL.md) — the 7 modes this selects.
83
+ - [`subagent-boundary`](../docs/contracts/subagent-boundary.md) — what a subagent owns vs never owns (task-meaning, memory, pack-surface, safety-floor bypass).
83
84
  - [`auto-orchestration-activation`](../contexts/execution/auto-orchestration-activation.md) — the gate.
84
85
  - [`reasoning-orchestrator`](../skills/reasoning-orchestrator/SKILL.md) — RDP dispatch, now gated here.
@@ -24,9 +24,9 @@ routes_to:
24
24
  - "skill:dpa-review"
25
25
  - "skill:legal-intake-triage"
26
26
  workspaces:
27
- - legal
27
+ - legal-review-prep
28
28
  packs:
29
- - legal
29
+ - legal-review-prep
30
30
  trust:
31
31
  level: advisory
32
32
  human_review_required: true
@@ -36,7 +36,7 @@ trust:
36
36
 
37
37
  # Legal Safety Floor
38
38
 
39
- Domain safety floor for legal-pack artefacts (contract/NDA/DPA review, legal triage). Auto-activates when `pack-legal` is installed. Sibling to `finance-safety-floor` / `strategy-safety-floor`. Every output is a **draft for attorney review**, never legal advice.
39
+ Domain safety floor for the `legal-review-prep` pack (contract/NDA/DPA review, legal triage). Auto-activates when `pack-legal-review-prep` is installed. Sibling to `finance-safety-floor` / `strategy-safety-floor`. Every output is a **draft to PREPARE for attorney review**, never legal advice.
40
40
 
41
41
  ## Iron Law — no final legal call
42
42
 
@@ -56,6 +56,29 @@ THEY DO NOT REPLACE A LICENSED ATTORNEY. NO ONE MAY RELY ON THEM AS DEFINITIVE.
56
56
 
57
57
  Every output is a **draft / research aid for a human attorney to verify** — for first-pass review, issue-spotting, and drafts only. It is **not** legal advice, **not** a legal opinion, and **not** a substitute for a qualified lawyer in the relevant jurisdiction. Nobody should rely on it for a binding decision; treat it as a tool that makes attorney review faster, never as the review itself. This disclaimer is non-removable from the pack. See [`LEGAL_NOTICE.md`](../../LEGAL_NOTICE.md).
58
58
 
59
+ ## Consent gate — refuse until acknowledged
60
+
61
+ ```
62
+ NO legal-review-prep SKILL RUNS UNTIL legal_review_prep.acknowledged: true.
63
+ FAIL-CLOSED: NO ACKNOWLEDGMENT → REFUSE, POINT TO THE SETUP WIZARD.
64
+ ```
65
+
66
+ Before any legal-review-prep skill produces output, read `legal_review_prep.acknowledged` from `.agent-settings.yml`. Missing / `false` → refuse and surface: *"The legal-review-prep pack is inactive until you acknowledge it is not legal advice. Run the setup wizard's legal-consent step, or set `legal_review_prep.acknowledged: true` in `.agent-settings.yml`."* This is active consent (set via the wizard checkbox), not a passive disclaimer — it manages reliance/expectation and host-ToS exposure; it does **not** cure RDG.
67
+
68
+ ## Iron Law — legal work-product is council / deep-research gated
69
+
70
+ ```
71
+ WHEN legal_review_prep.require_council IS TRUE (DEFAULT), A LEGAL WORK-PRODUCT
72
+ IS PRODUCED VIA A MULTI-MODEL COUNCIL / research:deep PASS — NEVER SINGLE-MODEL.
73
+ FAIL-CLOSED: NO COUNCIL CONFIGURED → REFUSE. NO INFRA → NO OUTPUT, NOT BAD OUTPUT.
74
+ ```
75
+
76
+ A **work-product** = a review, redline, gap-frame, or demand draft (not a one-line definition or a general-concept explanation). Every legal-review-prep skill carries `council_depth: deep`; when consulted it routes through the AI council (`--depth deep`) or `research:deep`. Single-model legal work-product is refused while `require_council: true`. When no council is configured, **fail closed** — refuse and say so; an unreviewed single-model legal draft is the worse outcome for a high-risk pack.
77
+
78
+ **Honest enforcement boundary.** This is advisory + settings + lint enforcement, not a hard runtime hook — skills are prose the host reads; the floor, the `require_council` flag, and the `lint_legal_pack` `council_depth` check are the teeth, the host is *asked* to route through the council. The deep council (2026-06-24) found this defense-in-depth substantive (documented multi-stage review + reliance-bounding friction + audit trail), **not** an RDG cure: it improves quality and creates a record; it does **not** make the output reliable legal advice.
79
+
80
+ **Audit pointer.** When a council / deep-research pass runs for a legal work-product, persist its pointer (timestamp · members · artefact hash) under `agents/runtime/council/responses/` so the "documented multi-stage review" claim is real, not asserted. No pass, no work-product.
81
+
59
82
  ## Iron Law — general information only, never individual-case examination
60
83
 
61
84
  ```
@@ -69,7 +92,22 @@ The line (German RDG § 2(1); a disclaimer does **not** cure crossing it): a reg
69
92
  - **Definitive individual application** — "this violates GDPR in your case", "you must terminate within 30 days".
70
93
  - **Dispute-specific drafting** — "draft the warning letter for *my* dispute with X", "write my response to this cease-and-desist".
71
94
 
72
- On a refusal, respond in shape: *"I can explain [general concept] and provide a general template, but I cannot determine how it applies to your specific situation — that requires individual legal examination by a qualified lawyer. Jurisdiction: [EU/DE]. Attorney review required."* Err toward refusal when more than ~3 case-specific facts are needed to answer.
95
+ This is a hard **STOP**, not a hedge — do not continue the individual-case analysis. When the request crosses into individual-case territory (specific facts about *your* situation, outcome prediction, deadline-driven or definitive-action questions — "may I terminate?", "will I win?", "is this enforceable in my case?"), emit the STOP block and end the individual-case answer:
96
+
97
+ ```
98
+ 🛑 I must stop here — this needs a lawyer.
99
+
100
+ Your request involves individual legal examination, which I cannot provide.
101
+ This is a regulatory boundary (German RDG § 2(1)), not a gap in knowledge.
102
+ Find a qualified lawyer:
103
+ - Rechtsanwaltskammer (German bar) attorney search — https://www.rechtsanwaltskammer.de
104
+ - Beratungshilfe (legal aid) — https://www.bmj.de
105
+
106
+ I can still explain the general concept and provide a general template —
107
+ just not how it applies to your specific situation.
108
+ ```
109
+
110
+ Err toward the STOP when more than ~3 case-specific facts are needed to answer. The general-information path (concept + template) stays available; the STOP only terminates the *individual-case* branch, never the whole interaction.
73
111
 
74
112
  ## No definitive legal language
75
113
 
@@ -0,0 +1,85 @@
1
+ ---
2
+ type: "auto"
3
+ tier: "2a"
4
+ description: "Prohibits placeholder-prose output in generated code and UI — no truncation shorthands; on budget overflow emit a clean PAUSED breakpoint instead"
5
+ triggers:
6
+ - intent: "generating code or multi-section output"
7
+ - keyword: "// rest of component"
8
+ - keyword: "for brevity"
9
+ - keyword: "rest follows the same pattern"
10
+ - phrase: "similar pattern"
11
+ workspaces:
12
+ - engineering
13
+ packs:
14
+ - engineering-base
15
+ ---
16
+
17
+ # Output Discipline
18
+
19
+ ## Iron Law — no placeholder prose in emitted code
20
+
21
+ ```
22
+ NEVER EMIT PLACEHOLDER PROSE IN GENERATED CODE OR UI.
23
+ PLACEHOLDER PROSE IS INCOMPLETE OUTPUT, NOT A STYLE CHOICE.
24
+ ON BUDGET OVERFLOW: EMIT A CLEAN PAUSED MARKER. NEVER TRUNCATE SILENTLY.
25
+ ```
26
+
27
+ ## Banned placeholder patterns
28
+
29
+ The following patterns are **absolutely banned** in generated code, components,
30
+ templates, and UI markup. They signal "I gave up midway" and leave the codebase
31
+ in a broken state:
32
+
33
+ | Banned pattern | What to do instead |
34
+ |---|---|
35
+ | `// rest of component` | Write the rest of the component. If budget runs out, emit `[PAUSED]` marker |
36
+ | `// ... (unchanged)` | Emit the unchanged code or omit it from the diff with a clean explanation of what was NOT changed |
37
+ | `// TODO: implement` | Implement it. If genuinely deferred, name the deferral explicitly in the brief, not in the code |
38
+ | `/* similar pattern */` | Write the similar pattern in full |
39
+ | `"for brevity"` in code comments | There is no brevity in broken code |
40
+ | `// rest follows same pattern` | Follow the same pattern — write it |
41
+ | `...` / `…` as an ellipsis replacing code content | Write the content |
42
+ | `[Your component here]` / `<YourComponentName>` | Use the actual component name or write the component |
43
+ | `Lorem ipsum` / `dolor sit amet` in UI output intended for review | Use realistic placeholder content or ask for content |
44
+
45
+ The banned patterns above are also detected by `lint_output_slop.ts` (see
46
+ `src/scripts/lint_output_slop.ts`) — violations cause a CI exit-code-2.
47
+
48
+ ## On budget overflow — PAUSED protocol
49
+
50
+ When output genuinely reaches a context budget limit mid-generation:
51
+
52
+ 1. Complete the current logical unit (function body, component, section).
53
+ 2. Emit a clean breakpoint marker on its own line:
54
+ ```
55
+ [PAUSED — section X of Y complete. Continue prompt: "continue from <last-completed-unit>"]
56
+ ```
57
+ 3. Stop. Do **not** truncate with `// rest follows...` or `...`.
58
+
59
+ The user will prompt "continue" and the next turn resumes cleanly from the
60
+ named unit.
61
+
62
+ ## Interaction with `verify-before-complete`
63
+
64
+ `verify-before-complete` requires fresh verification before claiming work is
65
+ done. `output-discipline` adds the pre-condition: **there must be nothing to
66
+ verify that was never written**. A component with `// rest of component` is
67
+ not a complete artifact — it cannot be verified, it cannot be committed.
68
+
69
+ ## Inline-ignore escape (for legitimate edge cases)
70
+
71
+ In the rare case where a pattern above is intentional (e.g., a documentation
72
+ example showing what NOT to do), use the inline-ignore escape:
73
+
74
+ ```javascript
75
+ // lint-output-slop-disable-next-line impl-placeholder -- showing a negative example in documentation
76
+ // rest of component
77
+ ```
78
+
79
+ Or for a whole file: `// lint-output-slop-disable-file impl-placeholder -- test fixture`
80
+
81
+ ## See also
82
+
83
+ - `verify-before-complete` — no completion claim without evidence
84
+ - `downstream-changes` — every edit is incomplete until all callers are updated
85
+ - `src/scripts/lint_output_slop.ts` — the CI linter enforcing this rule
@@ -59,7 +59,7 @@ Post-rewrite validator runs on every reply when `speak_scope != off`:
59
59
  The rule documents the algorithm; agents apply it inline before
60
60
  sending. The mechanism is the rule, not a hidden script.
61
61
 
62
- Optional CI-side regression lock: [`scripts/validate_telegraph_carveouts.py`](../../scripts/validate_telegraph_carveouts.py) takes pre/post reply pair and asserts byte-identical preservation across all seven carve-out categories — runtime mechanism stays algorithmic; script is offline check.
62
+ - Optional CI-side regression lock: [`scripts/validate_telegraph_carveouts.py`](../../scripts/validate_telegraph_carveouts.py) — pre/post reply pair, byte-identical preservation across all seven carve-out categories; runtime mechanism stays algorithmic, script is the offline check.
63
63
 
64
64
  ## Telegraph grammar
65
65
 
@@ -80,4 +80,7 @@ Example: *"I will now check the file and see if it exists"* →
80
80
  | `telegraph.speak` | `true` | Compile-time include in `dist/router.json`. |
81
81
  | `telegraph.speak_scope` | `prose_only` | Runtime scope of telegraph grammar. |
82
82
 
83
+ - Input-side memory condensation (shrinking always-loaded memory files like `AGENTS.md` / `CLAUDE.md` / `.cursorrules` rather than the reply stream) runs independently of `speak_scope` — see [`condense-memory`](../skills/condense-memory/SKILL.md) for the script wrapper, sensitive-path refusal contract, and `.original.md` round-trip.
84
+ - Skills marked `token_budget_class: rich` are **exempt** from telegraph condensation + thin-projector trimming (gated by `tokens.rich_skills`, default `on`) — full model in [`token-budget-discipline`](token-budget-discipline.md).
85
+
83
86
  Cross-rule index: [`frugality-charter § cross-references`](../contexts/contracts/frugality-charter.md#cross-references--frugality-canon-rules).
@@ -0,0 +1,94 @@
1
+ ---
2
+ type: "auto"
3
+ tier: "2a"
4
+ description: "Governs token_budget_class: rich skills — exempt them from telegraph-speak + thin-projector trimming; enforce the 15% cap + justification requirement"
5
+ triggers:
6
+ - keyword: "token_budget_class"
7
+ - keyword: "rich skill"
8
+ - intent: "editing a rich-tagged skill"
9
+ workspaces:
10
+ - agent-config-maintainer
11
+ packs:
12
+ - meta
13
+ ---
14
+
15
+ # Token Budget Discipline
16
+
17
+ ## Iron Law — rich skills load in full, lean skills compress
18
+
19
+ ```
20
+ SKILLS MARKED token_budget_class: rich ARE INTENTIONALLY DETAILED.
21
+ LOAD THEM FULLY. DO NOT CONDENSE, SUMMARIZE, OR TRIM THEM.
22
+ THEIR LENGTH IS A DELIBERATE QUALITY INVESTMENT, NOT BLOAT.
23
+ SKILLS WITHOUT THE KEY, OR MARKED lean/standard, REMAIN SUBJECT
24
+ TO THE FULL FRUGALITY CANON (telegraph-speak, thin-projector).
25
+ ```
26
+
27
+ ## The three classes
28
+
29
+ | Class | Default? | Telegraph-speak | Thin-projector trimming | Target size |
30
+ |---|---|---|---|---|
31
+ | `lean` | No explicit key = lean | Full condensation | May be trimmed | < 500 tokens |
32
+ | `standard` | — | Balanced condensation | Not trimmed if priority ≥ 60 | 500–2000 tokens |
33
+ | `rich` | Must be declared + justified | **Exempt** | **Never trimmed** | 2000–5000 tokens |
34
+
35
+ Read `tokens.rich_skills` from `.agent-settings.yml` (default `on`) to determine
36
+ whether rich skills may load in full. If `off`, treat them as
37
+ `standard`. If `ask`, surface the estimated token delta (≈ skill file size in
38
+ chars / 4) and wait for user confirmation; cache the answer for the session.
39
+
40
+ ## Requirements for `token_budget_class: rich`
41
+
42
+ A skill claiming `rich` MUST satisfy ALL three:
43
+
44
+ 1. **`## Why this skill is rich` section** — explains in 2-5 sentences the
45
+ irreducible complexity that makes condensation harmful (e.g. "agents need to
46
+ see 6 worked examples to pattern-match the modular scale; condensing to the
47
+ rule alone produces agents that invent arbitrary sizes"). The linter
48
+ (`lint_token_budget_discipline.ts`) fails the skill if this section is absent.
49
+
50
+ 2. **Not already coverable by a reference link** — if the richness is entirely
51
+ in an external document the agent can fetch, the skill should load lean and
52
+ carry a `load_context` pointer instead.
53
+
54
+ 3. **≤ 15 % of the suite's skills may claim `rich`** — the CI linter counts
55
+ rich-tagged skills and hard-fails if the ratio is exceeded. With ~230 skills, the
56
+ cap is ~35. Do not claim `rich` for convenience; claim it only for
57
+ irreducible-complexity skills.
58
+
59
+ ## Telegraph-speak amendment
60
+
61
+ The `telegraph-speak` rule (Tier 1, always-on) **exempts** skills marked
62
+ `token_budget_class: rich`. When such a skill is active:
63
+
64
+ - Do not apply telegraph-speak condensation to its guidance prose
65
+ - Do not drop articles, linking auxiliaries, or extended examples
66
+ - Do not compress multi-paragraph explanations into fragments
67
+ - Preserve all worked examples, decision tables, and code blocks verbatim
68
+
69
+ This exemption is limited to the skill's guidance content; reply prose from the
70
+ *agent* (not from the skill body) remains subject to telegraph-speak unless the
71
+ user has set `telegraph.speak_scope: off`.
72
+
73
+ ## Candidate rich skills (justified, not exhaustive)
74
+
75
+ These skills are approved `rich` by this roadmap's council:
76
+
77
+ | Skill | Justification summary |
78
+ |---|---|
79
+ | `design-intelligence` | 11 corpus CSVs + 16 design-language prose specs + a 10-category checklist; grounded selection needs the full reference to avoid random corpus subsets |
80
+ | `typography-system` | Modular-scale math + 6 worked example type systems; condensing to "use 1.25 ratio" produces agents that invent arbitrary px values |
81
+ | `accessibility-auditor` | WCAG criteria are non-negotiable detail; every criterion has a testable condition + failure mode; compression loses the test procedures |
82
+ | `design-system-capture` (Phase 6) | Writes + maintains DESIGN.md + PRODUCT.md; needs full templates + worked examples to generate useful artifacts |
83
+
84
+ ## Governed by
85
+
86
+ - `tokens.rich_skills` setting in `.agent-settings.yml` (consumer override)
87
+ - `lint_token_budget_discipline.ts` (cap + justification CI check)
88
+ - `telegraph-speak.md` (amended to except rich-tagged skills)
89
+
90
+ ## See also
91
+
92
+ - `token_budget_class` key in `src/scripts/schemas/skill.schema.json`
93
+ - `tokens.rich_skills` in `src/config/agent-settings.template.yml`
94
+ - `telegraph-speak` rule — the frugality canon this rule amends
@@ -9,6 +9,7 @@ workspaces:
9
9
  - engineering
10
10
  packs:
11
11
  - engineering-base
12
+ token_budget_class: rich
12
13
  ---
13
14
 
14
15
  # accessibility-auditor
@@ -53,11 +54,12 @@ gets a verdict in step 5; missing one is a coverage failure.
53
54
  **Perceivable** — text alternatives for non-text (`alt`, `aria-label`),
54
55
  contrast ≥ 4.5:1 for body / 3:1 for large or UI components, no
55
56
  colour-only state ("error in red" must also be iconic or text).
56
- Grounded reference for palette + chart verdicts: corpus WCAG-adjusted
57
- token sets (`--domain color`), chart a11y grades + colorblind fallbacks
58
- (`--domain chart`), mobile touch/a11y rules (`--domain web`, 44pt) via
59
- [`design-intelligence`](../design-intelligence/SKILL.md) — cite the corpus
60
- row; WCAG 2.2 AA *method* stays this skill's checklists.
57
+ Grounded reference for palette + chart verdicts: the adopted corpus's
58
+ WCAG-adjusted token sets (`--domain color`), chart a11y grades +
59
+ colorblind fallbacks (`--domain chart`), and mobile touch/a11y rules
60
+ (`--domain web`, 44pt targets) via
61
+ [`design-intelligence`](../design-intelligence/SKILL.md) — cite the
62
+ corpus row; the WCAG 2.2 AA *method* stays this skill's own checklists.
61
63
  Widget-pattern selection (dialog, combobox, tabs, toast, table, form
62
64
  errors, drag-reorder …) grounds in the ARIA-APG corpus:
63
65
  `ground.py search --manifest
@@ -145,3 +147,16 @@ Top 3 fixes: <ordered by user impact>
145
147
  jurisdictions.
146
148
  - Do NOT close a finding by adjusting the test instead of the UI;
147
149
  the user's experience is the ground truth, not the test report.
150
+
151
+ ## Why this skill is rich
152
+
153
+ WCAG 2.2 AA compliance is non-negotiable detail — each success criterion
154
+ has a specific testable condition, failure mode, and remediation path.
155
+ The skill carries the full WCAG criterion matrix with concrete test
156
+ procedures (not just "check contrast"), keyboard-navigation patterns
157
+ (roving tabindex, trap management, escape-key handling), ARIA role/
158
+ property/state tables, and screen-reader-specific edge cases per
159
+ assistive technology. Condensing to "check contrast and add aria-labels"
160
+ loses the test procedures that turn a vague finding into a reproducible
161
+ failure with a specific remedy. Accessibility bugs that are described
162
+ vaguely cannot be verified as fixed.
@@ -133,6 +133,15 @@ current state on the next polish round.
133
133
  - Do NOT put business logic in Blade templates — use Livewire or view composers.
134
134
  - Do NOT use inline styles — use Tailwind utility classes.
135
135
 
136
+ ## Anti-slop
137
+
138
+ Before shipping a Blade view, pull
139
+ [`docs/guidelines/design-antipatterns.md`](../../../docs/guidelines/design-antipatterns.md)
140
+ and scan Visual / Typography / Layout — the Blade markup is where side-stripe
141
+ accents (V1), icon-tile feature cards (T3), and the centered-hero + 3-column
142
+ template (L1/L2) concretely land. Stack-specific Tailwind class/hex bans live in
143
+ [`tailwind-engineer`](../tailwind-engineer/SKILL.md).
144
+
136
145
  ## Auto-trigger keywords
137
146
 
138
147
  - Blade template
@@ -0,0 +1,13 @@
1
+ {
2
+ "skill": "bug-analyzer",
3
+ "_calibration": "Starter behavioral fixtures (roadmap road-to-operator-runtime-harvest, Phase 1, line 182). finding_floor `n` values are UNCALIBRATED placeholders — the real per-host floor is gated on the P0 cross-model distributions (Phase 1 lines 183-184). Do not wire these as an enforcing CI gate until calibrated.",
4
+ "scenarios": [
5
+ {
6
+ "id": "stacktrace-root-cause-findings",
7
+ "prompt": "Analyze this failure and list each candidate cause as its own bullet point:\n```\nTypeError: Cannot read properties of undefined (reading 'id')\n at resolveUser (auth.ts:42)\n at middleware (auth.ts:11)\n```\nContext: intermittent; only on requests without a session cookie.",
8
+ "assertions": [
9
+ { "kind": "finding_floor", "n": 2, "pattern": "(?m)^\\s*[-*+]\\s+" }
10
+ ]
11
+ }
12
+ ]
13
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "skill": "code-review",
3
+ "_calibration": "Starter behavioral fixtures (roadmap road-to-operator-runtime-harvest, Phase 1, line 182). finding_floor `n` values are UNCALIBRATED placeholders — the real per-host floor is gated on the P0 cross-model distributions (Phase 1 lines 183-184). Do not wire these as an enforcing CI gate until calibrated.",
4
+ "scenarios": [
5
+ {
6
+ "id": "diff-with-multiple-issues",
7
+ "prompt": "Review this diff and list each distinct issue as its own bullet point:\n```js\nfunction pay(amount) {\n var x = amount\n eval(userInput)\n db.query('SELECT * FROM users WHERE id = ' + req.params.id)\n return x\n}\n```",
8
+ "assertions": [
9
+ { "kind": "finding_floor", "n": 2 },
10
+ { "kind": "contains", "value": "eval" }
11
+ ]
12
+ },
13
+ {
14
+ "id": "clean-diff-few-findings",
15
+ "prompt": "Review this diff and list each distinct issue as its own bullet point:\n```js\nexport function add(a: number, b: number): number {\n return a + b\n}\n```",
16
+ "assertions": [
17
+ { "kind": "finding_floor", "n": 0 }
18
+ ]
19
+ }
20
+ ]
21
+ }
@@ -4,12 +4,13 @@ name: contract-review
4
4
  description: "Use when reviewing a contract clause-by-clause from your party's side — buyer/seller/vendor/licensee. Triggers on 'review this contract', 'redline this MSA', 'is this clause a problem'."
5
5
  status: active
6
6
  tier: senior
7
+ council_depth: deep
7
8
  domain: process
8
9
  recommended_for_user_types: [legal]
9
10
  workspaces:
10
- - legal
11
+ - legal-review-prep
11
12
  packs:
12
- - legal
13
+ - legal-review-prep
13
14
  trust:
14
15
  level: advisory
15
16
  install:
@@ -23,11 +23,17 @@ Do NOT use when:
23
23
 
24
24
  ## Procedure: Design a dashboard
25
25
 
26
- Ground chart-type choice in the adopted data-viz corpus, not memory:
27
- `ground.py search --manifest <skills-root>/design-intelligence/data/manifest.json
28
- --domain chart "<data shape>"` → best chart type, when-NOT-to-use, volume
29
- threshold, a11y grade + colorblind fallback, library recommendation
30
- ([`design-intelligence`](../design-intelligence/SKILL.md)).
26
+ 1. **Inspect the data sources** — Identify which signals already exist (logs, metrics, app queries) and where they live (Grafana / Loki / app DB) before designing a new panel.
27
+ 2. **Pick the surface** — Use the decision tables below to choose Grafana, app dashboard, or embed; document audience and refresh cadence.
28
+ 3. **Draft the layout** — Sketch panels, choose visualization per signal (RED / USE / Golden Signals), define filters and thresholds.
29
+ **Ground the chart-type choice** in the adopted data-viz corpus instead
30
+ of memory: `ground.py search --manifest
31
+ <skills-root>/design-intelligence/data/manifest.json --domain chart
32
+ "<data shape>"` returns the best chart type, when-NOT-to-use, data-volume
33
+ threshold, a11y grade + colorblind fallback, and a library
34
+ recommendation per row (see
35
+ [`design-intelligence`](../design-intelligence/SKILL.md)).
36
+ 4. **Implement and verify** — Build the dashboard, load realistic data, and confirm every panel answers a named question for the named audience.
31
37
 
32
38
  | Domain | Technology | Purpose |
33
39
  |---|---|---|
@@ -120,6 +126,16 @@ Config required: `allow_embedding = true`, `cookie_samesite = none` (cross-origi
120
126
  - Do NOT mix ops metrics with business KPIs on the same dashboard.
121
127
  - Do NOT show admin data without tenant scoping.
122
128
 
129
+ ## Anti-slop
130
+
131
+ Dashboards have their own signature tell: the **hero-metric template** (giant
132
+ number + small label + a row of stats + gradient) is L1 in
133
+ [`docs/guidelines/design-antipatterns.md`](../../../docs/guidelines/design-antipatterns.md).
134
+ Pull the catalog and check L1–L3 (hero-metric, identical-card grids, monotonous
135
+ spacing) before finalizing the layout — a dashboard is product-mode
136
+ (`docs/guidelines/design-modes.md`): design serves the task, so favour data
137
+ density and earned familiarity over decorative variance.
138
+
123
139
  ## Auto-trigger keywords
124
140
 
125
141
  - dashboard