セキュリティと来歴モデル Stable
問題パックは、再現可能で、改ざんを検出できるものでなければなりません。以下の事実は、 パックマニフェストの設計上不活性(inert-by-design)なスキーマと、パックインストーラーの 不変スナップショット / ロックモデルから導出された規範的リファレンスです。
保証
- Inert manifest (no executable hooks) Stable
- v1 manifests carry no author credentials, remote URLs, scripts, or executable hooks. The schema is .strict(), so every unknown top-level field is rejected.
- Immutable content-addressed snapshots Stable
- Installing a pack hashes a canonical, sorted file list and the bytes of each file into a SHA-256 content digest. Re-installing the same id+version with a different digest fails closed.
- Pinned Git provenance Stable
- A git-sourced pack records the HTTPS repository URL (credentials stripped), the resolved immutable 40-hex commit, and the subdir. Fetch is shallow, hooks-disabled, and resolves only the pinned commit — never a floating ref.
- No remote / mutable sources Stable
- The only source kinds are 'local' (a directory) and 'git' (a pinned commit). There is no mutable / floating reference path and no runtime code execution during install.
来歴の記録方法
インストールされたすべてのリビジョンは、コンテンツダイジェストとソース種別とともに
ロックに記録されます。git をソースとするパックはさらに、HTTPS リポジトリ URL
(認証情報は除去済み)、解決済みの不変な 40 桁 16 進コミット、およびサブディレクトリを
記録します。コンテンツダイジェストはソース種別に依存しないため、取得方法にかかわらず、
同じバイト列からは常に同じダイジェストが生成されます。
パックにできないこと
v1 マニフェストでは、スクリプト、ライフサイクルフック、リモート URL、認証情報を 宣言できません。インストール時にランタイムのコード実行は一切行われません。Git の フェッチは shallow かつフック無効で行われ、ピン留めされたコミットのみを解決します。 浮動するブランチやタグを追跡することはありません。
関連: パックマニフェストリファレンス。