Implementation Review 2026 09 27 - jiale-li-orion/SecFusionAgent GitHub Wiki
历史复查记录:正文中的运行结果与缺口属于各自记录日期,不是当前待办。2026-10-16 已逐项复核,当前验收状态与关闭条件统一见 当前验收台账。历史测量不回写为新版本成绩。
本文是一次从代码反向审查设计的 checkpoint。它不重新定义 Requirements,也不增加第三套架构;目标是回答三个问题:TD1/TD2 写下的 ownership 和 authority 是否仍被代码遵守;实现过程中形成的目录/API 是否已经与 Wiki 漂移;当前工程投入是否仍直接服务赛题的“监测、富化、问答”三项核心能力和现场演示。
| 设计责任 | 当前实现 | 复验结论 |
|---|---|---|
| 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。
赛题要求的三项核心能力分别是情报监测、情报富化、情报问答;优化项进一步看 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 属于重要工程边界,但不应挤掉这些直接形成比赛证据的工作。
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 写权限。
| 原待办 | 现状 | 验收台账 |
|---|---|---|
| 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 |
本节取代旧“当前明确未完成”列表;前文保留当时的代码与测量判断供追溯。