relaypublisher manifest assignments categories scripts - tfsugjp/skills GitHub Wiki

Relaypublisher Manifest: Assignments, Categories, and macOS Scripts Validation

日本語

Summary

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).

Tracking

Type Issue
Parent Issue #42
Sub-issue Issue #43
Sub-issue Issue #44
Sub-issue Issue #45

Background

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.

Design

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.Notifications enum and required-ness rules, duplicate-target detection, and the macOS AppType: pkg + Intent: uninstall restriction.
  • 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: pkg only): forbidden on windows/lob entries, path-safety and .sh-extension checks always, plus existence/BOM/shebang/length checks when --repo-root is supplied — mirroring the existing Icon --repo-root pattern.

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.

Implementation phases

  1. Add Assignments validation under Issue #43.
  2. Add Categories validation under Issue #44.
  3. Add macOS pre/post-install Scripts validation under Issue #45.

Verification

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).

⚠️ **GitHub.com Fallback** ⚠️