TechFabricTechFabricRadar

Cost control plane

Estate burn, per-resource accountability, budgets, forecast, and agent tools — hosted on Cloudflare by default, never always-on paid Databricks.

Fabric Radar's cost plane answers the questions a postmortem Teams thread should not have to:

  1. What is burning money right now, by resource?
  2. Who owns it (product first, person second)?
  3. Are we on plan vs declared budgets?
  4. What should an agent do when reality deviates?

Hosting (family standard)

SurfacePlacement
Cost docs + public agent APICloudflare public-edge
Console cost UI (seeded demo)Local pnpm console:dev or customer install
Live system.billing ingestNot the paid TechFabric workspace by default — Free Edition (fabric-free) or the customer's workspace only

Follow the cost-control runbook in the TechFabric vault: FABRIC_DATABRICKS_COST_CONTROL_AND_FREE_EDITION_RUNBOOK.md and FABRIC_FAMILY_HOSTING_STANDARD.md.

Do not deploy Radar Apps, warehouses, or cert resources to fabric-harness (paid) while GTM Brain is the only production workload.

Capabilities

  • Estate KPIs — MTD, today, run-rate $/day, forecast EOM, unattributed share
  • Charts — burn over time, spend by product
  • Resources table — kind, owner, product, state, MTD, recommended action (stop_warehouse, stop_app, …)
  • Accountability — by product and by owner; unattributed queue
  • Budgets — daily/monthly plans with warn/critical thresholds
  • Agent tools — read-only JSON tools; mutations stay on governed Platform interventions

Agent API

Local console:

curl -s http://localhost:3105/api/cost/tools | jq '.tools[].name'
curl -s -X POST http://localhost:3105/api/cost/tools \
  -H 'content-type: application/json' \
  -d '{"tool":"radar_cost_summary"}' | jq '.data.summary.mtdUsd'

Public edge on radar.fabric.pro (same Cloudflare worker as docs):

curl -s https://radar.fabric.pro/v1/health
curl -s https://radar.fabric.pro/v1/tools
curl -s -X POST https://radar.fabric.pro/v1/tools \
  -H 'content-type: application/json' \
  -d '{"tool":"radar_cost_by_resource","runningOnly":true}'

Tool catalog

ToolPurpose
radar_cost_summaryEstate summary + budget health
radar_cost_by_resourcePer-resource MTD / last day / recommended action
radar_cost_by_dimensionGroup by owner, product, kind, env, lifecycle
radar_cost_unattributedLow-confidence ownership queue
radar_budget_list / radar_budget_statusPlan vs actual
radar_cost_forecastEOM + series for charts
radar_resource_inventoryControl-plane inventory with remediation hints
radar_cost_plan_statusOn-plan check vs monthly budget

Agents propose interventions via radar.intervention_request (non-prod). They do not approve or execute. Prod remains human-gated.

Control loop (P0)

  1. Governed budgetsradar.budget_declare / update / retire (state: active ↔ paused → retired).
  2. Cost control sweep — worker activity runCostControlSweep evaluates budgets against the cost estate and raises radar.anomaly_raise with sloName: budget:<id> on the Workspace Cost Estate monitor (dev env).
  3. Remediation interventionsstop_warehouse, stop_app, pause_job (plus existing cancel/pause/quarantine). Effector stubs work offline; live Databricks stop uses Free Edition profile only.
  4. Cost-triage agent planplanCostTriageAgent / planCostTriageRemediations propose non-prod stops when budgets are critical; never auto-stops fabric-gtm-brain-prod.

Dogfood residual checklist

From the repo root (Cloudflare-first; never starts paid compute):

pnpm cost:dogfood

What it checks:

  1. Guards — paid profile cannot enable live ingest without emergency override; paid deploy override off
  2. Agent APIradar.fabric.pro/v1 summary + ingest status + running resources
  3. Optional paid inventory — if databricks CLI is authed as fabric-harness, lists Apps/warehouses and fails on non-GTM active residual
  4. Prints the operator checklist (+24h bill lag, Free Edition drill rules)
pnpm cost:dogfood:offline                    # guards only
RADAR_DOGFOOD_SKIP_DBX=1 pnpm cost:dogfood   # API only
RADAR_COST_API_BASE=http://localhost:3105 pnpm cost:dogfood

Console routes

PathView
/[org]/costEstate KPIs + charts + budget cards
/[org]/cost/resourcesFull resource table
/[org]/cost/accountabilityProduct / owner / unattributed
/[org]/budgetsBudget detail
pnpm console:dev
# open http://localhost:3105/acme-data/cost

Why not only Databricks usage dashboards?

Native charts show totals. Radar adds ownership, lifecycle, budgets, agent contracts, and governed response — the gap that turned a July warehouse into a $3k surprise.

On this page