Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 15 additions & 4 deletions TRACKER.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,13 @@
| | |
|---|---|
| **Last updated** | 2026-06-10 |
| **Current phase** | Phase 7 — Pilot, Harden, GA (**8 / 10 steps**) — Phases 0–6 ✅ complete |
| **Overall** | **82 / 84 steps** — Phases 0–6 complete |
| **Next action** | **Step 7.9Billing & metering**: per-tenant metering (queries / docs / storage / reranker / LLM tokens); usage-export API; Stripe metered billing behind a seam; invoice generation; tenant usage dashboard. |
| **Current phase** | Phase 7 — Pilot, Harden, GA (**9 / 10 steps**) — Phases 0–6 ✅ complete |
| **Overall** | **83 / 84 steps** — Phases 0–6 complete |
| **Next action** | **Step 7.10GA cutover** (the final step): version bump to v1.0.0; CHANGELOG / release notes; GA readiness checklist (all Phase 7 exit gates); final security-review + eval sign-off; cut the tag/release. |

**Recently shipped**

- **7.9** ✅ Billing & metering — per-tenant usage accounting, **mirroring the 5.6c cost pattern** (dataclasses in `rag-observability`, the gateway wraps a Pydantic response → **no `dist/schemas` churn**). New `rag_observability.billing`: a `UsageMeter` (observe-only per-tenant, per-dimension counters: queries / docs / storage / reranker / LLM tokens) fed O(1) from `record_request_usage` independent of quotas; `GET /v1/billing/usage` serves the per-tenant dashboard; pure `generate_invoice` + `PricingModel`/`load_pricing` price an invoice **from `marketplace/pricing.yaml`** (a price change is config) and **reconcile with metered usage ±0.5% by construction**; a `BillingProvider` Protocol seam for Stripe / marketplace metering (degrade-open). Inert by default (`cfg.billing`); `ragctl billing` drives meter→invoice→reconcile; **no governed SPI call** (policy-coverage linter unchanged); only `dist/openapi` + `dist/rag.schema` regenerate. Deferred: the concrete Stripe/marketplace adapters, the docs/reranker/storage feed points, an admin usage card. [ADR-0051](docs/adr/ADR-0051-billing-metering.md) [#182](https://github.com/officialCodeWork/AgentContextOS/pull/182)
- **7.8** ✅ Support, SLAs & on-call — the support model + ops runbooks, **grounded in the platform's own signals**. Four support tiers + per-tier SLA targets (matching `marketplace/pricing.yaml`) in [`support-sla.md`](docs/guides/support-sla.md); a new `docs/runbooks/` area with **one runbook per alert type** (`alerts.md` — acl/tenant escape · `breaker.opened` · `drift.detected` · cost anomaly · `quota.exceeded` · injection spike · gateway degraded · latency/availability SLO · `eval.regression` · ingest), each naming the exact event / `/v1/status/*` / SLO that raises it; an incident-response process + a blameless postmortem template; the status page reads **measured** health (`/v1/status/health` + Grafana SLOs), not manual toggles. **Paging reuses the Step 3.9 webhook system** (PagerDuty as a subscriber — no new code). Deferred: hosted status-page deploy, the PagerDuty account, staffing. [ADR-0050](docs/adr/ADR-0050-support-sla-oncall.md) [#181](https://github.com/officialCodeWork/AgentContextOS/pull/181)
- **7.7** ✅ Packaging & distribution — **one-command install per channel** + **one tag fans out to every channel**. New `rag-platform` PyPI **meta-package** (`packaging/rag-platform/`) pins the workspace component dists for a reproducible `pip install rag-platform`; the existing `agentcontextos` SDK scope is kept (no rename). A new `release.yml` publishes PyPI (OIDC Trusted Publishing) + npm (`@agentcontextos/sdk`, provenance) + the **admin-ui image** (new `apps/admin-ui/Dockerfile`, cosign + SBOM) + the Helm chart → **OCI** (cosign), alongside the existing `docker.yml` (gateway image, cosign + SBOM) and `release-airgap.yml` — all keyed off the same `vX.Y.Z` tag. Deferred: Go/Java/.NET SDK publish, worker/eval-runner images (single-process today). [ADR-0049](docs/adr/ADR-0049-packaging-distribution.md) [#180](https://github.com/officialCodeWork/AgentContextOS/pull/180)
- **7.6** ✅ Marketplace listings — listing artifacts for AWS / Azure / GCP under a new `marketplace/` (approval + procurement stay an external per-cloud process, like the 7.3 pentest). **One canonical `pricing.yaml`** (tiers + usage-metered dimensions whose ids match the Step 7.9 metering signals) + **one shared `listing-content.md`** mapped to all three clouds, so listings can't drift and prices reconcile with metering. Each per-cloud spec maps the model to that cloud's billing primitives and **reuses existing delivery** (Helm / AMI / air-gap bundle / GHCR — no new packaging); per-cloud submission checklists + a procurement acceptance test in the guide. [ADR-0048](docs/adr/ADR-0048-marketplace-listings.md) [#179](https://github.com/officialCodeWork/AgentContextOS/pull/179)
Expand Down Expand Up @@ -814,7 +815,7 @@ New ground — the only prior crypto was HMAC signing. The V1 plan calls for en
| 7.6 | Marketplace listings | ✅ | [#179](https://github.com/officialCodeWork/AgentContextOS/pull/179) — `marketplace/` listing artifacts (AWS/Azure/GCP); one canonical `pricing.yaml` (dims = 7.9 metering signals) + shared listing copy mapped to all three; reuse Helm/AMI/airgap/GHCR delivery; submission checklists + procurement test; approval = external process |
| 7.7 | Packaging & distribution | ✅ | [#180](https://github.com/officialCodeWork/AgentContextOS/pull/180) — `rag-platform` PyPI meta-package; `release.yml` fans one tag out to PyPI/npm/GHCR(admin-ui)/Helm-OCI (cosign-keyless + SPDX SBOM + OIDC/provenance) alongside `docker.yml`+`release-airgap.yml`; `apps/admin-ui/Dockerfile`; channels matrix + guide |
| 7.8 | Support & SLA | ✅ | [#181](https://github.com/officialCodeWork/AgentContextOS/pull/181) — support tiers + SLA targets (= `pricing.yaml`); `docs/runbooks/` with **a runbook per alert type** (tied to real events / `/v1/status/*` / SLOs); incident-response + postmortem template; status page from measured health; PagerDuty via the Step 3.9 webhook system (no new code) |
| 7.9 | Billing integration | | Stripe metered billing; usage export API; invoice generation |
| 7.9 | Billing integration | | [#182](https://github.com/officialCodeWork/AgentContextOS/pull/182) — `rag_observability.billing`: observe-only `UsageMeter` (5 dimensions) + `GET /v1/billing/usage`; pure `generate_invoice` priced from `pricing.yaml` (reconciles ±0.5%); `BillingProvider` Stripe/marketplace seam; `cfg.billing`; `ragctl billing`; mirrors 5.6c (no `dist/schemas` churn) |
| 7.10 | GA cutover | ⏳ | `main` tag `v1.0.0`; release notes; all Phase 7 exit gates passed |

### 7.1 — Load + chaos testing ✅ [#164](https://github.com/officialCodeWork/AgentContextOS/pull/164)
Expand Down Expand Up @@ -885,6 +886,15 @@ New ground — the only prior crypto was HMAC signing. The V1 plan calls for en
- **Paging reuses the Step 3.9 webhook system** — PagerDuty is a subscriber for `audit.policy_violation` / `drift.detected` / `eval.regression` (Events API v2), no new code.
- **Scope:** the guide + the `docs/runbooks/` area + this ADR. No code/`dist` change. **Deferred:** the hosted status-page deploy, the PagerDuty account + routing key, staffing the rotation (people process). [ADR-0050](docs/adr/ADR-0050-support-sla-oncall.md), [runbooks/](docs/runbooks/README.md).

### 7.9 — Billing & metering ✅ [#182](https://github.com/officialCodeWork/AgentContextOS/pull/182)

- Per-tenant usage accounting for money — a *third* concern beside cost-anomaly detection (5.6c) and quota enforcement (4.5), **mirroring the 5.6c shape** to avoid churn.
- **Dataclasses in `rag-observability`, no `dist/schemas` churn.** `rag_observability.billing` holds a `UsageMeter` (thread-safe per-tenant, per-dimension counters — `queries` / `docs_ingested` / `storage_gb` / `reranker_calls` / `llm_tokens`), `UsageSnapshot`, and the pricing/invoice types; the gateway wraps the snapshot in a gateway-local Pydantic `BillingUsageResponse` (like `CostStatusResponse`). Only `dist/openapi` (the new endpoint) + `dist/rag.schema` (the new `cfg.billing` block) regenerate.
- **Observe-only metering; enforcement stays quotas.** Fed O(1) from `record_request_usage` (queries + tokens), independently of quotas, **making no governed SPI call** (the policy-coverage linter needs no entry — same as cost/drift/feedback). `GET /v1/billing/usage` serves the per-tenant usage dashboard; inert by default (`cfg.billing`).
- **Invoicing is offline, pure, priced from config.** `generate_invoice(snapshot, pricing, tier)` is pure; `PricingModel`/`load_pricing` read `marketplace/pricing.yaml`, so a price change is config (the shared 7.6/7.9 bar). Each metered line item's quantity equals the metered overage, so **bills reconcile with usage ±0.5% by construction** (the acceptance) — `ragctl billing` prints the invoice + the reconciliation check.
- **External billers are a Protocol seam.** `BillingProvider.report_usage` (Stripe usage-records / marketplace metering APIs) with a `NoopBillingProvider` default, called degrade-open — no `rag_core.spi` ceremony.
- **Scope:** the billing module + the usage endpoint + `cfg.billing` + wiring + `ragctl billing` + tests (unit reconciliation + gateway endpoint + CLI). All gates green (ruff, mypy --strict 330 files, config/openapi-drift regenerated). **Deferred:** the concrete Stripe/marketplace adapters, the docs/reranker/storage feed points, an admin usage card, subject-level invoicing. [ADR-0051](docs/adr/ADR-0051-billing-metering.md), [reference/billing.md](docs/reference/billing.md).

---

## PR & Branch History
Expand Down Expand Up @@ -1040,6 +1050,7 @@ Complete log of every PR. Routine Dependabot bumps are grouped; everything else
| [#179](https://github.com/officialCodeWork/AgentContextOS/pull/179) | 2026-06-10 | docs(marketplace): AWS/Azure/GCP listing artifacts + canonical pricing model (Step 7.6) |
| [#180](https://github.com/officialCodeWork/AgentContextOS/pull/180) | 2026-06-10 | feat(release): rag-platform PyPI meta + release.yml (PyPI/npm/Helm-OCI/admin-ui image) (Step 7.7) |
| [#181](https://github.com/officialCodeWork/AgentContextOS/pull/181) | 2026-06-10 | docs(support): support tiers + SLA + per-alert runbooks + incident response (Step 7.8) |
| [#182](https://github.com/officialCodeWork/AgentContextOS/pull/182) | 2026-06-10 | feat(billing): per-tenant usage metering + usage API + invoice generation (Step 7.9) |
| #78–#80, #116–#118 | Open | Dependabot bumps — awaiting merge |
| #81 | Closed | Dependabot bump — superseded |

Expand Down
Loading
Loading