diff --git a/.env.example b/.env.example index 1a7607f6..39392f30 100644 --- a/.env.example +++ b/.env.example @@ -99,7 +99,6 @@ MULTI_INTENT_U9_SEGMENT=false MULTI_INTENT_U10_MUTATE=false MULTI_INTENT_U11_DOCGOV=false MULTI_INTENT_U12_RUN_CONTROL=false -SEMANTIC_FALLBACK_ENABLED=false # W2: shadow only. Do not set SEMANTIC_SUMMARY_REPLACE=true; REPLACE is unwired. SEMANTIC_SUMMARY_SHADOW=false SEMANTIC_SUMMARY_REPLACE=false diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 5e140f44..1d753d58 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -114,7 +114,6 @@ services: MULTI_INTENT_U10_MUTATE: ${MULTI_INTENT_U10_MUTATE:-false} MULTI_INTENT_U11_DOCGOV: ${MULTI_INTENT_U11_DOCGOV:-false} MULTI_INTENT_U12_RUN_CONTROL: ${MULTI_INTENT_U12_RUN_CONTROL:-false} - SEMANTIC_FALLBACK_ENABLED: ${SEMANTIC_FALLBACK_ENABLED:-false} # W2 PU6: shadow semantic summary; REPLACE stays unwired even if env is true SEMANTIC_SUMMARY_SHADOW: ${SEMANTIC_SUMMARY_SHADOW:-false} SEMANTIC_SUMMARY_REPLACE: ${SEMANTIC_SUMMARY_REPLACE:-false} diff --git a/docker-compose.main.yml b/docker-compose.main.yml index 2a5bdbb2..d1ebb18a 100644 --- a/docker-compose.main.yml +++ b/docker-compose.main.yml @@ -116,7 +116,6 @@ services: MULTI_INTENT_U10_MUTATE: ${MULTI_INTENT_U10_MUTATE:-false} MULTI_INTENT_U11_DOCGOV: ${MULTI_INTENT_U11_DOCGOV:-false} MULTI_INTENT_U12_RUN_CONTROL: ${MULTI_INTENT_U12_RUN_CONTROL:-false} - SEMANTIC_FALLBACK_ENABLED: ${SEMANTIC_FALLBACK_ENABLED:-false} SEMANTIC_SUMMARY_SHADOW: ${SEMANTIC_SUMMARY_SHADOW:-false} PI_CHANGE_REPORT_NARRATIVE: ${PI_CHANGE_REPORT_NARRATIVE:-false} FAV_DEGRADED_READ: "false" diff --git a/docker-compose.test.yml b/docker-compose.test.yml index 4a4aa978..af9112c7 100644 --- a/docker-compose.test.yml +++ b/docker-compose.test.yml @@ -113,7 +113,6 @@ services: MULTI_INTENT_U10_MUTATE: ${MULTI_INTENT_U10_MUTATE:-false} MULTI_INTENT_U11_DOCGOV: ${MULTI_INTENT_U11_DOCGOV:-false} MULTI_INTENT_U12_RUN_CONTROL: ${MULTI_INTENT_U12_RUN_CONTROL:-false} - SEMANTIC_FALLBACK_ENABLED: ${SEMANTIC_FALLBACK_ENABLED:-false} SEMANTIC_SUMMARY_SHADOW: ${SEMANTIC_SUMMARY_SHADOW:-false} PI_CHANGE_REPORT_NARRATIVE: ${PI_CHANGE_REPORT_NARRATIVE:-false} FAV_DEGRADED_READ: ${FAV_DEGRADED_READ:-false} diff --git a/internal/app/app.go b/internal/app/app.go index e4ad17fa..22d6ee19 100644 --- a/internal/app/app.go +++ b/internal/app/app.go @@ -286,7 +286,6 @@ func sysadminFeatureValues(cfg *config.Config) func() map[string]string { "INTENT_V2_DECISION_TIER": string(iflags.V2DecisionTier), "WORKFLOW_INTENTS_ENABLED": strconv.FormatBool(iflags.WorkflowIntentsEnabled), "MULTI_INTENT_ENABLED": strconv.FormatBool(iflags.MultiIntentEnabled), - "SEMANTIC_FALLBACK_ENABLED": strconv.FormatBool(iflags.SemanticFallbackEnabled), "MULTI_INTENT_PLAN_TIER": string(pflags.PlanTier), "MULTI_INTENT_U9_SEGMENT": strconv.FormatBool(pflags.U9Segment), "MULTI_INTENT_U10_MUTATE": strconv.FormatBool(pflags.U10Mutate), diff --git a/internal/config/compose_flag_declaration_test.go b/internal/config/compose_flag_declaration_test.go index 818ea3ef..038a237d 100644 --- a/internal/config/compose_flag_declaration_test.go +++ b/internal/config/compose_flag_declaration_test.go @@ -99,3 +99,13 @@ func TestComposeNoDeadCursorRunnerConfig(t *testing.T) { } } } + +// X-1: SEMANTIC_FALLBACK_ENABLED has zero Go readers repo-wide and no design +// doc describing intended semantics; Wave 5 decision = delete, not re-declare. +func TestComposeNoDeadSemanticFallbackConfig(t *testing.T) { + for _, name := range composeFilesForFlagCheck { + if strings.Contains(readComposeFile(t, name), "SEMANTIC_FALLBACK_ENABLED") { + t.Errorf("%s: dead SEMANTIC_FALLBACK_ENABLED must stay removed (Wave5 X-1)", name) + } + } +} diff --git a/internal/intent/flags.go b/internal/intent/flags.go index ed5a3854..2286f4db 100644 --- a/internal/intent/flags.go +++ b/internal/intent/flags.go @@ -20,12 +20,11 @@ const ( // FeatureFlags Phase 5 意图识别灰度开关(环境变量覆盖,默认保守) type FeatureFlags struct { - IntentV2Shadow bool - IntentV2Decision bool - V2DecisionTier V2DecisionTier - WorkflowIntentsEnabled bool - MultiIntentEnabled bool - SemanticFallbackEnabled bool + IntentV2Shadow bool + IntentV2Decision bool + V2DecisionTier V2DecisionTier + WorkflowIntentsEnabled bool + MultiIntentEnabled bool } var ( @@ -40,7 +39,6 @@ func defaultFeatureFlags() FeatureFlags { V2DecisionTier: parseV2DecisionTier(os.Getenv("INTENT_V2_DECISION_TIER")), WorkflowIntentsEnabled: envBool("WORKFLOW_INTENTS_ENABLED", true), MultiIntentEnabled: envBool("MULTI_INTENT_ENABLED", true), - SemanticFallbackEnabled: envBool("SEMANTIC_FALLBACK_ENABLED", false), } } diff --git a/internal/sysadmin/features.go b/internal/sysadmin/features.go index cd541ddd..aea369ae 100644 --- a/internal/sysadmin/features.go +++ b/internal/sysadmin/features.go @@ -37,7 +37,6 @@ var featureCatalog = []featureSpec{ {key: "INTENT_V2_DECISION_TIER", label: "意图 V2 决策档位", group: "intent", fallback: "none", description: "V2 灰度风险档位:none/query/generate/write_low/write_high/all"}, {key: "WORKFLOW_INTENTS_ENABLED", label: "工作流意图", group: "intent", fallback: "true", description: "识别工作流类意图"}, {key: "MULTI_INTENT_ENABLED", label: "多意图识别", group: "intent", fallback: "true", description: "单条消息多意图拆解"}, - {key: "SEMANTIC_FALLBACK_ENABLED", label: "语义兜底", group: "intent", fallback: "false", description: "规则意图未命中时的语义兜底"}, {key: "MULTI_INTENT_PLAN_TIER", label: "多意图计划档位", group: "intentflow", fallback: "legacy", description: "意图计划灰度:legacy/shadow/auto_read/confirm/full"}, {key: "MULTI_INTENT_U9_SEGMENT", label: "U9 LLM 分段", group: "intentflow", fallback: "false", description: "LLM 意图分段提议"}, {key: "MULTI_INTENT_U10_MUTATE", label: "U10 变更适配器", group: "intentflow", fallback: "false", description: "低/中风险 mutate 动作适配器"},