Files
suaveplan/openspec/archive/2026-05-17-add-currency-provider-cryptocompare/tasks.md
2026-05-27 23:29:53 +01:00

4.0 KiB

Tasks — Add @suaveplan/currency-provider-cryptocompare

Spec-completeness preflight (AGENTS.md §12a)

  • Numbered checklist of every ### Requirement and #### Scenario drafted in specs/currency-provider-cryptocompare/spec.md (4 requirements, 11 scenarios).

Package scaffolding

  • Create packages/finance/currency-provider-cryptocompare/ with package.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.ts no-op shim mirroring sibling packages.

Implementation

  • src/cryptocompare/cryptocompare.ts — CryptoCompareConfig (extends NoKeyConfig with optional apiKey), CryptoCompareProvider class implementing CurrencyProvider. Defaults: name = "cryptocompare", supportsCrypto = true, supportsFiat = false, base "USD", 15-symbol default targets.
  • Optional apiKey attached via authorization: Apikey <key> header on every request when present and non-whitespace.
  • Error mapping: HTTP_ERROR (shared httpRequest), PARSE_ERROR (invalid JSON / non-object payload), UPSTREAM_ERROR (Response === "Error"), UNKNOWN_CURRENCY (no positive quotes).
  • src/cryptocompare/index.ts explicit-named barrel.
  • src/index.ts explicit-named root barrel.

Tests

  • src/cryptocompare/cryptocompare.test.ts — runner imports from @suaveplan/testing/runner, recording FetchLike, 14 cases covering: metadata, default invert + zero-skip + USD default, keyless vs keyed header, whitespace-only key treated as absent, custom baseUrl + explicit targets, empty targets falls back to defaults, HTTP_ERROR, PARSE_ERROR (invalid JSON), PARSE_ERROR (non-object payload), UPSTREAM_ERROR (with Message), UPSTREAM_ERROR (no Message → default message), UNKNOWN_CURRENCY (empty map), UNKNOWN_CURRENCY (every quote non-finite or non-positive), AbortSignal forwarding. Every test carries { timeout: 5000 }.

Documentation

  • src/cryptocompare/cryptocompare.md sibling 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 ### Requirement and **Verified by:** resolves to a real file + verbatim test name.
  • Step 1 — bunx turbo lint typecheck test --filter=@suaveplan/currency-provider-cryptocompare green.
  • Step 2 — bunx turbo test:coverage --filter=@suaveplan/currency-provider-cryptocompare reports 100/100/100/100 via istanbul.
  • Step 3 — bunx turbo build --filter=@suaveplan/currency-provider-cryptocompare green.
  • Step 4 — banned-pattern grep returns zero.
  • Step 4a — barrel-shape grep returns zero (src/index.ts exempt).
  • Step 4b — test-runner-import grep returns zero.
  • Step 5 — missing-.md grep 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.ts to refresh MANIFEST.md.
  • Re-run bun scripts/generate-missing.ts to refresh MISSING.yml.
  • Update STATUS.md row for @suaveplan/currency-provider-cryptocompare.
  • Update SUMMARY.md row likewise.
  • bunx markdownlint-cli2 --fix across touched root + change files.

Archive (AGENTS.md §14)

  • Fold specs/currency-provider-cryptocompare/spec.md into openspec/specs/currency-provider-cryptocompare/spec.md.
  • Move change folder to openspec/archive/2026-05-17-add-currency-provider-cryptocompare/.