feat(impact): Impact Agent MVP —— 变更点定位 + 影响调查书(追加改修场景)

- 门控:用户提供 existing_system 路径 → 进入影响调查;未提供 → 原流程不变
- CodeParser 解析 Java(@RestController/@Service/@Entity/@TableName)+ ExistingSystemExplorer 组装
- ImpactAgent 变更点定位(变更区分×既存対応 确定性比对,无 LLM)→ ImpactReport(JSON 可下载)
- 影响调查结果作为 Writer 生成概要设计书的主上下文({{impact}},无专用影响章)
- source_aggregator 解除 existing_system=None 硬编码
- 既有系统样本 sunOnly/stock-trade-system(无 LICENSE,仅测试输入,保留来源标注)
- 新造股票交易域追加改修样本 要件定義_追加改修_股票.xlsx(对齐 sunOnly 真实类名)
- 全量 351 passed / 99.27% 覆盖;门禁 PASS(16 要素:新规5/変更8/削除3/未受影响50)
This commit is contained in:
lhl
2026-08-23 17:59:08 +08:00
parent da33df92e1
commit 2e11720a2d
383 changed files with 18411 additions and 10 deletions
+48
View File
@@ -175,6 +175,53 @@ class ExistingSystemInfo:
source_path: str
class ChangeType(Enum):
"""变更点定位的变更区分(对应要件定義 変更区分 列值)"""
NEW = "新規"
MODIFIED = "変更"
DELETED = "削除"
UNCHANGED = "不变"
@dataclass
class ChangeElement:
"""变更点定位结果中的一个要素(Impact Agent MVP"""
element_id: str
element_type: str # 機能/画面/帳票/DB/IF/バッチ(取 ElementType.value 或表名)
name: str
change_type: ChangeType
existing_mapping: list[str] = field(default_factory=list) # 既存対応 声明值(类名清单)
impacted_existing: list[str] = field(default_factory=list) # 确认命中的既有类
evidence: str = "" # 命中的既有类 source_uri / 空
status: str = "ok" # "ok" | "conflict" | "warning"
@dataclass
class ImpactWarning:
"""影响调查告警(不阻断,供用户/QA 关注)"""
element_id: str
issue: str
@dataclass
class ChangeAnalysis:
"""变更点定位结果集合(Impact Agent MVP"""
project_type: str # "enhancement"(追加改修)
new_elements: list[ChangeElement]
modified_elements: list[ChangeElement]
deleted_elements: list[ChangeElement]
unchanged_elements: list[ChangeElement]
warnings: list[ImpactWarning]
@dataclass
class ImpactReport:
"""影响调查书(MVP 子集,供 Writer 生成 + 独立下载)"""
metadata: dict
change_analysis: ChangeAnalysis | None = None
summary: dict = field(default_factory=dict)
@dataclass
class UnifiedDocument:
"""FileReader 的统一输出(多格式归一化)"""
@@ -223,6 +270,7 @@ class StructuredSource:
image_analyses: list[ImageAnalysis]
existing_system: ExistingSystemInfo | None
comments: list[CellComment]
impact_report: "ImpactReport | None" = None # 影响调查书(生成后回填,门控未提供时为 None)
@dataclass