BitFun 子模块设计:质量数据面
July 14, 2026 · View on GitHub
上游文档:design.md 模块角色:为 BitFun 加载的目标项目提供统一事件、证据、指标和审计数据模型,用于解释、恢复、回放和校准产品治理策略。
1. 模块定位
质量数据面是追加式事件和事实视图层。它负责把项目画像、任务、工具调用、文件变更、验证命令、策略决策、安全授权、审查、CI、发布和运行期反馈整理成可追踪、可裁剪、可回放的事实视图,并为摘要、审查、门禁、复盘和评测提供统一查询口径。
P0 事件集优先支撑三件事:
- 普通任务结束时能解释做了什么、验证了什么、没验证什么。
- 安全敏感动作能追溯允许、询问、拒绝、应急放行的原因和范围。
- 配置化策略能用真实数据校准是否过度打断、误升级或漏提示。
证据包、交付物图谱、风险分类器、变更就绪度、PR 门禁和智能体评测都消费同一事实视图层;模块通过稳定查询接口和事实视图读取事实,避免各自重新定义字段。权威事实仍由 Agent Kernel、Execution、Security Boundary、受信外部系统或人工确认产生,质量数据面不成为新的状态 owner。
2. 行业参照与设计约束
| 参照 | 启发 |
|---|---|
| OpenTelemetry Semantic Conventions | 轨迹、指标、日志和资源需要统一语义,避免观测数据孤岛 |
| CDEvents | CI/CD 事件需要可互操作的事件模型 |
| SLSA provenance / in-toto attestations | 构建、验证和制品元数据应具备来源与证明 |
| Codex approvals/security | 审批、安全授权和工具执行要能审计,安全授权与质量就绪度分层记录 |
| NIST SP 800-218A | AI 进入 SDLC 后,模型、数据、工具、权限和供应链都属于安全开发边界 |
设计约束:
- P0 只采集快速路径、安全边界和信心摘要所需事件。
- 每类事件必须定义保留周期、隐私分级、脱敏、载荷大小和导出策略。
- 事件字段需要稳定语义命名,避免子模块各自定义不可对齐的事实。
- 证据包只保存摘要和引用,不长期保存无界原始日志。
- 内部事件模型保持规范;OpenTelemetry、CDEvents、SLSA 等作为导出适配和互操作参考。
- 证据必须区分信任层级:确定性事实、外部系统事实、人工确认、模型推断和插件建议不能混为同一等级。
- 新事件域必须声明生产者、消费者、保留周期、隐私分级、迁移和导出策略。
3. 范围与边界
范围:
- 定义
LifecycleEvent事件信封。 - 统一任务、会话、策略、安全、工具、文件、验证、审查、门禁、成本、Harness 主动配置和外部 owner 诊断的事件域。
- 为证据包、交付物图谱、风险分类器、变更就绪度、PR 门禁和智能体评测提供事实输入。
- 支持本地追加式审计、投影查询和外部导出。
边界:
- 质量数据面聚焦 BitFun 工程治理事实,不建设通用日志平台。
- 终端输出、模型上下文和第三方载荷按摘要、引用、脱敏和保留策略处理。
- CI、APM、SIEM 和数据仓库保留系统主权,BitFun 做事件映射和投影。
- 模型摘要以推断或建议身份进入事件,原始事实来自确定性系统、人工确认或受信外部系统。
- 事件数量只用于诊断和运营,产品质量需要结合结果指标、后验缺陷和用户反馈判断。
4. 输入、输出与数据模型
核心输入:
| 输入 | 来源 |
|---|---|
| 项目画像事件 | 项目结构、规则、负责人、验证模式、发布模型 |
| 任务事件 | 用户意图、模式、任务完成、信心摘要 |
| 策略事件 | 配置化策略决策、原因、模式转换 |
| 安全事件 | 权限、执行位置、沙箱等级、网络、凭据、prompt 注入、应急放行 |
| 工具事件 | 命令、工具调用、审批、退出码、耗时 |
| 文件事件 | diff、重命名、删除、生成文件、文件监听 |
| 验证事件 | 命令、退出码、耗时、日志摘要、制品引用 |
| 审查/门禁事件 | 严格审查、问题、就绪度、门禁投影 |
| 性能/成本事件 | 首次有用动作耗时、后台分析耗时、token、模型、墙钟耗时、工具耗时 |
| Harness 主动配置事件 | Harness 直接执行的项目脚本、自定义工具和工作流配置的 hash、权限、执行域与审核状态 |
| 阶段收益事件 | 阶段用户收益、技术前置、延期边界、质量一致性抽样和验收结果 |
核心输出:
- 快速任务信心摘要。
- 安全边界审计引用。
- 证据包源事件和证据引用。
- 风险分类器校准特征。
- 变更就绪度和 PR 门禁状态。
- 交付物图谱边证据。
- 智能体评测回放轨迹。
- 阶段收益评审和质量一致性抽样。
- 审计导出和最小指标集。
事件信封:
interface LifecycleEvent {
id: string;
type: string;
version: number;
timestamp: string;
source: EventSource;
actor: EventActor;
scope: EventScope;
correlation: EventCorrelation;
payload: unknown;
evidence?: EvidenceReference[];
risk?: RiskSnapshot;
privacy: PrivacyClass;
retention: RetentionPolicy;
}
证据信任等级:
| 等级 | 来源 | 是否可作为强制要求/阻断依据 |
|---|---|---|
deterministic | 本地命令、测试、CI 检查、签名制品、静态配置 | 可以 |
external_system | GitHub、Jira、CI、观测适配器返回的已认证事实 | 可以,但需记录适配器和刷新时间 |
human_confirmed | 用户确认、审查人决策、风险接受 | 可以,但必须记录操作者和原因 |
model_inferred | LLM 摘要、候选影响面、候选风险标签 | 不可以,只能作为候选或说明 |
plugin_suggested | 第三方插件明确产生的建议性内容 | 不可以,必须经过 BitFun 策略或人工确认;合法 Hook 变换和插件工具结果不归入该等级,而由对应 owner 校验并产生事实 |
5. 事件注册表
每个事件进入实现前必须在注册表中补齐:
| 字段 | 要求 |
|---|---|
| producer | 明确由 Agent Kernel、Execution、Security Boundary、Project Profile Integration、Configurable Policy Profile、Artifact and Evidence Plane、Product Feature、adapter 或 UI 投影中的哪个 owner 产生 |
| trigger | 说明何时产生,缺少输入时是否跳过、降级或使用摘要 |
| payload schema | 定义稳定字段、版本和可删除字段;禁止无界 payload: unknown 直接进入长期 schema |
| privacy / retention | 标注隐私分级、保留周期、脱敏和导出策略 |
| consumer | 列出当前消费方;没有当前消费方的字段必须有删除条件 |
| fallback | 事件缺失、过期或不可访问时的用户可见降级 |
| phase owner | 标注 P0/P1/P2+,避免 P0 背负后续治理字段 |
P0 硬事件集:
| 事件 | Producer | 用途 |
|---|---|---|
project.profiled.light | Project Profile Integration | 关联轻量项目结构、规则入口和验证候选 |
task.started | Agent Kernel,输入来自产品入口的稳定任务请求 | 关联一次用户任务、入口和初始上下文 |
task.completed | Agent Kernel,输入来自任务状态机结束 | 记录结果摘要、任务结束状态和未验证项 |
policy.decided | Configurable Policy Profile | 固化内部策略画像、触发原因和展示层级 |
security.decided | Security Boundary 生成决策 payload,Agent Kernel 负责事件落盘 | 固化允许/询问/拒绝/应急放行、执行位置、范围、原因、降级和残余风险 |
tool.completed | Execution | 采集工具和命令输出摘要、退出状态和耗时 |
verification.completed | Execution;受信 CI adapter 只投影外部 CI 结果 | 形成验证证据、不可运行原因或替代验证引用 |
confidence.summary.generated | Artifact and Evidence Plane | 固化任务结束的用户可见信心摘要 |
P0 可选或派生事件,不得阻塞默认路径:
| 事件 | Producer | 触发 |
|---|---|---|
active_config.discovered | Project Profile Integration | 轻量项目画像发现 Harness 将直接执行的项目脚本、自定义工具或工作流配置;不表示外部生态需二次激活 |
sandbox.capability.evaluated | Security Boundary | 用户界面需要展示真实沙箱、隔离或降级原因 |
user.override.recorded | Agent Kernel 记录接受后的 override 事实;Security Boundary 生成安全 override payload | 用户选择跳过、风险接受或临时放行 |
file.changed | Agent Kernel 根据 Execution 结果或产品入口 diff 更新 | 任务摘要需要独立 diff 摘要;否则并入 task.completed |
P1/P2 再引入:
| 事件 | 触发 |
|---|---|
risk.policy_hinted | 上下文保障 |
readiness.generated | PR 或审查场景 |
gate.projected | 团队/守护/合规策略 |
review.completed | 定向/完整审查 |
tool.override.candidate | 工具复写进入 P2 信任审查 |
telemetry.point.recorded | 成本、超时、失败和降级采样 |
evidence_pack.generated | PR、团队、发布、事故或评测需要证据引用/完整包 |
stage.outcome.evaluated | 阶段评审采样 |
quality.consistency.sampled | 阶段质量一致性抽样 |
performance.budget.evaluated | P1+ 阶段性能预算评审 |
artifact.edge.updated | 复杂项目图谱 |
插件工具、Hook、事件和权限请求复用各归属模块已有事件,不在质量数据面预留跨能力统一的扩展效果事件。 若真实插件诊断需要独立事件,必须先明确生产者、当前消费方、状态 owner、隐私与删除条件。
6. 核心流程
项目/任务/智能体/工具/安全事件
-> 归一化为 LifecycleEvent
-> 脱敏并标注隐私分级
-> 追加本地审计日志
-> 更新投影存储
-> 暴露摘要、证据、就绪度和评测查询
-> 按需通过适配器导出
治理规则:
- 本地优先:默认写入本地追加式日志,外部导出需显式配置。
- 事件预算:每类事件设置载荷大小、采样和保留周期。
- 隐私分级:区分公开、项目、敏感和凭据;凭据只保留脱敏引用或授权状态。
- 证据引用:大日志、报告、截图、轨迹使用
EvidenceReference引用,不内嵌。 - 语义稳定:核心字段采用稳定命名和版本;用户界面文案和外部载荷通过投影层转换。
- 信任分层:就绪度、门禁和发布就绪度必须能区分事实、候选、建议和人工接受。
- 可重放性:关键事件版本化,结构变更提供迁移或兼容读取。
- 导出隔离:导出到 GitHub、OpenTelemetry、CDEvents 或云端时保留脱敏和权限策略。
7. 分阶段落地
| 阶段 | 目标 |
|---|---|
| P0 | 轻量项目、任务、策略、安全、验证和信心摘要事件 |
| P1 | 风险提示、就绪度、定向审查、成本和提示体验指标 |
| P2 | 团队策略、门禁投影、Harness 主动配置审核、外部 CI/PR 事件 |
| P3 | 交付物图谱、发布、事故、观测事件接入 |
| P4 | 评测回放、跨团队指标、策略回放分析 |
8. 风险与反证
| 风险 | 反证或治理要求 |
|---|---|
| 遥测膨胀 | P0 事件集必须能解释快速路径和安全决策,采集范围按阶段扩展 |
| 原始日志泄露 | 证据包保存摘要和引用;敏感片段必须脱敏 |
| 事件不可治理 | 每个事件域必须定义负责人、保留周期、结构版本和导出策略 |
| 结构漂移 | 新事件或字段必须先进入注册表,并提供兼容读取或迁移策略 |
| 模型摘要覆盖事实层 | 模型输出作为派生证据,原始命令/CI/审查事实保持独立 |
| 跨模块耦合过重 | 上游模块依赖查询接口和事件结构,内部存储保持封装 |
| 审计不可复现 | 策略、安全、就绪度、门禁、审查、风险等关键结论必须能追溯到事件 id 和证据引用 |
9. 成功标准
- 普通任务可以生成可解释信心摘要。
- 安全提示、拒绝、应急放行都能追溯到事件和范围。
- 证据包、变更就绪度和门禁复用同一事实层。
- 严格审查 token、耗时、范围、跳过项上下文可被统一记录。
- 事件模型能够导出到至少一种外部标准或平台。
- Harness 直接执行的项目脚本、自定义工具和工作流配置可通过事件追溯来源、hash、权限、执行域和审核人。
- 外部插件能力沿用其 owner 的来源、有效策略和运行诊断,不由质量数据面建立第二套信任状态。