You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(platform): Sprint 3 — HTTP/RAG connectors, control plane, sticky Redis/PG
Add HttpConnector and RagConnector with settings validation, apply PolicyRegistry
constraints at API boundaries, and implement get_pack_version_for_session for Redis
and Postgres run history. Document Sprint 3 and update CHANGELOG [Unreleased].
Copy file name to clipboardExpand all lines: CHANGELOG.md
+6Lines changed: 6 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
8
8
## [Unreleased]
9
9
10
+
### Added
11
+
-**Second domain pack**`research_only` (`ResearchOnlyPack`) with typed `/packs/research_only/run` routes.
12
+
-**Retrieval connectors** — `example_memory`, `http` (`CONNECTOR_HTTP_URL`), and `rag` (`RAG_ENABLED`); API injection via `CONNECTOR_ENABLED` into `ResearchAnalysisPack`.
This folder holds **types and documentation only**. There is no evaluator, no tenant model, no feature-flag service, and no integration with FastAPI or `PackRegistry` beyond naming compatibility (`pack_id` aligns with registered packs).
3
+
Pack-level policies are registered explicitly in `control_plane/__init__.py` (Approach B, same spirit as `PackRegistry`).
4
4
5
-
## What the control plane will own (directional)
5
+
## What is enforced today
6
6
7
-
| Area | Intent (future) |
8
-
|------|-----------------|
9
-
|**Pack-level policies**| Named bundles keyed by `pack_id` — caps, labels, extension metadata. |
10
-
|**Execution constraints**| Advisory limits (`ExecutionConstraints`) that orchestration or packs may honour. |
11
-
|**Governance hooks**| Labels and `extensions` dict reserved for audit, cost centres, or routing hints — **not interpreted here**. |
12
-
|**Feature flags / policy engine**| Explicitly **out of scope** for this skeleton; strings like `labels` are placeholders only. |
7
+
| Mechanism | Where |
8
+
|-----------|--------|
9
+
|`max_query_chars`|`validate_query_for_pack()` — used by API before pack and legacy runs |
10
+
|`budget_usd_ceiling`|`effective_budget_usd()` — passed as `budget_usd` when constructing packs (overridden by `PACK_DEFAULT_BUDGET_USD`) |
11
+
|`stream_timeout_seconds`|`effective_stream_timeout_seconds()` — caps SSE timeouts per pack route and legacy `/run/stream`|
13
12
14
-
## What this is **not**
13
+
## Registry
15
14
16
-
- Not a dynamic policy DSL or OPA integration.
17
-
- Not multi-tenant isolation or quota enforcement.
18
-
- Not a replacement for `DEFAULT_PACK_ID` or `PackRegistry.register()`.
15
+
```python
16
+
from control_plane import PolicyRegistry, PackPolicy, ExecutionConstraints
Policies use the same **`pack_id`** strings as `platform.registry.PackRegistry`. Registration remains **explicit and static** in `platform/__init__.py`. This package does **not** register packs or duplicate the registry.
0 commit comments