Prometheus
DE EN

02 — Capture

Four parallel modes, one open submission protocol.

No mode depends on another. Modes A, B, and C flow via the same signed protocol into multiple independent mirrors — none of them require a return channel to the end user. Mode D stands separately: it evaluates exclusively public registry data and runs mirror-internally.

Data flow

From the source to the mirror.

Modes A, B, and C initiate every connection themselves — egress-only. Mode D runs completely mirror-internally on public sources.

Mode D · mirror-internal · no signature roundtrip · schema-reject-pii only A · SDK Runtime usage B · Agent Phase 2 C · Hybrid Phase 2 D · Scraper Registries Submission Protocol JCS · ed25519 · did:key Mirror EU-1 Phase 1 Mirror 2 Phase 2 Mirror 3+ Phase 3

Dashed nodes are planned, not in operation. In Phase 1, exactly one bootstrap mirror runs.

The four modes

What each mode sees — and what it does not.

A

Self-Instrumentation SDK

An SDK in the OSS library itself reports runtime usage. Exactly four event types: install, session-start, runtime-tick every five minutes, and feature-flag. The library decides whether to include it — no one else.

Phase 1 · six languages · k ≥ 5
D

Registry Scraping

Public manifests from npm, PyPI, Maven Central, crates.io, and Go Modules, plus a GitHub manifest crawl. Runs mirror-internally without signature roundtrip — the PII check still applies as defense-in-depth.

Phase 1 · mirror-internal · public sources
B

End-User Agent

An agent in the host software reports which embedded libraries are actually running. Since this measures closer to the end user, a significantly stricter k-minimum applies.

Phase 2 · planned · k ≥ 25
C

Hybrid Aggregator

A local aggregator bundles multiple sources before anything leaves the machine. This increases cohort size and further reduces the re-identification risk.

Phase 2 · planned · k ≥ 25

Common denominator

One protocol for modes A, B, and C.

Whatever these three modes capture — it only leaves the machine in one form: canonically serialized, signed, and only after both PII gates. Mode D works differently: The scraper operates mirror-internally on purely public sources, without signature roundtrip and without k-anon guard — which would be meaningless there because a public registry has no cohort. The schema-reject-PII gate still applies for D, as defense-in-depth.

Canonical Serialization

RFC 8785 (JCS) — the same input produces byte-identical output in every language. Without this, no signature would be cross-language verifiable.

ed25519 over the Body Bytes

Signing is done directly over the canonical bytes, without prehash. The submission_hash is separate and serves as an idempotency key.

PURL as Project Identity

Always a Package URL — pkg:npm/…, pkg:pypi/…, pkg:cargo/…. No free text, no name ambiguities.

Egress-only

Modes A, B, and C initiate every connection themselves. There is no return channel through which a mirror could address an end device.