# 降级功能开关放量 dev(short-term) - **task_id**: degraded-flags-enable-2026-09-26-r4 - **owner**: pi - **status**: in_progress - **授权来源**: 用户会话指令「请将已经实现但是降级了的功能都启动」+ 追加确认(① dev 单二进制启动、不用容器;② SEMANTIC_SUMMARY_REPLACE 面向系统全部会话含后续新建;③ MULTI_INTENT_PLAN_TIER 保持 confirm)。该指令同时构成 docgov-pi-narrative 行「dev 常驻开启另授权」与 chat-semantic-replace 行「放量逐环境另授权(dev)」的显式授权。 - **write_scope**: internal/ctxmgr, internal/sysadmin, internal/config, docker-compose.{dev,test,main}.yml, .env.example, .doc/ops/CURRENT.md, .doc/ops/short-term, .doc/status/FEATURE-MATRIX.md, .doc/test-reports - **mutex**: summary-flags-rollout - **base_dev_sha**: 66ea4e3e513d5c822e23a6c887ca16d1eab80d66 - **capabilities**: git:dev, env:dev, docs:publish - **policy_revision**: AGENTS 2026-09 / agent-worktree-workflow r1 / validation-contract 2026-09-21 - **review_state**: pending - **integration_state**: pending - **deployment**: pending - **cleanup**: pending - **remote_sync**: not_requested(本地 dev 领先 origin/dev 192+,未要求 push) ## 一、范围与现状 用户面板(sysadmin features 目录)为 fallback 快照;dev 实际运行态 = 单二进制 `launch.sh --no-docker` 只加载根 `.env`(不读 configs/.env.dev),故 intentflow 系列与摘要/叙事开关全部落在默认 legacy/false。dev 容器组当前未运行;test/main 仍为 compose。 已实现但未启动的降级项及处置: | 开关 | 处置 | 依据 | |---|---|---| | MULTI_INTENT_PLAN_TIER(legacy→confirm)+ INTENT_PLAN_PROJECT_ALLOWLIST=* | 根 .env 写入 confirm + * | I2/I3 已按 allowlist 验收 shadow→auto_read→confirm(项目 6579,确认前零写);用户确认保持 confirm | | MULTI_INTENT_U9/U10/U11/U12 | 根 .env 全 true | I3 live + P8 逐键接线;域名 flag 开启后未打开的细粒度键保持 dry-run | | SEMANTIC_SUMMARY_SHADOW | 根 .env true | D3 收口 PASS;shadow 生成不影响 served Narrative | | SEMANTIC_SUMMARY_REPLACE(+SESSIONS) | **代码:SESSIONS 支持 `*` 通配**(原仅枚举 ID,无法覆盖"全部会话含后续");compose 三环境补声明(原 Wave2 注释"REPLACE 未接线"已过期);根 .env true + `*` | chat-semantic-replace 2026-09-26 fail-closed 灰度接线;用户授权全会话 | | PI_CHANGE_REPORT_NARRATIVE | 根 .env true | 2026-09-23 收口复测 PASS;matrix 注明 dev 常驻开启另授权,本任务授权来源满足 | 不改动:WORKFLOW_SCOPE_MODE(strict 可用);U11/U12 五个逐键 live flag(P8"禁止 full 一次放量",不在本次面板范围,compose 亦未声明,保持 off 待后续运维侧逐键放量)。 防泄漏:根 `.env` 经 `--env-file` 同样被 test/main compose 读取,故在 `configs/.env.test` / `configs/.env.main`(git-ignored 运维配置)显式钉住上述键为默认值,行为保持不变。 ## 二、实现(代码侧) 1. `internal/ctxmgr/summary_flags.go`:`SummaryFeatureFlags.ReplaceAllSessions`;`parseReplaceSessions` 返回 `(set, wildcard)`,任意 `*` token → 全会话;`SemanticReplaceEnabledFor` 先过 master 再过通配/名单。空名单仍拒绝一切(纵深防御不变)。 2. 单测:`semantic_replace_test.go` 更新 FlagParsing(通配/混合/空)+ 新增 WildcardAllowlistSwapsNarrative / WildcardMasterOffKeepsDeterministic。 3. compose ×3 声明 `SEMANTIC_SUMMARY_REPLACE(_SESSIONS)`(默认 false/空);A-4 声明测试扩键;`.env.example` 修 Wave2 过期注释并补 SESSIONS/ALLOWLIST 注释键;sysadmin SESSIONS 描述与 REPLACE reason 注明 `*`。 ## 三、计划 1. [x] 分析与授权确认 2. [x] 代码实现(通配 + compose 声明 + 目录/示例更新) 3. [ ] 工程门禁(arch-check block / go vet / go test -short)+ dev 集成(--no-ff) 4. [ ] env 运维:根 .env + configs/.env.{test,main} 钉默认;`launch.sh --no-docker` 重启 dev(env:dev 锁内) 5. [ ] 运行时验收:/health /ready、features 快照、行为抽查 6. [ ] 测试报告 + MATRIX 行注记 + CURRENT 收口 ## 四、结果登记 (待填)