@event4u/agent-config 8.8.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.
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +139 -263
- package/README.md +5 -5
- package/dist/agent-src/commands/agent-handoff.md +39 -2
- package/dist/agent-src/commands/cost/report.md +13 -3
- package/dist/agent-src/commands/research/deep.md +8 -0
- package/dist/agent-src/commands/research/report.md +7 -0
- package/dist/agent-src/commands/roadmap/create.md +12 -0
- package/dist/agent-src/commands/roadmap/process-full.md +31 -5
- package/dist/agent-src/commands/tests/create.md +28 -6
- package/dist/agent-src/commands/work.md +33 -0
- package/dist/agent-src/commands/worktree/cleanup.md +78 -0
- package/dist/agent-src/commands/worktree/create.md +62 -0
- package/dist/agent-src/commands/worktree/status.md +63 -0
- package/dist/agent-src/commands/worktree/verify.md +70 -0
- package/dist/agent-src/commands/worktree.md +85 -0
- package/dist/agent-src/contexts/communication/rules-auto/think-before-action-mechanics.md +30 -1
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +60 -31
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +37 -0
- package/dist/agent-src/contexts/execution/subagent-topologies.md +34 -0
- package/dist/agent-src/contexts/execution/verification-mechanics.md +9 -9
- package/dist/agent-src/rules/agent-authority.md +1 -1
- package/dist/agent-src/rules/communication-through-line.md +1 -1
- package/dist/agent-src/rules/delegation-policy.md +5 -0
- package/dist/agent-src/rules/design-fidelity.md +40 -0
- package/dist/agent-src/rules/direct-answers.md +1 -1
- package/dist/agent-src/rules/downstream-changes.md +1 -0
- package/dist/agent-src/rules/external-code-graph-interop.md +65 -0
- package/dist/agent-src/rules/git-history-discipline.md +18 -0
- package/dist/agent-src/rules/lethal-trifecta-guard.md +6 -1
- package/dist/agent-src/rules/minimal-safe-diff.md +58 -10
- package/dist/agent-src/rules/non-destructive-by-default.md +3 -0
- package/dist/agent-src/rules/question-not-instruction.md +76 -0
- package/dist/agent-src/rules/senior-engineering-discipline.md +1 -1
- package/dist/agent-src/rules/spreadsheet-source-quality.md +61 -0
- package/dist/agent-src/rules/think-before-action.md +1 -0
- package/dist/agent-src/rules/tool-safety.md +8 -0
- package/dist/agent-src/rules/untrusted-input-defense.md +87 -22
- package/dist/agent-src/scripts/update_roadmap_progress.ts +2 -1
- package/dist/agent-src/skills/accessibility-auditor/SKILL.md +19 -0
- package/dist/agent-src/skills/accessibility-auditor/evals/evals.json +15 -0
- package/dist/agent-src/skills/ai-code-blindspots/SKILL.md +10 -3
- package/dist/agent-src/skills/analysis-skill-router/evals/evals.json +13 -0
- package/dist/agent-src/skills/api-testing/SKILL.md +15 -1
- package/dist/agent-src/skills/character-consistency/evals/evals.json +16 -0
- package/dist/agent-src/skills/code-review/SKILL.md +2 -0
- package/dist/agent-src/skills/command-routing/evals/evals.json +14 -0
- package/dist/agent-src/skills/command-writing/SKILL.md +53 -40
- package/dist/agent-src/skills/dashboard-design/evals/evals.json +16 -0
- package/dist/agent-src/skills/dcf-modeling/evals/domain-truth.json +29 -0
- package/dist/agent-src/skills/dcf-modeling/evals/evals.json +20 -0
- package/dist/agent-src/skills/decision-record/evals/evals.json +20 -0
- package/dist/agent-src/skills/deep-reading-analyst/SKILL.md +1 -0
- package/dist/agent-src/skills/design-intelligence/SKILL.md +49 -12
- package/dist/agent-src/skills/design-intelligence/evals/evals.json +14 -0
- package/dist/agent-src/skills/design-review/SKILL.md +35 -15
- package/dist/agent-src/skills/design-system-capture/SKILL.md +84 -24
- package/dist/agent-src/skills/design-system-capture/evals/evals.json +15 -0
- package/dist/agent-src/skills/developer-like-execution/evals/evals.json +16 -0
- package/dist/agent-src/skills/doc-coauthoring/SKILL.md +27 -0
- package/dist/agent-src/skills/doc-coauthoring/evals/evals.json +16 -0
- package/dist/agent-src/skills/editorial-calendar/evals/domain-truth.json +16 -0
- package/dist/agent-src/skills/editorial-calendar/evals/evals.json +16 -0
- package/dist/agent-src/skills/estimate-ticket/evals/evals.json +16 -0
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +30 -0
- package/dist/agent-src/skills/existing-ui-audit/evals/triggers.json +47 -0
- package/dist/agent-src/skills/fe-design/SKILL.md +36 -5
- package/dist/agent-src/skills/fe-design/evals/triggers.json +47 -0
- package/dist/agent-src/skills/forecasting/evals/domain-truth.json +29 -0
- package/dist/agent-src/skills/forecasting/evals/evals.json +20 -0
- package/dist/agent-src/skills/frontend-render-security/SKILL.md +2 -2
- package/dist/agent-src/skills/fundraising-narrative/evals/domain-truth.json +16 -0
- package/dist/agent-src/skills/fundraising-narrative/evals/evals.json +16 -0
- package/dist/agent-src/skills/html-deck/SKILL.md +27 -0
- package/dist/agent-src/skills/iconography/SKILL.md +24 -0
- package/dist/agent-src/skills/incident-commander/evals/domain-truth.json +16 -0
- package/dist/agent-src/skills/incident-commander/evals/evals.json +20 -0
- package/dist/agent-src/skills/launch-readiness/evals/evals.json +21 -0
- package/dist/agent-src/skills/logging-monitoring/evals/evals.json +16 -0
- package/dist/agent-src/skills/markitdown/SKILL.md +1 -0
- package/dist/agent-src/skills/mcp/SKILL.md +24 -0
- package/dist/agent-src/skills/mcp-builder/SKILL.md +9 -1
- package/dist/agent-src/skills/memory-consolidation/SKILL.md +55 -4
- package/dist/agent-src/skills/messaging-architecture/evals/domain-truth.json +16 -0
- package/dist/agent-src/skills/messaging-architecture/evals/evals.json +16 -0
- package/dist/agent-src/skills/perf-feedback-craft/evals/evals.json +16 -0
- package/dist/agent-src/skills/pest-testing/SKILL.md +1 -1
- package/dist/agent-src/skills/playwright-testing/SKILL.md +16 -0
- package/dist/agent-src/skills/prompt-engineering-patterns/evals/evals.json +16 -0
- package/dist/agent-src/skills/refine-prompt/evals/evals.json +16 -0
- package/dist/agent-src/skills/refine-ticket/evals/evals.json +16 -0
- package/dist/agent-src/skills/release-comms/evals/evals.json +16 -0
- package/dist/agent-src/skills/rice-prioritization/evals/evals.json +20 -0
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +39 -5
- package/dist/agent-src/skills/runway-cognition/evals/domain-truth.json +29 -0
- package/dist/agent-src/skills/runway-cognition/evals/evals.json +20 -0
- package/dist/agent-src/skills/scenario-modeling/evals/domain-truth.json +29 -0
- package/dist/agent-src/skills/scenario-modeling/evals/evals.json +20 -0
- package/dist/agent-src/skills/secrets-management/SKILL.md +7 -0
- package/dist/agent-src/skills/skill-writing/SKILL.md +12 -3
- package/dist/agent-src/skills/spreadsheet-authoring/SKILL.md +98 -0
- package/dist/agent-src/skills/spreadsheet-authoring/evals/triggers.json +47 -0
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +27 -33
- package/dist/agent-src/skills/supply-chain-intake/SKILL.md +12 -0
- package/dist/agent-src/skills/systematic-debugging/evals/evals.json +20 -0
- package/dist/agent-src/skills/test-case-discovery/SKILL.md +118 -0
- package/dist/agent-src/skills/test-case-discovery/evals/triggers.json +52 -0
- package/dist/agent-src/skills/test-driven-development/SKILL.md +32 -6
- package/dist/agent-src/skills/test-driven-development/evals/evals.json +16 -0
- package/dist/agent-src/skills/testing-anti-patterns/SKILL.md +34 -4
- package/dist/agent-src/skills/threat-modeling/evals/evals.json +21 -0
- package/dist/agent-src/skills/typography-system/evals/evals.json +14 -0
- package/dist/agent-src/skills/ui-component-architect/SKILL.md +9 -0
- package/dist/agent-src/skills/unit-economics-modeling/evals/domain-truth.json +40 -0
- package/dist/agent-src/skills/unit-economics-modeling/evals/evals.json +24 -0
- package/dist/agent-src/skills/verify-completion-evidence/evals/evals.json +16 -0
- package/dist/agent-src/skills/vision-articulation/evals/evals.json +16 -0
- package/dist/agent-src/skills/voice-and-tone-design/evals/evals.json +16 -0
- package/dist/agent-src/skills/worktree-lifecycle/SKILL.md +180 -0
- package/dist/agent-src/skills/worktree-lifecycle/evals/triggers.json +52 -0
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/roadmaps.md +36 -0
- package/dist/cli/registry.js +3 -0
- package/dist/cli/registry.js.map +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +326 -67
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +6 -6
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +25 -14
- package/dist/discovery/trust-report.md +4 -4
- package/dist/discovery/workspaces.json +25 -12
- package/dist/install/install.mjs +136 -1
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/claude_builtin_names.js +145 -0
- package/dist/scripts/_lib/claude_builtin_names.js.map +1 -0
- package/dist/scripts/condense.js +14 -0
- package/dist/scripts/condense.js.map +1 -1
- package/docs/CLAIMS.md +36 -8
- package/docs/architecture.md +4 -4
- package/docs/archive/CHANGELOG-pre-8.9.0.md +306 -0
- package/docs/benchmark.md +113 -0
- package/docs/catalog.md +32 -8
- package/docs/command-flows.md +6 -1
- package/docs/contracts/CHANGELOG-conventions.md +6 -0
- package/docs/contracts/command-clusters.md +18 -0
- package/docs/contracts/design-artifact-lifecycle.md +93 -0
- package/docs/contracts/design-artifact-verification.md +153 -0
- package/docs/contracts/injected-block-authenticity-model.md +66 -0
- package/docs/contracts/mcp-tool-inventory.md +28 -28
- package/docs/contracts/release-pr-gating.md +26 -0
- package/docs/contracts/release-sizing.md +85 -0
- package/docs/contracts/surface-agent-contracts.md +153 -0
- package/docs/decisions/ADR-061-corpus-grounding-layer.md +13 -0
- package/docs/decisions/ADR-115-command-cluster-consolidation-phase-4.md +1 -1
- package/docs/decisions/ADR-116-memory-tripwire-activation-path.md +9 -0
- package/docs/distribution/consumer-matrix.md +96 -0
- package/docs/featured-skills.md +2 -2
- package/docs/getting-started-by-role.md +1 -1
- package/docs/getting-started.md +2 -2
- package/docs/governance-advantage.md +1 -1
- package/docs/guidelines/agent-infra/asking-and-brevity-examples.md +27 -0
- package/docs/guidelines/agent-infra/emphasis-budget.md +45 -0
- package/docs/guidelines/agent-infra/simplicity-and-goal-demos.md +151 -0
- package/docs/guidelines/agent-infra/tool-description-as-policy.md +35 -0
- package/docs/guidelines/design-canon.md +1 -0
- package/docs/proof.md +38 -23
- package/docs/release-runbook.md +3 -0
- package/docs/second-brain-scope.md +69 -26
- package/docs/self-review-gate.md +51 -0
- package/package.json +1 -1
- package/src/agent-src/scripts/update_roadmap_progress.ts +2 -1
- package/src/scripts/_dispatch.bash +27 -0
- package/src/scripts/_lib/claude_builtin_names.ts +148 -0
- package/src/scripts/_lib/file_slicer.ts +117 -0
- package/src/scripts/_lib/lexical_index.ts +155 -0
- package/src/scripts/_lib/orchestration_record.ts +183 -0
- package/src/scripts/_lib/orchestration_savings.ts +114 -9
- package/src/scripts/_lib/retrieval_sanitize.ts +71 -0
- package/src/scripts/_lib/security_lint.ts +1 -0
- package/src/scripts/_lib/stat_index.ts +98 -0
- package/src/scripts/benchmark.ts +122 -0
- package/src/scripts/build_proof.ts +30 -17
- package/src/scripts/check_memory.ts +2 -0
- package/src/scripts/check_quality_regression.ts +51 -0
- package/src/scripts/check_release_adjacent_health.ts +121 -0
- package/src/scripts/check_roadmap_trackable.ts +3 -2
- package/src/scripts/check_rule_invariants.ts +275 -0
- package/src/scripts/condense.ts +14 -0
- package/src/scripts/consumer_matrix.ts +353 -0
- package/src/scripts/discovery_graph.ts +0 -0
- package/src/scripts/external_sources_denylist.json +4 -1
- package/src/scripts/generate_index.ts +6 -2
- package/src/scripts/install-hooks.sh +25 -0
- package/src/scripts/install.ts +35 -2
- package/src/scripts/learning_sidecar.ts +0 -0
- package/src/scripts/lint_agent_skill_names.ts +29 -0
- package/src/scripts/lint_changelog_rollback.ts +293 -0
- package/src/scripts/lint_knowledge_scale.ts +4 -3
- package/src/scripts/lint_roadmap_complexity.ts +124 -0
- package/src/scripts/lint_versioned_cache.ts +195 -0
- package/src/scripts/mcp_server/consumer_tool_catalog.json +2 -1
- package/src/scripts/mcp_server/tools.ts +24 -1
- package/src/scripts/measure_lexical_ranking.ts +173 -0
- package/src/scripts/memory_lookup.ts +0 -0
- package/src/scripts/orchestration_record.ts +156 -0
- package/src/scripts/orchestration_savings_report.ts +65 -8
- package/src/scripts/schemas/skill.schema.json +4 -0
- package/src/scripts/score_domain_truth.ts +192 -0
- package/src/scripts/second_brain_retrieval.ts +320 -0
- package/src/scripts/second_brain_run.ts +341 -0
- package/src/scripts/self_review_gate.test.ts +65 -0
- package/src/scripts/self_review_gate.ts +272 -0
- package/src/scripts/trigger_eval_grandfather.json +223 -224
|
@@ -37,53 +37,57 @@ A command is **user-invoked** and carries `disable-model-invocation: true`.
|
|
|
37
37
|
A skill is model-invoked via description routing. If both audiences apply,
|
|
38
38
|
author as a skill and add a thin command that delegates to it.
|
|
39
39
|
|
|
40
|
-
**A command must EARN a top-level slot
|
|
41
|
-
**flow-entry**, **state-query**, **product-surface
|
|
42
|
-
Check
|
|
40
|
+
**A command must EARN a top-level slot.** Only three justifications qualify:
|
|
41
|
+
**flow-entry**, **state-query**, or **product-surface** — everything else is a
|
|
42
|
+
skill. Check before authoring: [`command-clusters` § Command justification](../../../docs/contracts/command-clusters.md#command-justification--a-command-must-earn-a-top-level-slot)
|
|
43
43
|
([ADR-048](../../../docs/decisions/ADR-048-command-justification-rule.md)).
|
|
44
44
|
|
|
45
|
-
**Categorize at creation (checklist).**
|
|
46
|
-
`category:`
|
|
45
|
+
**Categorize at creation (checklist).** When you author a NEW top-level command,
|
|
46
|
+
declare its justification as a `category:` in the frontmatter — the schema enum
|
|
47
|
+
is `flow-entry | state-query | product-surface`:
|
|
47
48
|
|
|
48
|
-
- [ ] **flow-entry** — daily work
|
|
49
|
-
|
|
50
|
-
- [ ] **
|
|
51
|
-
- [ ] **
|
|
52
|
-
- [ ] **
|
|
53
|
-
|
|
49
|
+
- [ ] **flow-entry** — a daily work starting point the user TYPES to begin
|
|
50
|
+
(`work`, `git-commit`, `review-changes`).
|
|
51
|
+
- [ ] **state-query** — a read-only check (`agent-status`, `project-health`, `profile`).
|
|
52
|
+
- [ ] **product-surface** — a feature started deliberately (`council`, `research`, `roadmap`).
|
|
53
|
+
- [ ] **fits none → it is a skill.** Don't add the command; author a skill.
|
|
54
|
+
- [ ] **genuinely ambiguous?** Omit `category:` and note why — `category:` is
|
|
55
|
+
OPTIONAL (validate-when-present); deferring is intentional, not forgotten.
|
|
54
56
|
|
|
55
|
-
Sub-commands inherit the parent cluster's category — leave
|
|
56
|
-
Why optional + not yet blocking,
|
|
57
|
-
[`command-category-governance`](../../../docs/contracts/command-category-governance.md).
|
|
57
|
+
Sub-commands (`council:debate`) inherit the parent cluster's category — leave
|
|
58
|
+
`category:` off them. Why optional + not yet a blocking lint, and what triggers
|
|
59
|
+
the upgrade: [`command-category-governance`](../../../docs/contracts/command-category-governance.md).
|
|
58
60
|
|
|
59
61
|
## Commands ARE Claude skills (projection reality)
|
|
60
62
|
|
|
61
|
-
Every `src/agent-src/commands/{name}.md`
|
|
62
|
-
`.claude/skills/{slug}/SKILL.md`
|
|
63
|
+
Every command in `src/agent-src/commands/{name}.md` is projected
|
|
64
|
+
into `.claude/skills/{slug}/SKILL.md` by `scripts/condense.ts`
|
|
63
65
|
(`generate_claude_commands`). Nested commands flatten with `-`
|
|
64
|
-
(`council/default.md` → `council-default`). Skills
|
|
66
|
+
(`council/default.md` → `council-default`). Skills and commands share the
|
|
65
67
|
**same `.claude/skills/` namespace** — Claude does not distinguish them.
|
|
66
68
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
*
|
|
70
|
-
phrasing
|
|
71
|
-
because the in-host
|
|
72
|
-
scans `.claude/skills/`
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
69
|
+
Consequences for authoring:
|
|
70
|
+
|
|
71
|
+
* The frontmatter `description` is the **routing surface** Claude reads.
|
|
72
|
+
Polite or generic phrasing causes undertriggering even with
|
|
73
|
+
`disable-model-invocation: true` set, because the in-host command
|
|
74
|
+
suggester, fuzzy search, and any tooling that scans `.claude/skills/`
|
|
75
|
+
rank by description match.
|
|
76
|
+
* `disable-model-invocation: true` blocks **automatic** invocation. It
|
|
77
|
+
does NOT remove the command from discovery surfaces. A weak description
|
|
78
|
+
means the command is invisible to the suggester even when the user's
|
|
79
|
+
intent matches.
|
|
80
|
+
* Trigger phrasing must follow the same Iron Law as skill descriptions:
|
|
77
81
|
name 2+ trigger classes (domains, symptoms, user phrasing), end with
|
|
78
82
|
the `... even when the user just says ...` tail, ≤ 200 chars. See
|
|
79
83
|
`skill-writing` § 1b for the canonical before/after.
|
|
80
|
-
* `suggestion.trigger_description`
|
|
81
|
-
**separate** from frontmatter `description` — they
|
|
82
|
-
suggester (`command-suggestion-policy`), not Claude's
|
|
83
|
-
Both matter, both must be precise.
|
|
84
|
+
* The `suggestion.trigger_description` and `suggestion.trigger_context`
|
|
85
|
+
blocks are **separate** from the frontmatter `description` — they
|
|
86
|
+
drive the in-host suggester (`command-suggestion-policy`), not Claude's
|
|
87
|
+
skill router. Both matter, both must be precise.
|
|
84
88
|
|
|
85
|
-
Bottom line: write the command's `description` as if a skill router
|
|
86
|
-
|
|
89
|
+
Bottom line: write the command's `description` as if a skill router will
|
|
90
|
+
read it — because one will.
|
|
87
91
|
|
|
88
92
|
## Procedure
|
|
89
93
|
|
|
@@ -205,9 +209,9 @@ multi-paragraph explanation, extract it into a skill and call it.
|
|
|
205
209
|
### 6. Governance baseline (when introducing a new linter check)
|
|
206
210
|
|
|
207
211
|
**Advisory, reviewer-checked — no CI gate.** When the same PR adds a
|
|
208
|
-
new check to `scripts/skill_linter.ts` (or strengthens an existing
|
|
209
|
-
such that previously-clean commands now warn, the PR body MUST
|
|
210
|
-
the pre-existing violations on `main` in a Markdown table:
|
|
212
|
+
new check to `scripts/skill_linter.ts` (or strengthens an existing
|
|
213
|
+
one) such that previously-clean commands now warn, the PR body MUST
|
|
214
|
+
record the pre-existing violations on `main` in a Markdown table:
|
|
211
215
|
|
|
212
216
|
```markdown
|
|
213
217
|
### Pre-existing baseline (informational)
|
|
@@ -217,10 +221,11 @@ the pre-existing violations on `main` in a Markdown table:
|
|
|
217
221
|
| {new_code} | N | (a) genuine fix · (b) accept · (c) check too aggressive |
|
|
218
222
|
```
|
|
219
223
|
|
|
220
|
-
Forward-only: the new check applies to **the file under review** and
|
|
221
|
-
**future** edits. The baseline table is informational so reviewers
|
|
222
|
-
spot intent (fix-now vs. backlog) without diffing the full lint
|
|
223
|
-
See `agents/evidence/analysis/lint-warning-triage.md` for the
|
|
224
|
+
Forward-only: the new check applies to **the file under review** and
|
|
225
|
+
to **future** edits. The baseline table is informational so reviewers
|
|
226
|
+
can spot intent (fix-now vs. backlog) without diffing the full lint
|
|
227
|
+
output. See `agents/evidence/analysis/lint-warning-triage.md` for the
|
|
228
|
+
3-bucket reference.
|
|
224
229
|
|
|
225
230
|
## Output format
|
|
226
231
|
|
|
@@ -299,3 +304,11 @@ Good description (trigger-shaped, outcome-focused):
|
|
|
299
304
|
Bad description (vague, no outcome):
|
|
300
305
|
|
|
301
306
|
> "PR command"
|
|
307
|
+
|
|
308
|
+
## Encode usage policy in the description
|
|
309
|
+
|
|
310
|
+
Workflow sequencing, preconditions, ID/output provenance ("copy ids verbatim,
|
|
311
|
+
never from memory"), a mandatory "why" intent field, and turn-end contracts
|
|
312
|
+
belong INSIDE this artifact's description/frontmatter — where they fire at the
|
|
313
|
+
decision point — not in always-on prose. See
|
|
314
|
+
[`tool-description-as-policy`](../../../docs/guidelines/agent-infra/tool-description-as-policy.md).
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "dashboard-design",
|
|
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-metrics-dashboard",
|
|
7
|
+
"prompt": "Design a metrics dashboard for our SaaS ops team.",
|
|
8
|
+
"assertions": [
|
|
9
|
+
{
|
|
10
|
+
"kind": "rubric",
|
|
11
|
+
"criterion": "Leads with the decisions the viewer must make, groups metrics by that, uses the right chart per data shape, and avoids vanity metrics."
|
|
12
|
+
}
|
|
13
|
+
]
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "dcf-modeling",
|
|
3
|
+
"domain": "finance",
|
|
4
|
+
"_note": "Deterministic domain-truth keys computed independently from cited standard DCF formulas (NOT the skill's own output). Authored as maintainer-ratification candidates per road-to-domain-soundness Phase 2 (blocker: domain-competence-for-answer-keys); the Phase-3 run + --write-floor ratchet-pin remain the maintainer's gate.",
|
|
5
|
+
"cases": [
|
|
6
|
+
{
|
|
7
|
+
"id": "gordon-terminal-value",
|
|
8
|
+
"scenario": "Year-6 free cash flow to the firm (FCFF) = $108M, WACC = 10%, terminal growth g = 2%. Compute the terminal value at the end of year 5 using the Gordon-growth model TV = FCFF_6 / (WACC - g). State the single figure in $M.",
|
|
9
|
+
"source": "Gordon-growth terminal value: TV = FCFF_{n+1} / (WACC - g) (standard DCF; e.g. Damodaran, 'Investment Valuation').",
|
|
10
|
+
"check": {
|
|
11
|
+
"kind": "deterministic",
|
|
12
|
+
"expected": 1350,
|
|
13
|
+
"tolerance": 0.5,
|
|
14
|
+
"rationale": "108 / (0.10 - 0.02) = 108 / 0.08 = 1,350 ($M). Step 1/Step 2 Gordon-growth terminal value."
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": "pv-discount-factor",
|
|
19
|
+
"scenario": "An FCFF of $200M is received in year 3. WACC = 12%. Compute its present value = 200 / (1.12)^3. State the single figure in $M to two decimals.",
|
|
20
|
+
"source": "DCF discounting: PV = CF_t / (1 + WACC)^t (standard DCF; Damodaran, 'Investment Valuation').",
|
|
21
|
+
"check": {
|
|
22
|
+
"kind": "deterministic",
|
|
23
|
+
"expected": 142.36,
|
|
24
|
+
"tolerance": 0.1,
|
|
25
|
+
"rationale": "1.12^3 = 1.404928; 200 / 1.404928 = 142.36 ($M). Step 2 discounts each FCFF year by 1 / (1 + WACC)^t."
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "dcf-modeling",
|
|
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": "dcf-terminal-value-and-sensitivity",
|
|
7
|
+
"prompt": "DCF this target: year-6 FCFF $108M, WACC 10%, terminal growth 2%, net debt $200M. Give enterprise + equity value and the discount-rate sensitivity.",
|
|
8
|
+
"assertions": [
|
|
9
|
+
{
|
|
10
|
+
"kind": "contains",
|
|
11
|
+
"value": "WACC"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"kind": "rubric",
|
|
15
|
+
"criterion": "Computes Gordon terminal value = FCFF_{n+1}/(WACC−g) = 108/0.08 = 1350, bridges EV→equity via net debt, and includes a WACC/terminal-growth sensitivity grid — never a single point estimate."
|
|
16
|
+
}
|
|
17
|
+
]
|
|
18
|
+
}
|
|
19
|
+
]
|
|
20
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "decision-record",
|
|
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": "record-adr",
|
|
7
|
+
"prompt": "Record our decision to adopt Postgres over MySQL as an ADR.",
|
|
8
|
+
"assertions": [
|
|
9
|
+
{
|
|
10
|
+
"kind": "contains",
|
|
11
|
+
"value": "Consequences"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"kind": "rubric",
|
|
15
|
+
"criterion": "Uses the ADR shape — Status / Context / Decision / Consequences / Alternatives — and states the trade-off given up, not only the choice."
|
|
16
|
+
}
|
|
17
|
+
]
|
|
18
|
+
}
|
|
19
|
+
]
|
|
20
|
+
}
|
|
@@ -114,6 +114,7 @@ Load only the frameworks the user's depth bought. Each framework follows the sam
|
|
|
114
114
|
**L4 addition:**
|
|
115
115
|
|
|
116
116
|
- **Cross-source comparison** ([`comparison-matrix`](../../../docs/guidelines/agent-infra/comparison-matrix.md)) — web-search 2–3 related sources, compare SCQA across sources, identify consensus vs divergence, synthesize integrated perspective.
|
|
117
|
+
- **Disconfirmation + per-part grounding (pre-synthesis gate)** — run at least one search that tries to *falsify* the leading takeaway (rule alternatives in/out, not only confirm), and ground each part of the reading goal in a retrieved source before writing it. Distinct from [`verify-before-complete`](../../../src/rules/verify-before-complete.md) (completion evidence).
|
|
117
118
|
|
|
118
119
|
### Step 4: Synthesize by Goal
|
|
119
120
|
|
|
@@ -81,6 +81,14 @@ and accessibility. The register changes which corpus selections are appropriate
|
|
|
81
81
|
(distinctive palette/typography in brand mode; predictable, semantic in product
|
|
82
82
|
mode). State the register in the Design Read line below.
|
|
83
83
|
|
|
84
|
+
**Embedded vs standalone (a third discriminator).** UI **embedded inside a host
|
|
85
|
+
surface** — a widget in a slide, a card in a chat, a panel in someone else's
|
|
86
|
+
app — follows a **flatter charter** than a greenfield standalone page:
|
|
87
|
+
restrained weights, hairline borders, no atmospherics/gradients/shadows that
|
|
88
|
+
would fight the host. Select the register per surface (embedded → flat;
|
|
89
|
+
standalone → the brand/product register above) — it is a selector, not a fixed
|
|
90
|
+
token set (no values vendored; the host's tokens win).
|
|
91
|
+
|
|
84
92
|
## Design Read — articulate intent before generating
|
|
85
93
|
|
|
86
94
|
Before producing any design brief or making any style selection, emit one
|
|
@@ -103,7 +111,8 @@ If `DESIGN.md` declares `## Taste Dials`, use those values. Otherwise infer
|
|
|
103
111
|
three 1–10 dials from the brief and append them to the Design Read line
|
|
104
112
|
(`… · dials V/M/D = 6/3/4`) so the user can correct them; on confirmation,
|
|
105
113
|
suggest persisting to `DESIGN.md` (via `design-system-capture`). Dials are a
|
|
106
|
-
config, not a vibe — never re-infer when `DESIGN.md` already sets them
|
|
114
|
+
config, not a vibe — never re-infer when `DESIGN.md` already sets them
|
|
115
|
+
(no drift across sessions).
|
|
107
116
|
|
|
108
117
|
**Dial Inference Table** (brief signal → Variance / Motion / Density, 1–10):
|
|
109
118
|
|
|
@@ -115,15 +124,15 @@ config, not a vibe — never re-infer when `DESIGN.md` already sets them.
|
|
|
115
124
|
| data-dense / dashboard / admin / cockpit | 4–6 | 2–3 | 7–9 |
|
|
116
125
|
| bold / playful / expressive / awards / Dribbble | 8–10 | 7–10 | 3–5 |
|
|
117
126
|
|
|
118
|
-
**Dial → downstream levers
|
|
127
|
+
**Dial → downstream levers** (how a dial value changes generation):
|
|
119
128
|
|
|
120
129
|
| Dial | Low (1–3) | High (8–10) |
|
|
121
130
|
|---|---|---|
|
|
122
131
|
| Variance | symmetric grids, one layout family | asymmetry, varied layout families, off-grid accents |
|
|
123
|
-
| Motion | static / reduced-motion
|
|
124
|
-
| Density | generous whitespace, large spacing scale | tight spacing scale, more
|
|
132
|
+
| Motion | static / `prefers-reduced-motion`-first, opacity-only | choreographed scroll/stagger (still GPU-only, still reduced-motion alt) |
|
|
133
|
+
| Density | generous whitespace, large spacing scale, few items/viewport | tight spacing scale, more information per viewport |
|
|
125
134
|
|
|
126
|
-
Dials persist in `DESIGN.md`; stack executors (`tailwind-engineer`,
|
|
135
|
+
Dials persist in `DESIGN.md`; the stack executors (`tailwind-engineer`,
|
|
127
136
|
`react-shadcn-ui`, `blade-ui`, `flux`) read `DESIGN.md` and honour them.
|
|
128
137
|
|
|
129
138
|
**Anti-Default Discipline — first-impulse check:** Before committing to any design direction, verify you are NOT defaulting to:
|
|
@@ -140,12 +149,13 @@ If any of these was the first impulse, name a different direction or explicitly
|
|
|
140
149
|
When the brief maps to an official design system (Material Design, Fluent,
|
|
141
150
|
Carbon, Polaris, GOV.UK, shadcn, Tailwind UI, Radix, etc.):
|
|
142
151
|
|
|
143
|
-
0. **Canon grounding first.**
|
|
144
|
-
signal one (`@mui/material`, `antd`, `@fluentui/*`,
|
|
145
|
-
`@atlaskit/*`)
|
|
152
|
+
0. **Canon grounding first.** If the brief names a system OR
|
|
153
|
+
`components.json`/deps signal one (`@mui/material`, `antd`, `@fluentui/*`,
|
|
154
|
+
`@carbon/*`, `@atlaskit/*`), pull
|
|
146
155
|
[`docs/guidelines/design-canon.md`](../../../docs/guidelines/design-canon.md),
|
|
147
|
-
surface the matching one-
|
|
148
|
-
committing to the system's conventions
|
|
156
|
+
surface the matching one-line summary, and **offer to fetch the live spec**
|
|
157
|
+
before committing to the system's conventions — rather than improvising.
|
|
158
|
+
The canon index is thin + lazy: do not load it for a generic, unnamed brief.
|
|
149
159
|
1. **Install the real package** — do not hand-recreate its CSS or components.
|
|
150
160
|
Surface the install command for the project's package manager (the
|
|
151
161
|
system's official package, e.g. the shadcn CLI or the `@mui/material`
|
|
@@ -158,8 +168,8 @@ Carbon, Polaris, GOV.UK, shadcn, Tailwind UI, Radix, etc.):
|
|
|
158
168
|
(see Design Read above); never fall back to an unnamed generic aesthetic
|
|
159
169
|
(per `source-discovery-gate`: real source before guessing).
|
|
160
170
|
|
|
161
|
-
**Grounding precedence** (
|
|
162
|
-
confirmed session decisions > named canon
|
|
171
|
+
**Grounding precedence** (consistent with `brand-source-of-truth`): consumer
|
|
172
|
+
brand tokens > confirmed session decisions > named canon
|
|
163
173
|
([`design-canon.md`](../../../docs/guidelines/design-canon.md)) > generated
|
|
164
174
|
corpus. Canon is a gap-filler, never an override of a registered brand value.
|
|
165
175
|
|
|
@@ -267,6 +277,33 @@ guidance + docs URLs from here instead of memory.
|
|
|
267
277
|
already covers — audit findings outrank corpus suggestions.
|
|
268
278
|
- Do NOT hide low confidence — the user signs off on the gaps too.
|
|
269
279
|
|
|
280
|
+
## Diagram-type routing — route on the verb
|
|
281
|
+
|
|
282
|
+
Choose a visualization by the *intent verb*, not the noun. Count the nouns
|
|
283
|
+
before you draw (input-complexity triage): 1–2 → inline prose or a single
|
|
284
|
+
shape; 3–7 → one diagram; 8+ → split or summarize, never one dense picture.
|
|
285
|
+
|
|
286
|
+
| The user asks… | Intent | Draw |
|
|
287
|
+
|---|---|---|
|
|
288
|
+
| "how does X **work** / flow" | illustrative (intuition) | flowchart / sequence — illustrative default |
|
|
289
|
+
| "what is X's **architecture** / structure" | reference (structural) | structural diagram (boxes + typed edges) |
|
|
290
|
+
| a **cycle** / loop / lifecycle | — | a **stepper widget**, never a hand-drawn ring |
|
|
291
|
+
| a **DB schema / ERD** / entity relations | — | **mermaid**, never hand-placed SVG |
|
|
292
|
+
|
|
293
|
+
### Geometric pre-checks (run BEFORE finalizing an SVG/diagram)
|
|
294
|
+
|
|
295
|
+
Ranked by failure rate — procedures, not constants:
|
|
296
|
+
|
|
297
|
+
1. **viewBox safety** — compute the lowest + rightmost element (plus a buffer)
|
|
298
|
+
and set the viewBox from that; never assume the default fits.
|
|
299
|
+
2. **arrow-through-box trace** — trace every arrow's path and confirm it does
|
|
300
|
+
not cross through an unrelated box before drawing it.
|
|
301
|
+
3. **box-width-from-longest-label** — size each box from its longest label
|
|
302
|
+
before placing it, so text never overflows.
|
|
303
|
+
|
|
304
|
+
(Reference-only: any color/easing/frame values come from the consumer's tokens
|
|
305
|
+
or a maintained upstream — this skill vendors no drawn-asset corpus.)
|
|
306
|
+
|
|
270
307
|
## Interplay (who owns what)
|
|
271
308
|
|
|
272
309
|
| Concern | Owner |
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "design-intelligence",
|
|
3
|
+
"_calibration": "Behavioural fixtures (road-to-skill-eval-coverage Phase 2, rich set). Deterministic `contains` asserts the WCAG-checked-token property the skill promises; the rubric (pinned-judge known-limit) checks the corpus-grounding — a grounded brief names a concrete style/palette/type decision, not arbitrary taste.",
|
|
4
|
+
"scenarios": [
|
|
5
|
+
{
|
|
6
|
+
"id": "grounded-brief-fintech-dashboard",
|
|
7
|
+
"prompt": "Give me a grounded design brief (style, color tokens, typography, layout pattern) for a serious fintech analytics dashboard. Justify the palette's contrast.",
|
|
8
|
+
"assertions": [
|
|
9
|
+
{ "kind": "contains", "value": "WCAG" },
|
|
10
|
+
{ "kind": "rubric", "criterion": "Selects a concrete named style/archetype + a specific palette and type pairing grounded in the design corpus (not arbitrary), and states at least one anti-pattern to avoid." }
|
|
11
|
+
]
|
|
12
|
+
}
|
|
13
|
+
]
|
|
14
|
+
}
|
|
@@ -13,6 +13,12 @@ packs:
|
|
|
13
13
|
|
|
14
14
|
## When to use
|
|
15
15
|
|
|
16
|
+
> **Render-verification gate.** A UI verdict is gated on the
|
|
17
|
+
> [design-artifact verification checklist](../../../docs/contracts/design-artifact-verification.md#verification-checklist):
|
|
18
|
+
> where render capability exists, do not pass a design task without render
|
|
19
|
+
> evidence (checklist steps 1–5); where it is absent, scope the verdict to what
|
|
20
|
+
> was statically checked and say so — never "looks good" without evidence.
|
|
21
|
+
|
|
16
22
|
Use this skill when:
|
|
17
23
|
- Reviewing pull requests with UI changes
|
|
18
24
|
- Auditing frontend components for design quality
|
|
@@ -279,6 +285,18 @@ This is especially useful when the user provides a screenshot or Figma export as
|
|
|
279
285
|
- WCAG
|
|
280
286
|
- responsive
|
|
281
287
|
|
|
288
|
+
## Async-verifier pattern (keep the main context clean)
|
|
289
|
+
|
|
290
|
+
For a review that needs browser probing, use an **async background verifier**
|
|
291
|
+
rather than self-screenshotting inline: fork a verifier subagent with its own
|
|
292
|
+
view — it takes the screenshots, probes viewports, and checks states, then
|
|
293
|
+
**stays silent on pass and surfaces only real, actionable problems** (never
|
|
294
|
+
nitpicks). The main agent does not self-screenshot, so its context stays clean
|
|
295
|
+
for the actual review reasoning. This is an orchestration pattern —
|
|
296
|
+
dispatch it via [`subagent-orchestration`](../subagent-orchestration/SKILL.md)
|
|
297
|
+
and position it against [`verify-repair-loop`](../verify-repair-loop/SKILL.md)
|
|
298
|
+
(the existing verify skill); it complements them, it does not duplicate them.
|
|
299
|
+
|
|
282
300
|
## Gotcha
|
|
283
301
|
|
|
284
302
|
- Don't review design without understanding the user's constraints (time, resources, scope).
|
|
@@ -289,27 +307,29 @@ This is especially useful when the user provides a screenshot or Figma export as
|
|
|
289
307
|
|
|
290
308
|
Hybrid: a deterministic detector does the mechanical pattern-matching (zero
|
|
291
309
|
token cost, no catalog reload); you do the judgment it cannot. After the
|
|
292
|
-
structured phases, add an **Anti-Slop Check** section:
|
|
310
|
+
structured review phases, add an explicit **Anti-Slop Check** section:
|
|
293
311
|
|
|
294
|
-
1. **Run the detector first** — catches pattern-detectable
|
|
295
|
-
eyeball or re-derive:
|
|
312
|
+
1. **Run the deterministic detector first** — it catches the pattern-detectable
|
|
313
|
+
tells so you don't eyeball or re-derive them:
|
|
296
314
|
```
|
|
297
315
|
npx tsx src/scripts/lint_design_slop.ts --dir <consumer-ui-path> --json
|
|
298
316
|
```
|
|
299
|
-
Each finding
|
|
300
|
-
(`P0`–`P3`), `file:line`, `message`. **Cite
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
`
|
|
304
|
-
|
|
317
|
+
Each finding carries `rule` (e.g. `slop-v1-side-stripe`), `catalogId`
|
|
318
|
+
(`V1`), `severity` (`P0`–`P3`), `file:line`, and a `message`. **Cite these
|
|
319
|
+
verbatim** (rule-id + catalogId + file:line) — do not re-describe them from
|
|
320
|
+
the prose catalog. Findings are *rebuttable presumptions*: a finding the
|
|
321
|
+
consumer's `DESIGN.md` gate suppresses is already filtered out; a remaining
|
|
322
|
+
finding means the project has not declared the pattern as intentional.
|
|
323
|
+
`lint_design_slop` is **flags, never a block** (default exit 0; CI opts into
|
|
324
|
+
failure via `--fail-on`).
|
|
305
325
|
2. **Judge what the detector cannot** — load
|
|
306
326
|
[`docs/guidelines/design-antipatterns.md`](../../../docs/guidelines/design-antipatterns.md)
|
|
307
|
-
for tells
|
|
308
|
-
three-identical-card grid, V2 glassmorphism intent). List any
|
|
309
|
-
ID, check the override.
|
|
310
|
-
3. Run the AI-slop originality self-test on the overall direction.
|
|
311
|
-
pass / flag / fail
|
|
312
|
-
does not make.
|
|
327
|
+
for the tells that need structural/aesthetic judgment (e.g. T3 icon-tile
|
|
328
|
+
stack, L2 three-identical-card grid, V2 glassmorphism intent). List any that
|
|
329
|
+
appear, cite by entry ID, and check the override condition.
|
|
330
|
+
3. Run the AI-slop originality self-test on the overall aesthetic direction.
|
|
331
|
+
Report the result (pass / flag / fail) with one sentence of evidence — this
|
|
332
|
+
is the human judgment the detector deliberately does not make.
|
|
313
333
|
|
|
314
334
|
For the **objective quality floors** (WCAG contrast, font-size, line-length,
|
|
315
335
|
reduced-motion, heading hierarchy, focus indicator), do NOT eyeball them —
|
|
@@ -194,30 +194,37 @@ Example: "Dashboard = control panel for power users, not an exploration space."
|
|
|
194
194
|
|
|
195
195
|
## Importing an extracted design system
|
|
196
196
|
|
|
197
|
-
A consumer reverse-
|
|
198
|
-
and
|
|
199
|
-
|
|
200
|
-
font-bundler, or a `.skill`
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
brand
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
197
|
+
A consumer can reverse-engineer an existing site/repo's look-and-feel with any
|
|
198
|
+
external static-extraction tool and hand the result to this skill as a
|
|
199
|
+
`design-system.json` artifact. We own the **import contract**, not the crawler:
|
|
200
|
+
the package never ships the Playwright runtime, a font-bundler, or a `.skill`
|
|
201
|
+
auto-installer (out of scope). Full schema is lazy-loaded from
|
|
202
|
+
[`reference/design-system-json.md`](reference/design-system-json.md) — read it
|
|
203
|
+
only when an import is requested.
|
|
204
|
+
|
|
205
|
+
**Import procedure:**
|
|
206
|
+
|
|
207
|
+
1. Read `design-system.json`; reject it if `source` (kind + ref + captured_at)
|
|
208
|
+
is missing — no provenance, no import.
|
|
209
|
+
2. Diff every field against the current `DESIGN.md`.
|
|
210
|
+
3. Surface a **per-field confirm/merge proposal** — the artifact is *observed,
|
|
211
|
+
not authoritative* (mirrors `source-discovery`). Never write silently.
|
|
212
|
+
4. **Conflict with a registered brand value** (a confirmed `.tokens.json` /
|
|
213
|
+
brand token) → **flag, never auto-apply** (`brand-source-of-truth`:
|
|
214
|
+
consumer brand wins). Precedence: brand tokens > confirmed `DESIGN.md` >
|
|
215
|
+
imported observation.
|
|
216
|
+
5. On the human's accept, persist the chosen fields into `DESIGN.md`. Where the
|
|
217
|
+
consumer wants a token source of truth, hand the mapped DTCG fields to
|
|
218
|
+
[`brand-to-tokens`](../brand-to-tokens/SKILL.md) / `design-tokens` to
|
|
219
|
+
materialise `.tokens.json` — do not invent a parallel token format.
|
|
220
|
+
|
|
221
|
+
**Two sources, one shape:**
|
|
222
|
+
|
|
223
|
+
- **External target** (a site/repo you don't own) → an external tool emits the
|
|
224
|
+
artifact; import it here.
|
|
225
|
+
- **Current repo** → prefer [`existing-ui-audit`](../existing-ui-audit/SKILL.md);
|
|
226
|
+
it already inventories the codebase and can emit the same `design-system.json`
|
|
227
|
+
shape, so the import path is identical either way.
|
|
221
228
|
|
|
222
229
|
## How the design skills consume these documents
|
|
223
230
|
|
|
@@ -237,6 +244,59 @@ The boundary from `brand-to-tokens`:
|
|
|
237
244
|
not 4px or 12px)
|
|
238
245
|
Both are consumed together; DESIGN.md takes precedence for usage questions.
|
|
239
246
|
|
|
247
|
+
## Design→dev handoff README (template)
|
|
248
|
+
|
|
249
|
+
When handing a design to implementation, emit a README a developer can build
|
|
250
|
+
from **without the mockup open**. Template only — no vendored values (tokens
|
|
251
|
+
come from the consumer's `.tokens.json` / DESIGN.md):
|
|
252
|
+
|
|
253
|
+
```markdown
|
|
254
|
+
# <Feature> — implementation handoff
|
|
255
|
+
|
|
256
|
+
Fidelity: <hi-fi = pixel-recreate the mockup | lo-fi = apply the codebase's
|
|
257
|
+
existing design system, mockup is directional only>
|
|
258
|
+
|
|
259
|
+
## Screens
|
|
260
|
+
- <screen>: components used + each component's states (default/hover/active/
|
|
261
|
+
disabled/empty/error/loading)
|
|
262
|
+
|
|
263
|
+
## Interactions
|
|
264
|
+
- <interaction>: trigger → result, duration + easing (name the token, not a ms
|
|
265
|
+
literal)
|
|
266
|
+
|
|
267
|
+
## Tokens
|
|
268
|
+
- Color / type / spacing / radius: reference DESIGN.md / .tokens.json — do not
|
|
269
|
+
inline hex or px
|
|
270
|
+
|
|
271
|
+
## Done means
|
|
272
|
+
- Implementable from this README alone; every state and interaction named.
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
Fidelity declaration is load-bearing: hi-fi vs lo-fi tells the dev whether to
|
|
276
|
+
recreate the mockup pixel-for-pixel or apply the existing system — the single
|
|
277
|
+
most common handoff ambiguity.
|
|
278
|
+
|
|
279
|
+
## Design-system extraction floor
|
|
280
|
+
|
|
281
|
+
When the goal is to extract this repo's design system as a **reusable package
|
|
282
|
+
artifact** (not just DESIGN.md prose), the extraction meets this floor — the
|
|
283
|
+
handoff shape emitted alongside `design-system.json`
|
|
284
|
+
([import contract](reference/design-system-json.md)).
|
|
285
|
+
|
|
286
|
+
- **Contract contents.** A complete extraction carries: a root guide / manifest;
|
|
287
|
+
token CSS (or the stack's equivalent); the typography / colour / spacing /
|
|
288
|
+
iconography foundations; component specimens; an asset inventory (logos, icons,
|
|
289
|
+
fonts); UI-kit screens; and starting-point templates where appropriate.
|
|
290
|
+
- **Specimen granularity.** Many small foundation cards beat one dense dump —
|
|
291
|
+
each specimen demonstrates ONE reusable sub-concept (a single button state,
|
|
292
|
+
one spacing step, one elevation level), so a consumer lifts concepts
|
|
293
|
+
individually rather than parsing a monolith.
|
|
294
|
+
- **Developer handoff bundle** (extends § Design→dev handoff README): a
|
|
295
|
+
high-fidelity reference, behaviour notes, the assets list, the component
|
|
296
|
+
mapping (design name → code component), responsive states, known caveats, and
|
|
297
|
+
— when the artifact is a mock — an explicit "prototype, not production code"
|
|
298
|
+
warning so a consumer never ships the reference verbatim.
|
|
299
|
+
|
|
240
300
|
## Gotcha
|
|
241
301
|
|
|
242
302
|
- **Over-writing instead of diff-updating** — the most common failure.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "design-system-capture",
|
|
3
|
+
"_calibration": "Behavioural fixtures (road-to-skill-eval-coverage Phase 2, rich set). Deterministic `contains` asserts the two artifacts the skill's contract maintains (DESIGN.md + PRODUCT.md); the rubric checks it captures decisions rather than re-describing generic guidance.",
|
|
4
|
+
"scenarios": [
|
|
5
|
+
{
|
|
6
|
+
"id": "capture-from-repo",
|
|
7
|
+
"prompt": "Capture this project's design system so future sessions stay consistent: it uses a 4px spacing grid, 8px radius, a spring motion strategy, and a blue primary. Where do these decisions go?",
|
|
8
|
+
"assertions": [
|
|
9
|
+
{ "kind": "contains", "value": "DESIGN.md" },
|
|
10
|
+
{ "kind": "contains", "value": "PRODUCT.md" },
|
|
11
|
+
{ "kind": "rubric", "criterion": "Routes the visual decisions (spacing/radius/motion/color) into DESIGN.md and interaction patterns into PRODUCT.md, and flags any TBD rather than inventing values." }
|
|
12
|
+
]
|
|
13
|
+
}
|
|
14
|
+
]
|
|
15
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "developer-like-execution",
|
|
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": "execute-like-dev",
|
|
7
|
+
"prompt": "Implement this small change end-to-end the way a senior would.",
|
|
8
|
+
"assertions": [
|
|
9
|
+
{
|
|
10
|
+
"kind": "rubric",
|
|
11
|
+
"criterion": "Reads before editing, keeps the diff minimal + scoped, updates downstream callers/tests, and verifies with a real run before claiming done."
|
|
12
|
+
}
|
|
13
|
+
]
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
}
|
|
@@ -13,6 +13,12 @@ packs:
|
|
|
13
13
|
|
|
14
14
|
## When to use
|
|
15
15
|
|
|
16
|
+
> **Cross-surface handoff.** When this document consumes upstream work (research
|
|
17
|
+
> → document, spreadsheet → report), read the handoff envelope from
|
|
18
|
+
> [`surface-agent-contracts`](../../../docs/contracts/surface-agent-contracts.md#cross-surface-handoff-envelope):
|
|
19
|
+
> trust `verification_already_done`, honour source restrictions, and don't
|
|
20
|
+
> re-fetch what the source already grounded.
|
|
21
|
+
|
|
16
22
|
Use this skill when:
|
|
17
23
|
|
|
18
24
|
* User starts a substantial writing task — PRD, RFC, design doc, decision doc, technical spec, proposal
|
|
@@ -40,6 +46,27 @@ Move from a fuzzy ask to a complete document the user owns, by:
|
|
|
40
46
|
* `save-file` and `str-replace-editor` available
|
|
41
47
|
* Target path and filename agreed up front
|
|
42
48
|
|
|
49
|
+
## Document format & export floor
|
|
50
|
+
|
|
51
|
+
The document surface's floor (per
|
|
52
|
+
[`surface-agent-contracts`](../../../docs/contracts/surface-agent-contracts.md)):
|
|
53
|
+
|
|
54
|
+
- **Choose the format by intent.** Markdown vs `.docx` vs PDF follows what the
|
|
55
|
+
user will DO with it — when a named format is requested, produce THAT format
|
|
56
|
+
via the document tooling; never silently substitute markdown for a `.docx`
|
|
57
|
+
request. (fixture: `ssac-docx-requested-markdown-only`.)
|
|
58
|
+
- **Preserve edit scope.** On an edit, change only what was asked and preserve
|
|
59
|
+
the rest of the document (mirrors
|
|
60
|
+
[`minimal-safe-diff`](../../rules/minimal-safe-diff.md)).
|
|
61
|
+
- **Print/PDF preserves selectable text.** Never rasterize a text-heavy document
|
|
62
|
+
to an image-only PDF when browser print or native export keeps the text
|
|
63
|
+
selectable. (fixture: `ssac-pdf-screenshot-rasterized`.)
|
|
64
|
+
- **Verify the output opens/exports.** Confirm the generated file opens /
|
|
65
|
+
round-trips
|
|
66
|
+
([`design-artifact-verification`](../../../docs/contracts/design-artifact-verification.md));
|
|
67
|
+
where the format's tooling is absent, ship the source + say what could not be
|
|
68
|
+
verified rather than claiming a produced file.
|
|
69
|
+
|
|
43
70
|
## Procedure
|
|
44
71
|
|
|
45
72
|
### 0. Inspect existing material
|