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>
This commit is contained in:
@@ -0,0 +1,122 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user