Skip to content

Migrate namespace from LightmapUvTool to SashaRX.UnityMeshLab - #106

Merged
SashaRX merged 21 commits into
mainfrom
claude/skills-overhaul-phase-0-Xrg7K
Apr 24, 2026
Merged

Migrate namespace from LightmapUvTool to SashaRX.UnityMeshLab#106
SashaRX merged 21 commits into
mainfrom
claude/skills-overhaul-phase-0-Xrg7K

Conversation

@SashaRX

@SashaRX SashaRX commented Apr 20, 2026

Copy link
Copy Markdown
Owner

Summary

  • Rename package namespace from LightmapUvTool to SashaRX.UnityMeshLab across all Editor C# files and asmdef
  • Update asmdef name and rootNamespace to match canonical SashaRX package conventions
  • Establish repo-conventions SKILL.md documenting identity, assemblies, and deviations from shared naming rules
  • Expand skill directory with comprehensive English-language guidance for Unity UPM package authoring, CI validation, and mutation safety
  • Archive pre-overhaul Russian-language skill descriptions for reference

Changed Zones

  • Editor/ — Namespace migration in all 40+ Editor C# files
  • package.json — (metadata, not shown in diff but referenced)
  • .claude/skills/ — New and updated skill documentation
  • AGENTS.md, CLAUDE.md — Updated namespace references

Checklist

  • All Editor C# files updated to SashaRX.UnityMeshLab namespace
  • Asmdef name and rootNamespace aligned with canonical pattern
  • Skill documentation expanded with scope, delegations, and canonical patterns
  • repo-conventions SKILL.md created for this repository
  • Pre-overhaul skill descriptions archived in _archive/

Test Plan

No testing needed. This is a namespace migration and documentation overhaul:

  • Namespace rename is mechanical (find-replace across all Editor files)
  • Asmdef changes are metadata-only
  • Skill documentation is reference material (no runtime impact)
  • CI will verify compilation with the new namespace

Review Notes

This PR accomplishes two goals:

  1. Namespace alignment: Migrates from the legacy LightmapUvTool namespace to the canonical SashaRX.UnityMeshLab pattern, establishing consistency with the SashaRX package umbrella and enabling future UPM publication.

  2. Skill directory overhaul: Replaces Russian-language skill descriptions with comprehensive English-language guidance covering:

    • unity-package-architect — UPM package layout and asmdef structure
    • unity-ci-validation — GameCI workflows and release automation (new)
    • unity-undo-prefab-safety — Undo and prefab mutation safety
    • unity-serialized-workflow — SerializedObject/SerializedProperty lifecycle
    • unity-assetdatabase-tools — Asset batching and import pipeline
    • unity-editor-tooling — EditorWindow, CustomEditor, menu items
    • unity-package-reviewer — Release readiness audit
    • migration-and-refactor-planner — Safe multi-step refactors
    • repo-auditor — Repository health audit
    • unity-package-bootstrap — New package scaffolding (new)
    • repo-conventions — UnityMeshLab-specific identity and conventions (new)

Each skill includes scope, delegations to sibling skills, canonical patterns, and anti-pattern references. Shared rules live in _shared/ (naming-conventions, anti-patterns, version-gates). Checklists provide verification steps for common workflows (undo safety, prefab safety, batch safety, package release).

The old Russian descriptions are preserved in _archive/ for reference during the transition.

https://claude.ai/code/session_01L6hHhb5WDFPjh3eon738yh

claude added 11 commits April 20, 2026 07:34
- Add references/ and scripts/ subfolders under each skill
- Create directories for unity-ci-validation, unity-package-bootstrap, repo-conventions
- Archive pre-overhaul SKILL.md content under .claude/skills/_archive/
…cs files)

Replaces 'namespace LightmapUvTool' declarations in 48 Editor/*.cs files with
'namespace SashaRX.UnityMeshLab' per the two-segment rule in
.claude/skills/_shared/naming-conventions.md.

String literals referencing 'LightmapUvTool' (shader paths, menu paths,
asset folders, EditorPrefs keys) are intentionally left untouched; renaming
those is a separate user-data-compat migration.
…ab.Editor

Asmdef file kept at its current path (LightmapUvTool.Editor.asmdef) to
preserve its GUID; file rename is a separate commit.
…yMeshLab.Editor.asmdef

Renames the asmdef file (and its .meta sibling) to match the already-updated
name field. GUID 832f52d32c124f8895ff1ed7c0c050f5 is preserved.
@SashaRX

SashaRX commented Apr 20, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Keep them coming!

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

claude added 9 commits April 20, 2026 21:24
…ceholders

- Normalize placeholder scheme to {{PackageName}}, {{Namespace}}, {{PackageId}},
  {{DisplayName}}, {{Description}}, {{UnityMinVersion}}, {{Author}}, {{License}},
  {{Year}}, {{Date}} — remove inconsistent {{Company}}, {{company}}, {{Display Name}},
  {{repo}}, {{author}}, {{YYYY-MM-DD}}, {{YYYY}} variants.
- Translate README.md.template from Russian to English.
- Rename Editor/Company.PackageName.Editor.asmdef.template ->
  Editor/SashaRX.{{PackageName}}.Editor.asmdef.template and equivalent for Tests.
- Rename LICENSE -> LICENSE.template for consistency with other template files.
- Add missing files per unity-package-bootstrap/SKILL.md manifest:
  .gitignore.template, Runtime/SashaRX.{{PackageName}}.asmdef.template,
  Runtime/PackageRuntimeEntryPoint.cs.template,
  Editor/PackageEditorEntryPoint.cs.template,
  Tests/Editor/SmokeTests.cs.template,
  Samples~/Basic/README.md.template,
  Documentation~/index.md.template.
- Every .asmdef template parses as valid JSON after placeholder substitution.
- Update unity-package-bootstrap/SKILL.md to reflect the new files and {{Year}}/{{Date}} parameters.
Prettier reflows single-line YAML 'description:' values into folded scalars,
which the Claude Code skill loader then fails to parse. Excluding
.claude/skills/** from Prettier is the canonical mitigation (see
.claude/skills/_shared/anti-patterns.md item 26).
Remove duplicated skill content (meta files, assembly platform, code conventions,
naming conventions) that now lives canonically in .claude/skills/_shared/ and
.claude/skills/repo-conventions/SKILL.md. Keep only:

- Entry-point pointers to the skill catalog.
- Domain-specific rules that are not covered by any skill (native plugins,
  transfer-pipeline experiments, LODGroup lifecycle, sidecar assets, LOD/COL
  naming, FBX exporter gating).
- Review focus list scoped to this repo's domain.

Title bumped from 'com.sasharx.lightmap-uv-tool' to 'UnityMeshLab' to match
repository identity; the package.json rename follows under a separate MAJOR-bump
commit.
Per Seleznov's A/B study (~100% activation vs ~77% with passive 'Use when …'),
the three highest-criticality skills get directive 'ALWAYS invoke this skill
when …' phrasing plus explicit 'Do not …' prohibitions:

- unity-undo-prefab-safety   (every editor mutation must be undoable)
- unity-assetdatabase-tools  (every batch must pair Start/Stop in try/finally)
- unity-package-architect    (every new package follows the canonical layout)

Remaining skills keep passive 'Use when …' to avoid directive saturation.
…arx.unitymeshlab (1.0.0)

BREAKING CHANGE: package identifier and repository URL changed. Downstream
consumers must update the entry in Packages/manifest.json:

  "com.sasharx.unitymeshlab": "https://github.com/SashaRX/UnityMeshLab.git"

Also adds documentationUrl / changelogUrl / licensesUrl fields and bumps
version 0.15.58 -> 1.0.0 to signal package-id stabilization. CHANGELOG entry
documents the migration path for namespace and manifest consumers.
test.yml
- EditMode test run on Unity 6000.0.33f1 (matches package.json 'unity: 6000.0').
- Single matrix row today; extend when a second LTS is adopted. fail-fast: false.
- Skips for fork PRs to avoid UNITY_LICENSE-missing failures.
- Library cache keyed on package.json + asmdef + cs hash; concurrency cancels
  superseded runs on the same ref.
- Uploads NUnit XML artifacts even on failure.

release.yml
- Triggered on push of v* tag.
- Verifies tag matches package.json version (exact string).
- Extracts the matching '## [version]' section from CHANGELOG.md as release body;
  falls back to GitHub auto-generated notes if absent.
- Marks as prerelease when the tag contains a dash (e.g. v1.0.0-rc1).

Required secrets (repository-level):
- UNITY_LICENSE (personal .ulf, base64-encoded, single line) OR
- UNITY_SERIAL + UNITY_EMAIL + UNITY_PASSWORD (professional).

Both workflows are authored per unity-ci-validation/SKILL.md canonical skeleton.
…crets absent

Previously the 'EditMode' matrix job failed within 5 seconds because
GameCI fails fast when UNITY_LICENSE (and UNITY_SERIAL/…) are all empty.
That produced a red CI check on every PR until secrets are configured.

Restructured:

- New 'check-license' job probes 'secrets.UNITY_LICENSE != ''' and
  'secrets.UNITY_SERIAL != '' && UNITY_EMAIL != '' && UNITY_PASSWORD != '''.
  Outputs 'has-license' true/false. Emits an Actions notice + step-summary
  explaining how to add the secret when missing.
- 'editmode' job gates on 'needs.check-license.outputs.has-license == 'true''
  AND the existing fork-PR guard. Skips cleanly otherwise.
- 'summary' depends on both; treats 'skipped' as OK, fails only on real
  'failure'. That keeps the overall workflow green when no license is
  configured, and red when tests legitimately fail.
…isabled in 2024)

unity-ci-validation/SKILL.md
- Promote a 'License activation' section that opens with the Personal-tier
  blocker: Unity disabled manual .alf/.ulf activation for Personal seats in
  2024. game-ci/unity-request-activation-file is dead for Personal.
- Document three realistic Personal-tier paths: license-gate (default),
  reuse a locally-extracted .ulf (low success), self-hosted runner.
- Document Pro/Plus path with UNITY_SERIAL + UNITY_EMAIL + UNITY_PASSWORD.
- Add the canonical license-gate workflow pattern as a copy-paste recipe,
  with the env-var indirection trick that lets 'secrets.X != ''' resolve
  before masking. Same pattern used in this repo's .github/workflows/test.yml.
- Expand 'Debugging failed runs': separate Personal vs Pro license-failure
  diagnoses; add the '~5-second EditMode failure' signature for missing
  secrets without a gate.

repo-conventions/SKILL.md
- Note that this repo is on Personal tier; the test.yml job will stay
  'skipped' on GitHub-hosted runners until Sasha moves to Plus/Pro or sets
  up a self-hosted runner. Local Test Runner remains the verification path.
@SashaRX

SashaRX commented Apr 24, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f45ad6ad5a

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread .github/workflows/release.yml Outdated
…mpty regex)

Codex reported that 'awk -v v="## [$VERSION]" $0 ~ v' treats v as a regex,
so a SemVer header like '## [1.0.0]' parses as the literal '## ' followed by
the character class [1.0.0] — i.e. any one of {1, ., 0}. On the real heading
'## [1.0.0] - 2026-04-20' the next char after '## ' is '[', which is not in
the class, so the match never fires. Result: /tmp/release-notes.md stays
empty and every release falls back to GitHub auto-generated notes instead
of the curated CHANGELOG section.

Replace the regex match with awk's index() function anchored at column 1:
literal substring search, no metacharacter handling needed. Verified locally
on the real CHANGELOG.md — extracts the 18-line '## [1.0.0]' section and
stops at the next '## [' heading as intended.

Reported by chatgpt-codex-connector on PR #106 review (P2).
@SashaRX
SashaRX merged commit 239d600 into main Apr 24, 2026
5 checks passed
SashaRX pushed a commit that referenced this pull request Apr 24, 2026
Main's PR #106 renamed namespace LightmapUvTool → SashaRX.UnityMeshLab
globally. My four new files (BenchmarkRecorder, FbxMetricsExporter,
UvPngWriter, TestSuiteAsset) were added on this branch before the
migration and still declared the old namespace; the merge commit
didn't touch new-on-branch files. Update them to match.
@SashaRX
SashaRX deleted the claude/skills-overhaul-phase-0-Xrg7K branch July 23, 2026 12:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants