From 539a2dc639a3224b1d9676f3752054affc678773 Mon Sep 17 00:00:00 2001 From: weichen Date: Mon, 14 Sep 2026 12:52:28 +0000 Subject: [PATCH] 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 --- .doc/ops/CURRENT.md | 2 +- ...-14-final-artifact-vault-implementation.md | 6 ++- .doc/remediation/gap-matrix.md | 2 +- .doc/status/FEATURE-MATRIX.md | 2 +- ...-09-14-final-artifact-vault-test-report.md | 17 +++++-- .../unit-tests-gapfill.txt | 48 +++++++++++++++++++ 6 files changed, 69 insertions(+), 8 deletions(-) create mode 100644 .doc/test-reports/assets/2026-09-14-final-artifact-vault/unit-tests-gapfill.txt diff --git a/.doc/ops/CURRENT.md b/.doc/ops/CURRENT.md index 3c90c0e8..d02bdf62 100644 --- a/.doc/ops/CURRENT.md +++ b/.doc/ops/CURRENT.md @@ -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/` 或 `fix/`,**禁止** `dev` / `test` / `main`。同一 `mutex` 同时仅一个 `in_progress`。 diff --git a/.doc/ops/short-term/2026-09-14-final-artifact-vault-implementation.md b/.doc/ops/short-term/2026-09-14-final-artifact-vault-implementation.md index c299c428..07acd47d 100644 --- a/.doc/ops/short-term/2026-09-14-final-artifact-vault-implementation.md +++ b/.doc/ops/short-term/2026-09-14-final-artifact-vault-implementation.md @@ -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 另占槽 diff --git a/.doc/remediation/gap-matrix.md b/.doc/remediation/gap-matrix.md index bfb9eb12..50277430 100644 --- a/.doc/remediation/gap-matrix.md +++ b/.doc/remediation/gap-matrix.md @@ -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 演练另占槽。禁止在错挂数据根上开降级读 | --- diff --git a/.doc/status/FEATURE-MATRIX.md b/.doc/status/FEATURE-MATRIX.md index b6a1264b..c9894b7e 100644 --- a/.doc/status/FEATURE-MATRIX.md +++ b/.doc/status/FEATURE-MATRIX.md @@ -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` | diff --git a/.doc/test-reports/2026-09-14-final-artifact-vault-test-report.md b/.doc/test-reports/2026-09-14-final-artifact-vault-test-report.md index e6fa66df..35f152b6 100644 --- a/.doc/test-reports/2026-09-14-final-artifact-vault-test-report.md +++ b/.doc/test-reports/2026-09-14-final-artifact-vault-test-report.md @@ -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 包与挂钩单测。 diff --git a/.doc/test-reports/assets/2026-09-14-final-artifact-vault/unit-tests-gapfill.txt b/.doc/test-reports/assets/2026-09-14-final-artifact-vault/unit-tests-gapfill.txt new file mode 100644 index 00000000..6fc5b46c --- /dev/null +++ b/.doc/test-reports/assets/2026-09-14-final-artifact-vault/unit-tests-gapfill.txt @@ -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