Establish rights, document the source, then implement a bounded module.
If you operate or are authorized to share a TCG data source, start by documenting written rights for the intended automated access, storage, use, and redistribution. A SourceModule is a technical adapter, not a license. Nothing is fetched or emitted until the relevant gate passes.
Start at /methodology/source-protocol. Understand the pre-network rights gate, SourceMeta, inert blocked modules, read + normalize, and the independent pre-publication review. CardRush is a blocked policy example, not a runnable reference implementation.
Edit docs/connections/the-tributaries.md to add a row for your source: name, upstream URL, access method, license tier, freshness budget, ToS notes, written-rights evidence, game coverage, and status: blocked until reviewed. Submit this first; no probe request is part of intake.
Create packages/data-ingest/src/<your-source-id>/ with index.ts exporting `SourceMeta`, `read`, `normalize`. Type the raw row and the canonical record. Keep `read` inert while status is blocked. For an approved source, declare a bounded rate limit, cancellation, and a pure normalizer.
Run `pnpm audit:tributaries` — it runs ten checks (module exists, shape conforms, required meta non-empty, id parity, catalog anchor resolved, ToS non-empty, license coherence, game codes valid, ingest-run recency for shipped sources, license-propagation drift). Pass all of them. Then open a PR.
The operator reviews the code and current source-specific rights. Only if acquisition is affirmatively covered may a bounded dry-run occur. Public emission remains off until a separate field-level redistribution review passes.
Set the conservative metadata, but do not confuse metadata with permission. `redistribute: false`, authentication, attribution, or an internal-only label cannot authorize acquisition or publication.
Same input → same output. No I/O, no clock reads, no random. Failed normalizations return `{ ok: false, reason }` — never throw. The reason must be actionable ('unmapped lang qya; add to LANG_MAP'), not 'normalization failed'.
Next guide
Cite the exact resource, source chain, and declared license.