diff --git a/.doc/ops/CURRENT.md b/.doc/ops/CURRENT.md index 1d87ac90..3710d81c 100644 --- a/.doc/ops/CURRENT.md +++ b/.doc/ops/CURRENT.md @@ -5,14 +5,15 @@ ## 焦点 -1. **Wave 3 done**:PU6–PU8 全部 no-go/deferred;契约已落盘 +1. **Phase 3 done**:N7 重试策略 + Playwright gated + 遗留 handoff 已合入 2. **Wave 1 done**:PU5A race + PU3 IAM fail-closed 已合入 `dev` -3. **Phase 3 遗留**:N7 U8 quality_failed / Playwright gated / IAM·DoD 清点 +3. **运维**:配置 Actions nightly secrets;获批后再开 PU6–PU8/Playwright 实现 ## 并行认领 | owner | task | branch | worktree | mutex | status | |-------|------|--------|----------|-------|--------| +| Cursor | 2026-09-16-wave-leftovers | fix/wave-leftovers-n7-playwright-dod | - | ci | done | | Cursor | 2026-09-16-wave3-pu6-pu8-go-no-go | feature/wave3-pu6-pu8-go-no-go | - | architecture-docs | done | | Cursor | 2026-09-16-wave2c-same-image-digest | feature/wave2c-same-image-digest | - | infra | done | | Cursor | 2026-09-16-wave2b-nightly-promotion-receipt | feature/wave2b-nightly-promotion-receipt | - | ci | done | diff --git a/.doc/ops/handoffs/2026-09-16-phase3-leftover-closeout.md b/.doc/ops/handoffs/2026-09-16-phase3-leftover-closeout.md new file mode 100644 index 00000000..b04e4bf5 --- /dev/null +++ b/.doc/ops/handoffs/2026-09-16-phase3-leftover-closeout.md @@ -0,0 +1,33 @@ +--- +title: "Phase 3 遗留清点收口" +created: 2026-09-16 +from: Cursor +to: any +blocker: false +--- + +# Phase 3 遗留清点收口 + +## 已关闭本轮 + +| 项 | 处置 | +|----|------| +| N7 U8 `quality_failed` 偶发 | `run-nightly-real-pi.sh` 对 quality_failed 全文重试一次;仍失败则 `product_fail`(非 PASS)。根因:模型质量门,非 secret/runner。 | +| Playwright intent-plan 双标签 | 正式长期 gated + long-term 契约;矩阵关闭条件写死 | +| Wave3 PU6–PU8 | 已 no-go(Phase 2) | +| Artifact same-image | Wave2C done | + +## 保留开放(需产品/另任务,不假装 done) + +| 项 | 说明 | +|----|------| +| IAM 全路由 inventory | 仍开放;fail-closed 核心已签 | +| session 中断负例 / 410 退役 | 需产品拍板 | +| R13 全量清单勾选 | nightly 脱敏证据路径已有;完整 R13 矩阵另开 audit | +| deterministic/B1–B4 持续回归 | 合入冒烟覆盖 short;全量门禁保持现有 CI | +| FAV / 旁支分支 | CURRENT 已声明故意不合入 | + +## 下一步 + +- 配置 Actions `RUNNER_AUTH_TOKEN` + `NIGHTLY_TEST_DATABASE_URL` 使 nightly 真跑 +- 获批后按 long-term 契约开 PU6–PU8 / Playwright 实现任务 diff --git a/.doc/ops/long-term/2026-09-16-intent-plan-playwright-dual-tab.md b/.doc/ops/long-term/2026-09-16-intent-plan-playwright-dual-tab.md new file mode 100644 index 00000000..c4731ddc --- /dev/null +++ b/.doc/ops/long-term/2026-09-16-intent-plan-playwright-dual-tab.md @@ -0,0 +1,27 @@ +--- +title: "Playwright intent-plan 双标签 — 长期 gated" +status: deferred +created: 2026-09-16 +updated: 2026-09-16 +owner: TBD +branch: feature/intent-plan-cards-playwright +mutex: web +--- + +# Playwright intent-plan 双标签 — 长期 gated + +## 现状 + +- `web/e2e/intent-plan-cards.spec.ts`:`test.skip` unless `RUN_UI_ACCEPTANCE=1`;仅 body visible 骨架。 +- Conversation-intent 双标签已有 live 证据(项目 6275);**不等于** intent-plan confirm 双标签。 +- Wave2 明确不宣称 UI 双标签已绿。 + +## 关闭条件 + +1. 独立 short-term + `RUN_UI_ACCEPTANCE=1` 真浏览器:双标签 confirm 不同时本地成功 +2. 刷新/重登后与 PG plan 一致 +3. 报告归档 `.doc/test-reports/`;不升 MULTI_INTENT tier + +## 非目标 + +- 用 stub/SKIP 冒充 PASS diff --git a/.doc/status/FEATURE-MATRIX.md b/.doc/status/FEATURE-MATRIX.md index fb691db7..e51b99be 100644 --- a/.doc/status/FEATURE-MATRIX.md +++ b/.doc/status/FEATURE-MATRIX.md @@ -48,7 +48,7 @@ | 模块 | 声明范围 | 状态 | 发布关系 | 证据 | 剩余工作 / 关闭条件 | mutex | |------|----------|------|----------|------|---------------------|-------| | 意图识别 L1 | 18 类 Intent、三分支消解、写/只读分流、双标签 `DOC_BUSY`、intent 纯依赖边界 | done | non_blocker | [intent-recognition](../system-design/intent-recognition/);[审计](../audit/2026-09-13-conversation-intent-runtime-state.md);[报告](../test-reports/2026-09-13-conversation-intent-runtime-state-test-report.md);[双标签](../test-reports/assets/2026-09-15-conversation-intent-dual-tab/live.json);[U1](../test-reports/2026-09-15-multi-intent-u1-contracts-test-report.md)–[U3](../test-reports/2026-09-15-multi-intent-u3-intentflow-pg-test-report.md) | **边界 before**:含 U9–U12 叙事混入 → **after**:U9–U12 迁至「多意图扩面」行。关闭:纯依赖边界回归即重开 | `intent` | -| 多意图持久计划(U1–U8 基线) | app/intentflow 生命周期、HITL、默认 `legacy`、U1–U8 代码与安全基线 | done | non_blocker(默认 legacy) | [设计](../system-design/2026-09-15-multi-intent-hitl-plan.md);[U1](../test-reports/2026-09-15-multi-intent-u1-contracts-test-report.md)–[U8](../test-reports/2026-09-16-multi-intent-u8-task-generate-test-report.md);[Wave2 真 PI](../test-reports/2026-09-16-wave2-real-pi-evidence-test-report.md) | U8 真实 PI + PG receipt + 撤权 + API 刷新/重启已签。Playwright 双标签仍 gated。升 `confirm/full` 另开任务 | `intent-plan` | +| 多意图持久计划(U1–U8 基线) | app/intentflow 生命周期、HITL、默认 `legacy`、U1–U8 代码与安全基线 | done | non_blocker(默认 legacy) | [设计](../system-design/2026-09-15-multi-intent-hitl-plan.md);[U1](../test-reports/2026-09-15-multi-intent-u1-contracts-test-report.md)–[U8](../test-reports/2026-09-16-multi-intent-u8-task-generate-test-report.md);[Wave2 真 PI](../test-reports/2026-09-16-wave2-real-pi-evidence-test-report.md) | U8 真实 PI + PG receipt + 撤权 + API 刷新/重启已签。**Playwright 双标签长期 gated**:`web/e2e/intent-plan-cards.spec.ts` 需 `RUN_UI_ACCEPTANCE=1`;关闭条件=独立 short-term 真浏览器 PASS(见 long-term)。升 `confirm/full` 另开且 Wave3 no-go | `intent-plan` | | 多意图扩面(U9–U12) | U9 LLM 分段实验;U10 mutate;U11 docgov;U12 workflow/run-control | deferred | deferred_enhancement | [设计](../system-design/2026-09-15-multi-intent-hitl-plan.md);[计划 Wave 3 / PU8](../remediation/2026-09-16-feature-matrix-production-readiness-plan.md);[go/no-go](../ops/research/2026-09-16-wave3-pu6-pu8-go-no-go.md) | **2026-09-16 no-go**:契约见 long-term `pu8-u9`…`pu8-u12`;未获批不实施;升 tier 另开 | `intent-plan` | | 对话 / ctxmgr baseline | 多轮上下文、刷新/重登/重启恢复、授权同集正文与计数、U10 端口化停止扩面 | done | non_blocker | [multi-turn](../system-design/multi-turn-dialogue/);[刷新审计](../audit/2026-09-13-chat-history-refresh-disappears.md);[U10](../test-reports/2026-09-15-chatlog-contextasm-u10-test-report.md);[门禁 B3](../test-reports/2026-09-16-chat-refresh-gate-test-report.md)(项目 6359) | **before**:语义摘要误标 D5 混入 → **after**:摘要迁「语义摘要 D3」;D7 数据治理独立。U10 停止扩面 | `chat` | | 语义摘要(D3) | 授权后可见集合上的语义摘要;shadow → 可选替换 deterministic | deferred | deferred_enhancement | [chat-agent-p6-backlog](../backlog/chat-agent-p6-backlog.md)(**D3**;D5=共享 KB 隔离评估);[计划 PU6](../remediation/2026-09-16-feature-matrix-production-readiness-plan.md);[go/no-go](../ops/research/2026-09-16-wave3-pu6-pu8-go-no-go.md) | **2026-09-16 no-go**;契约 [long-term pu6](../ops/long-term/2026-09-16-pu6-semantic-summary-contract.md);未获批不实施 | `chat` | diff --git a/.doc/test-reports/2026-09-16-phase3-leftover-closeout-test-report.md b/.doc/test-reports/2026-09-16-phase3-leftover-closeout-test-report.md new file mode 100644 index 00000000..a8076e98 --- /dev/null +++ b/.doc/test-reports/2026-09-16-phase3-leftover-closeout-test-report.md @@ -0,0 +1,51 @@ +# Phase 3 遗留修复测试报告 + +## 一、 测试背景 (Background) + +Wave 2B N7 本机 nightly 在 U8 真实 PI 出现 `quality_failed`(产品质量门,非 infra);Playwright intent-plan 双标签仍为 skip 骨架;矩阵/DoD 仍有开放项需清点而不假完成。 + +## 二、 测试目标 (Test Objectives) + +- 明确 N7 根因分类 + 门禁策略(重试一次,仍失败 product_fail) +- Playwright 正式 gated 文档化 +- 遗留项 handoff 清点 + +## 三、 测试方案与环境 (Test Plan & Environment) + +| 项 | 值 | +|----|-----| +| 分支 | `fix/wave-leftovers-n7-playwright-dod` | +| 证据 | Wave2B receipt `67d7335…` product_fail;脚本重试逻辑 | + +## 四、 预期结果 (Expected Results) + +- quality_failed → 脚本重试一次;二次仍失败 → product_fail receipt +- 不将 quality_failed 标为 infra 或 PASS +- 矩阵写明 Playwright 关闭条件 + +## 五、 实际测试结果与判定 (Actual Results & Evaluation) + +### L1 — N7 根因与策略 + +- **Input**:Wave2B 控制台 `PI run status=quality_failed want completed` +- **Actual**:属产品质量门失败;`run-nightly-real-pi.sh` 增加一次全文重试 +- **Verdict**:PASS(策略落地;未把偶发写成绿) + +### L2 — Playwright gated + +- **Input**:阅读 `web/e2e/intent-plan-cards.spec.ts` +- **Actual**:`test.skip(!RUN_UI_ACCEPTANCE)`;long-term + 矩阵关闭条件已写 +- **Verdict**:PASS(正式 gated,非 stub 冒充) + +### L3 — 遗留清点 + +- **Actual**:handoff `2026-09-16-phase3-leftover-closeout.md` +- **Verdict**:PASS + +## 六、 自动化测试套件汇总 (Test Suite Execution) + +`go vet` + 洁净 `go test -short ./...`(合入冒烟)。 + +## 七、 测试结论与后续优化建议 (Conclusion & Next Steps) + +三相计划收口。nightly 真 PASS 依赖 runner+模型稳定与 Actions secrets;Playwright/PU6–PU8 等获批后再开实现。 diff --git a/scripts/run-nightly-real-pi.sh b/scripts/run-nightly-real-pi.sh index 8c73b873..8b250267 100755 --- a/scripts/run-nightly-real-pi.sh +++ b/scripts/run-nightly-real-pi.sh @@ -135,6 +135,14 @@ LOG_FILE="${EVIDENCE_DIR}/go-test.txt" set +e go test -count=1 -timeout "${TIMEOUT}" -v ./internal/server/ -run "${RUN_FILTER}" 2>&1 | tee "${LOG_FILE}" TEST_RC=${PIPESTATUS[0]} +# One retry when model quality_failed flakes the U8 generate (product path, not infra). +if [[ "${TEST_RC}" -ne 0 ]] && grep -Eq 'quality_failed want completed|status=quality_failed' "${LOG_FILE}"; then + echo "==> retry once after quality_failed flake..." | tee -a "${LOG_FILE}" + RETRY_LOG="${EVIDENCE_DIR}/go-test-retry.txt" + go test -count=1 -timeout "${TIMEOUT}" -v ./internal/server/ -run "${RUN_FILTER}" 2>&1 | tee "${RETRY_LOG}" + TEST_RC=${PIPESTATUS[0]} + cat "${RETRY_LOG}" >> "${LOG_FILE}" +fi set -e if [[ "${TEST_RC}" -eq 0 ]]; then