Files
ccs/tests
Kenneth Wong 3583b544d0 feat(models): add Claude Fable 5.1 and correct Sonnet 5 pricing
Register `claude-fable-5-1` in the CLIProxy model catalog, the dashboard
catalog, and the usage pricing registry.

Pricing is taken from Anthropic's official pricing page:

- Fable 5.1 base rates are $10/$50 per MTok with a $12.50 5m cache write,
  matching Fable 5.
- Cache hits bill at 0.025x base input ($0.25/MTok) rather than the
  standard 0.1x multiplier. Anthropic applies that reduced rate only to
  Fable 5.1 and Mythos 5.1, so this entry cannot derive its cache rates
  from CACHE_READ_MULTIPLIER.

This also corrects Claude Sonnet 5 from $3/$15 to $2/$10 (cache write
$2.50, cache read $0.20). The launch introductory rate became the
standard price and the increase scheduled for 2026-09-01 was cancelled,
so the previous entry over-reported Sonnet 5 usage cost by 50%.

Thinking on Fable 5.1 is always on and can only be steered through
effort levels, so the catalog entry exposes the same `low`..`max` level
surface as Fable 5 and Opus 5 instead of a manual token budget.

The GitHub Copilot catalog is deliberately left unchanged, since Copilot
availability for Fable 5.1 is not verified; surfacing it there would
offer a model the backend may reject.

Regenerates docs/reports/hardening-inventory.{json,md} so the ci-parity
gate matches the source tree.
2026-09-03 16:26:41 +08:00
..

CCS Test Suite

Root TypeScript and JavaScript tests run with Bun's test runner. Native shell, PowerShell, Docker, and standalone probes cover contracts that need a real platform or process boundary.

Ownership

Area Path Use for
Unit unit/ Focused module and command behavior
Integration integration/ Cross-module, process, proxy, auth, and web-server behavior
End to end e2e/ Packaged CLI workflows
npm package npm/ Installation, exports, and package behavior
Native native/ Unix and Windows shell behavior
Docker docker/ Compose and stable network/service contracts
Documentation docs/ Repository documentation invariants
Shared support shared/ Fixtures and helpers reused by suites
Mocks mocks/ Bounded test doubles and fixtures

Some source domains also keep focused tests in src/**/__tests__/. Follow the nearest established pattern and avoid moving tests solely for taxonomy.

Commands

Commands are defined in ../package.json. Bucket membership and execution live in ../scripts/run-test-bucket.js.

bun run test:fast      # Fast Bun test bucket
bun run test:slow      # Slow Bun test bucket
bun run test:all       # All root non-e2e Bun test buckets
bun run test:unit      # tests/unit
bun run test:npm       # tests/npm
bun run test:native    # Native Unix edge-case script
bun run test:e2e       # tests/e2e with fail-fast and extended timeout
bun run test           # Build, then test:all

For the normal contributor gate:

bun run format
bun run lint:fix
bun run validate

For the closest local equivalent to PR CI:

bun run validate:ci-parity

Dashboard tests use Vitest and are documented in ../ui/README.md.

Test Isolation

  • Set CCS_HOME to a temporary directory.
  • Never read or modify a contributor's real ~/.ccs/ or ~/.claude/.
  • Use getCcsDir() from ../src/utils/config-manager.ts for CCS paths.
  • Keep fixtures deterministic and free of credentials or private account data.
  • Use real behavior at the boundary under test; do not weaken assertions to hide regressions.

Adding Coverage

  • Add a focused unit test for isolated logic.
  • Add integration coverage when behavior crosses modules, processes, HTTP, or persistence boundaries.
  • Add e2e coverage when command routing or packaged CLI behavior is the contract.
  • Add native or Docker coverage only when platform/runtime behavior cannot be represented faithfully in Bun tests.
  • Run the smallest relevant command first, then broaden to the contributor or CI-parity gate when shared contracts changed.