Skip to content

feat(pack): 建立 Source 数据底座 - #225

Open
maokelong wants to merge 1 commit into
mainfrom
codex/issue-224-pack-sources
Open

feat(pack): 建立 Source 数据底座#225
maokelong wants to merge 1 commit into
mainfrom
codex/issue-224-pack-sources

Conversation

@maokelong

@maokelong maokelong commented Aug 24, 2026

Copy link
Copy Markdown
Owner

关联 issue

Closes #224

SDD 摘要

问题:

KAT 的来源扩展此前被封闭的 Datasource 类型和顶层 kat import 限制,PACK 无法自行接入远端数据库、Parquet 或普通日志解析器;Workflow 还需要感知底层表依赖和来源形态。

非目标:

  • 不负责现场采集、实时控制或查询被分析设备;
  • 不增加来源哈希、一致性证明、版本分叉、迁移或恢复协议;
  • 不建立自有 Provider、Parser、Framer 或通用 Rust→Python bridge;
  • 不增加逐 PACK 环境、运行时依赖安装或 PG/Excel 专用 driver;
  • 不支持多 Dataset overlay 或 Source 粒度删除。

考虑过的方案:

  • 保留 kat import 与 Sources 并行:会长期形成两套来源模型;
  • 为 KAT 自建 Provider/Parser 协议:重复 DataFusion、PyArrow、Flight SQL 与数据库生态;
  • bind 时全量加载外部数据库或大型日志:无法适应远端存储、TB 级数据和按需解析;
  • 让 Workflow 声明底层表或 Source 参数:会把物理来源配置泄漏到任务层。

选中方案:

  • PACK 统一拥有 Sources / Analysis / Workflows 三层能力;
  • DataFusion 使用 PACK catalog / Source schema / Source table 命名;
  • kat bind 只保存 External Binding,kat materialize 显式发布本地 Parquet;
  • External 与 Materialized Sources 共享惰性 SQL Resolution;
  • 普通 Python reader 通过 Arrow/Parquet 接入,Rust Hitrace parser 通过官方 DataFusion FFI 接入;
  • 顶层 Import、Trace Streamer 和旧 Datasource query/catalog 平面整体退场。

最小切片:

  • Source 作者 API、输入编译、inspection、私有 namespace 与 Guide;
  • Dataset Binding、REDO recipe、单表单 Parquet 和 bind/materialize CLI;
  • query/run/workflow 的跨 PACK 惰性 Source Resolution;
  • kat-kernel/raw_smapskat-kernel/hitrace 两个纵向样例;
  • native wheel/Payload 集成和旧路径删除。

主要变更

  • 新增 @kat.sourceschema_from_readers 和 DataFusion SchemaProvider/FFI 适配。
  • 新增 kat bindkat materializekat query --pack-dir
  • Dataset 以 (PACK, Source) 隔离 External/Materialized Binding,并保存可重放 argv/cwd。
  • Hitrace native API 收窄为只能写空私有 staging 的 stage_hitrace;Dataset 发布只经通用 Materialization。
  • feat(datasource): 在正式 Import 激活 Native Hook 2 roots / 4 routes #216 中依赖旧 Import/Dataset publication 的 Native Hook 激活路径随之退场;解析能力保留为内部 dormant 设施,本切片不发布 Native Hook tables。
  • 新增 kat-kernel PACK,交付 raw_smaps Source、Hitrace Source、Analysis 与 Workflow。
  • 删除顶层 kat import、Trace Streamer、SQLite/Langfuse 旧路径和两个预发布分析 PACK。
  • 更新 ADR、SDD、架构总览、Skill、README、CI 与 Payload builder。

为什么本 PR 较大

这是一次产品模型切换,无法在保持每个中间状态可用的前提下继续拆成独立 PR:

  1. 必须先让 Hitrace Source、Binding、统一查询和 native wheel 同时可用,才能删除旧 Import 而不造成能力空窗;
  2. 若先保留旧路径,会让同一数据同时存在 Import 与 Source 两套发布/查询合同;
  3. CLI、Runtime、Dataset、Payload、PACK 和文档共享同一个封闭协议,拆开会产生无法独立验证的临时兼容层;
  4. 删除两个预发布 PACK 是 Trace Streamer 退场的一部分,不保留不可运行的半迁移状态。

因此本 PR 以“统一 Source 生命周期完成、旧模型完全退场”为一个原子切片。对应设计和范围已在 #224、ADR-0062、ADR-0063 与两份 SDD 中闭合。

验证证据

cargo fmt --all -- --check
# passed

cargo check --workspace --locked
# passed

cargo clippy --workspace --all-targets --locked -- -D warnings
# passed

cargo test --workspace --features kat-datasource/protobuf-source-contract-fixture --locked
# passed;仅环境专属测试按声明 ignored

python -I -B -m unittest discover -s tests
# Ran 108 tests;OK

cargo test --locked -p kat-cli --test source_lifecycle   hitrace_source_uses_official_ffi_across_external_and_materialized_queries   -- --ignored --exact
# 当前源码构建的 CPython 3.14 Workflow wheel + Hitrace native wheel;1 passed

cargo test --locked -p kat-cli --test source_lifecycle   source_lifecycle_uses_real_installed_workflow_host_end_to_end   -- --ignored --exact
# 当前源码构建的 Workflow wheel;raw_smaps bind/query/materialize/run/test;1 passed

git diff --check origin/main...HEAD
# passed

python .github/scripts/pr_guard.py --base origin/main --head HEAD --identity-only
# PASS;1 commit,0 identity hits

额外验证:

  • kat --help 只展示 bind、inspect、run、query、materialize、test;
  • kat import 返回 unrecognized subcommand 'import'
  • 架构师与生态伙伴最终只读复核未发现剩余 P1/P2/P3 问题;
  • 未跟踪的 docs/superpowers/ 未纳入提交。

范围自检

  • 本 PR 没有引入临时 probe、本地调试程序、AI 中间产物或 generated dump。
  • 本 PR 没有引入未经 issue/SDD 批准的 UI、服务、命令或其他交付面。
  • 本 PR 没有把未验证 parser、format 或实验能力接入 production path。
  • 本 PR 的实际改动范围与 issue 中的预计文件 / 模块一致;偏差已在 PACK Sources 与可扩展 Source table 数据底座 #224 和两份 SDD 中记录。
  • 本 PR 明显偏大,以上已说明为什么不能继续拆成更小的可 review 切片。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved-binary-artifact 允许有意提交的二进制产物。 approved-large-change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

PACK Sources 与可扩展 Source table 数据底座

1 participant