Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
110 commits
Select commit Hold shift + click to select a range
fb3233f
Add TransferDiag summary log to GroupedShellTransfer
claude May 13, 2026
5340f67
Drop hint-matched dedup bypass for overlapping-UV0 case
claude May 14, 2026
442f2bb
EXPERIMENTS.md: post-fix Carousel verification for hint-matched dedup…
claude May 14, 2026
90a7940
Revert "EXPERIMENTS.md: post-fix Carousel verification for hint-match…
claude May 14, 2026
aaba5ff
Revert "Drop hint-matched dedup bypass for overlapping-UV0 case"
claude May 14, 2026
9d38c27
Add visual-defect counters to TransferResult + sweep
claude May 14, 2026
14145e2
Add multi-case sweep runner — one click, every model in TestSuiteAsset
claude May 14, 2026
5a67304
Address Codex review on PR #118: 1×P1 + 4×P2
claude May 14, 2026
c7a2c85
Sweep: 2 new axes + provenance manifest + auto-archive
claude May 14, 2026
411ca9a
Resolve PackageInfo and CompressionLevel namespace ambiguity in sweep
claude May 14, 2026
b4a0828
Add HierarchicalDiag — feasibility probe for inverse-hierarchical UV2…
claude May 15, 2026
0457313
Add .meta for HierarchicalDiag.cs (fix CI meta-validation)
claude May 15, 2026
26807fa
Address Codex review on PR #118: 1×P1 + 2×P2
claude May 15, 2026
5f24797
HierDiag v2: shell-level matching + K-nearest face→shell pick
claude May 15, 2026
80c6588
HierDiag v3: add perpendicular-offset criterion for promotion
claude May 15, 2026
e64739e
PR-2: HierarchicalRepack — builder for inverse-hierarchical atlas
claude May 15, 2026
3f04541
PR-2.5: shell-level Overlay/Promote/Skip + vertex dedup
claude May 15, 2026
888ed22
PR-2.5 hotfix: return rewritten tris from BuildCanonicalIndices
claude May 16, 2026
fb51c30
Address Codex review on PR #118: 1×P2 fix in HierarchicalRepack
claude May 16, 2026
d592c99
Address Codex review on PR #118: 1×P1 + 3×P2
claude May 16, 2026
f183cb7
PR-2.5: dry-run handles multi-select + prefab assets
claude May 16, 2026
a68ee55
PR-2.5 hotfix: drop stray closing brace after CollectSelectedLodGroups
claude May 16, 2026
9bbc8e9
PR-2.5 hotfix: HashSet uses .Count, not .Length
claude May 16, 2026
8ed3325
PR-2.5: drop K-nearest filter in ClassifyFineShell — full scan
claude May 16, 2026
5cc70d2
PR-2.5 Step 1b: pick best overlay-eligible parent, not just best angle
claude May 16, 2026
35c8d9b
PR-2.5 Step 2: loosen overlay thresholds for tilted/oversized fine sh…
claude May 16, 2026
835388f
PR-2.7: Frostbite-style per-vertex projection classifier
claude May 16, 2026
8211e92
Unified benchmark: one button runs every technique per case
claude May 16, 2026
41e497b
Unified benchmark hotfix: WriteReport should be private, not internal
claude May 16, 2026
5755de2
Unified benchmark hotfix: rename ExecBenchmark's `t` to `tech`
claude May 16, 2026
b97c46c
PR-2.7 Option B: merge adjacent base shells with close normals
claude May 16, 2026
fe966b4
Diagnostic PNGs: atlas layout + per-fine-LOD domain classification
claude May 17, 2026
30baf9a
Diagnostic PNG hotfix: qualify Object.DestroyImmediate
claude May 17, 2026
6328c26
Unified bench: legacy sweep + readable LOD PNGs
claude May 17, 2026
c8902bd
Unified bench: human-readable run-stamp folder name
claude May 17, 2026
ed8a029
Unified bench: technique subfolders + clean per-file names
claude May 17, 2026
969fa60
Unified bench: NO writes to BenchmarkReports/ root, ever
claude May 17, 2026
2ce45d9
PR-2.7 → per-shell majority vote, looser distance threshold
claude May 17, 2026
9f0420a
Per-LOD diagnostic: isometric view + solid category palette
claude May 17, 2026
c94d8aa
PR-3 stage 1: proxy UV2 via xatlas auto-pack + visualization
claude May 17, 2026
c1eeaa8
PR-3 stage 1 fix: sym-split BEFORE xatlas auto-pack
claude May 17, 2026
f6d05d2
PR-3 stage 1: 3-way proxy UV2 comparison (clean / raw / auto-unwrap)
claude May 17, 2026
da4ab81
Build native libraries (auto) [skip ci]
github-actions[bot] May 17, 2026
6b30bc3
Address Codex review on PR #118: 4×P2
claude May 17, 2026
0773e46
PR-3 stage 1 hotfix: RepackOptions is a top-level struct, not nested
claude May 17, 2026
35a68fd
PR-3 stage 1: ProxyMode toggle (Clean / Raw / Auto)
claude May 17, 2026
91a93b0
PR-3 stage 2: Poisson sampling on active proxy + visualization
claude May 17, 2026
e97aa84
PR-3 stage 2 hotfix: dot positions must match UvPngWriter's UV range
claude May 17, 2026
b16742b
PR-3 stage 2: enrich ProxySample with normal / shell id / sample id
claude May 17, 2026
c8f20cb
PR-3 stage 3: project proxy samples onto each fine LOD + heatmap
claude May 17, 2026
c26c06b
Address Codex review on PR #118: 1×P1 + 2×P2
claude May 17, 2026
c77f1ea
PR-3 stage 2: skip rogue cross-chart tris during sampling
claude May 17, 2026
de95dc5
PR-3 stage 1: disable xatlas chart rotation in all 3 proxy variants
claude May 18, 2026
33dddb7
PR-3 fix: drop the Y-flip on proxy sample dots
claude May 18, 2026
e52fcb3
PR-3 stage 4: per-shell affine fit (worldPos -> uv2)
claude May 18, 2026
9772b3f
PR-3 stage 4: filter per-shell fit by dominant proxy chart
claude May 18, 2026
00b6a80
PR-3 stage 5: final UV2 per fine LOD + spill / mixed handling + adapt…
claude May 18, 2026
6fbe843
PR-3 stage 5: duplicate seam vertices so shells never share a UV slot
claude May 18, 2026
7ee8f28
PR-3 stage 5: revert clamp / scale / promote -- spill is by design
claude May 18, 2026
0031ae9
PR-3 stage 4 rework: group by proxy chart, not fine 3D shell
claude May 18, 2026
6ed1567
PR-3 stage 5: per-face fallback to ONE proxy face (was per-vertex)
claude May 18, 2026
4b86527
PR-3 stage 5: per-chart planar fallback (was per-face closest proxy)
claude May 18, 2026
0e97a3c
PR-3 stage 5: per-vertex closest-proxy-face in chart (was planar fall…
claude May 18, 2026
74d3b72
PR-3 stage 5: rip out affine fit, do the simple ortho-project
claude May 18, 2026
b2442d1
fix: restore WriteFinalUv2Pngs (got eaten by the stage 4 cleanup sed …
claude May 18, 2026
c0baeab
PR-3 stage 6: clone fine LOD meshes with the new uv2, apply via menu
claude May 18, 2026
f76b5c9
ci: add missing .meta for HierarchicalApply.cs
claude May 18, 2026
60cc37a
PR-3 stage 5: drop the 'any sign' fallback -- strict normal-sign only
claude May 18, 2026
7ecbbfb
hier stage 5: cage-style max-distance limit; bench: shorten PNG subfo…
claude May 18, 2026
5fd767e
hier stage 5: per-vertex closest-point + UV-winding twin disambig + b…
claude May 18, 2026
5edbced
hier stage 5: revert per-vertex MAX-of-3 to centroid ranking
claude May 18, 2026
afdf140
hier stage 5: Poisson sample vote + ray-cast fallback (centroid-close…
claude May 18, 2026
8d219b3
hier stage 5: kill the ray-cast fallback -- Poisson vote only, sentin…
claude May 18, 2026
5975e63
hier stage 5: dedup seam vertices by proxy CHART, not proxy face
claude May 18, 2026
3fb4c01
hier stage 2: drop adaptive rogue-tri filter -- it ate big panel samples
claude May 18, 2026
b87ed73
docs: hierarchical cascade projection plan (stages A-F, test-per-stage)
claude May 21, 2026
3bcfdfb
hier stage B: per-LOD classical xatlas unwrap (diagnostic only)
claude May 23, 2026
fc66410
docs: cascade plan v2 -- group-then-final-pack, dissolves locked-char…
claude May 30, 2026
c9948e6
hier: purge legacy PR-2 classifier + PR-3 single-proxy projector
claude May 31, 2026
4f7ef2a
docs: cascade plan — mark stages A/B/purge done, expand Stage C as cu…
claude May 31, 2026
431ceac
hier stage C: per-LOD 3D shell extract + seed groups from deepest LOD
claude May 31, 2026
d4c46d8
weld: skip cross-shell welds for instance-pair UV shells (mirror / N-…
claude Jun 1, 2026
05753e1
weld: split meshopt GPU-dedup from UV-aware seam weld (per meshopt docs)
claude Jun 1, 2026
eb99cde
fix(weld): qualify UnityEngine.Object.Instantiate after 'using System…
claude Jun 1, 2026
a98acab
fix(pipeline): rewind working meshes to fbx at start of each run (ide…
claude Jun 1, 2026
cbefdb6
fix(symsplit): gate N-fold cut by UV self-overlap in primary Split path
claude Jun 1, 2026
19dd113
fix(symsplit): switch N-fold gate to UV coverage ratio (was density f…
claude Jun 1, 2026
ebaaaec
fix(symsplit): combine vote-ratio + coverage gate, log unconditionally
claude Jun 1, 2026
1b94229
hier stage D: cascade group shells deep→fine (membership only)
claude Jun 2, 2026
2d42eba
hier stage D: opt-in matchFrac×minHits threshold sweep
claude Jun 2, 2026
0685961
hier stage D: tiny-shell merge + experiments log
claude Jun 3, 2026
37932c4
hier stage D sweep: suppress per-cell PNG noise by default
claude Jun 3, 2026
b00aa52
docs: record post-tiny-merge sweep results in EXPERIMENTS.md
claude Jun 3, 2026
052a2c2
hier stage E (slice E1): pack lighting-domain canonical charts
claude Jun 3, 2026
f24e1d1
docs: record E1 benchmark results — packing works, curved-shell foldi…
claude Jun 3, 2026
be55239
hier stage E: stitch authored UV0 shells instead of planar projection
claude Jun 3, 2026
f02356a
hier stage E2: the actual cascade — project every LOD into its domain…
claude Jun 3, 2026
869f609
docs: E2 benchmark confirms cascade — cross-LOD consistency verified
claude Jun 3, 2026
49ee1e0
hier stage E: kill per-shell [0,1] distortion — real proportions, uni…
claude Jun 3, 2026
81af569
hier stage E: PRESERVE shell UV0 + project it (no planar re-derivation)
claude Jun 3, 2026
9c704ae
hier stage E: fix CS0136 — rename face-corner locals (fc clashed)
claude Jun 3, 2026
9777ff9
docs: preserve-UV0 benchmark confirms — no folding, cross-LOD consistent
claude Jun 3, 2026
2895cbc
hier stage E: robust placements — degenerate-axis LSQ fallback, never…
claude Jun 11, 2026
4aa044b
hier stage E3: objective atlas metrics — overlap, density spread, cro…
claude Jun 11, 2026
2614314
hier stage D sweep: append Stage E3 aggregates per cell
claude Jun 11, 2026
6d34a8f
docs: EXPERIMENTS entry — Stage E3 metrics + E2 placement robustness
claude Jun 11, 2026
fd6da0e
docs: transfer pipeline audit — cross-cutting problems in both genera…
claude Jul 18, 2026
e8deec9
docs: UV transfer debug & test plan — fixture ladder + objective gates
claude Jul 22, 2026
21172c8
chore: update file references and ignore patterns
SashaRX Jul 27, 2026
455260c
refactor: standardize package identity and logging conventions
SashaRX Jul 27, 2026
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

This file was deleted.

8 changes: 0 additions & 8 deletions .claude/skills/_archive/repo-auditor.pre-overhaul.md

This file was deleted.

This file was deleted.

8 changes: 0 additions & 8 deletions .claude/skills/_archive/unity-editor-tooling.pre-overhaul.md

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

2 changes: 1 addition & 1 deletion .claude/skills/_shared/naming-conventions.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ Rationale: Unity's Package Manager is case-sensitive on disk on Linux and inside
Every namespace block in `.cs` files under `Editor/`, `Runtime/`, and `Tests/` must begin with `SashaRX.<PackageName>`. The `<PackageName>` segment is PascalCase and matches the repository folder name.

- Canonical: `namespace SashaRX.PrefabDoctor`, `namespace SashaRX.UnityMeshLab.Editor`, `namespace SashaRX.UnityMeshLab.Tests`
- Prohibited: single-segment bare namespaces (`namespace LightmapUvTool`), three-or-more-segment vendor prefixes (`Com.SashaRX.PrefabDoctor`), arbitrary English words as root (`MyTools.PrefabDoctor`)
- Prohibited: single-segment bare namespaces (`namespace LegacyTool`), three-or-more-segment vendor prefixes (`Com.SashaRX.PrefabDoctor`), arbitrary English words as root (`MyTools.PrefabDoctor`)

Rationale: single-segment namespaces collide with C# type names in IntelliSense, conflict with `using` aliases, and violate the reverse-DNS-analog convention used by every public Unity UPM package (UniTask, R3, NaughtyAttributes, MessagePipe, VContainer). A repository currently using a bare namespace must migrate via `migration-and-refactor-planner` before merging new code.

Expand Down
2 changes: 1 addition & 1 deletion .claude/skills/_shared/version-gates.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ There is no patch-level `_OR_NEWER` directive. Use asmdef `versionDefines` with
{
"name": "com.unity.formats.fbx",
"expression": "[5.0.0,6.0.0)",
"define": "LIGHTMAP_UV_TOOL_FBX_EXPORTER"
"define": "UNITY_MESH_LAB_FBX_EXPORTER"
},
{
"name": "Unity",
Expand Down
4 changes: 2 additions & 2 deletions .claude/skills/repo-auditor/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Read-only audit skill for Unity UPM repositories. Produces a prioritized Markdow

Covered here:

- Skills directory structure and coherence with `.claude/skills/skills-overhaul-plan.md` if present.
- Skills directory structure and internal reference coherence.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Information Disclosure (CWE-200): Exposure of Sensitive Information to an Unauthorized Actor

Reachability: Internal

P1: Не перечисляйте другие agent skills и конфигурационные каталоги.

Добавление этой проверки закрепляет доступ к .claude/skills, а discovery-команда на Line 101 перечисляет и читает SKILL.md других skills. Ограничьте аудит явным allowlist-манифестом или переданными параметрами; не сканируйте .claude/, .codex/ или .gemini/.

🧰 Tools
🪛 SkillSpector (2.3.11)

[error] 101: [AS1] Agent Config Directory Access: Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.

Remediation: Remove all code or instructions that access agent configuration directories (.claude/, .codex/, .gemini/). If configuration values are needed, pass them explicitly as parameters or environment variables — never read the agent's own config files.

(Agent Snooping (AS1))


[warning] 55: [AS3] Skill Enumeration: Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Remediation: Remove all code or instructions that list or read other skills' files or directories. Skills should operate independently; cross-skill access is a privilege escalation.

(Agent Snooping (AS3))


[warning] 101: [AS3] Skill Enumeration: Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Remediation: Remove all code or instructions that list or read other skills' files or directories. Skills should operate independently; cross-skill access is a privilege escalation.

(Agent Snooping (AS3))

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/skills/repo-auditor/SKILL.md at line 14, Update the repo-auditor
skill’s discovery and structure checks to use only an explicit allowlist
manifest or caller-provided parameters. Remove scanning, enumeration, or reading
of other agent skills and configuration directories, including .claude/,
.codex/, and .gemini/; specifically revise the discovery command referenced near
the skill’s discovery instructions.

Source: Linters/SAST tools

- Agent docs (`AGENTS.md`, `CLAUDE.md`) presence and consistency with each other.
- `.github/workflows/` presence for Unity CI and release automation.
- `LICENSE`, `CHANGELOG.md`, `README.md` presence and format.
Expand Down Expand Up @@ -110,7 +110,7 @@ grep -n '^\*\.meta$' .gitignore 2>/dev/null

Every finding should name a follow-up target:

- Skills directory findings → this skill (`repo-auditor`) and `skills-overhaul-plan.md` if present.
- Skills directory findings → this skill (`repo-auditor`).
- Agent doc findings → manual resolution; this skill does not author.
- CI findings → `unity-ci-validation`.
- package.json / asmdef findings → `unity-package-reviewer` for audit, `unity-package-architect` for fix.
Expand Down
8 changes: 4 additions & 4 deletions .claude/skills/repo-conventions/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ Located under `.github/workflows/`:

## Deviations from `_shared/naming-conventions.md`

None at the canonical-target level. Both historical deviations (bare `LightmapUvTool` namespace, `com.sasharx.lightmap-uv-tool` package id) were resolved in the 1.0.0 release.
None at the canonical-target level. Historical namespace and package-ID deviations were resolved in the 1.0.0 release.

## Primary domain vocabulary

Expand All @@ -47,22 +47,22 @@ Terms that identify tasks as in-scope for this repo (used as description trigger
- Mesh editor, mesh hygiene, mesh repacking.
- Lightmap UV, UV2, baked lightmap, UV transfer.
- LOD group, LOD UV workflow, LOD sibling detection.
- FBX export (gated by `LIGHTMAP_UV_TOOL_FBX_EXPORTER`).
- FBX export (gated by `UNITY_MESH_LAB_FBX_EXPORTER`).
- Sidecar asset (`Uv2DataAsset` — persists UV2/collision data next to FBX).

## Repo-specific rules (from CLAUDE.md)

Shared with agents via `CLAUDE.md`:

- No `using System.Text.RegularExpressions` in `LightmapTransferTool.cs` — use fully qualified `System.Text.RegularExpressions.Regex`.
- Log via `UvtLog.Info` / `UvtLog.Warn` / `UvtLog.Error` — prefixed `[LightmapUV]`.
- Log via `UvtLog.Info` / `UvtLog.Warn` / `UvtLog.Error` — prefixed `[MeshLab]`.
- Use `Undo.RecordObject` / `Undo.AddComponent` / `Undo.DestroyObjectImmediate` for scene modifications.
- Call `RestoreWorkingMeshes()` before clearing/switching LODGroup context.
- Destroy temporary meshes (repacked, transferred, welded) when no longer needed.

## Migration history

- **1.0.0 (2026-04-20)** — package id renamed `com.sasharx.lightmap-uv-tool` → `com.sasharx.unitymeshlab`; namespace renamed `LightmapUvTool` → `SashaRX.UnityMeshLab`; repository URL corrected to `UnityMeshLab.git`. Downstream migration steps in `CHANGELOG.md`.
- **1.0.0 (2026-04-20)** — package ID, namespace, and repository URL were standardized to the current UnityMeshLab identity. Downstream migration steps are recorded in `CHANGELOG.md`.

## Further reading

Expand Down
Loading
Loading