Files
yvgude--lean-ctx/docs/integrations/finops.md
T
wehub-resource-sync 26382a7ac6
CI / Clippy (push) Failing after 15m13s
CI / Test (ubuntu-latest) (push) Failing after 16m1s
CI / Test (macos-latest) (push) Has been cancelled
CI / Test (windows-latest) (push) Has been cancelled
CI / Build (no embeddings / no ORT) (push) Has been cancelled
CI / Format (push) Has been cancelled
CI / Cookbook (Node) (push) Has been cancelled
CI / Pi Extension (Node) (push) Has been cancelled
CI / Rust SDK (lean-ctx-client) (push) Has been cancelled
CI / Embed SDK (lean-ctx-sdk) (push) Has been cancelled
CI / Python SDK (leanctx) (push) Has been cancelled
CI / Hermes Plugin (Python) (push) Has been cancelled
CI / SDK Conformance Matrix (push) Has been cancelled
CI / Coverage (push) Has been cancelled
CI / cargo-deny (push) Has been cancelled
CI / Adversarial Safety (push) Has been cancelled
CI / Benchmarks (push) Has been cancelled
CI / Output-Quality Gate (eval A/B) (push) Has been cancelled
CI / Documentation (push) Has been cancelled
CI / CI Green (push) Has been cancelled
JetBrains Plugin / Actionlint (push) Has been cancelled
CodeQL / Analyze (actions) (push) Has been cancelled
CodeQL / Analyze (javascript-typescript) (push) Has been cancelled
CodeQL / Analyze (rust) (push) Has been cancelled
JetBrains Plugin / Validation (push) Has been cancelled
JetBrains Plugin / Build (push) Has been cancelled
JetBrains Plugin / Test (push) Has been cancelled
Security Check / Security Scan (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:35:30 +08:00

158 lines
6.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# LeanCTX in the FinOps Stack — CloudZero, Vantage, FOCUS
`lean-ctx finops export` turns the tamper-evident savings ledger into daily
cost rows your FinOps platform ingests for showback/chargeback. Unlike
self-reported savings claims, every exported number is backed by a
hash-chained event (`lean-ctx ledger verify`) with the model price pinned at
recording time — an auditor can replay the chain.
```text
savings ledger (hash-chained JSONL)
│ aggregate: day × project × agent × model × tool
DailyCostRow { date, project, agent_role, model, tool,
tokens_actual, tokens_saved, cost_usd, savings_usd }
├── FOCUS 1.2 CSV ──────────► any FOCUS consumer / data warehouse
├── CBF CSV / Stream JSON ──► CloudZero (AnyCost)
└── Vantage CSV ────────────► Vantage (Custom Provider)
CFO cost report
```
## Quick reference
```bash
lean-ctx finops export --target=focus --out=leanctx_focus.csv
lean-ctx finops export --target=cbf --from=2026-06-01 --to=2026-06-30 --upload
lean-ctx finops export --target=vantage --out=leanctx_vantage.csv --upload
```
## Data model decisions (read before importing)
- **Costs are real reads**: `cost_usd` = tokens actually sent through
lean-ctx × the per-event pinned model price. No counterfactuals.
- **Savings are separate rows, never mixed into spend**: FOCUS/Vantage get
`ChargeCategory=Credit` rows with negative `BilledCost` (FOCUS's category
for granted reductions); CloudZero gets `lineitem/type=Discount` rows
(CBF's documented mechanism, included in CloudZero "Real Cost"). Budgets
built on Usage stay clean; savings stay drillable.
- **No pricing table to maintain**: each ledger event stores
`unit_price_per_m_usd` at recording time. Provider price changes never
rewrite history — the export is reproducible forever.
- **Privacy**: `project` is the truncated repo hash from the ledger (paths
never leave the machine). For readable dashboards, add an opt-in showback
mapping (see below) — applied at export time only, so the ledger and signed
batch stay privacy-preserving.
## Showback project names (`--aliases`, #668)
The ledger stores only a truncated repo hash, never a path. To show readable
team/project names in chargeback dashboards, drop a mapping file and it is
applied **at export time only** — the ledger, the signed batch and the hash
chain are never touched.
```toml
# <config_dir>/finops-aliases.toml (or point --aliases=FILE / $LEAN_CTX_FINOPS_ALIASES)
[projects]
# <repo_hash> = "<display name>"
a1b2c3d4e5 = "Payments"
deadbeef00 = "Platform / SRE"
```
```bash
lean-ctx finops export --target=focus --out=leanctx_focus.csv # uses the default file
lean-ctx finops export --target=focus --aliases=team-map.toml # explicit mapping
```
Unmapped hashes fall back to the hash, so an incomplete map never drops rows.
Find the hashes to map in the `project` column of a plain (unmapped) export.
## CloudZero (AnyCost)
Spec pinned: [CBF — Common Bill Format](https://docs.cloudzero.com/docs/anycost-common-bill-format-cbf),
required columns `time/usage_start` + `cost/cost`.
1. In CloudZero, create an **AnyCost Stream** connection and note the
connection ID + an API key.
2. Export and upload:
```bash
export CLOUDZERO_API_KEY="..."
export CLOUDZERO_CONNECTION_ID="..."
lean-ctx finops export --target=cbf --from=2026-06-01 --to=2026-06-30 --upload
```
3. **Idempotency**: uploads carry `"operation": "replace_drop"` per month —
re-running an export replaces that month's drop instead of duplicating
(CloudZero-side guarantee). One drop is posted per calendar month in the
range.
Dimensions arrive as `resource/tag:project|agent_role|model|tool` tags and
are filterable in CloudZero Explorer.
## Vantage (Custom Provider)
Spec pinned: Vantage Custom Providers ingest a FOCUS-aligned CSV — required
columns `BilledCost`, `ChargeCategory`, `ChargePeriodStart`, `ServiceName`;
negative costs documented as accepted.
1. Create the provider once: `POST /v2/integrations/custom_provider` (or
console → Integrations → Custom Provider) and note the integration token.
2. Export and upload:
```bash
export VANTAGE_API_TOKEN="..."
export VANTAGE_INTEGRATION_TOKEN="accss_crdntl_..."
lean-ctx finops export --target=vantage --from=2026-06-01 --to=2026-06-30 --upload
```
3. **Idempotency warning**: Vantage treats each CSV upload as an additive
dataset — there is no replace operation. Before re-sending a period,
delete the previous upload in Vantage (Settings → Integrations → your
provider). The CLI prints the dataset window after every upload as a
reminder.
Dimensions arrive in the `Tags` JSON column (`project`, `agent_role`,
`model`, `tool`).
## FOCUS CSV (generic)
Spec pinned: [FOCUS v1.2](https://focus.finops.org/focus-specification/v1-2/)
(June 2024 — first version with SaaS/token-denominated pricing columns). The
file emits all 21 v1.2 Mandatory columns **plus** the FOCUS 1.0 required set
(`Provider`, `InvoiceIssuer`, `ResourceID`, `ChargeType`, `Tags`, …) so both
generations of consumers accept it; additive columns are explicitly allowed.
lean-ctx dimensions ride in `x_project`, `x_agent_role`, `x_model`,
`x_tool`, `x_tokens_saved`.
Validated against the FinOps Foundation's official validator
([`focus-validator` 1.0.0](https://pypi.org/project/focus-validator/)):
```bash
pip install focus-validator 'multimethod<2.0'
lean-ctx finops export --target=focus --out=leanctx_focus.csv
# Run from the site-packages dir — the 1.0.0 validator resolves its
# currency-code list via a relative path (upstream packaging bug):
cd "$(python3 -c 'import focus_validator, os; print(os.path.dirname(os.path.dirname(focus_validator.__file__)))')"
focus-validator --data-file /path/to/leanctx_focus.csv --column-namespace x
# → Validation succeeded.
```
## Showback queries that now work
- *"What did agent context cost per project last month, and what did
lean-ctx save us?"* — group by `project` (tag/column), compare Usage vs.
Credit/Discount.
- *"Which agent role burns the most tokens?"* — group by `agent_role`.
- *"Is the savings rate degrading after the editor update?"* — Credit ÷
Usage trend per day.
## Verifying the numbers
Every row aggregates hash-chained ledger events recorded on the producing
machine. To audit: `lean-ctx ledger verify` (chain integrity) and
`lean-ctx gain` (the same totals the export uses). The ledger design is
documented in `docs/business/03-verified-savings-ledger.md`.