UE5 Phase Bans
Every skill you install argues for its own subject. A replication skill argues for
replication. An ability-system skill argues for abilities. Each argument is correct in
general and expensive right now, and no skill can tell you that, because no skill knows
your phase.
The result is the most common failure in agent-driven UE5 work: an agent that solves the
problem you have with the architecture of a problem you do not have yet. It is invisible
while it happens, because every individual decision looks like good engineering.
A ban is how the phase talks back.
Settle the ban list before the first feature
- Name the phase in one sentence — what this phase must prove, and what it does not
have to prove. A ban list without this is arbitrary.
- Ban by structural cost, not by taste. The test: if adopting it later means touching
every system you have already written, it is a ban candidate. If it is a container
choice or a naming convention, it is not.
- Write each ban with all four parts — banned thing, reason tied to this phase, what
to do instead, and the condition that lifts it. A ban missing "instead" gets
rationalized around, because the agent still has a real problem to solve. See
references/writing-a-ban.md.
- Start from the five defaults in
references/ban-catalog.md
and delete the ones that do not apply. Four are widely understood; the fifth — test
infrastructure past the minimum — is the one almost nobody bans and often the largest
unbanned cost.
- Record the result in the project context file via
ue5-project-context. A ban that
lives only in a chat message is not a ban.
- Adjudicate conflicts in favor of the ban, and log them. The procedure is in
references/writing-a-ban.md — follow the ban, record one
line, keep going. Do not stop to ask; the ban already is the answer.
Load only what applies:
references/ban-catalog.md — the five defaults, each with
its structural cost, the tell that it has been breached, and what lifts it.
references/writing-a-ban.md — the four-part row, worked
examples, conflict logging, and how to lift a ban without erasing the history.
references/breach-tells.md — symptoms that a ban is being
worked around rather than followed, and what each one means.
Required answer format
When this skill fires, return:
- Phase statement — one sentence: what this phase proves, and what it does not.
- Ban table — banned thing | reason tied to this phase | instead | lifts when.
- Explicitly not banned — systems considered and left available, with why. This
prevents the list from being read as "everything heavy is forbidden".
- Conflicts this session — any skill recommendation overridden by a ban, one line each.
- Breach findings — any tell from
references/breach-tells.md observed in the current
code, with the file that showed it.
- Lift candidates — bans whose condition now appears met, with the evidence.
Hard rules
- A ban outranks any installed skill, including a well-written one. Skill quality is not
evidence about your phase.
- Never ban without an alternative. "Do not use X" with no "use Y instead" is an
instruction to improvise, and improvisation is what the ban was supposed to prevent.
- Never ban without a lift condition. A ban that cannot be lifted reads as dogma, and the
next agent will route around it silently rather than argue.
- Do not ban cheap, reversible things. Every unnecessary row makes the load-bearing rows
less likely to be read.
- Lifting is a decision with a date and a reason, recorded by moving the row to a lifted
table — never by deleting it. A later reader must be able to tell "we chose to add this"
from "nobody thought about it".
- A ban overridden three times in one phase is not a discipline problem. It is evidence the
phase scope was drawn wrong; escalate it instead of enforcing harder.
Verification
Two checks, both cheap:
Grep check. For each banned system, grep the codebase for its signature symbols. A ban
on replication that returns hits in gameplay code has been breached. Record the command and
its output date next to the ban row; a ban nobody has checked is a hope.
Cold-agent check. Start a session with no history, give it the project context file and
a task that a banned system would naturally solve, and see what it proposes. If it proposes
the banned system, the ban's reason is not written clearly enough to survive contact with a
fresh reader — which is the only condition under which it matters.
Scope
This skill decides sequencing, not merit. Every system named here is legitimate and has a
phase in which it is right; nothing in the catalog is an argument that a system is bad.
It does not cover: engine feature maturity as a reason to avoid something (that is
ue5-feature-maturity-gate — a different question with a different lift condition), team
process or sprint planning, or dependency and third-party plugin policy.
1---2name: ue5-phase-bans3description: Decide which UE5 systems are deliberately out of scope for the current phase and write bans an agent will actually respect — replication and networking, ability and gameplay-effect frameworks, Mass Entity and ECS paths, World Partition and large-world streaming, and test infrastructure beyond the minimum. Use when starting a prototype or vertical slice, when an agent proposes a heavyweight subsystem for a small problem, when an installed skill recommends a system the phase does not need, when scope keeps growing without a decision, or when deciding whether a ban should now lift.4---56# UE5 Phase Bans78Every skill you install argues for its own subject. A replication skill argues for9replication. An ability-system skill argues for abilities. Each argument is correct in10general and expensive right now, and no skill can tell you that, because no skill knows11your phase.1213The result is the most common failure in agent-driven UE5 work: an agent that solves the14problem you have with the architecture of a problem you do not have yet. It is invisible15while it happens, because every individual decision looks like good engineering.1617A ban is how the phase talks back.1819## Settle the ban list before the first feature20211. **Name the phase in one sentence** — what this phase must prove, and what it does not22 have to prove. A ban list without this is arbitrary.232. **Ban by structural cost, not by taste.** The test: if adopting it later means touching24 every system you have already written, it is a ban candidate. If it is a container25 choice or a naming convention, it is not.263. **Write each ban with all four parts** — banned thing, reason tied to *this* phase, what27 to do instead, and the condition that lifts it. A ban missing "instead" gets28 rationalized around, because the agent still has a real problem to solve. See29 [`references/writing-a-ban.md`](references/writing-a-ban.md).304. **Start from the five defaults** in [`references/ban-catalog.md`](references/ban-catalog.md)31 and delete the ones that do not apply. Four are widely understood; the fifth — test32 infrastructure past the minimum — is the one almost nobody bans and often the largest33 unbanned cost.345. **Record the result** in the project context file via `ue5-project-context`. A ban that35 lives only in a chat message is not a ban.366. **Adjudicate conflicts in favor of the ban, and log them.** The procedure is in37 [`references/writing-a-ban.md`](references/writing-a-ban.md) — follow the ban, record one38 line, keep going. Do not stop to ask; the ban already is the answer.3940Load only what applies:4142- [`references/ban-catalog.md`](references/ban-catalog.md) — the five defaults, each with43 its structural cost, the tell that it has been breached, and what lifts it.44- [`references/writing-a-ban.md`](references/writing-a-ban.md) — the four-part row, worked45 examples, conflict logging, and how to lift a ban without erasing the history.46- [`references/breach-tells.md`](references/breach-tells.md) — symptoms that a ban is being47 worked around rather than followed, and what each one means.4849## Required answer format5051When this skill fires, return:52531. **Phase statement** — one sentence: what this phase proves, and what it does not.542. **Ban table** — banned thing | reason tied to this phase | instead | lifts when.553. **Explicitly not banned** — systems considered and left available, with why. This56 prevents the list from being read as "everything heavy is forbidden".574. **Conflicts this session** — any skill recommendation overridden by a ban, one line each.585. **Breach findings** — any tell from `references/breach-tells.md` observed in the current59 code, with the file that showed it.606. **Lift candidates** — bans whose condition now appears met, with the evidence.6162## Hard rules6364- A ban outranks any installed skill, including a well-written one. Skill quality is not65 evidence about your phase.66- Never ban without an alternative. "Do not use X" with no "use Y instead" is an67 instruction to improvise, and improvisation is what the ban was supposed to prevent.68- Never ban without a lift condition. A ban that cannot be lifted reads as dogma, and the69 next agent will route around it silently rather than argue.70- Do not ban cheap, reversible things. Every unnecessary row makes the load-bearing rows71 less likely to be read.72- Lifting is a decision with a date and a reason, recorded by moving the row to a lifted73 table — never by deleting it. A later reader must be able to tell "we chose to add this"74 from "nobody thought about it".75- A ban overridden three times in one phase is not a discipline problem. It is evidence the76 phase scope was drawn wrong; escalate it instead of enforcing harder.7778## Verification7980Two checks, both cheap:8182**Grep check.** For each banned system, grep the codebase for its signature symbols. A ban83on replication that returns hits in gameplay code has been breached. Record the command and84its output date next to the ban row; a ban nobody has checked is a hope.8586**Cold-agent check.** Start a session with no history, give it the project context file and87a task that a banned system would naturally solve, and see what it proposes. If it proposes88the banned system, the ban's reason is not written clearly enough to survive contact with a89fresh reader — which is the only condition under which it matters.9091## Scope9293This skill decides *sequencing*, not merit. Every system named here is legitimate and has a94phase in which it is right; nothing in the catalog is an argument that a system is bad.9596It does not cover: engine feature maturity as a reason to avoid something (that is97`ue5-feature-maturity-gate` — a different question with a different lift condition), team98process or sprint planning, or dependency and third-party plugin policy.