docs(test): record FAV gap-fill unit evidence

Capture same-tx, recover-apply, pin-export, and GET zero-write results without claiming live 6173 or Unit A drills.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
weichen
2026-09-14 12:52:28 +00:00
co-authored by Cursor
parent ad9b67d599
commit 539a2dc639
6 changed files with 69 additions and 8 deletions
+1 -1
View File
@@ -52,7 +52,7 @@
| Cursor | dev-runtime-data-root-guard-plan-rewrite | fix/dev-runtime-data-root-guard | .worktrees/fix-dev-runtime-data-root-guard | infra-runtime-state | in_progress |
| Codex | runtime-data-lifecycle-plan | fix/dev-runtime-data-root-guard | .worktrees/fix-dev-runtime-data-root-guard | infra-runtime-state | done |
| Codex | final-artifact-vault-plan | fix/dev-runtime-data-root-guard | .worktrees/fix-dev-runtime-data-root-guard | artifact-vault | done |
| Cursor | final-artifact-vault-implementation | feature/final-artifact-vault | .worktrees/fix-dev-runtime-data-root-guard | artifact-vault | in_progress |
| Cursor | final-artifact-vault-implementation | feature/final-artifact-vault | .worktrees/fix-dev-runtime-data-root-guard | artifact-vault | done |
> 新任务开始前登记。`branch` 必须为 `feature/<slug>` 或 `fix/<slug>`,**禁止** `dev` / `test` / `main`。同一 `mutex` 同时仅一个 `in_progress`。
@@ -1,6 +1,6 @@
---
title: "最终成果保险库 V0–V6 落地"
status: in_progress
status: done
created: 2026-09-14
updated: 2026-09-14
owner: Cursor
@@ -31,8 +31,9 @@ mutex: artifact-vault
5. [x] V3 助手接入(同步 chat + task finalize)
6. [x] V3.5 回填(只枚举账本/完成 turn)
7. [x] V4 降级读取(`FAV_DEGRADED_READ` 默认关)
8. [x] V5 恢复(scratch-only CLI)
8. [x] V5 恢复(scratch-only recover-apply 写入 collection;union-deny 跳过 tombstone)
9. [x] V6 门禁与三份演练报告(live e2e 待 Unit A)
10. [x] 缺口补齐:approve/commit 同事务 staging;半发布 exclusive 重试;GET 零写入;`copy_only` pin-export;destroy 预检 CLI
## 相关链接
@@ -45,3 +46,4 @@ mutex: artifact-vault
- 分支:`feature/final-artifact-vault`
- 未执行 `env-service` rebuild;`FAV_DEGRADED_READ` 默认 false
- Goose:`00034_2026-09-14-final-artifact-vault.sql`
- 未合 `dev`;live 6173 / PITR / corpus 仍待 Unit A 另占槽
+1 -1
View File
@@ -71,7 +71,7 @@
| DOCREV-ACTIVE-DOC-ROUTING | UI-05「当前受控文档」被法规关键词改路由到 `feasibility_reg`,intake 无 pending | **PASS** | [audit](../audit/2026-09-13-document-revision-active-doc-routing.md);Round20 UI-05 pending 停在 intake V2 | **不改弱 E2E**;不删证据 |
| DOCREV-QUALITY-STATUS-FP | 行动计划表状态列「待续」被门禁当敷衍,两轮 repair 后 quality_failed 80 | **PASS** | [audit](../audit/2026-09-13-document-revision-quality-status-false-positive.md);Round20 UI-03 | **不删禁词、不放宽正文**;不删证据 |
| GOVERNANCE-ACTION-AUTHZ | 文档动作按职责鉴权;未激活 202-blocked;关闭创建直通 | **PASS** | [test-report](../test-reports/2026-09-14-governance-action-level-authz-test-report.md);[audit 异态](../audit/2026-09-14-planning-with-workflow-key-anomaly.md) | 不改 83 条 planning+key 夹具;none 长 PI 审批链另开 |
| FAV-V0-V6-IMPL | 终态成果保险库 V0–V6 内核与挂钩 | **PARTIAL** | [test-report](../test-reports/2026-09-14-final-artifact-vault-test-report.md);[ADR](../adr/2026-09-14-final-artifact-vault.md)。goose 00034;`FAV_DEGRADED_READ` 默认 false | 不替代 Unit A/B;live 6173/PITR/corpus 演练另占槽。禁止在错挂数据根上开降级读 |
| FAV-V0-V6-IMPL | 终态成果保险库 V0–V6 内核与挂钩 | **PARTIAL** | [test-report](../test-reports/2026-09-14-final-artifact-vault-test-report.md);[ADR](../adr/2026-09-14-final-artifact-vault.md)。goose 00034;同事务 staging;scratch recover-apply;`FAV_DEGRADED_READ` 默认 false | 不替代 Unit A/B;live 6173/PITR/corpus 演练另占槽。禁止在错挂数据根上开降级读 |
---
+1 -1
View File
@@ -23,7 +23,7 @@
| IAM / 鉴权 | 项目级 API 鉴权 + RBAC | partial | [audit/authorization](../audit/authorization-matrix-v2.md);[刷新恢复专项审计](../audit/2026-09-13-chat-history-refresh-disappears.md) | 历史读取端点补统一会话 owner + 阶段授权;旧 API 410 标注(BUG-11 partial) | `authz` |
| 文档治理 | 法定文档生命周期 + 租约 + 受控正文读取 | partial | [数据根 split-brain 审计](../audit/2026-09-14-dev-runtime-data-root-split-brain.md);[test docgov](../test-reports/2026-09-08-docgov-lifecycle-and-claiming-framework-test-report.md);[项目 143 canonical 漂移审计](../audit/2026-09-14-project143-controlled-content-404.md);[既有真实 UI 报告](../test-reports/2026-09-14-controlled-content-ui-acceptance.md) | canonical/hash 与 UI 竞态旧缺陷已修;当前 dev 因数据根 split-brain 再次不可读。Unit A 纠挂后标 incident-mitigated;`done` 等 Unit B 负例,不等 outbox | `docgov` |
| 文档版本与修改认知 | 智能体版本边界、人工修订标记、任意版本比较、变更报告与负责人通知 | partial | [管理测试](../test-reports/2026-09-13-document-revision-management-test-report.md);[运行时 UI Round20](../test-reports/2026-09-14-document-revision-runtime-ui-test-report.md);[运行时审计](../audit/2026-09-13-document-revision-runtime-404.md);[ADR](../adr/2026-09-13-document-version-boundary.md) | **运行时 UI PASS**(6159 / V3/r2)。仍 `partial`:change report=`fallback`(真实 diff+lineage,非完整 PI 叙事)。系统级 `CHAT-INTENT` 见 gap-matrix | `docgov` |
| 最终成果归档与恢复 | 终态文档/助手回复的独立归档、稳定定位、清理门禁与受控部分恢复 | partial | [ADR](../adr/2026-09-14-final-artifact-vault.md);[调研](../ops/research/2026-09-14-final-artifact-vault.md);[整改方案](../remediation/2026-09-14-final-artifact-vault-remediation.md);[单测报告](../test-reports/2026-09-14-final-artifact-vault-test-report.md) | V0–V6 内核/挂钩/CLI 已落地(goose 00034)。现网降级读默认关;6173 live 演练与 corpus/PITR 待 Unit A 后另占槽 | `artifact-vault` |
| 最终成果归档与恢复 | 终态文档/助手回复的独立归档、稳定定位、清理门禁与受控部分恢复 | partial | [ADR](../adr/2026-09-14-final-artifact-vault.md);[调研](../ops/research/2026-09-14-final-artifact-vault.md);[整改方案](../remediation/2026-09-14-final-artifact-vault-remediation.md);[单测报告](../test-reports/2026-09-14-final-artifact-vault-test-report.md) | V0–V6 内核已落地:approve/commit 同事务 staging、scratch recover-apply、GET 零写入、`copy_only` pin-export(goose 00034)。现网降级读默认关;6173 live 演练与 corpus/PITR 待 Unit A 后另占槽 | `artifact-vault` |
| 前端工作台 | 三栏 + 块文档 + SSE | partial | [test workbench](../test-reports/2026-09-08-three-column-workbench-and-block-document-test-report.md);[现场专项审计](../audit/2026-09-13-conversation-intent-runtime-state.md) | 错误卡片/任务进度/文档 busy 状态刷新恢复与人工抽检待完成 | `web` |
| PI Runner / 配置链 | pi-agent + MiniMax 真实链路 | done | [test piagent](../test-reports/2026-09-13-codex-audit-p0-remediation-test-report.md);[container-env](../test-reports/2026-09-13-container-env-configuration-test-report.md) | — | `pi-agent` |
| 三环境运维 | dev/test/main + 共享 KB | partial | [PROJECT.md](../../PROJECT.md) §4;[数据根 split-brain 审计](../audit/2026-09-14-dev-runtime-data-root-split-brain.md);[审查修订方案](../remediation/2026-09-14-dev-runtime-data-root-and-projection-remediation.md);[数据生命周期方案](../remediation/2026-09-14-runtime-data-lifecycle-and-migration-corpus-remediation.md) | 现场仍错挂 `/tmp`。本行 `done` 等 Unit A 纠挂 + Unit B 门禁负例;蓝绿换库/corpus 为 sibling,不挡事故关闭 | `infra` |
@@ -12,6 +12,9 @@
- publisher 幂等、拒绝 `data/dev` 根、跨项目同 SHA 分 key、tombstone union-deny。
- 回填缺证据 quarantine;重跑不新增逻辑成果。
- recover 拒绝 operational DSN;coverage/destroy 门禁 fail-closed。
- 半发布缺 commit marker 不可见,exclusive 重试后可恢复。
- GET/degraded 路径不调用 `Request`。
- `copy_only` 仅 completed 后显式 pin 可进库。
## 三、 测试方案与环境 (Test Plan & Environment)
@@ -67,13 +70,21 @@
- **评价判定**: PASS
- **性能与耗时**: <10ms
### 5. 缺口补齐(同事务 / recover-apply / GET 零写入 / pin)
- **测试输入**: `TestPublisherRetriesAfterMissingCommit`、`TestUnpublishedWithoutCommitMarkerInvisible`、`TestFilesystemIdentityMismatch`、`TestDegradedPayloadDoesNotWrite`、`TestTryVaultDegradedDoesNotRequest`、`TestApplyRecoverAsCollectionWritesScratchAndSkipsDenied`、`TestServer_PinExportCopyOnlyAfterCompleted`、`TestValidateIndependentVault`
- **实际输出**: 全部 `--- PASS`(见 [assets/2026-09-14-final-artifact-vault/unit-tests-gapfill.txt](assets/2026-09-14-final-artifact-vault/unit-tests-gapfill.txt))
- **评价判定**: PASS
- **性能与耗时**: artifactvault 4ms;pin-export 120ms
## 六、 自动化测试套件汇总 (Test Suite Execution)
```
ok chat-agent-system/internal/artifactvault 0.005s
ok chat-agent-system/internal/docgov 0.003s
ok chat-agent-system/internal/ctxmgr 0.003s
ok chat-agent-system/internal/server 0.005s (TestFinalizeTaskRunCompletesTurnAndIngests)
ok chat-agent-system/internal/config 0.002s
ok chat-agent-system/internal/docgov 0.011s
ok chat-agent-system/internal/ctxmgr 0.073s
ok chat-agent-system/internal/server 0.364s (FAV 挂钩 / pin-export / GET 零写入)
```
未跑 `go test ./...` 全量(含真实 PI E2E / 需容器的套件);本波次范围是 FAV 包与挂钩单测。
@@ -0,0 +1,48 @@
=== RUN TestEvaluateEligibility_Allowlist
--- PASS: TestEvaluateEligibility_Allowlist (0.00s)
=== RUN TestEvaluateEligibility_ApprovedRequiresReviewSnapshot
--- PASS: TestEvaluateEligibility_ApprovedRequiresReviewSnapshot (0.00s)
=== RUN TestEvaluateEligibility_TaskWithoutCompletedTurn
--- PASS: TestEvaluateEligibility_TaskWithoutCompletedTurn (0.00s)
=== RUN TestEvaluateEligibility_SensitiveRejectedBeforeStaging
--- PASS: TestEvaluateEligibility_SensitiveRejectedBeforeStaging (0.00s)
=== RUN TestEvaluateEligibility_CopyOnlyRequiresExplicitPinAfterCompleted
--- PASS: TestEvaluateEligibility_CopyOnlyRequiresExplicitPinAfterCompleted (0.00s)
=== RUN TestEvaluateEligibility_UnknownTypeRejected
--- PASS: TestEvaluateEligibility_UnknownTypeRejected (0.00s)
=== RUN TestPublisherIdempotentAndCrashSafe
--- PASS: TestPublisherIdempotentAndCrashSafe (0.00s)
=== RUN TestPublisherRejectsBadSHAAndCrossProjectKeys
--- PASS: TestPublisherRejectsBadSHAAndCrossProjectKeys (0.00s)
=== RUN TestFilesystemRefusesRuntimeDataDev
--- PASS: TestFilesystemRefusesRuntimeDataDev (0.00s)
=== RUN TestTombstoneUnionDeny
--- PASS: TestTombstoneUnionDeny (0.00s)
=== RUN TestLastReferencePurgeAndLegalHold
--- PASS: TestLastReferencePurgeAndLegalHold (0.00s)
=== RUN TestFilesystemIdentityMismatch
--- PASS: TestFilesystemIdentityMismatch (0.00s)
=== RUN TestUnpublishedWithoutCommitMarkerInvisible
--- PASS: TestUnpublishedWithoutCommitMarkerInvisible (0.00s)
=== RUN TestPublisherRetriesAfterMissingCommit
--- PASS: TestPublisherRetriesAfterMissingCommit (0.00s)
=== RUN TestDegradedPayloadDoesNotWrite
--- PASS: TestDegradedPayloadDoesNotWrite (0.00s)
=== RUN TestApplyRecoverAsCollectionWritesScratchAndSkipsDenied
--- PASS: TestApplyRecoverAsCollectionWritesScratchAndSkipsDenied (0.00s)
PASS
ok chat-agent-system/internal/artifactvault 0.004s
=== RUN TestValidateIndependentVault
--- PASS: TestValidateIndependentVault (0.00s)
PASS
ok chat-agent-system/internal/config 0.002s
=== RUN TestFinalizeTaskRunCompletesTurnAndIngests
2026/09/14 12:51:53 [kb] 无法连接到 PostgreSQL 知识库 (postgres://:@:0/?sslmode=disable): cannot parse `postgres://:xxxxx@:0/?sslmode=disable`: invalid port (outside range), 将降级运行在离线模式
--- PASS: TestFinalizeTaskRunCompletesTurnAndIngests (0.00s)
=== RUN TestTryVaultDegradedDoesNotRequest
--- PASS: TestTryVaultDegradedDoesNotRequest (0.00s)
=== RUN TestServer_PinExportCopyOnlyAfterCompleted
2026/09/14 12:51:53 [kb] 无法连接到 PostgreSQL 知识库 (postgres://:@:0/?sslmode=disable): cannot parse `postgres://:xxxxx@:0/?sslmode=disable`: invalid port (outside range), 将降级运行在离线模式
--- PASS: TestServer_PinExportCopyOnlyAfterCompleted (0.12s)
PASS
ok chat-agent-system/internal/server 0.131s