Repository navigation
Replies: 3 comments
|
补充本轮实现与验证进展:C6 也已纳入本次工作,本地候选基于 已接通的后端行为:
真实仓库校准采用
六次运行的 147 个 pair、294 侧坐标与证据摘要已独立核验。Flask / Redux 的未分析文件保留 选取六个候选阅读源码后,遇到 Flask docstring、公开重导出、Redux 类型重载、暂存代码和 Archify 两处 BFS。重复 token 不等于重复业务实现,更不等于应该提取公共函数。 CLI 闭环已覆盖:首次发现 → 接受基线 → 导出双侧任务 → 增加前置注释后证据仍有效 → 等价改写一侧 → 旧证据失效 → 同配置重分析不再检测到原候选。手写改写样例另用 42 组输入比对行为,不把这一例扩大成任意克隆都能安全重构。 最终使用 Node 22.23.0 / Python 3.14.3 / 原生 jscpd 5.4.2,在 macOS arm64 执行了 实现中已省去 SARIF 联表、额外 fingerprint 状态、通用检测器框架和自动安装器。相同范围的出现次数校验保留:移除它会让剩下的副本替代已删除副本,使旧任务证据假有效。 下一步的范围建议仍是先审查这一可选 C6 后端,再根据标注样本决定是否增加 docstring / 声明类过滤。Java C6、多语言统一扫描、全仓性能基准和前端对照不纳入这一版。 AI 披露:本评论及本地候选的调研、实现、自动测试与文字整理由 Codex(GPT-6,含子代理)在 @testikun 指导下完成。这里报告的是 Agent 执行的检查和源码阅读,未声称贡献者已完成人工审查或维护者已接受。 |
|
追加一轮“还能复用什么 + 同输入性能”对比,并更正此前对工具能力的不完整概括。本轮未改变 C6 产品实现,补充了调查与实验记录。 jscpd 不只有文件级复杂度,也不是内部没有依赖图。 固定 5.4.2 的 LSP 目前可复用/保留的边界:
性能实测: macOS arm64 / M2 Pro / 16 GiB、Node 22.23.0、Python 3.14.3、jscpd 5.4.2,单 worker。每条件 1 次预热 + 5 次串行新进程计时,另做 3 次独立内存采样,保留 OS 文件缓存。四个范围、五个条件共 180 次调用成功;独立复核确认既有 facts/graph/非 C6 findings 不变,native 与集成结果的精确 UTF-16 范围、内容哈希和 analyzed 文件集合一致。
表中为中位数,全部原始 min/max 已保留,没有删慢样本。关闭 C6 仍执行已有的依赖、模块、复杂度和图规则;原生列没有执行这些工作,不能当作等价分析器的速度排名。C6 覆盖依次为 23/24、40/40、14/17、129/152;runtime 的 189 个输入中有角色排除,选中后又省略 22 个 vendor 和 1 个未在原生 inventory 中报告的短文件。原生扫描使用同一 eligible 快照。 采样进程树 RSS 峰值的中位数,关闭→exact 分别为 243.3→243.6、262.5→303.8、227.3→235.0、457.7→565.5 MiB。RSS 相加可能重复计算共享页且漏瞬时峰值;原生 Redux 过短而未采到的组记为 unavailable,不填 0。没有把 kernel maximum RSS 与进程树口径混在一起。 函数替换另测了成本边界:Flask 已有 AST 上的函数 CC/范围/nesting pass 为 34.0 ms;LSP 新进程初始化加所有文件诊断为 326.1 ms,初次索引后的 didOpen 处理为 284.2 ms。只替换 CC 还要保留范围/深度,所以不能省掉整个现有 pass;这些不同职责和生命周期的数据不作等价速度排名。 一处明确的优化候选在当前自研证据创建里。 为数相同片段,现实现对每个候选行窗口重新 SHA256;隔离实验只改为逐行比较窗口,仍保留最终 SHA256 和副本数量。runtime exact 的这个步骤从 578.6 ms 变为 23.4 ms,consistent 从 1,476.1 ms 变为 60.6 ms;四范围两模式全部最终摘要一致,1/2/3 副本计数也一致。这是微基准,尚未改入产品,不宣称整个 CLI 已有同幅度提速。 建议下一块先实现并回归这个局部证据优化,再用相同输入复测。新增检测优先考虑原生 dead-code 与复制越界;现有 summary 已含文件 CX/规模,不必为取这些值再启动一次检测。函数 CC 和通用依赖图替换另按反例、接口与语言契约验收。 AI 披露:以上源码审阅、真实探针、基准及文字由 Codex(GPT-6,含子代理)在 @testikun 指导下完成;仍是 Agent 验证,未声明人工审查完成或维护者已接受范围。原始协议、命令、结果、输入/产品/工具哈希已保留,未执行被分析项目代码或下载语义模型。 |
|
补充两项已完成的验证:C6 证据计数优化已接入本地候选;内部 Rust 图 API 也已实际编译桥接并与现有提取结果对照。仍基于 证据优化与整条 CLI 复测
冻结优化前的同一 C6 候选,使用与前轮相同的四个源码范围、配置和工具,交替运行 before/after;每条件 1 次预热、5 次计时、另 3 次独立内存采样。四范围 × 三模式 × 两版本共 216 次调用成功。相同范围、相同模式的 facts / graph / findings / review / overview 逐字节相同;独立复核实际重新哈希了 1,080 个输出文件,并重算全部统计。 整条公开 CLI 耗时中位数(ms):
使用本轮成对数据比较,不把前一评论中不同时间的数据混作基线。C6-off 控制组耗时变化依次为 +0.5%、+1.1%、−2.3%、+0.5%;Redux consistent 的变化很小,不能说明显提速,也未做显著性检验。内存基本持平:runtime exact 565.4 → 564.3 MiB、consistent 573.3 → 577.2 MiB,均为三次采样进程树 RSS 峰值的中位数,可能重复计算共享页或遗漏瞬时峰值。环境仍是 macOS arm64 / M2 Pro / Node 22.23.0 / Python 3.14.3 / jscpd 5.4.2。产品依赖共享同一环境,所列源码、二进制、测量运行时、输入和配置已冻结;未宣称完整 node_modules 逐文件冻结。 新增边界测试和整个 Code Analysis 套件通过,启用了真实 jscpd。规范工具链重建的 ZIP 字节一致,包内确实包含优化源码,解包后 package smoke 通过。首次 smoke 因实验环境禁用了更新检测而失败,去掉该环境开关后重跑通过,失败日志保留。未重复未受影响的完整仓库测试;前轮全量证据仍是 3,542 passed、143 skipped、1 个已从基线原始文件复现的 README showcase 来源哈希失败,不能称全仓全绿。 Rust 图接口:已跑通,但需要语义适配 固定上游 代表性的 JS/TS/Python 探针发现:
现有 Archify 也有待补项:JS 条件分支内的 接入成本有具体数字:basta 0.3.2 是 当前建议是:保留此次 C6 集成与局部性能优化;图 API 可继续复用符号、引用、unused-file / unused-export 等新增能力。替换整个 import 提取器前,先补稳定文件边合同、语义与覆盖标记、源码范围和解析配置快照。模块归属、架构映射及基于这些事实的 Archify 规则仍保留。上述差异说明职责和输出合同不同,不能凭项目迭代年限推断等价,也不构成总体准确率统计。 可运行桥接、预先定义的语义用例、原始输出、消融、性能协议、每次命令与哈希已在独立实验目录保留,并更新本地设计说明。AI 披露:实现、源码阅读、探针、统计及文字由 Codex(GPT-6,含子代理)在 @testikun 指导下完成;没有声明人工审查完成或维护者已接受范围。 |
Uh oh!
There was an error while loading. Please reload this page.
我们准备在
labs/code-analysis中实现 C6 重复代码检测,采用 jscpd 5.4.2 作为检测引擎。本次交付范围是后端结果、源码证据、基线比较及 CLI / AI task 闭环,暂不扩展前端。这篇讨论汇总已完成的工具实测,并提出本次 C6 实现范围,供维护者确认。2026-11-06 重新 fetch 后,Labs 最新提交仍为
bf0a29e7664f52973d06a8e6a608df2db1ecbd39,与本轮固定验证基线一致。下面区分已合入能力、本地实验结果和拟开发内容。当前实现与本次工作
evaluate/index.mjs。redundancy/duplicate-block;原型的 7 行归一化窗口尚不是正式检测器。因此这次采用 jscpd 的收益是避免新写重复检测算法,而不是删除现有依赖或复杂度分析。已完成的工具对比
固定 Archify 基线、Lizard 1.25.0 以及各工具版本,用明确正负例、语法反例、变换与消融检验,再对照固定 Flask 源码。工具输出不一致时区分定义、配置、对象范围和实现缺口;没有把现有实现、工具多数票、告警数量或项目年代当成正确答案。
这不是总体准确率排名。RCA 对象匹配、Sonar 文件级函数计数、CPD 组数和 jscpd pair 数不是同一个统计口径。真实项目候选尚未逐项人工裁决。
jscpd 的具体证据
实际使用 macOS arm64 原生二进制,版本
5.4.2,SHA-256bfbed2a5f2d9846bb578c61c7a6edae5e35010aa7064194eea5f2315d69d05bc。扫描不依赖 Python/JVM;通过 npm wrapper 启动仍需要 Node。没有沿用旧版 jscpd 的 Node 库架构假设。主评估配置:
--min-tokens 50 --min-lines 5 --mode weak --ignore-identifiers=consistent,单 worker,JSON reporter。50 tokens / 5 lines 是实验参数,尚不是经过三个真实仓库校准的产品默认值;不同工具的 token 和阈值定义不能直接等同。三成员报两条星状 pair 不等于漏掉第三成员。适配必须保留工具直接关系,不能把连通分量里的任意两点都声称为工具直接检出的相同片段。
SARIF 的
partialFingerprints["jscpdCloneHash/v1"]在前置行和无关文件变换中保持,在真实片段改动时变化。它适合表示内容,不能直接当作 Archify 跨修改保持的 finding ID。JSON 的fragment可能包含超过精确 end position 的整行上下文,取证应核对原源码位置;当前 ASCII 控制通过,Unicode/嵌入语言坐标仍待验收。真实项目为 Flask 固定源码:24 个 Python 文件,主配置扫描 23 个并返回 55 个候选。未进入扫描的
__main__.py只有三行、八个工具 tokens;只有同时降至 1 token / 1 line 才计入 source。这已通过消融确认是阈值排除,应进入覆盖说明。55 个候选尚未逐项标注,不能据此给出精确率或召回率。本机二进制约 41.21 MiB;Flask 主扫描一次约 127 ms、峰值 RSS 24.6 MB。这是单机小样本观察,不是大型仓库上限,也不是跨工具性能排名。固定发行版根许可标为 MIT;实际打包仍需核对平台发行物及第三方声明。
建议的第一块接入
目标:同一配置下,
check输出带两侧原始位置的redundancy/duplicate-blockfinding,能沿现有 task/基线/比较路径复核;检测器由 jscpd 提供,Archify 负责证据与产品契约。subject.files的身份逻辑不能直接区分同一文件对内的多个重复位置。接缝主要是
lib/analysis.mjs、规则入口与 redundancy 规则、findings 的分析上下文、lib/task.mjs/lib/evidence.mjs/lib/review.mjs。共享入口应一致,首期验证重心是 CLI;不新增页面布局或重复对照前端。尚需完成的验收
协作与希望确认的范围
已检索当前 Discussion、相关 Issue 和 Labs 的开放 PR。#1182 / #1222 / #1223 负责阈值及已有覆盖信息,#1224 负责基线接受操作;本切片需要复用这些方向。#1201 是独立 source-review 实验中提及 jscpd,并非本模块 C6 已完成接入。当前检索没有找到本模块已开放的 jscpd 接入 PR,这不代表不存在尚未公开的工作。
我们准备以
labs/code-analysis为基线完成这块 C6 后端工作,先在隔离开发分支实现并验证;正式 PR 的范围与交付方式沿本讨论确认。希望维护者确认:本讨论不代表维护者已批准范围或 C6 已完成。后续用相关 Issue 和小 PR 记录已确认决定,目标仍为 Labs。
由 Codex(GPT-6)协助完成源码调查、隔离实测、交叉复核和本文整理,在
@testikun授权下发布。没有代签人工验收;工具局部反例、配置差异和未测边界均保留。All reactions