relaypublisher manifest assignments categories scripts_ja - tfsugjp/skills GitHub Wiki

Relaypublisher Manifest: Assignments・Categories・macOS Scripts の検証

English

Summary

relaypublisher-manifest skill のバンドルチェッカーとガイダンスを拡張し、対象 Relaypublisher ツールでは local かつ Graph 不要でありながら、前回の作業ではスコープ外とした3つの manifest 領域を静的検証できるようにします: Assignments(Windows/macOS 共通)、Categories(共通)、macOS の pre/post-install Scripts(AppType: pkg のみ)。

Tracking

種別 Issue
Parent Issue #42
Sub-issue Issue #43
Sub-issue Issue #44
Sub-issue Issue #45

Background

直前の作業で、relaypublisher-manifest(それまで macOS 専用)に Windows Win32 の authoring/validation 対応を追加し、Package/Install/Detection と macOS Source 共通の source-item 形式をカバーしました。Assignments・Categories・macOS Scripts は、対象ツールの schema 上は実在する local・Graph 不要の静的検証対象でありながら、当時は「Windows対応の追加」というスコープを超えると判断し意図的に見送りました。本 plan はその follow-up として明示的に追跡します。

Design

3領域とも、既存チェックで確立した内容と同じ扱いを行います: バンドルチェッカー(scripts/manifest_policy.py)への専用 RP0xx コード追加、ユニットテストと YAML フィクスチャの追加、該当 reference doc の static-validation checklist 更新、docs/plan/relaypublisher-manifest.md の「out of scope」注記からの除去。

  • Assignments(共通): Target/GroupId/Mode/Intent/FilterId/FilterMode/Settings.Notifications の enum・必須性ルール、重複 target の検出、macOS AppType: pkg における Intent: uninstall 禁止。
  • Categories(共通): 非空白・前後空白なし・大文字小文字を区別しない重複チェック、および省略と空配列の意味的な違いの保持(省略は既存関係を変更しない、空配列は全解除)。tenant 側の category 名前解決はスコープ外のまま。
  • macOS Scripts(AppType: pkg のみ): windows/lob entry での禁止、パス安全性と .sh 拡張子チェックを常時実施、--repo-root 指定時は既存の Icon パターンに倣い存在・BOM・shebang・文字数上限も追加でチェック。

3領域とも package、publish、--force、Microsoft Graph 呼び出し、tenant/app/assignment の変更は一切追加しません。すべて local な静的チェックにとどまります。

Implementation phases

  1. Issue #43 で Assignments 検証を追加します。
  2. Issue #44 で Categories 検証を追加します。
  3. Issue #45 で macOS pre/post-install Scripts 検証を追加します。

Verification

各 sub-issue 完了後に python scripts/validate_marketplaces.py と relaypublisher-manifest のユニットテスト一式(python3 tests/test_manifest_policy.py -v)を実行し、両方が green であることを確認します。新規フィクスチャはバンドルチェッカー CLI を直接実行して検証します(valid は exit 0、invalid は想定する RP0xx コードとともに exit 1)。

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