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://<primary_domain>/.well-known/msr.json.entity.primary_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).10.0.0.0/8, 172.16.0.0/12,
192.168.0.0/16).169.254.0.0/16, fe80::/10).
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.
https:// (and optionally
http://
for local sandbox testing) on default ports (443 and 80) is permitted. Custom ports are forbidden.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 flagged with "verified": false until an SHA-256
digest is independently computed or verified.
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.primary_domain.security@<primary_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.