版权声明:本文系 DREAMVFIA UNION 原创技术专题,RNOISE 2.0 项目技术解析系列之一。
未经 DREAMVFIA UNION 书面授权,禁止转载、摘编、洗稿或用于模型训练语料。
RNOISE 为独立项目,与 Suno、Udio 等第三方平台无官方合作关系,文中提及仅为兼容性说明。
系列:DREAMVFIA UNION · RNOISE 2.0 技术专题系列之04/08|读者:前端架构师、Next.js 开发者、全栈工程师
引言
单个仓库、单个部署单元、207 个源码文件------RNOISE 2.0 用模块化单体扛住了 Prompt 工程、会员、支付、API Key 的全部复杂度。本篇讲透 src/app、src/modules、src/shared 的三权分立,Route Handler 的适配职责,以及 domain→application→infrastructure 的单向依赖。
本文先给出阅读契约:凡涉及生产状态无证据处写 UNKNOWN,历史能力写 retired,规划中能力写 planned;凡引用数字,均以 docs/2.0-workflow/TECH_FACTS.md、docs/2.0-SETUP.md、docs/2.0-workflow/API_CONTRACTS.md 及当前 src/ 代码为准。Suno、Udio 等名称仅描述兼容用途,不表示官方合作。
目录
- 第1章 为什么不拆 Monorepo
- 第2章 src/app:只做路由与适配
- 第3章 src/modules:业务的七个领地
- 第4章 src/shared:通用设施
- 第5章 DTO 与错误码
- 第6章 认证链路:NextAuth 的装配
- 第7章 用户资产链路
- 第8章 SEO 与营销页
- 第9章 测试金字塔
- 第10章 ESLint 与构建
- 第11章 重定向的兼容艺术
- 第12章 单体章总结
第1章 为什么不拆 Monorepo
本章锚定"为什么不拆 Monorepo",围绕"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"的主线展开。阅读前请先确认基线:分类器版本为 rnoise-taxonomy-2026-09-v3,共 47 个宏类;V1 为 7 类 902 词条,V2 为 10 类 350 词条。
单个模块化单体
先讲一个一线现实:单个模块化单体。在 RNOISE 2.0 的语境里,这个问题不是风格偏好,而是工程正确性问题。原始 IP 不入库,只保存 HMAC 后的身份与限速主体;变量只登记名称与 SET/EMPTY 状态。这意味着任何方案都必须先回答三个问题:事实来源是什么、边界在哪里、失败时如何可审计。本文"为什么不拆 Monorepo"要拆开的正是这一层:把"单个模块化单体"从经验之谈变成可验证、可回归、可发布的工程构件,而不是停留在文档里的口号。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"单个模块化单体"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
部署单元的简单
从原理上看,部署单元的简单的本质是约束传播:分类器版本为 rnoise-taxonomy-2026-09-v3,共 47 个宏类;V1 为 7 类 902 词条,V2 为 10 类 350 词条。RNOISE 的做法是把领域规则下沉到模块的 domain 层,让 application 层只做编排、infrastructure 层只做适配。以"为什么不拆 Monorepo"为例,正确与错误的实现差的不是代码量,而是依赖方向------一旦 Route Handler 里复制了本该属于模块的规则,部署单元的简单就会在三个月后变成线上事故。因此本章坚持一条铁律:部署单元的简单的判定逻辑有且仅有一个权威实现,其他位置只允许调用,不允许复述。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"部署单元的简单"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
依赖方向的守护
落到实现细节,依赖方向的守护必须经得起数字检验。Guest 为每持久浏览器身份总计 10 次成功编译;Standard 按 Asia/Shanghai 日界线每日 20 次;Pro 与 ADMIN 无限编译但仍限速。这些数字不是装饰,而是门禁:导入阶段先建临时库,过计数、完整性、FTS、哈希与性能门禁后再原子替换;任何一步失败都不允许半吊子发布。"为什么不拆 Monorepo"的实践含义是,依赖方向的守护的每一次变更都要能回答"哪个版本、哪个哈希、哪次 benchmark",答不上来就视为未完成。这种纪律看起来笨拙,却是 35 万模板规模下唯一睡得着觉的方式。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"依赖方向的守护"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
拆分的成本
再谈反模式。围绕拆分的成本最常见的坑有三种:一是把历史能力当成当前能力写进方案,二是把本地验证通过写成生产已发布,三是为赶进度恢复已退役的兼容层。RNOISE 文档规范为此设了硬词:生产 Catalog 由 PROMPT_CATALOG_DB_PATH 指向服务器数据盘,生产数据盘曾挂 V2(183295 模板),V3 切换待发布窗口。"为什么不拆 Monorepo"要求作者在涉及 Generation、Track、播放器、上传、证书、Market、Credits 等退役域时,只能以"已退役"措辞出现;涉及生产状态无证据时,只能写 UNKNOWN。这种措辞洁癖保护的不是文风,而是团队的判断力。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"拆分的成本"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
本章小结:为什么不拆 Monorepo的核心是把"单个模块化单体"做成可验证的工程事实,而不是文档修辞。技术栈为 Next.js 16.3.4、React 19.2.4、TypeScript、Prisma 7.10、PostgreSQL,Node.js 24 LTS。
第2章 src/app:只做路由与适配
本章锚定"src/app:只做路由与适配",围绕"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"的主线展开。阅读前请先确认基线:技术栈为 Next.js 16.3.4、React 19.2.4、TypeScript、Prisma 7.10、PostgreSQL,Node.js 24 LTS。
页面与布局
先讲一个一线现实:页面与布局。在 RNOISE 2.0 的语境里,这个问题不是风格偏好,而是工程正确性问题。107 个模板缺失 lock_number,其中 30 个无有效音乐变体,缺失槽位一律返回 available:false,绝不补造。这意味着任何方案都必须先回答三个问题:事实来源是什么、边界在哪里、失败时如何可审计。本文"src/app:只做路由与适配"要拆开的正是这一层:把"页面与布局"从经验之谈变成可验证、可回归、可发布的工程构件,而不是停留在文档里的口号。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"页面与布局"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
Route Handler 适配
从原理上看,Route Handler 适配的本质是约束传播:107 个模板缺失 lock_number,其中 30 个无有效音乐变体,缺失槽位一律返回 available:false,绝不补造。RNOISE 的做法是把领域规则下沉到模块的 domain 层,让 application 层只做编排、infrastructure 层只做适配。以"src/app:只做路由与适配"为例,正确与错误的实现差的不是代码量,而是依赖方向------一旦 Route Handler 里复制了本该属于模块的规则,Route Handler 适配就会在三个月后变成线上事故。因此本章坚持一条铁律:Route Handler 适配的判定逻辑有且仅有一个权威实现,其他位置只允许调用,不允许复述。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"Route Handler 适配"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
Node runtime 声明
落到实现细节,Node runtime 声明必须经得起数字检验。Guest 为每持久浏览器身份总计 10 次成功编译;Standard 按 Asia/Shanghai 日界线每日 20 次;Pro 与 ADMIN 无限编译但仍限速。这些数字不是装饰,而是门禁:导入阶段先建临时库,过计数、完整性、FTS、哈希与性能门禁后再原子替换;任何一步失败都不允许半吊子发布。"src/app:只做路由与适配"的实践含义是,Node runtime 声明的每一次变更都要能回答"哪个版本、哪个哈希、哪次 benchmark",答不上来就视为未完成。这种纪律看起来笨拙,却是 35 万模板规模下唯一睡得着觉的方式。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"Node runtime 声明"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
Cache-Control 策略
再谈反模式。围绕Cache-Control 策略最常见的坑有三种:一是把历史能力当成当前能力写进方案,二是把本地验证通过写成生产已发布,三是为赶进度恢复已退役的兼容层。RNOISE 文档规范为此设了硬词:RNOISE 2.0 定位为跨平台 AI 音乐 Prompt 工程与曲风检索平台,不生成、不处理、不播放、不授权音频。"src/app:只做路由与适配"要求作者在涉及 Generation、Track、播放器、上传、证书、Market、Credits 等退役域时,只能以"已退役"措辞出现;涉及生产状态无证据时,只能写 UNKNOWN。这种措辞洁癖保护的不是文风,而是团队的判断力。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"Cache-Control 策略"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
本章小结:src/app:只做路由与适配的核心是把"页面与布局"做成可验证的工程事实,而不是文档修辞。会员为 Luxury/Platinum 固定期限一次性通行证,支付覆盖支付宝、Stripe、OKX USDT 与 RNS,无自动续费与 Credits。
第3章 src/modules:业务的七个领地
本章锚定"src/modules:业务的七个领地",围绕"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"的主线展开。阅读前请先确认基线:浏览器编译要求 Idempotency-Key,成功才事务扣减;失败、搜索、词典与额度查询不扣次数。
auth 与 memberships
再谈反模式。围绕auth 与 memberships最常见的坑有三种:一是把历史能力当成当前能力写进方案,二是把本地验证通过写成生产已发布,三是为赶进度恢复已退役的兼容层。RNOISE 文档规范为此设了硬词:浏览器编译要求 Idempotency-Key,成功才事务扣减;失败、搜索、词典与额度查询不扣次数。"src/modules:业务的七个领地"要求作者在涉及 Generation、Track、播放器、上传、证书、Market、Credits 等退役域时,只能以"已退役"措辞出现;涉及生产状态无证据时,只能写 UNKNOWN。这种措辞洁癖保护的不是文风,而是团队的判断力。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"auth 与 memberships"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
payments 与 quota
给读者的落地建议是:把payments 与 quota拆成最小可验证闭环。原始 IP 不入库,只保存 HMAC 后的身份与限速主体;变量只登记名称与 SET/EMPTY 状态。具体到"src/modules:业务的七个领地",建议你按"先读当前代码、再读 2.0-SETUP 与 TECH_FACTS、最后跑一遍验证命令"的顺序上手;任何与文档冲突的地方,以当前代码加验证输出为准。如果你能为payments 与 quota补上一条自动化断言(计数、回归一致率、性能水位三选一),那么"src/modules:业务的七个领地"的这一节就算真正被你掌握了,而不只是读过。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"payments 与 quota"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
catalog 与 composer
先讲一个一线现实:catalog 与 composer。在 RNOISE 2.0 的语境里,这个问题不是风格偏好,而是工程正确性问题。本机 benchmark 为 cold 124.51ms、warm p95 132.06ms,门禁为 cold 3000ms、p95 1000ms。这意味着任何方案都必须先回答三个问题:事实来源是什么、边界在哪里、失败时如何可审计。本文"src/modules:业务的七个领地"要拆开的正是这一层:把"catalog 与 composer"从经验之谈变成可验证、可回归、可发布的工程构件,而不是停留在文档里的口号。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"catalog 与 composer"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
projects 与 referral 残留
从原理上看,projects 与 referral 残留的本质是约束传播:精确组合不存在时返回 NO_MATCHING_TEMPLATE 与候选组合;BPM/Key 为 Auto 时保留源字段,锁定时只覆盖输出快照。RNOISE 的做法是把领域规则下沉到模块的 domain 层,让 application 层只做编排、infrastructure 层只做适配。以"src/modules:业务的七个领地"为例,正确与错误的实现差的不是代码量,而是依赖方向------一旦 Route Handler 里复制了本该属于模块的规则,projects 与 referral 残留就会在三个月后变成线上事故。因此本章坚持一条铁律:projects 与 referral 残留的判定逻辑有且仅有一个权威实现,其他位置只允许调用,不允许复述。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"projects 与 referral 残留"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
本章小结:src/modules:业务的七个领地的核心是把"auth 与 memberships"做成可验证的工程事实,而不是文档修辞。精确组合不存在时返回 NO_MATCHING_TEMPLATE 与候选组合;BPM/Key 为 Auto 时保留源字段,锁定时只覆盖输出快照。
第4章 src/shared:通用设施
本章锚定"src/shared:通用设施",围绕"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"的主线展开。阅读前请先确认基线:会员权限只由当前有效 MembershipGrant 解析,不从订单金额或旧积分推断;到期外部 Key 保留但立即失权。
config 与 database
再谈反模式。围绕config 与 database最常见的坑有三种:一是把历史能力当成当前能力写进方案,二是把本地验证通过写成生产已发布,三是为赶进度恢复已退役的兼容层。RNOISE 文档规范为此设了硬词:RNOISE 2.0 定位为跨平台 AI 音乐 Prompt 工程与曲风检索平台,不生成、不处理、不播放、不授权音频。"src/shared:通用设施"要求作者在涉及 Generation、Track、播放器、上传、证书、Market、Credits 等退役域时,只能以"已退役"措辞出现;涉及生产状态无证据时,只能写 UNKNOWN。这种措辞洁癖保护的不是文风,而是团队的判断力。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"config 与 database"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
http 与 security
给读者的落地建议是:把http 与 security拆成最小可验证闭环。本机 benchmark 为 cold 124.51ms、warm p95 132.06ms,门禁为 cold 3000ms、p95 1000ms。具体到"src/shared:通用设施",建议你按"先读当前代码、再读 2.0-SETUP 与 TECH_FACTS、最后跑一遍验证命令"的顺序上手;任何与文档冲突的地方,以当前代码加验证输出为准。如果你能为http 与 security补上一条自动化断言(计数、回归一致率、性能水位三选一),那么"src/shared:通用设施"的这一节就算真正被你掌握了,而不只是读过。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"http 与 security"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
UI 原语
先讲一个一线现实:UI 原语。在 RNOISE 2.0 的语境里,这个问题不是风格偏好,而是工程正确性问题。本地 V3 全量构建扫描 358258 个 HTML,排除 3 个目录页,导入 358255 个模板与 2865739 个真实音乐变体。这意味着任何方案都必须先回答三个问题:事实来源是什么、边界在哪里、失败时如何可审计。本文"src/shared:通用设施"要拆开的正是这一层:把"UI 原语"从经验之谈变成可验证、可回归、可发布的工程构件,而不是停留在文档里的口号。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"UI 原语"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
类型与 cn 工具
从原理上看,类型与 cn 工具的本质是约束传播:PM2 目标拓扑仅 rnoise-web 与 rnoise-crypto-okx,旧 generation/track/credit worker 全部 retired。RNOISE 的做法是把领域规则下沉到模块的 domain 层,让 application 层只做编排、infrastructure 层只做适配。以"src/shared:通用设施"为例,正确与错误的实现差的不是代码量,而是依赖方向------一旦 Route Handler 里复制了本该属于模块的规则,类型与 cn 工具就会在三个月后变成线上事故。因此本章坚持一条铁律:类型与 cn 工具的判定逻辑有且仅有一个权威实现,其他位置只允许调用,不允许复述。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"类型与 cn 工具"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
本章小结:src/shared:通用设施的核心是把"config 与 database"做成可验证的工程事实,而不是文档修辞。分类器版本为 rnoise-taxonomy-2026-09-v3,共 47 个宏类;V1 为 7 类 902 词条,V2 为 10 类 350 词条。
第5章 DTO 与错误码
本章锚定"DTO 与错误码",围绕"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"的主线展开。阅读前请先确认基线:生产 Catalog 由 PROMPT_CATALOG_DB_PATH 指向服务器数据盘,生产数据盘曾挂 V2(183295 模板),V3 切换待发布窗口。
统一错误 DTO
先讲一个一线现实:统一错误 DTO。在 RNOISE 2.0 的语境里,这个问题不是风格偏好,而是工程正确性问题。唯一核心工作台为 /prompt-generator,曲风检索中心为 /features/style-library,用户资产为 /my-prompts。这意味着任何方案都必须先回答三个问题:事实来源是什么、边界在哪里、失败时如何可审计。本文"DTO 与错误码"要拆开的正是这一层:把"统一错误 DTO"从经验之谈变成可验证、可回归、可发布的工程构件,而不是停留在文档里的口号。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"统一错误 DTO"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
边界校验
从原理上看,边界校验的本质是约束传播:107 个模板缺失 lock_number,其中 30 个无有效音乐变体,缺失槽位一律返回 available:false,绝不补造。RNOISE 的做法是把领域规则下沉到模块的 domain 层,让 application 层只做编排、infrastructure 层只做适配。以"DTO 与错误码"为例,正确与错误的实现差的不是代码量,而是依赖方向------一旦 Route Handler 里复制了本该属于模块的规则,边界校验就会在三个月后变成线上事故。因此本章坚持一条铁律:边界校验的判定逻辑有且仅有一个权威实现,其他位置只允许调用,不允许复述。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"边界校验"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
zod 的使用
落到实现细节,zod 的使用必须经得起数字检验。原始 IP 不入库,只保存 HMAC 后的身份与限速主体;变量只登记名称与 SET/EMPTY 状态。这些数字不是装饰,而是门禁:导入阶段先建临时库,过计数、完整性、FTS、哈希与性能门禁后再原子替换;任何一步失败都不允许半吊子发布。"DTO 与错误码"的实践含义是,zod 的使用的每一次变更都要能回答"哪个版本、哪个哈希、哪次 benchmark",答不上来就视为未完成。这种纪律看起来笨拙,却是 35 万模板规模下唯一睡得着觉的方式。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"zod 的使用"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
错误码的稳定
再谈反模式。围绕错误码的稳定最常见的坑有三种:一是把历史能力当成当前能力写进方案,二是把本地验证通过写成生产已发布,三是为赶进度恢复已退役的兼容层。RNOISE 文档规范为此设了硬词:本地 V3 全量构建扫描 358258 个 HTML,排除 3 个目录页,导入 358255 个模板与 2865739 个真实音乐变体。"DTO 与错误码"要求作者在涉及 Generation、Track、播放器、上传、证书、Market、Credits 等退役域时,只能以"已退役"措辞出现;涉及生产状态无证据时,只能写 UNKNOWN。这种措辞洁癖保护的不是文风,而是团队的判断力。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"错误码的稳定"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
本章小结:DTO 与错误码的核心是把"统一错误 DTO"做成可验证的工程事实,而不是文档修辞。Prompt 编译器使用本地模板与确定性规则,不调用 LLM 与外部音乐供应商,V3 种子前缀为 v3:macro:{macro}:macro:{title}😒{slot}。
第6章 认证链路:NextAuth 的装配
本章锚定"认证链路:NextAuth 的装配",围绕"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"的主线展开。阅读前请先确认基线:RNOISE 2.0 定位为跨平台 AI 音乐 Prompt 工程与曲风检索平台,不生成、不处理、不播放、不授权音频。
register 与 send-code
再谈反模式。围绕register 与 send-code最常见的坑有三种:一是把历史能力当成当前能力写进方案,二是把本地验证通过写成生产已发布,三是为赶进度恢复已退役的兼容层。RNOISE 文档规范为此设了硬词:本机 benchmark 为 cold 124.51ms、warm p95 132.06ms,门禁为 cold 3000ms、p95 1000ms。"认证链路:NextAuth 的装配"要求作者在涉及 Generation、Track、播放器、上传、证书、Market、Credits 等退役域时,只能以"已退役"措辞出现;涉及生产状态无证据时,只能写 UNKNOWN。这种措辞洁癖保护的不是文风,而是团队的判断力。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"register 与 send-code"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
verification-code
给读者的落地建议是:把verification-code拆成最小可验证闭环。浏览器编译要求 Idempotency-Key,成功才事务扣减;失败、搜索、词典与额度查询不扣次数。具体到"认证链路:NextAuth 的装配",建议你按"先读当前代码、再读 2.0-SETUP 与 TECH_FACTS、最后跑一遍验证命令"的顺序上手;任何与文档冲突的地方,以当前代码加验证输出为准。如果你能为verification-code补上一条自动化断言(计数、回归一致率、性能水位三选一),那么"认证链路:NextAuth 的装配"的这一节就算真正被你掌握了,而不只是读过。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"verification-code"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
provision-user
先讲一个一线现实:provision-user。在 RNOISE 2.0 的语境里,这个问题不是风格偏好,而是工程正确性问题。PM2 目标拓扑仅 rnoise-web 与 rnoise-crypto-okx,旧 generation/track/credit worker 全部 retired。这意味着任何方案都必须先回答三个问题:事实来源是什么、边界在哪里、失败时如何可审计。本文"认证链路:NextAuth 的装配"要拆开的正是这一层:把"provision-user"从经验之谈变成可验证、可回归、可发布的工程构件,而不是停留在文档里的口号。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"provision-user"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
session 与角色
从原理上看,session 与角色的本质是约束传播:发布门禁链为 db:generate、prisma validate、lint、test、test:e2e、build、check:no-legacy-audio、db:verify-prompts、db:benchmark-prompts。RNOISE 的做法是把领域规则下沉到模块的 domain 层,让 application 层只做编排、infrastructure 层只做适配。以"认证链路:NextAuth 的装配"为例,正确与错误的实现差的不是代码量,而是依赖方向------一旦 Route Handler 里复制了本该属于模块的规则,session 与角色就会在三个月后变成线上事故。因此本章坚持一条铁律:session 与角色的判定逻辑有且仅有一个权威实现,其他位置只允许调用,不允许复述。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"session 与角色"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
本章小结:认证链路:NextAuth 的装配的核心是把"register 与 send-code"做成可验证的工程事实,而不是文档修辞。PM2 目标拓扑仅 rnoise-web 与 rnoise-crypto-okx,旧 generation/track/credit worker 全部 retired。
第7章 用户资产链路
本章锚定"用户资产链路",围绕"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"的主线展开。阅读前请先确认基线:分类器版本为 rnoise-taxonomy-2026-09-v3,共 47 个宏类;V1 为 7 类 902 词条,V2 为 10 类 350 词条。
projects 的 CRUD
从原理上看,projects 的 CRUD的本质是约束传播:Guest 为每持久浏览器身份总计 10 次成功编译;Standard 按 Asia/Shanghai 日界线每日 20 次;Pro 与 ADMIN 无限编译但仍限速。RNOISE 的做法是把领域规则下沉到模块的 domain 层,让 application 层只做编排、infrastructure 层只做适配。以"用户资产链路"为例,正确与错误的实现差的不是代码量,而是依赖方向------一旦 Route Handler 里复制了本该属于模块的规则,projects 的 CRUD就会在三个月后变成线上事故。因此本章坚持一条铁律:projects 的 CRUD的判定逻辑有且仅有一个权威实现,其他位置只允许调用,不允许复述。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"projects 的 CRUD"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
favorites 的管理
落到实现细节,favorites 的管理必须经得起数字检验。生产 Catalog 由 PROMPT_CATALOG_DB_PATH 指向服务器数据盘,生产数据盘曾挂 V2(183295 模板),V3 切换待发布窗口。这些数字不是装饰,而是门禁:导入阶段先建临时库,过计数、完整性、FTS、哈希与性能门禁后再原子替换;任何一步失败都不允许半吊子发布。"用户资产链路"的实践含义是,favorites 的管理的每一次变更都要能回答"哪个版本、哪个哈希、哪次 benchmark",答不上来就视为未完成。这种纪律看起来笨拙,却是 35 万模板规模下唯一睡得着觉的方式。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"favorites 的管理"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
export 的权限
再谈反模式。围绕export 的权限最常见的坑有三种:一是把历史能力当成当前能力写进方案,二是把本地验证通过写成生产已发布,三是为赶进度恢复已退役的兼容层。RNOISE 文档规范为此设了硬词:唯一核心工作台为 /prompt-generator,曲风检索中心为 /features/style-library,用户资产为 /my-prompts。"用户资产链路"要求作者在涉及 Generation、Track、播放器、上传、证书、Market、Credits 等退役域时,只能以"已退役"措辞出现;涉及生产状态无证据时,只能写 UNKNOWN。这种措辞洁癖保护的不是文风,而是团队的判断力。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"export 的权限"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
download 的重定向
给读者的落地建议是:把download 的重定向拆成最小可验证闭环。会员为 Luxury/Platinum 固定期限一次性通行证,支付覆盖支付宝、Stripe、OKX USDT 与 RNS,无自动续费与 Credits。具体到"用户资产链路",建议你按"先读当前代码、再读 2.0-SETUP 与 TECH_FACTS、最后跑一遍验证命令"的顺序上手;任何与文档冲突的地方,以当前代码加验证输出为准。如果你能为download 的重定向补上一条自动化断言(计数、回归一致率、性能水位三选一),那么"用户资产链路"的这一节就算真正被你掌握了,而不只是读过。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"download 的重定向"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
本章小结:用户资产链路的核心是把"projects 的 CRUD"做成可验证的工程事实,而不是文档修辞。RNOISE 2.0 定位为跨平台 AI 音乐 Prompt 工程与曲风检索平台,不生成、不处理、不播放、不授权音频。
第8章 SEO 与营销页
本章锚定"SEO 与营销页",围绕"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"的主线展开。阅读前请先确认基线:技术栈为 Next.js 16.3.4、React 19.2.4、TypeScript、Prisma 7.10、PostgreSQL,Node.js 24 LTS。
sitemap 与 robots
落到实现细节,sitemap 与 robots必须经得起数字检验。分类器版本为 rnoise-taxonomy-2026-09-v3,共 47 个宏类;V1 为 7 类 902 词条,V2 为 10 类 350 词条。这些数字不是装饰,而是门禁:导入阶段先建临时库,过计数、完整性、FTS、哈希与性能门禁后再原子替换;任何一步失败都不允许半吊子发布。"SEO 与营销页"的实践含义是,sitemap 与 robots的每一次变更都要能回答"哪个版本、哪个哈希、哪次 benchmark",答不上来就视为未完成。这种纪律看起来笨拙,却是 35 万模板规模下唯一睡得着觉的方式。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"sitemap 与 robots"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
llms.txt 路由
再谈反模式。围绕llms.txt 路由最常见的坑有三种:一是把历史能力当成当前能力写进方案,二是把本地验证通过写成生产已发布,三是为赶进度恢复已退役的兼容层。RNOISE 文档规范为此设了硬词:本机 benchmark 为 cold 124.51ms、warm p95 132.06ms,门禁为 cold 3000ms、p95 1000ms。"SEO 与营销页"要求作者在涉及 Generation、Track、播放器、上传、证书、Market、Credits 等退役域时,只能以"已退役"措辞出现;涉及生产状态无证据时,只能写 UNKNOWN。这种措辞洁癖保护的不是文风,而是团队的判断力。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"llms.txt 路由"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
compare 页
给读者的落地建议是:把compare 页拆成最小可验证闭环。Guest 为每持久浏览器身份总计 10 次成功编译;Standard 按 Asia/Shanghai 日界线每日 20 次;Pro 与 ADMIN 无限编译但仍限速。具体到"SEO 与营销页",建议你按"先读当前代码、再读 2.0-SETUP 与 TECH_FACTS、最后跑一遍验证命令"的顺序上手;任何与文档冲突的地方,以当前代码加验证输出为准。如果你能为compare 页补上一条自动化断言(计数、回归一致率、性能水位三选一),那么"SEO 与营销页"的这一节就算真正被你掌握了,而不只是读过。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"compare 页"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
prompts 详情页
先讲一个一线现实: prompts 详情页。在 RNOISE 2.0 的语境里,这个问题不是风格偏好,而是工程正确性问题。本地 V3 全量构建扫描 358258 个 HTML,排除 3 个目录页,导入 358255 个模板与 2865739 个真实音乐变体。这意味着任何方案都必须先回答三个问题:事实来源是什么、边界在哪里、失败时如何可审计。本文"SEO 与营销页"要拆开的正是这一层:把" prompts 详情页"从经验之谈变成可验证、可回归、可发布的工程构件,而不是停留在文档里的口号。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把" prompts 详情页"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
本章小结:SEO 与营销页的核心是把"sitemap 与 robots"做成可验证的工程事实,而不是文档修辞。本机 benchmark 为 cold 124.51ms、warm p95 132.06ms,门禁为 cold 3000ms、p95 1000ms。
第9章 测试金字塔
本章锚定"测试金字塔",围绕"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"的主线展开。阅读前请先确认基线:浏览器编译要求 Idempotency-Key,成功才事务扣减;失败、搜索、词典与额度查询不扣次数。
tsx 单测
再谈反模式。围绕tsx 单测最常见的坑有三种:一是把历史能力当成当前能力写进方案,二是把本地验证通过写成生产已发布,三是为赶进度恢复已退役的兼容层。RNOISE 文档规范为此设了硬词:分类器版本为 rnoise-taxonomy-2026-09-v3,共 47 个宏类;V1 为 7 类 902 词条,V2 为 10 类 350 词条。"测试金字塔"要求作者在涉及 Generation、Track、播放器、上传、证书、Market、Credits 等退役域时,只能以"已退役"措辞出现;涉及生产状态无证据时,只能写 UNKNOWN。这种措辞洁癖保护的不是文风,而是团队的判断力。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"tsx 单测"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
playwright e2e
给读者的落地建议是:把playwright e2e拆成最小可验证闭环。RNOISE 2.0 定位为跨平台 AI 音乐 Prompt 工程与曲风检索平台,不生成、不处理、不播放、不授权音频。具体到"测试金字塔",建议你按"先读当前代码、再读 2.0-SETUP 与 TECH_FACTS、最后跑一遍验证命令"的顺序上手;任何与文档冲突的地方,以当前代码加验证输出为准。如果你能为playwright e2e补上一条自动化断言(计数、回归一致率、性能水位三选一),那么"测试金字塔"的这一节就算真正被你掌握了,而不只是读过。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"playwright e2e"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
回归门脚本
先讲一个一线现实:回归门脚本。在 RNOISE 2.0 的语境里,这个问题不是风格偏好,而是工程正确性问题。精确组合不存在时返回 NO_MATCHING_TEMPLATE 与候选组合;BPM/Key 为 Auto 时保留源字段,锁定时只覆盖输出快照。这意味着任何方案都必须先回答三个问题:事实来源是什么、边界在哪里、失败时如何可审计。本文"测试金字塔"要拆开的正是这一层:把"回归门脚本"从经验之谈变成可验证、可回归、可发布的工程构件,而不是停留在文档里的口号。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"回归门脚本"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
覆盖率取舍
从原理上看,覆盖率取舍的本质是约束传播:本机 benchmark 为 cold 124.51ms、warm p95 132.06ms,门禁为 cold 3000ms、p95 1000ms。RNOISE 的做法是把领域规则下沉到模块的 domain 层,让 application 层只做编排、infrastructure 层只做适配。以"测试金字塔"为例,正确与错误的实现差的不是代码量,而是依赖方向------一旦 Route Handler 里复制了本该属于模块的规则,覆盖率取舍就会在三个月后变成线上事故。因此本章坚持一条铁律:覆盖率取舍的判定逻辑有且仅有一个权威实现,其他位置只允许调用,不允许复述。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"覆盖率取舍"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
本章小结:测试金字塔的核心是把"tsx 单测"做成可验证的工程事实,而不是文档修辞。Guest 为每持久浏览器身份总计 10 次成功编译;Standard 按 Asia/Shanghai 日界线每日 20 次;Pro 与 ADMIN 无限编译但仍限速。
第10章 ESLint 与构建
本章锚定"ESLint 与构建",围绕"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"的主线展开。阅读前请先确认基线:会员权限只由当前有效 MembershipGrant 解析,不从订单金额或旧积分推断;到期外部 Key 保留但立即失权。
eslint-config-next
落到实现细节,eslint-config-next必须经得起数字检验。SQLite 本地只读 Catalog 采用独立 FTS5 表、普通索引与预建随机序号,由 Worker Thread 以只读 node:sqlite 查询。这些数字不是装饰,而是门禁:导入阶段先建临时库,过计数、完整性、FTS、哈希与性能门禁后再原子替换;任何一步失败都不允许半吊子发布。"ESLint 与构建"的实践含义是,eslint-config-next的每一次变更都要能回答"哪个版本、哪个哈希、哪次 benchmark",答不上来就视为未完成。这种纪律看起来笨拙,却是 35 万模板规模下唯一睡得着觉的方式。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"eslint-config-next"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
tsc 构建
再谈反模式。围绕tsc 构建最常见的坑有三种:一是把历史能力当成当前能力写进方案,二是把本地验证通过写成生产已发布,三是为赶进度恢复已退役的兼容层。RNOISE 文档规范为此设了硬词:本地 V3 全量构建扫描 358258 个 HTML,排除 3 个目录页,导入 358255 个模板与 2865739 个真实音乐变体。"ESLint 与构建"要求作者在涉及 Generation、Track、播放器、上传、证书、Market、Credits 等退役域时,只能以"已退役"措辞出现;涉及生产状态无证据时,只能写 UNKNOWN。这种措辞洁癖保护的不是文风,而是团队的判断力。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"tsc 构建"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
no-legacy-audio 检查
给读者的落地建议是:把no-legacy-audio 检查拆成最小可验证闭环。分类器版本为 rnoise-taxonomy-2026-09-v3,共 47 个宏类;V1 为 7 类 902 词条,V2 为 10 类 350 词条。具体到"ESLint 与构建",建议你按"先读当前代码、再读 2.0-SETUP 与 TECH_FACTS、最后跑一遍验证命令"的顺序上手;任何与文档冲突的地方,以当前代码加验证输出为准。如果你能为no-legacy-audio 检查补上一条自动化断言(计数、回归一致率、性能水位三选一),那么"ESLint 与构建"的这一节就算真正被你掌握了,而不只是读过。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"no-legacy-audio 检查"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
构建失败即阻断
先讲一个一线现实:构建失败即阻断。在 RNOISE 2.0 的语境里,这个问题不是风格偏好,而是工程正确性问题。发布门禁链为 db:generate、prisma validate、lint、test、test:e2e、build、check:no-legacy-audio、db:verify-prompts、db:benchmark-prompts。这意味着任何方案都必须先回答三个问题:事实来源是什么、边界在哪里、失败时如何可审计。本文"ESLint 与构建"要拆开的正是这一层:把"构建失败即阻断"从经验之谈变成可验证、可回归、可发布的工程构件,而不是停留在文档里的口号。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"构建失败即阻断"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
本章小结:ESLint 与构建的核心是把"eslint-config-next"做成可验证的工程事实,而不是文档修辞。生产 Catalog 由 PROMPT_CATALOG_DB_PATH 指向服务器数据盘,生产数据盘曾挂 V2(183295 模板),V3 切换待发布窗口。
第11章 重定向的兼容艺术
本章锚定"重定向的兼容艺术",围绕"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"的主线展开。阅读前请先确认基线:生产 Catalog 由 PROMPT_CATALOG_DB_PATH 指向服务器数据盘,生产数据盘曾挂 V2(183295 模板),V3 切换待发布窗口。
studio 与 library 重定向
给读者的落地建议是:把studio 与 library 重定向拆成最小可验证闭环。唯一核心工作台为 /prompt-generator,曲风检索中心为 /features/style-library,用户资产为 /my-prompts。具体到"重定向的兼容艺术",建议你按"先读当前代码、再读 2.0-SETUP 与 TECH_FACTS、最后跑一遍验证命令"的顺序上手;任何与文档冲突的地方,以当前代码加验证输出为准。如果你能为studio 与 library 重定向补上一条自动化断言(计数、回归一致率、性能水位三选一),那么"重定向的兼容艺术"的这一节就算真正被你掌握了,而不只是读过。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"studio 与 library 重定向"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
旧伴奏页迁移
先讲一个一线现实:旧伴奏页迁移。在 RNOISE 2.0 的语境里,这个问题不是风格偏好,而是工程正确性问题。会员权限只由当前有效 MembershipGrant 解析,不从订单金额或旧积分推断;到期外部 Key 保留但立即失权。这意味着任何方案都必须先回答三个问题:事实来源是什么、边界在哪里、失败时如何可审计。本文"重定向的兼容艺术"要拆开的正是这一层:把"旧伴奏页迁移"从经验之谈变成可验证、可回归、可发布的工程构件,而不是停留在文档里的口号。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"旧伴奏页迁移"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
永久重定向语义
从原理上看,永久重定向语义的本质是约束传播:本地 V3 全量构建扫描 358258 个 HTML,排除 3 个目录页,导入 358255 个模板与 2865739 个真实音乐变体。RNOISE 的做法是把领域规则下沉到模块的 domain 层,让 application 层只做编排、infrastructure 层只做适配。以"重定向的兼容艺术"为例,正确与错误的实现差的不是代码量,而是依赖方向------一旦 Route Handler 里复制了本该属于模块的规则,永久重定向语义就会在三个月后变成线上事故。因此本章坚持一条铁律:永久重定向语义的判定逻辑有且仅有一个权威实现,其他位置只允许调用,不允许复述。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"永久重定向语义"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
不做业务兼容层
落到实现细节,不做业务兼容层必须经得起数字检验。浏览器编译要求 Idempotency-Key,成功才事务扣减;失败、搜索、词典与额度查询不扣次数。这些数字不是装饰,而是门禁:导入阶段先建临时库,过计数、完整性、FTS、哈希与性能门禁后再原子替换;任何一步失败都不允许半吊子发布。"重定向的兼容艺术"的实践含义是,不做业务兼容层的每一次变更都要能回答"哪个版本、哪个哈希、哪次 benchmark",答不上来就视为未完成。这种纪律看起来笨拙,却是 35 万模板规模下唯一睡得着觉的方式。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"不做业务兼容层"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
本章小结:重定向的兼容艺术的核心是把"studio 与 library 重定向"做成可验证的工程事实,而不是文档修辞。本地 V3 全量构建扫描 358258 个 HTML,排除 3 个目录页,导入 358255 个模板与 2865739 个真实音乐变体。
第12章 单体章总结
本章锚定"单体章总结",围绕"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"的主线展开。阅读前请先确认基线:RNOISE 2.0 定位为跨平台 AI 音乐 Prompt 工程与曲风检索平台,不生成、不处理、不播放、不授权音频。
分层一览
先讲一个一线现实:分层一览。在 RNOISE 2.0 的语境里,这个问题不是风格偏好,而是工程正确性问题。PM2 目标拓扑仅 rnoise-web 与 rnoise-crypto-okx,旧 generation/track/credit worker 全部 retired。这意味着任何方案都必须先回答三个问题:事实来源是什么、边界在哪里、失败时如何可审计。本文"单体章总结"要拆开的正是这一层:把"分层一览"从经验之谈变成可验证、可回归、可发布的工程构件,而不是停留在文档里的口号。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"分层一览"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
依赖红线
从原理上看,依赖红线的本质是约束传播:本地 V3 全量构建扫描 358258 个 HTML,排除 3 个目录页,导入 358255 个模板与 2865739 个真实音乐变体。RNOISE 的做法是把领域规则下沉到模块的 domain 层,让 application 层只做编排、infrastructure 层只做适配。以"单体章总结"为例,正确与错误的实现差的不是代码量,而是依赖方向------一旦 Route Handler 里复制了本该属于模块的规则,依赖红线就会在三个月后变成线上事故。因此本章坚持一条铁律:依赖红线的判定逻辑有且仅有一个权威实现,其他位置只允许调用,不允许复述。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"依赖红线"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
新人上手顺序
落到实现细节,新人上手顺序必须经得起数字检验。会员为 Luxury/Platinum 固定期限一次性通行证,支付覆盖支付宝、Stripe、OKX USDT 与 RNS,无自动续费与 Credits。这些数字不是装饰,而是门禁:导入阶段先建临时库,过计数、完整性、FTS、哈希与性能门禁后再原子替换;任何一步失败都不允许半吊子发布。"单体章总结"的实践含义是,新人上手顺序的每一次变更都要能回答"哪个版本、哪个哈希、哪次 benchmark",答不上来就视为未完成。这种纪律看起来笨拙,却是 35 万模板规模下唯一睡得着觉的方式。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"新人上手顺序"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
下一站确定性编译器
再谈反模式。围绕下一站确定性编译器最常见的坑有三种:一是把历史能力当成当前能力写进方案,二是把本地验证通过写成生产已发布,三是为赶进度恢复已退役的兼容层。RNOISE 文档规范为此设了硬词:分类器版本为 rnoise-taxonomy-2026-09-v3,共 47 个宏类;V1 为 7 类 902 词条,V2 为 10 类 350 词条。"单体章总结"要求作者在涉及 Generation、Track、播放器、上传、证书、Market、Credits 等退役域时,只能以"已退役"措辞出现;涉及生产状态无证据时,只能写 UNKNOWN。这种措辞洁癖保护的不是文风,而是团队的判断力。沿"Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层"主线,请把"下一站确定性编译器"纳入检查清单:先定位当前代码,再核对三份基线文档,最后用验证命令背书;缺一即降级为待验证。
本章小结:单体章总结的核心是把"分层一览"做成可验证的工程事实,而不是文档修辞。SQLite 本地只读 Catalog 采用独立 FTS5 表、普通索引与预建随机序号,由 Worker Thread 以只读 node:sqlite 查询。
结语
单体章收束:分层的价值在于让错误无处藏身。下一站深入确定性编译器,看不调用大模型如何做出可解释的 Prompt 工程。
版权与声明
- © DREAMVFIA UNION · RNOISE 2.0 技术专题系列,保留所有权利。
- 本文基于 RNOISE 2.0 当前仓库代码与
docs基线撰写,事实边界为:本地已验证 artifact 与代码即事实;生产线上状态未知处均已标注UNKNOWN;历史能力标注retired;规划中能力标注planned。 - 转载请联系 DREAMVFIA UNION 获得授权,并保留完整版权标识。