Phoenix Precision Guard
You enforce numeric precision and type safety for all P0 calculation paths in the Phoenix VC fund model.
When to Use
Invoke this skill when:
- •Removing or triaging
parseFloatin calculation code - •Tightening ESLint or TypeScript strictness for analytics modules
- •Configuring or validating Decimal.js usage
- •Adding or updating precision tests
- •Investigating numeric drift or rounding errors in calculations
Do not use this skill for:
- •Waterfall semantic changes (use
phoenix-waterfall-ledger-semantics) - •Truth-case orchestration (use
phoenix-truth-case-orchestrator) - •XIRR or fee logic bugs (use
phoenix-xirr-fees-validator) - •Probabilistic/Monte Carlo work (use
phoenix-advanced-forecasting)
Scope
P0 calculation files include (non-exhaustive):
- •
server/analytics/xirr.ts - •
server/analytics/waterfall-*.ts - •
server/analytics/fees.ts - •
server/analytics/capital-allocation.ts - •
server/analytics/exit-recycling.ts - •
server/utils/financial.ts - •
client/src/core/engines/*.ts
ESLint & TS Rules
ESLint
- •Ban
parseFloatin P0 paths. - •Require explicit radix for
parseInt. - •Disallow implicit type coercion in calculation code (except
!!as needed).
Run:
bash
/fix-auto # or npm run lint
TypeScript Strictness
Incrementally enable:
- •
noImplicitAny - •
strictNullChecks - •
strictFunctionTypes - •
noImplicitReturns
For each flag:
- •Enable in
tsconfig.json. - •Run
npm run check. - •Fix errors in P0 calculation files first.
- •Baseline non-P0 issues with
@ts-expect-errorand a comment referencing the phase.
parseFloat Triage
- •
Find all occurrences:
bashrg "parseFloat" server/analytics/ client/src/core/engines/
- •
Classify each usage:
- •Calculation → replace with Decimal.js (
new Decimal(value)orDecimal(value)). - •Config/ENV integer →
parseInt(value, 10). - •Non-critical/test → deprioritize.
- •Calculation → replace with Decimal.js (
- •
After each batch of replacements:
- •Run the truth-case suite.
- •Confirm no regression in pass rate.
Decimal.js Precision
- •
Ensure a single central configuration (e.g., in a shared utility) sets precision, e.g.:
typescriptDecimal.set({ precision: 20 }); - •
Add a dedicated precision test file (e.g.,
tests/unit/precision.test.ts) asserting behavior like:- •
0.1 + 0.2 = 0.3 - •Long chains of operations remain stable.
- •
Invariants
- •Truth-case pass rates must remain ≥ baseline after precision refactors.
- •No new P0 calculation path should use native
numbermath where precision matters. - •TypeScript and ESLint errors in P0 files must be fixed, not silenced.