Files
git.stella-ops.org/docs/modules/symbols/marketplace-architecture.md
2026-02-19 22:10:54 +02:00

5.4 KiB

Symbol Marketplace Architecture

Module: src/Symbols/StellaOps.Symbols.Marketplace/ Server: src/Symbols/StellaOps.Symbols.Server/ Sprint: SPRINT_20260220_001, SPRINT_20260220_002 Status: Implemented


Overview

The Symbol Marketplace extends the existing Symbols module with a registry of symbol/debug pack sources, a browsable catalog, and a four-dimension trust scoring model. It provides the infrastructure needed to discover, evaluate, and install debug symbol packs from vendor, distro, community, and partner providers.

This directly strengthens the "Symbolized call-stack proofs" moat by ensuring Stella Ops can source verified debug symbols for any artifact in the reachability graph, enabling DSSE-signed call-stack resolution across platforms.

Domain Primitives

SymbolPackSource

Registry entry for a symbol provider. Each source has:

  • Key/Name: Human-readable identifier (e.g., microsoft-symbols, ubuntu-debuginfod).
  • SourceType: vendor | distro | community | partner.
  • Priority: Integer ordering for resolution precedence.
  • FreshnessSLA: Target sync interval in seconds (default: 6 hours).
  • WarningRatio: Threshold (0-1) for warning state transition.

SymbolPackCatalogEntry

Represents an installable symbol/debug pack:

  • PackId: PURL-formatted package identifier.
  • Platform: Target platform (e.g., linux/amd64, any).
  • Components: Array of debug components included.
  • DsseDigest: DSSE signature digest for integrity verification.
  • Installed: Whether the pack is active for the tenant.

SymbolSourceFreshnessRecord

Materialized freshness projection following the advisory source pattern:

  • Tracks sync cadence, error rates, and SLA compliance.
  • Freshness state machine: healthy -> warning -> stale -> unavailable.
  • Includes signature coverage metrics (signed/unsigned/failure counts).

SymbolSourceTrustScore

Four-dimension trust scoring:

Dimension Weight Description
Freshness 0.30 How up-to-date the source is relative to SLA
Signature 0.30 DSSE signature coverage (signed packs / total packs)
Coverage 0.20 Artifact coverage derived from sync success rate
SLA Compliance 0.20 Whether source stays within freshness window

Overall score = weighted average, clamped to [0, 1].

Database Schema

symbol_pack_sources

Column Type Description
id uuid PK Source identifier
key text UNIQUE Machine-readable key
name text Display name
source_type text vendor/distro/community/partner
url text NULL Source endpoint URL
priority int Resolution priority
enabled boolean Active flag
freshness_sla_seconds int Target sync interval
warning_ratio decimal Warning threshold
created_at timestamptz Creation timestamp
updated_at timestamptz NULL Last update

symbol_pack_catalog

Column Type Description
id uuid PK Entry identifier
source_id uuid FK References symbol_pack_sources
pack_id text PURL identifier
platform text Target platform
components text[] Component list
dsse_digest text Signature digest
version text Pack version
size_bytes bigint Pack size
published_at timestamptz Publish date

API Surface

Symbol Sources (/api/v1/symbols/sources)

Method Path Description
GET / List sources with freshness projections
GET /summary Summary cards (healthy/stale/unavailable counts + avg trust)
GET /{id} Source detail with trust score
GET /{id}/freshness Freshness detail
POST / Create source
PUT /{id} Update source
DELETE /{id} Disable source

Marketplace Catalog (/api/v1/symbols/marketplace)

Method Path Description
GET / List catalog entries
GET /search Search by PURL/platform
GET /{entryId} Catalog entry detail
POST /{entryId}/install Install pack for tenant
POST /{entryId}/uninstall Uninstall pack
GET /installed List installed packs
POST /sync Trigger sync from sources

All responses include dataAsOf timestamp for staleness detection.

Integration Points

IntegrationType.SymbolSource (= 7)

New integration type added to StellaOps.Integrations.Core:

  • MicrosoftSymbols = 700
  • UbuntuDebuginfod = 701
  • FedoraDebuginfod = 702
  • DebianDebuginfod = 703
  • PartnerSymbols = 704

UI Integration

  • Symbol Sources list: /security-risk/symbol-sources — freshness summary + source table.
  • Symbol Source detail: /security-risk/symbol-sources/:sourceId — trust breakdown, sync timeline.
  • Symbol Marketplace: /security-risk/symbol-marketplace — catalog browse/search with install/uninstall.
  • Sidebar entries under "Security and Risk" section.

Existing Module Touchpoints

  • Scanner: Symbol resolution uses marketplace-installed packs for call-stack symbolication.
  • ReachGraph: Coverage dimension reflects artifact matching from reachability analysis.
  • Attestor: DSSE signatures on packs are verified through the existing proof chain infrastructure.
  • Policy: Trust scores feed into policy gate decisions for symbol-dependent verdicts.