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
18 changes: 14 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 (**9 / 10 steps**) — Phases 0–6 ✅ complete |
| **Overall** | **83 / 84 steps** — Phases 0–6 complete |
| **Next action** | **Step 7.10 — GA 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. |
| **Current phase** | Phase 7 — Pilot, Harden, GA (**10 / 10 steps**) — **all phases complete** |
| **Overall** | **84 / 84 steps ✅ — v1.0.0 GA** |
| **Next action** | **🎉 GA reached.** Engineering scope (Phases 0–7) complete; `v1.0.0` cut. Remaining items are external/process (external pentest, SOC 2 audit, registry first-publish, signed referenceable customers, on-call staffing + status page, launch assets) — tracked in the [GA readiness checklist](docs/ga/ga-readiness-checklist.md). Post-GA: the V1.1 backlog. |

**Recently shipped**

- **7.10** ✅ **GA cutover — v1.0.0** 🎉 — the close of an 8-phase, 84-step build. Cut **`v1.0.0`** with **Semantic Versioning** over the drift-gated public contracts (REST/OpenAPI · gRPC proto · `rag.yaml` · SDKs · `ragctl`) + a deprecation policy ([ADR-0052](docs/adr/ADR-0052-ga-cutover.md)); the `rag-platform` meta bumped to 1.0.0. GA **release notes** ([v1.0.0](docs/release-notes/v1.0.0.md)) + a **GA readiness checklist** ([ga-readiness-checklist](docs/ga/ga-readiness-checklist.md)) that maps every Phase 7 exit gate to a CI gate / in-repo artifact, with inherently-external items (external pentest, SOC 2 audit, registry first-publish, signed customers, on-call staffing, launch assets) marked **(external)** — the same in-repo-machine vs external-deliverable split used across Phase 7. The `v1.0.0` tag fans out to every channel via `docker.yml` + `release.yml` + `release-airgap.yml`.
- **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)
Expand Down Expand Up @@ -816,7 +817,7 @@ New ground — the only prior crypto was HMAC signing. The V1 plan calls for en
| 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 | ✅ | [#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.10 | GA cutover | | [#183](https://github.com/officialCodeWork/AgentContextOS/pull/183) — **v1.0.0**: SemVer + deprecation policy (ADR-0052); release notes; GA readiness checklist (all exit gates, external items flagged); `rag-platform` meta → 1.0.0; `v1.0.0` tag fans out to every channel |

### 7.1 — Load + chaos testing ✅ [#164](https://github.com/officialCodeWork/AgentContextOS/pull/164)

Expand Down Expand Up @@ -895,6 +896,14 @@ New ground — the only prior crypto was HMAC signing. The V1 plan calls for en
- **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).

### 7.10 — GA cutover ✅ [#183](https://github.com/officialCodeWork/AgentContextOS/pull/183)

- **General Availability — `v1.0.0`** — the close of an 8-phase, 84-step build (Phase 0 foundations → Phase 7 GA).
- **SemVer from GA.** MAJOR/MINOR/PATCH over the **drift-gated public contracts** (REST/OpenAPI · gRPC `rag.proto` · `rag.yaml` schema · SDKs · `ragctl` CLI), so a breaking change is caught in CI and forces a deliberate MAJOR bump; a deprecation cycle of ≥ 1 MINOR precedes removal ([ADR-0052](docs/adr/ADR-0052-ga-cutover.md)). The `rag-platform` meta-package carries the platform version (bumped to 1.0.0).
- **The GA bar is a checklist of gates, not a declaration.** [`ga-readiness-checklist.md`](docs/ga/ga-readiness-checklist.md) maps every Phase 7 exit gate to a CI gate or an in-repo artifact; inherently-external items — external pentest, SOC 2 Type II audit, the first publish to each registry, signing 3 referenceable customers, on-call staffing + the hosted status page, and the launch announcement — are marked **(external)** and ride on top, the same split used throughout Phase 7.
- **One tag, every channel.** `v1.0.0` is tagged on `main`; the existing release workflows (`docker.yml` + `release.yml` + `release-airgap.yml`, Step 7.7) fan it out to PyPI / npm / GHCR / Helm-OCI / the air-gap bundle, all cosign-signed + SBOM-attested.
- **Scope:** the GA release notes + readiness checklist + ADR-0052 + the meta version bump + the `v1.0.0` tag. **Deferred / external:** the checklist's **(external)** items + the V1.1 backlog (no-code agent builder, multimodal outputs, on-prem GPU autoscaling, marketplace partner connectors, domain packs). [release-notes/v1.0.0](docs/release-notes/v1.0.0.md), [ga/ga-readiness-checklist](docs/ga/ga-readiness-checklist.md).

---

## PR & Branch History
Expand Down Expand Up @@ -1051,6 +1060,7 @@ Complete log of every PR. Routine Dependabot bumps are grouped; everything else
| [#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) |
| [#183](https://github.com/officialCodeWork/AgentContextOS/pull/183) | 2026-06-10 | chore(release): GA cutover — v1.0.0 release notes + readiness checklist + SemVer policy (Step 7.10) |
| #78–#80, #116–#118 | Open | Dependabot bumps — awaiting merge |
| #81 | Closed | Dependabot bump — superseded |

Expand Down
13 changes: 13 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,7 @@ broken, and what to fix before committing to the next phase.
| [ADR-0049-packaging-distribution.md](adr/ADR-0049-packaging-distribution.md) | Decision (Step 7.7): a `rag-platform` PyPI **meta-package** pins the workspace component dists (one-command server install); keep the existing `agentcontextos` SDK scope (no rename); **one `vX.Y.Z` tag fans out** to PyPI/npm/GHCR/Helm-OCI/air-gap across `docker.yml` + a new `release.yml` + `release-airgap.yml`; cosign-keyless + SPDX SBOM + OIDC/provenance everywhere; deferred Go/Java/.NET publish + worker/eval-runner images; rejected a `ragplatform` rename + one mega-workflow |
| [ADR-0050-support-sla-oncall.md](adr/ADR-0050-support-sla-oncall.md) | Decision (Step 7.8): **runbooks grounded in the platform's own signals** — one per alert type, each naming the exact event / `/v1/status/*` / SLO that raises it; **paging reuses the Step 3.9 webhook system** (PagerDuty as a subscriber, no new code) + Grafana SLOs; the status page reflects **measured** health (not manual toggles); SLA tiers match `marketplace/pricing.yaml`; rejected a new alerting subsystem, generic runbooks, a separate SLA datastore |
| [ADR-0051-billing-metering.md](adr/ADR-0051-billing-metering.md) | Decision (Step 7.9): **mirror the 5.6c cost pattern** — dataclasses in `rag-observability`, gateway wraps in a Pydantic response (**no `dist/schemas` churn**); metering is **observe-only** (no governed SPI call, fed from `record_request_usage` independent of quotas); invoicing is offline + pure + **priced from config** (`marketplace/pricing.yaml`, reconciles ±0.5% by construction); Stripe/marketplace via a `BillingProvider` Protocol seam; rejected a new `rag-billing` package + core types, metering-through-quotas, hard-coded prices |
| [ADR-0052-ga-cutover.md](adr/ADR-0052-ga-cutover.md) | Decision (Step 7.10, GA): cut **v1.0.0** with **SemVer** over the drift-gated public contracts (REST/OpenAPI · gRPC proto · `rag.yaml` · SDKs · `ragctl`) + a deprecation policy (≥ 1 MINOR before removal); the GA bar is a **checklist of gates**, not a declaration, with inherently-external items marked **(external)**; one platform version cut as a tag that fans out to every channel; rejected staying 0.x, no platform version, declaring GA without a checklist |
| [ADR-0048-marketplace-listings.md](adr/ADR-0048-marketplace-listings.md) | Decision (Step 7.6): one canonical `marketplace/pricing.yaml` (metered dims = the Step 7.9 signals) + one shared listing copy mapped to all three clouds, so listings can't drift and prices reconcile with metering; **reuse existing delivery** (Helm / AMI / airgap / GHCR) — the per-cloud Marketplace wrappers are thin shells; approval + procurement are documented external process, not a faked status; rejected per-cloud pricing, custom packaging, encoding a "live" status |
| [ADR-0042-compliance-posture.md](adr/ADR-0042-compliance-posture.md) | Decision (Step 6.10, Phase-6 capstone): add the three compliance pieces on top of the controls the platform already ships (audit/ACL/PII/BYOK/SSO/quotas). New `rag-compliance` package (config-free, like rag-feedback/rag-drift): `RetentionEnforcer` drives tenant-scoped `purge_*`; `compliance_posture`/`residency_ok` are pure. **Retention is a capability on the existing stores, not a new SPI** — non-abstract `purge_before`/`purge_tenant` (default no-op) on Feedback/Provenance, with `dry_run` in the SPI so a preview counts-without-deleting uniformly (ProvenanceStore has no `list`). **Audit is never purged in place** (the hash chain would break) — audit retention is the 6.6b WORM export; `audit_days` is advisory. **Right-to-erasure is always-on, tenant-self-service, two-flag** — `POST /v1/compliance/erase` erases the *calling* tenant's data (scope from the principal, never the body), dry-run by default, delete needs `dry_run=false` AND `confirm=true`. **Residency = declared per tenant + enforced at ingest** (`tenants[].data_region` vs `cfg.compliance.region` → 403), opt-in, a single-deployment assertion not multi-region routing. **The SOC 2 / GDPR mapping is a doc backed by a live posture** (`GET /v1/status/compliance` reports which controls are on, so the mapping is checkable). Deferred: subject-level (vs tenant-level) erasure, an admin retention-sweep endpoint, multi-region routing, automated audit-evidence bundles; rejected purging the audit chain, a `Purgeable` SPI mixin, a static doc with no live backing |
| [ADR-0041-airgap-bundle.md](adr/ADR-0041-airgap-bundle.md) | Decision (Step 6.9): ship the platform as one signed, self-contained offline bundle (all runtime images + Helm chart + config + installer). Integrity reuses the WORM-export pattern (6.6b): a standard `SHA256SUMS` whose hash is pinned as `manifest.content_hash` is the **hard gate** — verifiable with nothing but `sha256sum`, no network/cosign — and a cosign signature **over `SHA256SUMS`** adds authenticity; the *same* `SHA256SUMS` drives the Python verifier and the standalone shell installer so they can't diverge. The shell/pwsh `install.{sh,ps1}` (shipped inside the bundle) need only docker+helm (air-gap hosts lack uv/the workspace); `ragctl airgap` holds the typed/tested build+verify logic (pure core separated from a stubbable docker/helm/cosign subprocess seam; `--dry-run` = a verifiable bundle minus image blobs, so the path is testable with no Docker). Digest-pinned manifest-driven image set (`infra/airgap/images.txt` + the chart-derived gateway image); key-based cosign is the air-gap recommendation (keyless needs Rekor + an identity policy), keyless is the connected-release path (`release-airgap.yml` on tags). Deferred: ctr/podman load, registry re-tag/push, multi-arch selection, bundling backend charts, TUF-rooted offline keyless verify; rejected `oras`/OCI (no registry to pull from in an air-gap), a second HMAC scheme (cosign already the signer), a pure-shell build (would escape mypy/tests) |
Expand Down Expand Up @@ -253,6 +254,18 @@ incident-response process and the postmortem template.
| [incident-response.md](runbooks/incident-response.md) | Severity ladder · IC/Comms/Ops roles · detect→declare→mitigate→communicate→resolve→postmortem flow · the status page (measured from `/v1/status/health` + Grafana SLOs) |
| [postmortem-template.md](runbooks/postmortem-template.md) | Blameless postmortem template (summary · impact · timeline · root cause · action items) |

## release-notes/

| File | Description |
|------|-------------|
| [v1.0.0.md](release-notes/v1.0.0.md) | **GA release notes (Step 7.10)** — highlights across retrieval / surfaces / governance / reliability / observability / operability; one-command install per channel; the 8-phase journey; versioning + support |

## ga/

| File | Description |
|------|-------------|
| [ga-readiness-checklist.md](ga/ga-readiness-checklist.md) | The v1.0.0 GA readiness checklist (Step 7.10) — every Phase 7 exit gate mapped to a CI gate / in-repo artifact, with inherently-external items marked **(external)** |

## research/

| File | Description |
Expand Down
Loading
Loading