Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .agents/skills/uloop-hot-reload/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ automatically — pass it with `--files`.
| `--files` | array | - | Project-relative `.cs` paths to hot-reload (method bodies, added members, and new top-level types). When omitted or empty on apply, selects compiled snapshot sources only — those whose bytes changed since the last compile snapshot, capped at 50 changed files per assembly with a warning when the cap trims the list; a file that has never been compiled is never selected and must be passed explicitly; run `uloop compile` first when no snapshot exists, or pass explicit paths when no changed source is found |
| `--revert-all` | flag | - | Remove every active hot-reload patch and added member and clear the ledger; introduced types stay loaded until the next domain reload. When set, `--files` is ignored |
| `--status` | flag | - | Lists the currently active changes (patched methods, added members, and introduced types) without applying or reverting anything. |
| `--compile-on-skip` | enum | `auto` | When the run leaves edits unapplied (Skipped or Failed methods, Failed type declarations), run `uloop compile` in the same command: `auto` only in Edit Mode (never stops a Play session), `on` always, `off` never. The response's `CompileFallback` says which; when the compile ran, `Compile` carries its result and `Success` is the compile's. |
| `--compile-on-skip` | enum | `auto` | When the run leaves edits unapplied (Skipped or Failed methods, Failed type declarations), run `uloop compile` in the same command: `auto` only in Edit Mode (never stops a Play session), `on` always unless Unity holds compiles until Play ends, `off` never. The response's `CompileFallback` says which; when the compile ran, `Compile` carries its result and `Success` is the compile's. |

## Status

Expand Down Expand Up @@ -74,8 +74,8 @@ changed are patched (`UnchangedTotal` counts the rest).
- Signature changes: a return-type change is `Skipped` unless this reload or an earlier one
patched every live compiled caller of the old signature; a rename or parameter change
applies as an added method and warns about the call sites left on the old signature.
- Constructors, operators, compiled setter/init/indexer accessors, and event accessors are
`Skipped`; finalizers and interface members are silently not applied.
- Constructors, operators, struct methods, compiled setter/init/indexer accessors, and event
accessors are `Skipped`; finalizers and interface members are silently not applied.
- A reload applies each file all-or-nothing: a `Failed` method leaves that file unapplied,
a `Failed` type leaves every file of its assembly unapplied.

Expand Down
11 changes: 8 additions & 3 deletions .agents/skills/uloop-hot-reload/references/introduced-types.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@ apply, and patches from earlier reloads stay active:
nothing for it. Not an error. Editing only the bodies of its ordinary methods keeps this row
and patches those bodies on the artifact that already carries the type. Ordinary methods,
fields and properties added to the type keep it as well and are applied as `Added` rows.
A struct is the exception: its method bodies are `Skipped` ("Struct (value type) methods are
skipped…") on an introduced struct as on a compiled one, so a struct body edit needs
`uloop compile`.
- `Failed` — refused; see the table above.
- `ActiveIntroducedTypeTotal` counts the types the domain holds after the run, whatever the
methods did. Type rows never count toward `PatchedTotal`, `ActivePatchTotal`,
Expand All @@ -63,8 +66,9 @@ later apply re-introduces them. With Enter Play Mode Options set to disable Doma
active changes and the introduced types survive Play entry and nothing is recorded as dropped.

Values are not preserved across the reload that ends a type's life. Body-only edits of an
introduced type's ordinary methods are patched on the artifact assembly, and added ordinary
methods, fields and properties are applied as `Added` rows. Constructor, accessor and
introduced type's ordinary methods are patched on the artifact assembly (except on a struct,
whose method bodies are `Skipped`), and added ordinary methods, fields and properties are
applied as `Added` rows. Constructor, accessor and
initializer bodies, member removals, signature changes, and added constructors, operators,
events, indexers or nested types still require a compile.

Expand All @@ -73,7 +77,8 @@ events, indexers or nested types still require a compile.
Any refused shape above; use of the type from another assembly, from a file that is neither
passed to this reload nor already hot-reloaded, or from `uloop execute-dynamic-code`; anything
that reaches the type through Unity (serialization, `[SerializeField]`, Inspector,
`AddComponent`, `CreateInstance`, message discovery); a call to a member an earlier or the same
`AddComponent`, `CreateInstance`, message discovery); a method body edit of an introduced
struct, which is `Skipped` like any struct method; a call to a member an earlier or the same
reload *added* to a compiled type (an `Added` row), because introduced types compile against the
compiled assemblies and retained artifacts only, so the compile fails naming the missing member;
and any new or changed `.asmdef` / `.asmref`. When `execute-dynamic-code` fails on an introduced
Expand Down
Loading
Loading