This document defines the normative requirements for software directories, catalog registries, aggregators, and automated crawlers (collectively termed Registries) that consume, index, and present MSR JSON manifests.
The MSR Standard is an open, independent protocol. A registry (such as MySoftRank, a package index, or an AI discovery agent) is an independent consumer implementation. To claim MSR Conformance, a registry MUST satisfy the ingestion, network safety, cache discipline, and schema fidelity rules specified herein.
Traditional software directories require manual, multi-page form registration behind vendor accounts, causing stale metadata and high onboarding friction. Conforming registries MUST support automated manifest ingestion:
https://<entity.domain>/.well-known/msr.json.entity.domain) constitutes primary cryptographic and transport authority for technical
product metadata. Registries MUST treat this source as authoritative over unverified third-party submissions.
Allowing arbitrary URL intake introduces Server-Side Request Forgery (SSRF) and resource exhaustion risks. Any crawler or ingestion pipeline in a conforming registry MUST enforce the following safeguards prior to making outbound HTTP requests:
127.0.0.0/8, ::1, 0.0.0.0/8, ::/128,
::ffff:0:0/96).10.0.0.0/8, 172.16.0.0/12,
192.168.0.0/16).100.64.0.0/10, 169.254.0.0/16, fe80::/10,
fc00::/7 and 224.0.0.0/4).301, 302, 307,
308) MUST be validated against the same IP safety filters at every hop. Registries MUST limit
redirect depth to a maximum of 5 hops, reject user-info URL components, and never forward authorization,
cookies or publisher-supplied request headers across a hop.
https:// (and optionally
http://
for local sandbox testing) on default ports (443 and 80) is permitted. Custom ports are forbidden.Accept header, accept
only a successful JSON response, disable ambient credentials, and treat the response as untrusted data. It
MUST NOT use a manifest URL as a webhook target, proxy target or browser redirect.Registries MUST be good citizens of the open web and avoid hammering vendor infrastructure:
ETag and
Last-Modified response headers returned by publishers. Periodic refresh crawlers MUST send
If-None-Match and If-Modified-Since headers.
304 Not Modified, registries MUST NOT re-parse the
manifest or alter database records.429 Too Many Requests or
5xx, the registry MUST respect Retry-After headers and apply exponential backoff.
To facilitate ecosystem migration while preserving the integrity of MSR JSON, registries MAY accept legacy and transitional formats, provided they are normalized to the canonical schema:
| Format Dialect | Parser Requirement | Normalization Target |
|---|---|---|
msr.json (Canonical) |
Direct validation against JSON Schema (Draft 2020-12) | Canonical model without mutation. |
pad.json (Transition Dialect) |
Native JSON key-value mapper | Normalized into msr.json v2.0 structures. |
pad.xml (ASP PAD 4.0) |
Hardened defensive XML parser (e.g. defusedxml to prevent XXE / entity expansions) |
Normalized into msr.json v2.0 structures. |
Program_Cost_Dollars: 29.99)
MUST
be normalized to exact integer minor units (starting_price_cents: 2999) accompanied by an ISO 4217
currency code ("USD").Char_Desc_250) MUST be assigned
to explicit BCP 47 language tags (e.g. entity.descriptions.en.summary).Primary_Download_URL) mapped into
releases.latest.artifacts[] MUST be omitted until an SHA-256 digest is independently computed or
verified. The canonical 2.0 artifact object has no verified member; registries MAY retain that
ingestion state internally but MUST NOT add it to a manifest.
While submission and read-only indexing are zero-account and frictionless, administrative control over a registry listing requires verified domain authority:
_msr-challenge=<token> on
the entity.domain.security@<entity.domain>).
A registry MUST NOT fork, mutate, or introduce proprietary enum values into the canonical schema while referencing
the canonical schema identifier https://msrjson.org/schemas/msr-2.0.json.
Registry-specific operational attributes (e.g. internal review aggregations, editorial rankings, click counters, sponsorship flags) MUST be stored in the registry's own private database. They MUST NOT be injected into published MSR JSON manifests.
A syntactically valid manifest is a publisher claim, not proof that every statement in it is true. Registries
MUST label domain verification, signatures, availability, data residency and audit receipts according to the
evidence they independently observed. A registry MUST NOT upgrade a publisher-declared
trust.domain_verification.status to verified merely because the field is present.
When validating an RFC 0003 signature, a registry MUST canonicalize the manifest with JCS after removing
trust.signatures, identify the advertised algorithm, and reject malformed encodings, unsupported
algorithms and failed verification. A signature proves control of a private key at signing time; it does not by
itself prove vendor identity, legal compliance, product availability or security quality.
Registries MUST retain the retrieval time, effective URL, response validators and verification outcome needed to explain a displayed trust state. They SHOULD expose a re-check action and MUST downgrade a previously verified state when the proof is revoked, absent or fails on refresh.