Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
253 commits
Select commit Hold shift + click to select a range
05ce9e6
docs(serialize-references): add prefabs to SerializeReferences sample
VPDPersonal Jun 6, 2026
f463b7f
feat(serialize-references): support open generic type selection
VPDPersonal Jun 7, 2026
1237a56
docs(serialize-references): add generic Modifiers example to sample
VPDPersonal Jun 7, 2026
83baf4e
docs(serialize-references): document open generic type selection
VPDPersonal Jun 7, 2026
6653fc8
refactor(serialize-references): resolve generic arguments inline in t…
VPDPersonal Jun 7, 2026
5ffd30e
fix(serialize-references): hide compiler-generated types from the gen…
VPDPersonal Jun 7, 2026
a80db48
fix(serialize-references): align UIToolkit selector header layout
VPDPersonal Jun 8, 2026
2e1667f
feat(serialize-references): preserve data on type switch and add copy…
VPDPersonal Jun 8, 2026
675df91
feat(serialize-references): repair missing types and un-share aliased…
VPDPersonal Jun 8, 2026
c7a8b82
refactor(serialize-references): detect and repair missing types from …
VPDPersonal Jun 8, 2026
4b31066
feat(serialize-references): add Repair Missing References window
VPDPersonal Jun 8, 2026
5164103
feat(serialize-references): compact missing/shared notices and Prefab…
VPDPersonal Jun 8, 2026
6dd2f90
feat(serialize-references): resolve and repair missing types nested i…
VPDPersonal Jun 9, 2026
0ab5096
feat(serialize-references): restyle Repair window, embed type picker
VPDPersonal Jun 10, 2026
eeb48c2
docs(serialize-references): update Repair window menu path
VPDPersonal Jun 10, 2026
3804ed8
refactor(types): unify SerializeReference selector into TypeSelector
VPDPersonal Jun 9, 2026
e3c85e6
build: add analyzer submodule and ship its Roslyn DLL into the package
VPDPersonal Jun 9, 2026
a155af3
refactor(samples): migrate SlottedLoadout to [TypeSelector]
VPDPersonal Jun 10, 2026
18cf123
build: widen AFT0003, add analyzer rebuild automation, HTTPS submodule
VPDPersonal Jun 11, 2026
5b42a44
build: wire analyzer rebuild hook into PostToolUse
VPDPersonal Jun 11, 2026
7d6e215
Merge pull request #50 from VPDPersonal/refactor/unify-type-selector-…
VPDPersonal Jun 11, 2026
b3905fd
fix(analyzers): recognize [SerializeReference] fields in AFT0001
VPDPersonal Jun 11, 2026
a4ed9e9
docs(samples): rename sample description to [TypeSelector]
VPDPersonal Jun 11, 2026
f167ee9
feat(analyzers): add AFT0004 and AFT0005 usage diagnostics
VPDPersonal Jun 11, 2026
aa9aca0
feat(type-selector): add TypeSelectorItem metadata and favorites/recents
VPDPersonal Jun 11, 2026
9853f12
feat(serialize-references): rank and suggest one-click missing-type f…
VPDPersonal Jun 11, 2026
c0f9918
feat(serialize-references): add Managed References graph window
VPDPersonal Jun 11, 2026
b20464b
feat(serialize-references): support multi-object editing in TypeSelec…
VPDPersonal Jun 11, 2026
c8248e5
feat(serialize-references): add project-wide scan and bulk fix to Rep…
VPDPersonal Jun 11, 2026
40e330e
feat(serialize-references): auto-de-alias duplicated list elements
VPDPersonal Jun 11, 2026
29e05f0
feat(serialize-references): add per-rid color highlighting for shared…
VPDPersonal Jun 11, 2026
98c2ae5
docs(serialize-references): document new SerializeReference and picke…
VPDPersonal Jun 11, 2026
225572e
fix(serialize-references): address review findings
VPDPersonal Jun 11, 2026
a0a1eae
test(serialize-references): add EditMode tests and YAML probe cache
VPDPersonal Jun 13, 2026
f51d9ec
feat(serialize-references): add usage index, Find Usages and delete g…
VPDPersonal Jun 13, 2026
6a77e4f
feat(serialize-references): add proactive missing-reference detection
VPDPersonal Jun 13, 2026
bc578a4
feat(serialize-references): add authoring affordances for managed refs
VPDPersonal Jun 13, 2026
53e4ad8
feat(serialize-references): add required attribute, settings and CI gate
VPDPersonal Jun 13, 2026
a91fca7
feat(serialize-references): wire subsystems into drawers and windows
VPDPersonal Jun 13, 2026
f8bff68
refactor(serialize-references): merge repair and graph into one window
VPDPersonal Jun 13, 2026
967d895
refactor(visual-elements): restyle gradient button as classic accent-bar
VPDPersonal Jun 13, 2026
def9bbf
fix(visual-elements): use a defined token for the button accent bar
VPDPersonal Jun 13, 2026
7fd4482
style(visual-elements): flat buttons, dark info box and tab bar
VPDPersonal Jun 13, 2026
ae50e93
revert(visual-elements): restore gradient buttons and tab toggle
VPDPersonal Jun 13, 2026
e3ccfb0
Redesign SerializeReference window and type selector picker UI
VPDPersonal Jun 14, 2026
d6da475
feat(type-selector): collapsible groups with in-header search
VPDPersonal Jun 15, 2026
ecf5b2a
feat(serialize-reference): dock the type picker into the active group…
VPDPersonal Jun 17, 2026
961ee97
style(serialize-reference): round docked picker footer and list rows
VPDPersonal Jun 17, 2026
6c4c55e
style(serialize-reference): tone repair summary to warning family
VPDPersonal Jun 17, 2026
8de0516
feat(type-selector): click header to search, magnifier to left
VPDPersonal Jun 18, 2026
4e4d948
Add BrokenArsenalPreset sample for multi-file repair grouping
VPDPersonal Jun 18, 2026
44a2722
feat(serialize-reference): merge group header into one clickable row
VPDPersonal Jun 18, 2026
d890713
Fix dark seams in hover gradient overlay
VPDPersonal Jun 18, 2026
4f785b1
Merge Welcome into Managed References with home and settings tabs
VPDPersonal Jun 18, 2026
4139cbb
feat(theme): add editor theme-override stylesheet system
VPDPersonal Jun 19, 2026
f242851
style(serialize-reference): redesign Inspect Asset graph and align Re…
VPDPersonal Jun 19, 2026
b0b05b8
chore(samples): expand SerializeReferences sample with melee/ranged t…
VPDPersonal Jun 19, 2026
1c775b9
docs(samples): add SerializeReferences tutorial and refresh sample docs
VPDPersonal Jun 19, 2026
e6cf916
feat(welcome): add sample descriptions and a reimport action
VPDPersonal Jun 19, 2026
bcb457a
feat(serialize-reference): add a shared window footer bar
VPDPersonal Jun 19, 2026
8b6cc2f
fix(serialize-reference): wrap audit paths and stack fix summaries
VPDPersonal Jun 19, 2026
336ef88
feat(serialize-reference): add undo to Project Audit fix receipts
VPDPersonal Jun 19, 2026
f92e706
Merge remote-tracking branch 'origin/main' into feature/serialize-ref…
VPDPersonal Jun 19, 2026
e5be524
Floor docked managed-references window content width
VPDPersonal Jun 19, 2026
b581ab5
Restyle the Project Audit Undo chip as a corner overlay
VPDPersonal Jun 19, 2026
c96e2fb
feat(serialize-reference): null missing references via <None> picker
VPDPersonal Jun 20, 2026
c2e9c8b
feat(serialize-reference): show unassigned slots as <None> in graph
VPDPersonal Jun 20, 2026
2cbfefe
feat(serialize-reference): rename tabs to Asset/Project References
VPDPersonal Jun 20, 2026
a1a4c0f
fix(serialize-reference): surface all-unassigned assets in graph
VPDPersonal Jun 20, 2026
d41aa85
feat(serialize-reference): clear references to <None> in graph
VPDPersonal Jun 20, 2026
9195a05
feat(serialize-reference): inline type dropdown on every graph card
VPDPersonal Jun 20, 2026
6b5fcde
fix(serialize-reference): label dropdown bands, match empty card fill
VPDPersonal Jun 20, 2026
2bf14de
fix(serialize-reference): drop indentation on nested graph cards
VPDPersonal Jun 20, 2026
bcae38a
fix(serialize-reference): match top-panel height across both tabs
VPDPersonal Jun 20, 2026
48cdbc3
fix(serialize-reference): align Rescan label to panel title edge
VPDPersonal Jun 20, 2026
18a5133
feat(serialize-reference): add nested-hierarchy sample prefab
VPDPersonal Jun 20, 2026
bd3eb3e
fix(serialize-reference): give document headers a default background
VPDPersonal Jun 20, 2026
84da7bc
feat(serialize-reference): add tab-switch shortcuts and hints
VPDPersonal Jun 20, 2026
4ef7168
fix(serialize-reference): render tab shortcut hint as plain text
VPDPersonal Jun 20, 2026
4c4c36c
Correct renamed Managed References menu name and sample weapon list
VPDPersonal Jun 20, 2026
45d667b
refactor(serialize-reference): never auto-scan when entering Project …
VPDPersonal Jun 20, 2026
ea6b263
refactor(serialize-reference): extract shared settings UI into Serial…
VPDPersonal Jun 20, 2026
9c9a2e2
feat(serialize-reference): show idle snake hero on Project References…
VPDPersonal Jun 20, 2026
45d5359
feat(serialize-reference): nest window tabs under FastTools menu submenu
VPDPersonal Jun 20, 2026
f4c7f87
docs(serialize-reference): update menu paths to FastTools submenu tabs
VPDPersonal Jun 20, 2026
509fd6f
docs(serialize-reference): break up dense tutorial prose
VPDPersonal Jun 20, 2026
846e596
feat(serialize-reference): fold required into TypeSelector flag
VPDPersonal Jun 20, 2026
895f752
Add missing-type stripe and drop the shared-reference dot
VPDPersonal Jun 21, 2026
6f75282
fix(serialize-reference): preserve newlines and nested-type repair
VPDPersonal Jun 21, 2026
3f9c6d1
fix(serialize-reference): share rid when linking to existing ref
VPDPersonal Jun 21, 2026
97b8358
fix(serialize-reference): don't warm cold usage index on import
VPDPersonal Jun 21, 2026
77e7e63
fix(serialize-reference): warn that required gate skips scenes
VPDPersonal Jun 21, 2026
22e208a
fix(serialize-reference): self-style notice, move to own BEM block
VPDPersonal Jun 21, 2026
8ef9c19
perf(serialize-reference): cache mixed-type, generic and rescan
VPDPersonal Jun 21, 2026
87d76cf
style(visual-elements): load base palette first on window footer
VPDPersonal Jun 21, 2026
c60ee53
test(serialize-reference): cover writers, resolver, gate, linker
VPDPersonal Jun 21, 2026
e696945
docs(serialize-reference): sync Show API and picker/repair wording
VPDPersonal Jun 21, 2026
e2d1830
fix(serialize-reference): tone clean project canvas green, not amber
VPDPersonal Jun 21, 2026
df569b5
feat(serialize-reference): add toggle to disable breakage detector
VPDPersonal Jun 21, 2026
5bbdcb5
fix(serialize-reference): persist window tab and inspected asset
VPDPersonal Jun 21, 2026
da3972f
fix(serialize-reference): align UIToolkit notice position with IMGUI
VPDPersonal Jun 21, 2026
206af42
fix(serialize-reference): propagate settings changes to index and sur…
VPDPersonal Jun 21, 2026
2d2ea25
test(serialize-reference): cover settings propagation
VPDPersonal Jun 21, 2026
374c87c
feat(serialize-reference): name cleared field count in clear dialog
VPDPersonal Jun 21, 2026
4936dc2
refactor(serialize-reference): harden YAML editor against tab indent
VPDPersonal Jun 21, 2026
c16e489
fix(serialize-reference): retry deferred create-script assignment acr…
VPDPersonal Jun 21, 2026
5df4ab9
test(serialize-reference): cover pending-assignment retry and persist…
VPDPersonal Jun 21, 2026
f42c862
Merge pull request #58 from VPDPersonal/refactor/asp-31-harden-yaml-p…
VPDPersonal Jun 21, 2026
aba2bf5
feat(serialize-reference): scan scenes for required fields via YAML
VPDPersonal Jun 21, 2026
e820d91
Merge branch 'feature/serialize-reference-dropdown' into refactor/asp…
VPDPersonal Jun 21, 2026
5dd2cd4
Merge pull request #57 from VPDPersonal/refactor/asp-28-clear-aliased…
VPDPersonal Jun 21, 2026
0d6c479
Merge pull request #56 from VPDPersonal/fix/asp-22-settings-changes-d…
VPDPersonal Jun 21, 2026
5e3e4dd
Merge pull request #60 from VPDPersonal/refactor/asp-30-ci-required-f…
VPDPersonal Jun 21, 2026
336f746
Merge pull request #55 from VPDPersonal/fix/asp-24-notice-position-im…
VPDPersonal Jun 21, 2026
ee143c0
Merge pull request #54 from VPDPersonal/refactor/asp-26-managed-refer…
VPDPersonal Jun 21, 2026
d1ad319
Merge branch 'feature/serialize-reference-dropdown' into refactor/asp…
VPDPersonal Jun 21, 2026
8b3b8d8
Merge pull request #53 from VPDPersonal/refactor/asp-25-add-setting-d…
VPDPersonal Jun 21, 2026
452752e
Merge pull request #52 from VPDPersonal/fix/asp-27-project-references…
VPDPersonal Jun 21, 2026
32aa71a
Merge pull request #59 from VPDPersonal/fix/asp-29-deferred-create-ne…
VPDPersonal Jun 21, 2026
a82b220
fix(serialize-reference): commit gate severity to project settings
VPDPersonal Jun 21, 2026
ef8c04a
Merge remote-tracking branch 'origin/feature/serialize-reference-drop…
VPDPersonal Jun 21, 2026
cc8521d
Merge pull request #61 from VPDPersonal/fix/asp-21-gate-severity-mach…
VPDPersonal Jun 21, 2026
2cc1332
Merge branch 'main' into feature/serialize-reference-dropdown
VPDPersonal Jun 21, 2026
c261137
fix(serialize-reference): anchor rid-pointer match to real pointers
VPDPersonal Jun 21, 2026
9a69a37
fix(serialize-reference): assign created script to all selected objects
VPDPersonal Jun 21, 2026
b5f67ee
fix(serialize-reference): match generic types by open-generic identity
VPDPersonal Jun 21, 2026
f5054ee
fix(type-selector): guard against null types in params constructor
VPDPersonal Jun 21, 2026
0d52c93
fix(serialize-reference): persist property in deferred menu callbacks
VPDPersonal Jun 21, 2026
441b46b
fix(serialize-reference): detect in-place class rename breakage
VPDPersonal Jun 21, 2026
8119543
fix(serialize-reference): add deterministic tie-break to repair sort
VPDPersonal Jun 21, 2026
22b3dd4
fix(serialize-reference): apply type-selector filter to paste
VPDPersonal Jun 21, 2026
d29f42c
fix(serialize-reference): make list add a single undo step
VPDPersonal Jun 21, 2026
a9805ff
fix(visual-elements): re-subscribe theme updates on attach
VPDPersonal Jun 21, 2026
010caf3
fix(serialize-reference): validate identifier in created script stub
VPDPersonal Jun 21, 2026
87dde1d
fix(serialize-reference): treat absent required field as not unset
VPDPersonal Jun 21, 2026
e72d3eb
perf(serialize-reference): share per-frame state in IMGUI drawer
VPDPersonal Jun 21, 2026
334a626
fix(serialize-reference): preserve dominant line terminator on write
VPDPersonal Jun 21, 2026
abb326d
perf(serialize-reference): cache per-asset constraint map in graph view
VPDPersonal Jun 21, 2026
f9b98af
fix(serialize-reference): confirm before overwriting a template
VPDPersonal Jun 21, 2026
adb1bce
fix(type-selector): filter nested generics by all constraints
VPDPersonal Jun 21, 2026
1223027
fix(visual-elements): clamp hover overlay steps to mesh limit
VPDPersonal Jun 21, 2026
64c4db3
perf(serialize-reference): group unresolved usages by asset
VPDPersonal Jun 21, 2026
3b48732
refactor(serialize-reference): extract shared YAML-scan helper
VPDPersonal Jun 21, 2026
6dd3d1b
refactor(serialize-reference): centralize managed-type display name
VPDPersonal Jun 21, 2026
7b68fc5
Centralize managed-type display name on ManagedTypeName (#82)
VPDPersonal Jun 23, 2026
f359a55
Extract shared YAML-scan helper for scanner and editor (#81)
VPDPersonal Jun 23, 2026
a920d71
Anchor rid-pointer match to avoid string-value corruption (#62)
VPDPersonal Jun 23, 2026
143f953
Group unresolved usages by asset in breakage report (#80)
VPDPersonal Jun 23, 2026
d0fe3fa
Validate identifier and base type in created script stub (#72)
VPDPersonal Jun 23, 2026
e45c8ba
Merge pull request #79 from VPDPersonal/fix/hover-overlay-clamp-steps
VPDPersonal Jun 23, 2026
08aa26a
Merge pull request #78 from VPDPersonal/fix/typeselector-multi-constr…
VPDPersonal Jun 23, 2026
7a7aa0d
Merge pull request #77 from VPDPersonal/fix/sr-template-overwrite-con…
VPDPersonal Jun 23, 2026
5f1224f
Merge pull request #63 from VPDPersonal/fix/sr-create-script-multi-ob…
VPDPersonal Jun 23, 2026
49f4ccf
Merge pull request #64 from VPDPersonal/fix/sr-delete-guard-generic-i…
VPDPersonal Jun 23, 2026
15f052b
Merge pull request #65 from VPDPersonal/fix/typeselector-attribute-nu…
VPDPersonal Jun 23, 2026
bf88e29
Merge pull request #67 from VPDPersonal/fix/sr-breakage-detect-inplac…
VPDPersonal Jun 23, 2026
770a207
Merge pull request #68 from VPDPersonal/fix/sr-repair-suggestion-dete…
VPDPersonal Jun 23, 2026
f6bc76a
Merge pull request #69 from VPDPersonal/fix/sr-paste-respects-typesel…
VPDPersonal Jun 23, 2026
099e176
Merge pull request #70 from VPDPersonal/fix/sr-list-add-single-undo
VPDPersonal Jun 23, 2026
7462619
Merge pull request #71 from VPDPersonal/fix/theme-stylesheet-attach-d…
VPDPersonal Jun 23, 2026
b82a2d7
Merge pull request #73 from VPDPersonal/fix/sr-required-gate-absent-key
VPDPersonal Jun 23, 2026
7762e07
Merge pull request #74 from VPDPersonal/perf/sr-imgui-drawer-per-fram…
VPDPersonal Jun 23, 2026
d2b5afc
Merge pull request #75 from VPDPersonal/fix/sr-yaml-preserve-mixed-eol
VPDPersonal Jun 23, 2026
be5b185
Merge pull request #76 from VPDPersonal/perf/sr-graph-view-constraint…
VPDPersonal Jun 23, 2026
e22ed96
Merge pull request #66 from VPDPersonal/fix/sr-imgui-menu-persistent-…
VPDPersonal Jun 23, 2026
aaf0460
chore(dev-project): add samples and editor settings to ignore
VPDPersonal Jun 26, 2026
1795454
fix(editor): restore scan results on tab switch
VPDPersonal Jun 26, 2026
d4bf2c9
Merge branch 'feature/unity-yaml-editor' into feature/serialize-refer…
VPDPersonal Jun 26, 2026
9ab8932
refactor(serialize-reference): adopt YAML engine assembly, drop dupli…
VPDPersonal Jun 26, 2026
b5de0a0
Merge branch 'feature/unity-yaml-editor': probe-cache invalidator sel…
VPDPersonal Jun 26, 2026
0357126
refactor(serialize-reference): route IsScanCandidate through engine p…
VPDPersonal Jun 26, 2026
ec3a875
chore(dev-project): add samples and editor settings to ignore
VPDPersonal Jun 26, 2026
8e6d81f
Merge remote-tracking branch 'origin/feature/serialize-reference-drop…
VPDPersonal Jun 26, 2026
3a96b02
docs: add UI/UX refinement and YAML-extraction plan
VPDPersonal Jun 26, 2026
ac1eb10
Merge remote-tracking branch 'origin/main' into feature/serialize-ref…
VPDPersonal Jun 27, 2026
b7d7db2
Restore self-contained Yaml asmdef and fix SR assembly references
VPDPersonal Jun 27, 2026
2e3cf10
Merge branch 'main' into feature/serialize-reference-dropdown
VPDPersonal Jun 29, 2026
dfc8e4b
refactor(type-selector): drop RequiredMessage to match main
VPDPersonal Jun 30, 2026
1aed57c
Fix empty ManagedTypeName and live-sync the breakage-detection toggle
VPDPersonal Jun 30, 2026
1749bfd
chore(serialize-references): add SerializeReference gate settings asset
VPDPersonal Jun 30, 2026
34a2cd7
docs(serialize-references): make SerializeReference Selector section …
VPDPersonal Jun 30, 2026
faf68f1
Restyle the Settings tab with branded switches and a folder list
VPDPersonal Jun 30, 2026
d817573
Brand the Settings gate dropdown and folder list, add a window icon
VPDPersonal Jun 30, 2026
a939709
Back each Settings tab row with a panel-style card
VPDPersonal Jun 30, 2026
885a1dc
Move the Settings tab padding into USS and flush the row cards
VPDPersonal Jun 30, 2026
4148b71
fix(serialize-references): align Settings tab captions to one height
VPDPersonal Jun 30, 2026
6acbc9e
refactor(serialize-references): frame the excluded-folders header in-…
VPDPersonal Jun 30, 2026
3d7463c
style(serialize-references): trim Settings row right padding
VPDPersonal Jun 30, 2026
d995f3e
feat(serialize-references): zebra-stripe the excluded-folders entries
VPDPersonal Jun 30, 2026
4e07402
refactor(serialize-references): commit de-alias and excluded folders
VPDPersonal Jun 30, 2026
77cb321
feat(serialize-references): make excluded-folders rows interactive
VPDPersonal Jun 30, 2026
065640d
feat(serialize-references): add section titles to the Settings tab
VPDPersonal Jun 30, 2026
6817fbd
refactor(serialize-references): drop the rid-colours toggle
VPDPersonal Jun 30, 2026
bd5159c
refactor(serialize-references): move the shared-ref rid colour to a dot
VPDPersonal Jun 30, 2026
4e6aa8e
fix(serialize-references): shrink the window tab icon
VPDPersonal Jun 30, 2026
e708c05
style(serialize-references): inset the status stripe into a foldout g…
VPDPersonal Jul 1, 2026
c2871b0
style(serialize-references): restyle the shared-reference notice
VPDPersonal Jul 1, 2026
7a4a74c
style(serialize-references): restyle the missing-type notice action
VPDPersonal Jul 1, 2026
57433c8
fix(serialize-references): open the Fix type picker flush under the n…
VPDPersonal Jul 1, 2026
b201e03
fix(serialize-references): clear a sibling's shared notice when its a…
VPDPersonal Jul 1, 2026
c1af834
fix(serialize-references): restore both shared notices on undo/redo
VPDPersonal Jul 1, 2026
9e83997
feat(serialize-references): give every sample loadout an IMGUI twin
VPDPersonal Jul 1, 2026
1b1a692
style(serialize-references): mirror the UIToolkit notice and stripe i…
VPDPersonal Jul 1, 2026
cfeecac
style(serialize-references): only indent IMGUI fields that show a stripe
VPDPersonal Jul 1, 2026
9024302
style(serialize-references): only indent UIToolkit fields with a stripe
VPDPersonal Jul 1, 2026
1ce3ecb
style(serialize-references): put the IMGUI shared notice under the value
VPDPersonal Jul 1, 2026
eac973d
style(serialize-references): hug the stripe with the flat field label
VPDPersonal Jul 1, 2026
e0ba996
feat(serialize-references): number shared references and colour by badge
VPDPersonal Jul 1, 2026
3cb06db
docs(changelog): fix duplicate sections and restore #51 link
VPDPersonal Jul 1, 2026
f5c4f5d
feat(serialize-references): preserve missing list refs across a resize
VPDPersonal Jul 1, 2026
6c8a561
test(serialize-references): update notice and settings UI tests
VPDPersonal Jul 1, 2026
0e20a13
fix(serialize-references): correct list "+" picker and add IMGUI parity
VPDPersonal Jul 1, 2026
0ed4c33
fix(serialize-references): inset IMGUI list rows past the drag handle
VPDPersonal Jul 1, 2026
f363a8f
feat(serialize-references): add type-selector settings and reset footer
VPDPersonal Jul 2, 2026
25a3a38
feat(type-selector): add counters, current-value check and divider
VPDPersonal Jul 2, 2026
6ab5016
fix(type-selector): put the pinned divider on the row root
VPDPersonal Jul 2, 2026
b00e7a6
feat(settings): add appearance/welcome sections and preferences page
VPDPersonal Jul 2, 2026
7ef7af6
fix(settings): centre the slider handle and default recents to 5
VPDPersonal Jul 2, 2026
2462455
feat(serialize-references): number, list and navigate shared groups
VPDPersonal Jul 2, 2026
e3ebb55
feat(serialize-references): show full type identity on dropdown hover
VPDPersonal Jul 2, 2026
5a25eaa
feat(serialize-references): cycle window tabs with ctrl+tab
VPDPersonal Jul 2, 2026
4713bd3
fix(serialize-references): reveal whole shared group on notice click
VPDPersonal Jul 2, 2026
9953760
feat(serialize-references): demo one-click smart fix in the sample
VPDPersonal Jul 2, 2026
23c1df4
docs(serialize-references): sync plan statuses and revise p0 roadmap
VPDPersonal Jul 2, 2026
4223d5d
feat(type-selector): add display name and group overrides to the picker
VPDPersonal Jul 2, 2026
1ce2e9e
feat(serialize-references): migrate [MovedFrom] renames in one click
VPDPersonal Jul 2, 2026
533c4d6
feat(serialize-references): demo [MovedFrom] migration in the sample
VPDPersonal Jul 2, 2026
fa403fb
docs: document picker display overrides and movedfrom migration
VPDPersonal Jul 2, 2026
26f4ebd
docs(roadmap): mark both p0 features done
VPDPersonal Jul 2, 2026
009bcca
feat(serialize-references): classify migrations in the asset graph
VPDPersonal Jul 2, 2026
25626ba
fix(serialize-references): stop gating pending [MovedFrom] migrations
VPDPersonal Jul 2, 2026
b89f95a
feat(type-selector): add a settings gear to the picker footer
VPDPersonal Jul 2, 2026
fc94a00
fix(serialize-references): resolve full-branch review findings
VPDPersonal Jul 2, 2026
4c2ba10
style(serialize-references): drop the stray dot from the quick-apply …
VPDPersonal Jul 2, 2026
f0b72da
style(serialize-references): unclickable, un-underlined suggestion se…
VPDPersonal Jul 2, 2026
54a4ef9
feat(serialize-references): surface smart fix on the asset graph card
VPDPersonal Jul 2, 2026
a7bde52
style(serialize-references): info-tinted fix affordances on migration…
VPDPersonal Jul 2, 2026
cf94e6e
Remove completed PLAN.md
VPDPersonal Jul 2, 2026
79d741f
test(editor): extract shared fixtures and dedupe test setup
VPDPersonal Jul 2, 2026
f0a76bb
docs(claude-md): sync with codebase and trim duplication
VPDPersonal Jul 2, 2026
ec87173
refactor(samples): streamline the SerializeReferences sample
VPDPersonal Jul 2, 2026
1951381
Add attribute-free SerializeReference dropdowns behind an opt-in
VPDPersonal Jul 2, 2026
22bdc00
docs(changelog): fix inaccurate serialize-reference entries
VPDPersonal Jul 2, 2026
52e7dbe
refactor(editor): apply PR review feedback across the branch diff
VPDPersonal Jul 2, 2026
e7446c3
feat(welcome): auto-show the welcome tab once per package version
VPDPersonal Jul 2, 2026
085ff54
chore(assets): apply the Aspid script icon to all package scripts
VPDPersonal Jul 2, 2026
6f3a1b4
fix(serialize-references): clamp the field flash band to its ListView…
VPDPersonal Jul 2, 2026
bc021b4
fix(serialize-references): clamp the IMGUI flash band to the list box
VPDPersonal Jul 2, 2026
cbd54c4
feat(type-selector): preselect the <None> row for none and missing va…
VPDPersonal Jul 2, 2026
406ea12
perf(analyzers): bump analyzer with assembly-filtered AFT0005 candida…
VPDPersonal Jul 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
31 changes: 31 additions & 0 deletions .claude/hooks/rebuild-analyzers-on-change.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#!/usr/bin/env bash
# PostToolUse hook: rebuild the Roslyn analyzer after edits inside the analyzer
# project (a git submodule), then redeploy the DLL into the Unity package.
# The submodule has no Directory.Build.targets on purpose (it stays independent
# of this repo's layout), so the copy step lives here.
#
# Path-scoped on purpose:
# - Triggers ONLY for *.cs under Aspid.FastTools.Analyzers/Aspid.FastTools.Analyzers/Aspid.FastTools.Analyzers/
# - Skips the Tests and Sample projects.
#
# Build success -> exit 0 (silent).
# Path mismatch -> exit 0 (silent).
# Build failure -> exit 2 with stderr piped through, so the assistant sees it.

set -uo pipefail

file_path=$(jq -r '.tool_input.file_path // empty' 2>/dev/null)

case "$file_path" in
*/Aspid.FastTools.Analyzers/Aspid.FastTools.Analyzers/Aspid.FastTools.Analyzers/*.cs) ;;
*) exit 0 ;;
esac

cd "$CLAUDE_PROJECT_DIR" || exit 0

dotnet build \
Aspid.FastTools.Analyzers/Aspid.FastTools.Analyzers/Aspid.FastTools.Analyzers/Aspid.FastTools.Analyzers.csproj \
-c Release --nologo -v quiet 1>&2 || exit 2

cp Aspid.FastTools.Analyzers/Aspid.FastTools.Analyzers/Aspid.FastTools.Analyzers/bin/Release/netstandard2.0/Aspid.FastTools.Analyzers.dll \
Aspid.FastTools/Packages/tech.aspid.fasttools/Aspid.FastTools.Analyzers.dll 1>&2 || exit 2
4 changes: 4 additions & 0 deletions .claude/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@
{
"type": "command",
"command": "bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/rebuild-generators-on-change.sh\""
},
{
"type": "command",
"command": "bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/rebuild-analyzers-on-change.sh\""
}
]
}
Expand Down
17 changes: 17 additions & 0 deletions .claude/skills/build-analyzer/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
name: build-analyzer
description: Build the Roslyn analyzer submodule and deploy the resulting DLL into the Unity package
user-invocable: true
---

Build the Aspid.FastTools analyzer (git submodule) and deploy to Unity:

1. If `Aspid.FastTools.Analyzers/` is empty, run `git submodule update --init` first
2. Run `dotnet build Aspid.FastTools.Analyzers/Aspid.FastTools.Analyzers/Aspid.FastTools.Analyzers/Aspid.FastTools.Analyzers.csproj -c Release` from the repository root
3. Run `dotnet test Aspid.FastTools.Analyzers/Aspid.FastTools.Analyzers.sln -c Release` and stop if any test fails
4. Copy `Aspid.FastTools.Analyzers/Aspid.FastTools.Analyzers/Aspid.FastTools.Analyzers/bin/Release/netstandard2.0/Aspid.FastTools.Analyzers.dll` to `Aspid.FastTools/Packages/tech.aspid.fasttools/Aspid.FastTools.Analyzers.dll`
5. Report the result: build/test output, any errors, and confirm the DLL was copied successfully

Note: diagnostic IDs use the `AFT*` prefix. After bumping the submodule commit, remember the gitlink change in the superproject (`git add Aspid.FastTools.Analyzers`).

Arguments: $ARGUMENTS (optional: pass `Debug` to build in Debug configuration instead of Release)
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
.worktrees/
.claude/worktrees/
.zed/
.DS_Store

# UPM convention: `Samples~` is hidden from Unity importer but must be tracked.
# Override global `*~` ignore.
Expand Down
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "Aspid.FastTools.Analyzers"]
path = Aspid.FastTools.Analyzers
url = https://github.com/VPDPersonal/Aspid.FastTools.Analyzers.git
1 change: 1 addition & 0 deletions Aspid.FastTools.Analyzers
10 changes: 10 additions & 0 deletions Aspid.FastTools/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,16 @@ crashlytics-build.properties
/[Aa]ssets/[Tt]utorialInfo.meta
/[Aa]ssets/[Tt]utorialInfo/*

# Package samples imported into the dev project via Package Manager.
# Source of truth is the package's `Samples~/`; the imported copy is local-only.
/[Aa]ssets/[Ss]amples/
/[Aa]ssets/[Ss]amples.meta

# Auto-generated tool settings created by optional Editor packages
# (Project Auditor, Timeline). Default values only, dev-project-local.
/[Pp]roject[Ss]ettings/ProjectAuditorSettings.asset
/[Pp]roject[Ss]ettings/TimelineSettings.asset

# OS generated
.DS_Store
._*
Expand Down
5 changes: 4 additions & 1 deletion Aspid.FastTools/Packages/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -48,5 +48,8 @@
"com.unity.modules.vr": "1.0.0",
"com.unity.modules.wind": "1.0.0",
"com.unity.modules.xr": "1.0.0"
}
},
"testables": [
"tech.aspid.fasttools"
]
}
Binary file not shown.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
- **Features**
- [ProfilerMarker](#profilermarker)
- [Serializable Type System](#serializable-type-system)
- [SerializeReference Selector](#serializereference-selector)
- [Enum System](#enum-system)
- [ID System (Beta)](#id-system-beta)
- [SerializedProperty Extensions](#serializedproperty-extensions)
Expand Down Expand Up @@ -247,6 +248,24 @@ public sealed class AbilitySelector : MonoBehaviour

> The complete sample — `Ability` / `AbilitySelector` / `EnemyBase` and their subclasses — ships in the `Types` sample (Package Manager → Aspid.FastTools → Samples).

Decorate a candidate type with `[TypeSelectorDisplay]` to tune how it appears in the picker — an editor-only attribute (`[Conditional("UNITY_EDITOR")]`) in `Aspid.FastTools.Types` that carries no runtime cost:

```csharp
using Aspid.FastTools.Types;

// Rename the type in the picker, place it under an explicit group, give it a tooltip and an icon:
[TypeSelectorDisplay(Name = "Damage ×", Group = "Combat/Modifiers",
Tooltip = "Scales incoming damage", Icon = "d_ScriptableObject Icon")]
public sealed class DamageModifier { }
```

| Member | Description |
|--------|-------------|
| `Name` | Display name shown instead of the type's short name — in the picker rows and in the closed dropdown's caption. Search still matches the real type name too, and the hover tooltip keeps revealing the full `Namespace.Class, Assembly` identity. `null` or whitespace means no override. |
| `Group` | Explicit picker path with `/` separating levels (e.g. `"Combat/Melee"`). **Replaces** the type's namespace placement — the type appears only under this path, and path segments are shared between types. `null` or whitespace keeps the namespace placement. |
| `Tooltip` | Tooltip shown when hovering the type's row. `null` means no tooltip override. |
| `Icon` | Editor icon shown left of the label — an `EditorGUIUtility.IconContent` name, a project-relative asset path with extension (loaded via `AssetDatabase`), or a `Resources` texture path without extension. `null` means no icon. |

---

### Type Selector Window
Expand All @@ -258,6 +277,7 @@ The Inspector shows a button that opens a searchable popup window with:
- Keyboard navigation (Arrow keys, Enter, Escape)
- Navigation history (back button)
- Assembly disambiguation for types with identical names
- **Favorites** and **Recent** sections on the root page: a hover-revealed ★ toggle pins a type to Favorites, and the last 8 picked types are kept under Recent (both persisted per project, hidden while searching)

![aspid_fasttools_type_selector_window.png](../Images/aspid_fasttools_type_selector_window.png)

Expand Down Expand Up @@ -323,6 +343,97 @@ public sealed class TankEnemy : EnemyBase

---

## SerializeReference Selector

A drop-in type-picker dropdown for `[SerializeReference]` fields. Add `[TypeSelector]` next to `[SerializeReference]` and the Inspector replaces the default managed-reference UI with the same searchable, hierarchical picker used by `SerializableType`. You choose which concrete implementation of the field's type is instantiated, right in the Inspector; `<None>` clears the reference.

```csharp
using System;
using UnityEngine;
using System.Collections.Generic;
using Aspid.FastTools.Types;

public interface IWeapon
{
void Fire();
}

[Serializable]
public sealed class Pistol : IWeapon
{
[SerializeField] [Min(0)] private int _damage = 10;

public void Fire() => Debug.Log($"Pistol: {_damage} dmg");
}

[Serializable]
public sealed class Railgun : IWeapon
{
[SerializeField] [Min(0)] private float _chargeTime = 1.5f;

public void Fire() => Debug.Log($"Railgun charged for {_chargeTime}s");
}

public sealed class Loadout : MonoBehaviour
{
[SerializeReference] [TypeSelector]
private IWeapon _primary;

[SerializeReference] [TypeSelector]
private List<IWeapon> _sidearms;
}
```

The attribute is editor-only (`[Conditional("UNITY_EDITOR")]`) and carries no runtime cost. It works on single fields, arrays, and `List<T>`, in both IMGUI and UIToolkit inspectors.

### Capabilities

| Capability | What it does |
|---|---|
| **Pick an implementation** | The list shows the concrete, non-`UnityEngine.Object` classes assignable to the field's type. `[TypeSelector(typeof(IMelee))]` narrows it to `IMelee` implementations. |
| **Inline inspector** | The selected instance's serialized fields are drawn under a foldout. |
| **Open generics** | `Modifier<T>` and the like: arguments are inferred from a closed-generic field, or picked on a second page inside the picker. |
| **Data preserved** | Switching type carries over fields shared by name and serialized shape instead of resetting them to defaults. |
| **Copy / Paste** | Right-click the header to copy the value and paste it as an independent instance into any compatible field. |
| **Multi-object editing** | A mixed selection shows a mixed dropdown; picking a type or pasting applies an independent instance to each object in one Undo group. |
| **Compile-time checks** | Roslyn analyzer: `AFT0004` (error) — the type derives from `UnityEngine.Object`; `AFT0005` (warning) — the picker would be empty. |

### Repairing broken references

| Case | Fix |
|---|---|
| **Missing type** (renamed or deleted) | A yellow notice instead of a silent clear. The underlined **Fix** opens the picker and re-points the type while keeping its data — at any depth, in saved assets and live in Prefab Mode. |
| **Smart Fix** | Next to **Fix**, suggests the most likely replacement (`[MovedFrom]`, a different namespace/assembly, casing, a near-miss name) and applies it in one click — never automatically. |
| **Shared reference** (two fields share one instance) | Flagged with a notice; **Make unique** splits it into an independent copy. Duplicating a list element (Ctrl+D, `+`) no longer aliases the reference. |

Bulk repair lives in two dedicated tabs:

| Tab | Purpose |
|---|---|
| **Asset References** (`Tools → Aspid 🐍 → FastTools → Asset References`) | Maps an asset's whole managed-reference graph from its YAML — a per-component tree with field paths, shared and orphaned references, `MISSING` / `SHARED` badges, and an inline type dropdown on every card. Surfaces the missing references the Inspector cannot show. |
| **Project References** (`Tools → Aspid 🐍 → FastTools → Project References`) | `Scan Project` sweeps every `.prefab` / `.asset` / `.unity` under `Assets/`, groups broken references by stored type, and rewrites a whole group with a single `Fix all` (plus Smart Fix). A group whose stored type matches a declared `[MovedFrom]` rename reads as a pending migration instead of a breakage — one **Migrate all** click bakes the rename into the files, after which the attribute can be removed from code. |

### Project settings & the build/CI gate

**`Project Settings → Aspid FastTools → SerializeReference`** exposes:

| Setting | Scope | What it does |
|---|---|---|
| **Breakage detection** | per-user | The proactive toast + console warning when references newly become missing after a recompile / import. |
| **Auto de-alias duplicated list elements** | committed | A duplicated list element gets its own instance instead of sharing the original's reference id. |
| **Build / CI gate** | committed | `Off` / `Warn` / `Fail`: at player-build time, log or abort on missing (and, for CI, unset-required) managed references. |
| **Excluded scan folders** | committed | Paths skipped by every project scan. |

Committed values live in `ProjectSettings/SerializeReferenceSharedSettings.asset` — commit it so teammates and CI behave identically; breakage detection stays per-machine (`EditorPrefs`). Rid colours are not a setting — a shared reference is always colour-coded by id, since matching colours is what lets you tell which fields share an instance at a glance.

The same options are mirrored in the window's **Settings** tab (`Tools → Aspid 🐍 → FastTools → Settings`) and at **`Preferences → Aspid FastTools`**, alongside the picker's per-user preferences: a **Favorites** section toggle, a **Recent items** capacity slider (0–20; 0 hides the section and pauses recording without wiping history), a **Saved lists** row that clears the stored Favorites / Recent, an **Appearance** section (editor-theme override `StyleSheet` with **Create template…**) and a **Welcome** auto-show toggle. Every row carries a scope stripe — green for committed values, blue for per-user — and a pinned footer offers **Reset to defaults** separately per scope (saved Favorites / Recent lists survive a reset). All surfaces stay in live sync.

For headless CI, `SerializeReferenceCiGate.RunCheck` (invoked via `-batchmode -executeMethod`) writes a report and honours the committed gate severity: `Off` skips the check, `Warn` logs but exits 0, `Fail` exits non-zero when violations exist. `-srGateRequired` also flags unset `[TypeSelector(Required = true)]` fields across prefabs, ScriptableObjects and scenes (scenes are checked for top-level required fields via a pure-YAML pass); the per-run flags `-srGateWarnOnly` / `-srGateFail` override the committed severity.

> The full sample — `Loadout` / `IWeapon` / `Modifier<T>` and the missing-reference repair scenarios — ships in the `SerializeReferences` sample (Package Manager → Aspid.FastTools → Samples). A step-by-step walkthrough lives in that sample's `TUTORIAL.md`.

---

## Enum System

Provides serializable enum-to-value mappings configurable from the Inspector.
Expand Down
Loading
Loading