# Tasks — Add @suaveplan/currency-provider-kraken ## Spec-completeness preflight (AGENTS.md §12a) - [x] Numbered checklist of every `### Requirement` and `#### Scenario` drafted in `specs/currency-provider-kraken/spec.md` (8 requirements; see the spec delta). ## Scaffold - [x] Create `packages/finance/currency-provider-kraken/` with `package.json` (`0.1.0`, `sideEffects: false`, `type: module`) - [x] Add `tsconfig.json` + `tsconfig.lib.json` mirroring the slim core - [x] Add `vite.config.ts` with `preserveModules: true` and the four external packages - [x] Add `vitest.config.ts` (forks pool, istanbul provider, 100/100/100/100 thresholds, includes `tests/**/*.test.ts`) - [x] Add `tests/setup/polyfills.ts` (empty shim) - [x] Add `README.md` (per CLAUDE.md §5 — H1, paragraph, install, quick start, modules) ## Implement - [x] `src/symbols/symbols.ts` — `KRAKEN_SYMBOL_MAP` (12 frozen entries) + `KRAKEN_PAIR_TO_SYMBOL` reverse map + `mergeSymbolMap` helper - [x] `src/symbols/symbols.md` — sibling doc (≥200 words; Purpose / Features / Basic / Advanced / API Reference / Implementation Notes) - [x] `src/symbols/symbols.test.ts` — frozen, complete, reverse consistent, merge override behaviour - [x] `src/symbols/index.ts` — explicit named barrel - [x] `src/provider/provider.ts` — `KrakenProvider` class + `KrakenProviderConfig` extending `NoKeyConfig` with optional `extraSymbols` map; `DEFAULT_KRAKEN_BASE_URL` constant - [x] `src/provider/provider.md` — sibling doc - [x] `src/provider/provider.test.ts` — full scenario coverage matching the `## Test strategy` in `design.md` - [x] `src/provider/index.ts` — explicit named barrel - [x] `src/index.ts` — explicit named barrel re-exporting both feature modules ## Dep-graph + invariants test - [x] `tests/dep-graph.test.ts` — no `export *` in `src/index.ts` or any feature barrel; subpath-export count matches feature-module count ## Pre-archive gates (AGENTS.md §13) - [x] Step 0 — spec reconciliation (every `### Requirement` + `**Verified by:**` resolves) - [x] Step 1 — `bunx turbo lint typecheck test --filter=@suaveplan/currency-provider-kraken` + `bun run check` both green - [x] Step 2 — `bunx turbo test:coverage --filter=@suaveplan/currency-provider-kraken` reports 100/100/100/100 - [x] Step 3 — `bunx turbo build --filter=@suaveplan/currency-provider-kraken` green - [x] Step 4 — banned-pattern grep returns zero - [x] Step 4a — barrel-shape grep returns zero - [x] Step 4b — test-runner-import grep returns zero - [x] Step 5 — missing-`.md` grep returns zero - [x] Step 6 — README present - [x] Step 7 — bare-version grep returns zero - [x] Step 8 — subpath-export count = 2 (matches feature module count) - [x] Step 9 — security-scan grep returns zero - [x] Step 10 — dependent sweep (no current dependents — fast-path) ## Root-doc refresh (AGENTS.md §13b) - [x] `bun scripts/folder-reorg/generate-manifest.ts` - [x] `bun scripts/generate-missing.ts` - [x] Update `STATUS.md` row for `@suaveplan/currency-provider-kraken` - [x] Update `SUMMARY.md` row for `@suaveplan/currency-provider-kraken` - [x] `bunx markdownlint-cli2 --fix` ## Archive (AGENTS.md §14) - [x] Fold `specs/currency-provider-kraken/spec.md` into `openspec/specs/currency-provider-kraken/spec.md` - [x] Move `openspec/changes/add-currency-provider-kraken/` → `openspec/archive/2026-05-17-add-currency-provider-kraken/`