4.0 KiB
4.0 KiB
Tasks — Add @suaveplan/currency-provider-cryptocompare
Spec-completeness preflight (AGENTS.md §12a)
- Numbered checklist of every
### Requirementand#### Scenariodrafted inspecs/currency-provider-cryptocompare/spec.md(4 requirements, 11 scenarios).
Package scaffolding
- Create
packages/finance/currency-provider-cryptocompare/withpackage.json(0.1.0, sibling deps on slim core / currency / types / error / tslib),tsconfig.json,tsconfig.lib.json,vite.config.ts,vitest.config.ts. - Create
tests/setup/polyfills.tsno-op shim mirroring sibling packages.
Implementation
src/cryptocompare/cryptocompare.ts—CryptoCompareConfig(extendsNoKeyConfigwith optionalapiKey),CryptoCompareProviderclass implementingCurrencyProvider. Defaults:name = "cryptocompare",supportsCrypto = true,supportsFiat = false, base"USD", 15-symbol defaulttargets.- Optional
apiKeyattached viaauthorization: Apikey <key>header on every request when present and non-whitespace. - Error mapping:
HTTP_ERROR(sharedhttpRequest),PARSE_ERROR(invalid JSON / non-object payload),UPSTREAM_ERROR(Response === "Error"),UNKNOWN_CURRENCY(no positive quotes). src/cryptocompare/index.tsexplicit-named barrel.src/index.tsexplicit-named root barrel.
Tests
src/cryptocompare/cryptocompare.test.ts— runner imports from@suaveplan/testing/runner, recordingFetchLike, 14 cases covering: metadata, default invert + zero-skip + USD default, keyless vs keyed header, whitespace-only key treated as absent, custombaseUrl+ explicit targets, emptytargetsfalls back to defaults,HTTP_ERROR,PARSE_ERROR(invalid JSON),PARSE_ERROR(non-object payload),UPSTREAM_ERROR(withMessage),UPSTREAM_ERROR(noMessage→ default message),UNKNOWN_CURRENCY(empty map),UNKNOWN_CURRENCY(every quote non-finite or non-positive),AbortSignalforwarding. Every test carries{ timeout: 5000 }.
Documentation
src/cryptocompare/cryptocompare.mdsibling doc (≥200 words, Purpose / Features / Usage Basic / Usage Advanced / API Reference / Implementation Notes).- Root
README.md(install, quick start, modules link, error table).
Pre-archive gates (AGENTS.md §13)
- Step 0 — spec reconciliation: every
### Requirementand**Verified by:**resolves to a real file + verbatim test name. - Step 1 —
bunx turbo lint typecheck test --filter=@suaveplan/currency-provider-cryptocomparegreen. - Step 2 —
bunx turbo test:coverage --filter=@suaveplan/currency-provider-cryptocomparereports 100/100/100/100 via istanbul. - Step 3 —
bunx turbo build --filter=@suaveplan/currency-provider-cryptocomparegreen. - Step 4 — banned-pattern grep returns zero.
- Step 4a — barrel-shape grep returns zero (
src/index.tsexempt). - Step 4b — test-runner-import grep returns zero.
- Step 5 — missing-
.mdgrep returns zero. - Step 6 — README present.
- Step 7 — bare-version grep returns zero.
- Step 8 — subpath-export count = 1 (
./cryptocompare/cryptocompare). - Step 9 — security-scan grep returns zero.
- Step 10 — no dependents (new package).
Root-doc refresh (AGENTS.md §13b)
- Re-run
bun scripts/folder-reorg/generate-manifest.tsto refreshMANIFEST.md. - Re-run
bun scripts/generate-missing.tsto refreshMISSING.yml. - Update
STATUS.mdrow for@suaveplan/currency-provider-cryptocompare. - Update
SUMMARY.mdrow likewise. bunx markdownlint-cli2 --fixacross touched root + change files.
Archive (AGENTS.md §14)
- Fold
specs/currency-provider-cryptocompare/spec.mdintoopenspec/specs/currency-provider-cryptocompare/spec.md. - Move change folder to
openspec/archive/2026-05-17-add-currency-provider-cryptocompare/.