feat(store): add PostgreSQL foundation [T-009]
Harness governance / validate (push) Has been cancelled
Harness governance / validate (pull_request) Has been cancelled

This commit is contained in:
QiuSW
2026-08-07 17:52:50 +08:00
parent 04231d006a
commit 2ff7ff5618
23 changed files with 1593 additions and 24 deletions
+10 -2
View File
@@ -3,7 +3,7 @@ id: T-009
title: 建立 PostgreSQL 双 Schema 与 Bell 配额投影基础
phase: 2
deps: [T-008]
status: DOING
status: DONE
created: 2026-08-07
issue: 31
context_ref: 8a4514076e9921b12bc26380b2aceee9334e947d
@@ -60,7 +60,7 @@ T-008 已冻结 Sense Control API v1 和 `bell.site_quota_v1` 只读投影,但
## 验收要点
- 任务相关验证:在本机执行 `./scripts/test_postgres.ps1 -PgRoot D:\pgsql17`,必须完成隔离集群启动、migration 重放、权限断言、tenant/配额/并发/版本回退 repository 集成测试和自动清理;运行 `python -m unittest tests/test_postgres_contract.py` 或对应 discovery 命令,静态负例能够拦截 Bell 写权限与契约漂移。
- 任务相关验证:在本机执行 `./scripts/test_postgres.ps1 -PgRoot D:\pgsql17`,必须完成隔离集群启动、migration 重放、权限断言、tenant/配额/并发/版本回退 repository 集成测试和自动清理;运行 `python -m unittest discover -s tests -p "test_postgres_contract.py"`,静态负例能够拦截 Bell 写权限与契约漂移。
- 完整门禁:运行 `./init.ps1`、`python scripts/validate_agent_context.py`、`python -m unittest discover -s tests -p "test_*.py"`、`python scripts/validate_harness_governance.py`、`go -C Sense test ./...`、`go -C Sense vet ./...`、`go -C Sense build ./...` 和 `git diff --check`,全部通过。
- 人工 / 设备验收:不需要摄像头、UI 或客户现场;任务所有者必须核对隔离集群确实没有使用 `D:\pgsql17\data`,现有服务 PID/端口在测试前后保持运行,且共享实例未新增 YoVision 对象。
- 构建产物:PostgreSQL migration、权限/迁移断言、本机隔离测试入口、Sense PostgreSQL repository 和配置/运维文档;不提交临时数据目录、数据库 dump 或秘密。
@@ -80,6 +80,14 @@ T-008 已冻结 Sense Control API v1 和 `bell.site_quota_v1` 只读投影,但
## 执行记录
### 2026-08-07 完成 PostgreSQL 数据基础
- 冻结 PostgreSQL `17.10` 与 `pgx/v5 v5.10.0`;新增四段可重放初始化 SQL,创建 NOLOGIN `bell_app`/`sense_app`、`bell`/`sense` schema、Bell Site 单调版本 trigger、T-008 五列配额视图、Sense 设备/能力/调和/投影观察表及最小权限。
- 新增 PostgreSQL repository 和 `SENSE_DB_DRIVER=sqlite|postgres` 显式选择;默认 SQLite 与 T-006 工具保持不变。PostgreSQL 启动检查 migration 和跨 schema 权限,Sense 对 Bell 源表或配额视图有写权限时拒绝启动。
- 视频新增/启用在一个事务内使用 tenant/site transaction-scoped advisory lock,读取并记录 `source_version` 后再计数写入;覆盖默认 16、128/129、非视频不占路、并发不超配额、缺失/回退失败关闭、降配不关流、tenant 隔离、相同期望态不增 generation 和全部调和 repository port。
- `./scripts/test_postgres.ps1 -PgRoot D:\pgsql17` 使用随机回环端口启动隔离 PostgreSQL 17.10,migration 连续执行两遍、SQL 权限断言及 9 个 `TestPostgres*` 测试通过,临时集群停止并清理;脚本核对现有 5432 listener 前后相同且从不引用 `D:\pgsql17\data`。
- `./init.ps1` 通过;`python -m unittest discover -s tests -p "test_*.py"` 共 33 项通过,其中 PostgreSQL 静态契约 7 项;`go -C Sense test ./...`、`go -C Sense vet ./...`、`go -C Sense build ./...`、上下文/治理校验和 `git diff --check` 均通过。不需要摄像头、UI 或客户现场验收。
### 2026-08-07 领取任务
- dispatcher `ila` 将任务分配给 `codex`;`context_ref` 为 `8a4514076e9921b12bc26380b2aceee9334e947d`,claim 为 `claims/T-009`,工作分支为 `agent/codex/T-009`。