# title
MacCrab Rave Catalog Entry (v1 — Ed25519 signing model)

# description
Schema for /rave/catalog/<plugin-id>.json. v1 (per plan v4.5) replaces v0's Sigstore-specific fields (signing_identity_pattern, exact_signer.*, sigstore_bundle_sha256, slsa_attestation_sha256) with Ed25519-specific fields (signer_public_key_sha256, signature_sha256). URLs are transport; digests are identity. Per plan v4.5 §3.2.

# properties.$schema.description
Optional schema reference for IDE autocomplete.

# properties.schema_version.description
Per-entry catalog-entry format version. Lets a client record exactly which entry-schema shape it verified for this plugin (PLATFORM-VISION provenance keystone), independent of the master-index catalog.schema_version. REQUIRED going forward: emitted by tools/regenerate-catalog when it writes the per-entry stub, and authored into hand-written entries; kept out of `required` here only so the pre-ceremony signed catalog/*.json still validate. Promote to `required` in the same commit that lands the re-signed entries.

# properties.display_name.description
Operator-facing plugin name. Cards + detail headers + install prompts use this verbatim. If absent, callers derive a friendly name from id.

# properties.short_description.description
One-line subtitle for catalog cards. Plain text, no markdown. Keep under ~120 chars to avoid card-grid wrap on narrow viewports.

# properties.long_description.description
Multi-paragraph what-it-does for the detail pane. Plain text or CommonMark; consumers MUST sanitize if they render as HTML. Renderable in the in-app browser detail panel + on the web detail page.

# properties.homepage.description
Optional canonical homepage URL — often the plugin's GitHub repo or a project landing page. Distinct from source_repo (which must be a GitHub URL for the verifier).

# properties.author.description
Human-facing author identity for the detail page byline. signer_identity remains the load-bearing trust handle.

# properties.icon.description
Path under /rave/icons/ to a 256x256 PNG (or SVG). Optional; absent renders a category-colored monogram tile. Path is relative to the rave base; consumers prepend their catalog-base URL.

# properties.screenshots.description
Paths under /rave/screenshots/ to PNG screenshots (rendered output examples or in-MacCrab views). Web detail page lays them out; in-app browser may show in a future version.

# properties.source_repo.description
Optional public-source URL — must be an https://github.com/<owner>/<repo> URL. First-party plugins typically omit this. Community submissions point at the public source repo the build was reproduced from. The anchored pattern is load-bearing: untrusted-PR vetting CI passes this value to `gh repo clone`, so it must never be an arbitrary string or begin with '-' (argument injection).

# properties.source_owner.description
Optional. Display-name for the source owner — present only when source_repo is set.

# properties.runtime.description
Matches platform's PluginManifest.runtime. All rave-catalog plugins are tierB per plan §6, but the field is explicit for clarity + multi-channel federation.

# properties.signer_identity.description
Human-readable publisher identity for the install-time prompt. Examples: 'github:someuser', 'org:someorg', 'maccrab-rave:first-party'. Not load-bearing for verification — that's signer_public_key_sha256.

# properties.signer_public_key_sha256.description
SHA-256 fingerprint of the publisher's 32-byte Ed25519 public key. The trust handle: operator's MacCrab matches this against trusted-keys.json + checks against revoked-keys.json at install.

# properties.release_url_template.description
RFC 6570 URI template for the signed release archive. Origin-pinned to https://rave.maccrab.com/ so a signed entry can never point the client's download at an arbitrary host (belt-and-suspenders atop the per-version artifact_sha256 pin). Relax this allowlist deliberately if an enterprise mirror is ever supported.

# properties.manifest_path.description
Path to manifest.json inside the plugin's install directory. Fixed at v1 — the flat-directory format puts manifest.json at the top of the install dir.

# properties.metadata.properties.category.description
Topic taxonomy. system = TCC/launchd/quarantine/codesigning-graph; browser = Safari; comms = Mail/iMessage/FaceTime; activity = KnowledgeC/Biome/AppleScript; artifact = Mach-O/DMG/PKG/plist analyzers; analyzer = posture cross-reference.

# properties.status.description
Plugin lifecycle status. pre-release = catalog entry exists but no published binary yet (v0.1.0 not cut).

# properties.kind.description
Forensic plugin role. collector = snapshots system/app data into structured records; analyzer = cross-references already-collected records to surface patterns.

# properties.privacy_class.description
Sensitivity of the plugin's emitted records. metadata = safe in plaintext scan; personal-comms = requires encrypted-scan opt-in; content = full body content, strictest opt-in.

# properties.requires_encrypted_scan.description
True if this plugin's output should be encrypted at rest. Defaults to (privacy_class != metadata).

# properties.tcc_requirements.description
macOS privacy services the plugin needs. Examples: 'Full Disk Access', 'Contacts', 'Automation'. Used by the install prompt + the kit How-it-works sheet.

# properties.data_sources.description
Human-readable list of files/databases the plugin reads. Operator sees this before install.

# properties.emits.description
Content type IDs the plugin produces. Drives platform-side tagging + the kit-aware findings display.

# properties.sample_output.items.properties.example.description
One example NDJSON record this plugin emits. Pretty-printed for catalog display. Rendered as text only, never as HTML.

# properties.sample_output.items.properties.caption.description
Optional human caption for the catalog UI.

# properties.sample_output.description
Plain-language samples of what the plugin's output looks like. The catalog UI renders one preview per content_type so operators can see the data shape before installing.

# $defs.VersionEntry.properties.artifact_sha256.description
Raw downloaded plugin archive SHA-256. Transport-integrity claim.

# $defs.VersionEntry.properties.canonical_tree_sha256.description
Canonical tree hash per plan §3.7 Mach-O-aware normalization recipe. Source-integrity claim.

# $defs.VersionEntry.properties.manifest_sha256.description
SHA-256 of the plugin's manifest.json file. Part of the Ed25519 signing input.

# $defs.VersionEntry.properties.signature_sha256.description
SHA-256 of the plugin's `signature` file (the raw 64-byte Ed25519 signature). Pins which signature was approved at vetting time.