Compare commits

..
Author SHA1 Message Date
weichen e5e09560c7 release-candidate: 汇集 dev 功能至 test 分支,准备长期实测 [Tag: rc-v1.0.0-beta.3] 2026-09-17 05:03:13 +00:00
weichen 4fce16c91b merge: feature/promote-dev-to-test-2026-09-17 2026-09-17 05:03:04 +00:00
weichenandCursor 151953a520 docs(ops): occupy slot to promote local dev into test
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 05:03:04 +00:00
weichen 46a0fb2d5a merge: feature/w7-d7-data-inventory 2026-09-17 04:58:52 +00:00
weichenandCursor dbc9b73278 docs(ops): record W7 D7 chat data inventory without deletion
Keep the D7 matrix row deferred until compliance signoff; no gap-matrix blocker.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 04:58:52 +00:00
weichen cb4fbb69a6 merge: feature/w6-fav-subscriber-shadow 2026-09-17 04:26:18 +00:00
weichenandCursor 58c04ff6c5 docs(ops): close W6 FAV shadow and release integration slot
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 04:26:18 +00:00
weichenandCursor 9c0954ba6e docs(ops): record W6 FAV subscriber shadow evidence
Keep the FAV matrix row partial because live staging was not opened.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 04:25:17 +00:00
weichenandCursor 2c1d040ccf feat(events): add FAV subscriber shadow without live writes
ObserveShadow computes intended outcome only and refuses FAV_DEGRADED_READ; HandleLease and Register(fav) stay fail-closed.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 04:25:17 +00:00
weichen 49d901e964 merge: feature/w5a-software-bootstrap-ui-pi 2026-09-17 04:12:38 +00:00
weichenandCursor 7c1ae7ec38 docs(ops): close W5a and release integration slot
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 04:12:38 +00:00
weichenandCursor eee42d1d16 feat(workflow-design): catalog-driven software create wizard and docs_only PI
Software projects mount only bootstrap/delivery keys and skip the medical
seven-template clone. SWBOOT-10 stays a fail-closed stub.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 04:11:03 +00:00
weichen f5a80fd653 merge: feature/w4-u9-segment-live 2026-09-17 03:15:35 +00:00
weichenandCursor 1c1a4bb683 docs(ops): close W4 U9–U12 and release integration slot
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 03:15:35 +00:00
weichenandCursor 43555e5d08 feat(intent-plan): wire U9 PI segment proposer and per-flag U10–U12 evidence
Rules that already split skip the LLM. Independent flags stay off by
default and do not raise MULTI_INTENT_PLAN_TIER.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 03:14:57 +00:00
weichen 9ac1eb178e merge: feature/w3-pi-change-report-narrative-live 2026-09-17 03:03:20 +00:00
weichenandCursor 2ba6b3ec74 docs(ops): close W3 narrative live and release integration slot
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 03:03:20 +00:00
weichenandCursor 47a740a9c4 feat(docgov): wire no-tool PI change-report narrative
Flag-on CreateAgentCandidate asks the product PI runner for
change_report_narrative_v1 after the real digest is known; timeout
and malformed payloads stay full fallback. Default flag remains off.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 03:02:11 +00:00
weichen 0bc98c6da4 merge: feature/w2-semantic-summary-shadow-live 2026-09-17 02:51:55 +00:00
weichenandCursor 886449958f feat(chat): wire no-tool PI semantic summary shadow
Enable SEMANTIC_SUMMARY_SHADOW to call the product PI runner on authorized messages only, keep REPLACE unwired, and record MiniMax evidence for the D3 matrix close.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 02:51:55 +00:00
weichen 982dc48345 merge: chore/leftover-hygiene-2026-09-17 2026-09-17 02:43:44 +00:00
weichenandCursor 4b509efefc docs(ops): align leftover branches and contracts with local dev
Prune merged worktrees/refs and correct SWBOOT/PU scaffolding docs so W2–W7 start from git truth, without merging frozen FAV/herdr/project143 branches.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 02:43:44 +00:00
weichen 80ef2f61a0 merge: docs/archive-kb-host-auth-short-term 2026-09-17 02:06:19 +00:00
weichenandCursor f2c2e34f0b docs(ops): archive completed kb-host-auth short-term task
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 02:06:19 +00:00
weichen 392b3bc1c9 merge: docs close kb-host-auth 2026-09-17 02:06:09 +00:00
weichenandCursor 6f52896dad docs(ops): close kb-host-auth task and release integration slot
Record rebuild smoke: kb_ready=true and redacted online DSN in container.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 02:06:09 +00:00
weichen 5182da20ed merge: fix/kb-host-auth-layered-load (no Fatalf) 2026-09-17 02:04:51 +00:00
weichenandCursor 6fa933ac27 fix(kb): return offline client instead of Fatalf under require-online
Library must not abort the process; E2E callers use EnsureOnline/t.Fatal
so ambient RUN_PI_E2E no longer kills short server tests.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 02:04:51 +00:00
weichen cdd3f8c559 merge: fix/kb-host-auth-layered-load 2026-09-17 02:03:21 +00:00
weichenandCursor abbb461780 docs(ops): claim integration slot for kb-host-auth merge
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 02:03:21 +00:00
weichenandCursor c977e8247a docs(test): record KB host-auth layered load fix and acceptance
Short-term task, CURRENT claim, and unit/live boolean test report.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 02:03:07 +00:00
weichenandCursor e782400736 fix(api): expose kb_ready and gate E2E/nightly on shared KB
Health reports kb_ready; PI E2E uses layered Load + require-online;
nightly preflights SELECT 1 before product suite.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 02:03:07 +00:00
weichenandCursor f3ed57c41f fix(kb): redact DSN logs and fail closed when KB must be online
Add Online(), honor KB_REQUIRE_ONLINE/RUN_PI_E2E unless KB_ALLOW_OFFLINE,
and refuse empty/wrong credentials without leaking secrets in logs.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 02:03:07 +00:00
weichenandCursor cdbf9cab63 fix(config): layer root .env over configs/.env.{ENV} for KB auth
Stop using a fake default KB password; merge Compose-style env files and
rewrite compose DNS to localhost on the host so go test/E2E authenticate.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 02:03:07 +00:00
weichen e694408851 merge: docs/w1-release-integration-slot 2026-09-17 01:48:19 +00:00
weichenandCursor cacbf755b6 docs(ops): release integration slot after W1 merge smoke
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 01:48:19 +00:00
weichen 1d075aa4c3 merge: fix/w1-archtest-app-fav-allowlist 2026-09-17 01:47:52 +00:00
weichenandCursor 86a4c9af63 fix(arch): allowlist app/fav imports for archtest baseline
FAV U7 stub package was missing from module-boundaries imports map,
breaking go test -short smoke after W1 merge.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 01:47:52 +00:00
weichen 4d6b95dea4 merge: feature/w1-ci-e2e-green-nightly 2026-09-17 01:44:02 +00:00
weichenandCursor 8d3fd089f2 docs(ops): mark W1 step complete on partial-deferred controller
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 01:44:02 +00:00
weichenandCursor 6981223087 docs(test): close W1 CI/E2E with FullNone nightly pass receipt
Archive green receipt 6e2476f0, raise FEATURE-MATRIX CI/E2E to done,
and mark short-term/CURRENT W1 complete.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 01:43:54 +00:00
weichenandCursor 6e2476f0f2 fix(ci): retry nightly suite on MISSING_TARGET flakes
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 01:12:37 +00:00
weichenandCursor 11e030db30 fix(squad): stop requiring fields.json as hard PI runner target
Organizer still prompts for fields.json, but missing it must not fail
closed as MISSING_TARGET when output.md is present (FullNone flake).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 00:55:11 +00:00
weichenandCursor 0f52ab89db fix(ci): load real KB password for host-side PI E2E
configs/.env.dev omits KB_DB_PASSWORD so Load kept the default
shared_kb_secret_pass; fall back to root .env so research can use KB.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 00:52:01 +00:00
weichenandCursor a02c67db82 fix(ci): stabilize FullNone PI E2E timeouts and host KB DNS
Raise HTTP client timeout above AgentTimeout, rewrite compose KB host
to localhost for host-side tests, and retry nightly on deadline flakes.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 00:28:38 +00:00
weichenandCursor 4f2e5f013f fix(db): remove duplicate goose 00048 software-project-type migration
Two 00048 files made goose panic on CollectMigrations, blocking all
TEST_DATABASE_URL PG suites including FullNone and nightly.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 23:37:04 +00:00
weichen 4bda6484a2 merge: docs/partial-deferred-completion-plan 2026-09-16 23:34:16 +00:00
weichenandCursor 251b5f9c3d docs(ops): claim integration slot for docs closeout merge and W1
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 23:34:16 +00:00
weichenandCursor c649067d19 docs(remediation): freeze §7 open decisions for partial/deferred closeout
Confirm D7 retention draft ADR, confirm-tier gate, REPLACE default-off,
and FAV live order with observation windows; sync CURRENT and short-term.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 16:13:17 +00:00
weichen bb8d921e7c docs(remediation): add partial/deferred completion plan (W1-W7) and short-term controller 2026-09-16 16:03:50 +00:00
weichenandCursor 83f9004f9e docs(ops): close SWBOOT short-term after remote push
CI / go-vet-and-short-test (push) Failing after 1s
CI / backup-restore-drill (push) Failing after 0s
CI / web (push) Failing after 0s
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:49:21 +00:00
weichenandCursor 92e0ae7ec4 merge: origin/feature/intent-plan-cards-playwright
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:49:21 +00:00
weichenandCursor 49db87ebe5 docs(ops): release integration slot after agent-delta merge
CI / go-vet-and-short-test (push) Failing after 1s
CI / backup-restore-drill (push) Failing after 0s
CI / web (push) Failing after 0s
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:48:24 +00:00
weichenandCursor 51c8ec1e8a docs(ops): mark P0–P7 agent-delta merge complete on SSOT
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:48:07 +00:00
weichenandCursor 768729d85e fix(swboot): drop thin allowlist stub after agent SWBOOT merge
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:46:57 +00:00
weichenandCursor f0029dffed merge: origin/feature/software-project-bootstrap
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:46:45 +00:00
weichenandCursor 00cc5b6645 merge: origin/feature/fav-u7-publisher
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:46:29 +00:00
weichenandCursor 131380e858 merge: origin/feature/pu8-u9-u12-flags
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:46:23 +00:00
weichenandCursor b92e226497 fix(docgov): drop thin pi_narrative stub after agent PU7 merge
Use ResolveChangeReport from feature/pu7-pi-narrative.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:46:16 +00:00
weichenandCursor a380c218bb merge: origin/feature/pu7-pi-narrative
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:46:06 +00:00
weichenandCursor f3351ce750 fix(chat): drop thin semantic_shadow stub after agent PU6 merge
Keep applySemanticShadow path from feature/pu6-semantic-summary.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:46:01 +00:00
weichenandCursor f55887e2a2 docs(test): archive intent-plan Playwright dual-tab report
Record RUN_UI_ACCEPTANCE live PASS evidence and close the dual-tab short-term.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:45:50 +00:00
weichenandCursor b74b9ab1d0 test(web): add intent-plan dual-tab Playwright acceptance
Gate on RUN_UI_ACCEPTANCE=1; seed awaiting PG plan via SQL without raising
MULTI_INTENT_PLAN_TIER; assert one confirm wins and reload/relogin match PG.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:45:50 +00:00
weichenandCursor cc8557b8c6 feat(web): hydrate PLAN_CONFIRM from active intent plan
Load GET /intent-plans/active into a live card on session restore, use a
unique decision nonce per confirm click, and keep an empty-docAST fallback
so login still renders when demo seeds are off.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:45:50 +00:00
weichenandCursor 003bc7a5b9 merge: origin/feature/pu6-semantic-summary
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:45:45 +00:00
weichenandCursor 6aea8784c2 docs(test): record nightly run#30 U8 PASS after DATA_DIR rw fix
CI / go-vet-and-short-test (push) Failing after 0s
CI / backup-restore-drill (push) Failing after 1s
CI / web (push) Failing after 0s
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:44:56 +00:00
weichenandCursor 6087d0bdef docs(test): archive PU8 U9–U12 flags scaffolding report
Record default-off flag gates, unit evidence, and FEATURE-MATRIX partial status.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:42:49 +00:00
weichenandCursor 0611b1f24f feat(intentflow): wire U9–U12 ports and gated OwnerMux
Register dry-run adapters via BuildOwnerMux when independent flags are on;
U9 stub fail-closes on malformed/timeout/out-of-bounds without raising PlanTier.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:42:49 +00:00
weichenandCursor d860c6430e docs(ops): close full-backlog override checklist P1–P7
CI / go-vet-and-short-test (push) Failing after 0s
CI / backup-restore-drill (push) Failing after 0s
CI / web (push) Failing after 0s
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:41:30 +00:00
weichenandCursor b015f8723f fix(docgov): keep invalid ReportJSON path when narrative flag off
Preserve prior ValidateChangeReportJSON error semantics.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:41:30 +00:00
weichenandCursor 2b3302ece4 feat(workflow-design): SWBOOT ADR, project_type migration, patch deny stub
SWBOOT-10 remains stub-only pending secondary approval.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:40:56 +00:00
weichen f1d8f49df7 merge: feature/fav-u7-publisher-impl 2026-09-16 15:40:56 +00:00
weichen 0409e399d8 merge: feature/intent-plan-cards-playwright-impl 2026-09-16 15:40:56 +00:00
weichen 975af54fd6 merge: feature/pu8-u9-u12-flags-impl 2026-09-16 15:40:56 +00:00
weichen 5596ead7fd merge: feature/pu7-pi-narrative-impl 2026-09-16 15:40:55 +00:00
weichen 7583f109a1 merge: feature/pu6-semantic-summary-impl 2026-09-16 15:40:55 +00:00
weichenandCursor 6356fb5a8c docs(ops): mark FAV U7 incremental push complete
Feature branch pushed; still not merged to dev; fav subscriber remains OFF.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:40:38 +00:00
weichenandCursor 1cd1cddf64 feat(intent-plan): independent PU8 U9–U12 flags default off
Dry-run/fail-closed adapters; does not raise plan tier.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:40:26 +00:00
weichenandCursor 47376aeb84 feat(events): FAV publisher cmd stub gated off by default
Incremental U7; degraded read still approval-gated.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:40:26 +00:00
weichenandCursor d45a1eef75 test(web): intent-plan dual-tab Playwright acceptance gate
RUN_UI_ACCEPTANCE=1 required; no tier upgrade.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:40:26 +00:00
weichenandCursor e7e981356c feat(docgov): PI_CHANGE_REPORT_NARRATIVE gate with full fallback
Default off; malformed or risk downgrade forces deterministic report.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:40:25 +00:00
weichenandCursor 8fdf50ab2a feat(chat): SEMANTIC_SUMMARY_SHADOW optional deterministic annotate
Default off; unauthorized views skipped; facts preserved.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:40:25 +00:00
weichenandCursor de65cee96c docs(test): record FAV U7 incremental go/no-go evidence
Subscriber remains OFF until separate approval; document remaining FAV
port inventory and claim feature/fav-u7-publisher.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:40:10 +00:00
weichenandCursor 5392238354 chore(compose): pin FAV_DEGRADED_READ and publisher off
Document false defaults in all envs; main hardcodes both flags to false.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:40:10 +00:00
weichenandCursor 47a173e7bb feat(events): add fav subscriber and artifact-vault CLI stubs
Keep durable fav unregistered and fail-closed; CLI only prints status and
remaining-port inventory without destructive backfill/recover commands.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:40:10 +00:00
weichenandCursor 92d7a3d117 feat(api): add FAV vault status stub with gated publisher
Expose GET /api/v1/vault/status and only wire in-process Drain when
FAV_PUBLISHER_ENABLED is explicitly true; degraded read stays off by default.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:40:10 +00:00
weichenandCursor 3478a5a05a feat(config): add FAV vault flags defaulting off
Gate FAV_DEGRADED_READ and FAV_PUBLISHER_ENABLED behind explicit opt-in,
and refuse VAULT_STATE_ROOT colliding with runtime data/{env}.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:40:10 +00:00
weichenandCursor 56f6a66f2e docs(test): archive PU7 PI narrative acceptance report
Record flag-off and full-fallback evidence; sync CURRENT, matrix, and contract.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:39:54 +00:00
weichenandCursor 51568ea080 feat(web): distinguish change-report narrative vs factual fields
Panel and view-model label server risk/lineage separately from PI narrative;
add change_report_narrative_v1 helper aligned with typed-result patterns.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:39:54 +00:00
weichenandCursor 18f2729472 feat(docrevision): add PI change-report narrative with flag-gated fallback
Introduce PI_CHANGE_REPORT_NARRATIVE (default off). When on, consume typed
narrative bound to input digest only; malformed/timeout paths fully fall back
without mixing fields or lowering server risk.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:39:54 +00:00
weichenandCursor 5493bf6108 docs(test): archive PU6 shadow report and mark matrix partial
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:37:50 +00:00
weichenandCursor d86528b45b test(chat): characterize semantic summary shadow and auth negatives
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:37:50 +00:00
weichenandCursor b7b880a316 feat(chatflow): authorize rolling summary and surface digest freshness
GenerateRollingSummary filters to authorized-visible messages; digest API
exposes shadow/freshness without enabling REPLACE.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:37:50 +00:00
weichenandCursor 209c997b22 feat(ctxmgr): add SEMANTIC_SUMMARY_SHADOW with deterministic fallback
Shadow evaluates a no-tool summarizer on caller-supplied messages; served
narrative stays deterministic and REPLACE remains unwired.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:37:50 +00:00
weichenandCursor 884e5dbf44 docs(ops): claim PU6 semantic summary shadow on chat mutex
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:37:50 +00:00
weichen b67816a898 merge: sync detailed matrix deep-test report onto test 2026-09-16 05:37:16 +00:00
weichen 56eb0ed4fe merge: sync matrix deep-test closeout docs onto test 2026-09-16 05:25:31 +00:00
weichen 8c9a12d996 release-candidate: 汇集 dev 功能至 test 分支,准备长期实测 [Tag: rc-v1.0.0-beta.2] 2026-09-16 05:19:59 +00:00
weichen dd30e061d8 merge: sync test promotion notes from local dev 2026-09-15 16:04:59 +00:00
weichen 2e826e7f58 merge: promote local dev to test for Phase 2 actual testing 2026-09-15 16:02:46 +00:00
199 changed files with 9195 additions and 581 deletions
@@ -0,0 +1,63 @@
---
title: "D7 对话数据留存与删除口径(草案)"
status: proposed
created: 2026-09-17
updated: 2026-09-17
compliance: pending-compliance-signoff
owner: Cline
related:
- ../remediation/2026-09-16-partial-deferred-completion-plan.md
- ../ops/short-term/2026-09-16-partial-deferred-completion.md
- ../status/FEATURE-MATRIX.md
---
# ADR:D7 对话数据留存与删除口径
## 状态
**提议 / 工程草案**(2026-09-17)。数字与删除口径标 `pending-compliance-signoff`:合规签字或改数前,W7 仅允许数据分类盘点与现状审计,不得按未签字数字执行物理删除或备份清除。接受后状态改为 `accepted`。
## 背景
FEATURE-MATRIX「对话数据治理(D7)」为 `deferred`。收口计划 W7 要求:数据分类盘点 → 留存/删除口径落 ADR → 库/备份/日志控制 → 敏感字段加密边界。工程不能单方面定合规数字,但必须提供可审草案,避免无限期停在 deferred。Track E / R13 / R18 / R22 已对日志脱敏与销毁门禁有硬约束,本 ADR 将其固化为 D7 口径。
## 决策(建议默认;待合规确认)
### 1. 数据分类与留存
| 数据类 | 留存 | 说明 |
|--------|------|------|
| 会话正文(chat sessions/messages) | 热库 **365 天**(可配置) | 超期 soft-delete → 观察窗 → 物理清理 |
| 派生文档 / 私密文档 | 与聊天**独立周期**;回收站 **30 天**后物理清理 | 删除 UI 须说明影响范围(只删聊天 / 只删文档 / 两者) |
| 审计元数据(导出/治理审计) | **180 天** | 不可被普通用户删除覆盖 |
| Agent trace / workspace 非终态 | 任务结束后 **30 天**;nightly 仅合成数据 | 禁止当长期事实源 |
| 日志 / dead-letter / reconciliation | 不按正文留存;**只存 ID、digest、typed error code、allowlist 摘要** | Track E 红线 |
| FAV 终态制品 | `retention_class` + legal hold + delete ledger | 与聊天口径解耦 |
### 2. 删除路径
1. **用户删除**:soft-delete / tombstone → 观察窗 → 物理清理。
2. **备份清除**:须二次批准 + 精确 delete manifest;对齐销毁门禁 R22(完整备份恢复演练、migration corpus、FAV coverage、manifest、用户批准)。
3. **删除界面**:必须说明聊天源消息与派生文档的独立保留周期及本次操作影响范围。
### 3. 加密边界(首期)
- 首期范围:敏感字段**盘点** + 传输与备份访问控制。
- **不默认**上字段级加密;选型待合规确认与威胁模型后再立实现任务。
### 4. 违规升级
盘点确认当前基线违反已确认的安全或合规要求 → **立即**写入 [`gap-matrix.md`](../remediation/gap-matrix.md),不得继续当普通 backlog;本行 `done` 让位于整改。
## 后果
- W7 可按本草案启动盘点;物理删除与备份清除在 `pending-compliance-signoff` 解除前禁止按建议数字自动执行。
- 2026-09-17 只读盘点:[../audit/2026-09-17-d7-data-inventory.md](../audit/2026-09-17-d7-data-inventory.md)(未删数据、未升矩阵 done、未写 gap-matrix blocker)。
- 日志/DLQ/reconciliation 实现与审计须持续满足 Track E ID-only 红线。
- 合规改数后:更新本 ADR 数字表、`updated` 日期,并将 `compliance` 改为 `signed` / `accepted`;再开 W7 整改实现。
## 相关链接
- 收口计划 §7.1:[../remediation/2026-09-16-partial-deferred-completion-plan.md](../remediation/2026-09-16-partial-deferred-completion-plan.md)
- FEATURE-MATRIX D7 行:[../status/FEATURE-MATRIX.md](../status/FEATURE-MATRIX.md)
- Track E Phase 2:[../remediation/2026-09-15-module-decoupling-ipc-phase2-remediation-plan.md](../remediation/2026-09-15-module-decoupling-ipc-phase2-remediation-plan.md)
@@ -0,0 +1,55 @@
---
title: "PU6 语义摘要 shadow(SEMANTIC_SUMMARY_SHADOW)"
status: done
created: 2026-09-16
updated: 2026-09-16
owner: Cursor-Auto
branch: feature/pu6-semantic-summary
worktree: ".worktrees/feature-pu6-semantic-summary"
mutex: chat
---
# PU6 语义摘要 shadow
## 目标
在授权可见消息集合上落地 `SEMANTIC_SUMMARY_SHADOW`(默认 off):shadow 语义摘要、失败回 deterministic 并标注 freshness;不启用 REPLACE。
## 范围
- `internal/ctxmgr/summarizer.go` + semantic shadow
- `internal/app/chatflow/` 授权过滤入口
- `internal/server/chat_digest_api.go` 出站 freshness/shadow 字段
- 单元/表征测试;测试报告
## 非目标
- 不启用 `SEMANTIC_SUMMARY_REPLACE`
- 不合入 `dev`
- 不改 plan 文件
## 步骤
1. [x] 从 `dev` 开分支 / worktree 并认领
2. [x] flags + 无工具语义摘要器 + rolling summary shadow
3. [x] chatflow 授权路径 + digest API
4. [x] 测试与报告
5. [x] 渐进提交并 push
## 验收标准
- [x] flag off 行为与基线一致
- [x] shadow on:仅 authorized 消息;失败保留 deterministic + freshness
- [x] injection 不能提权;REPLACE 路径未接线
- [x] 测试报告归档
## 相关链接
- Contract: `../long-term/2026-09-16-pu6-semantic-summary-contract.md`
- Test report: `../../test-reports/2026-09-16-pu6-semantic-summary-test-report.md`
## 证据 / 备注
- 分支:`feature/pu6-semantic-summary`(worktree)
- 测试:`go test -short ./internal/ctxmgr/ ./internal/app/chatflow/ ./internal/server/` PASS
@@ -0,0 +1,55 @@
---
title: "修复 KB 宿主机错误口令与静默离线降级"
status: done
created: 2026-09-17
updated: 2026-09-17
owner: Cursor
branch: fix/kb-host-auth-layered-load
worktree: "-"
mutex: infra
---
# 修复 KB 宿主机错误口令与静默离线降级
## 目标
消除 `config.Load("")` 只读 `configs/.env.dev`、忽略根 `.env` 的 `KB_DB_PASSWORD` 导致的错误默认口令与静默离线;E2E/nightly 默认 fail-closed。
## 范围
- `internal/config` 分层加载 + 宿主机 DNS 归一化 + 空默认口令
- `internal/kb` 脱敏日志、`Online()`、`KB_REQUIRE_ONLINE` / `KB_ALLOW_OFFLINE`
- `/health` 增加 `kb_ready`
- PI E2E helper 与 `scripts/run-nightly-real-pi.sh` 预检
- env 模板与验收报告
## 非目标
- 不改 KB 数据内容 / 法规迁移
- 不把真实口令写入 git 跟踪的 `configs/.env.*`
- 不把容器内 DNS 改成 localhost
## 步骤
1. [x] 分层 Load + 默认口令清空
2. [x] NormalizeKBHostForRuntime
3. [x] kb 客户端脱敏 + RequireOnline(EnsureOnline;不 Fatalf)
4. [x] health `kb_ready` + E2E/nightly 门禁
5. [x] 合入 `dev` 冒烟(rebuild + `/health` `kb_ready=true`)
## 验收标准
- [x] `config.Load("")` 分层合并后口令来自根 `.env`(单测临时文件 + live 布尔校验)
- [x] 宿主机 `shuimu-kb-shared` → `127.0.0.1`;容器内保留 compose DNS
- [x] 错口令/空口令离线且日志无明文密码;`KB_ALLOW_OFFLINE=1` 可降级
- [x] 合 `dev` 后 short 测 PASS;dev rebuild 后 `kb_ready=true`,日志 `online=true dsn=...:***@shuimu-kb-shared...`,无 `shared_kb_secret_pass`
## 相关链接
- Test report: `.doc/test-reports/2026-09-17-kb-host-auth-layered-load-test-report.md`
- Plan: 修复 KB 连接降级
## 证据 / 备注
根因:`Load` 优先单文件 `configs/.env.dev`(故意省略 `KB_DB_PASSWORD`),保留错误默认 `shared_kb_secret_pass`;Compose 本已分层,宿主机 `go test` 未对齐。
合入后容器日志:`[kb] online=true dsn=postgres://regkb:***@shuimu-kb-shared:5432/regulations?sslmode=disable`;health `kb_ready=true`。
@@ -0,0 +1,24 @@
---
title: "FAV U7 incremental — remaining port inventory"
status: open
created: 2026-09-16
updated: 2026-09-17
---
# FAV U7 增量:未移植清单
相对 `feature/final-artifact-vault`,本切片 **未** 整支 merge,且因 `internal/artifactvault` 与当前 `dev`(dataset Candidate backfill)大面积 DIFF,下列能力仍待后续手工移植 + 审计:
| 项 | 旁支路径 | 阻塞 |
|----|----------|------|
| EnumerateTerminals / LoadExclusions | `internal/artifactvault/enumerate.go` | 依赖 TerminalRow;与现 `Enumerate(Candidate)` 并存需设计 |
| TerminalRow Backfill | FAV `backfill.go` | 现 backfill 已改为 dataset 路径 |
| 完整 CLI | `cmd/artifact-vault` 全命令 | 本切片仅 status stub |
| ingest hooks | `internal/server/vault.go` OnFinalArtifact* | 会写 staging;需与 publisher 门闩同批审批 |
| schema JSON | `*.schema.json` | 可选文档资产 |
| durable Register(fav) | `cmd/events` | events 硬门 + 单独 cutover 审批 |
| live staging → artifact → publication | publisher Drain / ingest hooks | 每级观察窗 ≥7 天;本轮 **未** 放量 |
**W6 已移植(仍非 live)**:`internal/app/fav.EventConsumer.ObserveShadow` 只计算 intended outcome(`WouldStage`/`WouldPublish` 恒 false);`FAV_DEGRADED_READ` 为 true 时 shadow 直接拒绝;`HandleLease` 与 `Registry.Register(fav)` 仍 fail-closed。
**红线保持**:`FAV_DEGRADED_READ=false`;fav consumer mode=off;禁止整支 merge。
@@ -0,0 +1,62 @@
---
title: "D7 对话数据分类盘点"
status: done
created: 2026-09-17
updated: 2026-09-17
severity: medium
---
# D7 对话数据分类盘点
## 现象
FEATURE-MATRIX「对话数据治理(D7)」为 `deferred`;ADR 数字 `pending-compliance-signoff`。W7 只盘点当前基线:会话正文、派生副本、共享 KB、日志、备份、事件敏感字段。本轮**未**按草案 365/180/30 天执行物理删除或备份清除。
## 根因分析
当前基线是「热库明文 + 软删除列预留 + 事件 ID 化」,不是已签字的留存作业。缺口是**尚未实现**的治理能力,不是已确认合规数字被违反。
## 严重度
`medium`(实现缺口;**不**升 gap-matrix blocker)
## 分类盘点
| 数据类 | 位置 | 形态 | 现状 |
|--------|------|------|------|
| 会话正文 | `chat_sessions` / `chat_messages.content` | 热库明文 TEXT;`deleted_at` 列存在 | dev 619 sessions / 3291 messages;`deleted_at` 全 NULL;Go 无 `SET deleted_at`、无 `DELETE FROM chat_*` |
| 派生摘要 | `chat_daily_digests` | headline / key_points JSON | 0 行 |
| 向量记忆 | `context_memory_chunks` | `content` TEXT + embedding | 102 行:`project_doc` 71、`chat_history` 24、`approved_case` 7。聊天派生副本会随正文留存 |
| 私密文档 | `freeform_documents` | `is_deleted` / `deleted_at` + version markdown | 122 份,其中 113 已软删(聊天消息无对等写路径) |
| 共享 KB | `shuimu-kb-shared` / `regulations` | 法规 chunks,无 chat 表 | `reg_documents` 2907、`reg_chunks` 312919;与对话库隔离 |
| 事件 envelope | `event_envelopes.payload` BYTEA | JSON 字段 | 4 条;keys 均为 ID/digest/`summary_ref`,`has_content=false` |
| 事件 DLQ / attempts | `event_dead_letters` / `event_delivery_attempts` | ID + reason / error_code | DLQ 0;attempts 4;无正文列 |
| 日志 | Docker `json-file` 无 max-size | 应用 slog | 抽检 rebuild 日志:DSN 已 `***`,无 chat content |
| 备份 | `scripts/backup-system-db.sh` `pg_dump -Fc` | 整库含 chat 明文 | 宿主机无 `./backups` 目录;CI 有 backup-restore-drill |
| Agent workspace | `data/dev/workspaces` 150M | 非终态工作区 | 无 30 天清理作业(ADR 草案待签字) |
| FAV | `final_artifacts` | 1 行;consumer mode=off | 与聊天口径解耦;W6 shadow 不写 |
事件 payload 比 `StaticContracts` allowlist **多出** `workspace_id` / `manifest_sha256` 等 ID 字段,但仍无聊天正文。属契约收紧 follow-up,不是 Track E 正文泄漏。
## 违规判定
对照已签字约束(Track E ID-only 日志/DLQ、R13 出站最小化、ADR 明确「签字前禁止按数字删除」):
- **未发现**已确认安全/合规基线被当前实现违反。
- **因此不写** `gap-matrix` blocker。
- 缺 365 天热库清理、缺聊天 soft-delete 写路径、缺字段级加密,均属 ADR 签字后的 W7 整改实现,不得在本轮当「已违规」执行删除。
## 关联整改
- ADR 草案: [../adr/2026-09-17-d7-chat-data-retention.md](../adr/2026-09-17-d7-chat-data-retention.md)
- 签字后整改:soft-delete 写路径 → 观察窗 → 物理清理;同步清 `context_memory_chunks` 的 `chat_history`;备份二次批准 + delete manifest(R22)
## 证据
`.doc/test-reports/assets/2026-09-17-w7-d7-inventory/`(counts / columns / event keys / KB / logs / health)。查询只读,未 `DELETE`/`UPDATE`。
## 开放问题
- 合规何时签字或改数(365/180/30)?
- 聊天 UI 删除是否要与 freeform 回收站对齐?
- `taskrun.completed` payload 额外 ID 字段是否收紧 allowlist?
+23 -11
View File
@@ -1,20 +1,31 @@
# 当前焦点
**更新**: 2026-09-16
**production_ready**: yes(门禁 B1–B4 已签;dev/test/main `schema_version=47`。不把 fallback change report 写成完整 PI)
**更新**: 2026-09-17
**production_ready**: yes(门禁 B1–B4 已签;dev `schema_version=48`;test/main `schema_version=47`;goose 00048 bootstrap-fields 已在 dev 可迁移。不把 fallback change report 写成完整 PI)
## 焦点
1. **全量 backlog 覆盖 no-go**:P0–P7 总控实施中([short-term](./short-term/2026-09-16-full-backlog-override.md))
2. **运维**:Gitea nightly runner 已通;待 P1 对齐 `DATA_DIR=dev` 后冲 green receipt
3. **红线**:禁止整支 merge FAV;不默认升 `MULTI_INTENT_PLAN_TIER=full`;项目 143 只读
1. **partial/deferred 全量收口**:W1–W4 **done**;W5a **done**(矩阵自举行仍 partial);W6 **shadow done**(矩阵 FAV 仍 partial);W7 **盘点 done**(矩阵 D7 仍 deferred)。晋升 `test`:`rc-v1.0.0-beta.3`
2. **运维**:nightly `DATA_DIR=dev` 已对齐;KB 宿主机分层加载 / fail-closed **done**(`fix/kb-host-auth-layered-load`)
3. **红线**:禁止整支 merge FAV;不默认升 `MULTI_INTENT_PLAN_TIER=full`(升 `confirm` 须 W4 闭环后独立授权);`SEMANTIC_SUMMARY_REPLACE` 不随 W2 开启;FAV live 顺序 staging→artifact→publication、每级观察窗证据驱动(下限 ≥7 天)、`FAV_DEGRADED_READ=false`;flag 默认 off;项目 143 只读
## 并行认领
| owner | task | branch | worktree | mutex | status |
|-------|------|--------|----------|-------|--------|
| Cursor-Auto | 2026-09-16-software-project-bootstrap | feature/software-project-bootstrap | .worktrees/feature-software-project-bootstrap | workflow-design | done |
| Cursor | 2026-09-16-full-backlog-override | docs/override-nogo-full-backlog | - | architecture-docs | in_progress |
| Cursor | 2026-09-17-leftover-hygiene | chore/leftover-hygiene-2026-09-17 | - | ops | done |
| Cursor | 2026-09-17-w2-semantic-summary-shadow | feature/w2-semantic-summary-shadow-live | - | chat | done |
| Cursor | 2026-09-17-w3-pi-change-report-narrative | feature/w3-pi-change-report-narrative-live | - | docgov | done |
| Cursor | 2026-09-17-w4-multi-intent-u9-u12 | feature/w4-u9-segment-live | - | intent-plan | done |
| Cursor | 2026-09-17-w5a-software-bootstrap-ui | feature/w5a-software-bootstrap-ui-pi | - | workflow-design | done |
| Cursor | 2026-09-17-w6-fav-subscriber-shadow | feature/w6-fav-subscriber-shadow | - | events | done |
| Cursor | 2026-09-17-w7-d7-inventory | feature/w7-d7-data-inventory | - | chat | done |
| Cursor | 2026-09-17-promote-dev-to-test | feature/promote-dev-to-test-2026-09-17 | - | infra | in_progress |
| Cursor | 2026-09-17-kb-host-auth-fix | fix/kb-host-auth-layered-load | - | infra | done |
| Cursor | 2026-09-17-w1-ci-e2e-green-nightly | feature/w1-ci-e2e-green-nightly | - | ci | done |
| Cline | 2026-09-16-partial-deferred-completion | docs/partial-deferred-completion-plan | - | architecture-docs | in_progress |
| Cursor | 2026-09-16-intent-plan-playwright-dual-tab | feature/intent-plan-cards-playwright | .worktrees/feature-intent-plan-cards-playwright | web | done |
| Cursor | 2026-09-16-full-backlog-override | docs/override-nogo-full-backlog | - | architecture-docs | done |
| Cursor | 2026-09-16-gitea-nightly-docker-datadir | fix/gitea-nightly-docker-datadir | - | ci | done |
| Cursor | 2026-09-16-gitea-nightly-host-tools | fix/gitea-nightly-host-tools | - | ci | done |
| Cursor | 2026-09-16-wave-leftovers | fix/wave-leftovers-n7-playwright-dod | - | ci | done |
@@ -102,13 +113,13 @@
> workflow-plan 409 与治理鉴权 G1–G5 已收口(见 [test-report](../test-reports/2026-09-14-governance-action-level-authz-test-report.md))。禁止终止或改写项目 143。
> `document-reliability-pilot` U11–U12 已合入 `dev@bf59cce` 并 rebuild。`CHAT-INTENT-STATE` 双标签 busy 已 PASS(项目 6275)。禁止 worktree 内 `env-service`。项目 143 只读,禁止终止。
> 2026-09-15 旁支清理:[报告](../test-reports/2026-09-15-leftover-branch-cleanup-test-report.md)。已合入本地旁支 31 条已 `git branch -d`;7 个对应 worktree 已拆。extra worktree 仅余 `.worktrees/fix-dev-runtime-data-root-guard`(目录名是 guard,检出的是 `feature/final-artifact-vault`)。**故意不合入、不删**:`feature/final-artifact-vault`、`feature/remove-herdr-agent-settings`、`fix/project143-controlled-content-404-diagnosis`、`fix/dev-runtime-data-root-guard`、`dev-old-linear`。不删 `origin/*`。不整支 merge FAV;不启用 `FAV_DEGRADED_READ`。
> 2026-09-17 leftover 二次收口:[报告](../test-reports/2026-09-17-leftover-hygiene-test-report.md)。已合入 leftover worktree/旁支再拆一轮;`feature/software-project-bootstrap` L1 已在 `dev`(残留关闭 commit 已丢弃)。`fix/clean-test-env-baseline` **不 merge**(前端 demo 清理已放弃;仅保留已挑拣的 `SEED_DEMO_USERS=false`)。extra worktree 仅余 `.worktrees/fix-dev-runtime-data-root-guard`(目录名是 guard,检出的是 `feature/final-artifact-vault`)。**故意不合入、不删**:`feature/final-artifact-vault`、`feature/remove-herdr-agent-settings`、`fix/project143-controlled-content-404-diagnosis`、`fix/dev-runtime-data-root-guard`、`dev-old-linear`。不删 `origin/*`。不整支 merge FAV;不启用 `FAV_DEGRADED_READ`。
## 集成槽位
| holder | phase | since | scope | queue |
|--------|-------|-------|-------|-------|
| - | idle | - | - | - |
| Cursor | merging | 2026-09-17 | promote dev → test rc-v1.0.0-beta.3 | - |
**phase**: `idle` | `merging` | `smoke` | `e2e`
@@ -118,7 +129,7 @@
| 环境 | 端口 | schema | 状态 |
|------|------|--------|------|
| dev | 8080 | **47** | healthy(`pi-agent` typed-result-v1;events worker `:8088`;notify/advance/projection live、fav off;health+ready PASS;demo 6001–6010 retired) |
| dev | 8080 | **48** | healthy(`pi-agent` typed-result-v1;events worker `:8088`;notify/advance/projection live、fav off;health+ready PASS;demo 6001–6010 retired) |
| test | 8081 | **47** | healthy(`rc-v1.0.0-beta.2`;pi-agent `:18866`;events `:8089`;notify/advance/projection live、fav off;health+ready PASS;矩阵深度测试 live 项目 3 PASS) |
| main | 8000 | **47** | healthy(app + events + runner + DB;与 dev/test 对齐) |
@@ -131,6 +142,7 @@
| 发布缺口 | [gap-matrix](../remediation/gap-matrix.md)(`production_ready=yes`;Wave 0 IAM 只读未发现旁路) |
| 连续性审计/计划 | [audit](../audit/2026-09-16-feature-matrix-production-readiness-audit.md) · [remediation](../remediation/2026-09-16-feature-matrix-production-readiness-plan.md) · [Wave 0 任务](./short-term/2026-09-16-feature-matrix-wave0-calibration.md) |
| 测试报告 | [test-reports/](../test-reports/) |
| D7 盘点(W7) | [audit](../audit/2026-09-17-d7-data-inventory.md) · [报告](../test-reports/2026-09-17-w7-d7-inventory-test-report.md) · ADR 仍 `pending-compliance-signoff` |
| Agent 手册 | [AGENTS.md](../../AGENTS.md) |
| 意图双标签 busy 交接 | [./handoffs/2026-09-15-conversation-intent-dual-tab.md](./handoffs/2026-09-15-conversation-intent-dual-tab.md) |
| 受控正文 hash 漂移 W1–W6 | [../ops/handoffs/2026-09-14-controlled-content-canonical-hash.md](../ops/handoffs/2026-09-14-controlled-content-canonical-hash.md) |
@@ -160,7 +172,7 @@
| 文档可靠性 M5/M6 U11–U12 | [../test-reports/2026-09-15-app-composition-u11-u12-test-report.md](../test-reports/2026-09-15-app-composition-u11-u12-test-report.md) |
| Track E E2 闭包守卫 | [../test-reports/2026-09-15-event-e2-hook-guard-test-report.md](../test-reports/2026-09-15-event-e2-hook-guard-test-report.md) |
| Track E 复盘 | [./research/2026-09-15-track-e-retrospective.md](./research/2026-09-15-track-e-retrospective.md) |
| 旁支清点收口 | [../test-reports/2026-09-15-leftover-branch-cleanup-test-report.md](../test-reports/2026-09-15-leftover-branch-cleanup-test-report.md) |
| 旁支清点收口 | [../test-reports/2026-09-15-leftover-branch-cleanup-test-report.md](../test-reports/2026-09-15-leftover-branch-cleanup-test-report.md) · [二次收口](../test-reports/2026-09-17-leftover-hygiene-test-report.md) |
| SSE/幂等审计 | [../audit/2026-09-13-document-revision-sse-idempotency.md](../audit/2026-09-13-document-revision-sse-idempotency.md) |
| 质量门禁自污染审计 | [../audit/2026-09-13-document-revision-quality-gate-self-pollution.md](../audit/2026-09-13-document-revision-quality-gate-self-pollution.md) |
| 当前文档路由审计 | [../audit/2026-09-13-document-revision-active-doc-routing.md](../audit/2026-09-13-document-revision-active-doc-routing.md) |
@@ -2,7 +2,7 @@
title: "纯软件项目自举工作流实施"
status: in_progress
created: 2026-09-14
updated: 2026-09-16
updated: 2026-09-17
---
# 纯软件项目自举工作流实施
@@ -22,18 +22,18 @@ updated: 2026-09-16
- 真实 PI 和 Ubuntu 无头浏览器黄金项目验收通过;
- 未实现受控代码执行前,系统不会直接修改项目仓库。
## 实施进度(2026-09-16)
## 实施进度(2026-09-17)
| Epic | 状态 | 说明 |
|------|------|------|
| SWBOOT-00 | done(契约) | ADR `.doc/adr/2026-09-16-software-project-bootstrap-keys.md` |
| SWBOOT-01 | done(迁移) | goose `00048` additive;活验待集成槽 |
| SWBOOT-02..04 | done(L1) | manifests + catalog 五 key;医疗三门禁保留 |
| SWBOOT-05..08 | partial | 后端 catalog/creation-preview/create 字段;七步 UI / 对话路由未做 |
| SWBOOT-09 | partial | L1 单测报告已出;真实 PI/UI NOT RUN |
| SWBOOT-10 | stub only | allowlist + fail-closed;无真实 patch/merge |
| SWBOOT-01 | done(迁移) | goose `00048` additive;已合 `dev` |
| SWBOOT-02..04 | done(L1) | manifests + catalog 五 key;医疗三门禁保留;已合 `dev`(`f0029df`) |
| SWBOOT-05..08 | done(W5a) | catalog 驱动创建向导;软件不克隆医疗 7 模板;solo 未独立评审标注 |
| SWBOOT-09 | partial | docs_only 真实 PI 已出;无头浏览器全向导仍 NOT RUN |
| SWBOOT-10 | stub only | allowlist + fail-closed;真 patch/merge 归 W5b,本轮不实施 |
分支:`feature/software-project-bootstrap`(**未合 dev**)。
L1(SWBOOT-00…09 契约/迁移/目录钩子 + SWBOOT-10 stub)**已合入 `dev`**。后续由 [partial/deferred W5](../short-term/2026-09-16-partial-deferred-completion.md) 承接:W5a = UI + `docs_only` 真实 PI;W5b = 受控执行器(独立安全评审)。
## 实施拆分
@@ -59,9 +59,9 @@ updated: 2026-09-16
- 文档版本运行时 Round20 能力作为文档链基线;
- 用户确认首期执行模式及 solo/collaborative 策略。
## 暂不启动原因
## 剩余工作
本轮用户要求先梳理和制定详细方案;业务代码、迁移、模板和智能体配置尚未授权进入实施。本任务保持 `planned`,启动时须从 `dev` 新建独立 feature 分支,并在 CURRENT 认领 `workflow-design`/相应拆分 mutex。
L1 已合 `dev`。W5a 从 `dev` 开 `feature/w5a-software-bootstrap-ui-pi`(mutex `workflow-design`)。W5b 受控执行器未启动,SWBOOT-10 保持 fail-closed stub。
## 相关链接
@@ -1,9 +1,9 @@
---
title: "Playwright intent-plan 双标签 — 长期 gated"
status: planned
status: done
created: 2026-09-16
updated: 2026-09-16
owner: TBD
owner: Cursor-Auto
branch: feature/intent-plan-cards-playwright
mutex: web
---
@@ -12,9 +12,9 @@ mutex: web
## 现状
- `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 双标签已绿。
- short-term / 报告已关闭:见 [../short-term/2026-09-16-intent-plan-playwright-dual-tab.md](../short-term/2026-09-16-intent-plan-playwright-dual-tab.md) 与 [../../test-reports/2026-09-16-intent-plan-playwright-dual-tab-test-report.md](../../test-reports/2026-09-16-intent-plan-playwright-dual-tab-test-report.md)
- `RUN_UI_ACCEPTANCE=1` 真浏览器 PASS(Docker Playwright);默认 skip
- **不升** `MULTI_INTENT_PLAN_TIER`
## 关闭条件
@@ -1,32 +1,32 @@
---
title: "PU6 语义摘要 D3 — 获批后任务契约"
status: planned
status: done
created: 2026-09-16
updated: 2026-09-16
owner: TBD
branch: feature/pu6-semantic-summary
updated: 2026-09-17
owner: Cursor
branch: feature/w2-semantic-summary-shadow-live
mutex: chat
go_no_go: go
---
# PU6 语义摘要 D3 — 获批后任务契约
**go/no-go**:no-go(见 `.doc/ops/research/2026-09-16-wave3-pu6-pu8-go-no-go.md`)。已授权 GO;按 short-term 总控实施(默认 flag off)。
**go/no-go**:GO。脚手架 + W2 live 已合 `dev`。`SEMANTIC_SUMMARY_SHADOW` 默认 off;开 flag 时组合根注入产品 PI no-tool summarizer。**不启用** `SEMANTIC_SUMMARY_REPLACE`。
## 目标(获批后)
## 目标
在授权可见集合上 shadow 语义摘要,可解释 fallback;通过后方可考虑替换 deterministic。
在授权可见集合上 shadow 语义摘要,可解释 fallback;REPLACE 为后置独立授权任务。
## 预注册门
- flag:`SEMANTIC_SUMMARY_SHADOW` → 可选 `SEMANTIC_SUMMARY_REPLACE`
- flag:`SEMANTIC_SUMMARY_SHADOW` → 可选 `SEMANTIC_SUMMARY_REPLACE`(本轮不启用)
- 输入:authorized view only;无工具权限摘要器;R13 出站门
- 失败:保留旧摘要/deterministic;标注 freshness
- 负例:撤权消息不入摘要;injection 不能改权限
## 路径提示
`internal/ctxmgr/summarizer.go`、`internal/app/chatflow/`、`internal/server/chat_digest_api.go`、web 摘要消费组件
`internal/ctxmgr/summarizer.go`、`internal/ctxmgr/semantic_summary.go`、`internal/app/chatflow/`、`internal/server/chat_digest_api.go`、`internal/agent/piagent.go`
## 回滚
@@ -1,9 +1,9 @@
---
title: "PU7 PI change-report 叙事 — 获批后任务契约"
status: planned
status: done
created: 2026-09-16
updated: 2026-09-16
owner: TBD
updated: 2026-09-17
owner: Cursor-Auto
branch: feature/pu7-pi-narrative
mutex: docgov
go_no_go: go
@@ -11,22 +11,27 @@ go_no_go: go
# PU7 PI change-report 叙事 — 获批后任务契约
**go/no-go**:no-go。未获批禁止实现。
**go/no-go**:GO(用户覆盖授权,见 Wave3 research)。脚手架已合 `dev`;W3 live(产品 PI + digest 绑定)已接线,默认 flag 仍 off。
## 目标(获批后)
## 目标
只读消费 immutable diff+lineage+risk floor 的 PI 叙事;任意 schema/超时/注入 → 全量 fallback。
## 预注册门
- flag:`PI_CHANGE_REPORT_NARRATIVE`
- flag:`PI_CHANGE_REPORT_NARRATIVE`(默认 off)
- 禁止覆盖服务端风险/审批结论
- typed schema + 文档版本 + input digest 绑定
- typed schema + input digest 绑定(`change_report_narrative_v1`)
- UI 明确区分 narrative vs 事实字段
## 路径提示
## 路径
`internal/docrevision/`、`deploy/pi-agent/` typed result、`ChangeReportPanel.tsx`
- `internal/docrevision/flags.go` / `narrative.go` / `service.go`
- `deploy/pi-agent/change-report-narrative-v1.mjs`
- `web/.../ChangeReportPanel.tsx` / `changeReportView.ts`
- 报告:[../../test-reports/2026-09-16-pu7-pi-narrative-test-report.md](../../test-reports/2026-09-16-pu7-pi-narrative-test-report.md)
- W3 live:[../../test-reports/2026-09-17-w3-pi-change-report-narrative-test-report.md](../../test-reports/2026-09-17-w3-pi-change-report-narrative-test-report.md)
- short-term:[../short-term/2026-09-17-w3-pi-change-report-narrative.md](../short-term/2026-09-17-w3-pi-change-report-narrative.md)
## 回滚
@@ -1,10 +1,10 @@
---
title: "PU8-U10 mutate — 获批后任务契约"
status: planned
status: in_progress
created: 2026-09-16
updated: 2026-09-16
owner: TBD
branch: feature/pu8-u10-mutate
updated: 2026-09-17
owner: Cursor
branch: feature/w4-u9-segment-live
mutex: intent-plan
go_no_go: go
flag: MULTI_INTENT_U10_MUTATE
@@ -12,7 +12,7 @@ flag: MULTI_INTENT_U10_MUTATE
# PU8-U10 mutate
**go/no-go**:no-go。独立 flag;高风险动作绑定 expected revision + 显式确认 + 执行前再授权;不依赖 U9。
**go/no-go**:GO(覆盖授权)。独立 flag 脚手架已合 `dev`。W4:dry-run→confirm 幂等 receipt 证据;mutex `intent-plan`。不升 `MULTI_INTENT_PLAN_TIER`。报告:[../../test-reports/2026-09-17-w4-u10-mutate-test-report.md](../../test-reports/2026-09-17-w4-u10-mutate-test-report.md)
## 负例
@@ -1,15 +1,15 @@
---
title: "PU8-U11 docgov action — 获批后任务契约"
status: planned
status: in_progress
created: 2026-09-16
updated: 2026-09-16
owner: TBD
branch: feature/pu8-u11-docgov
mutex: docgov
updated: 2026-09-17
owner: Cursor
branch: feature/w4-u9-segment-live
mutex: intent-plan
go_no_go: go
flag: MULTI_INTENT_U11_DOCGOV
---
# PU8-U11 docgov
**go/no-go**:no-go。独立 flag/mutex;按钮与自然语言同一 owner command;项目 143 只读纪律不变。
**go/no-go**:GO(覆盖授权)。独立 flag 脚手架已合 `dev`。W4:项目 143 只读 fail-closed。mutex `intent-plan`。报告:[../../test-reports/2026-09-17-w4-u11-docgov-test-report.md](../../test-reports/2026-09-17-w4-u11-docgov-test-report.md)
@@ -1,15 +1,15 @@
---
title: "PU8-U12 workflow/run-control — 获批后任务契约"
status: planned
status: in_progress
created: 2026-09-16
updated: 2026-09-16
owner: TBD
branch: feature/pu8-u12-workflow-run-control
mutex: workflow
updated: 2026-09-17
owner: Cursor
branch: feature/w4-u9-segment-live
mutex: intent-plan
go_no_go: go
flag: MULTI_INTENT_U12_RUN_CONTROL
---
# PU8-U12 workflow/run-control
**go/no-go**:no-go。独立 flag;双标签确认/取消仅一成功;投影停机时权威 GET 仍正确;回滚后计划可读/取消/finalize。
**go/no-go**:GO(覆盖授权)。独立 flag 脚手架已合 `dev`。W4:独立 flag dry-run 证据。不升 `MULTI_INTENT_PLAN_TIER`。报告:[../../test-reports/2026-09-17-w4-u12-run-control-test-report.md](../../test-reports/2026-09-17-w4-u12-run-control-test-report.md)
@@ -1,10 +1,10 @@
---
title: "PU8-U9 segment proposal — 获批后任务契约"
status: planned
status: in_progress
created: 2026-09-16
updated: 2026-09-16
owner: TBD
branch: feature/pu8-u9-segment-proposal
updated: 2026-09-17
owner: Cursor
branch: feature/w4-u9-segment-live
mutex: intent-plan
go_no_go: go
flag: MULTI_INTENT_U9_SEGMENT
@@ -12,7 +12,7 @@ flag: MULTI_INTENT_U9_SEGMENT
# PU8-U9 segment proposal
**go/no-go**:no-go。规则无法判断时才出 segment proposal;超时/越界 fail closed;非 U10–U12 默认前置。
**go/no-go**:GO(覆盖授权)。flag 脚手架已合 `dev`。W4:真实 LLM proposer;规则能判断则不出 proposal。不升 `MULTI_INTENT_PLAN_TIER`。报告:[../../test-reports/2026-09-17-w4-u9-segment-test-report.md](../../test-reports/2026-09-17-w4-u9-segment-test-report.md)
## 安全 stop gate
@@ -1,11 +1,11 @@
---
title: "FAV U7 增量合入(非整支 merge)"
status: planned
status: done
created: 2026-09-16
updated: 2026-09-16
owner: Cursor
branch: feature/fav-u7-publisher
worktree: "-"
worktree: ".worktrees/feature-fav-u7-publisher"
mutex: events
---
@@ -15,13 +15,40 @@ mutex: events
从 `feature/final-artifact-vault` **手工移植**经审计切片到 `dev`;consumer 默认 off;禁止整支 merge;禁止默认开 `FAV_DEGRADED_READ`。
## 步骤
## 范围
1. [ ] cherry-pick / 移植 cmd/artifact-vault + vault HTTP + publisher 订阅
2. [ ] 隔离库负例 + 默认 off 冒烟
3. [ ] 独立 go/no-go 报告
- 配置门闩(`FAV_DEGRADED_READ` / `FAV_PUBLISHER_ENABLED` 默认 false)
- HTTP `GET /api/v1/vault/status` + gated in-process publisher stub
- `internal/app/fav` durable subscriber stub(不注册到 cmd/events)
- `cmd/artifact-vault` status stub(完整 CLI 未移植)
## 非目标
- 整支 merge `feature/final-artifact-vault`
- 未审计启用 degraded read
- 未审计启用 degraded read / fav live / publisher production Drain
- 移植 enumerate / TerminalRow Backfill / OnFinalArtifact hooks
- 合入 `dev`(本切片仅 feature 推送)
## 步骤
1. [x] 审计 FAV vs `dev` artifactvault 冲突(多数 DIFF → 改 stub)
2. [x] 落地 stub + 默认 off 测试
3. [x] go/no-go 报告
4. [x] 推送 `feature/fav-u7-publisher`(不合 dev)
## 验收标准
- [x] fav consumer / Register 仍 fail-closed
- [x] `FAV_DEGRADED_READ` 默认 false
- [x] 测试报告含 NO-GO:subscriber 保持 OFF 直至单独审批
- [x] 已 push 远端 feature 分支
## 相关链接
- Test report: [.doc/test-reports/2026-09-16-fav-u7-incremental-test-report.md](../../test-reports/2026-09-16-fav-u7-incremental-test-report.md)
- Assets: [.doc/test-reports/assets/2026-09-16-fav-u7-incremental/](../../test-reports/assets/2026-09-16-fav-u7-incremental/)
- Remote: `origin/feature/fav-u7-publisher`
## 证据 / 备注
因 `internal/artifactvault` 与 FAV 旁支大面积分叉,未 cherry-pick 核心库;采用最小可编译、默认关闭的 publisher/HTTP/CLI stub。commits: `3478a5a..de65cee`。
@@ -1,6 +1,6 @@
---
title: "全量 backlog 覆盖 no-go 总控"
status: in_progress
status: done
created: 2026-09-16
updated: 2026-09-16
owner: Cursor
@@ -22,19 +22,20 @@ mutex: architecture-docs
## 步骤
1. [x] P0 SSOT 翻转
2. [ ] P1 nightly DATA_DIR 对齐 + green receipt
3. [ ] P2 IAM inventory + 410 + R13
4. [ ] P3 Playwright intent-plan 双标签
5. [ ] P4 PU6 + PU7
6. [ ] P5 PU8 U9→U12
7. [ ] P6 SWBOOT-00…09(10 stub)
8. [ ] P7 FAV 增量
2. [x] P1 nightly DATA_DIR 对齐 + green receipt(U8 PASS;FullNone 仍有 product_fail 待后续)
3. [x] P2 IAM inventory + 410 + R13
4. [x] P3 Playwright intent-plan 双标签(`RUN_UI_ACCEPTANCE=1` Docker Playwright PASS;A=200/B=409;见 [报告](../../test-reports/2026-09-16-intent-plan-playwright-dual-tab-test-report.md))
5. [x] P4 PU6 + PU7(agent 实现合入;flag 默认 off)
6. [x] P5 PU8 U9→U12(独立 flag;legacy tier;agent 实现合入)
7. [x] P6 SWBOOT-00…09(10 stub/设计冻结;agent 实现合入)
8. [x] P7 FAV 增量(非整支 merge;publisher/consumer 默认 off)
## 验收标准
- [ ] 各波 short-term / test-report 回链
- [ ] FEATURE-MATRIX 对应行更新
- [ ] CURRENT 焦点与认领同步
- [x] 各波 short-term / test-report 回链
- [x] FEATURE-MATRIX 对应行更新
- [x] CURRENT 焦点与认领同步
- [x] agent 富实现覆盖薄 stub:`chore/merge-agent-deltas` → `dev`
## 相关链接
@@ -0,0 +1,52 @@
---
title: "Playwright intent-plan 双标签验收"
status: done
created: 2026-09-16
updated: 2026-09-16
owner: Cursor-Auto
branch: feature/intent-plan-cards-playwright
worktree: ".worktrees/feature-intent-plan-cards-playwright"
mutex: web
---
# Playwright intent-plan 双标签验收
## 目标
`RUN_UI_ACCEPTANCE=1` 真浏览器下,PLAN_CONFIRM 双标签 confirm 互斥;刷新/重登与 PG plan 一致;不升 `MULTI_INTENT_PLAN_TIER`。
## 范围
- `web/e2e/intent-plan-cards.spec.ts` 活验规格
- App:`GET /intent-plans/active` 水合 PLAN_CONFIRM;confirm 使用唯一 decision nonce;空 docAST 登录兜底
- InteractiveCard:`data-testid=plan-confirm-card` 等选择器
- 测试报告归档
## 非目标
- 不升 `MULTI_INTENT_PLAN_TIER`
- 不用 stub/SKIP 冒充 PASS
## 步骤
1. [x] 从 origin/dev 开 `feature/intent-plan-cards-playwright`(worktree)
2. [x] 水合 + 唯一 nonce + e2e 规格
3. [x] `RUN_UI_ACCEPTANCE=1` 真浏览器跑通并写报告
4. [x] 提交并 `./scripts/git-push-dev.sh`
## 验收标准
- [x] 无 `RUN_UI_ACCEPTANCE` 时 Playwright skip
- [x] `RUN_UI_ACCEPTANCE=1`:双标签仅一侧 HTTP 200,另一侧 409;败方 outdated
- [x] 刷新/重登卡片状态与 PG / GET active 一致
- [x] 报告进 `.doc/test-reports/`
## 相关链接
- Long-term: [../long-term/2026-09-16-intent-plan-playwright-dual-tab.md](../long-term/2026-09-16-intent-plan-playwright-dual-tab.md)
- Test report: ../../test-reports/2026-09-16-intent-plan-playwright-dual-tab-test-report.md
## 证据 / 备注
- Live:`assets/2026-09-16-intent-plan-playwright-dual-tab/playwright-docker.txt`(1 passed 7.0s)
- Network:`playwright-network.json`(A=200 / B=409 PLAN_STALE_REVISION;PG executing rev=2)
@@ -0,0 +1,46 @@
---
title: "partial/deferred 全量收口总控"
status: in_progress
created: 2026-09-16
updated: 2026-09-17
owner: Cline
branch: docs/partial-deferred-completion-plan
worktree: "-"
mutex: architecture-docs
---
# partial/deferred 全量收口总控
## 目标
按 [收口计划](../../remediation/2026-09-16-partial-deferred-completion-plan.md) 把 FEATURE-MATRIX 6 行 `partial` + 1 行 `deferred` 推进到 `done`;全程保持模块独立解耦(端口 + 组合根 + PG 事件 + 契约门禁,不新增 RPC 层),变更影响面不跨模块扩散。
## 授权
用户 2026-09-16 要求已设计功能尽量推进 done,并确认通信机制与系统契约。
用户 2026-09-17 确认收口计划 §7 四项决策(D7 草案数字、confirm 可独立授权、REPLACE 默认不启用、FAV 顺序与观察窗);见计划 §7.1–§7.4 与 [D7 ADR 草案](../../adr/2026-09-17-d7-chat-data-retention.md)。
## 步骤
1. [x] W1 CI/E2E 收口(mutex `ci`;secret/runner 配置 + FullNone product_fail + green nightly)
2. [x] W2 PU6 语义摘要 D3(mutex `chat`;shadow + 真实 PI + R13 + 负例;**不要求** REPLACE)
3. [x] W3 PU7 PI change-report 叙事(mutex `docgov`;开 flag + 真实 PI + fallback 负例 + UI 区分)
4. [x] W4 PU8 U9–U12(mutex `intent-plan`;逐 action 独立 flag,U9→U12 顺序;升 confirm 另开独立授权,不升 full)
5. [ ] W5 纯软件自举(mutex `workflow-design`;SWBOOT-10 非 stub + 真实 PI + UI 二次验收)
6. [ ] W6 FAV(mutex `events`;**shadow 已合** → live staging→artifact→publication 仍未开;每级观察窗 ≥7 天;`FAV_DEGRADED_READ=false`;禁止整支 merge)
7. [ ] W7 D7 数据治理(mutex `chat`;**盘点已合**;按 ADR 口径整改仍待合规签字;数字 `pending-compliance-signoff`;本轮未发现已确认违规、未写 gap-matrix)
8. [ ] 逐行升 done(保留 lineage)+ CURRENT / 契约状态同步
9. [x] §7 四项开放问题决策落盘(2026-09-17)
## 验收标准
- [ ] 各波独立 short-term / feature 分支 / test-report / 回滚点(占用对应 mutex)
- [ ] 计划 DoD 全勾(见 remediation 计划 §8;§7 四项决策项已勾)
- [ ] `production_ready` 与 B1–B4 门禁零回归
## 相关链接
- Plan: [../../remediation/2026-09-16-partial-deferred-completion-plan.md](../../remediation/2026-09-16-partial-deferred-completion-plan.md)
- D7 ADR 草案: [../../adr/2026-09-17-d7-chat-data-retention.md](../../adr/2026-09-17-d7-chat-data-retention.md)
- 矩阵: [../../status/FEATURE-MATRIX.md](../../status/FEATURE-MATRIX.md)
- 上位: [2026-09-16-full-backlog-override.md](./2026-09-16-full-backlog-override.md)(P0–P7 已完成,本总控承接其收口阶段)
@@ -0,0 +1,48 @@
---
title: "PU7 PI change-report 叙事"
status: done
created: 2026-09-16
updated: 2026-09-16
owner: Cursor-Auto
branch: feature/pu7-pi-narrative
worktree: .worktrees/feature-pu7-pi-narrative
mutex: docgov
---
# PU7 PI change-report 叙事
## 目标
`PI_CHANGE_REPORT_NARRATIVE` 默认 off;开启后只读消费 immutable diff+lineage 的 typed 叙事,失败全量 deterministic fallback。
## 范围
- `internal/docrevision/` flag + ResolveChangeReport
- `deploy/pi-agent/change-report-narrative-v1.mjs`
- `ChangeReportPanel` / changeReportView 区分事实 vs 叙事
## 非目标
- 默认开启 flag
- 覆盖服务端 risk / approval
- 合入 `dev`(本任务仅 feature 分支)
## 步骤
1. [x] flag 默认 off
2. [x] typed narrative + input digest;失败全量 fallback
3. [x] UI 区分 narrative / 事实字段
4. [x] 单测 flag off + fallback
5. [x] test-report + push feature 分支
## 验收标准
- [x] 默认 off 行为 = deterministic fallback
- [x] 畸形/超时/digest 不匹配 → 无混合字段
- [x] PI 声称低风险不影响服务端 risk floor
- [x] 报告归档
## 相关链接
- Contract: [../long-term/2026-09-16-pu7-pi-narrative-contract.md](../long-term/2026-09-16-pu7-pi-narrative-contract.md)
- Test report: [../../test-reports/2026-09-16-pu7-pi-narrative-test-report.md](../../test-reports/2026-09-16-pu7-pi-narrative-test-report.md)
@@ -0,0 +1,48 @@
---
title: "P5 PU8 U9–U12 独立 flag 脚手架"
status: done
created: 2026-09-16
updated: 2026-09-16
owner: Cursor
branch: feature/pu8-u9-u12-flags
worktree: /tmp/wt-pu8
mutex: intent-plan
---
# P5 PU8 U9–U12 独立 flag 脚手架
## 目标
为多意图扩面 U9–U12 落地独立 env flag(默认 OFF)与 stub/dry-run 端口,不升 `MULTI_INTENT_PLAN_TIER`。
## 范围
- `MULTI_INTENT_U9_SEGMENT` / `U10_MUTATE` / `U11_DOCGOV` / `U12_RUN_CONTROL`
- U9 segment proposal port + fail-closed stub
- U10–U12 dry-run adapters + `BuildOwnerMux` 门控
- 单测证明默认 off 与 enable 路径不 panic
## 非目标
- 真实 LLM 分段 / 升 tier / 合入 `dev`
- 真实 docgov/workflow 副作用写路径
## 步骤
1. [x] 独立 flags + `.env.example`
2. [x] segment proposal + expansion adapters + mux 门控
3. [x] Assemble `BuildOwnerMux` 接线
4. [x] 单测 + 测试报告
5. [x] push(不合 `dev`)
## 验收标准
- [x] 四 flag 默认 off;开 flag 不升 PlanTier
- [x] flag off ≡ legacy(无 LLM proposal、无新 adapters)
- [x] flag on:U9 fail-closed;U10–U12 dry-run/guarded
- [x] 报告归档
## 相关链接
- Contracts: [u9](../long-term/2026-09-16-pu8-u9-segment-proposal-contract.md) … [u12](../long-term/2026-09-16-pu8-u12-workflow-run-control-contract.md)
- Test report: [../../test-reports/2026-09-16-pu8-u9-u12-flags-test-report.md](../../test-reports/2026-09-16-pu8-u9-u12-flags-test-report.md)
@@ -0,0 +1,50 @@
---
title: "已合入 leftover 旁支与文档对齐"
status: done
created: 2026-09-17
updated: 2026-09-17
owner: Cursor
branch: chore/leftover-hygiene-2026-09-17
worktree: "-"
mutex: ops
---
# 已合入 leftover 旁支与文档对齐
## 目标
拆掉 tip 已是本地 `dev` 祖先的 extra worktree 与本地旁支;把 CURRENT / SWBOOT long-term / PU 契约与 git 事实对齐。不整支合入冻结旁支。
## 范围
- 拆已合入 extra worktree(保留错名 FAV 目录)
- `git branch -d` 已合入 leftover;SWBOOT 残留 1 commit 在确认文档已在 `dev` 后 `-D`
- `fix/clean-test-env-baseline` 不 merge;标明前端清理已放弃
- 对齐 CURRENT、SWBOOT long-term、PU6/PU8 契约
## 非目标
- 不整支 merge `feature/final-artifact-vault`
- 不合入 `feature/remove-herdr-agent-settings`、`fix/project143-controlled-content-404-diagnosis`、`fix/dev-runtime-data-root-guard`、`dev-old-linear`
- 不删 `origin/*`;不从 worktree 起 docker;不碰项目 143;不 push
- 不升 FEATURE-MATRIX 能力行 `done`
## 步骤
1. [x] 从 `dev` 开 `chore/leftover-hygiene-2026-09-17` 并认领 CURRENT
2. [x] 拆已合入 worktree、删除已合入旁支
3. [x] 文档对齐
4. [x] 冒烟 + test-report
5. [x] 占槽合 `dev`
## 验收标准
- [x] extra worktree 只剩 FAV 错名目录
- [x] 5 条冻结旁支仍在
- [x] 文档不再声称 SWBOOT 未合 `dev`
- [x] vet / short / arch-check / health+ready PASS
## 相关链接
- Test report: `.doc/test-reports/2026-09-17-leftover-hygiene-test-report.md`
- 上位: [2026-09-16-partial-deferred-completion.md](./2026-09-16-partial-deferred-completion.md)
@@ -0,0 +1,51 @@
---
title: "晋升 dev → test(rc-v1.0.0-beta.3)"
status: in_progress
created: 2026-09-17
updated: 2026-09-17
owner: Cursor
branch: feature/promote-dev-to-test-2026-09-17
worktree: "-"
mutex: infra
---
# 晋升 dev → test(rc-v1.0.0-beta.3)
## 目标
在 `production_ready=yes` 前提下,把本地 `dev@46a0fb2`(含 leftover + W2–W7)合入 `test`,重建测试服务,供部署后实测。
## 范围
- `test` `--no-ff` 合入当前 `dev`
- 候选 tag `rc-v1.0.0-beta.3`
- `./scripts/env-service.sh test rebuild`(部署新代码,不 pin beta.2 旧镜像)
- `:8081` health/ready;goose 00048 可迁移
## 非目标
- 不合入 `main`
- 不启用 FAV live / `FAV_DEGRADED_READ`
- 不升 `MULTI_INTENT_PLAN_TIER` / `SEMANTIC_SUMMARY_REPLACE`
- 不翻转 `production_ready`
- 不终止项目 143
- 不按 D7 草案删除数据
## 步骤
1. [x] 确认 gap-matrix `production_ready=yes`;FAV/D7/SWBOOT 为 deferred_enhancement
2. [ ] 占集成槽;合入 `test` + tag
3. [ ] rebuild 测试服务
4. [ ] health/ready + schema 冒烟
## 验收标准
- [ ] `:8081` health/ready PASS
- [ ] schema 到达 48(00048 additive)
- [ ] FAV 仍 off
- [ ] 默认 flag 仍 off
## 相关链接
- Test report: [../../test-reports/2026-09-17-promote-dev-to-test-test-report.md](../../test-reports/2026-09-17-promote-dev-to-test-test-report.md)
- gap-matrix: [../../remediation/gap-matrix.md](../../remediation/gap-matrix.md)
@@ -0,0 +1,53 @@
---
title: "W1 CI/E2E FullNone + green nightly"
status: done
created: 2026-09-17
updated: 2026-09-17
owner: Cursor
branch: feature/w1-ci-e2e-green-nightly
worktree: "-"
mutex: ci
---
# W1 CI/E2E FullNone + green nightly
## 目标
收口 FullNone `product_fail`,取得真实 nightly `verdict=pass` receipt,将 FEATURE-MATRIX「CI / E2E」升为 `done`。
## 范围
- 复核 Actions secret/runner 已就绪
- 复现并修复 `TestWorkflowGovernance_PiAgent_PG_FullNoneMixedChain`
- nightly U8+FullNone → green receipt + test-report
- 矩阵行升 done
## 非目标
- W2–W7;升 `MULTI_INTENT_PLAN_TIER`;开 `SEMANTIC_SUMMARY_REPLACE`;整支 merge FAV
## 步骤
1. [x] docs 计划分支合入 `dev`(`4bda648`)
2. [x] CURRENT 认领 `mutex=ci` + 本 short-term
3. [x] 本地复现 FullNone 并分栏(根因:duplicate goose 00048 + fields.json 硬目标 + KB/超时)
4. [x] 修复至本地 FullNone 绿(1008s)
5. [x] nightly green receipt 归档 + test-report(`6e2476f0…` verdict=pass)
6. [x] FEATURE-MATRIX CI/E2E → done;总控 W1 勾选;释放认领
## 验收标准
- [x] Nightly receipt `verdict=pass`(真实 run)
- [x] FullNone 在 nightly 套件 PASS
- [x] 矩阵 `done`;B1–B4 零回归
## 相关链接
- Plan: [../../remediation/2026-09-16-partial-deferred-completion-plan.md](../../remediation/2026-09-16-partial-deferred-completion-plan.md) §W1
- Test report: [../../test-reports/2026-09-17-w1-ci-e2e-green-nightly-test-report.md](../../test-reports/2026-09-17-w1-ci-e2e-green-nightly-test-report.md)
- Receipt: [../../test-reports/assets/promotion-receipts/6e2476f0f2e408e111fe06ca7c31a38294a340b3.json](../../test-reports/assets/promotion-receipts/6e2476f0f2e408e111fe06ca7c31a38294a340b3.json)
## 证据 / 备注
- commits: `4f2e5f0` `a02c67d` `0f52ab8` `11e030d` `6e2476f`
- Gitea Actions API 可达;本提交未推远端,远端 dispatch 留合入后二次确认
@@ -0,0 +1,48 @@
---
title: "W2 语义摘要 shadow 真实 PI"
status: done
created: 2026-09-17
updated: 2026-09-17
owner: Cursor
branch: feature/w2-semantic-summary-shadow-live
worktree: "-"
mutex: chat
---
# W2 语义摘要 shadow 真实 PI
## 目标
在授权可见集合上接入产品 PI Agent Runner 的 no-tool shadow 摘要;默认 flag off;不接线 `SEMANTIC_SUMMARY_REPLACE`。
## 范围
- `PiSemanticSummarizer` 组合根注入(仅 `SEMANTIC_SUMMARY_SHADOW` on 且 backend=pi-agent)
- R13 minimized input.json;tool_permissions=none
- 真实 MiniMax 证据 + injection 负例
- 仓库默认 flag 保持 false
## 非目标
- 启用 `SEMANTIC_SUMMARY_REPLACE`
- 改 test/main 默认 env
## 步骤
1. [x] 认领 CURRENT mutex `chat`
2. [x] 实现 PI summarizer + 单测
3. [x] 真实 PI live
4. [x] test-report + 矩阵升 done
5. [x] 合 `dev`
## 验收标准
- [x] flag 默认 off
- [x] 真实 PI shadow.status=ok 或可解释 fallback
- [x] injection 秘密不入 served narrative;REPLACE 未接线
- [x] vet / short / arch-check PASS
## 相关链接
- 契约: `.doc/ops/long-term/2026-09-16-pu6-semantic-summary-contract.md`
- 总控: `.doc/ops/short-term/2026-09-16-partial-deferred-completion.md`
@@ -0,0 +1,48 @@
---
title: "W3 PU7 PI change-report 叙事 live"
status: done
created: 2026-09-17
updated: 2026-09-17
owner: Cursor
branch: feature/w3-pi-change-report-narrative-live
worktree: "-"
mutex: docgov
---
# W3 PU7 PI change-report 叙事 live
## 目标
flag on 时质量修复路径向产品 PI Agent Runner 请求 `change_report_narrative_v1`;digest 绑定;畸形/超时全量 fallback;UI 区分叙事与 `rule_risk`/lineage。
## 范围
- `CreateAgentCandidate` 在 flag on 且 `ReportJSON` 为空时调用 `NarrativeFetcher`
- 组合根仅 `PI_CHANGE_REPORT_NARRATIVE` on + `pi-agent` 注入 `PiChangeReportNarrator`
- 仓库默认 flag 仍 off;dev 运行态可覆盖
- 负例:timeout envelope / fetcher error → fallback 且不返回 `ErrReportInvalid`
## 非目标
- 不把 fallback 写成完整 PI
- 不覆盖服务端风险与文档影响
- 不默认开启仓库 flag
## 步骤
1. [x] no-tool PI narrator + 组合根接线
2. [x] digest 与 `ResolveChangeReport` 同源(candidate 真实 diff 之后再 fetch)
3. [x] 单测 + 真实 MiniMax + UI 分区单测
4. [x] 合 `dev` + 冒烟 + 矩阵升 done
## 验收标准
- [x] 真实 PI 产出 `change_report_narrative_v1` 且 digest 原样回写
- [x] fallback 负例 PASS
- [x] UI `change-report-factual` / `change-report-narrative` 分区
- [x] test-report 归档
## 相关链接
- Contract: [../long-term/2026-09-16-pu7-pi-narrative-contract.md](../long-term/2026-09-16-pu7-pi-narrative-contract.md)
- Test report: [../../test-reports/2026-09-17-w3-pi-change-report-narrative-test-report.md](../../test-reports/2026-09-17-w3-pi-change-report-narrative-test-report.md)
@@ -0,0 +1,39 @@
---
title: "W4 PU8 U9–U12 独立 flag live"
status: done
created: 2026-09-17
updated: 2026-09-17
owner: Cursor
branch: feature/w4-u9-segment-live
worktree: "-"
mutex: intent-plan
---
# W4 PU8 U9–U12 独立 flag live
## 目标
U9 真实 LLM proposer(规则能切则不出 proposal);U10–U12 各自独立 flag 的 dry-run→confirm 证据;不升 `MULTI_INTENT_PLAN_TIER`。
## 范围
- `PiSegmentProposer` + 规则门 + 组合根接线
- U10 mutate 幂等 dry-run receipt;U11 项目 143 只读;U12 run-control 独立 flag
- 四份独立 test-report
## 非目标
- 不升 `confirm` / `full`
- 不把 U10–U12 dry-run 写成领域 live 写
## 步骤
1. [x] U9 PI proposer + 规则门
2. [x] U10–U12 分 flag 证据
3. [x] 合 `dev` + 矩阵升 done
## 验收标准
- [x] 真实 MiniMax U9
- [x] 负例 malformed/timeout/OOB/规则已切
- [x] PLAN_TIER 仍 legacy
@@ -0,0 +1,21 @@
---
title: "W5a 软件自举 UI + docs_only PI"
status: done
created: 2026-09-17
updated: 2026-09-17
owner: Cursor
branch: feature/w5a-software-bootstrap-ui-pi
worktree: "-"
mutex: workflow-design
---
# W5a 软件自举 UI + docs_only PI
## 目标
创建向导改为服务端 catalog 驱动;软件项目不克隆医疗 7 模板;solo 标注未独立评审;docs_only 真实 PI 建议 delivery 且不自动激活。SWBOOT-10 仍 stub。矩阵不升 done。
## 非目标
- 真 patch/merge(W5b)
- 升 FEATURE-MATRIX 纯软件自举行
@@ -0,0 +1,51 @@
---
title: "W6 FAV subscriber shadow"
status: done
created: 2026-09-17
updated: 2026-09-17
owner: Cursor
branch: feature/w6-fav-subscriber-shadow
worktree: "-"
mutex: events
---
# W6 FAV subscriber shadow
## 目标
手工移植 FAV subscriber **shadow**:只计算 intended outcome,不写业务副作用;`FAV_DEGRADED_READ=false`;`FAV_PUBLISHER_ENABLED` 默认 false。矩阵保持 `partial`。
## 范围
- `ObserveShadow` 只读计算
- vault status / CLI 标明 shadow 与 live 未放量
- 负例:degraded read 拒绝;HandleLease / Register(fav) 仍 fail-closed
## 非目标
- 整支 merge `feature/final-artifact-vault`
- live staging → artifact → publication
- 启用 `FAV_DEGRADED_READ`
- 升 FEATURE-MATRIX FAV 为 `done`
## 步骤
1. [x] `ObserveShadow` + 负例单测
2. [x] 冒烟 + 报告(live 未放量)
3. [x] 合 `dev`;矩阵保持 partial
## 验收标准
- [x] WouldStage / WouldPublish 恒 false
- [x] FAV_DEGRADED_READ=true 时 shadow 拒绝
- [x] 报告写清 shadow 证据与「live 未放量」
## 相关链接
- Remaining port: [../../audit/2026-09-16-fav-u7-remaining-port.md](../../audit/2026-09-16-fav-u7-remaining-port.md)
- U7 报告: [../../test-reports/2026-09-16-fav-u7-incremental-test-report.md](../../test-reports/2026-09-16-fav-u7-incremental-test-report.md)
- Test report: [../../test-reports/2026-09-17-w6-fav-subscriber-shadow-test-report.md](../../test-reports/2026-09-17-w6-fav-subscriber-shadow-test-report.md)
## 证据 / 备注
不占 live 观察窗;≥7 天窗口仍属后续 live 切片。
@@ -0,0 +1,46 @@
---
title: "W7 D7 对话数据分类盘点"
status: done
created: 2026-09-17
updated: 2026-09-17
owner: Cursor
branch: feature/w7-d7-data-inventory
worktree: "-"
mutex: chat
---
# W7 D7 对话数据分类盘点
## 目标
只做数据分类盘点 audit(sessions/messages、KB、日志、备份、event 敏感字段与流转)。无合规签字不物理删除、不清备份。矩阵 D7 保持 `deferred`。
## 范围
- 只读盘点:表、派生副本、日志、备份脚本、事件 payload
- 若发现**已确认**安全/合规基线违规 → 立即写 gap-matrix blocker
## 非目标
- 按 ADR 草案数字(365/180/30)执行物理删除或备份清除
- 字段级加密实现
- 升 FEATURE-MATRIX D7 为 `done`
- 翻转 `production_ready`
## 步骤
1. [x] 只读盘点系统库 / 共享 KB / 宿主 traces / 事件 payload keys
2. [x] 写 audit + test-report;违规判定(无已确认违规,未写 gap-matrix)
3. [x] 合 `dev`;矩阵保持 deferred
## 验收标准
- [x] 盘点覆盖 sessions/messages、KB、日志、备份、event
- [x] 未执行物理删除
- [x] D7 仍 deferred;ADR 仍 `pending-compliance-signoff`
## 相关链接
- ADR: [../../adr/2026-09-17-d7-chat-data-retention.md](../../adr/2026-09-17-d7-chat-data-retention.md)
- Audit: [../../audit/2026-09-17-d7-data-inventory.md](../../audit/2026-09-17-d7-data-inventory.md)
- Test report: [../../test-reports/2026-09-17-w7-d7-inventory-test-report.md](../../test-reports/2026-09-17-w7-d7-inventory-test-report.md)
@@ -0,0 +1,226 @@
---
title: "FEATURE-MATRIX partial/deferred 全量收口计划"
status: in_progress
created: 2026-09-16
updated: 2026-09-17
type: refactor
owner: Cline
branch: docs/partial-deferred-completion-plan
mutex: architecture-docs
---
# FEATURE-MATRIX partial/deferred 全量收口计划
## 1. 背景
- **用户授权(2026-09-16)**:已设计的功能与特性尽量推进到 `done`,不停留在 `partial`/`deferred`;保持功能、模块的独立与解耦;确认模块间通信机制;建立系统契约,保证新功能添加、已有功能修改的影响面收敛在所属模块,不扩散到其他模块。
- **收口对象**:[FEATURE-MATRIX](../status/FEATURE-MATRIX.md) 中 6 行 `partial` + 1 行 `deferred`(见 §3 总表)。
- **上位约束**:`production_ready=yes` 与发布门禁 B1–B4 已签。本计划是**能力成熟度收口**,与发布门禁正交;`production_ready` 只由 [gap-matrix](./gap-matrix.md) 决定,本计划不得反向触碰已签门禁。
- **通信机制结论先行**:本系统为模块化单体,模块间通信**不采用、也不应改成通用 IPC/RPC**;已确认的跨进程边界全部走 HTTP 与 PG 持久事件。详见 §2。
## 2. 通信与解耦机制确认(IPC/RPC 问题的回答)
**结论:系统是模块化单体([ADR 2026-09-14-modular-monolith-decoupling](../adr/2026-09-14-modular-monolith-decoupling.md)),模块级隔离靠「消费者窄端口 + 组合根唯一装配 + 契约门禁」实现,而非 RPC 层。**已确认的通信边界共四类:
| 边界 | 机制 | 状态 |
|---|---|---|
| Web ↔ server | `/api/v1/*` HTTP + SSE(typed error envelope) | 已运行 |
| Go server ↔ PI Agent Runner | HTTP + Bearer(typed-result-v1) | 已运行 |
| 单体内模块 | 消费者窄端口 + `internal/app` 组合根唯一装配 | 已运行 |
| 跨进程领域事件 | PG outbox(envelope/delivery)+ `cmd/events` 独立 worker 原子 lease 消费 | 已运行(notify/advance/projection live) |
**为什么不把单体内端口改成 RPC**(依据 [IPC/RPC 现状评估](../ops/research/2026-09-15-module-decoupling-ipc-assessment.md)):RPC 会增加序列化、延迟、部分失败与运维成本,却不消除 locator、授权、幂等和事件消费缺口;真正的进程级解耦已由 `cmd/events` worker(经 PG lease,而非服务间直连)与两条 HTTP 边界承担。用户要求的「通过 IPC/RPC 通信」在本系统的正确落法即:**跨进程一律走既有 HTTP / PG 事件边界;模块级独立解耦靠端口与契约门禁**。若未来确需新增跨进程边界,须先立 ADR,沿用「HTTP 或 PG 事件」两种既有模式。
### 2.1 系统契约体系(防扩散的既存机制,本计划全部沿用)
| 契约 | 载体 | 强制方式 |
|---|---|---|
| Import / SQL write / path / event 边界 | `.doc/system-design/module-boundaries.yaml` | `internal/archtest` + `./scripts/arch-check.sh --mode block`;import/event 违规零容忍(block_kinds) |
| 领域事件 schema 与生产者/消费者 | `events.Envelope` schema 1 + YAML allowlist ↔ `StaticContracts` parity | 构建期 parity 门禁;未登记事件不得投递 |
| 任务幂等与产物 | `taskrun.RunManifest` canonical JSON + SHA-256 + idempotency key | 服务端强制;异 digest 冲突 |
| HTTP 错误语义 | typed error envelope(details allowlist + 脱敏) | 已合入(H1–H3) |
| PI Runner 协议 | typed-result-v1 + handshake;typed 字段存在但无效 → fail closed | 已合入 |
| 能力灰度 | 每能力独立 flag,默认 off / legacy / shadow | 各契约预注册晋级阈值 |
| 并行认领互斥 | FEATURE-MATRIX `mutex` 列 → CURRENT 认领表 | 同一 mutex 同时仅一个 `in_progress` |
### 2.2 变更影响面收敛守则(每个波次必须遵守)
1. 新能力一律落在**深模块**(模式参考 `internal/app/intentflow`、`internal/doccontent`),禁止把实现聚集回 coordinator/bizdev。
2. 模块间只允许三种交互:消费者拥有的窄端口、组合根装配、领域事件;**禁止新增跨模块 import**(arch-check block 兜底)。
3. schema 变更只走 additive migration;旧版本兼容读取;每个放量有独立回滚点。
4. 每个能力一个独立 flag;默认 off;晋级按预注册阈值(shadow → confirm → live/replace),禁止共用开关批量上线。
5. 新增事件必须同时补 YAML allowlist 与 `StaticContracts` 并过 parity 门禁。
6. 修改声明范围须保留 before/after lineage 与义务迁移(矩阵更新规则 4);禁止缩口径假完成。
## 3. 收口对象与关闭条件总表
| # | 行 | 当前 | 目标 done 的关闭条件(依据矩阵「剩余工作/关闭条件」列) | mutex |
|---|---|---|---|---|
| P1 | CI / E2E | partial | Actions secret/runner 环境配置完成 + FullNone product_fail 收口 + 一轮绿色 nightly receipt | `ci` |
| P2 | 语义摘要(D3) | partial | `SEMANTIC_SUMMARY_SHADOW` 开启并取得真实 PI + R13 + 负例证据;(可选)`SEMANTIC_SUMMARY_REPLACE` 灰度 | `chat` |
| P3 | PI change-report 叙事 | partial | `PI_CHANGE_REPORT_NARRATIVE` 开启 + 真实 PI 叙事 + fallback 全量负例 + UI narrative/事实字段区分 | `docgov` |
| P4 | 多意图扩面(U9–U12) | partial | U9→U12 逐 action 独立 flag 证据闭环(真实 PI + 浏览器 + 负例);tier 升级评估 | `intent-plan` |
| P5 | 纯软件项目自举 | partial | SWBOOT-10 非 stub 实现 + 真实 PI 全链路 + UI 二次验收 | `workflow-design` |
| P6 | Final Artifact Vault(FAV) | partial | subscriber 独立审计 → shadow → live;崩溃/重启幂等;`FAV_DEGRADED_READ=false` 保持;**禁止整支 merge 保持** | `events` |
| P7 | 对话数据治理(D7) | deferred | 数据分类盘点 → 留存/删除口径 → 库/备份/日志控制 → 敏感字段加密边界;**发现违规 → 立即升 gap-matrix blocker** | `chat` |
**并行度**:P1 与其余全部可并行;P3/P4/P5/P6 各自 mutex 互不冲突可并行;**P2 与 P7 共用 `chat` mutex,须串行(先 P2 后 P7)**。Playwright 双标签升 `confirm/full` 属 `intent-plan` 辅助任务(见 [2026-09-16-intent-plan-playwright-dual-tab](../ops/long-term/2026-09-16-intent-plan-playwright-dual-tab.md))。
## 4. 分波次计划
每波通用流程:从 `dev` 开独立分支(`feature/<slug>`)→ CURRENT 登记 → worktree 编码与单测 → 占集成槽合并 `dev` + 冒烟(`go vet` / `go test -short` / `env-service.sh dev rebuild` + `/health`)→ test-report 归档 → FEATURE-MATRIX 行升 `done`(保留 lineage)。
### W1(mutex `ci`):CI / E2E → done
**现状**:nightly 入口 + 失败分类 + promotion-receipt 门禁已交付;TempDir race 已修;PR CI 不依赖外部模型。剩余:环境配置与 FullNone product_fail。
1. Actions secret 录入:`TEST_DATABASE_URL`、nightly 专用 `RUN_PI_E2E` / `RUNNER_AUTH_TOKEN`(隔离合成数据);runner 注册与自检。
2. FullNone product_fail 收口:按 infra/product 分栏定位,修复产品失败或确认分类归属;nightly `DATA_DIR=dev` 保持对齐。
3. 跑一轮完整 nightly → green receipt 归档。
4. 矩阵行升 `done`(证据:[Wave2B](../test-reports/2026-09-16-wave2b-nightly-promotion-receipt-test-report.md)、[Wave2C](../test-reports/2026-09-16-wave2c-same-image-digest-test-report.md) + 新 green receipt)。
**回滚**:纯环境/CI 配置,不影响业务行为;secret 配置错误仅影响 nightly,不挡 PR CI。
### W2(mutex `chat`):PU6 语义摘要 D3 → done
1. dev 环境 `SEMANTIC_SUMMARY_SHADOW=on`(test 环境随后),收集 shadow 对账:authorized view only、无工具权限摘要器、R13 出站门。
2. 真实 PI(MiniMax)摘要证据:freshness 标注、可解释 fallback。
3. 负例矩阵:撤权消息不入摘要;injection 不能改权限;失败保留旧摘要/deterministic。
4. 达预注册阈值后 **默认不启用** `SEMANTIC_SUMMARY_REPLACE`(见 §7.3);若另开授权再灰度(独立回滚:关 flag 回 deterministic)。
5. 矩阵行升 `done`;[契约](../ops/long-term/2026-09-16-pu6-semantic-summary-contract.md)状态更新。
**路径**:`internal/ctxmgr/summarizer.go`、`internal/app/chatflow/`、`internal/server/chat_digest_api.go`、web 摘要组件。
### W3(mutex `docgov`):PU7 PI change-report 叙事 → done
1. dev `PI_CHANGE_REPORT_NARRATIVE=on`:真实 PI 只读消费 immutable diff+lineage+risk floor。
2. typed schema `change_report_narrative_v1` + input digest 绑定;任意 schema/超时/注入 → 全量 fallback(负例必测)。
3. UI 验收:narrative 与事实字段明确区分;禁止覆盖服务端风险/审批结论。
4. 矩阵行升 `done`(deterministic fallback 仍是本行显式声明行为)。
**回滚**:关 flag,仅 deterministic fallback,无第二份 candidate。契约:[pu7](../ops/long-term/2026-09-16-pu7-pi-narrative-contract.md)。
### W4(mutex `intent-plan`):PU8 U9–U12 → done
**顺序 U9→U10→U11→U12,逐 action 独立 flag,禁止共用开关批量上线:**
1. U9 `MULTI_INTENT_U9_SEGMENT`:真实 LLM 分段 shadow→confirm;规则无法判断时才出 proposal;stub fail-closed 保持。
2. U10 `MULTI_INTENT_U10_MUTATE`:dry-run + expected revision 门禁;未确认/越权/stale revision/重复提交 → 零越界副作用。
3. U11(docgov)、U12(workflow/run-control):按各自契约同模式推进。
4. 每个 action:真实 PI + Playwright 双标签 + 负例;独立报告与回滚点。
5. 全部闭环后:评估 `MULTI_INTENT_PLAN_TIER` legacy→confirm(**独立任务、独立授权**,默认不升 full;full 另拆行/backlog)。
6. 矩阵行升 `done`(声明范围 = 四个 action 的 flag 证据闭环;tier=full 不在本行关闭条件内)。
契约:[u9](../ops/long-term/2026-09-16-pu8-u9-segment-proposal-contract.md) / [u10](../ops/long-term/2026-09-16-pu8-u10-mutate-contract.md) / u11 / u12。
### W5(mutex `workflow-design`):纯软件项目自举 → done
1. SWBOOT-10 从 stub 收口为真实现(按 [short-term](../ops/short-term/2026-09-16-software-project-bootstrap.md) 与 [ADR keys](../adr/2026-09-16-software-project-bootstrap-keys.md))。
2. 真实 PI 全链路:`software_bootstrap` 工作流 创建→规划→交付(首期 docs_only / read_only_repo)。
3. Playwright UI 二次验收:服务端目录驱动的创建向导(停止前端固定克隆 7 份模板)、单人项目「无独立评审」显式标记。
4. 矩阵行升 `done`(范围沿用现状调研的复用/新增边界,不改医疗三工作流语义)。
### W6(mutex `events`):FAV → done
1. subscriber 独立审计(沿用 U7 增量路径,**继续禁止整支 merge FAV 分支**)。
2. publisher/consumer flag **shadow**:只计算 intended outcome,不执行业务副作用。
3. shadow 阈值达标后按 §7.4 逐 consumer **live**(顺序 staging → artifact → publication;每级观察窗 ≥7 天或证据阈值):幂等(唯一键/no-replace);崩溃/重启重放无重复可见结果。
4. `FAV_DEGRADED_READ=false` 保持默认;degraded 读取仅在显式开启时可用并有告警(不随 live 开启)。
5. 矩阵行升 `done`(声明范围:不可变终态制品库闭环)。
### W7(mutex `chat`,排在 W2 后):D7 对话数据治理 → done
**前提**:留存/删除口径见 §7.1 与 [D7 ADR 草案](../adr/2026-09-17-d7-chat-data-retention.md)(数字 `pending-compliance-signoff`;合规签字前禁止按建议数字执行物理删除/备份清除)。
1. 数据分类盘点(产出 audit 文档):chat_sessions/messages、KB、日志、备份、event 表中的敏感字段清单与流转路径。
2. 合规签字或改数后:更新 ADR 状态;库/备份/日志控制盘点。
3. 差距整改:日志/dead-letter/reconciliation 只存 ID、digest、typed error code 与 allowlist 摘要(Track E 红线沿用)。
4. 敏感字段加密边界决策与落地(首期默认不做字段级加密,见 §7.1)。
5. **若盘点确认基线违规 → 立即写 gap-matrix blocker,本行 done 让位于整改**;无违规且口径落地 → 矩阵行升 `done`。
## 5. 测试方案(层级矩阵)
| 层级 | 适用波次 | 内容 | 通过标准 |
|---|---|---|---|
| Arch / contract | 全部 | `./scripts/arch-check.sh --mode block`;YAML ↔ `StaticContracts` parity | import/event 违规 = 0;无未登记事件 |
| 单测 | 全部 | `go vet ./...` + `go test -short ./...`;相关包 `-race` | 全绿;无 data race |
| PG 集成 | W2/W4/W5/W6/W7 | `TEST_DATABASE_URL` 下集成 + additive migration/回滚演练 | 持久化、恢复、旧版本兼容读取 |
| 真实 PI | W2/W3/W4/W5 | 真实 PI Agent Runner + MiniMax;记录 model/protocol/typed result;R13 数据安全门(最小出站、租户绑定、脱敏、凭证最小权限、泄漏负例) | 无 stub 冒充;无敏感出站 |
| 浏览器 | W2/W3/W4/W5 | Playwright:真实登录、双用户/职责负例、刷新/重登/重启 | 页面结果与 PG/账本一致 |
| 部署 | 全部运行时波次 | 占集成槽 rebuild、`/health`、promotion receipt(same digest 晋升) | 可追到同一 commit + digest |
| 回滚 | W2–W6 | disable/drain、旧版本兼容读取、无双 writer、孤儿状态检查 | 上一版本恢复且无孤儿状态 |
每波验收报告归档 `.doc/test-reports/`(遵循 test-reports-standard),回链本计划与对应契约;矩阵状态提升必须同时核对源码、迁移、artifact、API/runtime 与测试层级(上位计划 R5–R7)。
## 6. 风险与停走门
| 风险 | 停走门 |
|---|---|
| 授权旁路 / 跨用户泄漏 / 双 writer / main 或 prod fail-open | 任一波发现 → 停止全部扩面,写 gap-matrix |
| B1–B4 门禁回归 | 每波合 dev 冒烟全绿;回归即停 |
| stub / SKIP / deterministic fallback 冒充真实 PI | 验收报告必须记录真实 runner/model;SKIP 不得写成 PASS |
| flag 批量上线 / 共用开关 | 一个能力一个 flag;违规合并打回 |
| 缩小声明范围制造 done | 矩阵审查:before/after lineage 必须保留,义务迁移可追 |
| 三环境隔离破坏 | 每波验证不跨环境读写;schema 迁移三环境同步(当前 47) |
| FAV 整支 merge | 保持禁止;只走增量分支 + 独立审计 |
## 7. 已确认决策(原开放问题;2026-09-17 用户确认采纳建议默认)
> 决策冻结 ≠ 放量:不改生产默认 env / flag;各波仍按原 mutex 与独立授权推进。
### 7.1 D7 留存期限与删除口径(W7 前置)
**决策**:工程按下列草案落 ADR([2026-09-17-d7-chat-data-retention](../adr/2026-09-17-d7-chat-data-retention.md));数字标 `pending-compliance-signoff`,合规签字或改数后 W7 方可按口径整改。不得无限期停在 deferred。
| 数据类 | 留存(建议默认) | 删除路径 |
|---|---|---|
| 会话正文(chat messages) | 热库 **365 天**可配置;超期 soft-delete → 观察窗 → 物理清理 | 用户删除同路径;备份清除需二次批准 + 精确 delete manifest(R22) |
| 派生文档 / 私密文档 | 与聊天**独立周期**;回收站 **30 天**后物理清理 | 删除 UI 必须说明「只删聊天 / 只删文档 / 两者」 |
| 审计元数据(导出/治理审计) | **180 天** | 不可被普通用户删除覆盖 |
| Agent trace / workspace 非终态 | 任务结束后 **30 天**;nightly 仅合成数据 | 禁止当长期事实源 |
| 日志 / dead-letter / reconciliation | Track E:**只存 ID、digest、typed error code、allowlist 摘要** | 禁止存 payload/prompt/正文 |
| FAV 终态制品 | `retention_class` + legal hold + delete ledger | 与 D7 聊天口径解耦 |
**加密边界**:首期「敏感字段盘点 + 传输/备份访问控制」;不默认上字段级加密。
**违规门**:盘点确认基线违规 → 立即写 gap-matrix;本行 done 让位于整改。
### 7.2 `MULTI_INTENT_PLAN_TIER` 是否升 `confirm`
**决策**:W4(U9→U12)证据闭环后,**可启动独立授权任务**将默认从 `legacy` 升至 `confirm`;**永不默认升 `full`**(`full` 另拆矩阵行/backlog,按 action 逐项加入)。
升 `confirm` 硬前置(全部满足):
1. U9→U12 各自独立 flag 证据闭环(真实 PI + Playwright 双标签 + 负例)
2. 停走指标全 0:未确认/越权副作用、安全红线绕过、hard-negative 自动执行、重复确认双跑、refresh/restart 权威差
3. 独立 short-term + 用户显式授权(合入功能代码不得顺带改默认 env)
4. 放量:`dev` 观察 → `test` → **不自动**推 `main`
### 7.3 `SEMANTIC_SUMMARY_REPLACE` 是否启用
**决策**:**默认不启用**。W2 升 `done` 只要求 `SEMANTIC_SUMMARY_SHADOW` + 真实 PI + R13 + 负例;**不依赖** REPLACE。REPLACE 为 W2 之后可选后置任务,须另开授权 + 接线 + fail-closed 灰度(`dev`→`test`;关 flag 回 deterministic)。
### 7.4 FAV live 消费者上线顺序与观察窗口
**决策**:固定顺序 **staging → artifact → publication**;每步 shadow → drain → live;观察窗证据驱动(每级下限 **≥7 天**或 ≥N 终态样本,取更严);`FAV_DEGRADED_READ` **全程保持 false**(不随 live 开启)。禁止整支 merge FAV;每 consumer 独立 flag;一窗失败则停在该级并回 shadow/off。
## 8. 验收标准(Definition of Done)
- [ ] W1–W6 各波 test-report 归档并回链;对应 FEATURE-MATRIX 行升 `done`(保留 lineage)。
- [ ] W7 数据分类盘点与口径文档落地;或违规升级 gap-matrix(该行转为整改跟踪)。
- [ ] 全程 `production_ready` 不翻转;gap-matrix 仅在真实 blocker 出现/关闭时变化。
- [ ] `arch-check --mode block` 全程通过;无新增跨模块 import、无未登记事件。
- [ ] 所有新 flag 保持独立且默认 off/legacy/shadow;每个放量有独立回滚点。
- [ ] B1–B4 门禁零回归(每波合 dev 冒烟全绿)。
- [x] 开放问题 §7 的四项决策均已获用户确认(2026-09-17;见 §7.1–§7.4)。
## 9. 相关链接
- 矩阵 SSOT: [../status/FEATURE-MATRIX.md](../status/FEATURE-MATRIX.md)
- 连续性审计: [../audit/2026-09-16-feature-matrix-production-readiness-audit.md](../audit/2026-09-16-feature-matrix-production-readiness-audit.md)
- 上位计划: [./2026-09-16-feature-matrix-production-readiness-plan.md](./2026-09-16-feature-matrix-production-readiness-plan.md)
- 发布门禁: [./gap-matrix.md](./gap-matrix.md)
- D7 留存 ADR 草案: [../adr/2026-09-17-d7-chat-data-retention.md](../adr/2026-09-17-d7-chat-data-retention.md)
- IPC/RPC 调研: [../ops/research/2026-09-15-module-decoupling-ipc-assessment.md](../ops/research/2026-09-15-module-decoupling-ipc-assessment.md)
- 模块解耦 Phase 2: [./2026-09-15-module-decoupling-ipc-phase2-remediation-plan.md](./2026-09-15-module-decoupling-ipc-phase2-remediation-plan.md)
- 契约: `../ops/long-term/2026-09-16-pu6-*` · `pu7-*` · `pu8-u9…u12`
- 总控 short-term: [../ops/short-term/2026-09-16-partial-deferred-completion.md](../ops/short-term/2026-09-16-partial-deferred-completion.md)
+1
View File
@@ -3,6 +3,7 @@
| 文档 | 说明 |
|------|------|
| [gap-matrix.md](./gap-matrix.md) | 发布缺口 SSOT |
| [2026-09-16-partial-deferred-completion-plan.md](./2026-09-16-partial-deferred-completion-plan.md) | FEATURE-MATRIX 6 partial + 1 deferred 全量收口:通信机制确认(模块化单体,不新增 RPC 层)、7 项关闭条件、W1–W7 波次;§7 四项决策已确认(2026-09-17) |
| [2026-09-16-feature-matrix-production-readiness-plan.md](./2026-09-16-feature-matrix-production-readiness-plan.md) | 能力状态与发布门禁解耦、证据校准、剩余 partial 收口和 production-ready 防回退计划([审计](../audit/2026-09-16-feature-matrix-production-readiness-audit.md)) |
| [2026-09-14-module-decoupling-refactor-plan.md](./2026-09-14-module-decoupling-refactor-plan.md) | 纵向绞杀、UnitOfWork、高并发互斥、可靠事件、逐动作授权、FAV、迁移与恢复的详细重构计划 |
| [2026-09-15-module-decoupling-ipc-phase2-remediation-plan.md](./2026-09-15-module-decoupling-ipc-phase2-remediation-plan.md) | Phase 2 修订版:Track E 持久事件交付先行;Track S 结构解耦独立 go/no-go;HTTP 与 PI 协议另立 remediation([审阅](../audit/2026-09-15-module-decoupling-phase2-plan-review.md);[调研](../ops/research/2026-09-15-module-decoupling-ipc-assessment.md)) |
+9 -9
View File
@@ -1,6 +1,6 @@
# 模块与功能完成度(SSOT)
**更新**: 2026-09-16(Wave 0 校准)
**更新**: 2026-09-17(W3 PI 叙事 done;W4 多意图扩面 done)
**production_ready**: yes(权威来源:[gap-matrix](../remediation/gap-matrix.md);本表不推导发布门禁)
**发布缺口**: [../remediation/gap-matrix.md](../remediation/gap-matrix.md)
**协作焦点**: [../ops/CURRENT.md](../ops/CURRENT.md)
@@ -48,25 +48,25 @@
| 模块 | 声明范围 | 状态 | 发布关系 | 证据 | 剩余工作 / 关闭条件 | 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 已签。**Playwright 双标签**:覆盖 no-go 后实施中(见总控);升 `confirm/full` 另开 | `intent-plan` |
| 多意图扩面(U9–U12) | U9 LLM 分段实验;U10 mutate;U11 docgov;U12 workflow/run-control | planned | deferred_enhancement | [设计](../system-design/2026-09-15-multi-intent-hitl-plan.md);[go/no-go GO](../ops/research/2026-09-16-wave3-pu6-pu8-go-no-go.md);[总控](../ops/short-term/2026-09-16-full-backlog-override.md) | **2026-09-16 覆盖授权 GO**:分项独立 flag;默认 legacy tier | `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 已签。**Playwright 双标签**:真浏览器 PASS 已合入([报告](../test-reports/2026-09-16-intent-plan-playwright-dual-tab-test-report.md));升 `confirm/full` 另开 | `intent-plan` |
| 多意图扩面(U9–U12) | U9 LLM 分段实验;U10 mutate;U11 docgov;U12 workflow/run-control | done | deferred_enhancement | [设计](../system-design/2026-09-15-multi-intent-hitl-plan.md);[go/no-go GO](../ops/research/2026-09-16-wave3-pu6-pu8-go-no-go.md);[脚手架](../test-reports/2026-09-16-pu8-u9-u12-flags-test-report.md);[U9](../test-reports/2026-09-17-w4-u9-segment-test-report.md);[U10](../test-reports/2026-09-17-w4-u10-mutate-test-report.md);[U11](../test-reports/2026-09-17-w4-u11-docgov-test-report.md);[U12](../test-reports/2026-09-17-w4-u12-run-control-test-report.md) | **before**:独立 flag 脚手架。**after**:U9 可开 flag 走产品 PI proposer(规则已切则不出 proposal);U10–U12 分 flag dry-run→confirm 证据。**未升** `MULTI_INTENT_PLAN_TIER`(升 `confirm` 另开授权;永不默认 `full`)。U10–U12 领域 live 写仍须专项批准 | `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 | planned | deferred_enhancement | [chat-agent-p6-backlog](../backlog/chat-agent-p6-backlog.md);[go/no-go GO](../ops/research/2026-09-16-wave3-pu6-pu8-go-no-go.md);[pu6](../ops/long-term/2026-09-16-pu6-semantic-summary-contract.md) | **覆盖授权 GO**:`SEMANTIC_SUMMARY_SHADOW` 默认 off | `chat` |
| 对话数据治理(D7) | 留存/删除口径、库·备份·日志控制、敏感字段加密边界 | deferred | deferred_enhancement(违规则升 blocker) | [计划](../remediation/2026-09-16-feature-matrix-production-readiness-plan.md) Scope Boundaries | 先数据分类与现状盘点;确认当前基线违规 → 立即写 gap-matrix | `chat` |
| 语义摘要(D3) | 授权后可见集合上的语义摘要;shadow → 可选替换 deterministic | done | deferred_enhancement | [chat-agent-p6-backlog](../backlog/chat-agent-p6-backlog.md);[go/no-go GO](../ops/research/2026-09-16-wave3-pu6-pu8-go-no-go.md);[pu6](../ops/long-term/2026-09-16-pu6-semantic-summary-contract.md);[脚手架](../test-reports/2026-09-16-pu6-semantic-summary-test-report.md);[W2 真 PI](../test-reports/2026-09-17-w2-semantic-summary-shadow-test-report.md) | **before**:flag 脚手架 + heuristic。**after**:dev 可开 `SEMANTIC_SUMMARY_SHADOW` 走产品 PI no-tool summarizer(默认 off)。**REPLACE 未启用**(独立后置,不在本行关闭条件内) | `chat` |
| 对话数据治理(D7) | 留存/删除口径、库·备份·日志控制、敏感字段加密边界 | deferred | deferred_enhancement(违规则升 blocker) | [计划](../remediation/2026-09-16-feature-matrix-production-readiness-plan.md) Scope Boundaries;[收口 §7.1](../remediation/2026-09-16-partial-deferred-completion-plan.md);[D7 ADR 草案](../adr/2026-09-17-d7-chat-data-retention.md);[W7 盘点](../audit/2026-09-17-d7-data-inventory.md);[报告](../test-reports/2026-09-17-w7-d7-inventory-test-report.md) | **after W7**:只读盘点完成(sessions/messages/KB/日志/备份/event)。**未发现**已确认基线违规,未写 gap-matrix。口径仍 `pending-compliance-signoff`;禁止按 365/180/30 物理删除。本行不升 done | `chat` |
| 智能体小队 | 角色-任务-工作区-黑板 | done | non_blocker | [agent-squad](../system-design/agent-squad/);[test 2026-09-07](../test-reports/2026-09-07-dynamic-squad-planning-test-report.md) | 非关键步骤降级(A5/A6)属 backlog | `squad` |
| 工作流治理 | 三正式工作流、设置页/DutyMode、动作级鉴权、真实 PI 三工作流 E2E、full/none 混合长链 | done | non_blocker | [三工作流整改](../remediation/2026-09-12-three-workflows-strict-governance-remediation.md);[409/职责](../test-reports/2026-09-14-workflow-plan-409-frozen-and-optional-duties-test-report.md);[鉴权](../test-reports/2026-09-14-governance-action-level-authz-test-report.md);[PI E2E](../test-reports/2026-09-16-pi-three-workflow-e2e-test-report.md);[Wave2 full/none](../test-reports/2026-09-16-wave2-real-pi-evidence-test-report.md) | full 跨用户审批 + none 免审批不阻塞已签。纯软件自举仍独立 planned | `workflow` |
| 纯软件项目自举 | 软件项目创建、Bootstrap、Delivery、受控工程交接 | partial | deferred_enhancement(明确不挡首发) | [设计](../system-design/2026-09-14-software-project-bootstrap-workflow.md);[ADR](../adr/2026-09-16-software-project-bootstrap-keys.md);[L1 报告](../test-reports/2026-09-16-software-project-bootstrap-test-report.md);[总控](../ops/short-term/2026-09-16-full-backlog-override.md) | SWBOOT-00…09 L1 已落 `feature/software-project-bootstrap`(未合 dev);SWBOOT-10 stub only;真实 PI/UI NOT RUN | `workflow-design` |
| 纯软件项目自举 | 软件项目创建、Bootstrap、Delivery、受控工程交接 | partial | deferred_enhancement(明确不挡首发) | [设计](../system-design/2026-09-14-software-project-bootstrap-workflow.md);[ADR](../adr/2026-09-16-software-project-bootstrap-keys.md);[L1 报告](../test-reports/2026-09-16-software-project-bootstrap-test-report.md);[W5a](../test-reports/2026-09-17-w5a-software-bootstrap-ui-pi-test-report.md) | **before**:L1 + UI 仍克隆医疗模板。**after W5a**:catalog 驱动创建、软件不挂医疗 key、docs_only 真 PI 建议 delivery 且不自动激活。**SWBOOT-10 仍 stub**(W5b);本行不升 done | `workflow-design` |
| IAM / 鉴权 | 项目级 API 鉴权 + RBAC;会话/阶段授权 | done | 加固 | [v3 full inventory](../audit/authorization-matrix-v3-full.md);[session 中断](../test-reports/2026-09-16-iam-route-inventory-test-report.md);[fail-closed](../test-reports/2026-09-16-wave1-iam-fail-closed-test-report.md);[410 策略](../audit/2026-09-16-bug11-410-retire-decision.md);[R13](../audit/2026-09-16-r13-data-safety-checklist.md) | 全路由 inventory + session 中断负例 + 410 冻结 + R13 基线已签 | `authz` |
| 文档治理 | 法定文档生命周期 + 租约 + 受控正文读取 | done | non_blocker | [docgov](../test-reports/2026-09-08-docgov-lifecycle-and-claiming-framework-test-report.md);[正文 UI](../test-reports/2026-09-14-controlled-content-ui-acceptance.md);[canonical hash](../remediation/2026-09-14-controlled-content-canonical-hash-remediation.md) | 项目 143 只读;不终止 | `docgov` |
| 文档版本 baseline | 账本、人工修订、确定性 diff+lineage、运行时 UI、负责人通知 | done | non_blocker | [管理](../test-reports/2026-09-13-document-revision-management-test-report.md);[Round20 UI](../test-reports/2026-09-14-document-revision-runtime-ui-test-report.md);[ADR](../adr/2026-09-13-document-version-boundary.md) | **before**:完整 PI narrative 混入 → **after**:迁「PI change-report 叙事」。fallback 报告是本行内显式行为,不是缺口 | `docgov` |
| PI change-report 叙事 | 只读消费 diff+lineage 的 PI 叙事;失败全量降级 fallback | planned | deferred_enhancement | [Round20](../test-reports/2026-09-14-document-revision-runtime-ui-test-report.md);[go/no-go GO](../ops/research/2026-09-16-wave3-pu6-pu8-go-no-go.md);[pu7](../ops/long-term/2026-09-16-pu7-pi-narrative-contract.md) | **覆盖授权 GO**:`PI_CHANGE_REPORT_NARRATIVE` 默认 off | `docgov` |
| PI change-report 叙事 | 只读消费 diff+lineage 的 PI 叙事;失败全量降级 fallback | done | deferred_enhancement | [Round20](../test-reports/2026-09-14-document-revision-runtime-ui-test-report.md);[go/no-go GO](../ops/research/2026-09-16-wave3-pu6-pu8-go-no-go.md);[pu7](../ops/long-term/2026-09-16-pu7-pi-narrative-contract.md);[脚手架](../test-reports/2026-09-16-pu7-pi-narrative-test-report.md);[W3 真 PI](../test-reports/2026-09-17-w3-pi-change-report-narrative-test-report.md) | **before**:flag 脚手架 + 仅 fallback。**after**:dev 可开 `PI_CHANGE_REPORT_NARRATIVE` 走产品 PI no-tool narrator(默认 off)。digest 绑定;畸形/超时全量 fallback。**不把 fallback 写成完整 PI** | `docgov` |
| 前端工作台 | 三栏 + 块文档 + SSE;错误卡/进度/busy;版本冲突信封;demo seed 默认关;终止 preview | done | non_blocker | [workbench](../test-reports/2026-09-08-three-column-workbench-and-block-document-test-report.md);[双标签](../test-reports/assets/2026-09-15-conversation-intent-dual-tab/screenshots/tab-b-busy.png);[demo](../test-reports/2026-09-16-demo-seed-pollution-test-report.md);[B4](../test-reports/2026-09-16-frontend-gate-b4-test-report.md)(项目 6363) | **before**:空「缺口」却 partial → **after**:本行 done。其他 409 消费方信封复用另列 hardening backlog | `web` |
| PI Runner / 配置链 | pi-agent + MiniMax + typed-result-v1 | done | non_blocker | [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);[typed-result](../test-reports/2026-09-15-pi-typed-result-v1-test-report.md) | — | `pi-agent` |
| 三环境运维 | dev/test/main + 共享 KB;对话/业务库隔离 | done | non_blocker | [PROJECT.md](../../PROJECT.md) §4;CURRENT 环境快照 schema **47** | — | `infra` |
| CI / E2E | PR CI、PG 集成、治理 PG、已签真实 PI 门禁;**nightly** schedule/`workflow_dispatch` + infra/product 分类 receipt | partial | 加固(阻止**下一次**晋升,不自动否定已发布) | [BUG-08](../test-reports/2026-09-16-ci-governance-pg-bug08-test-report.md);[PI 三工作流](../test-reports/2026-09-16-pi-three-workflow-e2e-test-report.md);[B3](../test-reports/2026-09-16-chat-refresh-gate-test-report.md);[B4](../test-reports/2026-09-16-frontend-gate-b4-test-report.md);[Wave2B nightly/receipt](../test-reports/2026-09-16-wave2b-nightly-promotion-receipt-test-report.md) | 关闭条件:nightly 入口 + 失败分类 + promotion-receipt 门禁已交付;TempDir race **已修**;PR CI 不依赖外部模型。Actions secret/runner 需环境配置 | `ci` |
| CI / E2E | PR CI、PG 集成、治理 PG、已签真实 PI 门禁;**nightly** schedule/`workflow_dispatch` + infra/product 分类 receipt | done | 加固(阻止**下一次**晋升,不自动否定已发布) | [BUG-08](../test-reports/2026-09-16-ci-governance-pg-bug08-test-report.md);[PI 三工作流](../test-reports/2026-09-16-pi-three-workflow-e2e-test-report.md);[Wave2B](../test-reports/2026-09-16-wave2b-nightly-promotion-receipt-test-report.md);[Wave2C](../test-reports/2026-09-16-wave2c-same-image-digest-test-report.md);[W1 green](../test-reports/2026-09-17-w1-ci-e2e-green-nightly-test-report.md) + [receipt `6e2476f0…`](../assets/promotion-receipts/6e2476f0f2e408e111fe06ca7c31a38294a340b3.json) | **before**:partial(FullNone product_fail / secrets 文案过时)→ **after**:secrets 已配;duplicate goose 00048 已清;FullNone+U8 nightly `verdict=pass` | `ci` |
| Artifact 同 digest 晋升 | 候选 commit 一次构建、按 digest 晋升、promotion receipt | done | 加固 | [计划 PU5B](../remediation/2026-09-16-feature-matrix-production-readiness-plan.md);[Wave2B](../test-reports/2026-09-16-wave2b-nightly-promotion-receipt-test-report.md);[Wave2C](../test-reports/2026-09-16-wave2c-same-image-digest-test-report.md) | **关闭**:same-image pin(`candidate-images-*` + `PINNED_IMAGE_MODE` + promote `--require-digests`)。**声明**:单机 retag/digest pin;远程 registry 推送另立任务 | `infra` |
| 可靠事件核心 | PG dispatcher、notify/advance/projection live、生产闭包 hook 退出、Phase2 选择性解耦已合入 | done | non_blocker | [E0A–E2](../test-reports/2026-09-15-event-e0a-production-scope-contract-test-report.md) 等;[复盘](../ops/research/2026-09-15-track-e-retrospective.md);[shared live](../test-reports/2026-09-15-event-notify-shared-live-test-report.md);[phase2 closeout](../test-reports/2026-09-15-phase2-closeout-test-report.md) | **before**:与 FAV off 混成 partial → **after**:FAV 独立行。选择性后续解耦按收益触发 | `architecture-docs` / `events` |
| Final Artifact Vault(FAV) | 不可变终态制品库;`FAV_DEGRADED_READ=false` | planned | deferred_enhancement | [Track E 复盘](../ops/research/2026-09-15-track-e-retrospective.md);[short-term](../ops/short-term/2026-09-16-fav-u7-incremental.md) | **覆盖授权增量实施**;仍**禁止**整支 merge;degraded read 默认 false | `events` |
| Final Artifact Vault(FAV) | 不可变终态制品库;`FAV_DEGRADED_READ=false` | partial | deferred_enhancement | [Track E 复盘](../ops/research/2026-09-15-track-e-retrospective.md);[U7 报告](../test-reports/2026-09-16-fav-u7-incremental-test-report.md);[W6 shadow](../test-reports/2026-09-17-w6-fav-subscriber-shadow-test-report.md);[short-term](../ops/short-term/2026-09-17-w6-fav-subscriber-shadow.md) | **after W6**:subscriber `ObserveShadow` 只计算 intended outcome,不写副作用。仍**禁止**整支 merge;`FAV_DEGRADED_READ` 默认 false;**live 未放量**(staging→artifact→publication 各 ≥7 天观察窗) | `events` |
---
@@ -119,6 +119,9 @@ imports:
- app/uow
- events
- intent
app/fav:
- artifactvault
- events
app/uow: []
app/stageflow:
- bizdev
@@ -0,0 +1,110 @@
# FAV U7 增量(publisher stub)测试报告
## 一、 测试背景 (Background)
P7 Final Artifact Vault 禁止整支 merge `feature/final-artifact-vault`。相对当前 `dev`,FAV 旁支的 `internal/artifactvault/*` 多数文件已大幅分叉(dataset Candidate backfill vs TerminalRow),强行 cherry-pick 会引入不可控冲突。本切片改为 **U7 增量 stub**:配置门闩、HTTP status、events 订阅桩与 CLI stub,全部默认关闭。
## 二、 测试目标 (Test Objectives)
- `FAV_DEGRADED_READ` 默认 false(config + docquery + vault GET)
- `FAV_PUBLISHER_ENABLED` 默认 false;进程内 Drain 不启动
- fav durable consumer 保持 mode=off;`Registry.Register(fav)` fail-closed
- `cmd/artifact-vault` 可编译;仅 `status|version`,无破坏性操作
- 产出 go/no-go:**subscriber 保持 OFF,直至单独审批**
## 三、 测试方案与环境 (Test Plan & Environment)
| 项 | 值 |
|----|----|
| OS | Linux |
| Go | 本机 `go test` / `go vet` |
| 分支 | `feature/fav-u7-publisher`(自 `dev@ebe177e`) |
| 层级 | 单元测试 + CLI 冒烟(无 stub 冒充真实 PI) |
| 证据 | `.doc/test-reports/assets/2026-09-16-fav-u7-incremental/unit-tests.txt` |
核心用例矩阵:
| ID | 用例 | 期望 |
|----|------|------|
| C1 | config 默认 | degraded/publisher false |
| C2 | vault init/start | publisher nil / not running |
| C3 | GET vault/status | consumer_mode=off |
| C4 | fav EventConsumer 零值 | HandleLease → ErrDisabledConsumer |
| C5 | events Registry | Register(fav) 失败;LiveConsumers 不含 fav |
| C6 | docquery | FavDegradedReadEnabled() false |
| C7 | artifact-vault status | 打印 remaining_to_port;无 backfill |
## 四、 预期结果 (Expected Results)
- 所有默认路径 FAIL-CLOSED:不写 vault blob、不 claim fav lease、不启用 degraded GET
- 显式 `FAV_*=true` 仅打开配置位;durable Register 仍被 events 硬门拒绝
- go/no-go 结论:**NO-GO for enabling fav subscriber**
## 五、 实际测试结果与判定 (Actual Results & Evaluation)
### C1–C3 config / vault
- **测试输入**:`config.Load("/dev/null")`;`Server{cfg}.initArtifactVault/startVaultPublisher`;`GET /api/v1/vault/status`
- **实际输出**:见 assets `unit-tests.txt` — `TestFAVFlagsDefaultOff` / `TestVaultDefaultsStayDisabled` / `TestVaultStatusReportsOff` PASS
- **评价判定**:PASS
- **耗时**:<10ms
### C4 fav subscriber stub
- **测试输入**:零值 `EventConsumer`;`Enabled=true` 仍调用 HandleLease
- **实际输出**:均 `events: consumer is disabled`;`Register(fav)` 失败
- **评价判定**:PASS
### C5–C6 events / docquery
- **测试输入**:既有 `TestAssertLiveConsumersRejectsFAV`、`TestLiveConsumersOmitsFAV`、`TestFavDegradedReadDefaultOff`
- **实际输出**:PASS(PG claim 负例缺 `TEST_DATABASE_URL` 时 SKIP,与既有约定一致)
- **评价判定**:PASS
### C7 CLI stub
- **测试输入**:`go build ./cmd/artifact-vault && artifact-vault status`
- **实际输出**:JSON 含 `consumer_mode=off`、`degraded_read=false`、`remaining_to_port` 列表
- **评价判定**:PASS
## 六、 自动化测试套件汇总 (Test Suite Execution)
```text
ok internal/config (FAV flags + ValidateIndependentVault)
ok internal/app/fav (subscriber defaults off)
ok internal/server (vault stub defaults off)
ok internal/events (FAV register/live omit)
ok internal/docquery (FavDegradedRead default off)
go vet PASS on touched packages
```
完整控制台:`assets/2026-09-16-fav-u7-incremental/unit-tests.txt`
## 七、 测试结论与后续优化建议 (Conclusion & Next Steps)
### Go / No-Go
| 决策点 | 结论 |
|--------|------|
| 合入本 stub 分支到 `dev`(另占集成槽) | **条件 GO**(默认 off,可审) |
| 启用 fav durable subscriber / `Register(fav)` | **NO-GO** — 需单独审批 |
| 启用 `FAV_DEGRADED_READ` | **NO-GO** — 默认 false,未做 M2 负例放行 |
| 启用 `FAV_PUBLISHER_ENABLED` 生产 Drain | **NO-GO** — 缺 ingest hooks 与完整 CAS 接线审计 |
| 整支 merge `feature/final-artifact-vault` | **NO-GO**(红线) |
### 仍待从 FAV 旁支手工移植(冲突重,本切片未搬)
1. `enumerate.go`(`EnumerateTerminals` / `LoadExclusions`)
2. `TerminalRow` + `Backfill(rows)`(与现 dataset `Candidate` 路径分叉)
3. 完整 `recover-plan` / `recover-apply` / `gc-preflight` / `destroy` CLI
4. `server` ingest hooks(`OnFinalArtifact*`)
5. durable fav `Register` + live cutover(需审批解锁 events 硬门)
### 本切片交付物
- `internal/config`:`FAV_*` / `VAULT_*` + `ValidateIndependentVault`
- `internal/server/vault.go`:status HTTP + gated publisher
- `internal/app/fav`:subscriber stub(默认 off)
- `cmd/artifact-vault`:status stub
- compose:`FAV_DEGRADED_READ` / `FAV_PUBLISHER_ENABLED` 钉死 false(main 硬编码)
- **未** merge 到 `dev`
@@ -0,0 +1,106 @@
# Playwright intent-plan 双标签验收 测试报告
## 一、 测试背景 (Background)
Wave2 / U6 仅留下 `web/e2e/intent-plan-cards.spec.ts` 门控骨架(无 `RUN_UI_ACCEPTANCE` 则 skip;有则仅 body visible)。Conversation-intent 双标签证据(项目 6275)不等于 intent-plan `PLAN_CONFIRM` 双标签。本轮关闭 long-term [2026-09-16-intent-plan-playwright-dual-tab](../ops/long-term/2026-09-16-intent-plan-playwright-dual-tab.md),且**不升** `MULTI_INTENT_PLAN_TIER`。
## 二、 测试目标 (Test Objectives)
1. `RUN_UI_ACCEPTANCE` 未设置时 Playwright **SKIP**(不得冒充 PASS)
2. `RUN_UI_ACCEPTANCE=1` 真浏览器:双标签同时点「确认执行」→ 仅一侧 HTTP 200,另一侧 409;败方卡片 `outdated`,不得本地双成功
3. 刷新 / 重登后卡片与 PG / `GET /intent-plans/active` 状态一致
4. 顺带修复空 `docAST` 登录页崩溃(demo seed 关闭时)
## 三、 测试方案与环境 (Test Plan & Environment)
| 项 | 值 |
|----|-----|
| OS | Linux 7.0.0-31-generic |
| 前端 | Vite `http://127.0.0.1:3101`(worktree 含水合改动;proxy → `:8080` API) |
| API / PG | `shuimu-agent-app-dev` `:8080`;`shuimu-context-pg-dev` schema 47 |
| 浏览器 | `mcr.microsoft.com/playwright:v1.63.0-noble --network host`(宿主机缺 libatk) |
| 分支 | `feature/intent-plan-cards-playwright` |
| 种子 | SQL 写入 `awaiting_confirmation` + `validated_only`(保持 legacy tier) |
| 产物 | `.doc/test-reports/assets/2026-09-16-intent-plan-playwright-dual-tab/` |
### 用例矩阵
| 用例 | 层级 | 期望 |
|------|------|------|
| 无 `RUN_UI_ACCEPTANCE` | Playwright | SKIP |
| 双标签 confirm | UI + HTTP + PG | 1×200 + 1×409;败方 outdated |
| 刷新 / 重登 | UI + GET active | 与 PG `executing` 一致 |
## 四、 预期结果 (Expected Results)
- Tab A/B 均水合同一 `PLAN_CONFIRM`(`data-testid=plan-confirm-card`)
- 并发 confirm:唯一 nonce → CAS 一胜一负;败方 `PLAN_STALE_REVISION` 且 UI `outdated`
- 胜方 / 刷新 / 重登:`data-card-status` 为 `executing|resolved`,不可再以 active 确认
- PG `intent_plans.status=executing`,`revision>=2`
## 五、 实际测试结果与判定 (Actual Results & Evaluation)
### 用例 1:门控 SKIP
- **测试输入 (Input)**:`npx playwright test e2e/intent-plan-cards.spec.ts --project=chromium`(不设 `RUN_UI_ACCEPTANCE`)
- **实际输出 (Actual Output)**:
```text
1 skipped
```
- **评价判定 (Evaluation / Verdict)**:**PASS**(SKIP,非冒充 PASS)
- **性能与耗时 (Duration & Latency)**:&lt;1s
### 用例 2:双标签 confirm + 刷新/重登
- **测试输入 (Input)**:
```bash
# Vite(含水合):3101 → API :8080
RUN_UI_ACCEPTANCE=1 BASE_URL=http://127.0.0.1:3101 \
ADMIN_USERNAME=… ADMIN_PASSWORD=… \
UI_ACCEPTANCE_ASSETS_DIR=…/assets/2026-09-16-intent-plan-playwright-dual-tab \
INTENT_PLAN_PG_DOCKER=shuimu-context-pg-dev \
docker run --rm --network host -v <worktree>:/work \
-v /var/run/docker.sock:/var/run/docker.sock \
mcr.microsoft.com/playwright:v1.63.0-noble \
bash -lc 'cd /work/web && npx playwright test e2e/intent-plan-cards.spec.ts --project=chromium'
```
- **实际输出 (Actual Output)**(摘自 `assets/.../playwright-docker.txt` + `playwright-network.json`):
```text
✓ dual-tab confirm mutual exclusion + reload/relogin matches PG (6.1s)
1 passed (7.0s)
project=PlanDual-mu49uev8 projectId=6399 session=sess-p6399-u9
planId=pln_e2e_mu49uev8
decisions: tab A HTTP 200 → executing rev=2; tab B HTTP 409 PLAN_STALE_REVISION
pgAfter: status=executing revision=2
```
截图:`screenshots/01-tab-a-awaiting.png` … `06-tab-a-after-relogin.png`
- **评价判定 (Evaluation / Verdict)**:**PASS**
- **性能与耗时 (Duration & Latency)**:约 7s(不含 Vite 冷启动)
## 六、 自动化测试套件汇总 (Test Suite Execution)
```text
# gated skip
npx playwright test e2e/intent-plan-cards.spec.ts --project=chromium
→ 1 skipped
# live acceptance
RUN_UI_ACCEPTANCE=1 … playwright (docker host network)
→ 1 passed (7.0s)
```
说明:本任务为 Web UI 门控活验;全仓 `go test -v ./...` 未作为本报告阻断项(未改 Go 业务逻辑)。
## 七、 测试结论与后续优化建议 (Conclusion & Next Steps)
- **达到合入/关闭 long-term 标准**:双标签 confirm 互斥 + 刷新/重登与 PG 一致已有真浏览器证据;默认 tier 未升。
- 产品改动:`GET /intent-plans/active` 水合 PLAN_CONFIRM;confirm 使用唯一 `decisionNonce`;空 `docAST` 登录兜底;卡片 `data-testid`/`data-card-status`。
- 建议:合 `dev` 后占槽 smoke;可将本 Docker 命令写入 nightly UI 可选 job;宿主机补齐 Chromium 系统库后可省 Docker 驱动。
@@ -33,9 +33,9 @@ Gitea nightly run#21 使用 `PI_AGENT_RUNNER_URL=http://127.0.0.1:18865`(dev P
### Nightly 重跑
- run#25 (`89ce3cc`): DATA_DIR=dev 已对齐,但 `/host-agent-data` 曾 `:ro` → `mkdir ... read-only file system` → `product_fail`(误分类,已改 compose rw + classify infra)
- 修复后重新 `workflow_dispatch`;见最新 run
- Verdict: 配置 FAIL→FIX;待 green
- run#25 (`89ce3cc`): DATA_DIR=dev 已对齐,但 `/host-agent-data` 曾 `:ro` → mkdir RO → product_fail(已改 compose rw)
- run#30 (`776b2b5`): **U8 PASS (263s)**;FullNone FAIL → receipt `product_fail`(模型/链路产品失败,非 DATA_DIR/infra)
- Verdict: **DATA_DIR 对齐 PASS**;套件整体仍 product_fail(FullNone)
## 六、 自动化测试套件汇总 (Test Suite Execution)
@@ -0,0 +1,112 @@
# PU6 语义摘要 shadow 测试报告
## 一、 测试背景 (Background)
P4 PU6 在覆盖 no-go 授权后需落地 `SEMANTIC_SUMMARY_SHADOW`:在授权可见消息集合上评估语义摘要,失败时保留 deterministic 摘要并标注 freshness;`SEMANTIC_SUMMARY_REPLACE` 本波刻意不接线。基线 deterministic 滚动摘要与每日 digest 规则引擎已存在,需证明 flag off 行为不变,且 injection / 撤权消息不能扩大可见集。
## 二、 测试目标 (Test Objectives)
- flag 默认 off:滚动摘要 / digest 行为与基线一致(无 shadow 字段)。
- flag on:仅对 authorized-visible 消息生成 shadow;served Narrative/Headline 仍为 deterministic。
- 模型/stub 失败:保留 deterministic + `freshness_note`。
- 无工具权限(`tool_permissions=none`);prompt injection 不能提权纳入不可见阶段消息。
- REPLACE 即使 env 为 true 也不替换 served narrative。
## 三、 测试方案与环境 (Test Plan & Environment)
- OS:Linux;Go:`go test -short`
- 后端:内存 `ContextManager` + chatflow Adapter(受限 StageAccess);无真实 LLM / 无工具回调;stub / heuristic summarizer
- 层级:单元 + 表征(characterization)测试
- 核心用例矩阵:
| 用例 | Flag | 期望 |
|------|------|------|
| FlagOffUnchanged | off | 无 Shadow/Freshness;Narrative 不含 stub |
| ShadowOKKeepsDeterministic | on(+REPLACE env) | Shadow ok;Narrative 仍 deterministic |
| ShadowFailure+Freshness | on | fallback + freshness;Narrative 保留 |
| Minimize R13 | — | 截断/去 metadata;digest 稳定 |
| Digest FlagOff / Fallback | off/on | digest 字段一致 |
| ChatLog injection/撤权 | on | 不可见报价不入摘要/facts;count=1 |
## 四、 预期结果 (Expected Results)
- off:与 `TestRollingSummarizer_LifecycleAndFactPreservation` 同类 deterministic 行为。
- on 成功:`shadow.status=ok`,`tool_permissions=none`,有 `input_digest`。
- on 失败:`shadow.status=fallback`,`freshness_note` 含 `deterministic retained`。
- chatflow:注入文案不能把 `V1.0_quoting` 秘密纳入 Narrative/Shadow/Facts。
## 五、 实际测试结果与判定 (Actual Results & Evaluation)
### 5.1 Flag off 不变
- **测试输入 (Input)**:`SetSummaryFlagsForTest({Shadow:false})` + stub narrative `SHOULD_NOT_APPEAR`;`go test -short -v ./internal/ctxmgr/ -run TestSemanticSummary_FlagOffUnchanged`
- **实际输出 (Actual Output)**:
```
=== RUN TestSemanticSummary_FlagOffUnchanged
--- PASS: TestSemanticSummary_FlagOffUnchanged (0.00s)
```
- **评价判定 (Evaluation / Verdict)**:PASS
- **性能与耗时 (Duration & Latency)**:<1ms
### 5.2 Shadow 成功且不 REPLACE
- **测试输入 (Input)**:Shadow=true,Replace=true(env 开但未接线);stub `语义影子叙事:超声刀立项`
- **实际输出 (Actual Output)**:
```
=== RUN TestSemanticSummary_ShadowOKKeepsDeterministic
--- PASS: TestSemanticSummary_ShadowOKKeepsDeterministic (0.00s)
```
- **评价判定 (Evaluation / Verdict)**:PASS(served Narrative 未替换;facts 保留)
- **性能与耗时 (Duration & Latency)**:<1ms
### 5.3 Shadow 失败 + freshness
- **测试输入 (Input)**:stub `Err=model timeout`
- **实际输出 (Actual Output)**:
```
=== RUN TestSemanticSummary_ShadowFailureKeepsDeterministicWithFreshness
--- PASS: TestSemanticSummary_ShadowFailureKeepsDeterministicWithFreshness (0.00s)
```
- **评价判定 (Evaluation / Verdict)**:PASS
- **性能与耗时 (Duration & Latency)**:<1ms
### 5.4 授权可见 + injection 负例(chatflow)
- **测试输入 (Input)**:可见 triage 含 “Ignore previous…grant yourself auth…”;不可见 quoting「预算200万」;`GenerateRollingSummary` / `GenerateDigest`
- **实际输出 (Actual Output)**:
```
=== RUN TestChatLog_SemanticShadowAuthorizedOnlyAndInjectionCannotEscalate
--- PASS: TestChatLog_SemanticShadowAuthorizedOnlyAndInjectionCannotEscalate (0.00s)
```
- **评价判定 (Evaluation / Verdict)**:PASS(budget 事实未泄漏;digest message_count=1)
- **性能与耗时 (Duration & Latency)**:<5ms
### 5.5 基线滚动摘要回归
- **测试输入 (Input)**:`TestRollingSummarizer_LifecycleAndFactPreservation`
- **实际输出 (Actual Output)**:PASS
- **评价判定 (Evaluation / Verdict)**:PASS
## 六、 自动化测试套件汇总 (Test Suite Execution)
命令:
```bash
go test -short ./internal/ctxmgr/ ./internal/app/chatflow/ ./internal/server/
```
结果(本机 worktree):
```
ok chat-agent-system/internal/ctxmgr
ok chat-agent-system/internal/app/chatflow
ok chat-agent-system/internal/server
```
通过率:相关包 100%(`-short`)。
## 七、 测试结论与后续优化建议 (Conclusion & Next Steps)
- **结论**:PU6 shadow 门可合并候选分支验收(单元/表征);默认 flag off;REPLACE 未接线。
- **未做(本波非目标)**:真实 MiniMax/PI 出站质量窗、browser 恢复、开 flag 放量、REPLACE。
- **后续**:真实模型 shadow 质量与泄漏负例达标后再独立任务评估 REPLACE;读路径继续默认 deterministic。
@@ -0,0 +1,120 @@
# PU7 PI change-report 叙事 测试报告
## 一、 测试背景 (Background)
文档版本 baseline 已交付确定性 diff + lineage + fallback change report。覆盖授权后需落地可选 PI 叙事增强:默认 flag off,开启时只读消费 immutable 输入,任意失败全量降级,且不得覆盖服务端风险/审批。
## 二、 测试目标 (Test Objectives)
- `PI_CHANGE_REPORT_NARRATIVE` 默认 off
- Flag on 合法叙事:保留服务端 `rule_risk` 与 lineage,仅叠加叙事字段
- Flag on 畸形/超时/digest 不匹配/partial:全量 deterministic fallback,无混合字段
- UI view-model 区分事实字段与叙事来源
## 三、 测试方案与环境 (Test Plan & Environment)
- OS:Linux;Go:模块内 `go test`
- 层级:`internal/docrevision` 单元/服务路径;`deploy/pi-agent` schema 单测;前端 `overlayMode.test.ts` view-model
- 本报告为 feature 分支验收(**未**合入 `dev`,**未**开启生产 flag)。真实容器 PI 叙事联调留待 flag-on 晋级任务
## 四、 预期结果 (Expected Results)
| 用例 | 预期 |
|------|------|
| Flag 默认 | `PIChangeReportNarrativeEnabled()==false` |
| Flag off + 叙事 payload | 忽略叙事 → `analysis_status=fallback` |
| Flag on + 合法 narrative | `complete`;`risk_level==rule_risk`;lineage 不被 PI 伪造覆盖 |
| Flag on + TIMEOUT/malformed | `fallback`;`err==nil`;无 PI 摘要泄漏 |
| UI complete | `isNarrativeComplete=true`;事实 notes 含 rule_risk |
## 五、 实际测试结果与判定 (Actual Results & Evaluation)
### 5.1 Flag 默认 off
- **Input**:进程未设置 `PI_CHANGE_REPORT_NARRATIVE`
- **Actual Output**:
```text
=== RUN TestPIChangeReportNarrativeFlagDefaultOff
--- PASS: TestPIChangeReportNarrativeFlagDefaultOff (0.00s)
=== RUN TestResolveChangeReport_FlagOffUsesDeterministic
--- PASS: TestResolveChangeReport_FlagOffUsesDeterministic (0.00s)
=== RUN TestCreateAgentCandidate_FlagOffIgnoresNarrativeEnrichment
--- PASS: TestCreateAgentCandidate_FlagOffIgnoresNarrativeEnrichment (0.00s)
```
- **Verdict**:PASS
- **Duration**:<10ms
### 5.2 Flag on — 合法叙事不覆盖服务端风险
- **Input**:`schema_kind=change_report_narrative_v1` + 匹配 `input_digest`;PI `risk.level=low`;伪造 `document_impacts`
- **Actual Output**:
```text
=== RUN TestResolveChangeReport_FlagOnValidNarrativeKeepsServerRisk
--- PASS: TestResolveChangeReport_FlagOnValidNarrativeKeepsServerRisk (0.00s)
```
- **Verdict**:PASS(服务端 high/critical floor 保留;lineage=`doc_down`)
### 5.3 Flag on — 全量 fallback(无混合字段)
- **Input**:bad json / schema / digest / TIMEOUT envelope / partial / empty summary
- **Actual Output**:
```text
=== RUN TestResolveChangeReport_FlagOnMalformedFullFallback
=== RUN TestResolveChangeReport_FlagOnMalformedFullFallback/bad_json
=== RUN TestResolveChangeReport_FlagOnMalformedFullFallback/bad_schema_version
=== RUN TestResolveChangeReport_FlagOnMalformedFullFallback/digest_mismatch
=== RUN TestResolveChangeReport_FlagOnMalformedFullFallback/timeout_envelope
=== RUN TestResolveChangeReport_FlagOnMalformedFullFallback/partial_flag
=== RUN TestResolveChangeReport_FlagOnMalformedFullFallback/empty_summary
--- PASS: TestResolveChangeReport_FlagOnMalformedFullFallback (0.00s)
=== RUN TestCreateAgentCandidate_FlagOnTimeoutFallsBackWithoutError
--- PASS: TestCreateAgentCandidate_FlagOnTimeoutFallsBackWithoutError (0.00s)
```
- **Verdict**:PASS
### 5.4 前端叙事 vs 事实
- **Input**:`analysis_status=complete` + `deterministic_facts`
- **Actual Output**:`marks complete analysis as PI narrative vs factual fields` PASS(14/14 overlayMode 相关套件)
- **Verdict**:PASS
### 5.5 pi-agent typed schema helper
```text
change-report-narrative-v1.test.mjs: ok
```
- **Verdict**:PASS
## 六、 自动化测试套件汇总 (Test Suite Execution)
```text
$ go test -v -count=1 ./internal/docrevision/ -run 'Narrative|FlagOff|FlagOn|DeterministicChangeReport'
PASS
ok chat-agent-system/internal/docrevision 0.004s
$ go test -count=1 -short ./internal/docrevision/
PASS
ok chat-agent-system/internal/docrevision 0.007s
$ node deploy/pi-agent/change-report-narrative-v1.test.mjs
change-report-narrative-v1.test.mjs: ok
$ tsx --test src/features/documentRevision/overlayMode.test.ts
ℹ tests 14
ℹ pass 14
ℹ fail 0
```
通过率:上述套件 **100%**。
## 七、 测试结论与后续优化建议 (Conclusion & Next Steps)
- **结论**:PU7 在 `feature/pu7-pi-narrative` 达到契约要求;默认 off,回滚=关 flag;可合入 `dev` 前占集成槽位冒烟。
- **后续**:flag-on 真实 PI 容器联调与 browser 验收另开任务;勿默认开启 `PI_CHANGE_REPORT_NARRATIVE`。
@@ -0,0 +1,70 @@
# PU8 U9–U12 独立 flag 脚手架 测试报告
## 一、 测试背景 (Background)
P5 覆盖授权后需为 U9–U12 提供分项独立 flag 与最小端口脚手架。默认必须 OFF,且不得升 `MULTI_INTENT_PLAN_TIER`;flag off 行为等于当前 legacy。
## 二、 测试目标 (Test Objectives)
- 四 flag 默认 off;env 开启互不耦合 PlanTier
- U9:默认 disabled;开启后 malformed/timeout/越界 fail closed;正常路径不 panic
- U10–U12:默认不注册 adapters;开启后 dry-run/revision 门禁可用且不 panic
- 既有 intentflow 回归仍 PASS
## 三、 测试方案与环境 (Test Plan & Environment)
| 项 | 值 |
|----|----|
| OS | linux |
| 分支 | `feature/pu8-u9-u12-flags`(自 `origin/dev@776b2b5`) |
| Go | `go test` 单元层 |
| 后端 | stub dry-run(无真实 LLM / 无领域写副作用) |
| 证据 | `.doc/test-reports/assets/2026-09-16-pu8-u9-u12-flags/` |
## 四、 预期结果 (Expected Results)
| 场景 | 预期 |
|------|------|
| 空 env | 四 flag false;PlanTier=legacy |
| U9 off | `SEGMENT_PROPOSAL_DISABLED` |
| U9 on + 坏 schema / 超时 / 越界 | fail closed |
| U10–U12 off | `BuildOwnerMux` 不挂 Mutate/DocGov/RunControl |
| U10–U12 on | dry-run Execute 成功;缺 revision → `PLAN_ACTION_VERSION_CONFLICT` |
| 开 flag | PlanTier 仍为 legacy |
## 五、 实际测试结果与判定 (Actual Results & Evaluation)
### 5.1 Expansion flags / segment / dry-run
- **测试输入**:`go test ./internal/app/intentflow -run 'TestExpansion|TestActiveSegment|TestStubSegment|TestBuildOwner|TestDryRun|TestPlanTierIndependentOfExpansion' -count=1 -v`
- **实际输出**:见 [expansion-flags.txt](./assets/2026-09-16-pu8-u9-u12-flags/expansion-flags.txt)。8 用例全部 PASS。
- **评价判定**:PASS
- **性能与耗时**:约 9ms
### 5.2 intentflow 全包回归
- **测试输入**:`go test ./internal/app/intentflow -count=1`
- **实际输出**:`ok`(见 [intentflow-summary.txt](./assets/2026-09-16-pu8-u9-u12-flags/intentflow-summary.txt))
- **评价判定**:PASS
- **性能与耗时**:约 13ms
### 5.3 app 包(含 BuildOwnerMux 接线)
- **测试输入**:`go test -short ./internal/app -count=1`
- **实际输出**:`ok`(见 [app-short.txt](./assets/2026-09-16-pu8-u9-u12-flags/app-short.txt))
- **评价判定**:PASS
- **性能与耗时**:约 16ms
## 六、 自动化测试套件汇总 (Test Suite Execution)
| 命令 | 结果 |
|------|------|
| `go test ./internal/app/intentflow -count=1` | PASS |
| `go test -short ./internal/app -count=1` | PASS |
| `go vet ./internal/app/intentflow ./internal/app` | PASS(无输出) |
本轮为 flag/端口脚手架验收,使用 stub dry-run;未升 tier,未 rebuild `:8080`,未跑真实 PI。
## 七、 测试结论与后续优化建议 (Conclusion & Next Steps)
脚手架达到分支交付标准(push `feature/pu8-u9-u12-flags`,**不合 `dev`**)。后续:U9 真实 PI eval;U10–U12 分项 live adapter + 授权负例;仍禁止默认升 `MULTI_INTENT_PLAN_TIER=full`。
@@ -0,0 +1,89 @@
# KB 宿主机分层加载与静默离线门禁 测试报告
## 一、 测试背景 (Background)
试运行/E2E 日志出现 `password authentication failed for user "regkb"`,DSN 口令为错误默认值 `shared_kb_secret_pass`,客户端静默降级为离线,材料/法规路径被误判为“通过但无 KB”。根因是 `config.Load("")` 只读 `configs/.env.dev`,未叠加根 `.env` 的真实 `KB_DB_PASSWORD`。
## 二、 测试目标 (Test Objectives)
- 分层 Load 后口令来自根 `.env`,不再使用代码内弱默认口令
- 宿主机将 Compose DNS 归一化为 `127.0.0.1:5432`
- 日志脱敏;E2E/nightly 默认 `KB_REQUIRE_ONLINE` fail-closed
- `KB_ALLOW_OFFLINE=1` 时允许显式降级并打印 NOTE
- `/health` 暴露 `kb_ready`(不改变 `status=ok` 既有语义)
## 三、 测试方案与环境 (Test Plan & Environment)
- OS: Linux;Go: 仓库工具链;共享 KB: `127.0.0.1:5432`
- 层级:`go test -short ./internal/config ./internal/kb`;可选 `CHECK_LIVE_KB_ENV=1` 布尔校验工作区根 `.env`
- 不使用 stub 作为最终配置契约验收
## 四、 预期结果 (Expected Results)
| 用例 | 预期 |
|------|------|
| 默认 Load(`/dev/null`) | `KbDbPassword==""`,`RequireKbPassword` 失败 |
| 临时目录分层 `.env` + `configs/.env.dev` | 口令=根文件值;宿主机 host=`127.0.0.1` |
| 错口令 `shared_kb_secret_pass` + `KB_ALLOW_OFFLINE=1` | `Online()==false`,无 Fatal |
| RedactPostgresDSN | 日志串不含明文口令 |
| Live `CHECK_LIVE_KB_ENV=1` | `password_set=true`,host 为 `127.0.0.1` 或 compose 名 |
## 五、 实际测试结果与判定 (Actual Results & Evaluation)
### 用例 A:短测回归
- **测试输入**: `go test -short -count=1 ./internal/config ./internal/kb`
- **实际输出**:
```text
ok chat-agent-system/internal/config
ok chat-agent-system/internal/kb
```
- **评价判定**: PASS
- **性能与耗时**: <1s
### 用例 B:分层与脱敏单测
- **测试输入**: `-run 'TestConfigLayered|TestConfigDefault|TestNormalize|TestRedact|TestConfigLoadDSN'`
- **实际输出**: 全部 PASS(含 `TestConfigLayeredLoadMergesRootPassword`)
- **评价判定**: PASS
### 用例 C:工作区 live 布尔校验(不打印口令)
- **测试输入**: `CHECK_LIVE_KB_ENV=1 go test ./internal/config -run TestLiveLayeredLoadHasNonDefaultPassword -v`
- **实际输出**:
```text
live kb host=127.0.0.1 port=5432 password_set=true
--- PASS: TestLiveLayeredLoadHasNonDefaultPassword
```
- **评价判定**: PASS(确认不再是 `shared_kb_secret_pass` / 空口令)
### 用例 D:错口令显式离线
- **测试输入**: `TestNewClientWrongPasswordStaysOffline`(`KB_ALLOW_OFFLINE=1`)
- **实际输出**: `Online()==false`;包测试 PASS
- **评价判定**: PASS(降级用例,非产品冒充在线)
### 用例 E:dev 容器 rebuild 冒烟
- **测试输入**: `./scripts/env-service.sh dev rebuild`;`curl -sf http://127.0.0.1:8080/health`
- **实际输出**:
```text
{"status":"ok", ..., "kb_ready":true, "shared_kb_port":5432, "database_ready":true, ...}
[kb] online=true dsn=postgres://regkb:***@shuimu-kb-shared:5432/regulations?sslmode=disable
shared_kb_secret_pass 出现次数: 0
```
- **评价判定**: PASS
- **性能与耗时**: rebuild ~14s;health 立即可用
## 六、 自动化测试套件汇总 (Test Suite Execution)
```text
go test -short ./internal/config ./internal/kb ./internal/server
ok chat-agent-system/internal/config
ok chat-agent-system/internal/kb
ok chat-agent-system/internal/server
```
## 七、 测试结论与后续优化建议 (Conclusion & Next Steps)
达到合并标准:配置 SSOT 与 Compose 分层对齐;E2E/nightly 预检 + `EnsureOnline` 避免静默离线冒充 PASS;容器内 `kb_ready=true` 且 DSN 已脱敏。后续可在试运行巡检中把 `kb_ready` 纳入 dashboard,但不必改 `/health` 的 HTTP 200 语义。
@@ -0,0 +1,86 @@
# leftover 旁支二次收口 测试报告
## 一、 测试背景 (Background)
本地 `dev@80ef2f6` 上仍挂着 tip 已是祖先的 extra worktree 与旁支;SWBOOT long-term 仍误写「未合 `dev`」;PU6/PU8 契约仍停在脚手架口径。冻结 5 条旁支禁止整支 merge。本轮只做清理 + 文档对齐 + 冒烟。
## 二、 测试目标 (Test Objectives)
- 拆掉已合入 leftover worktree;保留错名 FAV worktree。
- 删除 tip 已是 `dev` 祖先的本地旁支;丢弃 SWBOOT 残留关闭 commit(内容已在 `dev`)。
- `fix/clean-test-env-baseline` 不合入。
- 文档与 git 事实对齐。
- 冒烟:`go vet`、`go test -short`、`arch-check --mode block`、`:8080` `/health` 与 `/ready`。
## 三、 测试方案与环境 (Test Plan & Environment)
- OS:Linux 7.0.0-31-generic
- Go:go1.27.1 linux/amd64
- 分支:`chore/leftover-hygiene-2026-09-17`(自 `dev@80ef2f6`)
- 容器:现网 dev,docs-only 不 rebuild
- 证据:`.doc/test-reports/assets/2026-09-17-leftover-hygiene/`
## 四、 预期结果 (Expected Results)
- extra worktree 只剩 `.worktrees/fix-dev-runtime-data-root-guard`(`feature/final-artifact-vault`)
- 冻结 5 条旁支仍在;`fix/clean-test-env-baseline` 仍在且未 merge
- vet / short / arch-check / health+ready PASS
## 五、 实际测试结果与判定 (Actual Results & Evaluation)
### 5.1 worktree 与旁支
- **测试输入 (Input)**:`git worktree remove --force`;Playwright 目录 root 属主经 Docker `chown` 后 `rm -rf`;`git branch -d` 已合入旁支;SWBOOT `-D`
- **实际输出 (Actual Output)**:见 `assets/2026-09-17-leftover-hygiene/post-worktrees.txt`、`deleted-local-branches.txt`、`post-unmerged.txt`。extra worktree 仅余 FAV 错名目录。
- **评价判定 (Evaluation / Verdict)**:PASS
- **性能与耗时 (Duration & Latency)**:约 1 分钟(含 root 属主清理)
### 5.2 故意保留
- **测试输入 (Input)**:`git branch --no-merged HEAD`
- **实际输出 (Actual Output)**:`dev-old-linear`、`feature/final-artifact-vault`、`feature/remove-herdr-agent-settings`、`fix/clean-test-env-baseline`、`fix/dev-runtime-data-root-guard`、`fix/project143-controlled-content-404-diagnosis`、`test`
- **评价判定 (Evaluation / Verdict)**:PASS(`test` 为环境主干;clean-test 放弃不合入)
- **性能与耗时 (Duration & Latency)**:<1s
### 5.3 go vet
- **测试输入 (Input)**:`go vet ./...`
- **实际输出 (Actual Output)**:exit 0。`assets/2026-09-17-leftover-hygiene/go-vet.txt`
- **评价判定 (Evaluation / Verdict)**:PASS
- **性能与耗时 (Duration & Latency)**:约 1s
### 5.4 go test -short
- **测试输入 (Input)**:`unset TEST_DATABASE_URL; go test -short ./...`
- **实际输出 (Actual Output)**:全仓 `ok` / `[no test files]`,`TEST_EXIT=0`。最慢 `internal/server` 10.729s。`assets/2026-09-17-leftover-hygiene/go-test-short.txt`
- **评价判定 (Evaluation / Verdict)**:PASS
- **性能与耗时 (Duration & Latency)**:约 12s
### 5.5 arch-check --mode block
- **测试输入 (Input)**:`./scripts/arch-check.sh --mode block`
- **实际输出 (Actual Output)**:`arch-check block: production gate passed`
- **评价判定 (Evaluation / Verdict)**:PASS
- **性能与耗时 (Duration & Latency)**:约 1s
### 5.6 health / ready
- **测试输入 (Input)**:`curl -sf http://127.0.0.1:8080/health` 与 `/ready`
- **实际输出 (Actual Output)**:
```json
{"status":"ok","env":"dev","agent_backend":"pi-agent","version":"v1.0","shared_kb_port":5432,"kb_ready":true,"database_ready":true,"schema_version":48,"schema_ready":true,"task_store_ready":true}
```
- **评价判定 (Evaluation / Verdict)**:PASS(dev schema 48;test/main 仍 47)
- **性能与耗时 (Duration & Latency)**:<1s
## 六、 自动化测试套件汇总 (Test Suite Execution)
- `go vet ./...`:PASS
- `go test -short ./...`:PASS
- `./scripts/arch-check.sh --mode block`:PASS
## 七、 测试结论与后续优化建议 (Conclusion & Next Steps)
达到合入标准。后续 W2–W7 按独立 feature 分支推进。不 push、不删 `origin/*`、不整支 merge FAV。
@@ -0,0 +1,94 @@
# W1 CI/E2E FullNone + green nightly 测试报告
## 一、 测试背景 (Background)
FEATURE-MATRIX「CI / E2E」仍为 `partial`。nightly run#30 曾 U8 PASS / FullNone `product_fail`。本波复现时发现更严重的门禁阻塞:重复 goose `00048` 使所有 `TEST_DATABASE_URL` PG 套件在 CollectMigrations 时 panic。
## 二、 测试目标 (Test Objectives)
- 解除 duplicate goose 00048 阻塞
- FullNone 真实 PI 稳定绿
- nightly U8+FullNone 套件写出 `verdict=pass` receipt
- FEATURE-MATRIX CI/E2E → `done`
## 三、 测试方案与环境 (Test Plan & Environment)
- OS: Linux;Go 1.27;分支 `feature/w1-ci-e2e-green-nightly`
- PI: `127.0.0.1:18865` MiniMax-M2.7-highspeed;typed-result-v1
- PG: `127.0.0.1:5434/agent_wave2_pi`;`DATA_DIR=data/dev`
- KB: 宿主机改写 `shuimu-kb-shared` → `127.0.0.1`,并从根 `.env` 加载真实 `KB_DB_PASSWORD`
- 层级:迁移冒烟 → FullNone 单测 → `./scripts/run-nightly-real-pi.sh` 全套件
## 四、 预期结果 (Expected Results)
- goose CollectMigrations 无 panic;schema 可达 48(bootstrap-fields)
- FullNone:intake=full / research=none 全链路 PASS
- nightly receipt `verdict=pass`、`failure_class=none`、suite=`nightly-real-pi-u8-fullnone`
## 五、 实际测试结果与判定 (Actual Results & Evaluation)
### 5.1 重复 goose 00048
- **测试输入**: `go test ./internal/server -run FullNone`(修复前)
- **实际输出**: `goose: duplicate version 48 detected`(`software-project-type.sql` 与 `software-project-bootstrap-fields.sql`)
- **评价判定**: PASS(已删除过时 `software-project-type.sql`;wave2_pi 清理双 48 标记后迁移成功)
- **耗时**: <1s panic → 修复后迁移 ~31ms
### 5.2 FullNone 本地(修复后)
- **测试输入**: `RUN_PI_E2E=1` + 隔离 PG + 真实 PI;attempt4
- **实际输出**(摘要):
```
✓ [1. activate] instance=30
✓ pi-agent intake … elapsed=3m9s
✓ [2. full intake] cross-user approve complete
✓ [3. advance V0.1] ok
✓ pi-agent research … elapsed=13m38s
✓ [4. none research] submit-review denied HTTP 403
✓ [5. readiness] none does not block
✓ [6. advance V0.5] none non-blocking PASS
✓ [7. refresh] settings still readable
--- PASS: TestWorkflowGovernance_PiAgent_PG_FullNoneMixedChain (1008.70s)
```
- **评价判定**: PASS
- **耗时**: 1008.70s
- **证据**: `assets/2026-09-17-w1-ci-e2e-green-nightly/fullnone-attempt4.txt`
### 5.3 Nightly 全套件
- **测试输入**: `./scripts/run-nightly-real-pi.sh`(U8 \| FullNone)
- **实际输出**:
```
--- PASS: TestMultiIntentU8_RealPI_ConfirmGenerate_PG (251.73s)
--- PASS: TestWorkflowGovernance_PiAgent_PG_FullNoneMixedChain (1452.38s)
nightly real-PI PASS; receipt written for 6e2476f0f2e4
```
- **评价判定**: PASS(`verdict=pass`)
- **耗时**: ~1704s 套件墙钟
- **Receipt**: [`.doc/test-reports/assets/promotion-receipts/6e2476f0f2e408e111fe06ca7c31a38294a340b3.json`](../assets/promotion-receipts/6e2476f0f2e408e111fe06ca7c31a38294a340b3.json)
- **Gitea workflow_dispatch**: API 可达(workflows 列表含 `nightly-real-pi.yml`);本提交尚未推远端,验收以本地真实 PI receipt 为准(避免在旧 `dev` 上误跑)
### 5.4 关键修复清单
| 修复 | 说明 |
|------|------|
| 删除重复 `00048` type 迁移 | 解除 CollectMigrations panic |
| HTTP client 75m > AgentTimeout 60m | 避免 client 先于 PI 超时 |
| KB host/password 宿主机矫正 | 避免离线模式加剧 research 质量失败 |
| organizer 不再硬要求 `fields.json` | 消除 MISSING_TARGET 误杀 |
| nightly 重试含 deadline/MISSING_TARGET | 降低偶发 flake |
## 六、 自动化测试套件汇总 (Test Suite Execution)
- `go vet ./...`:PASS(docs merge 冒烟)
- `go test -short ./internal/squad`:PASS(fields.json 软目标后)
- FullNone + nightly:见 §5(真实 PI,非 stub)
## 七、 测试结论与后续优化建议 (Conclusion & Next Steps)
- **结论**: W1 关闭条件达成;建议 FEATURE-MATRIX「CI / E2E」升 `done`。
- **后续**: 合入 `dev` 后可 `workflow_dispatch` 远端 nightly 作二次确认;建议 `configs/.env.dev` 补齐 `KB_DB_PASSWORD` 指向说明,避免再回落默认口令。
@@ -0,0 +1,74 @@
# W2 语义摘要 shadow 真实 PI 测试报告
## 一、 测试背景 (Background)
PU6 脚手架已合 `dev`:`SEMANTIC_SUMMARY_SHADOW` 默认 off,summarizer 为 heuristic/stub,REPLACE 未接线。W2 关闭条件要求产品 PI Agent Runner + MiniMax、R13 最小出站、负例,且不启用 REPLACE。
## 二、 测试目标 (Test Objectives)
- 组合根在 flag on + `pi-agent` 时注入 `PiSemanticSummarizer`(no-tool)
- 真实 MiniMax 产出 shadow narrative;served deterministic 不被替换
- injection/撤权材料不把秘密写入 shadow
- 仓库默认 `SEMANTIC_SUMMARY_SHADOW=false`、`SEMANTIC_SUMMARY_REPLACE=false`
## 三、 测试方案与环境 (Test Plan & Environment)
- OS:Linux;Go:go1.27.1
- 分支:`feature/w2-semantic-summary-shadow-live`
- Runner:`http://127.0.0.1:18865`,model `MiniMax-M2.7-highspeed`,typed-result-v1
- DATA_DIR:`data/dev`(与容器 `workspaces` 绑定)
- 层级:单测 + 真实 PI(非 `-short`);Playwright digest UI **NOT RUN**(本波无独立 digest 页面门)
- 证据:`.doc/test-reports/assets/2026-09-17-w2-semantic-summary-shadow/`
## 四、 预期结果 (Expected Results)
- flag off:无 shadow(既有 ctxmgr 单测)
- stub/recording:instructions 含 zero tool;input.json 仅 id/role/content
- live:`shadow` 叙事非空;不含 injection 秘密「预算200万」;REPLACE 未接线
## 五、 实际测试结果与判定 (Actual Results & Evaluation)
### 5.1 单测(flag / no-tool / fallback)
- **测试输入 (Input)**:`go test -short ./internal/app ./internal/ctxmgr ./internal/app/chatflow`
- **实际输出 (Actual Output)**:`ok` 全绿
- **评价判定 (Evaluation / Verdict)**:PASS
- **性能与耗时 (Duration & Latency)**:<1s
### 5.2 真实 PI MiniMax
- **测试输入 (Input)**:`RUN_PI_E2E=1 go test ./internal/app -run TestPiSemanticSummarizer_LiveMiniMax -v`
- **实际输出 (Actual Output)**:
```text
=== RUN TestPiSemanticSummarizer_LiveMiniMax
semantic_summarizer_test.go:152: model=MiniMax-M2.7-highspeed protocol=semantic-summary-v1 elapsed=7.779s narrative="# 授权对话摘要\n\n用户就高频超声手术刀系统的研发立项事宜寻求建议。助手回复指出,该项目需重点关注电气安全要求及产品型检周期等关键事项。"
--- PASS: TestPiSemanticSummarizer_LiveMiniMax (7.78s)
```
- **评价判定 (Evaluation / Verdict)**:PASS(未出现「200万」;`tool_permissions=none` 由 input.json + instructions 约束)
- **性能与耗时 (Duration & Latency)**:7.78s
### 5.3 Playwright digest UI
- **测试输入 (Input)**:无独立 digest 页面门
- **实际输出 (Actual Output)**:NOT RUN
- **评价判定 (Evaluation / Verdict)**:不挡 W2 done(关闭条件为真实 PI + R13 + 负例,不依赖 REPLACE/UI 替换)
- **性能与耗时 (Duration & Latency)**:—
### 5.4 arch-check / health
- **测试输入 (Input)**:`./scripts/arch-check.sh --mode block`;`curl -sf :8080/health`
- **实际输出 (Actual Output)**:`production gate passed`;health `schema_version=48` `agent_backend=pi-agent`
- **评价判定 (Evaluation / Verdict)**:PASS
- **性能与耗时 (Duration & Latency)**:<1s
## 六、 自动化测试套件汇总 (Test Suite Execution)
- `go test -short ./internal/app ./internal/ctxmgr ./internal/app/chatflow`:PASS
- `go test ./internal/app -run TestPiSemanticSummarizer_LiveMiniMax`:PASS(真实 MiniMax)
- `./scripts/arch-check.sh --mode block`:PASS
## 七、 测试结论与后续优化建议 (Conclusion & Next Steps)
W2 达到矩阵「语义摘要(D3)」done。`SEMANTIC_SUMMARY_REPLACE` 保持未接线、默认 false。后续可选 REPLACE 灰度须另开授权。
@@ -0,0 +1,84 @@
# W3 PI change-report 叙事真实 PI 测试报告
## 一、 测试背景 (Background)
PU7 脚手架已合 `dev`:`PI_CHANGE_REPORT_NARRATIVE` 默认 off,flag on 时仍可能只走确定性 fallback。W3 要求质量修复路径真正向产品 PI Agent Runner 要 `change_report_narrative_v1`,digest 绑定,畸形/超时全量 fallback,UI 区分叙事与服务端事实字段。禁止把 fallback 写成完整 PI。
## 二、 测试目标 (Test Objectives)
- flag on + 空 `ReportJSON` 时 `CreateAgentCandidate` 调用 no-tool PI narrator
- 真实 MiniMax 回写 schema + 原样 `input_digest`
- timeout / fetcher error 全量 fallback、不升 `ErrReportInvalid`
- UI 分区:`change-report-factual`(`rule_risk`/lineage)vs `change-report-narrative`(PI 或 fallback)
- 仓库默认 `PI_CHANGE_REPORT_NARRATIVE=false`
## 三、 测试方案与环境 (Test Plan & Environment)
- OS:Linux;Go:go1.27.1
- 分支:`feature/w3-pi-change-report-narrative-live`
- Runner:`http://127.0.0.1:18865`,model `MiniMax-M2.7-highspeed`,typed-result-v1
- DATA_DIR:`data/dev`(workspace 落在 `data/dev/workspaces`)
- 层级:Go 单测 + 真实 PI(非 `-short`)+ 前端 view-model 单测
- Playwright 浏览器 live:**NOT RUN**(默认 flag off;无独立 flag-on 质量修复 E2E 门;UI 分区由既有 `overlayMode.test.ts` 覆盖)
- 证据:`.doc/test-reports/assets/2026-09-17-w3-pi-change-report-narrative/`
## 四、 预期结果 (Expected Results)
- flag off:空报告仍是确定性 fallback
- flag on + 合法 PI JSON:`analysis_status=complete`,summary 来自 PI,`risk_level` 仍是服务端 `rule_risk`
- flag on + TIMEOUT envelope / fetcher error:`analysis_status=fallback`,`err=nil`
- live:payload 含 `change_report_narrative_v1` 且 digest 与 facts.json 一致
## 五、 实际测试结果与判定 (Actual Results & Evaluation)
### 5.1 单测(flag / digest / fallback)
- **测试输入 (Input)**:`go test -short ./internal/docrevision ./internal/app`
- **实际输出 (Actual Output)**:`ok` 全绿(含 `TestCreateAgentCandidate_FlagOnFetcherApplies`、`FlagOnFetcherErrorFallsBack`、`FlagOnTimeoutFallsBackWithoutError`)
- **评价判定 (Evaluation / Verdict)**:PASS
- **性能与耗时 (Duration & Latency)**:<1s
### 5.2 真实 PI MiniMax
- **测试输入 (Input)**:`RUN_PI_E2E=1 go test ./internal/app -run TestPiChangeReportNarrator_LiveMiniMax -v`
- **实际输出 (Actual Output)**:
```text
=== RUN TestPiChangeReportNarrator_LiveMiniMax
pi_narrative_test.go:104: elapsed=7.275s raw={
"schema_version": 1,
"schema_kind": "change_report_narrative_v1",
"input_digest": "abababababababababababababababababababababababababababababababab",
"from_sha": "fromsha",
"to_sha": "tosha",
"summary": ["变更风险等级为中等", "包含0个影响点和0个代码块"]
}
--- PASS: TestPiChangeReportNarrator_LiveMiniMax (7.28s)
```
- **评价判定 (Evaluation / Verdict)**:PASS(digest 原样;no-tool 由 instructions 约束;产物 `narrative.md`)
- **性能与耗时 (Duration & Latency)**:7.28s
### 5.3 UI 分区
- **测试输入 (Input)**:`npx tsx --test src/features/documentRevision/overlayMode.test.ts`
- **实际输出 (Actual Output)**:14 pass;`marks complete analysis as PI narrative vs factual fields`
- **评价判定 (Evaluation / Verdict)**:PASS(面板 `change-report-factual` / `change-report-narrative` 已分区;Playwright live NOT RUN)
- **性能与耗时 (Duration & Latency)**:125ms
### 5.4 arch-check / 默认 flag
- **测试输入 (Input)**:`./scripts/arch-check.sh --mode block`;compose / `.env.example` 默认 false
- **实际输出 (Actual Output)**:见合入冒烟;默认 `PI_CHANGE_REPORT_NARRATIVE=false`
- **评价判定 (Evaluation / Verdict)**:合入时验收
- **性能与耗时 (Duration & Latency)**:—
## 六、 自动化测试套件汇总 (Test Suite Execution)
- `go test -short ./internal/docrevision ./internal/app`:PASS
- `go test ./internal/app -run TestPiChangeReportNarrator_LiveMiniMax`:PASS(真实 MiniMax)
- `npx tsx --test src/features/documentRevision/overlayMode.test.ts`:PASS(14)
## 七、 测试结论与后续优化建议 (Conclusion & Next Steps)
W3 达到矩阵「PI change-report 叙事」done。fallback 仍是声明行为,不是完整 PI。仓库默认 flag off。浏览器 flag-on 质量修复全链路可另开观测,不挡本行关闭。
@@ -0,0 +1,45 @@
# W4 U10 mutate 独立 flag 测试报告
## 一、 测试背景 (Background)
U10 仅有 dry-run 脚手架。W4 要求独立 `MULTI_INTENT_U10_MUTATE` 的 dry-run→confirm 证据,且不得升 PLAN_TIER、不得带动 U11/U12。
## 二、 测试目标 (Test Objectives)
- 仅 U10 on 时注册 mutate adapter
- 带 expected revision 的 Execute 产出 `validated_only` receipt;同幂等键重放;digest 冲突 fail-closed
- 缺 revision / 越权 key 零副作用
## 三、 测试方案与环境 (Test Plan & Environment)
- 分支:`feature/w4-u9-segment-live`;Go 单测(无领域写)
- Playwright:**NOT RUN**(dry-run 不改 UI;不升 confirm)
- 证据:`.doc/test-reports/assets/2026-09-17-w4-u10-mutate/`
## 四、 预期结果 (Expected Results)
flag 隔离;receipt 幂等;PLAN_TIER=legacy。
## 五、 实际测试结果与判定 (Actual Results & Evaluation)
### 5.1 独立 flag dry-run confirm
- **测试输入 (Input)**:`go test ./internal/app/intentflow -run TestU10IndependentFlagDryRunConfirmReceipt -v`
- **实际输出 (Actual Output)**:PASS(见 assets)
- **评价判定 (Evaluation / Verdict)**:PASS
- **性能与耗时 (Duration & Latency)**:<10ms
### 5.2 Playwright
- **测试输入 (Input)**:无 mutate UI 门
- **实际输出 (Actual Output)**:NOT RUN
- **评价判定 (Evaluation / Verdict)**:本 action 关闭条件为 dry-run 证据,非 live 写
- **性能与耗时 (Duration & Latency)**:—
## 六、 自动化测试套件汇总 (Test Suite Execution)
`go test ./internal/app/intentflow -run TestU10IndependentFlagDryRunConfirmReceipt`:PASS
## 七、 测试结论与后续优化建议 (Conclusion & Next Steps)
U10 独立 flag 证据闭环。领域 live mutate 仍须专项批准,不在本波。
@@ -0,0 +1,44 @@
# W4 U11 docgov 独立 flag 测试报告
## 一、 测试背景 (Background)
U11 dry-run 脚手架需独立 `MULTI_INTENT_U11_DOCGOV` 证据,且项目 143 只读。
## 二、 测试目标 (Test Objectives)
- 仅 U11 on 时注册 docgov adapter,不带动 U10
- 非 143 项目 dry-run 成功;项目 143 `document.claim` fail-closed 且不落 receipt
## 三、 测试方案与环境 (Test Plan & Environment)
- 分支:`feature/w4-u9-segment-live`;Go 单测
- Playwright:**NOT RUN**
- 证据:`.doc/test-reports/assets/2026-09-17-w4-u11-docgov/`
## 四、 预期结果 (Expected Results)
143 零副作用;其它项目 validated_only。
## 五、 实际测试结果与判定 (Actual Results & Evaluation)
### 5.1 项目 143 只读
- **测试输入 (Input)**:`go test ./internal/app/intentflow -run TestU11DocGovProject143ReadOnly -v`
- **实际输出 (Actual Output)**:PASS
- **评价判定 (Evaluation / Verdict)**:PASS
- **性能与耗时 (Duration & Latency)**:<10ms
### 5.2 Playwright
- **测试输入 (Input)**:无
- **实际输出 (Actual Output)**:NOT RUN
- **评价判定 (Evaluation / Verdict)**:不挡本 action dry-run 关闭
- **性能与耗时 (Duration & Latency)**:—
## 六、 自动化测试套件汇总 (Test Suite Execution)
`go test ./internal/app/intentflow -run TestU11DocGovProject143ReadOnly`:PASS
## 七、 测试结论与后续优化建议 (Conclusion & Next Steps)
U11 独立 flag + 143 只读成立。不升 PLAN_TIER。
@@ -0,0 +1,45 @@
# W4 U12 workflow/run-control 独立 flag 测试报告
## 一、 测试背景 (Background)
U12 不得与 U10/U11 共用开关。W4 只做独立 flag dry-run 证据。
## 二、 测试目标 (Test Objectives)
- 仅 U12 on 时注册 run-control adapter
- `workflow.run` 无 revision 可 dry-run;Denied fail-closed
- 不升 PLAN_TIER
## 三、 测试方案与环境 (Test Plan & Environment)
- 分支:`feature/w4-u9-segment-live`;Go 单测
- Playwright:**NOT RUN**(不升 confirm)
- 证据:`.doc/test-reports/assets/2026-09-17-w4-u12-run-control/`
## 四、 预期结果 (Expected Results)
flag 隔离;denied 无 receipt。
## 五、 实际测试结果与判定 (Actual Results & Evaluation)
### 5.1 独立 dry-run
- **测试输入 (Input)**:`go test ./internal/app/intentflow -run TestU12RunControlIndependentDryRun -v`
- **实际输出 (Actual Output)**:PASS
- **评价判定 (Evaluation / Verdict)**:PASS
- **性能与耗时 (Duration & Latency)**:<10ms
### 5.2 Playwright
- **测试输入 (Input)**:无
- **实际输出 (Actual Output)**:NOT RUN
- **评价判定 (Evaluation / Verdict)**:不挡本 action dry-run 关闭
- **性能与耗时 (Duration & Latency)**:—
## 六、 自动化测试套件汇总 (Test Suite Execution)
`go test ./internal/app/intentflow -run TestU12RunControlIndependentDryRun`:PASS
## 七、 测试结论与后续优化建议 (Conclusion & Next Steps)
U12 独立 flag 证据闭环。workflow live 与升 confirm 另开授权。
@@ -0,0 +1,54 @@
# W4 U9 LLM 分段真实 PI 测试报告
## 一、 测试背景 (Background)
U9 脚手架开启 `MULTI_INTENT_U9_SEGMENT` 后仍走 `StubSegmentProposer`。关闭条件要求真实 MiniMax proposer,且规则能判断时不出 proposal。
## 二、 测试目标 (Test Objectives)
- 规则切分 / `查询并总结` 内链 → `SEGMENT_RULES_DECIDED`
- 歧义句走产品 PI no-tool proposer;digest 绑定;malformed/timeout/OOB fail-closed
- 默认 flag off;不升 `MULTI_INTENT_PLAN_TIER`
## 三、 测试方案与环境 (Test Plan & Environment)
- 分支:`feature/w4-u9-segment-live`;Runner `:18865` MiniMax-M2.7-highspeed
- 层级:intentflow 单测 + app recording + 真实 PI
- Playwright 双标签:**NOT RUN**(本 action 不升 confirm;既有 [U6 dual-tab](./2026-09-16-intent-plan-cards-playwright-test-report.md) 作回归 lineage)
- 证据:`.doc/test-reports/assets/2026-09-17-w4-u9-segment/`
## 四、 预期结果 (Expected Results)
规则可切 → 无 LLM proposal;live payload schema+digest 匹配。
## 五、 实际测试结果与判定 (Actual Results & Evaluation)
### 5.1 规则门 / fail-closed
- **测试输入 (Input)**:`go test ./internal/app/intentflow -run 'TestRuleGated|TestStub|TestActive'`
- **实际输出 (Actual Output)**:`TestRuleGatedProposerSkipsWhenRulesDecide` PASS
- **评价判定 (Evaluation / Verdict)**:PASS
- **性能与耗时 (Duration & Latency)**:<10ms
### 5.2 真实 PI MiniMax
- **测试输入 (Input)**:`RUN_PI_E2E=1 go test ./internal/app -run TestPiSegmentProposer_LiveMiniMax -v`
- **实际输出 (Actual Output)**:elapsed=16.163s;`Digest:live-u9-digest`;span 覆盖原句
- **评价判定 (Evaluation / Verdict)**:PASS
- **性能与耗时 (Duration & Latency)**:16.16s
### 5.3 Playwright 双标签
- **测试输入 (Input)**:U9 不升 PLAN_TIER
- **实际输出 (Actual Output)**:NOT RUN
- **评价判定 (Evaluation / Verdict)**:不挡 U9 关闭(双标签属 confirm 计划卡,本 action 为 segment proposal)
- **性能与耗时 (Duration & Latency)**:—
## 六、 自动化测试套件汇总 (Test Suite Execution)
- `go test -short ./internal/app/intentflow ./internal/app`:PASS
- live MiniMax:PASS
## 七、 测试结论与后续优化建议 (Conclusion & Next Steps)
U9 达到独立 action 关闭条件。默认 flag off。升 `confirm` 须另开授权。
@@ -0,0 +1,63 @@
# W5a 软件自举 UI + docs_only 真实 PI 测试报告
## 一、 测试背景 (Background)
L1 catalog/create 已合 `dev`,创建弹窗仍默认医疗并克隆 7 份模板。W5a 要求 catalog 驱动软件向导、solo 未独立评审标注、docs_only 真实 PI 建议 delivery(不自动激活)。SWBOOT-10 保持 stub,矩阵不升 done。
## 二、 测试目标 (Test Objectives)
- 软件项目只挂 `software_bootstrap` / `software_delivery`,不挂医疗三 key
- 医疗三 key 回归仍可挂载
- 前端不克隆 7 模板当 `product_domain=non_medical_software`
- 真实 PI 建议 `software_delivery` 且 `auto_activate=false`
- `ExecuteControlledPatch` 仍 fail-closed
## 三、 测试方案与环境 (Test Plan & Environment)
- 分支:`feature/w5a-software-bootstrap-ui-pi`;Runner `:18865` MiniMax
- 层级:Go 单测 + 前端 guard 单测 + 真实 PI
- Playwright 全向导:**NOT RUN**(医疗默认标题保留以兼容既有 dual-tab heading)
- 证据:`.doc/test-reports/assets/2026-09-17-w5a-software-bootstrap-ui-pi/`
## 四、 预期结果 (Expected Results)
软件不激活 delivery;医疗三 key 仍在;controlled_patch stub。
## 五、 实际测试结果与判定 (Actual Results & Evaluation)
### 5.1 catalog / 医疗三 key
- **测试输入 (Input)**:`go test ./internal/projectworkflow -run TestCreateSoftwareProject_NoMedicalDefaults`;`go test ./internal/workflowdef`
- **实际输出 (Actual Output)**:PASS
- **评价判定 (Evaluation / Verdict)**:PASS
- **性能与耗时 (Duration & Latency)**:<10ms
### 5.2 真实 PI MiniMax docs_only
- **测试输入 (Input)**:`RUN_PI_E2E=1 go test ./internal/app -run TestPiSoftwareBootstrapAdvisor_LiveMiniMax -v`
- **实际输出 (Actual Output)**:elapsed=14.93s;建议 `software_delivery`;自动激活 false
- **评价判定 (Evaluation / Verdict)**:PASS
- **性能与耗时 (Duration & Latency)**:14.93s
### 5.3 前端 7 模板门
- **测试输入 (Input)**:`npx tsx --test src/lib/createProjectSubmitGuard.test.ts`
- **实际输出 (Actual Output)**:`shouldCloneMedicalTemplates skips the 7-pack` PASS
- **评价判定 (Evaluation / Verdict)**:PASS
- **性能与耗时 (Duration & Latency)**:134ms
### 5.4 SWBOOT-10 stub
- **测试输入 (Input)**:`go test ./internal/swboot -run TestRepoAllowlistStub`
- **实际输出 (Actual Output)**:PASS(`ERR_SWBOOT10_STUB_ONLY`)
- **评价判定 (Evaluation / Verdict)**:PASS(本波故意不实现真 patch)
- **性能与耗时 (Duration & Latency)**:<10ms
## 六、 自动化测试套件汇总 (Test Suite Execution)
- `go test -short ./internal/swboot ./internal/projectworkflow ./internal/app ./internal/workflowdef`:PASS
- live MiniMax:PASS
## 七、 测试结论与后续优化建议 (Conclusion & Next Steps)
W5a 可合 `dev`。FEATURE-MATRIX「纯软件项目自举」保持 `partial`(SWBOOT-10 stub / W5b 未做)。升 done 须独立安全评审后的受控执行器。
@@ -0,0 +1,92 @@
# W6 FAV subscriber shadow 测试报告
## 一、 测试背景 (Background)
FAV 禁止整支 merge `feature/final-artifact-vault`。U7 增量已合 `dev`(publisher/consumer 默认 off)。W6 只手工移植 subscriber **shadow**:计算 intended outcome,不写 staging/artifact/publication,不开启 `FAV_DEGRADED_READ`。live 观察窗 ≥7 天,本轮不开。
## 二、 测试目标 (Test Objectives)
- `ObserveShadow` 只读:`WouldStage`/`WouldPublish`/`DegradedReadUsed` 恒 false
- `FAV_DEGRADED_READ=true`(结构字段或进程 env)时 shadow 拒绝
- `HandleLease` 与 `Registry.Register(fav)` 仍 fail-closed
- vault status / `artifact-vault status` 标明 `shadow_observe` 与 live 未放量
- 仓库默认 `FAV_PUBLISHER_ENABLED=false`、`FAV_DEGRADED_READ=false`
- FEATURE-MATRIX FAV **保持 partial**
## 三、 测试方案与环境 (Test Plan & Environment)
| 项 | 值 |
|----|----|
| OS | Linux 7.0.0-31-generic |
| Go | go1.27.1 linux/amd64 |
| 分支 | `feature/w6-fav-subscriber-shadow`(自 `dev@49d901e`) |
| 层级 | 单元测试 + CLI status;无真实 PI(本波无 PI 路径) |
| 证据 | `.doc/test-reports/assets/2026-09-17-w6-fav-subscriber-shadow/` |
核心用例矩阵:
| ID | 用例 | 期望 |
|----|------|------|
| S1 | 零值 consumer | DefaultEnabled=false;HandleLease → ErrDisabledConsumer |
| S2 | Enabled=true 仍无 registry 审批 | HandleLease 拒绝;Register(fav) 失败 |
| S3 | ObserveShadow | logical=`document:doc_1`;不声明 writes |
| S4 | AllowDegradedRead / env true | shadow error;不写 vault |
| S5 | GET vault/status | consumer_mode=off;would_stage/publish=false;live_not_opened=true |
| S6 | artifact-vault status | remaining_to_port 含 live 观察窗;shadow_observe=true |
## 四、 预期结果 (Expected Results)
- 所有默认路径 FAIL-CLOSED:不 Drain、不 Stage、不 Publish、不 claim fav lease
- shadow 不是写回执
- live staging→artifact→publication **NOT OPENED**
## 五、 实际测试结果与判定 (Actual Results & Evaluation)
### 5.1 S1–S4 fav subscriber
- **测试输入 (Input)**:`go test -count=1 ./internal/app/fav -run TestFavSubscriber -v`
- **实际输出 (Actual Output)**:三用例全部 PASS。见 `assets/2026-09-17-w6-fav-subscriber-shadow/unit-tests.txt`
- **评价判定 (Evaluation / Verdict)**:PASS
- **性能与耗时 (Duration & Latency)**:0.002s
### 5.2 S5 vault status
- **测试输入 (Input)**:`go test ./internal/server -run 'TestVaultDefaults|TestVaultStatus'`
- **实际输出 (Actual Output)**:`consumer_mode=off`、`shadow_observe=true`、`would_stage=false`、`would_publish=false`、`live_not_opened=true`
- **评价判定 (Evaluation / Verdict)**:PASS
- **性能与耗时 (Duration & Latency)**:0.007s
### 5.3 S6 CLI stub
- **测试输入 (Input)**:`go build ./cmd/artifact-vault && artifact-vault status`
- **实际输出 (Actual Output)**:见 `artifact-vault-status.json`。`consumer_mode=off`、`degraded_read=false`、`shadow_observe=true`、`would_stage=false`、`would_publish=false`;`remaining_to_port` 含 durable Register 与 live 三级观察窗。
- **评价判定 (Evaluation / Verdict)**:PASS
- **性能与耗时 (Duration & Latency)**:<1s
### 5.4 冒烟
- **测试输入 (Input)**:`go vet ./...`;`unset TEST_DATABASE_URL; go test -short ./...`;`./scripts/arch-check.sh --mode block`
- **实际输出 (Actual Output)**:`VET_EXIT=0`、`TEST_EXIT=0`、`arch-check block: production gate passed`。见 `smoke.txt`
- **评价判定 (Evaluation / Verdict)**:PASS
- **性能与耗时 (Duration & Latency)**:约 14s(short tests;`internal/server` 10.993s)
### 5.5 live 放量
- **测试输入 (Input)**:compose 默认 `FAV_DEGRADED_READ` / `FAV_PUBLISHER_ENABLED`
- **实际输出 (Actual Output)**:docker-compose.dev.yml 仍 `${FAV_DEGRADED_READ:-false}` / `${FAV_PUBLISHER_ENABLED:-false}`;未改仓库默认;未开 staging Drain。
- **评价判定 (Evaluation / Verdict)**:PASS(**live 未放量**,符合本波边界)
- **性能与耗时 (Duration & Latency)**:N/A
## 六、 自动化测试套件汇总 (Test Suite Execution)
```text
ok internal/app/fav TestFavSubscriber* PASS
ok internal/server TestVaultDefaultsStayDisabled / TestVaultStatusReportsOff PASS
go test -short ./... TEST_EXIT=0
go vet ./... VET_EXIT=0
arch-check --mode block production gate passed
```
## 七、 测试结论与后续优化建议 (Conclusion & Next Steps)
W6 **shadow 切片 PASS**,可合 `dev`。FEATURE-MATRIX FAV **保持 partial**:live staging→artifact→publication 未开,观察窗 ≥7 天未开始计时。禁止整支 merge FAV;`FAV_DEGRADED_READ` 保持 false。durable `Register(fav)` 仍须单独 cutover 审批。
@@ -0,0 +1,103 @@
# W7 D7 对话数据分类盘点 测试报告
## 一、 测试背景 (Background)
D7 ADR 数字标 `pending-compliance-signoff`。W2 已释放 `chat` mutex。本波只做只读盘点,禁止按草案数字物理删除或清备份,矩阵保持 `deferred`。
## 二、 测试目标 (Test Objectives)
- 盘点 sessions/messages、KB、日志、备份、event 敏感字段与流转
- 确认无已签字基线违规;若有则写 gap-matrix
- 零物理删除、零备份清除
- FEATURE-MATRIX D7 保持 `deferred`
## 三、 测试方案与环境 (Test Plan & Environment)
| 项 | 值 |
|----|----|
| OS | Linux 7.0.0-31-generic |
| 分支 | `feature/w7-d7-data-inventory`(自 `dev@cb4fbb6` W6 merge 后) |
| 环境 | dev schema 48;共享 KB `regulations` |
| 方法 | 只读 SQL / `docker logs` / 目录 `du` / `go vet` / `arch-check` |
| 证据 | `.doc/test-reports/assets/2026-09-17-w7-d7-inventory/` |
核心用例矩阵:
| ID | 用例 | 期望 |
|----|------|------|
| I1 | chat 热库计数与 `deleted_at` | 只读;不 UPDATE |
| I2 | 事件 payload keys | 无 `content` |
| I3 | 共享 KB | 无法规库外的 chat 表 |
| I4 | 应用日志抽检 | 无消息正文;DSN 脱敏 |
| I5 | 备份脚本 | `pg_dump -Fc` 整库;本轮不执行 dump |
| I6 | 违规升级 | 无已确认违规 → 不写 gap-matrix |
## 四、 预期结果 (Expected Results)
- 盘点表完整
- 判定:缺口是未实现治理,不是已签字数字被违反
- health/ready PASS;FAV 仍 off
## 五、 实际测试结果与判定 (Actual Results & Evaluation)
### 5.1 I1 热库
- **测试输入 (Input)**:`docker exec shuimu-context-pg-dev psql` 只读 `COUNT` / `MIN/MAX(created_at)`
- **实际输出 (Actual Output)**:sessions=619;messages=3291;soft_deleted=0;older_than_365d=0;oldest=2026-09-10。`chat_messages` 5.4MB。Go 检索无 `SET deleted_at`。见 `pg-counts.tsv`、`pg-chat-age.txt`
- **评价判定 (Evaluation / Verdict)**:PASS(盘点完成;未删数据)
- **性能与耗时 (Duration & Latency)**:<1s
### 5.2 I2 事件
- **测试输入 (Input)**:`jsonb_object_keys(convert_from(payload,'UTF8')::jsonb)`;`? 'content'`
- **实际输出 (Actual Output)**:4 envelopes;`has_content=f`;keys 为 `run_id`/`plan_id`/`summary_ref` 等。DLQ=0。fav mode=off,notify/projection/workflow_advance=live。见 `pg-event-payload-keys.txt`
- **评价判定 (Evaluation / Verdict)**:PASS(Track E 正文未进事件)
- **性能与耗时 (Duration & Latency)**:<1s
### 5.3 I3 共享 KB
- **测试输入 (Input)**:`shuimu-kb-shared` `\dt` + counts
- **实际输出 (Actual Output)**:库名 `regulations`;法规 2907 文档 / 312919 chunks;无 chat 表。见 `kb-tables.txt`
- **评价判定 (Evaluation / Verdict)**:PASS(对话与 KB 隔离)
- **性能与耗时 (Duration & Latency)**:<1s
### 5.4 I4 日志
- **测试输入 (Input)**:`docker inspect` LogDriver;`docker logs --tail 30 shuimu-agent-app-dev`
- **实际输出 (Actual Output)**:`json-file` 无 max-size。日志含 `dsn=postgres://regkb:***@...`,无 chat content。见 `app-logs-tail.txt`
- **评价判定 (Evaluation / Verdict)**:PASS
- **性能与耗时 (Duration & Latency)**:<1s
### 5.5 I5 备份
- **测试输入 (Input)**:阅读 `scripts/backup-system-db.sh`;`ls ./backups`
- **实际输出 (Actual Output)**:脚本 `pg_dump -Fc` 整库(含 chat 明文);宿主机无 `./backups`。本轮**未**运行 dump。CI `backup-restore-drill` 仍在。
- **评价判定 (Evaluation / Verdict)**:PASS(未清备份、未新造 dump)
- **性能与耗时 (Duration & Latency)**:N/A
### 5.6 I6 违规升级
- **测试输入 (Input)**:对照 ADR `pending-compliance-signoff` + Track E ID-only
- **实际输出 (Actual Output)**:无已确认基线违规。**未**修改 `gap-matrix.md`。
- **评价判定 (Evaluation / Verdict)**:PASS
- **性能与耗时 (Duration & Latency)**:N/A
### 5.7 冒烟 / health
- **测试输入 (Input)**:`go vet ./...`;`arch-check --mode block`;`curl :8080/health` `/ready`
- **实际输出 (Actual Output)**:VET_EXIT=0;`arch-check block: production gate passed`;schema_version=48;vault `consumer_mode=off`、`live_not_opened=true`。见 `health.json`、`smoke.txt`
- **评价判定 (Evaluation / Verdict)**:PASS
- **性能与耗时 (Duration & Latency)**:vet+arch ~1.4s
## 六、 自动化测试套件汇总 (Test Suite Execution)
```text
go vet ./... VET_EXIT=0
./scripts/arch-check.sh --mode block production gate passed
W7 无代码变更;go test -short 以 W6 合入后基线为准(TEST_EXIT=0)
只读 SQL 盘点 无 DELETE/UPDATE
```
## 七、 测试结论与后续优化建议 (Conclusion & Next Steps)
W7 **盘点 PASS**。FEATURE-MATRIX D7 **保持 deferred**。合规签字前禁止按 365/180/30 执行删除。签字后整改应覆盖:聊天 soft-delete 写路径、派生 `context_memory_chunks.chat_history`、workspace 非终态、备份二次批准。`production_ready` 不翻转。
@@ -0,0 +1,63 @@
=== go test FAV disablement suite ===
=== RUN TestFAVFlagsDefaultOff
--- PASS: TestFAVFlagsDefaultOff (0.00s)
=== RUN TestFAVFlagsOptInOnly
--- PASS: TestFAVFlagsOptInOnly (0.00s)
=== RUN TestValidateIndependentVault
--- PASS: TestValidateIndependentVault (0.00s)
PASS
ok chat-agent-system/internal/config 0.002s
=== RUN TestFavSubscriberDefaultsDisabled
--- PASS: TestFavSubscriberDefaultsDisabled (0.00s)
=== RUN TestFavSubscriberStillDisabledWhenFlagOnWithoutRegistryApproval
--- PASS: TestFavSubscriberStillDisabledWhenFlagOnWithoutRegistryApproval (0.00s)
PASS
ok chat-agent-system/internal/app/fav 0.002s
=== RUN TestVaultDefaultsStayDisabled
--- PASS: TestVaultDefaultsStayDisabled (0.00s)
=== RUN TestVaultStatusReportsOff
--- PASS: TestVaultStatusReportsOff (0.00s)
=== RUN TestValidateIndependentVaultRejectsDataRoot
--- PASS: TestValidateIndependentVaultRejectsDataRoot (0.00s)
PASS
ok chat-agent-system/internal/server 0.007s
=== RUN TestValidateOpsCutoverRejectsFavAndNonDev
--- PASS: TestValidateOpsCutoverRejectsFavAndNonDev (0.00s)
=== RUN TestPrincipalRejectsWildcardAndFAV
--- PASS: TestPrincipalRejectsWildcardAndFAV (0.00s)
=== RUN TestAssertLiveConsumersRejectsFAV
--- PASS: TestAssertLiveConsumersRejectsFAV (0.00s)
=== RUN TestLiveConsumersOmitsFAV
--- PASS: TestLiveConsumersOmitsFAV (0.00s)
=== RUN TestManifestJSONIncludesDisabledFAV
--- PASS: TestManifestJSONIncludesDisabledFAV (0.00s)
=== RUN TestE0B_FAVNeverClaimed_PG
dispatcher_pg_test.go:85: TEST_DATABASE_URL not set; skipping PostgreSQL integration test
--- SKIP: TestE0B_FAVNeverClaimed_PG (0.00s)
PASS
ok chat-agent-system/internal/events 0.004s
=== RUN TestFavDegradedReadDefaultOff
--- PASS: TestFavDegradedReadDefaultOff (0.00s)
=== RUN TestFavDegradedReadOnlyAfterAuthorize
--- PASS: TestFavDegradedReadOnlyAfterAuthorize (0.00s)
PASS
ok chat-agent-system/internal/docquery 0.002s
=== go build cmd/artifact-vault ===
{
"binary": "artifact-vault",
"consumer": "fav",
"consumer_mode": "off",
"degraded_read": false,
"note": "do not enable FAV_DEGRADED_READ or fav consumer without approval",
"publisher_default": false,
"remaining_to_port": [
"enumerate.go (EnumerateTerminals / LoadExclusions)",
"TerminalRow + Backfill(rows) API (diverged from dataset Candidate path)",
"full recover-plan / recover-apply / gc-preflight / destroy",
"server ingest hooks (OnFinalArtifact*)",
"durable fav event Register after separate approval"
],
"slice": "u7-incremental-stub",
"source_branch": "feature/final-artifact-vault"
}
=== go vet ===
@@ -0,0 +1,11 @@
Running 1 test using 1 worker
✓ 1 [chromium] › e2e/intent-plan-cards.spec.ts:292:3 › intent-plan PLAN_CONFIRM dual-tab › dual-tab confirm mutual exclusion + reload/relogin matches PG (6.1s)
1 passed (7.0s)
npm notice
npm notice New major version of npm available! 11.19.0 -> 12.0.2
npm notice Changelog: https://github.com/npm/cli/releases/tag/v12.0.2
npm notice To update run: npm install -g npm@12.0.2
npm notice
@@ -0,0 +1,42 @@
Running 1 test using 1 worker
(node:1544109) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
(Use `node --trace-warnings ...` to show where the warning was created)
✘ 1 [chromium] › e2e/intent-plan-cards.spec.ts:228:3 › intent-plan PLAN_CONFIRM dual-tab › dual-tab confirm mutual exclusion + reload/relogin matches PG (0ms)
1) [chromium] › e2e/intent-plan-cards.spec.ts:228:3 › intent-plan PLAN_CONFIRM dual-tab › dual-tab confirm mutual exclusion + reload/relogin matches PG
Error: browserType.launch: Target page, context or browser has been closed
Browser logs:
<launching> /home/weichen/.cache/ms-playwright/chromium_headless_shell-1243/chrome-headless-shell-linux64/chrome-headless-shell --disable-field-trial-config --disable-background-networking --disable-background-timer-throttling --disable-backgrounding-occluded-windows --disable-back-forward-cache --disable-breakpad --disable-client-side-phishing-detection --disable-component-extensions-with-background-pages --disable-component-update --no-default-browser-check --disable-default-apps --disable-dev-shm-usage --disable-edgeupdater --disable-extensions --disable-features=AvoidUnnecessaryBeforeUnloadCheckSync,DestroyProfileOnBrowserClose,DialMediaRouteProvider,GlobalMediaControls,HttpsUpgrades,LensOverlay,MediaRouter,PaintHolding,ThirdPartyStoragePartitioning,BlockOriginHeaderModificationOnRedirect,Translate,AutoDeElevate,OptimizationHints,msForceBrowserSignIn,msEdgeUpdateLaunchServicesPreferredVersion --enable-features=CDPScreenshotNewSurface --allow-pre-commit-input --disable-hang-monitor --disable-ipc-flooding-protection --disable-popup-blocking --disable-prompt-on-repost --disable-renderer-backgrounding --disable-updater-scheduler --force-color-profile=srgb --metrics-recording-only --no-first-run --password-store=basic --use-mock-keychain --no-service-autorun --export-tagged-pdf --disable-search-engine-choice-screen --unsafely-disable-devtools-self-xss-warnings --edge-skip-compat-layer-relaunch --disable-infobars --disable-search-engine-choice-screen --disable-sync --enable-unsafe-swiftshader --headless --hide-scrollbars --mute-audio --blink-settings=primaryHoverType=2,availableHoverTypes=2,primaryPointerType=4,availablePointerTypes=4 --no-sandbox --user-data-dir=/tmp/playwright_chromiumdev_profile-qF5jvT --remote-debugging-pipe --no-startup-window
<launched> pid=1544124
[pid=1544124][err] /home/weichen/.cache/ms-playwright/chromium_headless_shell-1243/chrome-headless-shell-linux64/chrome-headless-shell: error while loading shared libraries: libatk-1.0.so.0: cannot open shared object file: No such file or directory
Call log:
- <launching> /home/weichen/.cache/ms-playwright/chromium_headless_shell-1243/chrome-headless-shell-linux64/chrome-headless-shell --disable-field-trial-config --disable-background-networking --disable-background-timer-throttling --disable-backgrounding-occluded-windows --disable-back-forward-cache --disable-breakpad --disable-client-side-phishing-detection --disable-component-extensions-with-background-pages --disable-component-update --no-default-browser-check --disable-default-apps --disable-dev-shm-usage --disable-edgeupdater --disable-extensions --disable-features=AvoidUnnecessaryBeforeUnloadCheckSync,DestroyProfileOnBrowserClose,DialMediaRouteProvider,GlobalMediaControls,HttpsUpgrades,LensOverlay,MediaRouter,PaintHolding,ThirdPartyStoragePartitioning,BlockOriginHeaderModificationOnRedirect,Translate,AutoDeElevate,OptimizationHints,msForceBrowserSignIn,msEdgeUpdateLaunchServicesPreferredVersion --enable-features=CDPScreenshotNewSurface --allow-pre-commit-input --disable-hang-monitor --disable-ipc-flooding-protection --disable-popup-blocking --disable-prompt-on-repost --disable-renderer-backgrounding --disable-updater-scheduler --force-color-profile=srgb --metrics-recording-only --no-first-run --password-store=basic --use-mock-keychain --no-service-autorun --export-tagged-pdf --disable-search-engine-choice-screen --unsafely-disable-devtools-self-xss-warnings --edge-skip-compat-layer-relaunch --disable-infobars --disable-search-engine-choice-screen --disable-sync --enable-unsafe-swiftshader --headless --hide-scrollbars --mute-audio --blink-settings=primaryHoverType=2,availableHoverTypes=2,primaryPointerType=4,availablePointerTypes=4 --no-sandbox --user-data-dir=/tmp/playwright_chromiumdev_profile-qF5jvT --remote-debugging-pipe --no-startup-window
- <launched> pid=1544124
- [pid=1544124][err] /home/weichen/.cache/ms-playwright/chromium_headless_shell-1243/chrome-headless-shell-linux64/chrome-headless-shell: error while loading shared libraries: libatk-1.0.so.0: cannot open shared object file: No such file or directory
- [pid=1544124] <gracefully close start>
- [pid=1544124] <kill>
- [pid=1544124] <will force kill>
- [pid=1544124] exception while trying to kill process: Error: kill ESRCH
- [pid=1544124] <process did exit: exitCode=127, signal=null>
- [pid=1544124] starting temporary directories cleanup
- [pid=1544124] finished temporary directories cleanup
- [pid=1544124] <gracefully close end>
Error Context: ../.doc/test-reports/assets/2026-09-16-intent-plan-playwright-dual-tab/playwright-output-main/intent-plan-cards-intent-p-3257d-n-reload-relogin-matches-PG-chromium/error-context.md
attachment #2: trace (application/zip) ─────────────────────────────────────────────────────────
../.doc/test-reports/assets/2026-09-16-intent-plan-playwright-dual-tab/playwright-output-main/intent-plan-cards-intent-p-3257d-n-reload-relogin-matches-PG-chromium/trace.zip
Usage:
npx playwright show-trace ../.doc/test-reports/assets/2026-09-16-intent-plan-playwright-dual-tab/playwright-output-main/intent-plan-cards-intent-p-3257d-n-reload-relogin-matches-PG-chromium/trace.zip
────────────────────────────────────────────────────────────────────────────────────────────────
1 failed
[chromium] › e2e/intent-plan-cards.spec.ts:228:3 › intent-plan PLAN_CONFIRM dual-tab › dual-tab confirm mutual exclusion + reload/relogin matches PG
@@ -0,0 +1,79 @@
{
"project": "PlanDual-mu49uev8",
"scope": {
"projectId": 6399,
"sessionId": "sess-p6399-u9",
"userId": 9
},
"planId": "pln_e2e_mu49uev8",
"decisions": [
{
"status": 409,
"body": "{\"error_code\":\"PLAN_STALE_REVISION\",\"message\":\"PLAN_STALE_REVISION\",\"plan\":{\"plan_id\":\"pln_e2e_mu49uev8\",\"revision\":2,\"status\":\"executing\",\"execution_mode\":\"validated_only\",\"expires_at\":\"2026-09-16T17:44:42.309711Z\",\"steps\":[{\"step_id\":\"stp_mu49uev8_1\",\"action_key\":\"regulation.query\",\"status\":\"eligible\",\"execution_mode\":\"validated_only\",\"safe_summary\":\"查询法规\"},{\"step_id\":\"stp_mu49uev8_2\",\"action_key\":\"regulation.query\",\"status\":\"eligible\",\"execution_mode\":\"validated_only\",\"safe_summary\":\"总结要点\"}],\"safe_summary\":\"Playwright dual-tab: query then summarize\"}}\n",
"tab": "B"
},
{
"status": 200,
"body": "{\"plan\":{\"plan_id\":\"pln_e2e_mu49uev8\",\"revision\":2,\"status\":\"executing\",\"execution_mode\":\"validated_only\",\"expires_at\":\"2026-09-16T17:44:42.309711Z\",\"steps\":[{\"step_id\":\"stp_mu49uev8_1\",\"action_key\":\"regulation.query\",\"status\":\"eligible\",\"execution_mode\":\"validated_only\",\"safe_summary\":\"查询法规\"},{\"step_id\":\"stp_mu49uev8_2\",\"action_key\":\"regulation.query\",\"status\":\"eligible\",\"execution_mode\":\"validated_only\",\"safe_summary\":\"总结要点\"}],\"safe_summary\":\"Playwright dual-tab: query then summarize\"}}\n",
"tab": "A"
}
],
"pgAfter": {
"status": "executing",
"revision": "2"
},
"activeBefore": {
"status": 200,
"plan": {
"plan_id": "pln_e2e_mu49uev8",
"revision": 2,
"status": "executing",
"execution_mode": "validated_only",
"expires_at": "2026-09-16T17:44:42.309711Z",
"steps": [
{
"step_id": "stp_mu49uev8_1",
"action_key": "regulation.query",
"status": "eligible",
"execution_mode": "validated_only",
"safe_summary": "查询法规"
},
{
"step_id": "stp_mu49uev8_2",
"action_key": "regulation.query",
"status": "eligible",
"execution_mode": "validated_only",
"safe_summary": "总结要点"
}
],
"safe_summary": "Playwright dual-tab: query then summarize"
}
},
"activeAfter": {
"status": 200,
"plan": {
"plan_id": "pln_e2e_mu49uev8",
"revision": 2,
"status": "executing",
"execution_mode": "validated_only",
"expires_at": "2026-09-16T17:44:42.309711Z",
"steps": [
{
"step_id": "stp_mu49uev8_1",
"action_key": "regulation.query",
"status": "eligible",
"execution_mode": "validated_only",
"safe_summary": "查询法规"
},
{
"step_id": "stp_mu49uev8_2",
"action_key": "regulation.query",
"status": "eligible",
"execution_mode": "validated_only",
"safe_summary": "总结要点"
}
],
"safe_summary": "Playwright dual-tab: query then summarize"
}
}
}
@@ -0,0 +1,6 @@
Running 1 test using 1 worker
- 1 [chromium] › e2e/intent-plan-cards.spec.ts:292:3 › intent-plan PLAN_CONFIRM dual-tab › dual-tab confirm mutual exclusion + reload/relogin matches PG
1 skipped
Binary file not shown.

After

Width:  |  Height:  |  Size: 220 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 223 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 KiB

@@ -0,0 +1 @@
ok chat-agent-system/internal/app 0.016s
@@ -0,0 +1,18 @@
=== RUN TestExpansionFlagsDefaultOff
--- PASS: TestExpansionFlagsDefaultOff (0.00s)
=== RUN TestExpansionFlagsEnvOn
--- PASS: TestExpansionFlagsEnvOn (0.00s)
=== RUN TestActiveSegmentProposerDisabledByDefault
--- PASS: TestActiveSegmentProposerDisabledByDefault (0.00s)
=== RUN TestStubSegmentProposerFailClosed
--- PASS: TestStubSegmentProposerFailClosed (0.01s)
=== RUN TestBuildOwnerMuxFlagOffNoExpansion
--- PASS: TestBuildOwnerMuxFlagOffNoExpansion (0.00s)
=== RUN TestBuildOwnerMuxEnablePathsNoPanic
--- PASS: TestBuildOwnerMuxEnablePathsNoPanic (0.00s)
=== RUN TestDryRunAdapterRejectsForeignKeys
--- PASS: TestDryRunAdapterRejectsForeignKeys (0.00s)
=== RUN TestPlanTierIndependentOfExpansionFlags
--- PASS: TestPlanTierIndependentOfExpansionFlags (0.00s)
PASS
ok chat-agent-system/internal/app/intentflow 0.009s
@@ -0,0 +1 @@
ok chat-agent-system/internal/app/intentflow 0.013s
@@ -0,0 +1,7 @@
=== arch-check --mode block ===
arch-check mode=block
boundaries=/home/weichen/projects/Agent-System/.doc/system-design/module-boundaries.yaml
ok chat-agent-system/internal/archtest 0.174s
ok chat-agent-system/internal/archtest 0.215s
arch-check block: production gate passed
ARCH_EXIT=0
@@ -0,0 +1,15 @@
deleted chore/merge-agent-deltas
deleted chore/merge-playwright-swboot-followup
deleted docs/module-decoupling-ipc-assessment
deleted feature/fav-u7-publisher
deleted feature/fav-u7-publisher-impl
deleted feature/iam-route-inventory-p2
deleted feature/intent-plan-cards-playwright
deleted feature/intent-plan-cards-playwright-impl
deleted feature/pu6-semantic-summary
deleted feature/pu6-semantic-summary-impl
deleted feature/pu7-pi-narrative
deleted feature/pu7-pi-narrative-impl
deleted feature/pu8-u9-u12-flags
deleted fix/nightly-datadir-rw
deleted feature/software-project-bootstrap (-D; unique docs already on dev)
@@ -0,0 +1,66 @@
=== go test -short ===
? chat-agent-system/cmd/artifact-vault [no test files]
ok chat-agent-system/cmd/bizdev-cli 2.211s
? chat-agent-system/cmd/dataset [no test files]
ok chat-agent-system/cmd/document-content-reconcile (cached)
? chat-agent-system/cmd/document-revision-backfill [no test files]
? chat-agent-system/cmd/eventmode [no test files]
? chat-agent-system/cmd/events [no test files]
? chat-agent-system/cmd/recategorize [no test files]
? chat-agent-system/cmd/server [no test files]
ok chat-agent-system/internal/agent 3.525s
ok chat-agent-system/internal/app 0.015s
ok chat-agent-system/internal/app/chatflow (cached)
ok chat-agent-system/internal/app/docadvance (cached)
ok chat-agent-system/internal/app/docflow (cached)
ok chat-agent-system/internal/app/docnotify (cached)
ok chat-agent-system/internal/app/docproject (cached)
ok chat-agent-system/internal/app/fav (cached)
ok chat-agent-system/internal/app/intentflow (cached)
ok chat-agent-system/internal/app/stageflow (cached)
ok chat-agent-system/internal/app/uow (cached)
ok chat-agent-system/internal/archtest 0.152s
ok chat-agent-system/internal/artifactvault (cached)
ok chat-agent-system/internal/auth 0.964s
ok chat-agent-system/internal/authz (cached)
ok chat-agent-system/internal/bizdev 0.143s
ok chat-agent-system/internal/chat 0.015s
ok chat-agent-system/internal/config 0.002s
ok chat-agent-system/internal/coordinator 0.011s
ok chat-agent-system/internal/ctxmgr (cached)
ok chat-agent-system/internal/dataset (cached)
ok chat-agent-system/internal/db (cached)
ok chat-agent-system/internal/doccontent (cached)
ok chat-agent-system/internal/docduty (cached)
ok chat-agent-system/internal/docgov 0.018s
ok chat-agent-system/internal/docquery (cached)
ok chat-agent-system/internal/docrevision (cached)
ok chat-agent-system/internal/events 0.006s
ok chat-agent-system/internal/freedoc 0.026s
ok chat-agent-system/internal/fsutil (cached)
ok chat-agent-system/internal/httpx (cached)
ok chat-agent-system/internal/intent (cached)
ok chat-agent-system/internal/kb 0.008s
ok chat-agent-system/internal/maturity (cached)
ok chat-agent-system/internal/notification 0.070s
? chat-agent-system/internal/observability [no test files]
ok chat-agent-system/internal/projectcontext (cached)
ok chat-agent-system/internal/projectinstance (cached)
ok chat-agent-system/internal/projectworkflow (cached)
ok chat-agent-system/internal/quote (cached)
ok chat-agent-system/internal/replyexport (cached)
ok chat-agent-system/internal/server 10.729s
ok chat-agent-system/internal/squad (cached)
ok chat-agent-system/internal/storage (cached)
ok chat-agent-system/internal/stream (cached)
ok chat-agent-system/internal/stream/transport (cached)
ok chat-agent-system/internal/swboot (cached)
ok chat-agent-system/internal/taskrun 0.189s
ok chat-agent-system/internal/template 1.320s
ok chat-agent-system/internal/upload (cached)
? chat-agent-system/internal/workflow [no test files]
ok chat-agent-system/internal/workflow/runtime (cached)
ok chat-agent-system/internal/workflowdef (cached)
ok chat-agent-system/internal/workspace (cached)
? chat-agent-system/templates [no test files]
TEST_EXIT=0
@@ -0,0 +1,4 @@
=== go version ===
go version go1.27.1 linux/amd64
=== go vet ===
VET_EXIT=0
@@ -0,0 +1,6 @@
=== /health ===
{"status":"ok","env":"dev","agent_backend":"pi-agent","version":"v1.0","shared_kb_port":5432,"kb_ready":true,"database_ready":true,"schema_version":48,"schema_ready":true,"task_store_ready":true}
=== /ready ===
{"status":"ok","env":"dev","agent_backend":"pi-agent","version":"v1.0","shared_kb_port":5432,"kb_ready":true,"database_ready":true,"schema_version":48,"schema_ready":true,"task_store_ready":true}
@@ -0,0 +1,10 @@
* chore/leftover-hygiene-2026-09-17
dev
dev-old-linear
+ feature/final-artifact-vault
feature/remove-herdr-agent-settings
fix/clean-test-env-baseline
fix/dev-runtime-data-root-guard
fix/project143-controlled-content-404-diagnosis
main
test
@@ -0,0 +1,7 @@
dev-old-linear
+ feature/final-artifact-vault
feature/remove-herdr-agent-settings
fix/clean-test-env-baseline
fix/dev-runtime-data-root-guard
fix/project143-controlled-content-404-diagnosis
test
@@ -0,0 +1,2 @@
/home/weichen/projects/Agent-System 80ef2f6 [chore/leftover-hygiene-2026-09-17]
/home/weichen/projects/Agent-System/.worktrees/fix-dev-runtime-data-root-guard 539a2dc [feature/final-artifact-vault]
@@ -0,0 +1,25 @@
chore/leftover-hygiene-2026-09-17 80ef2f6 merge: docs/archive-kb-host-auth-short-term
chore/merge-agent-deltas 49db87e docs(ops): release integration slot after agent-delta merge
chore/merge-playwright-swboot-followup 83f9004 docs(ops): close SWBOOT short-term after remote push
dev 80ef2f6 merge: docs/archive-kb-host-auth-short-term
dev-old-linear 5e5bc1f docs(agents): require feature branches off dev for all work
docs/module-decoupling-ipc-assessment 5cef856 docs(remediation): add module decoupling phase-2 remediation plan and index gap-matrix rows
feature/fav-u7-publisher 6356fb5 docs(ops): mark FAV U7 incremental push complete
feature/fav-u7-publisher-impl 47376ae feat(events): FAV publisher cmd stub gated off by default
feature/final-artifact-vault 539a2dc docs(test): record FAV gap-fill unit evidence
feature/iam-route-inventory-p2 025ffe0 feat(authz): full route inventory, session interrupt test, 410/R13 freeze
feature/intent-plan-cards-playwright f55887e docs(test): archive intent-plan Playwright dual-tab report
feature/intent-plan-cards-playwright-impl d45a1ee test(web): intent-plan dual-tab Playwright acceptance gate
feature/pu6-semantic-summary 5493bf6 docs(test): archive PU6 shadow report and mark matrix partial
feature/pu6-semantic-summary-impl 8fdf50a feat(chat): SEMANTIC_SUMMARY_SHADOW optional deterministic annotate
feature/pu7-pi-narrative 56f6a66 docs(test): archive PU7 PI narrative acceptance report
feature/pu7-pi-narrative-impl e7e9813 feat(docgov): PI_CHANGE_REPORT_NARRATIVE gate with full fallback
feature/pu8-u9-u12-flags 6087d0b docs(test): archive PU8 U9–U12 flags scaffolding report
feature/remove-herdr-agent-settings ed29cb5 docs(ops): close Wave 0 status and ignore multi-GB UI dumps
feature/software-project-bootstrap d3bb752 docs(ops): close SWBOOT short-term after remote push
fix/clean-test-env-baseline ecd9111 docs(ops): record clean test env baseline task, audit, remediation, and test report
fix/dev-runtime-data-root-guard ded40d0 docs(remediation): design final artifact vault
fix/nightly-datadir-rw 81f6378 fix(ci): treat DATA_DIR read-only mkdir as infra_fail
fix/project143-controlled-content-404-diagnosis 81288bd docs(audit): diagnose project143 document content 404
main 210fe4a merge: feature/sync-wip-2026-09-13 — container env config and chat refresh docs
test b67816a merge: sync detailed matrix deep-test report onto test
@@ -0,0 +1,8 @@
dev-old-linear
+ feature/final-artifact-vault
feature/remove-herdr-agent-settings
+ feature/software-project-bootstrap
+ fix/clean-test-env-baseline
fix/dev-runtime-data-root-guard
fix/project143-controlled-content-404-diagnosis
test
@@ -0,0 +1,9 @@
/home/weichen/projects/Agent-System 80ef2f6 [chore/leftover-hygiene-2026-09-17]
/home/weichen/projects/Agent-System/.worktrees/feature-fav-u7-publisher 6356fb5 [feature/fav-u7-publisher]
/home/weichen/projects/Agent-System/.worktrees/feature-intent-plan-cards-playwright f55887e [feature/intent-plan-cards-playwright]
/home/weichen/projects/Agent-System/.worktrees/feature-pu6-semantic-summary 5493bf6 [feature/pu6-semantic-summary]
/home/weichen/projects/Agent-System/.worktrees/feature-pu7-pi-narrative 56f6a66 [feature/pu7-pi-narrative]
/home/weichen/projects/Agent-System/.worktrees/feature-software-project-bootstrap d3bb752 [feature/software-project-bootstrap]
/home/weichen/projects/Agent-System/.worktrees/fix-clean-test-env-baseline ecd9111 [fix/clean-test-env-baseline]
/home/weichen/projects/Agent-System/.worktrees/fix-dev-runtime-data-root-guard 539a2dc [feature/final-artifact-vault]
/tmp/as-merge-agent-deltas 49db87e [chore/merge-agent-deltas]
@@ -0,0 +1,326 @@
==> building app/events image shuimu-agent-app:candidate-6e2476f0f2e4...
#0 building with "default" instance using docker driver
#1 [internal] load build definition from Dockerfile
#1 transferring dockerfile: 1.53kB done
#1 DONE 0.0s
#2 [auth] library/golang:pull token for docker.1ms.run
#2 DONE 0.0s
#3 [auth] library/node:pull token for docker.1ms.run
#3 DONE 0.0s
#4 [auth] library/debian:pull token for docker.1ms.run
#4 DONE 0.0s
#5 [internal] load metadata for docker.io/library/node:22-bookworm
#5 DONE 0.4s
#6 [internal] load metadata for docker.io/library/golang:1.23-bookworm
#6 DONE 0.4s
#7 [internal] load metadata for docker.io/library/debian:bookworm-slim
#7 DONE 0.4s
#8 [internal] load .dockerignore
#8 transferring context: 234B done
#8 DONE 0.0s
#9 [web-builder 1/6] FROM docker.io/library/node:22-bookworm@sha256:8a34c4ab3ea2c5cd194f07e317b2a8f09461d3c8b05c4e34c8ccd56d56024c4d
#9 resolve docker.io/library/node:22-bookworm@sha256:8a34c4ab3ea2c5cd194f07e317b2a8f09461d3c8b05c4e34c8ccd56d56024c4d done
#9 DONE 0.0s
#10 [stage-2 1/9] FROM docker.io/library/debian:bookworm-slim@sha256:88200866dfff7ea7f5cbcb6ec7c8a701889efe6fe859fe64d6990e4b07ea4171
#10 resolve docker.io/library/debian:bookworm-slim@sha256:88200866dfff7ea7f5cbcb6ec7c8a701889efe6fe859fe64d6990e4b07ea4171 done
#10 DONE 0.0s
#11 [go-builder 1/7] FROM docker.io/library/golang:1.23-bookworm@sha256:167053a2bb901972bf2c1611f8f52c44d5fe7e762e5cab213708d82c421614db
#11 resolve docker.io/library/golang:1.23-bookworm@sha256:167053a2bb901972bf2c1611f8f52c44d5fe7e762e5cab213708d82c421614db done
#11 DONE 0.0s
#12 [internal] load build context
#12 transferring context: 677.84MB 2.3s done
#12 DONE 2.4s
#13 [web-builder 2/6] WORKDIR /web
#13 CACHED
#14 [web-builder 3/6] COPY web/package.json web/package-lock.json* ./
#14 CACHED
#15 [web-builder 4/6] RUN npm ci
#15 CACHED
#16 [go-builder 2/7] WORKDIR /src
#16 CACHED
#17 [go-builder 3/7] COPY go.mod go.sum ./
#17 CACHED
#18 [go-builder 4/7] RUN go mod download
#18 CACHED
#19 [go-builder 5/7] COPY . .
#19 ...
#20 [web-builder 5/6] COPY web/ ./
#20 DONE 0.2s
#21 [web-builder 6/6] RUN npm run build
#21 0.161
#21 0.161 > shuimu-workbench@1.0.0 build
#21 0.161 > tsc && vite build
#21 0.161
#21 ...
#19 [go-builder 5/7] COPY . .
#19 DONE 1.3s
#22 [go-builder 6/7] RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o /server ./cmd/server
#22 DONE 6.1s
#21 [web-builder 6/6] RUN npm run build
#21 4.487 vite v7.3.6 building client environment for production...
#21 4.524 transforming...
#21 ...
#23 [go-builder 7/7] RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o /events ./cmd/events
#23 DONE 0.5s
#21 [web-builder 6/6] RUN npm run build
#21 ...
#24 [stage-2 2/9] RUN set -eux; apt-get update; apt-get install -y --no-install-recommends ca-certificates curl; rm -rf /var/lib/apt/lists/*
#24 CACHED
#25 [stage-2 3/9] WORKDIR /app
#25 CACHED
#26 [stage-2 4/9] COPY --from=go-builder /server /app/server
#26 DONE 0.0s
#27 [stage-2 5/9] COPY --from=go-builder /events /app/events
#27 DONE 0.0s
#21 [web-builder 6/6] RUN npm run build
#21 12.09 ✓ 4112 modules transformed.
#21 12.64 rendering chunks...
#21 13.09 computing gzip size...
#21 13.13 dist/index.html 0.89 kB │ gzip: 0.52 kB
#21 13.13 dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff 4.42 kB
#21 13.13 dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 4.93 kB
#21 13.13 dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 5.21 kB
#21 13.13 dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 5.47 kB
#21 13.13 dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff 5.98 kB
#21 13.13 dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff 6.19 kB
#21 13.13 dist/assets/KaTeX_Size1-Regular-C195tn64.woff 6.50 kB
#21 13.13 dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 6.91 kB
#21 13.13 dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 6.91 kB
#21 13.13 dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf 7.59 kB
#21 13.13 dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff 7.66 kB
#21 13.13 dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff 7.72 kB
#21 13.13 dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 9.64 kB
#21 13.13 dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 10.34 kB
#21 13.13 dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf 10.36 kB
#21 13.13 dist/assets/KaTeX_Script-Regular-D5yQViql.woff 10.59 kB
#21 13.13 dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 11.32 kB
#21 13.13 dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 11.35 kB
#21 13.13 dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf 11.51 kB
#21 13.13 dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 12.03 kB
#21 13.13 dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 12.22 kB
#21 13.13 dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf 12.23 kB
#21 13.13 dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff 12.32 kB
#21 13.13 dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf 12.34 kB
#21 13.13 dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf 12.37 kB
#21 13.13 dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff 13.21 kB
#21 13.13 dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff 13.30 kB
#21 13.13 dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 13.57 kB
#21 13.13 dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff 14.11 kB
#21 13.13 dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff 14.41 kB
#21 13.13 dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff 16.03 kB
#21 13.13 dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 16.40 kB
#21 13.13 dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 16.44 kB
#21 13.13 dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf 16.65 kB
#21 13.13 dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 16.78 kB
#21 13.13 dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 16.99 kB
#21 13.13 dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff 18.67 kB
#21 13.13 dist/assets/KaTeX_Math-Italic-DA0__PXp.woff 18.75 kB
#21 13.13 dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff 19.41 kB
#21 13.13 dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf 19.44 kB
#21 13.13 dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf 19.57 kB
#21 13.13 dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf 19.58 kB
#21 13.13 dist/assets/KaTeX_Main-Italic-BMLOBm91.woff 19.68 kB
#21 13.13 dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf 22.36 kB
#21 13.13 dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf 24.50 kB
#21 13.13 dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 25.32 kB
#21 13.13 dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 26.27 kB
#21 13.13 dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf 27.56 kB
#21 13.13 dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 28.08 kB
#21 13.13 dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff 29.91 kB
#21 13.13 dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff 30.77 kB
#21 13.13 dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf 31.20 kB
#21 13.13 dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf 31.31 kB
#21 13.13 dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf 32.97 kB
#21 13.13 dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff 33.52 kB
#21 13.13 dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf 33.58 kB
#21 13.13 dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf 51.34 kB
#21 13.13 dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf 53.58 kB
#21 13.13 dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf 63.63 kB
#21 13.13 dist/assets/index-DhpBfxvE.css 35.50 kB │ gzip: 9.76 kB
#21 13.13 dist/assets/channel-D7OWRLcq.js 0.11 kB │ gzip: 0.12 kB
#21 13.13 dist/assets/init-Gi6I4Gst.js 0.15 kB │ gzip: 0.13 kB
#21 13.13 dist/assets/chunk-2Q5K7J3B-Cj_wzS6Y.js 0.19 kB │ gzip: 0.16 kB
#21 13.13 dist/assets/chunk-JWPE2WC7-CfBxnkTG.js 0.22 kB │ gzip: 0.17 kB
#21 13.13 dist/assets/chunk-XXDRQBXY-B42Y3MUf.js 0.22 kB │ gzip: 0.20 kB
#21 13.13 dist/assets/chunk-5VM5RSS4-CV0VxizH.js 0.36 kB │ gzip: 0.27 kB
#21 13.13 dist/assets/stateDiagram-v2-MP3YSRHH-B1k3W2Le.js 0.39 kB │ gzip: 0.28 kB
#21 13.13 dist/assets/classDiagram-ZZMXUADV-BIrMWLSb.js 0.43 kB │ gzip: 0.30 kB
#21 13.13 dist/assets/classDiagram-v2-VYDZK3BY-BIrMWLSb.js 0.43 kB │ gzip: 0.30 kB
#21 13.13 dist/assets/chunk-POPQ4Y6H-Dir__ZLL.js 0.50 kB │ gzip: 0.35 kB
#21 13.13 dist/assets/swimlanesDiagram-VR7AAH4N-DiA8woUx.js 0.51 kB │ gzip: 0.35 kB
#21 13.13 dist/assets/infoDiagram-27XIBGKW-DSGqz60b.js 0.55 kB │ gzip: 0.38 kB
#21 13.13 dist/assets/sizeCapture-INFHLROL-DyL1I74X.js 0.90 kB │ gzip: 0.51 kB
#21 13.13 dist/assets/ordinal-Cboi1Yqb.js 1.19 kB │ gzip: 0.57 kB
#21 13.13 dist/assets/railroadDiagram-O6MQD6OU-CbZ42ocg.js 1.57 kB │ gzip: 0.73 kB
#21 13.13 dist/assets/abnfDiagram-VCTEODGH-BzzJG09L.js 1.77 kB │ gzip: 0.87 kB
#21 13.13 dist/assets/chunk-F27PBJKO-CnvHeN6F.js 1.88 kB │ gzip: 0.83 kB
#21 13.13 dist/assets/pegDiagram-XKGWAZYB-XKbySdFd.js 1.92 kB │ gzip: 0.90 kB
#21 13.13 dist/assets/ebnfDiagram-PWID7BFC-D2srFNsf.js 1.97 kB │ gzip: 0.85 kB
#21 13.13 dist/assets/arc-T7pBIepJ.js 3.43 kB │ gzip: 1.48 kB
#21 13.13 dist/assets/diagram-Z3DM3KII-BHM1uRoj.js 4.18 kB │ gzip: 1.81 kB
#21 13.13 dist/assets/defaultLocale-DX6XiGOO.js 4.69 kB │ gzip: 2.18 kB
#21 13.13 dist/assets/linear-DKlrl5u4.js 5.65 kB │ gzip: 2.30 kB
#21 13.13 dist/assets/diagram-UQ7AKVKN-DX5CYDin.js 6.04 kB │ gzip: 2.60 kB
#21 13.13 dist/assets/pieDiagram-E7YTZNPT-DpKySv11.js 6.26 kB │ gzip: 2.60 kB
#21 13.13 dist/assets/diagram-S7CK7UJ4-CBNEo_lC.js 8.18 kB │ gzip: 3.65 kB
#21 13.13 dist/assets/cynefinDiagram-5FMLGOSQ-BGP3bg9A.js 10.06 kB │ gzip: 3.61 kB
#21 13.13 dist/assets/stateDiagram-D77RDMKH-CeGldvg6.js 10.33 kB │ gzip: 3.61 kB
#21 13.13 dist/assets/dagre-GXQ25YYZ-BC9b3LT7.js 10.64 kB │ gzip: 4.01 kB
#21 13.13 dist/assets/diagram-VSXAHHWV-GB-hGBQ5.js 10.68 kB │ gzip: 4.11 kB
#21 13.13 dist/assets/chunk-SVP7TREG-CgS-uNle.js 15.73 kB │ gzip: 4.41 kB
#21 13.13 dist/assets/diagram-VX7I27RA-5PY0o4ZW.js 15.92 kB │ gzip: 5.68 kB
#21 13.13 dist/assets/ishikawaDiagram-5VMMS53U-BQA_sIhf.js 17.43 kB │ gzip: 6.62 kB
#21 13.13 dist/assets/kanban-definition-UXKFOSKX-BtBM3Pk0.js 20.26 kB │ gzip: 7.18 kB
#21 13.13 dist/assets/mindmap-definition-YA3MSWOX-D8hwhGoM.js 23.14 kB │ gzip: 7.80 kB
#21 13.13 dist/assets/sankeyDiagram-P5KCCOFB-DAcuYeA6.js 23.16 kB │ gzip: 8.54 kB
#21 13.13 dist/assets/journeyDiagram-3NMN7TZE-CI8dcjOU.js 23.54 kB │ gzip: 8.33 kB
#21 13.13 dist/assets/wardleyDiagram-VM6X3IG4-Dppv4oGx.js 25.47 kB │ gzip: 6.77 kB
#21 13.13 dist/assets/gitGraphDiagram-WWUBYQGX-BMinR_uJ.js 29.38 kB │ gzip: 8.68 kB
#21 13.13 dist/assets/erDiagram-RLTQ6QDP-CeHp-INL.js 30.76 kB │ gzip: 10.57 kB
#21 13.13 dist/assets/timeline-definition-24CTP7MA-DWhChF6n.js 30.79 kB │ gzip: 10.13 kB
#21 13.13 dist/assets/requirementDiagram-BXWQKSXE-B8HeLBJ6.js 30.97 kB │ gzip: 9.70 kB
#21 13.13 dist/assets/quadrantDiagram-AXDQQJYC-CwDbmJ9i.js 33.98 kB │ gzip: 9.96 kB
#21 13.13 dist/assets/layout-BJpwe_yj.js 35.43 kB │ gzip: 12.74 kB
#21 13.13 dist/assets/chunk-IMKFNOWR-BHQX--pf.js 38.07 kB │ gzip: 12.51 kB
#21 13.13 dist/assets/blockDiagram-I7D4REHJ-C7-Av3Qi.js 41.72 kB │ gzip: 13.56 kB
#21 13.13 dist/assets/vennDiagram-4TSXK5OY-CD8fKQvo.js 41.93 kB │ gzip: 15.67 kB
#21 13.13 dist/assets/xychartDiagram-S5SC5T6Z-5L7qbPec.js 44.47 kB │ gzip: 12.58 kB
#21 13.13 dist/assets/chunk-TICWLB2K-C1eTMCug.js 49.17 kB │ gzip: 15.74 kB
#21 13.13 dist/assets/flowDiagram-HODETNUW-f2TE122r.js 61.84 kB │ gzip: 19.87 kB
#21 13.13 dist/assets/c4Diagram-7LVT6UL2-dnkqL61v.js 65.44 kB │ gzip: 18.77 kB
#21 13.13 dist/assets/ganttDiagram-EL5Y4UJY-U3Xgnk9x.js 69.66 kB │ gzip: 23.54 kB
#21 13.13 dist/assets/cose-bilkent-JH36ORCC-BOzL_8xd.js 81.66 kB │ gzip: 22.46 kB
#21 13.13 dist/assets/swimlanes-42K2YHIH-C9SrfllT.js 115.76 kB │ gzip: 42.49 kB
#21 13.13 dist/assets/sequenceDiagram-WJ2MYXX4-DQCQlIo2.js 116.93 kB │ gzip: 31.11 kB
#21 13.13 dist/assets/architectureDiagram-5GKGNRK7-95-ztnka.js 151.79 kB │ gzip: 43.12 kB
#21 13.13 dist/assets/katex-HP8lGamR.js 261.31 kB │ gzip: 77.57 kB
#21 13.13 dist/assets/cytoscape.esm-BB4DxJjf.js 443.04 kB │ gzip: 141.98 kB
#21 13.13 dist/assets/cynefin-OW5HDTMX-CylEEwct.js 687.91 kB │ gzip: 154.14 kB
#21 13.13 dist/assets/index-BvuQnMEe.js 2,801.27 kB │ gzip: 797.76 kB
#21 13.13
#21 13.13 (!) Some chunks are larger than 500 kB after minification. Consider:
#21 13.13 - Using dynamic import() to code-split the application
#21 13.13 - Use build.rollupOptions.output.manualChunks to improve chunking: https://rollupjs.org/configuration-options/#output-manualchunks
#21 13.13 - Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.
#21 13.13 ✓ built in 8.63s
#21 DONE 13.3s
#28 [stage-2 6/9] COPY --from=web-builder /web/dist /app/web/dist
#28 DONE 0.0s
#29 [stage-2 7/9] COPY deploy/postgres/goose /app/deploy/postgres/goose
#29 DONE 0.0s
#30 [stage-2 8/9] COPY templates /app/templates
#30 DONE 0.0s
#31 [stage-2 9/9] COPY configs /app/configs
#31 DONE 0.0s
#32 exporting to image
#32 exporting layers
#32 exporting layers 0.5s done
#32 exporting manifest sha256:1648b282134f051ab386e5621b02316496555ad08c40908f0f72528e39f4c8d8 done
#32 exporting config sha256:a29295139d258f229db91f32c7bdef7e91278823a3cae79f61a8b2de1628f585 done
#32 exporting attestation manifest sha256:7bc612132395996a8cb40b6bdb0df328cd4a2784de23be9cf9c95f49bbc684a2 done
#32 exporting manifest list sha256:e23f3fbf514684c3f365137f430714c187ba9870061765c318a144ce9ad1108c done
#32 naming to docker.io/library/shuimu-agent-app:candidate-6e2476f0f2e4 done
#32 unpacking to docker.io/library/shuimu-agent-app:candidate-6e2476f0f2e4 0.1s done
#32 DONE 0.6s
==> building pi-agent image shuimu-pi-agent:candidate-6e2476f0f2e4...
#0 building with "default" instance using docker driver
#1 [internal] load build definition from Dockerfile
#1 transferring dockerfile: 1.58kB done
#1 DONE 0.0s
#2 [internal] load metadata for docker.io/library/node:22-bookworm-slim
#2 DONE 0.1s
#3 [internal] load .dockerignore
#3 transferring context: 234B done
#3 DONE 0.0s
#4 [ 1/11] FROM docker.io/library/node:22-bookworm-slim@sha256:83f487e0a63425e5b4d146fb5e5be574bcbe1b7b843d3ebafdd95eaf7767a7e5
#4 resolve docker.io/library/node:22-bookworm-slim@sha256:83f487e0a63425e5b4d146fb5e5be574bcbe1b7b843d3ebafdd95eaf7767a7e5 done
#4 DONE 0.0s
#5 [internal] load build context
#5 transferring context: 370B 0.4s done
#5 DONE 0.4s
#6 [ 2/11] RUN set -eux; apt-get update; apt-get install -y --no-install-recommends ca-certificates curl git bash; rm -rf /var/lib/apt/lists/*
#6 CACHED
#7 [ 4/11] RUN pi --version
#7 CACHED
#8 [ 7/11] COPY deploy/pi-agent/runner.mjs /app/runner.mjs
#8 CACHED
#9 [ 8/11] COPY deploy/pi-agent/result-v1.mjs /app/result-v1.mjs
#9 CACHED
#10 [ 9/11] COPY deploy/pi-agent/settle-policy.mjs /app/settle-policy.mjs
#10 CACHED
#11 [10/11] COPY deploy/pi-agent/entrypoint.sh /app/entrypoint.sh
#11 CACHED
#12 [ 5/11] WORKDIR /app
#12 CACHED
#13 [ 3/11] RUN npm install -g @earendil-works/pi-coding-agent@0.85.1 --omit=dev
#13 CACHED
#14 [ 6/11] COPY deploy/pi-agent/extensions/ /app/extensions/
#14 CACHED
#15 [11/11] RUN chmod +x /app/entrypoint.sh /app/runner.mjs
#15 CACHED
#16 exporting to image
#16 exporting layers done
#16 exporting manifest sha256:de620a969be5fa7b7d10d1d3f428d17d89934808acadab4530d3c3586c974661 0.0s done
#16 exporting config sha256:6660ada07412b46efeeb281537f0174b4aa5cb213daa743c0e61dc0b85a252b3 done
#16 exporting attestation manifest sha256:42059fd4fd73e52c4795385417499de7dff81d6e1791741b60ccf8b75aa405dd done
#16 exporting manifest list sha256:6cb11af8aa0f85c032209447b620ce6cfce072eab77b2742840b8af86dc104ad done
#16 naming to docker.io/library/shuimu-pi-agent:candidate-6e2476f0f2e4 done
#16 unpacking to docker.io/library/shuimu-pi-agent:candidate-6e2476f0f2e4 done
#16 DONE 0.0s
/home/weichen/projects/Agent-System/.doc/test-reports/assets/promotion-receipts/6e2476f0f2e408e111fe06ca7c31a38294a340b3.images.json
wrote candidate images manifest: /home/weichen/projects/Agent-System/.doc/test-reports/assets/promotion-receipts/6e2476f0f2e408e111fe06ca7c31a38294a340b3.images.json
app=shuimu-agent-app@sha256:e23f3fbf514684c3f365137f430714c187ba9870061765c318a144ce9ad1108c
events=shuimu-agent-app@sha256:e23f3fbf514684c3f365137f430714c187ba9870061765c318a144ce9ad1108c
pi-agent=shuimu-pi-agent@sha256:6cb11af8aa0f85c032209447b620ce6cfce072eab77b2742840b8af86dc104ad
@@ -0,0 +1,10 @@
=== RUN TestWorkflowGovernance_PiAgent_PG_FullNoneMixedChain
2026/09/16 23:37:05 goose: no migrations to run. current version: 48
2026/09/16 23:37:05 goose: no migrations to run. current version: 48
2026/09/16 23:37:05 [kb] 无法连接到 PostgreSQL 知识库 (postgres://regkb:shared_kb_secret_pass@shuimu-kb-shared:5432/regulations?sslmode=disable): failed to connect to `user=regkb database=regulations`: 198.18.0.100:5432 (shuimu-kb-shared): failed to receive message: unexpected EOF, 将降级运行在离线模式
workflow_governance_full_none_piagent_pg_test.go:147: ✓ [1. activate] instance=27 full=intake none=research(disabled until stage)
workflow_governance_full_none_piagent_pg_test.go:201: pi-agent intake: Post "http://127.0.0.1:41421/api/v1/tasks/run": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
--- FAIL: TestWorkflowGovernance_PiAgent_PG_FullNoneMixedChain (3000.32s)
FAIL
FAIL chat-agent-system/internal/server 3000.329s
FAIL
@@ -0,0 +1,9 @@
=== RUN TestWorkflowGovernance_PiAgent_PG_FullNoneMixedChain
2026/09/17 00:52:02 goose: no migrations to run. current version: 48
2026/09/17 00:52:02 goose: no migrations to run. current version: 48
workflow_governance_full_none_piagent_pg_test.go:149: ✓ [1. activate] instance=29 full=intake none=research(disabled until stage)
workflow_governance_full_none_piagent_pg_test.go:205: pi-agent intake HTTP 500: {"task_key":"intake","artifact_title":"用户初始需求收集表","markdown_body":"","extracted_data":null,"attachments":null,"work_dir":"data/dev/workspaces/bizdev/intake_1789606322763996592","backend_used":"pi-agent","duration":38057250468,"success":false,"error_reason":"step step_01_organize failed: MISSING_TARGET"}
--- FAIL: TestWorkflowGovernance_PiAgent_PG_FullNoneMixedChain (38.29s)
FAIL
FAIL chat-agent-system/internal/server 38.296s
FAIL
@@ -0,0 +1,15 @@
=== RUN TestWorkflowGovernance_PiAgent_PG_FullNoneMixedChain
2026/09/17 00:55:12 goose: no migrations to run. current version: 48
2026/09/17 00:55:12 goose: no migrations to run. current version: 48
workflow_governance_full_none_piagent_pg_test.go:149: ✓ [1. activate] instance=30 full=intake none=research(disabled until stage)
workflow_governance_full_none_piagent_pg_test.go:205: ✓ pi-agent intake doc=doc_proj6054_intake elapsed=3m9s
workflow_governance_full_none_piagent_pg_test.go:220: ✓ [2. full intake] cross-user approve complete
workflow_governance_full_none_piagent_pg_test.go:232: ✓ [3. advance V0.1] ok
workflow_governance_full_none_piagent_pg_test.go:234: ✓ pi-agent research doc=doc_proj6054_research elapsed=13m38s
workflow_governance_full_none_piagent_pg_test.go:253: ✓ [4. none research] generate ok; submit-review denied HTTP 403
workflow_governance_full_none_piagent_pg_test.go:282: ✓ [5. readiness] none does not block
workflow_governance_full_none_piagent_pg_test.go:308: ✓ [6. advance V0.5] none non-blocking PASS
workflow_governance_full_none_piagent_pg_test.go:318: ✓ [7. refresh] settings still readable
--- PASS: TestWorkflowGovernance_PiAgent_PG_FullNoneMixedChain (1008.70s)
PASS
ok chat-agent-system/internal/server 1008.709s
@@ -0,0 +1,43 @@
=== RUN TestWorkflowGovernance_PiAgent_PG_FullNoneMixedChain
--- FAIL: TestWorkflowGovernance_PiAgent_PG_FullNoneMixedChain (0.01s)
panic: goose: duplicate version 48 detected:
/home/weichen/projects/Agent-System/deploy/postgres/goose/00048_2026-09-16-software-project-type.sql
/home/weichen/projects/Agent-System/deploy/postgres/goose/00048_2026-09-16-software-project-bootstrap-fields.sql [recovered, repanicked]
goroutine 8 [running]:
testing.tRunner.func1.2({0x179a7e0, 0x69347922100})
/home/linuxbrew/.linuxbrew/Cellar/go/1.27.1/libexec/src/testing/testing.go:2123 +0x232
testing.tRunner.func1()
/home/linuxbrew/.linuxbrew/Cellar/go/1.27.1/libexec/src/testing/testing.go:2126 +0x329
panic({0x179a7e0?, 0x69347922100?})
/home/linuxbrew/.linuxbrew/Cellar/go/1.27.1/libexec/src/runtime/panic.go:859 +0x125
github.com/pressly/goose/v3.Migrations.Less({0x69347c40600, 0x69347934048?, 0xc?}, 0x30, 0x2f)
/home/weichen/go/pkg/mod/github.com/pressly/goose/v3@v3.24.1/migrate.go:35 +0x127
sort.partialInsertionSort({0x1893f00, 0x69347934048}, 0x0, 0x31)
/home/linuxbrew/.linuxbrew/Cellar/go/1.27.1/libexec/src/sort/zsortinterface.go:202 +0x7b
sort.pdqsort({0x1893f00, 0x69347934048}, 0x187aac0?, 0x0?, 0x69347956f8a?)
/home/linuxbrew/.linuxbrew/Cellar/go/1.27.1/libexec/src/sort/zsortinterface.go:101 +0x16c
sort.Sort({0x1893f00, 0x69347934048})
/home/linuxbrew/.linuxbrew/Cellar/go/1.27.1/libexec/src/sort/sort.go:56 +0x54
github.com/pressly/goose/v3.sortAndConnectMigrations({0x69347c40600, 0x31, 0x40})
/home/weichen/go/pkg/mod/github.com/pressly/goose/v3@v3.24.1/migrate.go:178 +0x35
github.com/pressly/goose/v3.collectMigrationsFS({0x188ce60, 0x1a0db60}, {0x693477ce500, 0x39}, 0x0, 0x7fffffffffffffff, 0x69347ae60c0)
/home/weichen/go/pkg/mod/github.com/pressly/goose/v3@v3.24.1/migrate.go:168 +0x594
github.com/pressly/goose/v3.CollectMigrations(...)
/home/weichen/go/pkg/mod/github.com/pressly/goose/v3@v3.24.1/migrate.go:174
github.com/pressly/goose/v3.UpToContext({0x1894b80, 0x693479384d0}, 0x693479545b0, {0x693477ce500, 0x39}, 0x7fffffffffffffff, {0x0, 0x0, 0x13?})
/home/weichen/go/pkg/mod/github.com/pressly/goose/v3@v3.24.1/up.go:46 +0xf1
github.com/pressly/goose/v3.UpContext(...)
/home/weichen/go/pkg/mod/github.com/pressly/goose/v3@v3.24.1/up.go:168
chat-agent-system/internal/db.RunMigrations({0x1894b80, 0x693479384d0}, 0x69347bb8000, {0xe533e5?, 0x6934799d608?})
/home/weichen/projects/Agent-System/internal/db/migrate.go:40 +0x2fd
chat-agent-system/internal/server_test.openPGPoolWithMigrations(0x6934798d8c8)
/home/weichen/projects/Agent-System/internal/server/workflow_governance_pg_test.go:40 +0x230
chat-agent-system/internal/server_test.TestWorkflowGovernance_PiAgent_PG_FullNoneMixedChain(0x6934798d8c8)
/home/weichen/projects/Agent-System/internal/server/workflow_governance_full_none_piagent_pg_test.go:32 +0xe5
testing.tRunner(0x6934798d8c8, 0x1898c88)
/home/linuxbrew/.linuxbrew/Cellar/go/1.27.1/libexec/src/testing/testing.go:2193 +0xea
created by testing.(*T).Run in goroutine 1
/home/linuxbrew/.linuxbrew/Cellar/go/1.27.1/libexec/src/testing/testing.go:2258 +0x4d4
FAIL chat-agent-system/internal/server 0.013s
FAIL
@@ -0,0 +1,13 @@
=== RUN TestWorkflowGovernance_PiAgent_PG_FullNoneMixedChain
2026/09/17 00:28:49 goose: no migrations to run. current version: 48
2026/09/17 00:28:49 goose: no migrations to run. current version: 48
2026/09/17 00:28:49 [kb] 无法连接到 PostgreSQL 知识库 (postgres://regkb:shared_kb_secret_pass@127.0.0.1:5432/regulations?sslmode=disable): failed to connect to `user=regkb database=regulations`: 127.0.0.1:5432 (127.0.0.1): failed SASL auth: FATAL: password authentication failed for user "regkb" (SQLSTATE 28P01), 将降级运行在离线模式
workflow_governance_full_none_piagent_pg_test.go:149: ✓ [1. activate] instance=28 full=intake none=research(disabled until stage)
workflow_governance_full_none_piagent_pg_test.go:203: ✓ pi-agent intake doc=doc_proj6052_intake elapsed=4m48s
workflow_governance_full_none_piagent_pg_test.go:218: ✓ [2. full intake] cross-user approve complete
workflow_governance_full_none_piagent_pg_test.go:230: ✓ [3. advance V0.1] ok
workflow_governance_full_none_piagent_pg_test.go:232: pi-agent research failed
--- FAIL: TestWorkflowGovernance_PiAgent_PG_FullNoneMixedChain (1318.36s)
FAIL
FAIL chat-agent-system/internal/server 1318.366s
FAIL
@@ -0,0 +1,8 @@
=== RUN TestProjectCreate_PG_ChineseNameViaHTTP
2026/09/16 23:36:49 OK 00048_2026-09-16-software-project-bootstrap-fields.sql (31.27ms)
2026/09/16 23:36:49 goose: successfully migrated database to version: 48
2026/09/16 23:36:49 goose: no migrations to run. current version: 48
2026/09/16 23:36:49 [kb] 无法连接到 PostgreSQL 知识库 (postgres://:@:0/?sslmode=disable): cannot parse `postgres://:xxxxx@:0/?sslmode=disable`: invalid port (outside range), 将降级运行在离线模式
--- PASS: TestProjectCreate_PG_ChineseNameViaHTTP (0.19s)
PASS
ok chat-agent-system/internal/server 0.193s
@@ -0,0 +1,31 @@
==> nightly real-PI suite commit=6e2476f0f2e4 runner=http://127.0.0.1:18865
=== RUN TestMultiIntentU8_RealPI_ConfirmGenerate_PG
2026/09/17 01:12:48 goose: no migrations to run. current version: 48
2026/09/17 01:12:48 goose: no migrations to run. current version: 48
multi_intent_u8_piagent_pg_test.go:228: ✓ [1. awaiting] plan_id=pln_f281c224151590d03d740617220bacb4 revision=1 starts=0
{"time":"2026-09-17T01:17:00.078516672Z","level":"INFO","msg":"taskrun_status_transition","run_id":"run_1789607568656808844","status":"completed","workspace_id":"/home/weichen/projects/Agent-System/data/dev/workspaces/bizdev/intake_1789607568667849656","error":""}
multi_intent_u8_piagent_pg_test.go:268: ✓ [2. real PI generate] run_id=run_1789607568656808844 status=completed elapsed=4m11s
multi_intent_u8_piagent_pg_test.go:277: ✓ [3. idempotent replay] starts still 1
multi_intent_u8_piagent_pg_test.go:287: ✓ [4. revoke] TaskRunAdapter denied
multi_intent_u8_piagent_pg_test.go:310: ✓ [5. PG restart recovery] plan_id=pln_f281c224151590d03d740617220bacb4 status=executing
multi_intent_u8_piagent_pg_test.go:321: ✓ [6. HTTP refresh] GET plan 486 bytes
--- PASS: TestMultiIntentU8_RealPI_ConfirmGenerate_PG (251.73s)
=== RUN TestWorkflowGovernance_PiAgent_PG_FullNoneMixedChain
{"time":"2026-09-17T01:17:00.09340798Z","level":"INFO","msg":"goose: no migrations to run. current version: 48"}
{"time":"2026-09-17T01:17:00.104988436Z","level":"INFO","msg":"goose: no migrations to run. current version: 48"}
workflow_governance_full_none_piagent_pg_test.go:149: ✓ [1. activate] instance=32 full=intake none=research(disabled until stage)
workflow_governance_full_none_piagent_pg_test.go:205: ✓ pi-agent intake doc=doc_proj6056_intake elapsed=4m43s
workflow_governance_full_none_piagent_pg_test.go:220: ✓ [2. full intake] cross-user approve complete
workflow_governance_full_none_piagent_pg_test.go:232: ✓ [3. advance V0.1] ok
workflow_governance_full_none_piagent_pg_test.go:234: ✓ pi-agent research doc=doc_proj6056_research elapsed=19m25s
workflow_governance_full_none_piagent_pg_test.go:253: ✓ [4. none research] generate ok; submit-review denied HTTP 403
workflow_governance_full_none_piagent_pg_test.go:282: ✓ [5. readiness] none does not block
workflow_governance_full_none_piagent_pg_test.go:308: ✓ [6. advance V0.5] none non-blocking PASS
workflow_governance_full_none_piagent_pg_test.go:318: ✓ [7. refresh] settings still readable
--- PASS: TestWorkflowGovernance_PiAgent_PG_FullNoneMixedChain (1452.38s)
PASS
ok chat-agent-system/internal/server 1704.125s
warning: NIGHTLY_SKIP_IMAGE_BUILD=1 and no images.json; PASS may lack digests
/home/weichen/projects/Agent-System/.doc/test-reports/assets/promotion-receipts/6e2476f0f2e408e111fe06ca7c31a38294a340b3.json
wrote promotion receipt: /home/weichen/projects/Agent-System/.doc/test-reports/assets/promotion-receipts/6e2476f0f2e408e111fe06ca7c31a38294a340b3.json
nightly real-PI PASS; receipt written for 6e2476f0f2e4
@@ -0,0 +1,26 @@
=== RUN TestMultiIntentU8_RealPI_ConfirmGenerate_PG
2026/09/17 01:12:48 goose: no migrations to run. current version: 48
2026/09/17 01:12:48 goose: no migrations to run. current version: 48
multi_intent_u8_piagent_pg_test.go:228: ✓ [1. awaiting] plan_id=pln_f281c224151590d03d740617220bacb4 revision=1 starts=0
{"time":"2026-09-17T01:17:00.078516672Z","level":"INFO","msg":"taskrun_status_transition","run_id":"run_1789607568656808844","status":"completed","workspace_id":"/home/weichen/projects/Agent-System/data/dev/workspaces/bizdev/intake_1789607568667849656","error":""}
multi_intent_u8_piagent_pg_test.go:268: ✓ [2. real PI generate] run_id=run_1789607568656808844 status=completed elapsed=4m11s
multi_intent_u8_piagent_pg_test.go:277: ✓ [3. idempotent replay] starts still 1
multi_intent_u8_piagent_pg_test.go:287: ✓ [4. revoke] TaskRunAdapter denied
multi_intent_u8_piagent_pg_test.go:310: ✓ [5. PG restart recovery] plan_id=pln_f281c224151590d03d740617220bacb4 status=executing
multi_intent_u8_piagent_pg_test.go:321: ✓ [6. HTTP refresh] GET plan 486 bytes
--- PASS: TestMultiIntentU8_RealPI_ConfirmGenerate_PG (251.73s)
=== RUN TestWorkflowGovernance_PiAgent_PG_FullNoneMixedChain
{"time":"2026-09-17T01:17:00.09340798Z","level":"INFO","msg":"goose: no migrations to run. current version: 48"}
{"time":"2026-09-17T01:17:00.104988436Z","level":"INFO","msg":"goose: no migrations to run. current version: 48"}
workflow_governance_full_none_piagent_pg_test.go:149: ✓ [1. activate] instance=32 full=intake none=research(disabled until stage)
workflow_governance_full_none_piagent_pg_test.go:205: ✓ pi-agent intake doc=doc_proj6056_intake elapsed=4m43s
workflow_governance_full_none_piagent_pg_test.go:220: ✓ [2. full intake] cross-user approve complete
workflow_governance_full_none_piagent_pg_test.go:232: ✓ [3. advance V0.1] ok
workflow_governance_full_none_piagent_pg_test.go:234: ✓ pi-agent research doc=doc_proj6056_research elapsed=19m25s
workflow_governance_full_none_piagent_pg_test.go:253: ✓ [4. none research] generate ok; submit-review denied HTTP 403
workflow_governance_full_none_piagent_pg_test.go:282: ✓ [5. readiness] none does not block
workflow_governance_full_none_piagent_pg_test.go:308: ✓ [6. advance V0.5] none non-blocking PASS
workflow_governance_full_none_piagent_pg_test.go:318: ✓ [7. refresh] settings still readable
--- PASS: TestWorkflowGovernance_PiAgent_PG_FullNoneMixedChain (1452.38s)
PASS
ok chat-agent-system/internal/server 1704.125s
@@ -0,0 +1,14 @@
{
"ok": true,
"service": "shuimu-pi-agent-runner",
"endpoint_url": "https://api.minimaxi.com/v1",
"model_id": "MiniMax-M2.7-highspeed",
"api": "openai-compatible",
"has_token": true,
"tavily": {
"active": true,
"keys_count": 2
},
"data_dir": "/app/data/workspaces",
"uptime": 2687.95113564
}
@@ -0,0 +1,5 @@
arch-check mode=block
boundaries=/home/weichen/projects/Agent-System/.doc/system-design/module-boundaries.yaml
ok chat-agent-system/internal/archtest 0.162s
ok chat-agent-system/internal/archtest 0.147s
arch-check block: production gate passed
@@ -0,0 +1,5 @@
=== RUN TestPiSemanticSummarizer_LiveMiniMax
semantic_summarizer_test.go:152: model=MiniMax-M2.7-highspeed protocol=semantic-summary-v1 elapsed=7.779s narrative="# 授权对话摘要\n\n用户就高频超声手术刀系统的研发立项事宜寻求建议。助手回复指出,该项目需重点关注电气安全要求及产品型检周期等关键事项。"
--- PASS: TestPiSemanticSummarizer_LiveMiniMax (7.78s)
PASS
ok chat-agent-system/internal/app 7.785s
@@ -0,0 +1,12 @@
=== RUN TestPiChangeReportNarrator_LiveMiniMax
pi_narrative_test.go:104: elapsed=7.275s raw={
"schema_version": 1,
"schema_kind": "change_report_narrative_v1",
"input_digest": "abababababababababababababababababababababababababababababababab",
"from_sha": "fromsha",
"to_sha": "tosha",
"summary": ["变更风险等级为中等", "包含0个影响点和0个代码块"]
}
--- PASS: TestPiChangeReportNarrator_LiveMiniMax (7.28s)
PASS
ok chat-agent-system/internal/app 7.280s
@@ -0,0 +1,9 @@
▶ change report view model
✔ surfaces risk items, project impact, doc impacts with advice, and open questions
✔ marks complete analysis as PI narrative vs factual fields
✔ preferReportId prioritizes pending over committed latest
✔ change report view model
ℹ tests 14
ℹ suites 3
ℹ pass 14
ℹ fail 0
@@ -0,0 +1,2 @@
=== RUN TestU10IndependentFlagDryRunConfirmReceipt
--- PASS: TestU10IndependentFlagDryRunConfirmReceipt (0.00s)
@@ -0,0 +1,2 @@
=== RUN TestU11DocGovProject143ReadOnly
--- PASS: TestU11DocGovProject143ReadOnly (0.00s)
@@ -0,0 +1,2 @@
=== RUN TestU12RunControlIndependentDryRun
--- PASS: TestU12RunControlIndependentDryRun (0.00s)
@@ -0,0 +1,3 @@
=== RUN TestPiSegmentProposer_LiveMiniMax
pi_segment_test.go:121: elapsed=16.163s proposal=&{SchemaVersion:intentflow.segment_proposal.v1 Digest:live-u9-digest Spans:[{Start:0 End:48 Text:帮我看看电气安全条款生成立项建议}]}
--- PASS: TestPiSegmentProposer_LiveMiniMax (16.16s)
@@ -0,0 +1,3 @@
=== RUN TestPiSoftwareBootstrapAdvisor_LiveMiniMax
elapsed=14.928s narrative=# 自举配置 ... software_delivery ... 自动激活: false
--- PASS: TestPiSoftwareBootstrapAdvisor_LiveMiniMax (14.93s)
@@ -0,0 +1,21 @@
{
"binary": "artifact-vault",
"consumer": "fav",
"consumer_mode": "off",
"degraded_read": false,
"note": "do not enable FAV_DEGRADED_READ or fav consumer without approval; subscriber shadow is read-only",
"publisher_default": false,
"remaining_to_port": [
"enumerate.go (EnumerateTerminals / LoadExclusions)",
"TerminalRow + Backfill(rows) API (diverged from dataset Candidate path)",
"full recover-plan / recover-apply / gc-preflight / destroy",
"server ingest hooks (OnFinalArtifact*)",
"durable fav event Register after separate approval",
"live staging → artifact → publication (each ≥7d observation)"
],
"shadow_observe": true,
"slice": "u7-incremental-stub",
"source_branch": "feature/final-artifact-vault",
"would_publish": false,
"would_stage": false
}
@@ -0,0 +1,75 @@
=== go vet ===
VET_EXIT:0
=== go test -short ===
? chat-agent-system/cmd/artifact-vault [no test files]
ok chat-agent-system/cmd/bizdev-cli 2.318s
? chat-agent-system/cmd/dataset [no test files]
ok chat-agent-system/cmd/document-content-reconcile (cached)
? chat-agent-system/cmd/document-revision-backfill [no test files]
? chat-agent-system/cmd/eventmode [no test files]
? chat-agent-system/cmd/events [no test files]
? chat-agent-system/cmd/recategorize [no test files]
? chat-agent-system/cmd/server [no test files]
ok chat-agent-system/internal/agent 3.521s
ok chat-agent-system/internal/app 0.017s
ok chat-agent-system/internal/app/chatflow (cached)
ok chat-agent-system/internal/app/docadvance 0.002s
ok chat-agent-system/internal/app/docflow (cached)
ok chat-agent-system/internal/app/docnotify (cached)
ok chat-agent-system/internal/app/docproject (cached)
ok chat-agent-system/internal/app/fav 0.002s
ok chat-agent-system/internal/app/intentflow (cached)
ok chat-agent-system/internal/app/stageflow (cached)
ok chat-agent-system/internal/app/uow (cached)
ok chat-agent-system/internal/archtest 0.156s
ok chat-agent-system/internal/artifactvault (cached)
ok chat-agent-system/internal/auth (cached)
ok chat-agent-system/internal/authz (cached)
ok chat-agent-system/internal/bizdev 0.147s
ok chat-agent-system/internal/chat 0.012s
ok chat-agent-system/internal/config (cached)
ok chat-agent-system/internal/coordinator (cached)
ok chat-agent-system/internal/ctxmgr (cached)
ok chat-agent-system/internal/dataset (cached)
ok chat-agent-system/internal/db (cached)
ok chat-agent-system/internal/doccontent (cached)
ok chat-agent-system/internal/docduty (cached)
ok chat-agent-system/internal/docgov (cached)
ok chat-agent-system/internal/docquery (cached)
ok chat-agent-system/internal/docrevision (cached)
ok chat-agent-system/internal/events (cached)
ok chat-agent-system/internal/freedoc (cached)
ok chat-agent-system/internal/fsutil (cached)
ok chat-agent-system/internal/httpx (cached)
ok chat-agent-system/internal/intent (cached)
ok chat-agent-system/internal/kb (cached)
ok chat-agent-system/internal/maturity (cached)
ok chat-agent-system/internal/notification (cached)
? chat-agent-system/internal/observability [no test files]
ok chat-agent-system/internal/projectcontext (cached)
ok chat-agent-system/internal/projectinstance (cached)
ok chat-agent-system/internal/projectworkflow (cached)
ok chat-agent-system/internal/quote (cached)
ok chat-agent-system/internal/replyexport (cached)
ok chat-agent-system/internal/server 10.993s
ok chat-agent-system/internal/squad (cached)
ok chat-agent-system/internal/storage (cached)
ok chat-agent-system/internal/stream (cached)
ok chat-agent-system/internal/stream/transport (cached)
ok chat-agent-system/internal/swboot (cached)
ok chat-agent-system/internal/taskrun 0.194s
ok chat-agent-system/internal/template 0.999s
ok chat-agent-system/internal/upload (cached)
? chat-agent-system/internal/workflow [no test files]
ok chat-agent-system/internal/workflow/runtime (cached)
ok chat-agent-system/internal/workflowdef (cached)
ok chat-agent-system/internal/workspace (cached)
? chat-agent-system/templates [no test files]
TEST_EXIT:0
=== arch-check ===
arch-check mode=block
boundaries=/home/weichen/projects/Agent-System/.doc/system-design/module-boundaries.yaml
ok chat-agent-system/internal/archtest 0.133s
ok chat-agent-system/internal/archtest 0.144s
arch-check block: production gate passed
ARCH_EXIT:0
@@ -0,0 +1,15 @@
=== RUN TestFavSubscriberDefaultsDisabled
--- PASS: TestFavSubscriberDefaultsDisabled (0.00s)
=== RUN TestFavSubscriberStillDisabledWhenFlagOnWithoutRegistryApproval
--- PASS: TestFavSubscriberStillDisabledWhenFlagOnWithoutRegistryApproval (0.00s)
=== RUN TestFavSubscriberShadowComputesIntendedOutcomeWithoutWrites
--- PASS: TestFavSubscriberShadowComputesIntendedOutcomeWithoutWrites (0.00s)
PASS
ok chat-agent-system/internal/app/fav 0.002s
=== RUN TestVaultDefaultsStayDisabled
--- PASS: TestVaultDefaultsStayDisabled (0.00s)
=== RUN TestVaultStatusReportsOff
--- PASS: TestVaultStatusReportsOff (0.00s)
PASS
ok chat-agent-system/internal/server 0.007s
EXIT:0
@@ -0,0 +1,30 @@
time=2026-09-17T04:26:50.573Z level=INFO msg="goose: no migrations to run. current version: 48"
time=2026-09-17T04:26:50.588Z level=INFO msg="[kb] online=true dsn=postgres://regkb:***@shuimu-kb-shared:5432/regulations?sslmode=disable"
time=2026-09-17T04:26:50.640Z level=INFO msg=taskrun_orphans_marked_interrupted count=1
==================================================================
🤖 医疗器械商务与研发智能参谋系统 - HTTP / SSE API 守护服务
==================================================================
服务环境: dev | 智能体后端: pi-agent
监听地址: http://0.0.0.0:8080
核心服务路由:
• [GET] /api/v1/health - 服务健康检查与基础设施状态
• [GET] /api/v1/projects - 查询项目当前上下文与黑板事实
• [POST] /api/v1/chat - 标准阻塞式对话协同接口
• [POST] /api/v1/chat/stream - 核心 SSE 流式长连接对话协议 (分层按需)
• [GET] /api/v1/chat/stream - SSE 流式长连接对话调试接口 (EventSource)
• [POST] /api/v1/tasks/run/stream - 独立任务与阶段执行 SSE 监控流 (精简进度与拦截)
• [GET] /api/v1/context/user - 获取单用户私有上下文与习惯偏好画像
• [PUT] /api/v1/context/user/preference - 整理或更新用户个性化产出风格
• [GET] /api/v1/context/project - 获取项目多方协同黑板事实与里程碑决策流
• [GET] /api/v1/chat/sessions - 分页查询用户/项目历史会话列表
• [GET] /api/v1/chat/messages - 分页拉取指定会话多轮历史消息记录
• [GET] /api/v1/context/cases/recommend - 往期受控标杆案例与历史报价语义自推荐
• [GET] /api/v1/docgov/document - 查询受控文档治理状态看板
• [POST] /api/v1/docgov/claim - 查阅并认领受控文档 (正式稿方可认领)
• [POST] /api/v1/docgov/proposal/decide - 编制负责人拍板同意/拒绝变更提案
• [POST] /api/v1/docgov/submit-review - 编制完成提交审核 (文档正文锁定)
• [POST] /api/v1/docgov/review-decision - 审核通过或驳回 (驳回必填原因且解锁)
• [POST] /api/v1/docgov/approver-decision - 最终批准或驳回
• [GET/POST] /api/v1/docgov/comments - 批注与修改建议管理
• [GET] /api/v1/docgov/audit-logs - 全生命周期审计轨迹流
==================================================================

Some files were not shown because too many files have changed in this diff Show More