跳转至

灵扬 (LingYang) 系统审计报告 — 2026-04-07

审计类型: 自审计(第四轮),对齐宪章/规则/规范/计划 审计人: 灵扬 (LingYang) 审计日期: 2026-04-07 审计范围: 全仓库代码、文档、发布稿件、测试、项目元数据 基准文档: README.md(宪章), AGENTS.md(规范), 议事厅 #12/#13/#14(规则), pyproject.toml(配置) 审计方法: 逐文件代码审查 + ruff 静态分析 + 54 测试运行 + 文档事实核查 + 跨仓库一致性校验


一、审计摘要

维度 得分 说明
代码质量 8.5/10 3 unused imports, 9 行超长, f-string SQL (低风险)
测试覆盖 8/10 54 tests passed, DB隔离完善, CLI测试覆盖
安全性 8/10 DB 600权限, WAL模式, LIKE注入已修, 无外部依赖
文档准确性 7/10 README表格语法错误, 版本号不一致
宪章合规 7.5/10 发布稿件合规, README需修正
总评 7.8/10 较第三轮审计有进步,仍有P3问题待修

二、代码质量

2.1 源文件统计

文件 行数 公开函数 数据类
contacts_tracker.py 317 10 (add, list_contacts, get, find, update, delete, import_targets_md, summary, format_summary, format_contact_list) Contact
metrics.py 268 8 (fetch_repo, collect_metrics, latest_metrics, metrics_history, cleanup_old_metrics, format_report, format_growth, format_history) RepoMetrics
__main__.py 194 3 (cmd_contacts, cmd_metrics, build_parser)
合计 779 21 2

2.2 Ruff 静态分析结果(22 warnings, 0 errors)

未使用导入 (F401) — 4处:

文件 行号 问题
contacts_tracker.py L14 import json 未使用
contacts_tracker.py L20 field 未使用
contacts_tracker.py L20 asdict 未使用
test_contacts_tracker.py L7 sqlite3 未使用
test_contacts_tracker.py L11 unittest.mock.patch 未使用

未使用变量 (F841) — 1处:

文件 行号 问题
test_contacts_tracker.py L116 first 赋值后未使用

行超长 (E501, >100字符) — 16处:

  • contacts_tracker.py: L109, L145, L181, L252, L262, L264, L274, L275 (8处)
  • metrics.py: L221 (1处)
  • test_contacts_tracker.py: L182, L199, L217 (3处)
  • test_metrics.py: L107, L210, L224 (3处)
  • test_cli.py: 0处

2.3 f-string SQL(代码控制,低风险)

文件 行号 SQL语句 风险评估
contacts_tracker.py L145 f"SELECT * FROM contacts{where} ORDER BY ..." 低 — where 由代码构造,非用户输入
contacts_tracker.py L221 f"UPDATE contacts SET {', '.join(sets)} WHERE id = ?" 低 — sets 为固定列名列表

结论: f-string 插值部分均为代码控制的列名/条件片段,不接受外部输入。当前安全,但违反最佳实践。建议后续改为参数化白名单。

2.4 代码架构评价

优点: - 纯 stdlib,零外部依赖,符合项目定位 - _get_db() 统一管理模式:WAL + 600权限 + 自动建表 - 数据类 + 模块级函数,结构清晰 - CLI argparse 设计完整,覆盖所有公开函数

问题: - 无日志配置(logging 已导入但无 basicConfig,仅用于 _get_db 异常) - _db_initialized 进程级标志 — 多线程场景可能竞态(当前单进程无影响) - REPOS 硬编码 dict — 6/11 项目有 GitHub repo,其余无跟踪


三、测试

3.1 测试执行结果

54 passed in 0.82s
测试文件 用例数 覆盖模块
test_contacts_tracker.py 27 contacts_tracker 全部公开函数 + 边界情况
test_metrics.py 18 fetch_repo mock + 格式化 + 历史 + 清理
test_cli.py 9 5个子进程测试 + 4个parser构造测试

3.2 测试质量评价

优点: - _TempDBMixin 实现完善的DB隔离 — 每个测试用临时目录,不污染生产数据 - HTTP mock 正确 — test_metrics.py mock urllib.request.urlopen 返回固定 JSON - 边界测试覆盖:空数据、单条数据、多条排序、状态校验

不足: - test_contacts_tracker.py 无并发测试(_db_initialized 竞态未验证) - test_cli.py 仅 5 个 subprocess 测试 — 未覆盖所有 CLI 路径 - test_metrics.py 未测试 GITHUB_TOKEN 环境变量场景 - 无性能/压力测试(大量联系人场景)


四、文档准确性

4.1 README.md 问题

问题1: 表格语法错误

README 使用 || 分隔符(L24-36, L72-78),这不是标准 Markdown 表格语法。标准 Markdown 使用 |

# 当前(错误):
|| 成员 | 项目 | 职责 ||
||------|------|------||

# 应为:
| 成员 | 项目 | 职责 |
|------|------|------|

影响: 在 GitHub 上渲染为纯文本,非表格。影响项目形象。

问题2: LingMessage 版本号不一致

README L48: 统一通信协议 (LingMessage v1.0)

实际状态:LingMessage 当前版本为 v0.14.0(参见 LingMessage 项目 pyproject.toml)。README 声称 "v1.0" 属于事实错误。

问题3: 项目结构描述不完整

README L59-65 项目结构缺少 AGENTS.mdpyproject.toml.gitignore 等实际存在的文件。

4.2 AGENTS.md 评价

准确性: 高。函数列表、行号引用、代码模式描述均与当前代码一致。

需更新项: - AGENTS.md 提到 "54 tests (27 contacts + 13 metrics)" — 实际为 54 (27+18+9) - AGENTS.md "Uses unittest + pytest runner" — 部分准确,test_cli.py 也用 unittest

4.3 发布稿件合规性

已审查全部 9 份发布稿:

文件 合规性 说明
hn_launch_post.md ✅ 合规 已在第三轮审计后重写,AI披露充分
reddit_launch_post.md ✅ 合规 已重写 v2,无夸大宣传
reddit_lingterm_tutorial.md ✅ 合规 教程类,事实描述
reddit_mcp_lingterm_v2.md ✅ 合规 已重写
reddit_opensource_lingterm_v2.md ✅ 合规 已重写
researcher_email_template.md ✅ 合规 含 AI 披露声明
lingterm_tutorial.md ✅ 合规 中文教程
lingterm_tutorial_en.md ✅ 合规 英文教程
devto_lingterm_tutorial.md ⚠️ 需确认 frontmatter published: true,需确认是否已实际发布

五、安全性

5.1 已修复项(确认)

  • ✅ DB 文件权限 600(_get_db L42-47)
  • ✅ WAL 模式(_get_db L36)
  • ✅ LIKE 注入已修(find() 使用参数化查询)
  • update() TOCTOU 已修(单连接读写)
  • import_targets_md() 脏数据过滤
  • ✅ chmod 失败日志已添加
  • --priority 类型 bug 已修(移除 type=int)
  • devto published 标志已修正

5.2 持续关注项

项目 风险等级 说明
f-string SQL P3 代码控制,但违反最佳实践
_db_permissions_set 无失败日志 P3 chmod 失败时无错误输出
contacts/ 目录安全 P4 已 gitignore,但需确保无历史泄露
GITHUB_TOKEN 明文环境变量 P4 标准做法,无替代方案

5.3 敏感文件检查

# 确认 contacts/ 已 gitignore
git ls-files contacts/  # (应无输出)

六、幻觉病例登记

依据议事厅 #12 四层幻觉分类框架

病例1: 审计报告引用不存在的变量

项目 内容
类型 第二层(传播幻觉)
描述 AUDIT_REPORT_20260405_SYSTEM.md 引用了 _LINE_PATTERLS 变量,声称存在于 contacts_tracker.py。实际搜索确认该变量不存在于当前代码中。
传播路径 审计报告 → 被其他审计引用 → 形成虚假事实
根因 审计报告编写时可能基于旧版代码或猜测
状态 🔴 未修复(历史报告保留原样)

病例2: AGENTS.md 测试数量过时

项目 内容
类型 第二层(传播幻觉)
描述 AGENTS.md 声称 "40 tests (27 contacts + 13 metrics)",实际为 54 (27+18+9)
传播路径 AGENTS.md → AI agent 读取 → 输出错误信息
根因 文档未随测试扩展更新
状态 🟡 本次审计发现,需修复

病例3: README LingMessage 版本号

项目 内容
类型 第一层(生成幻觉)
描述 README 声称 "LingMessage v1.0",实际版本为 v0.14.0
传播路径 README → 外部读者 → 对项目成熟度误判
根因 初始编写时使用了期望版本号而非实际版本号
状态 🟡 本次审计发现,需修复

病例4: 前轮审计报告行号引用失效

项目 内容
类型 第二层(传播幻觉)
描述 AUDIT_REPORT_20260406_FULL.md 中多处行号引用已失效(代码已修改但报告未更新)
传播路径 旧审计 → 新审计引用 → 错误定位
根因 代码修改后未同步更新审计报告
状态 🔴 未修复(历史报告保留原样,本轮使用当前行号)

病例5: 前轮审计报告自审发现

项目 内容
类型 第四层(治理幻觉)
描述 AUDIT_REPORT_SELF_AUDIT.md 发现了审计报告本身的 6 处错误,包括 npm token 明文、矛盾状态描述等
传播路径 审计制度 → 信任审计结论 → 结论本身有错
根因 审计过程缺乏独立验证步骤
状态 🟢 已通过自审发现并记录

七、对齐检查

7.1 对齐宪章 (README.md)

宪章要求 合规状态 说明
透明度 发布稿件含 AI 披露
知识边界 无超出能力的声明
对话而非营销 重写后的稿件语气克制
不夸大"世界第一" 稿件中无此类声明
不过度拟人化 AI 稿件描述恰当
表格格式正确 || 非标准 Markdown
版本号准确 LingMessage v1.0 不实

7.2 对齐规则 (议事厅 #12/#13/#14)

规则 合规状态 说明
Level 2 质量门(事实核查+独立复现+人工批准) 🟡 部分合规 自审计完成,待交叉审查
四层幻觉意识 已识别并登记5个幻觉病例
四步议事机制(提案→讨论→决议→跟进) 本次审计遵循该流程
VerifiedMessage 协议 灵扬已注册为 LingIdentity

7.3 对齐规范 (AGENTS.md)

规范 合规状态 说明
stdlib-only 无外部依赖
SQLite per module contacts.db + metrics.db
_get_db() 模式 WAL + 600 + 自动建表
测试隔离 _TempDBMixin
中文注释/英文变量 全局一致
Type hints 全局使用 Python 3.10+ 语法

7.4 对齐计划 (议事厅 #13 "灵犀先行")

计划项 状态 说明
灵犀 (Ling-term-mcp) 首发推广 9份发布稿件已准备
Reddit 推广 7天计划已制定
国内推广 12平台计划已制定
研究者邮件 模板已准备
指标跟踪 metrics.py 跟踪6个项目

八、与前轮审计对比

对比项 第三轮 (0405) 第四轮 (0407) 变化
测试数量 54 54 不变
Ruff warnings 未记录 22 新增度量
Unused imports 未记录 5 新发现
行超长 未记录 16 新发现
README 表格语法 未记录 ❌ 发现问题 新发现
LingMessage 版本 未记录 ❌ 不一致 新发现
幻觉病例 3 5 +2
f-string SQL P3 标记 P3 确认 不变
P0 问题 0 0 不变
P1 问题 0 0 不变

九、问题清单

P0 — 阻断性(必须修复)

无。

P1 — 高优先级(应在下个版本前修复)

# 文件 行号 问题 建议
1 README.md L24-36, L72-78 || 表格语法非标准 Markdown 改为 | 分隔
2 README.md L48 "LingMessage v1.0" 不实 改为实际版本 v0.14.0

P2 — 中优先级(应尽快修复)

# 文件 行号 问题 建议
3 contacts_tracker.py L14 import json 未使用 删除
4 contacts_tracker.py L20 field, asdict 未使用 改为 from dataclasses import dataclass
5 AGENTS.md 测试数量描述 "27 contacts + 13 metrics" 过时 改为 "27+18+9=54"
6 test_contacts_tracker.py L7, L11 sqlite3, patch 未使用 删除

P3 — 低优先级(技术债)

# 文件 行号 问题 建议
7 contacts_tracker.py L145, L221 f-string SQL 改为白名单参数化
8 contacts_tracker.py 9处 E501 行超长 100 字符限制 拆行
9 metrics.py L221 行超长 拆行
10 test_*.py 7处 E501 行超长 拆行
11 test_contacts_tracker.py L116 first 变量未使用 _ 前缀
12 metrics.py L22-29 REPOS 仅覆盖 6/11 项目 补全或注明无 repo 项目
13 __main__.py metrics history 缺少 help 文档 补充
14 devto_lingterm_tutorial.md frontmatter published: true 需确认 核实发布状态

十、审计自评

本报告可能存在的偏差

  1. 行号引用: 本次审计所有行号基于 2026-04-07 最新代码(commit eeedaed)。如代码后续修改,行号可能失效。
  2. 发布稿件事实核查: 稿件中引用的 LingTerm 数据(如测试数量、覆盖率、白名单命令数)未与 ling-term-mcp 仓库实际状态交叉验证,需灵知审查确认。
  3. 安全性评估: 仅基于代码审查和静态分析,未进行渗透测试或 fuzzing。
  4. 审计报告幻觉风险: 依据议事厅 #14 洞察,本报告本身可能包含错误。已尽力避免,但需交叉审查验证。

审计方法局限性

  • 未使用 coverage.py 测量实际代码覆盖率
  • 未进行性能基准测试
  • 未验证 GITHUB_TOKEN 实际 API 限流行为
  • 未检查 git 历史中的敏感信息泄露

十一、下一步

  1. 提交灵克(代码再审)和灵知(文档再审)交叉审查
  2. 合并审查意见
  3. 幻觉病例上报灵妍
  4. 按优先级实施修复
  5. 严格测试通过
  6. 报灵依审查

审计报告生成时间: 2026-04-07 代码基准: commit eeedaed (2026-04-07 13:19:49 +0800) 测试基准: 54 passed in 0.82s Ruff 基准: 0 errors, 22 warnings