🐉 龍魂 AI|LH-INGESTOR PHASE 0 总执行包
PHASE 0 · MASTER EXECUTION PACKAGE
项目: 龍魂 AI 统一资料入口与自动治理基础设施
核心引擎: LH-INGESTOR
执行包编号: LH-INGESTOR-P0-MEP-001
版本: v1.0
执行工具: CodeBuddy
技术栈: Python 3 + SQLite
执行模式: CONTROLLED · FAIL-CLOSED · READ-ONLY
当前阶段: PHASE 0-A 工程准备与安全基线
后续阶段: PHASE 0-B 只读索引准入检查
当前状态: READY_FOR_OWNER_SCOPE_CONFIRMATION
⸻
- 执行总声明
0.1 本阶段目标
建立 LH-INGESTOR 的第一套工程基础和安全准入机制。
本阶段需要完成:
- 工程目录规划。
- 任务拆分。
- 数据库Schema设计。
- 路径白名单和保护规则设计。
- SIT-7冻结资产排除机制。
- 文件只读策略。
- 数据库与报告输出隔离策略。
- 安全检查模块设计。
- 测试代码设计。
- CodeBuddy执行报告规范。
- PHASE 1准入条件。
0.2 本阶段不做什么
PHASE 0不负责:
- 扫描真实资料。
- 批量读取真实文件。
- 解析文档正文。
- AI语义分类。
- 自动整理文件。
- 自动移动文件。
- 自动删除文件。
- 自动重命名。
- 修改原始文件。
- Notion连接或写入。
- Git仓库提交或推送。
- 自动安装依赖。
- 自动部署。
- 自动发布。
0.3 当前权限状态
PROJECT_CREATION = NOT_AUTHORIZED
SOURCE_SCAN = NOT_AUTHORIZED
REAL_DATA_READ = NOT_AUTHORIZED
DATABASE_WRITE = NOT_AUTHORIZED
REPORT_WRITE = NOT_AUTHORIZED
NOTION_READ = NOT_AUTHORIZED
NOTION_WRITE = NOT_AUTHORIZED
NETWORK_ACCESS = DISABLED
AI_ACCESS = DISABLED
DEPENDENCY_INSTALL = NOT_AUTHORIZED
TEST_EXECUTION = NOT_AUTHORIZED
GIT_COMMIT = NOT_AUTHORIZED
GIT_PUSH = NOT_AUTHORIZED
DEPLOYMENT = NOT_AUTHORIZED
SIT7_FROZEN = TRUE
SIT7_SCAN = PROHIBITED
SIT7_READ = PROHIBITED
SIT7_EXPORT = PROHIBITED
SIT7_REPAIR = NOT_AUTHORIZED
SIT7_PUBLISH = NOT_AUTHORIZED
重要解释:
本执行包允许CodeBuddy先审查方案、核对现有工作目录并生成实施计划。
只有用户明确指定新工程目录并授权创建后,才允许创建工程文件。
只有用户明确批准真实扫描范围,才允许进入真实资料索引阶段。
⸻
第一部分:PHASE 0总体任务树
1.1 任务结构
LH-INGESTOR-PHASE-0
│
├── P0-00 执行环境与权限确认
│
├── P0-01 工程目标与目录核对
│
├── P0-02 扫描范围和保护边界设计
│
├── P0-03 SIT-7冻结隔离规则
│
├── P0-04 统一资产数据模型
│
├── P0-05 SQLite数据库Schema
│
├── P0-06 路径保护配置
│
├── P0-07 只读索引接口设计
│
├── P0-08 审计日志和错误处理
│
├── P0-09 测试用例设计
│
├── P0-10 静态安全审查
│
├── P0-11 PHASE 0验收
│
└── P0-12 PHASE 1准入申请
1.2 任务状态
统一使用:
NOT_STARTED
IN_PROGRESS
BLOCKED
READY_FOR_REVIEW
ACCEPTED
ACCEPTED_WITH_LIMITS
REJECTED
状态规则:
- 未执行不能标记完成。
- 没有证据不能标记通过。
- 未知信息不能推断为通过。
- BLOCKED不能自动跳过。
- ACCEPTED_WITH_LIMITS必须列出限制。
- 只有人工批准才能启动下一阶段。
⸻
第二部分:CodeBuddy逐项执行任务
P0-00:执行环境与权限确认
目标: 确认CodeBuddy当前工作环境,不进行任何写入。
检查项目:
编号 检查内容 预期结果
00-01 当前工作目录 真实路径
00-02 当前工程目录 真实路径或UNKNOWN
00-03 当前Git仓库 真实路径或NOT_A_REPOSITORY
00-04 Git工作区状态 只读检查结果
00-05 是否存在同名工程 存在/不存在/未知
00-06 是否存在未提交文件 只读确认
00-07 Python版本 只读取版本信息
00-08 系统类型 OS信息
00-09 当前执行权限 记录实际权限
00-10 是否具备路径边界信息 YES/NO
禁止:
- 执行Git checkout。
- 执行Git reset。
- 执行Git clean。
- 执行Git commit。
- 执行Git push。
- 安装依赖。
- 修改环境变量。
- 自动切换目录。
- 运行项目程序。
交付:
P0-00-ENVIRONMENT-REPORT.md
验收:
- 所有信息有实际来源。
- 无法获取的信息标记UNKNOWN。
- 不推断工作区状态。
- 没有发生文件写入。
P0-01:工程目录规划
目标工程名称:
LH-INGESTOR
建议目录结构:
LH-INGESTOR/
│
├── README.md
├── VERSION
├── CHANGELOG.md
├── LICENSE-STATUS.md
│
├── config/
│ ├── config.example.yaml
│ ├── protected_paths.example.yaml
│ ├── classification_rules.yaml
│ └── governance_rules.yaml
│
├── src/
│ └── lh_ingestor/
│ ├── init.py
│ ├── main.py
│ ├── cli.py
│ ├── config.py
│ │
│ ├── security/
│ │ ├── init.py
│ │ ├── scope_guard.py
│ │ └── protection.py
│ │
│ ├── core/
│ │ ├── init.py
│ │ ├── discovery.py
│ │ ├── metadata.py
│ │ └── hashing.py
│ │
│ ├── storage/
│ │ ├── init.py
│ │ ├── database.py
│ │ └── schema.sql
│ │
│ ├── engines/
│ │ ├── init.py
│ │ ├── duplicates.py
│ │ └── version_hints.py
│ │
│ ├── audit/
│ │ ├── init.py
│ │ └── logger.py
│ │
│ └── reports/
│ ├── init.py
│ └── generator.py
│
├── schemas/
│ ├── asset.schema.json
│ ├── intake.schema.json
│ └── task.schema.json
│
├── tests/
│ ├── unit/
│ ├── security/
│ ├── integration/
│ └── fixtures/
│
├── docs/
│ ├── architecture.md
│ ├── security-model.md
│ ├── data-dictionary.md
│ ├── operations.md
│ └── phase-0-acceptance.md
│
└── migrations/
└── sqlite/
规则:
- 该目录为新工程建议结构。
- 不得覆盖已有同名工程。
- 不得在现有项目目录中擅自创建。
- 不得将工程放入SIT-7或其他冻结资产目录。
- 不得把输出目录放入扫描目录。
- 创建权限尚未授予时,只输出目录规划,不实际创建。
交付:
P0-01-PROJECT-STRUCTURE.md
P0-02:扫描范围与保护边界
建立三个独立概念:
SCAN_ALLOWLIST
SCAN_DENYLIST
OUTPUT_ALLOWLIST
SCAN_ALLOWLIST
只允许扫描明确授权的目录。
SCAN_DENYLIST
明确禁止扫描的目录。
OUTPUT_ALLOWLIST
只允许写入明确授权的独立输出目录。
路径规则:
- 使用绝对路径。
- 规范化路径。
- 检查目录真实边界。
- 不使用简单字符串前缀判断路径关系。
- 检查符号链接。
- 不跟随符号链接。
- 不允许扫描根目录与输出目录重叠。
- 不允许扫描目录包含保护目录。
- 不允许保护范围无法确定时继续。
路径校验结果:
SCOPE_VALID
SCOPE_INVALID
SCOPE_UNKNOWN
只有SCOPE_VALID可以进入下一步申请。
交付:
P0-02-SCOPE-BOUNDARY.md
P0-03:SIT-7冻结隔离
本任务只负责保护规则设计。
不读取、不检查、不扫描SIT-7实际资产。
固定规则:
SIT7_FROZEN = TRUE
SIT7_SCAN = PROHIBITED
SIT7_READ = PROHIBITED
SIT7_EXPORT = PROHIBITED
SIT7_REPAIR = NOT_AUTHORIZED
SIT7_BUNDLE = NOT_AUTHORIZED
SIT7_GIT_GC = PROHIBITED
SIT7_HISTORY_REWRITE = PROHIBITED
SIT7_PUBLISH = NOT_AUTHORIZED
SIT7_PUSH = NOT_AUTHORIZED
禁止通过以下方式绕过冻结:
- 全盘扫描后再过滤。
- 先读取再排除。
- 通过符号链接访问。
- 通过Git索引获取冻结资产。
- 通过缓存或副本重新引入冻结资产。
- 将冻结资产改名后重新登记。
如果扫描根目录可能包含SIT-7资产,且不能证明完全隔离:
STATUS = BLOCKED
REASON = SIT7_SCOPE_NOT_PROVABLE
NEXT_ACTION = WAIT_FOR_OWNER_DECISION
不得自行寻找SIT-7文件来验证隔离。
交付:
P0-03-PROTECTION-BOUNDARY.md
P0-04:统一资产数据模型
建立统一资产模型。
资产分类:
PROJECT
PERSONA
SKILL
ALGORITHM
CODE
SPEC
AUDIT
SOURCE
EXPERIMENT
LOG
EVIDENCE
ARCHIVE
TOOL
MODEL
ROUTE
POLICY
UNKNOWN
资产字段:
字段 类型 必需 说明
asset_id TEXT 是 统一资产ID
asset_type TEXT 是 资产分类
asset_name TEXT 是 资产名称
asset_version TEXT 否 版本
project_id TEXT 否 项目ID
source_type TEXT 是 来源类型
source_id TEXT 否 原始来源ID
source_uri TEXT 否 来源链接
original_location TEXT 否 原始位置
content_hash TEXT 否 SHA-256
hash_status TEXT 是 哈希状态
evidence_level TEXT 是 证据等级
verification_status TEXT 是 验证状态
permission_level TEXT 是 权限等级
risk_level TEXT 是 风险等级
lifecycle_status TEXT 是 生命周期
governance_status TEXT 是 治理状态
registered_at TEXT 是 登记时间
updated_at TEXT 是 更新时间
统一证据等级:
E0_UNKNOWN
E1_DECLARED
E2_REPORTED
E3_DIRECT
E4_VERIFIED
E5_INDEPENDENTLY_REVIEWED
统一验证状态:
NOT_MEASURED
UNKNOWN
PASS
FAIL
BLOCKED
NOT_APPLICABLE
注意:
UNKNOWN不等于FAIL。
NOT_MEASURED不等于0。
DECLARED不等于VERIFIED。
交付:
P0-04-ASSET-DATA-MODEL.md
P0-05:SQLite数据库Schema
数据库名称:
asset_index.sqlite
数据库只负责索引和治理元数据,不存储原始文件正文。
5.1 数据表
schema_meta
scan_runs
assets
asset_sources
asset_hashes
asset_versions
asset_relations
classifications
duplicate_groups
duplicate_members
evidence_records
verification_records
processing_tasks
task_events
governance_decisions
protected_assets
routing_rules
routing_decisions
audit_events
scan_errors
5.2 核心Schema
以下SQL为设计基线,必须先静态审查。不得在未经授权的情况下创建真实数据库。
PRAGMA foreign_keys = ON;
CREATE TABLE IF NOT EXISTS schema_meta (
schema_version TEXT PRIMARY KEY,
applied_at TEXT NOT NULL,
description TEXT
);
CREATE TABLE IF NOT EXISTS scan_runs (
scan_id TEXT PRIMARY KEY,
started_at TEXT NOT NULL,
finished_at TEXT,
scan_status TEXT NOT NULL,
scan_roots_json TEXT NOT NULL,
excluded_roots_json TEXT NOT NULL,
files_discovered INTEGER DEFAULT 0,
files_hashed INTEGER DEFAULT 0,
files_skipped INTEGER DEFAULT 0,
files_failed INTEGER DEFAULT 0,
errors_count INTEGER DEFAULT 0,
tool_version TEXT NOT NULL,
rules_version TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS assets (
asset_id TEXT PRIMARY KEY,
asset_type TEXT NOT NULL DEFAULT ‘UNKNOWN’,
asset_name TEXT NOT NULL,
asset_version TEXT,
project_id TEXT,
original_location TEXT,
lifecycle_status TEXT NOT NULL DEFAULT ‘ACTIVE’,
evidence_level TEXT NOT NULL DEFAULT ‘E0_UNKNOWN’,
verification_status TEXT NOT NULL DEFAULT ‘NOT_MEASURED’,
permission_level TEXT NOT NULL DEFAULT ‘A0’,
risk_level TEXT NOT NULL DEFAULT ‘UNKNOWN’,
governance_status TEXT NOT NULL DEFAULT ‘PENDING’,
registered_at TEXT NOT NULL,
updated_at TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS asset_sources (
source_record_id TEXT PRIMARY KEY,
asset_id TEXT NOT NULL,
source_type TEXT NOT NULL,
source_id TEXT,
source_uri TEXT,
source_timestamp TEXT,
source_status TEXT NOT NULL DEFAULT ‘UNKNOWN’,
FOREIGN KEY (asset_id) REFERENCES assets(asset_id)
);
CREATE TABLE IF NOT EXISTS asset_hashes (
hash_id TEXT PRIMARY KEY,
asset_id TEXT NOT NULL,
algorithm TEXT NOT NULL,
hash_value TEXT,
hash_status TEXT NOT NULL,
calculated_at TEXT,
FOREIGN KEY (asset_id) REFERENCES assets(asset_id)
);
CREATE INDEX IF NOT EXISTS idx_asset_hash_value
ON asset_hashes(hash_value);
CREATE INDEX IF NOT EXISTS idx_asset_type
ON assets(asset_type);
CREATE INDEX IF NOT EXISTS idx_asset_project
ON assets(project_id);
CREATE TABLE IF NOT EXISTS asset_versions (
version_relation_id TEXT PRIMARY KEY,
source_asset_id TEXT NOT NULL,
target_asset_id TEXT NOT NULL,
relation_type TEXT NOT NULL,
evidence TEXT,
confidence REAL,
review_status TEXT NOT NULL DEFAULT ‘PENDING’,
FOREIGN KEY (source_asset_id) REFERENCES assets(asset_id),
FOREIGN KEY (target_asset_id) REFERENCES assets(asset_id),
CHECK (source_asset_id <> target_asset_id)
);
CREATE TABLE IF NOT EXISTS asset_relations (
relation_id TEXT PRIMARY KEY,
source_asset_id TEXT NOT NULL,
target_asset_id TEXT NOT NULL,
relation_type TEXT NOT NULL,
evidence TEXT,
review_status TEXT NOT NULL DEFAULT ‘PENDING’,
FOREIGN KEY (source_asset_id) REFERENCES assets(asset_id),
FOREIGN KEY (target_asset_id) REFERENCES assets(asset_id),
CHECK (source_asset_id <> target_asset_id)
);
CREATE TABLE IF NOT EXISTS classifications (
classification_id TEXT PRIMARY KEY,
asset_id TEXT NOT NULL,
classification_type TEXT NOT NULL,
classification_value TEXT NOT NULL,
method TEXT NOT NULL,
rule_version TEXT,
confidence REAL,
evidence TEXT,
review_status TEXT NOT NULL DEFAULT ‘PENDING’,
created_at TEXT NOT NULL,
FOREIGN KEY (asset_id) REFERENCES assets(asset_id)
);
CREATE TABLE IF NOT EXISTS duplicate_groups (
duplicate_group_id TEXT PRIMARY KEY,
algorithm TEXT NOT NULL,
hash_value TEXT,
duplicate_type TEXT NOT NULL,
review_status TEXT NOT NULL DEFAULT ‘PENDING’,
created_at TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS duplicate_members (
duplicate_group_id TEXT NOT NULL,
asset_id TEXT NOT NULL,
PRIMARY KEY (duplicate_group_id, asset_id),
FOREIGN KEY (duplicate_group_id)
REFERENCES duplicate_groups(duplicate_group_id),
FOREIGN KEY (asset_id)
REFERENCES assets(asset_id)
);
CREATE TABLE IF NOT EXISTS evidence_records (
evidence_id TEXT PRIMARY KEY,
asset_id TEXT NOT NULL,
evidence_type TEXT NOT NULL,
evidence_uri TEXT,
evidence_hash TEXT,
evidence_level TEXT NOT NULL DEFAULT ‘E0_UNKNOWN’,
collection_method TEXT,
collected_at TEXT,
verification_status TEXT NOT NULL DEFAULT ‘NOT_MEASURED’,
FOREIGN KEY (asset_id) REFERENCES assets(asset_id)
);
CREATE TABLE IF NOT EXISTS verification_records (
verification_id TEXT PRIMARY KEY,
asset_id TEXT NOT NULL,
verification_type TEXT NOT NULL,
verification_method TEXT,
verifier_type TEXT NOT NULL,
result TEXT NOT NULL,
evidence_reference TEXT,
verified_at TEXT,
FOREIGN KEY (asset_id) REFERENCES assets(asset_id)
);
CREATE TABLE IF NOT EXISTS processing_tasks (
task_id TEXT PRIMARY KEY,
scan_id TEXT,
asset_id TEXT,
task_type TEXT NOT NULL,
task_status TEXT NOT NULL,
permission_level TEXT NOT NULL DEFAULT ‘A0’,
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL,
FOREIGN KEY (scan_id) REFERENCES scan_runs(scan_id),
FOREIGN KEY (asset_id) REFERENCES assets(asset_id)
);
CREATE TABLE IF NOT EXISTS task_events (
event_id TEXT PRIMARY KEY,
task_id TEXT NOT NULL,
event_type TEXT NOT NULL,
event_detail TEXT,
created_at TEXT NOT NULL,
FOREIGN KEY (task_id) REFERENCES processing_tasks(task_id)
);
CREATE TABLE IF NOT EXISTS governance_decisions (
decision_id TEXT PRIMARY KEY,
asset_id TEXT NOT NULL,
decision_type TEXT NOT NULL,
decision_status TEXT NOT NULL,
reason TEXT,
evidence_reference TEXT,
reviewer TEXT,
decided_at TEXT,
FOREIGN KEY (asset_id) REFERENCES assets(asset_id)
);
CREATE TABLE IF NOT EXISTS protected_assets (
protection_id TEXT PRIMARY KEY,
protected_type TEXT NOT NULL,
protected_reference TEXT NOT NULL,
protection_status TEXT NOT NULL,
reason TEXT,
created_at TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS routing_rules (
rule_id TEXT PRIMARY KEY,
rule_version TEXT NOT NULL,
asset_type TEXT NOT NULL,
target_database TEXT,
priority INTEGER NOT NULL,
rule_status TEXT NOT NULL,
requires_review INTEGER NOT NULL DEFAULT 1,
created_at TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS routing_decisions (
routing_id TEXT PRIMARY KEY,
asset_id TEXT NOT NULL,
rule_id TEXT,
suggested_target TEXT,
decision_status TEXT NOT NULL,
explanation TEXT,
reviewed_by TEXT,
created_at TEXT NOT NULL,
FOREIGN KEY (asset_id) REFERENCES assets(asset_id),
FOREIGN KEY (rule_id) REFERENCES routing_rules(rule_id)
);
CREATE TABLE IF NOT EXISTS audit_events (
audit_id TEXT PRIMARY KEY,
task_id TEXT,
asset_id TEXT,
actor TEXT NOT NULL,
action TEXT NOT NULL,
result TEXT NOT NULL,
evidence_reference TEXT,
created_at TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS scan_errors (
error_id TEXT PRIMARY KEY,
scan_id TEXT NOT NULL,
relative_path TEXT,
error_type TEXT NOT NULL,
error_message TEXT,
severity TEXT NOT NULL,
occurred_at TEXT NOT NULL,
FOREIGN KEY (scan_id) REFERENCES scan_runs(scan_id)
);
5.3 数据库约束
必须额外检查:
- 所有时间统一使用UTC ISO 8601格式。
- 所有ID必须唯一。
- 外键必须启用。
- 哈希算法名称必须明确。
- 哈希失败不能写入伪造哈希。
- 不确定分类必须为UNKNOWN。
- 版本关系必须保留证据。
- 重复关系不得自动删除文件。
- 数据库不能位于扫描目录内。
- 数据库不能存储原始文件正文。
5.4 Schema版本
初始版本:
SCHEMA_VERSION = 1.0.0
未来修改Schema必须通过迁移文件。
禁止静默修改已有数据库结构。
交付:
P0-05-SQLITE-SCHEMA.md
P0-05-schema.sql
P0-06:路径保护配置
建立:
config/protected_paths.example.yaml
模板:
version: “1.0”
mode:
default: “BLOCK”
fail_closed: true
follow_symlinks: false
scan:
roots: []
allow_recursive: true
max_file_size_bytes: 2147483648
include_hidden: false
exclude:
roots: []
patterns:
- “.git”
- “pycache”
- “.venv”
- “node_modules”
- “.cache”
protected_assets:
sit7:
status: “FROZEN”
scan: false
read: false
export: false
repair: false
publish: false
push: false
path_references: []
output:
root: null
require_outside_scan_roots: true
network:
enabled: false
ai:
enabled: false
notion:
enabled: false
execution:
scan_enabled: false
write_source_files: false
move_files: false
delete_files: false
rename_files: false
规则:
- 空白路径不代表默认全盘扫描。
- 空白保护路径不代表SIT-7已排除。
- 未知保护边界必须阻断。
- 不得把占位路径当作真实路径。
- 不得在配置中保存密钥或密码。
交付:
P0-06-PATH-PROTECTION.md
protected_paths.example.yaml
P0-07:只读索引接口设计
第一版CLI:
python -m lh_ingestor doctor
检查环境和配置。
python -m lh_ingestor config-check
检查路径规则,不扫描文件内容。
python -m lh_ingestor schema-info
显示数据库Schema版本,不创建数据库。
python -m lh_ingestor status
显示系统配置状态。
真实扫描命令预留:
python -m lh_ingestor scan --config config.yaml
但在PHASE 0必须保持禁用。
必须设置双重检查:
CONFIG_SCAN_ENABLED = FALSE
OWNER_SCAN_AUTHORIZATION = FALSE
两者必须同时满足授权要求,才可启动真实扫描。
交付:
P0-07-CLI-SPEC.md
P0-08:审计日志和错误处理
每次任务记录:
TASK_ID
SCAN_ID
TASK_TYPE
START_TIME
END_TIME
ACTOR
TOOL_VERSION
RULE_VERSION
INPUT_SCOPE
OUTPUT_SCOPE
PERMISSION_LEVEL
RESULT
ERRORS
EVIDENCE
错误类型:
PATH_NOT_FOUND
PATH_PERMISSION_DENIED
SCOPE_OVERLAP
PROTECTED_PATH_CONFLICT
SYMLINK_BLOCKED
FILE_CHANGED
FILE_TOO_LARGE
HASH_FAILED
DATABASE_ERROR
CONFIG_INVALID
UNKNOWN_ASSET
错误处理:
- 记录错误。
- 保留已完成的有效记录。
- 不扩大扫描范围。
- 不尝试提权。
- 不跳过保护检查。
- 不自动重试危险操作。
- 严重错误立即停止。
日志禁止记录文件正文、密钥和隐私内容。
交付:
P0-08-AUDIT-ERROR-HANDLING.md
P0-09:测试方案设计
测试必须使用独立临时目录。
不使用真实资料目录。
不使用任何SIT-7资产。
测试代码至少覆盖:
编号 测试场景 预期结果
T01 正常路径 允许通过边界检查
T02 未授权路径 BLOCKED
T03 扫描与输出目录重叠 BLOCKED
T04 保护目录与扫描目录重叠 BLOCKED
T05 符号链接 不跟随
T06 空文件 正确计算SHA-256
T07 完全重复文件 识别相同哈希
T08 同名不同内容 不认定完全重复
T09 无扩展名 UNKNOWN
T10 超过大小限制 HASH_SKIPPED
T11 读取权限不足 记录错误
T12 文件读取中发生变化 FILE_CHANGED
T13 数据库外键错误 事务失败
T14 非法配置 CONFIG_INVALID
T15 冻结范围不明确 BLOCKED
T16 空白扫描白名单 BLOCKED
测试阶段分开:
TEST_CODE_CREATED
TEST_STATIC_REVIEWED
TEST_EXECUTION_AUTHORIZED
TEST_EXECUTED
TEST_RESULT_VERIFIED
不能把测试代码已创建说成测试已经通过。
当前只允许设计测试,不执行测试。
交付:
P0-09-TEST-PLAN.md
P0-10:静态安全审查
检查:
- 是否存在自动删除函数。
- 是否存在自动移动函数。
- 是否存在自动重命名函数。
- 是否存在网络请求。
- 是否存在Notion接口。
- 是否存在模型API。
- 是否存在Shell命令执行。
- 是否存在动态代码执行。
- 是否存在隐式全盘扫描。
- 是否存在符号链接绕过。
- 是否存在路径前缀误判。
- 是否存在输出目录与扫描目录重叠。
- 是否存在未保护的数据库写入。
- 是否存在密钥明文。
- 是否存在未经授权的Git操作。
审查结果:
PASS
FAIL
UNKNOWN
BLOCKED
发现任何高风险行为,必须先阻断。
交付:
P0-10-STATIC-SECURITY-REVIEW.md
P0-11:PHASE 0验收
所有前述任务汇总。
必须提交:
- 环境报告。
- 工程目录规划。
- 范围保护说明。
- SIT-7排除规则。
- 统一资产模型。
- SQLite Schema。
- 路径保护配置。
- CLI接口规范。
- 审计日志规范。
- 测试计划。
- 静态安全审查报告。
- 未完成事项。
验收状态:
ACCEPTED
ACCEPTED_WITH_LIMITS
BLOCKED
INCOMPLETE
REJECTED
P0-12:PHASE 1准入申请
只有PHASE 0验收通过后才能提出PHASE 1申请。
PHASE 1申请至少包含:
SCAN_ROOTS
EXCLUDED_ROOTS
PROTECTED_ROOTS
OUTPUT_ROOT
MAX_FILE_SIZE
FILE_TYPES
RECURSIVE_SCAN
SYMLINK_POLICY
RESOURCE_LIMIT
EXPECTED_FILE_COUNT
DATA_PRIVACY_LEVEL
OWNER_AUTHORIZATION
所有路径必须由负责人提供。
不得自动推断。
PHASE 1申请通过不代表Notion写入、AI接入或自动整理获得授权。
⸻
第三部分:工程文件清单
3.1 必须准备的文件
编号 文件 用途 PHASE 0状态
F001 README.md 项目说明 待创建
F002 VERSION 版本记录 待创建
F003 CHANGELOG.md 变更历史 待创建
F004 config.example.yaml 基础配置 待创建
F005 protected_paths.example.yaml 保护配置 待创建
F006 governance_rules.yaml 治理规则 待创建
F007 scope_guard.py 路径保护 待创建
F008 discovery.py 文件发现 待创建
F009 metadata.py 元数据提取 待创建
F010 hashing.py SHA-256 待创建
F011 database.py SQLite接口 待创建
F012 schema.sql 数据库Schema 待创建
F013 duplicates.py 重复识别 待创建
F014 version_hints.py 版本线索 待创建
F015 audit.py 审计记录 待创建
F016 reports.py 报告生成 待创建
F017 cli.py 命令行入口 待创建
F018 test_scope_guard.py 路径安全测试 待创建
F019 test_hashing.py 哈希测试 待创建
F020 test_database.py 数据库测试 待创建
F021 architecture.md 架构说明 待创建
F022 security-model.md 安全模型 待创建
F023 data-dictionary.md 字段字典 待创建
F024 operations.md 操作说明 待创建
F025 phase-0-acceptance.md 验收清单 待创建
3.2 文件状态规则
PLANNED
CREATED
STATIC_REVIEWED
TESTED
VERIFIED
APPROVED
每个文件记录实际状态。
不得将PLANNED标记为CREATED。
不得将CREATED标记为TESTED。
⸻
第四部分:PHASE 0交付目录
完成后,交付物应位于经授权的独立输出位置。
建议:
LH-INGESTOR-PHASE0-DELIVERY/
│
├── 00-EXECUTION-SUMMARY.md
│
├── 01-ENVIRONMENT/
│ └── environment-report.md
│
├── 02-ARCHITECTURE/
│ ├── project-structure.md
│ └── architecture.md
│
├── 03-SECURITY/
│ ├── scope-boundary.md
│ ├── protection-boundary.md
│ └── static-security-review.md
│
├── 04-DATABASE/
│ ├── schema.sql
│ └── data-dictionary.md
│
├── 05-CONFIG/
│ ├── config.example.yaml
│ └── protected_paths.example.yaml
│
├── 06-TESTS/
│ └── test-plan.md
│
├── 07-ACCEPTANCE/
│ ├── acceptance-checklist.md
│ └── phase1-entry-request.md
│
└── 08-AUDIT/
└── execution-audit.md
此目录为交付结构建议,不代表已创建。
⸻
第五部分:PHASE 0验收清单
A. 项目和环境
- [ ] 工程目标明确。
- [ ] 当前工作目录已确认。
- [ ] 新工程目录已确认。
- [ ] 未覆盖现有项目。
- [ ] 未修改其他仓库。
- [ ] 执行权限已记录。
- [ ] 未知信息没有被猜测。
B. 路径和安全
- [ ] 扫描白名单已定义。
- [ ] 排除清单已定义。
- [ ] 输出路径独立。
- [ ] 输出路径不在扫描范围。
- [ ] 不跟随符号链接。
- [ ] 不允许路径越界。
- [ ] 不允许扫描范围模糊。
- [ ] 冻结资产有明确拒绝规则。
- [ ] SIT-7保持冻结。
- [ ] 没有触碰SIT-7。
C. 数据模型
- [ ] Asset_ID定义明确。
- [ ] Asset_Type定义明确。
- [ ] Source关系定义明确。
- [ ] Version关系定义明确。
- [ ] Evidence等级定义明确。
- [ ] Verification状态定义明确。
- [ ] Permission等级定义明确。
- [ ] Risk等级定义明确。
- [ ] UNKNOWN状态保留。
- [ ] 不确定关系不被强行建立。
D. 数据库
- [ ] Schema已审查。
- [ ] 主键已定义。
- [ ] 外键已定义。
- [ ] 索引已定义。
- [ ] Schema版本已定义。
- [ ] 数据库输出位置已定义。
- [ ] 不存储原始文件正文。
- [ ] 不存在未经授权的数据库创建。
E. 工程接口
- [ ] CLI命令已定义。
- [ ] 扫描功能默认禁用。
- [ ] Notion接口默认禁用。
- [ ] AI接口默认禁用。
- [ ] 网络访问默认禁用。
- [ ] 错误处理规则已定义。
- [ ] 审计记录格式已定义。
F. 测试与安全
- [ ] 测试方案已定义。
- [ ] 测试目录独立。
- [ ] 不使用真实资料进行测试。
- [ ] 不使用冻结资产进行测试。
- [ ] 静态审查已完成。
- [ ] 风险问题已记录。
- [ ] 未经授权未执行测试。
G. 交付
- [ ] 环境报告。
- [ ] 工程目录规划。
- [ ] 数据库Schema。
- [ ] 路径保护配置。
- [ ] 安全审查报告。
- [ ] 测试计划。
- [ ] 验收报告。
- [ ] PHASE 1申请。
- [ ] 所有证据可以追溯。
⸻
第六部分:CodeBuddy总执行指令
以下内容作为CodeBuddy的执行主指令。
CODEBUDDY · MASTER PROMPT
你现在负责实施:
LH-INGESTOR PHASE 0 · 本地资料自动消化引擎安全基线与工程准备。
你必须严格遵守本执行包。
任务目标
建立长期统一资料治理引擎的工程基础。
当前不是文件整理任务。
当前不是Notion同步任务。
当前不是AI分类任务。
当前不是代码仓库修复任务。
当前不是SIT-7复核任务。
执行顺序
必须依次完成:
P0-00
P0-01
P0-02
P0-03
P0-04
P0-05
P0-06
P0-07
P0-08
P0-09
P0-10
P0-11
P0-12
每完成一个任务,先输出该任务报告。
不能跳步。
不能自行扩大范围。
不能把多个任务合并成无法核对的结果。
当前允许动作
在尚未获得工程创建授权前,只允许:
- 阅读本执行包。
- 分析技术要求。
- 检查当前工作目录信息。
- 输出工程规划。
- 输出数据库Schema草案。
- 输出配置草案。
- 输出测试方案。
- 输出安全审查意见。
当前禁止动作
SOURCE_FILE_WRITE = PROHIBITED
SOURCE_FILE_DELETE = PROHIBITED
SOURCE_FILE_MOVE = PROHIBITED
SOURCE_FILE_RENAME = PROHIBITED
REAL_DATA_SCAN = NOT_AUTHORIZED
REAL_DATA_READ = NOT_AUTHORIZED
NOTION_CONNECT = DISABLED
NOTION_READ = NOT_AUTHORIZED
NOTION_WRITE = NOT_AUTHORIZED
NETWORK = DISABLED
AI_MODEL = DISABLED
API_CALL = DISABLED
DEPENDENCY_INSTALL = NOT_AUTHORIZED
TEST_EXECUTION = NOT_AUTHORIZED
GIT_COMMIT = NOT_AUTHORIZED
GIT_PUSH = NOT_AUTHORIZED
GIT_RESET = PROHIBITED
GIT_CLEAN = PROHIBITED
GIT_GC = PROHIBITED
HISTORY_REWRITE = PROHIBITED
SIT7_ACCESS = PROHIBITED
SIT7_SCAN = PROHIBITED
SIT7_REPAIR = NOT_AUTHORIZED
SIT7_EXPORT = NOT_AUTHORIZED
SIT7_PUBLISH = NOT_AUTHORIZED
失败处理
如果遇到:
- 路径不明确。
- 权限不明确。
- 冻结边界不明确。
- 现有工程目录冲突。
- 输出目录不安全。
- 数据库可能覆盖已有文件。
- 需要安装依赖。
- 需要联网。
- 需要读取受保护资产。
立即停止对应任务。
输出:
STATUS = BLOCKED
REASON = PERMISSION_OR_SCOPE_UNCLEAR
ACTION = STOP
NEXT_ACTION = WAIT_FOR_OWNER_DECISION
报告规则
每个任务报告必须包含:
TASK_ID
TASK_STATUS
START_TIME
END_TIME
INPUTS
OUTPUTS
FILES_CREATED
FILES_MODIFIED
FILES_DELETED
FILES_READ
NETWORK_ACCESS
NOTION_ACCESS
AI_ACCESS
GIT_OPERATIONS
SIT7_STATUS
SECURITY_FINDINGS
EVIDENCE
UNRESOLVED_ITEMS
NEXT_ACTION
没有执行的项目必须写:
NOT_EXECUTED
无法确认的项目必须写:
UNKNOWN
不得用“正常”“无问题”“已完成”替代实际证据。
最终停止点
PHASE 0完成后:
PHASE_0_STATUS = READY_FOR_OWNER_REVIEW
PHASE_1_STATUS = NOT_STARTED
REAL_DATA_SCAN = NOT_AUTHORIZED
不得自动启动PHASE 1。
必须等待负责人明确授权。
⸻
第七部分:PHASE 0最终裁定模板
PROJECT:
LH-INGESTOR
EXECUTION_PACKAGE:
LH-INGESTOR-P0-MEP-001
VERSION:
1.0
PHASE:
0
RESULT:
ACCEPTED / ACCEPTED_WITH_LIMITS / BLOCKED / INCOMPLETE / REJECTED
ENGINEERING_BASELINE:
PASS / FAIL / UNKNOWN
DATABASE_SCHEMA:
PASS / FAIL / UNKNOWN
PATH_PROTECTION:
PASS / FAIL / UNKNOWN
SIT7_ISOLATION:
PASS / FAIL / UNKNOWN
STATIC_SECURITY_REVIEW:
PASS / FAIL / UNKNOWN
TEST_PLAN:
PASS / FAIL / UNKNOWN
SOURCE_FILES_MODIFIED:
YES / NO / UNKNOWN
REAL_DATA_SCANNED:
YES / NO / UNKNOWN
NOTION_ACCESSED:
YES / NO / UNKNOWN
NETWORK_ACCESSED:
YES / NO / UNKNOWN
AI_ACCESSED:
YES / NO / UNKNOWN
GIT_WRITE_OPERATIONS:
YES / NO / UNKNOWN
NEXT_PHASE:
PHASE_1_APPLICATION / BLOCKED / WAIT
OWNER_AUTHORIZATION:
PENDING
⸻
第八部分:PHASE 1准入申请模板
只有PHASE 0验收后才填写。
phase: “1”
project: “LH-INGESTOR”
scan_roots: []
excluded_roots: []
protected_roots: []
output_root: null
recursive_scan: true
follow_symlinks: false
max_file_size_bytes: 2147483648
allowed_file_types: []
include_hidden_files: false
network_enabled: false
ai_enabled: false
notion_enabled: false
source_write_enabled: false
source_delete_enabled: false
owner_authorization:
status: “PENDING”
scope: null
approved_at: null
注意:
路径必须由负责人实际填写。
空白配置不能自动转换成全盘扫描。
PHASE 1仅申请只读索引,不包含文件移动、删除、Notion写入或AI分类。
⸻
最终系统状态
PROJECT = LH-INGESTOR
EXECUTION_PACKAGE = LH-INGESTOR-P0-MEP-001
VERSION = 1.0
PHASE_0A = READY_FOR_IMPLEMENTATION_REVIEW
PHASE_0B = WAITING_FOR_SCOPE_CONFIRMATION
PROJECT_CREATION = NOT_AUTHORIZED
REAL_DATA_SCAN = NOT_AUTHORIZED
NOTION_ACCESS = NOT_AUTHORIZED
AI_ACCESS = DISABLED
NETWORK = DISABLED
TEST_EXECUTION = NOT_AUTHORIZED
SIT7_FROZEN = TRUE
SIT7_ACCESS = PROHIBITED
PHASE_1 = NOT_STARTED
NEXT_ACTION = OWNER_SCOPE_CONFIRMATION
核心执行原则:
先建立边界,再建立引擎。
先建立索引,再理解内容。
先确认来源,再建立关系。
先验证证据,再进入知识库。
先获得授权,再执行写入。
LH-INGESTOR必须成为龍魂 AI 的统一资料入口,但统一入口永远不能成为绕过专业系统权限和冻结规则的通道。
本文档定义龍魂AI统一资料入口引擎LH-INGESTOR的PHASE 0工程准备与安全基线规范。核心内容包括:只读、Fail-Closed模式下的工程目录规划、SIT-7冻结资产隔离机制、基于SQLite的资产元数据索引Schema设计、路径白名单/保护边界规则、统一资产数据模型(含evidence_level/verification_status等15+关键字段)、静态安全审查要求及测试方案框架。所有操作禁止真实数据扫描、文件修改、网络访问、AI调用与Notion集成,强调权限显式授权与范围可验证性。
417

被折叠的 条评论
为什么被折叠?



