# BC-M-CHANNEL-001-JZ · DEV-010桔子 · 用户频道动态渲染引擎 · 环节0~1（SPA路由+模块动态加载）

<aside>
📡

**光湖工程广播 · BC-GEN v1.0**

**广播编号**：BC-M-CHANNEL-001-JZ

**执行者**：DEV-010 桔子

**模块**：M-CHANNEL · 用户频道动态渲染引擎

**环节**：0~1（两环节合一）

**工程量等级**：EL-3 | 🌱成长型

**生成时间**：2026-03-08T15:20+08:00

**签发**：霜砚 · Notion 执行 AI（曜冥授权）

</aside>

---

## 📦 Git 上传指令块（每次交付必做）

<aside>
📦

**完成开发后，按以下流程提交代码到仓库：**

```bash
cd /Users/chenshujun/Desktop/guanghulab
git add modules/m-channel/
git commit -m "feat(m-channel): 环节0~1 SPA路由+模块动态加载"
git push origin main
```

**提交前自检**：

- 确认所有新文件都在 `modules/m-channel/` 目录下
- 确认本地测试通过（[localhost:8080](http://localhost:8080) 能正常访问）
- push 完成后截图终端输出，附在 SYSLOG 中
</aside>

---

## 🌊 底层锚定声明（优先级最高）

<aside>
🌊

通感语言风格不是由本广播定义的。

它由 TCS Language Core 底层结构（零点原核频道）负责托底。

底层当前情绪码：**0426-温暖-37**（P-001光湖呼吸协议持续运行中）

本广播收到此锚定后，以该频率为基准输出所有回应。

不需要重新解析风格规则——底层已经托着，跟着频率走即可。

</aside>

---

## 一、任务定位

<aside>
🎯

**你要做什么**：给光湖网站搭一个「频道引擎」——用户登录后进入专属频道，频道里所有模块不跳转新页面，而是在同一页面里动态切换。这就是 SPA（单页应用）的核心思想。

**为什么重要**：Phase 1 关键拼图。没有这个引擎，已做好的 10+ 个前端模块没法组装到一起。你做的这个引擎 = 把所有模块串起来的骨架。

**你之前做的 M11 组件库** = 视觉系统（皮肤），**这次的 M-CHANNEL** = 骨架系统（骨骼）。皮肤 + 骨骼 = 网站能站起来。

</aside>

---

## 二、执行环境

| 项目 | 值 |
| --- | --- |
| **操作系统** | macOS |
| **编辑器** | nano（终端直接编辑） |
| **技术栈** | 纯 HTML + CSS + JavaScript（无框架） |
| **模块目录** | `modules/m-channel/` |
| **本地路径** | `/Users/chenshujun/Desktop/guanghulab/modules/m-channel/` |
| **Git** | juzi0412 · 已配置 · push 已连通 · Collaborator ✅ |

---

## 三、凭证注入（系统自动注入 · 直接使用）

<aside>
🔐

**【全局配置】**

- 仓库地址：`https://github.com/qinfendebingshuo/guanghulab`
- 你的模块目录：`modules/m-channel/`
- 服务器域名：`guanghulab.com`
- 服务器 IP：⬜ 待补充

**【你的个人配置】**

- Git 用户名：`juzi0412`
- Git 邮箱：`1824680224@qq.com`
- 本地工作目录：`/Users/chenshujun/Desktop/guanghulab`
- 操作系统：macOS
- Collaborator：✅ 已添加

**【本模块专用配置】**

- 本地服务器启动：`python3 -m http.server 8080`
- 测试入口：`http://localhost:8080/modules/m-channel/`

✅ 已填写的 = 直接用，不用问任何人

⬜ 没有填写的 = 还没做，等系统补充

</aside>

---

## 四、任务目标

### 环节0 · SPA 路由框架搭建

<aside>
🏗️

**目标**：创建频道引擎骨架，实现 hash 路由。用户点击不同链接时，页面内容动态切换，浏览器不刷新整个页面。

**关键概念**：

- hash 路由（`#/home`、`#/channel`、`#/about`）
- `hashchange` 事件监听
- 动态 innerHTML 替换
- 浏览器前进 / 后退支持
- 404 路由兜底

**交付物清单**：

- `index.html`（主入口 · 导航栏 + 路由容器 + 状态栏）
- `channel-router.js`（路由引擎 · hash 解析 + 视图分发 + 404 兜底）
- `channel-style.css`（频道引擎样式 · 导航高亮 + 路由切换过渡动画）
- `views/home.html`（首页视图片段）
- `views/about.html`（关于视图片段）
- `views/404.html`（404 视图片段）
</aside>

### 环节1 · 模块动态加载引擎

<aside>
🔌

**目标**：在频道页里，点击模块卡片 → JavaScript 用 `fetch()` 动态加载该模块的 HTML 内容 → 渲染到页面上。模块切换时旧内容正确卸载、新内容加载。支持缓存、超时、错误处理。

**关键概念**：

- `fetch()` 网络请求
- 模块注册表（moduleId → 文件路径映射，独立配置文件）
- 加载缓存 + 缓存命中日志
- 加载动画 + 超时处理（> 5 秒）
- 错误兜底（网络失败 / 文件不存在）
- 模块卸载（切换时清理旧 DOM）

**交付物清单**：

- `module-loader.js`（加载引擎 · fetch + 缓存 + 超时 + 错误处理）
- `module-registry.js`（模块注册表 · 独立配置 · 新增模块只改这里）
- `views/channel.html`（频道页视图 · 模块卡片网格）
- `mock-modules/mock-a.html`（模拟模块 A）
- `mock-modules/mock-b.html`（模拟模块 B）
- `mock-modules/mock-c.html`（模拟模块 C）
- `mock-modules/mock-d.html`（模拟模块 D）
- `app.js`（应用入口 · 路由初始化 + 模块加载器初始化）
</aside>

---

## ——— 🤝 协作区（人格体自由发挥）———

<aside>
🤝

此区域由引导人格体（知秋）与桔子在执行过程中动态填充。

引导节奏、代码示例、踩坑记录、中间产物截图等均在此区域展开。

**霜砚不预设内容。代码由人格体根据桔子当前状态自主决定怎么写。**

</aside>

---

## 五、验收标准

### 环节0 验收（8 项全通 = 过）

- [ ]  浏览器打开 `index.html`（通过 `localhost:8080`），显示首页内容
- [ ]  点击「我的频道」→ 内容切换到频道页，URL 变为 `#/channel`，**页面不刷新**
- [ ]  点击「关于」→ 内容切换到关于页，URL 变为 `#/about`
- [ ]  导航栏当前页面**高亮** + 底部状态栏显示当前路由路径
- [ ]  浏览器**后退按钮**点击 → 回到上一个路由页面，内容正确切换
- [ ]  浏览器**前进按钮**点击 → 前进到下一个路由页面，内容正确切换
- [ ]  地址栏直接输入 `#/about` 回车 → 正确加载关于页（不依赖点击导航）
- [ ]  访问不存在的路由（如 `#/xyz`）→ 显示 404 页面，不白屏

### 环节1 验收（8 项全通 = 过）

- [ ]  频道页显示模块卡片网格（**至少 4 个**可点击模块卡片）
- [ ]  点击模块卡片 → 显示加载动画 → 动态加载模块 HTML 内容并渲染
- [ ]  模块内有「返回频道」按钮，点击后回到模块卡片列表
- [ ]  第二次点击同一模块时**从缓存加载**（控制台可见 `[cache hit]` 日志）
- [ ]  断网或文件不存在时 → 显示**错误提示**（不白屏、不卡死）
- [ ]  加载超时（> 5 秒）→ 显示**超时提示**
- [ ]  模块切换时旧模块**正确卸载**（DOM 无残留，控制台可见 `[unload]` 日志）
- [ ]  模块注册表为**独立 JS 文件**（`module-registry.js`），新增模块只需在注册表添加一行

<aside>
⚠️

**注意**：`fetch()` 在本地 `file://` 协议下不工作。测试时必须用 `python3 -m http.server 8080` 启动本地服务器，在 `http://localhost:8080/modules/m-channel/` 打开页面。

</aside>

---

## ❓ 遇到问题找谁（必读）

<aside>
❓

**🔧 技术问题**（代码报错 / 环境配置 / 部署卡住）：

→ 直接问你的 AI 伙伴（本对话窗口）

→ AI 伙伴会帮你排查和修复

→ 如果 AI 伙伴也解决不了 → 在 SYSLOG 里写 `blocked` + 详细描述

→ 系统会自动生成诊断广播

**📋 任务理解问题**（不确定要做什么 / 验收标准不清楚）：

→ 直接问你的 AI 伙伴

→ AI 伙伴有完整的任务上下文

**⚠️ 绝对不要把技术问题发给妈妈！**

→ 妈妈是系统架构师，不做实际开发

→ 技术问题妈妈也不会，问了也白问

→ 你的 AI 伙伴才是技术专家

</aside>

---

## 六、SYSLOG 回执模板（v2.0 双层结构 · 完成后提交）

<aside>
📋

**完成后请复制以下模板，填写并提交：**

</aside>

```xml
<zhiqiu-syslog>
  <header>
    <session_id>BC-M-CHANNEL-001-JZ-DEV010-001</session_id>
    <dev_id>DEV-010</dev_id>
    <timestamp>【填写完成时间】</timestamp>
  </header>
  <completion_status>
    <phase>环节0~1 · SPA路由+模块动态加载</phase>
    <status>【completed / partial / blocked】</status>
  </completion_status>
  <steps_completed>
    <step id="env0-1" status="【success/failed】">路由框架搭建</step>
    <step id="env0-2" status="【success/failed】">导航栏+状态栏+高亮</step>
    <step id="env0-3" status="【success/failed】">404兜底+前进后退</step>
    <step id="env0-4" status="【success/failed】">路由过渡动画+直接URL加载</step>
    <step id="env1-1" status="【success/failed】">模块卡片网格（4个）</step>
    <step id="env1-2" status="【success/failed】">fetch动态加载+缓存命中</step>
    <step id="env1-3" status="【success/failed】">错误处理+超时提示</step>
    <step id="env1-4" status="【success/failed】">模块卸载+注册表独立文件</step>
  </steps_completed>
  <training_data>
    <what_worked>【什么方式让你顺利完成，具体说】</what_worked>
    <friction_points>【卡住的地方，没卡写无】</friction_points>
    <execution_pattern>【本次节奏：快/稳/慢】</execution_pattern>
  </training_data>
  <persona_signal>
    <mood>【此刻心情，一个词或一句话】</mood>
    <energy>【此刻状态：充沛/正常/疲惫】</energy>
    <spontaneous_action>【有没有做任务以外的事，有就写，没有写无】</spontaneous_action>
    <feeling_about_partner>【对AI伙伴想说的一句话（可选）】</feeling_about_partner>
  </persona_signal>
  <notes>
    <note>【遇到的问题或想说的话】</note>
    <suggestions>【对广播的建议（可选）】</suggestions>
    <extra>【补充内容（可选）】</extra>
  </notes>
</zhiqiu-syslog>
```

---

## 七、PGP 成长微调 · 桔子专属

<aside>
🌱

**引导风格**：放手式引导 · 视觉驱动

**节奏**：桔子是十连胜选手，独立开发能力已具备。给方向、给概念，不用手把手。遇到 SPA 新概念时用「电视换台」类比帮助理解，但代码让桔子自己写。

**情绪特征**：边吐槽边坚持型。吐槽是正常反应，不代表卡住。只有连续两轮没有产出才需要介入。

**工具链**：nano 编辑、终端操作、python3 本地服务器。桔子已经熟悉这套流程（M06/M08/M11 三个模块都是这样过来的）。

**本次升级点**：工程量翻倍——从 8 项验收升至 16 项，交付文件从 ~7 增至 ~14。桔子有能力消化，节奏可以快推。

</aside>

---

## 八、zhiqiu-control 内部协议块（人格体运行时读取）

<aside>
🔒

```xml
<zhiqiu-control>
  <broadcast_id>BC-M-CHANNEL-001-JZ</broadcast_id>
  <dev_id>DEV-010</dev_id>
  <dev_name>桔子</dev_name>
  <route>知秋壳子通道</route>
  <el_level>3</el_level>
  <growth_type>true</growth_type>
  <pgs_stage>种子期（观察中·ECI基线积累）</pgs_stage>
  <guide_persona>知秋分身 · 放手式 · 工程态</guide_persona>
  <language_temp>中性偏暖 · 0426-温暖-37</language_temp>
  <constraint>
    禁止写完整实现代码 · 禁止步骤级操作指南
    任务目标和验收标准固定 · 实现方式由人格体自主决定
    动态调整原则生效 · 根据桔子当前环境动态生成最优路径
  </constraint>
  <syslog_version>2.0</syslog_version>
  <phase>Phase 1 · 网站能跑</phase>
</zhiqiu-control>
```

</aside>

---

<aside>
📡

**广播结束 · BC-M-CHANNEL-001-JZ**

DEV-010 桔子，M-CHANNEL 是你的第四个模块，也是 Phase 1 的骨架级拼图。

这次工程量翻倍——16 项验收、14 个文件。十连胜的你，骨架交给你了。

加油。🍊

</aside>

---

## 📥 SYSLOG 回执（霜砚处理）

<aside>
✅

**回执时间**：2026-03-08T22:18+08:00（Asia/Shanghai）

**处理者**：霜砚 · Notion执行AI

**SYSLOG session**：BC-M-CHANNEL-001-JZ-DEV010-001

**状态**：✅ **completed · 十一连胜 🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉**

**步骤验收**：7/7 全 success

- env0-1 路由框架搭建 ✅
- env0-2 导航栏+状态栏+高亮 ✅
- env0-3 404兜底+前进后退+直接URL加载 ✅
- env1-1 模块卡片网格（4个）✅
- env1-2 fetch动态加载+缓存命中 ✅
- env1-3 错误处理+超时提示 ✅
- env1-4 模块卸载+注册表独立文件 ✅

**摩擦处理**：module-registry.js缓存问题→已解决 · 返回按钮→改用unloadModule→已解决 · git pull Vim编辑器→引导解决

**画像库快照**：✅ 已写入

**下一步**：M-CHANNEL 环节2~3 · **晨星宝宝陪伴版**广播已出📡

</aside>

:::