Skill sync now refuses to write when its root looks unsafe, matching plugin sync.
What's wrong with this entry?
Skill syncing now checks its skills root, trash root and config home before doing anything and throws instead of writing when that root is refused, the same protection plugin sync already had. This is on for everyone in this build.
- Refusals are reported at both the extract and sweep phases and recorded as
skills_sync_root_refused, mirroring the plugin side'splugins_sync_root_refused. - The skills manifest is now read through schema parsing with per-field defaults, so a partly corrupt manifest loses only the bad fields instead of being discarded whole.
- Plugin sync landing failures now report a cause:
download,root_refused,extract,localordeferred, plus aplugins_sync_unexpected_landing_causewarning for the case that should not occur.
skills_sync_root_refused
Strings lifted out of the shipped bundle, so the claim above can be checked against them.