relaypublisher manifest assignments categories scripts - tfsugjp/skills GitHub Wiki
Extend the relaypublisher-manifest skill's bundled checker and guidance to statically validate three additional manifest surfaces that are local and Graph-free in the target Relaypublisher tool but were left out of scope in the prior round of work: Assignments (shared by Windows and macOS), Categories (shared), and macOS pre/post-install Scripts (AppType: pkg only).
| Type | Issue |
|---|---|
| Parent | Issue #42 |
| Sub-issue | Issue #43 |
| Sub-issue | Issue #44 |
| Sub-issue | Issue #45 |
An earlier round of work added Windows Win32 authoring/validation parity to relaypublisher-manifest (previously macOS-only), covering Package/Install/Detection and the source-item shape shared with macOS Source. Assignments, Categories, and macOS Scripts were deliberately deferred at that time — they are real, statically checkable, Graph-free validation surfaces in the target tool's schema, but were judged out of scope for "add Windows support." This plan tracks adding them as an explicit follow-up.
Each of the three surfaces gets the same treatment already established for the existing checks: dedicated RP0xx codes in the bundled checker (scripts/manifest_policy.py), unit tests plus checked-in YAML fixtures, updates to the relevant reference doc(s)' static-validation checklist, and an update to docs/plan/relaypublisher-manifest.md removing the item from its "out of scope" note.
-
Assignments (shared):
Target/GroupId/Mode/Intent/FilterId/FilterMode/Settings.Notificationsenum and required-ness rules, duplicate-target detection, and the macOSAppType: pkg+Intent: uninstallrestriction. - Categories (shared): non-blank/no-outer-whitespace/case-insensitive-duplicate checks, and preserving the omitted-vs-empty-array distinction (omission leaves existing relationships untouched; an empty list clears them) — tenant-side category-name resolution stays out of scope.
-
macOS Scripts (
AppType: pkgonly): forbidden onwindows/lobentries, path-safety and.sh-extension checks always, plus existence/BOM/shebang/length checks when--repo-rootis supplied — mirroring the existingIcon--repo-rootpattern.
No package, publish, --force, Microsoft Graph call, or tenant/app/assignment change is added by any of the three; all remain local, static checks only.
- Add Assignments validation under Issue #43.
- Add Categories validation under Issue #44.
- Add macOS pre/post-install Scripts validation under Issue #45.
Run python scripts/validate_marketplaces.py and the full relaypublisher-manifest unit test suite (python3 tests/test_manifest_policy.py -v) after each sub-issue lands; both must stay green. New fixtures are exercised via the bundled checker CLI directly (valid → exit 0, invalid → exit 1 with the expected RP0xx code).