Communitygithub.com

maskshell/solidforge

AI编程代理的循环工程系统,以Claude Code插件形式提供。汇聚→明确→实现:并行TDD开发、双环汇聚门控、对抗性跨源审查、基于源的引用验证及先前技术碰撞搜索——每一环节都诚实覆盖,绝不静默通过。

solidforge 是什么?

SolidForge 是一个专为 AI 编码代理(如 Claude Code)设计的循环工程系统,它打包成一个插件。其核心围绕“汇聚→明确→实现”的循环流程,并集成了多项自动化验证技术:通过双环汇聚门控进行并行 TDD 开发,确保过程趋同;利用对抗性多源模型进行跨源审查,以发现矛盾;通过对引用源的精确抓取和比对进行源引用验证;以及一个独特的“先前技术搜索”功能,用于检测文档中未引用的现有工作,诚实报告覆盖率而非给出一个简单的“新颖”结论。该系统支持在 Claude Code 中通过 `/prior-art-search` 命令显式调用,其设计哲学是提供诚实的、有依据的覆盖率报告,而非自动生成新颖性判决,从而将最终判断权保留给人类专家。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add maskshell/solidforge

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

新颖性覆盖

一个只读的、基于搜索的、针对文档形状工件(设计论文、研究文档、规范)的逐个新颖性声明碰撞检测器。它打开了结果轴的新颖性表面,而这一点是cross-source-review (csr)、primary-source-verification (psv) 以及蓝图制作的 researcher 所未能触及的:csr 收敛文档的过程轴,但不搜索先前技术;psv 获取每个被引用的源(向后,被引用),但不搜寻未被引用的先前技术;researcher 为撰写而向前收集源(方向相反)。先前技术搜索是缺失的向后、未引用先前技术的碰撞检查——它针对每个新颖性声明搜索先前技术语料库,并诚实地报告碰撞。

核心定位

基于搜索,而非基于召回

一个 collision / uncited-relevant 发现必须引用从找到的先前技术中获取的引用,而非模型召回。无法引用找到的先前技术文本的发现将被降级为 inconclusive,绝不进行断言。这是承载不变性(工作区规则 3 + L1),由自门控 (NC-I5) 强制执行。找到的文本本身是模型从搜索结果中提取的——比 psv 获取的权威源更弱的预言(参见下面的双层说明)。

逐个声明的碰撞覆盖,而非新颖性判决

prior-art-search 从不发出 novel_confirmed 或“该文档是新颖的”。其唯一的顶层信号是 collisions_under_known_coverage:C 清晰-搜索范围内,N 碰撞,U 未引用-相关,I 无法得出结论的,共 M 个提取的新颖性声明。I 声明(以及 M=0 的情况——无新颖性表面)上报给人类。这是一个诚实的覆盖范围披露,并非新颖性判决。不可约的缺乏证据界限:你无法证明一个否定(“没有先前技术存在”),因此一个零碰撞的文档是“在搜索的语料库中未发现碰撞”,而非“新颖”。一个对称的“新颖性汇聚”技能循环到一个 novel_confirmed 布尔值,这是范畴错误——它将一个覆盖范围披露(“在搜索的语料库中未发现碰撞”)扁平化为一个判决(“新颖”),即,将缺乏证据视为证据缺失;prior-art-search 明确不是这样的。(更广泛的两轴框架——过程×结果——是 spec-gaming 论文 §4.2;prior-art-search 完全位于结果轴上,因此其错误是结果内部的,而非过程/结果的混淆。)

对 csr 和 psv 的补充;单一流水线

prior-art-search 是对 csr(过程轴)和 psv(被引用源验证)的补充;它不与两者中的任何一个合并。与 csr 的同类+异类多轮辩论不同,prior-art-search 是一个单一流水线——提取新颖性声明→搜索先前技术→每个声明碰撞判决→覆盖范围披露。预言是可搜索的先前技术语料库,而非异类模型,因此它不移植 csr 的异构基础。psv 和 prior-art-search 组合:一个高风险的文档可以运行 psv(被引用的来源准确吗?)并且运行 prior-art-search(新颖性声明是否与可找到的先前技术无碰撞?)。它们不合并。

双层预言弱点,诚实陈述(工作区规则 3)

prior-art-search 的预言是可搜索的先前技术语料库,比 psv 获取的主要源弱,在两层上(承载诚实的说明,提案 §3 / ADR §8 Q4):

  1. 比较侧弱点(与 psv 共享)。 声明与先前技术的比较是模型判断的——clear-under-search 意味着模型未发现碰撞,而非不存在。这是 psv 的第 2 层部分比较弱点。
  2. 选择侧弱点(prior-art-search 自身)。 搜索结果在选择弱点之上增加了比较弱点:排序偏差、召回限制(你无法搜索整个语料库),并且找到的先前技术文本本身是从搜索返回中模型提取的,而非获取的权威字节范围。

所以 prior-art-search 在两层上更弱,而不是“弱预言 vs 强预言”。这正是为什么它从不出 novel_confirmed 以及为什么其顶层是一个覆盖范围声明,而不是一个判决。clear-under-search 意味着“在搜索的内容中无碰撞”,而不是“新颖”。更弱的预言是在人类介入之前新颖性检查的不可约极限。

两个盲点,诚实陈述(工作区规则 3)

prior-art-search 自身模型执行的步骤携带了被披露而非隐藏的盲点:(1) 新颖性声明提取继承了提取器的盲点——作者或提取器均未识别为“新颖性”的声明不在 M 中;(2) 声明与先前技术的比较是模型判断的——clear-under-search 意味着模型未发现碰撞,而非不存在。C/N/U/I/M 计数是条件性的,基于被提取、搜索和比较的内容,而非完整性保证。异类提取分支是推迟的缓解措施(部分)。

范围

  • 纳入:从文档中提取原子新颖性声明(每个:位置 + 搜索目标);针对每个声明搜索先前技术语料库;发出基于获取的先前技术引用的每个声明碰撞判决(碰撞/未引用相关/清晰-搜索范围内/无法得出结论);发出碰撞记录(collisions_under_known_coverage)+ 碰撞发现包。
  • 排除:代码审查(parallel-development);规范/架构设计撰写(blueprint-crafting);文档过程汇聚(cross-source-review);被引用源验证(primary-source-verification);研究收集(blueprint-crafting researcher);新颖性判决——无论文档的新颖性是否真实或重要——(人类)。

范围守卫(入口检测)

  • 交付物是源代码/测试代码 → 路由至 parallel-development。
  • 交付物是撰写/重写规范、架构设计、迭代计划或研究 → 路由至 blueprint-crafting。
  • 请求是“对该文档进行对抗性多轮审查以达到汇聚” → 路由至 cross-source-review(过程轴)。
  • 请求是“该文档的被引用声明在其来源中是否成立?” → 路由至 primary-source-verification(psv = 向后-被引用;prior-art-search = 向后-未引用)。
  • 请求是“该文档是否夸大新颖性——与它未引用的先前技术发生碰撞?” → prior-art-search(本技能)。
  • 请求是“这新颖/重要/是正确贡献吗?” → 结果轴,仅限人类。

守卫是软性的(提醒 + 路由,而非拒绝)。阶段 A 依赖于显式调用(/prior-art-search)。

快速开始

你是编排者。各分支是只读的;驱动程序运行单一流水线(不是多轮辩论)。按顺序运行。

  1. 框架——识别工件及其新颖性表面。列举核心新颖性声明(要碰撞检查的承载“X 是新的/首个/没有先前技术”断言)。声明范围。

  2. 新颖性声明提取 (NC-I2) —— 生成 solidforge:novelty-claim-extractor(新上下文);它读取工件并列举原子新颖性声明,每个都绑定到一个位置和搜索目标。原子 = 每个声明一个新颖性命题(复合拆分)。新颖性声明是对新事物的断言(“X 是一个新框架”,“Y 是第一个做...”,“Z 没有先前技术”)。要区别于事实/引用声明(psv 的领域——验证,而非碰撞检查)和解释性声明(“这很重要”——不可搜索裁决;上报给人类,标记为不允许)。(提取器盲点说明:双方均未识别为“新颖性”的声明不在 M 中。)

  3. 多源搜索 + 碰撞判决 (NC-I3) —— 针对每个新颖性声明,搜索先前技术语料库(arXiv、网络、公共仓库)以寻找已经做出该声明的工作,然后将声明与找到的先前技术进行比较并分配以下之一:

    • collision — 找到的先前技术已做出此声明(文档的新颖性被夸大);引用冲突源 + 引用找到的先前技术文本(严重性 blocker;evidence 必须引用找到的先前技术)。
    • uncited-relevant — 找到文档未引用的相关工作(非直接碰撞,但覆盖范围有缺口);引用找到的先前技术(严重性 warning)。
    • clear-under-search — 在搜索的语料库中未发现碰撞(不是 novel;只是未出现碰撞)。仅计数,不作为发现。
    • inconclusive — 搜索无法涵盖该声明(付费语料库、模糊查询、找不到任何内容);上报给人类(严重性 coverage)。 开放源(arXiv 摘要、公共仓库)无需凭证即可搜索;网络搜索 API 使用一个单独命名的 HTTP 接口(不是 csr 的 _ANTHROPIC_AUTH_TOKEN LLM 令牌命名空间——参见 install.md)。(比较盲点说明 + 选择侧弱点。)
  4. 覆盖范围披露 (NC-I4) —— 发出一个 collision-record:collisions_under_known_coverage = C 清晰-搜索范围内 / N 碰撞 / U 未引用-相关 / I 无法得出结论,共 M = C+N+U+I 个提取的新颖性声明;加上一个碰撞发现包(碰撞/未引用相关/无法得出结论的发现;clear-under-search 声明被计数,不列出)。M=0(无可提取的新颖性声明——一个未做新颖性断言的文档,或所有新颖性声明都是解释性的)和 I>0 均上报给人类。从不 novel_confirmed。一个没有获取引用的碰撞/未引用相关发现被降级为 inconclusive。

诚实的信号是覆盖范围披露——确切搜索了什么、什么发生了碰撞、以及什么无法被覆盖。文档是否真正新颖仍然由人类决定。

权威链

  • docs/proposal.md = 权威设计(主;CSR 过程轴实质性汇聚 + psv N=9/K=0 已验证,2026-07-31)。
  • docs/iteration-plan.md = 执行蓝图(阶段 A 工作项 NC-I0–NC-I6;冲突时,proposal.md 优先)。
  • docs/design-decisions.md = ADR 日志(非显而易见的决策:永不-novel_confirmed、单一流水线-非-辩论、假阳性结构代理、双层搜索预言弱点、与 psv/researcher 的关系、凭证表面)。
  • docs/proposal.convergence.md = 提案的交叉审查痕迹。

与 cross-source-review / primary-source-verification / blueprint-crafting / parallel-development 的协调

  • cross-source-review 保持为过程轴汇聚引擎。prior-art-search 是补充的且非合并的:csr 的 substantive_converged 并不意味着 prior-art-search 的覆盖范围,反之亦然。
  • primary-source-verification 是互补的结果轴分支。psv = 向后-被引用(获取每个被引用的源);prior-art-search = 向后-未引用(搜索文档未引用的先前技术)。它们组合(一个文档可以运行两者);它们不合并。prior-art-search 重用 psv 的模式字段模式(碰撞发现扩展了 psv 的文档发现——严格超集)以及 install.md 凭证推理——复制模式,非代码(工作区规则 7)。
  • blueprint-crafting 保持纯粹(过程轴)。其 researcher 是向前收集(“寻找关于 X 的源以进行撰写”)——与 prior-art-search 的向后碰撞方向相反。它们不合并。
  • parallel-development 拥有代码审查。prior-art-search 是文档形状的,而非代码形状的。
  • files_touched 边界:本技能拥有 prior-art-search/ + 仓库根目录下的 agents/novelty-claim-extractor.agent.md(镜像 psv 的 solidforge:claim-extractor)。它不修改 csr、psv、bc 或 pd 核心逻辑(prior-art-search 是补充性的)。术语(工作区规则 10):collisions_under_known_coverage 是唯一的顶层术语;novel_confirmed 是禁止术语,绝不出现在发出的字段中。

自检(完成定义)

成熟度说明(阶段 A 构建): 所有以下自门控均已部署并通过绿色测试(NC-I0–NC-I6 已汇聚;docs/iteration-plan.run-record.json 携带判决)。实时的 N≥3 狗粮运行于 2026-08-01 在 3 个真实工件上,包括长的 spec-gaming 论文——覆盖范围概况在 dogfood-run-2026-08-01.md:通过获取的先前技术浮现了 2 个未引用相关发现(spec-gaming NC34 ↔ SWE-ABS;psv NC2 ↔ AI-Powered Citation Auditing),并且已知的自我认证悖论碰撞在仅 arXiv 预言下返回了清晰-搜索范围内——在实践中展示了双层弱点(零碰撞结果是“在搜索的内容中无碰撞”,非“新颖”)。离线的 dogfood.py 门控仅涵盖规范夹具(当无网络时的规则 1 跳过路径)。剩余的延迟:异类提取分支(提取器盲点的部分缓解)。名称 prior-art-search 是提议的,待人类锁定(提案 §8 Q1)。

当任何自检失败时,技能变更不算完成(工作区规则 1)。提交前运行:

python3 skills/prior-art-search/infra/test/disconnect_check.py        # 结构 + 加载链
python3 skills/prior-art-search/infra/test/plugin_layout.py           # plugin.json + agents 格式正确
python3 skills/prior-art-search/infra/test/findings_shape_check.py    # 每个发出路径 → 碰撞发现 + 碰撞记录有效
python3 skills/prior-art-search/infra/test/coverage_policy_check.py   # 计数总和 M=C+N+U+I;M=0/I>0 上报;无 novel_confirmed;获取引用不变性
python3 skills/prior-art-search/infra/test/fetched_quote_gate.py      # 每个碰撞/未引用相关发现引用获取的先前技术文本;无引用 → 无法得出结论(L1/规则 3 不变性)
python3 skills/prior-art-search/infra/test/lint_self.py               # 狗粮:检查本技能自身基础设施(ruff)
python3 skills/prior-art-search/infra/test/dogfood.py                 # 在一个带有预设碰撞的夹具文档上运行流水线(无网络时优雅跳过;记录日志替代)

参考文件

  • proposal.md — 权威设计(问题、非目标、自有合约、分层、§8 决策)。
  • iteration-plan.md — 阶段 A 执行蓝图(NC-I0–NC-I6、DoD、DAG、...)

相关技能