488. An origin list

2026-09-10 - directed, continuing 487

The fallback the manifest had room for, built test-first.

What landed

A corpus source carries sources - origins tried in order, first that answers wins, every failure kept and named. Origins are bare strings classified here rather than declared, so a release URL sits beside a relative path without a keyword for each. A drive-letter path is a path and not a scheme, which is why classification is a tested function and the test is :// rather than : (D664).

The four obSCEne entries are in, routed by target:

payloads-mirror                 (github-release) -> payloads
obscene                         (local)          -> titles
obscene-probe-prospero-native   (local)          -> titles
obscene-probe-prospero-payload  (local)          -> payloads
obscene-probe-neo-native        (local)          -> titles
obscene-probe-neo-pkg           (local)          -> packages

Surprises

Deliberately not wired

The fetch path still uses repo/tag/path. The decision layer is complete and tested and the manifest carries the field, but walking an origin list at fetch time is the next step - and a manifest that describes something the code does not do is worse than one that describes less.

Next