The home ADR 0050 left open for a usage reading. mesh-control is a CLI and cannot consume events, so the store that keeps the current usage picture is a module — the audit-logger's sibling: it consumes module.*.usage.* and upserts each reading into its own provisioned postgres store, latest per (licence, consumer, period, metric), in the clear. One vendor-neutral table holds both grains; they differ only in consumer (the holding module for the licence grain, the session for the finer one). The consumer creates its table on startup and, as a restart-until-ready service, self-heals rather than gating the apply on a run-once that must reach a provider over the overlay.
The vendor→row normalisation moves into the adapter, as ADR 0054 requires: anthropic-manager (licence grain, utilization%) and anthropic-consumer (session grain, token/cost) now emit already-normalised { rows: UsageRow[], raw } on their existing keys, so the store stays vendor-blind.
Proven end to end by the mesh-lab model-usage bed (green).
The home ADR 0050 left open for a usage reading. mesh-control is a CLI and cannot consume events, so the store that keeps the current usage picture is a **module** — the audit-logger's sibling: it consumes `module.*.usage.*` and upserts each reading into its own provisioned postgres store, latest per `(licence, consumer, period, metric)`, in the clear. One vendor-neutral table holds **both grains**; they differ only in `consumer` (the holding module for the licence grain, the session for the finer one). The consumer creates its table on startup and, as a restart-until-ready service, self-heals rather than gating the apply on a run-once that must reach a provider over the overlay.
The vendor→row normalisation moves into the adapter, as ADR 0054 requires: anthropic-manager (licence grain, `utilization%`) and anthropic-consumer (session grain, token/cost) now emit already-normalised `{ rows: UsageRow[], raw }` on their existing keys, so the store stays vendor-blind.
Proven end to end by the mesh-lab model-usage bed (green).
The home ADR 0050 left open for a usage reading. mesh-control is a CLI and
cannot consume events, so the store that keeps the current usage picture is a
MODULE — the audit-logger's sibling: it consumes `module.*.usage.*` and upserts
each reading into its own provisioned postgres store, latest per
(licence, consumer, period, metric), in the clear. One vendor-neutral table
holds BOTH grains; they differ only in `consumer` (the holding module for the
licence grain, the session for the finer one). The consumer creates its table
on startup and, as a restart-until-ready service, self-heals rather than
gating the apply on a run-once that must reach a provider over the overlay.
The vendor->row normalisation moves into the adapter, as ADR 0054 requires:
anthropic-manager (licence grain, utilization%) and anthropic-consumer (session
grain, token/cost) now emit already-normalised { rows: UsageRow[], raw } on
their existing keys, so the store stays vendor-blind.
Proven end to end by the mesh-lab model-usage bed (green): a usage event
emitted into the mesh is upserted at both grains, latest-per-key, in the clear.
Claude-Session: https://claude.ai/code/session_01LrgweAeERJYBg88c5cKDzF
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
The home ADR 0050 left open for a usage reading. mesh-control is a CLI and cannot consume events, so the store that keeps the current usage picture is a module — the audit-logger's sibling: it consumes
module.*.usage.*and upserts each reading into its own provisioned postgres store, latest per(licence, consumer, period, metric), in the clear. One vendor-neutral table holds both grains; they differ only inconsumer(the holding module for the licence grain, the session for the finer one). The consumer creates its table on startup and, as a restart-until-ready service, self-heals rather than gating the apply on a run-once that must reach a provider over the overlay.The vendor→row normalisation moves into the adapter, as ADR 0054 requires: anthropic-manager (licence grain,
utilization%) and anthropic-consumer (session grain, token/cost) now emit already-normalised{ rows: UsageRow[], raw }on their existing keys, so the store stays vendor-blind.Proven end to end by the mesh-lab model-usage bed (green).
The home ADR 0050 left open for a usage reading. mesh-control is a CLI and cannot consume events, so the store that keeps the current usage picture is a MODULE — the audit-logger's sibling: it consumes `module.*.usage.*` and upserts each reading into its own provisioned postgres store, latest per (licence, consumer, period, metric), in the clear. One vendor-neutral table holds BOTH grains; they differ only in `consumer` (the holding module for the licence grain, the session for the finer one). The consumer creates its table on startup and, as a restart-until-ready service, self-heals rather than gating the apply on a run-once that must reach a provider over the overlay. The vendor->row normalisation moves into the adapter, as ADR 0054 requires: anthropic-manager (licence grain, utilization%) and anthropic-consumer (session grain, token/cost) now emit already-normalised { rows: UsageRow[], raw } on their existing keys, so the store stays vendor-blind. Proven end to end by the mesh-lab model-usage bed (green): a usage event emitted into the mesh is upserted at both grains, latest-per-key, in the clear. Claude-Session: https://claude.ai/code/session_01LrgweAeERJYBg88c5cKDzF