Implementation Review 2026 09 27 - jiale-li-orion/SecFusionAgent GitHub Wiki

SecFusionAgent 实现一致性与赛题目的性复验 — 2026-09-27

历史复查记录:正文中的运行结果与缺口属于各自记录日期,不是当前待办。2026-10-16 已逐项复核,当前验收状态与关闭条件统一见 当前验收台账。历史测量不回写为新版本成绩。

本文是一次从代码反向审查设计的 checkpoint。它不重新定义 Requirements,也不增加第三套架构;目标是回答三个问题:TD1/TD2 写下的 ownership 和 authority 是否仍被代码遵守;实现过程中形成的目录/API 是否已经与 Wiki 漂移;当前工程投入是否仍直接服务赛题的“监测、富化、问答”三项核心能力和现场演示。

1. TD1 → TD2 → 实现一致性

设计责任 当前实现 复验结论
M1 Source capability / acquisition lifecycle 分离 packages.sources 持有 source definition/adapter;packages.monitoring 持有 scheduler、AcquisitionRun、cursor/backoff;TD3 fixed-window runner 只统计 trigger=scheduled Observation→KnowledgeRevision,并可用 independent expected-event manifest 计算 delivery coverage 一致。source reachability 不等于产品 coverage,scheduled 与 query-time acquisition 共用 durable run identity。2026-10-01 current deployment 已有 oss-security 完整 scheduled success;固定 09:10–09:11 UTC window 为 5/5 evaluable,8 类 source coverage pass,但 p50≈16.2h、p95≈22.5h、within-6h=0,暴露的是 scheduler 之前未持续在线造成的 freshness debt。delivery coverage runner 已拒绝从本系统 Observation 自举 expected keys,首份真实 provider-baseline manifest/result 仍待冻结,因此该项继续 not_evaluated
M2 Evidence authority EvidenceIngress → Observation/EvidenceArtifact;EvidenceAttachment 产生稳定 evidence:<link_id>;S3-compatible ArtifactStore 使用 content-addressed URI,exact replay 会校验 durable metadata 指向的 blob 是否仍存在,缺失时只允许用同 content hash 的原始 replay bytes 恢复同 URI 一致。raw/provider/model output 不会直接成为事实;Observation/EvidenceArtifact identity 不因 blob 恢复而变化
M3 canonical Knowledge / enrichment EvidenceBackedKnowledgeWriter + enrichment-v1;EnrichmentRole 通过 admission/Task Runtime 执行 一致。Role 化没有把 Knowledge write authority 搬进 Agent runtime
M3→M4 handoff packages.intelligence.retrieval 返回 object/relation/EvidenceRef;M4 只保存引用和 Case-local proposition 一致。M4 没有复制一份第二事实库
Task-first runtime TaskIntent → domain compiler → TASK_ADMISSION → TaskContract → Context/Budget/ExecutionEnvelope → TaskRun 一致。background enrichment 与 Workbench Investigation 都已走统一入口
Case 与 TaskRun 分离 InvestigationCaseModel 长生命周期;TaskRun 是短 episode;WATCH world-change 后产生新 run 一致。Case status 与 Task terminal state 不混用
M4 durable authority InvestigationStateService.open_evidence_need/apply_patch/commit_decision/get_state_at_revision 一致。M5/M6 均不能直接改 materialized state
M5 controlled perception / execution local Perception、delegation、Capability/Policy/Budget/Sandbox contracts 已实现 语义一致;production external Capability catalog/executor 尚未接入 active Investigation composition
M6 read-only reasoning ModelDecisionPlanner → DecisionService → DecisionCommit 或 ContinuationRequest → M4 gate 一致。fact citation 只接受 confirmed M4 EvidenceRef
M7 replay / Skill promotion durable ReplayCheckpoint、historical M4 reconstruction、single-variable intervention、M7 compare、SkillPromotionGate 一致。Knowledge historical reader 缺失时 fail closed,不拿未来 projection 污染 replay
A2A interoperability deterministic mapping + read-only GetTask;inbound message 只到 TaskIntent 一致。没有为了“支持 A2A”绕过 authentication/classification/domain binding 直接建 Task

实现与 TD2 的主要差异发生在 physical packaging,而非 responsibility:设计稿早期画出的 investigation/query/、runtime/identity/、runtime/network/、runtime/audit/ 目前没有独立目录。query normalization/physical read planning 分别落在 TaskIntent parser、intelligence retrieval 与 Perception;identity/network 约束进入 ExecutionEnvelope/Policy/Sandbox;audit record 跟随 owner service 持久化。没有独立生命周期前不拆空 package。TD2 仓库映射已经按当前实现修正。

RuntimeArtifact owner 已作为真实 tracked module 固定在 packages/runtime/artifacts/:ExecutionRun 产生的 model/tool/sandbox 大体积输出通过 content-addressed blob store 持久化,PostgreSQL 只保存 artifact identity / producer / trust / content hash / storage URI;每次 read 都重新校验 SHA-256。.gitignore 只忽略仓库根 /artifacts/ 工作目录,不再误伤 Python package。RuntimeArtifact 与 M2 EvidenceArtifact 仍是两个 authority domain:前者只证明“这次执行产生了什么”,只有显式 apps.observation_promotion 经过 EvidenceIngress 后才能进入 Evidence authority。

2. 赛题目的性复验

赛题要求的三项核心能力分别是情报监测、情报富化、情报问答;优化项进一步看 Agent 自主决策/任务编排/工具调用、全流程自动化,决赛还要求工程化和现场演示。当前系统没有偏离命题,但不同能力的“infra 完成度”和“比赛可得分完成度”差异很大,不能再用一个总进度百分比描述。

赛题评分面 已经可以直接证明的实现 仍影响比赛结果的缺口
多源自动监测 8 类 source taxonomy;99/99 catalog commitment;64 SourceDefinition;scheduler/cursor/backoff/outbox/worker;TD3 M1 runner 已固定 scheduled acquisition + published_at → earliest Knowledge committed_at 口径,并把 source coverage / latency 写入 durable BenchmarkRun 当前正式窗口没有 scheduled 样本,因此 source category 8/8 已有证据,监测 latency 仍为 not_evaluated;下一步要积累真实 scheduled fixed window,而不是用 on-demand/promotion 回填伪造 ≤6h
富化维度 canonical vocabulary 已定义 12 dimensions;OSV/GHSA/KEV、GitHub graph/fix boundary、document semantic、asset observation、incident lifecycle 已有实现 比赛最直观的 PoC、EPSS、统一 affected-version/applicability、asset→vulnerability join、paper/incident benchmark bridge 仍不完整;必须把“有 contract”继续变成“有真实结果”
富化准确率/召回率 evidence-aware closed-set scorer + durable Benchmark Runtime 已在 6 个真实 CVE 上扩到 49 formal gold facts:49 TP / 0 FP / 0 FN,micro precision=1.0、recall=1.0。新增正式覆盖 cvss_version、canonical CWE/has-weakness、GitHub fixed-version 与 EPSS;每个 metric 可下钻 CaseRun / MetricObservation 当前漂亮分数只代表这组已冻结 structured slice,不能当成 12 维全覆盖。最高优先级继续扩大真实 denominator:version applicability、advisory/reference、PoC、asset join、paper/incident,并扩大真实 CVE strata,要求每扩一维都继续用独立 provider gold 回归,而不是调 denominator 保分
自然语言问答 M4/M5/M6 runtime 已成立;TD2A AskQuestionUseCase 已把 LOOKUP/RETRIEVE → DecisionRole → M6 与 Continuation/VERIFY/INVESTIGATE/WATCH → durable Investigation 接到 Product /questions;同步路径保留真实 TaskRun/Execution/ModelRequest provenance,validated DecisionResult 有 immutable store 与 /decisions/{id};claim/relation context 已保留 source-specific、temporal、version/applicability/CSAF 等 compact semantic identity,并对 exact GitHub development reference 做有界 depth-2 expansion;targetless RETRIEVE 现在把检索命中的 canonical object 作为 bounded M6 targets,chunk/URL 不承担 Case identity,continuation 只能在这些 target 中单选后升级 durable Investigation;Product session 已有 durable turn/ref owner、single-target carry、ContextManifest parent chain 与 non-evidence session history;Investigation-class follow-up 可在 prior episode terminal 后复用同一 active/waiting Case,新开 EvidenceNeed + TaskRun,并在已有 non-terminal InvestigationRole run 时 fail closed;session-only LOOKUP/RETRIEVE 现在可显式读取 active/waiting Case 的 live M4 InvestigationState,TaskRun/Context/ModelRequest 绑定真实 Case/State revision,DecisionResult 保持 read-only 不写 M4.current_decision;Case-read RETRIEVE 对 world revision fail closed;TD3 现有 single-turn product_question_live + multi-turn QASessionCase;RETRIEVE 已有 durable RetrievalInvocation;long Investigation 现有 prospective frozen runner,按 Case creation→M4 DecisionCommit 记录 final-decision completion / TTFD / episode / open-need,并把 deadline-aware agent.task_success 与 eventual completion 分开;revision-606 single-turn candidate 14/14 preflight valid,session candidate 2 sessions / 4 turns,4/4 structured-authority turn preflight valid Product routing/scorer/live adapter/第一批 real gold / multi-hop content / generic RETRIEVE escalation / online follow-up / serialized Investigation follow-up / active-Case read path / session evaluator / exact retrieval reuse provenance / long-Investigation measurement substrate 已不再是 blocker;当前仍没有正式 live model score。下一批证据缺口是固定 model/deployment 上实际跑完 real candidates、冻结并跑第一批真实 long-Investigation/Case-read denominator、human-adjudicated incident/normative suite、pre-context retrieval failure attempt durability。synthetic smoke 继续只验 harness,不进入 CompetitionReport
Agent 自主决策 / 多角色协作 EnrichmentRole + InvestigationRole、parent-child delegation、Task Event、WAIT/WATCH wake、bounded loop、Skill/Experience/replay 外部 tool 能力 production binding 未接入,现场还不能完整展示“Agent 发现缺口→主动调用真实搜索/代码/资产工具→证据回流”
自动化与异常恢复 durable outbox、Celery、独立 Task Event Redis、idempotency、dependency wake、budget/deadline、policy fail-closed、WATCH 需要把这些 infra fault/recovery 用 1–2 个演示案例可视化,避免评委只看到后台工程而看不到自动化价值
工程化 / 文档 PostgreSQL/Redis/S3-compatible、container integration、architecture dependency gates、TD1/TD2/模块 README OpenShell/Firecracker substrate acceptance、真实部署监控/告警仍未完整;文档应继续引用真实接口、测试和失败边界
演示效果 新增 Runtime Workbench 可直接看 Source、Knowledge、Case、TaskEvent、M6 与 M7 coordinate 需要把一条 canonical case 贯穿“监测→富化→缺口→调查→研判”,而不是让评委自己理解底层表和 runtime object

因此后续投入顺序应由赛题目的倒推,而不是继续横向扩 runtime:当前第一优先级是 M3 富化能力和真实评测 closure,继续把 version applicability / advisory-reference / PoC / asset join / paper+incident 从 diagnostic opportunity 变成 canonical Knowledge + formal denominator,并扩大真实 CVE strata,保持 evidence-aware P/R;第二优先级转为构造 human/adjudicated real QA suite,并从真实 Product Case 运行得到可复现 M6 指标;第三优先级接一组真实 external Capability,让 M5 的主动调查在现场成立;同时让 scheduler 积累 M1 scheduled fixed window。M1–M3 historical read、OpenShell/Firecracker 和 A2A full transport 属于重要工程边界,但不应挤掉这些直接形成比赛证据的工作。

3. 新增可验证接口

apps/api/routes/workbench.py 暴露一组开发/比赛验证接口。它们只读取 owner state 或组合既有 gate,不建立第二套业务路径:

GET  /api/v1/workbench/overview
GET  /api/v1/workbench/sources
GET  /api/v1/workbench/evaluation/source-coverage
GET  /api/v1/workbench/tasks[/{run_id}]
GET  /api/v1/workbench/cases[/{case_id}]
POST /api/v1/workbench/cases
POST /api/v1/workbench/cases/{case_id}/runs
POST /api/v1/workbench/enrichment
POST /api/v1/workbench/cases/{case_id}/decision

静态站新增 site/console.html / console.en.html。页面可以连接本地 API,查看 source runtime、CVE Knowledge、Case/InvestigationState/EvidenceNeed、TaskContract/Context/TaskEvent、M6 output 与 Case 上已有的 trajectory/snapshot replay coordinate;可以通过正式 admission 创建 Investigation Task,也可以把 vulnerability enrichment 发到 production worker queue。页面本身不具备 Evidence/Knowledge/State 写权限。

4. 原七项缺口的现状验收(2026-10-16)

原待办 现状 验收台账
M1–M3 historical read 未关闭,完整任意旧世界仍不能重建 O04
Production external Capability NVD/注册网页/指定 GitHub 已接入并有受控回归;通用搜索/资产和广泛在线成功率仍开放 A08、O03/O07
正式 QA 与 Product 扩展 原 14-case/2-session 候选已形成正式历史报告;failed retrieval durability、幂等/cancel/SSE 已实现;更广新版本 live 分母未验收 A05–A09、O01/O03
PoC/EPSS/applicability/asset/paper bridge 对应确定性实现和限定 frozen gold 已有;开放语义、资产与事件广泛质量仍开放 A03、O02
Reference-vs-summary 实验 未执行可比正式实验,不阻塞现有 reference-preserving contract O10
隔离 substrate、生产告警/恢复 控制面实现;真实隔离与恢复演练未验收 O05/O11
完整 A2A transport 只有 mapping/GetTask;写入/订阅/push 未交付 O06

本节取代旧“当前明确未完成”列表;前文保留当时的代码与测量判断供追溯。

⚠️ **GitHub.com Fallback** ⚠️