Files
ue-toolchain/plugins/ue-design-skills/README.md
T
ue-toolchain dab3f35079 feat(skills): ship ue-design-skills bundle, licensing and delivery gate
Phase 0 of the handoff plan, as a marketplace rather than a flat skills/
directory. Content moved out of the LyraResearch archive and depersonalised:
addresses stay in the archive, recipes ship.

- plugins/ue-design-skills: 17 skills, 232 failure-mode entries, each with the
  six required fields; catalog.json as the harness-neutral source of truth and
  .claude-plugin/ as one adapter over it.
- _gate: 16 rules, one poisoned fixture per rule, plus surface coverage so a
  declared file cannot silently miss the line rules.
- ADR-0002 (harness-neutral bundle behind a marketplace) and ADR-0003 (split
  licensing: CC BY-ND 4.0 prose, Apache-2.0 code and metadata).
- LICENSE files at both levels, CONTRIBUTING.md, docs/licensing-options.md as
  the material the licence decision grew from.

Verified: gate.py 0 violations; test_gate.py 16/16 rules redden on their
fixtures with a clean baseline and 2 root files reaching the line rules.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-05 23:48:55 +07:00

123 lines
4.9 KiB
Markdown

# ue-design-skills
Design-review skills for Unreal Engine 5.6 projects: norms for how to build a
system, plus reproducible recipes for finding the failures that never announce
themselves.
Every claim here came out of a line-by-line audit of a large first-party
reference project. What ships is not the audit — it is the recipe. See
[Provenance](#provenance).
## What is in the box
`catalog.json` is the index. It is plain JSON with no vendor vocabulary:
```json
{ "skills": [ { "id": "...", "entry": "skills/<id>/SKILL.md", "use_when": "..." } ] }
```
Each skill is a directory:
```text
skills/<skill-id>/
├── SKILL.md YAML frontmatter + normative body
└── references/
├── patterns.md worked classification, measured scale, hygiene
└── failure-modes.md entries with a Detect recipe you can run
```
## Using it without any particular agent runtime
Nothing here needs a specific harness. Three ways in, cheapest first:
1. **Read it.** `SKILL.md` is Markdown. Open it.
2. **Load it as context.** Point your agent at `skills/<id>/` — the frontmatter
`description` says when the skill applies, `use_when` in `catalog.json` says
the same thing in one line for routing.
3. **Route on the catalog.** Parse `catalog.json`, match `use_when` against the
task, load the matching `entry`.
Skill content is checked to contain no harness-specific tokens, so a recipe that
works for one agent works for the next. The manifest under `.claude-plugin/` is
one adapter over this catalog, not the source of truth; adding another adapter
does not touch `skills/`.
## Reading a failure-mode entry
Each entry carries six fields, in this order:
| Field | What it answers |
|---|---|
| **Mechanism** | what the code actually does |
| **Why it is silent** | why nothing crashes, logs or fails a test |
| **Why the obvious check misses it** | which natural search returns the wrong answer |
| **Symptom** | what a human reports, in their words |
| **Detect** | a command you run against your own tree |
| **Guardrail** | the rule that stops it recurring |
The three middle fields are the point. Anyone can write "check that fields have
writers"; only someone who did the work can say why `grep` answers "yes" when the
truth is "no".
## Detect recipes are meant to be run, not admired
Every recipe was executed against the reference project before shipping. That
caught two recipes which returned the wrong answer in exactly the case they were
written for — a member declared with an initializer matches every assignment
pattern you can write, and a character class containing `>` matches the `->`
operator. Both are documented in place, because the trap teaches more than the
command.
If a recipe returns nothing in your tree, widen it before concluding the problem
is absent. **An empty search result proves the pattern, not the absence.**
## What this bundle does not claim
- It is not a defect list for any current engine version. It is a worked example
of a classification, measured once, on one version, in one workspace.
- Entries are evidence about *shapes*, not guarantees about your code.
- The delivery gate checks form — no absolute paths, no dangling links, no
missing fields. It cannot check whether an entry is true.
## Provenance
The material comes from a research project that read Epic's Lyra Starter Game on
Unreal Engine 5.6 as source rather than running it. Source addresses stay in that
archive: an address in a tree you do not have is not actionable, and a recipe is.
Entry identifiers (`RA-01` and up) resolve to the audited locations in the
archive, so any specific claim can be produced on request.
## License
Copyright (c) 2026 MagentaDolphin. The prose is
[CC BY-ND 4.0](https://creativecommons.org/licenses/by-nd/4.0/); see
[LICENSE](LICENSE) for the exact boundary and the permissions that widen it.
In short:
| | |
|---|---|
| Read it, apply it, run the recipes on your code | yes, commercial work included |
| Edit it privately for your studio | yes, no permission needed |
| Redistribute it unchanged | yes, with attribution |
| Publish a modified version as your own product | no |
| Anything you build with it | yours, no claim made |
Four things are deliberately outside the NoDerivatives restriction, and all four
are Apache-2.0 or explicitly granted: `catalog.json` and
`.claude-plugin/plugin.json`, everything under `_gate/`, the shell commands
inside `Detect` fields, and format adapters and translations. The reasoning is
in `LICENSE` next to each grant — a bundle that tells you to verify every recipe
against your own tree cannot also forbid you to publish the correction.
### A request, not a condition
If these skills helped you ship something, a credit is welcome:
> ue-design-skills by MagentaDolphin
Nothing obliges you to give one. Attribution is required only when you
redistribute the material itself, and that requirement lives in the license
rather than here.