发布时间:2026/9/3 5:32:27
AI 写我的双端项目,只认鸿蒙不认小程序:祸根是注册表里的排列顺序 结论先说tri-coding 拿哪套编码规范写你的代码不取决于它多聪明而取决于tech-skills/registry.md那张 25 行表格的排列顺序。我一个鸿蒙加微信小程序双端的项目两端特征文件都命中了它只加载了排在第 67 行的arkts把wechat按互斥规则跳过。最终 design.md 的「编码规范」那一节从头到尾没出现过一次wxml。起因design.md 里一个 wxml 都没有雷达鸭是我自己在做的 App收录中国一人公司和超级个体的真实赚钱案例技术栈是 Uni-app 配 arkTS 插件加 UniCloud微信小程序和鸿蒙版本同步在跑。日常就是靠 tri-xxx 这一票 skill 帮着打理开发流程。那天要给它加一个「案例收藏夹」双端都要。按 tri-coding 的流程走门①需求审批过了到门②拿到 design.md我扫「编码规范」那一节越看越不对劲Component、State、build()、Prop是单数别写成复数……全是 ArkTS 那一套。小程序侧的app.json分包、setData批量更新、wxml里不能写复杂表达式一条都没有。我头一个念头是需求写漏了。回头翻 requirements.md双端写得清清楚楚。顺着链路往上翻卡点在氛围校准tri-coding 的技术栈不写死在 SKILL.md 里。它在产出 design.md 的「氛围校准」步骤做一次匹配链路是这样读tech-skills/registry.md→ 扫项目特征文件 → 按注册表的触发规则逐条匹配 → 命中的技术栈规范注入 design.md 的「技术选型」与「编码规范」两个环节。执行阶段编码时遵循的就是这批已加载的规范。我那项目的特征文件是齐的按注册表的触发规则一条条对我项目里的特征文件该命中的 tech_id分类实际加载了吗tsconfig.json、*.tstypescriptlanguage是*.ets、oh-package.json5、module.json5arktsplatform是project.config.json、*.wxmlwechatplatform没有.git/、.gitignoregittool是始终加载generalbase是四个该命中的三个到位wechat凭空少了。注册表里那条我之前没细读的规则翻到 registry.md 的「加载规则」往下有一段标题写着互斥规则同类互斥仅加载首个命中项框架层互斥组react↔vuejs框架层互斥组django↔fastapi↔flask平台层互斥组arkts↔wechat↔h5互斥组内多个命中时优先加载注册表中靠前的条目其余跳过并记录告警平台层那条后面还跟了句解释「同一项目通常面向单一平台」。这个假设对大多数项目成立对跨端项目不成立。Uni-app 整个存在的意义就是一套代码编译到多端arkts和wechat同时命中是它的常态而不是异常输入。再看「优先加载注册表中靠前的条目」——这句话的意思是表格行序本身就是优先级。我去数了 platform 分类那几行在注册表里的位置注册表行号tech_id分类互斥组内结果67arktsplatform命中且靠前 →加载68electronplatform未命中69h5platform未命中70wechatplatform命中但靠后 →跳过arkts在第 67 行wechat在第 70 行。arkts 赢了赢的理由只是它在表里写得更早。我个人挺不喜欢这种设计。把优先级藏在表格行序里而不写成显式的priority字段读的人不去数行号根本发现不了。三个解法前两个我都否了方案做法结果一把wechat那行剪到arkts前面小程序规范上来了鸿蒙侧没了方向掉个头而已二删掉平台层那条互斥组让两个叠加两端语法混进同一份「编码规范」执行阶段分不清哪条管哪端三新增一个跨端 tech_id 显式注册采用方案一我真试了把wechat提到arkts上面重跑氛围校准这回 design.md 里全是小程序那套鸿蒙侧的build()和状态装饰器又没了。互斥组只放一个进来这件事没变。方案二更糟。ArkTS 的build()链式调用和小程序的wxml模板语法混在同一节里执行阶段 AI 分不清哪条约束管哪一端我真怕它给我写出wxml里套Column()的东西。方案三是我最后用的加一个新的 tech_id把「跨端」这件事显式注册进去。registry.md 自己写了它是「唯一扩展入口」新增技术栈无需改 tri-coding/SKILL.md那就用它给的路子走。在注册表追加一行| uniapp-multiend | Uni-app 跨端(小程序鸿蒙) | platform | package.json 含 dcloudio/uni-app 且同时存在 *.ets 与 project.config.json | uniapp-multiend.md |再在tech-skills/uniapp-multiend.md里把两端约束按目录分区写清楚而不是混成一锅哪些规范管src/pages/小程序侧哪些管harmony/下的.ets鸿蒙侧。分区这一步是关键不分区就退回方案二的问题了。落到代码上差别在这加载对了之后鸿蒙侧给的还是那套 ArkTS 写法这部分本来就没错Componentexportstruct FavoriteCard{PropcaseTitle:string;PropmonthlyRevenue:number0;Linkstarred:boolean;build(){Row(){Column(){Text(this.caseTitle).fontSize(16).fontWeight(FontWeight.Medium);Text(月流水 ¥${this.monthlyRevenue}).fontSize(13).fontColor(#8A8A8E);}.alignItems(HorizontalAlign.Start).layoutWeight(1);Image(this.starred?$r(app.media.star_on):$r(app.media.star_off)).width(24).height(24).onClick((){this.starred!this.starred;});}.width(100%).padding(12);}}小程序侧的规范补回来之后多出来的是这类约束也正是之前 design.md 里完全缺失的那部分// 小程序侧收藏状态变更必须合并 setData逐条调用会触发多次渲染Page({data:{list:[]},toggleStar(e){constidxe.currentTarget.dataset.index;constlistthis.data.list;// 只推送变更路径不整包重设 listthis.setData({[list[${idx}].starred]:!list[idx].starred,[list[${idx}].starredAt]:Date.now()});}});wxml里不写复杂表达式、setData走变更路径而不是整包重设这些条目 ArkTS 那份规范里一个字都不会提。顺手写了个脚本别再靠肉眼数行号数行号这活儿干一次就够了。写了个小脚本扫注册表加项目特征把命中的和被互斥吃掉的都打出来importjson,re,sysfrompathlibimportPath MUTEX_GROUPS[{react,vuejs},{django,fastapi,flask},{arkts,wechat,h5},]# tech_id - 用于判定的特征文件 glob简化版够用即可FEATURES{typescript:[tsconfig.json,**/*.ts],arkts:[**/*.ets,**/oh-package.json5,**/module.json5],wechat:[**/project.config.json,**/*.wxml],h5:[**/*.html],git:[.gitignore],}defparse_registry(md:Path):按注册表出现顺序取出 (行号, tech_id, 分类)rows[]forlineno,lineinenumerate(md.read_text(encodingutf-8).splitlines(),1):mre.match(r^\|\s*([a-z0-9\-])\s*\|[^|]*\|\s*(base|language|framework|platform|tool)\s*\|,line)ifm:rows.append((lineno,m.group(1),m.group(2)))returnrowsdefhits(project:Path,tech_id:str)-bool:forpatinFEATURES.get(tech_id,[]):ifnext(project.glob(pat),None):returnTruereturnFalsedefresolve(project:Path,registry:Path):loaded,skipped[general],[]claimedset()forlineno,tech_id,categoryinparse_registry(registry):iftech_idgeneralornothits(project,tech_id):continuegroupnext((gforginMUTEX_GROUPSiftech_iding),None)ifgroupandgroupclaimed:winner(groupclaimed).pop()skipped.append((tech_id,lineno,winner))continueifgroup:claimed.add(tech_id)loaded.append(tech_id)returnloaded,skippedif__name____main__:projPath(sys.argv[1]iflen(sys.argv)1else.)regPath(sys.argv[2]iflen(sys.argv)2elsetri-coding/tech-skills/registry.md)loaded,skippedresolve(proj,reg)print(已加载:, .join(loaded))fortech_id,lineno,winnerinskipped:print(f[告警]{tech_id}(第{lineno}行) 被互斥跳过让位给更靠前的{winner})在我那项目根目录跑一下已加载: general typescript arkts git [告警] wechat(第70行) 被互斥跳过让位给更靠前的 arkts那句「其余跳过并记录告警」注册表里是写了的但告警得落到我看得见的地方才算数。现在这行[告警]我在门②之前就能看到不用等 design.md 交上来才发现少了半套。一句话registry 驱动这套设计的可扩展性是真的加一行就能扩SKILL.md 一个字不用改。但可扩展不等于会自动判断对它的平台层互斥规则里压着一个「同一项目通常面向单一平台」的假设跨端项目撞上去AI 会安安静静地少给你半套规范design.md 照样交得漂漂亮亮格式齐全、章节完整、一处不缺。门②那关别只看格式先数一下技术栈加载对没对。我是老三10 年软件开发经验软件设计师、人工智能应用工程师主要做鸿蒙应用ArkTS北向开发和 Web 前端也在折腾 AI 自动化不定期在 CSDN 写点鸿蒙和 AI 方向的东西。本文遵循 MIT 协议转载请注明出处即可。这个系列的文章都来自开源的 tri 技能库。整套 tri-xxx 技能都能在 skillhub 找到并安装一条命令装完即用比如skillhub install tri-coding。装完每个技能都有 README想摸清它到底能干嘛读那个就够了。

相关新闻

2026/9/3 5:32:27

电商比价系统不是爬虫练习,而是多源数据融合工程

简介:本资源是一套面向计算机专业本科生的毕业设计级商品比价系统实现方案,聚焦Python定向爬虫开发与多范式工程实践,适用于毕业设计、课程设计及综合大作业场景。压缩包共16个文件(含10个核心Python源码、3个编译缓存文件、1个SQ…

2026/9/3 5:27:27

Python实现6S大气校正:遥感影像自动化处理与多卫星支持

简介:本资源是面向遥感科研与工程应用开发者的6S大气校正Python实现工具包,专为解决GF-1/2、Landsat-8、Sentinel-2等主流卫星影像的大气影响去除问题而设计,适用于地表反射率反演、植被指数计算、水体识别等定量遥感分析场景,兼顾…

2026/9/3 5:37:27

宠物喂养领养系统开发,领养审核模块技术方案

在宠物喂养领养系统中,领养审核模块是整个业务的核心风控关卡,区别于普通订单提交,领养不是交易下单,而是对申请人饲养条件、责任心进行综合评估。很多项目直接使用表单提交加人工后台查看的简易模式,缺少状态约束、材…

2026/9/3 5:37:27

基于若依框架的企业级OA与知识产权管理系统实战解析

简介:这是一套面向Java中高级开发者的企业级知识产权管理OA系统源码,基于成熟稳定的若依(RuoYi)框架构建,聚焦专利、版权、商标、合同及侵权监控等核心业务场景,适用于企业法务、IT部门或软件外包团队快速落…

2026/9/3 5:37:27

基于Matlab的雷达信号体制仿真:从原理到工程实践

简介:本资源是一套面向雷达信号处理初学者与工程实践者的Matlab仿真源码集,聚焦体制雷达信号建模与生成,解决实际科研与教学中缺乏可复现、可调试的多体制雷达信号样本问题。压缩包共含8个.m文件,均为独立可运行的Matlab脚本&…

2026/9/3 5:37:27

朱雀AI检测API接口实战:降低AI内容识别概率的技术方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/3 5:37:27

GPS定位偏移33英尺?揭秘定位误差与坐标转换实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/1 16:02:17

vSound小提琴数字处理器实操指南:从接线到演出的完整配置

电小提琴或者原声小提琴插电演出,第一个绕不开的坎就是声音难听。原声琴的共鸣和空气感一旦进了拾音器,出来的往往是一坨干瘪、发尖、带着奇怪塑料味的信号。我当初第一次把琴接上乐队调音台,直接被主唱吐槽"你这声音像在锯钢丝"。…

2026/9/2 9:00:32

传感器接口IC如何攻克生物化学传感的微弱信号难题?

1. 从电极到比特流:为什么生物化学传感必须依赖专用接口IC 做生物化学传感的人都有过类似的经历:明明传感器本身性能很好,信号输出却一塌糊涂——噪声大、漂移明显、重复性差,怎么调都达不到预期。很多时候问题并不在传感器&#…

2026/9/2 8:41:06

STM32F411CEU6多通道ADC采集:扫描模式+DMA实现详解

1. 多通道 ADC 的用武之地把“Multichannel ADC”和“STM32F411CEU6”这两个关键字放在一起,其实就是嵌入式开发里最常遇到的一类需求:用一块不算贵的 MCU,同时采集多路模拟信号。STM32F411CEU6 是 48 引脚的 Cortex-M4F 主控,主频…

2026/9/3 0:02:06

零基础装 OpenClaw 小龙虾 AI:Windows 一键部署教程与避坑要点

Windows 部署 OpenClaw 完整教程|本地 AI 智能体 5 分钟落地,环境配置一次搞定 版本说明:Windows 3.1.0 / Mac 2.7.9 写在前面 近两年开源 AI 领域有一款被称作「数字员工」的工具持续走热,它就是 OpenClaw,圈内人更习…

2026/9/3 0:02:06

Hermes Agent 本地部署新方案:Windows 整合包减少依赖报错

Windows 本地部署 Hermes 太麻烦?这版一键包 5 分钟快速跑通 很多人想体验 Hermes Agent,但真正开始部署时,往往会卡在环境配置这一步。 需要安装各类依赖、调试运行环境、处理路径问题,还容易遇到命令行报错、系统拦截、文件缺…

2026/9/3 0:02:06

实测 OpenClaw 一键包,5 分钟完成本地自动化环境搭建

OpenClaw 本地 AI 自动化工具部署指南|使用一键包规避环境配置难题 痛点:部署 AI 自动化工具常常要处理 Python、Node.js 各类依赖,版本冲突、环境配置耗费大量时间,OpenClaw 提供一键安装包,降低部署门槛。 适配系统&…

2026/9/2 1:15:22

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/2 1:15:22

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/2 1:15:20

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…