feat: compile-check closes its miss-side gaps and is shown as an ordinary command

Merged
HA
1d ago
+3959-285

Summary

uloop compile-check closes the remaining gaps on its miss side and is shown as an ordinary command: it is listed in --help, uloop list --names, shell completion, the README, and the glossary, and uloop skills install installs its skill. The decision and the exact guarantee are recorded in ADR 0018 (docs/adr/0018-compile-check-is-its-own-command-and-is-shown.md).

This is the integration branch feature/compile-check-visible (cut from main at e917059fd). Every change arrived through a reviewed pull request against the branch:

  • #3355 docs: ADR 0018 records that compile-check stays its own command and is shown
  • #3356 fix: a reference an assembly definition lost is detected and refused with COMPILE_CHECK_UNITY_BUILD_REQUIRED
  • #3357 feat: build settings that moved since the last Unity build are detected (a record written by the first run after a build; added scripting defines are checked one-way when ProjectSettings.asset was saved after that build)
  • #3358 feat: a dependent a run skips keeps its result, baseline and saved generator output; a dependent with analyzers and no saved generator output is compiled once rather than narrowed by name
  • #3359 fix: identifiers written with \u / \U escapes are read by the name index
  • #3360 feat: new scripts outside every assembly definition are compiled with the predefined assembly Unity assigns them (Assembly-CSharp and its Editor / firstpass siblings); the folders Unity's importer never compiles are left out
  • #3361 feat: compile-check is shown in help, list, completion, README, and skills
  • #3362 docs: the skill no longer says a skipped dependent is compiled in full next; a stale comment in the result store follows
  • #3363 fix: compile-check --help closes with the skill guidance line; the one-way define refusal names its part in the VibeLog

What stays undetected

ADR 0018 lists the remaining limitations (a) through (h): a generator reading a referenced assembly, async method builder changes, Unity versions without the Library/Bee build-trace files, settings changed before the record exists, new scripts in package folders without an assembly definition, analyzer configs added since the last build, Dedicated Server targets, and Unity 6 build profiles that override Player Settings. Each is also stated in docs/compile-check.md and the skill.

Verification

  • Every pull request passed its CI and an independent review; the Go modules pass gofmt, go vet, golangci-lint, and go test.
  • A final acceptance round on a large Unity 6 project (6000.3.15f1, hundreds of assemblies) ran eleven scenarios against a binary built from this branch: zero false errors and zero refusals that a subsequent uloop compile did not clear. The refusals for a lost assembly-definition reference, an added scripting define, and a removed scripting define all cleared as designed; new scripts outside assembly definitions compiled with Assembly-CSharp; a script under Assets/StreamingAssets/ was left out; a dependent of 1,293 sources kept its changed-files check after the run that skipped it.

Compatibility

  • No change to the IPC wire format: protocolVersion and REQUIRED_CLI_PROTOCOL_VERSION are untouched.
  • No C# change under Packages/src; the package change is the skill's frontmatter (internal: true removed) and its text.
  • cli/common changed, so the shared-inputs stamps of both native CLI components are updated by scripts/stamp-release-inputs.sh in the pull requests that changed it.
  • Release version fields and changelogs are untouched; release-please stamps them.