全栈工程化

用 git blame 揪出高频改动模块,再拿静态分析结果交叉比对,重构顺序就不靠拍脑袋了

通过交叉比对 git blame 与静态分析数据,定位“高热高烂”文件作为重构第一优先级。热度反映业务压力,复杂度揭示出错风险,两者结合避免直觉误判。方法包括四象限排序、归因分析、热点方法定位及知识孤岛识别,并强调数据清洗、阈值设定和季度性重复评估,最终输出可执行的重构作战图。

AI 工具链

把 proto、日志和请求参数拼成一段上下文,调试 gRPC 报错才不用来回翻三个地方

gRPC 调试的难点在于 proto、日志和请求参数分散三处,需将其对齐、标注、压缩后拼成连续上下文,才能让模型和人快速定位错误。对齐靠请求 ID 锁定日志与参数,标注区分来源角色,压缩只留关键日志。拼好后用提示词要求模型给出证据链而非直接结论,最终以“他人 5 分钟内可复现”作为上下文质量的硬指标。

全栈工程化

依赖漏洞扫描卡在 PR 合并前,我们靠一道自动门把第三方库更新挡在了 main 外面

依赖漏洞扫描常被忽视,报告滞后导致问题进入 main。团队将 osv-scanner 与 license-checker 嵌入 PR 流程,通过 GitHub Actions 设置高危漏洞和不合规许可证的强制门禁,配合分支保护实现事前拦截。上线后 main 分支漏洞告警归零,月均拦截多个问题 PR,显著降低修复成本。

全栈工程化

圈复杂度阈值别拍脑袋定成 10,我们拿三个真实项目的缺陷密度数据倒推出来的基线

圈复杂度阈值设定应基于缺陷数据而非拍脑袋。三个Java项目统计显示,缺陷密度在圈复杂度11–15区间出现超120%的跳变,验证了10作为合理基线。建议分层落地:CI阻断阈值20,代码审查触发阈值10,存量代码分开治理。同时结合嵌套深度和认知复杂度指标提升准确性,并注意不同语言需重新校准阈值。

AI 工具链

异步调用链里 traceId 为什么会串?我踩过的上下文传递坑和修法

异步场景下 traceId 串值的根因是上下文载体选错:ThreadLocal 绑定线程,线程池复用、CompletableFuture 切换、响应式线程跳跃都会导致值丢失或污染。修法分别是 TTL 包装线程池、显式传递线程池或 javaagent 增强、改用 Reactor Context,跨服务则需正确传播 header 并匹配内部上下文模型。核心原则:先统一上下文载体,再谈透传。

AI 工具链

Copilot 单行与多行补全的触发条件差异,按代码块类型切换才不打架

Copilot 单行与多行补全的切换取决于光标前方的语法完整度和代码块类型,而非停顿时间。单行补全在语句未闭合、行有语法前缀或注释内触发;多行补全则需前方语句闭合且处于函数体、循环体等高置信度模板结构。实操中,保持语句不闭合可引导单行,先闭合签名再留空块可稳定触发多行。语言服务器状态、文件语法错误及模型置信度也会影响补全行为,且无官方设置可强制切换模式。

全栈工程化

开启 TS 严格模式时,让 CI 只对新改动做增量检查,历史错误先挂账不爆仓

在 CI 中对 git diff 结果运行 tsc --strict,实现新代码从第一天起严格模式,历史错误通过 @ts-expect-error 挂账清单管理。方案包括:用 tsconfig.strict.json 覆盖主配置、仅对增量文件检查、生成欠账报告、处理依赖闭包误报、配合 ESLint 规则,以及按模块推进销账。已在两个存量项目验证,有效阻止新隐式 any 和空值风险,同时不阻塞 CI。

AI 工具链

智能调试建议先过 ESLint 和 tsc 再采纳:一个交叉验证流程的实践记录

通过将 ESLint 与 tsc 的检查结果作为硬约束反馈给 AI 调试建议,形成“生成—验证—反馈”闭环,可显著提升建议质量。该流程以本地工具链错误清单为基准,对 AI 建议进行机器过滤,并将新增报错反向输入模型迭代优化,把“判断建议是否正确”转化为“判断报错是否可接受”,降低认知负担,同时指出其适用边界与自动化潜力。