Files
ue-toolchain/plugins/ue-design-skills
MagentaDolphin 433ee61131 feat(gate): P17 keeps the engine tool surface out of skill content
The first-party agent-tool layer is Experimental and its surface moves between
builds. A recipe that names a toolset does not fail loudly on the next build --
the tool is simply absent, the search finds nothing, and "nothing found" reads
as "no problem here". That is the exact confusion this bundle documents, so the
tokens are barred rather than discouraged.

Grounded in measurement against a live editor, not in reading:
- the aggregator plugin lists 21 dependencies; the server reported 53
  registered toolsets from 22 plugins, one dependency contributing none;
- the visible tool count flips between 3 meta-tools and every tool registered
  natively, on one project setting.

- gate.py: ENGINE_TOOL_TOKENS and check_engine_tool_surface, registered in
  CHECKS; rule floor raised to 17.
- test_gate.py: one poison naming a toolset, a meta-tool and a host:port.
- ADR-0004 records the decision, its confirmation criteria and what is
  deliberately deferred.
- README and CONTRIBUTING state the rule where a contributor meets it.

Verified: gate.py 0 violations over 17 rules; test_gate.py 17/17 redden on
their fixtures, baseline clean, surface coverage intact. The token list matches
nothing under skills/ today, checked before the rule landed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-06 00:00:59 +07:00
..

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.

What is in the box

catalog.json is the index. It is plain JSON with no vendor vocabulary:

{ "skills": [ { "id": "...", "entry": "skills/<id>/SKILL.md", "use_when": "..." } ] }

Each skill is a directory:

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; see 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.