生活分享
先读懂一个既有专案
用唯读流程找到启动点、资料流与测试,产生有档案依据的专案地图。
阅读时间约 14 分钟 · 操作 25 分钟

返回 Codex 教学总目录Codex 学习中心:完整教程目录从安装、第一个任务到 MD 规则与进阶集成,规划 60 篇 Codex 教程、十个单元。按程度、平台、需求或命令搜索下一篇;尚未公开的教程会标示状态,方便安排学习路线。阅读全文
目标与准备
开始前先完成第一个小专案完成第一个小项目使用 Small Steps 待办网站的独立副本,修改主标题与背景色。辨识五个练习文件的用途,比对修改前后差异、核心测试与两种窗口宽度,确认原有功能及数据保留。阅读全文。读懂专案不是把所有档案逐行翻译,而是回答「入口在哪、动作经过哪里、资料存在哪、什么证据能确认」。我们先固定一个小网站,再用同一个使用者动作追查,避免只得到一张看似完整却不能指导修改的档名清单。
步骤 1:确认版本、入口与基准
将练习 ZIP 的 expected 中五个档案复制到新的 codex-read-lab,保留原版。这次要读正确版本,不用 start 或 broken。用编辑器开根目录;PowerShell 执行 Get-Location,macOS/Linux 用 pwd,确认直接看得到 index.html、style.css、app.js、core.mjs 与 core.test.mjs。不要为了让专案看起来熟悉就先新增 package.json。
node --version
node --test core.test.mjs
教材预期三项测试通过;先记录实际结果,再请 Codex 做唯读调查。若起点失败,保留错误与版本资讯,不把不明故障夹在「理解架构」中顺手修掉。正式专案若已有未提交修改,先记录哪些是原有工作,读程式阶段不使用全目录重设或自动格式化,避免把观察变成修改。
桌面版先加入 codex-read-lab 为本机专案,再在此专案建立新任务;CLI 从刚核对过的练习终端机执行 codex。确认任务工作路径后,将下列要求送到 Codex 输入框,不是在系统终端机执行。
Read this codex-read-lab without editing any files. Identify the actual entry point, file responsibilities and commands available from the files, not from framework assumptions.
Trace adding a task, marking it complete, changing the filter and reloading the page. Name the relevant functions and DOM elements.
Separate observed code from inferred intent. List what the existing tests cover and what still needs browser verification. If evidence is missing, say so instead of inventing a backend or build step.
步骤 2:建立有证据的档案地图
预期会找到以下分工。看表时同时打开对应档案,确认不是依副档名猜测:index.html 实际载入 style.css 与模组 app.js;app.js 汇入 core.mjs 的功能。core.test.mjs 使用 Node 内建测试,不靠 npm script。本教材没有后端 API、资料库伺服器或 bundler,若回答有这些项目,请它指出证据再修正地图。
| 档案 | 角色 | 可核对的证据 |
|---|---|---|
| index.html | 页面入口与可操作元素 | task-form、task-title、filter、tasks |
| style.css | 版面、外观、焦点样式 | 表单与清单样式规则 |
| app.js | DOM 事件、状态、保存与渲染 | submit、change、persist、render |
| core.mjs | 纯资料操作与格式验证 | addTask、visibleTasks、decodeTasks |
| core.test.mjs | Node 功能测试 | 三个 test 区块及 assertions |
再请它对「新增 Read」列出完整顺序:表单 submit 防止预设送出,addTask 检查文字并产生新阵列,tasks 接住结果,persist 将编码后资料写入 localStorage,输入框清空,render 更新清单,最后输入框取得焦点。每个名称都能在 app.js 或 core.mjs 找到,先确认顺序与资料型态,再谈要加什么功能。
这里特别容易混淆「资料」与「画面」:filter.value 只决定 render 显示哪些任务,不应从 tasks 删除被隐藏的项目;完成勾选透过 task.id 找对任务,不依目前画面第几列猜测。若未先理解,后续修 Completed 可能误把未完成任务从储存资料删掉,测到画面变少却破坏功能。
步骤 3:追查保存与错误分支
搜寻 app.js 的 mokaair-codex-todo-v1,可看到本教材使用的 localStorage 键。启动时 decodeTasks 读取 JSON 并检查 version 与栏位;保存时 encodeTasks 包成版本文件。这代表换浏览器来源或储存被封锁会影响资料,但不是云端帐号同步。请 Codex 说明 catch 分支会如何显示暂存状态,不能只解释成功路径。
再读测试中的第三个案例,确认坏 JSON、错误版本、重复识别码及错误栏位会被拒绝。这能证明核心解码规则,但不能单靠此测试证明浏览器真的显示错误讯息、键盘焦点合理或重新整理后仍保存。把「测过资料函式」与「测过使用者操作」分开记录,会让后续测试与审查测试、Code Review 与 PR测试确认程式在指定条件的行为,Code Review 检查变更是否有遗漏或风险,PR 则让人查看并讨论要合并的差异。三者互补;通过测试不等于审查通过,开 PR 也不是已合并。阅读全文更容易判读。
步骤 4:用画面核对理解并留下地图
从 codex-read-lab 启动第一个小专案教过的 Python 伺服器:Windows 用下面第一段,macOS/Linux 用第二段,两者只选一个。浏览器开 http://127.0.0.1:4173;若埠被自己的旧练习占用,先回那个伺服器终端机停止后再启动,不能直接沿用不明资料夹的画面。另开终端机执行测试。
py -m http.server 4173 --bind 127.0.0.1
python3 -m http.server 4173 --bind 127.0.0.1
先保留仍需要的旧练习纪录,再于 About this exercise 使用 Reset practice data。选 All tasks、确认空清单后,新增 Read 与 Build,只勾选 Read。All 应显示两项,Active 只有 Build,Completed 只有 Read;切回 All 重新整理,确认资料仍在。这是核心资料与画面的串接验证,未涵盖每个错误分支。完成后只清本例资料,不清整个浏览器。
最后用编辑器另存 project-map.md,把以下地图作为骨架,填入你真正执行的测试与尚未验证的项目。这是新增说明文件,不需要修改五个原始程式。若请 Codex 写入,明确限定只能新增此文件,并要求完成后核对原始五档没有差异;前面的唯读调查要求也要明确结束,避免以为已授权任何重构。
# Small Steps project map
## Entry and runtime
index.html loads style.css and app.js as a browser module.
app.js imports core.mjs. Local HTTP preview; no dependency installation.
## Flow
submit -> addTask -> tasks -> persist -> input clear -> render -> input focus
checkbox change -> toggleTask by ID -> persist -> render with focus restoration
filter change -> render -> visibleTasks; hidden tasks stay in tasks
reload -> localStorage -> decodeTasks -> tasks -> render
## Storage
Key: mokaair-codex-todo-v1. Versioned JSON; invalid data is rejected.
Browser storage failures leave a temporary session and a visible message.
## Verification
node --test core.test.mjs: fill actual result and date.
Browser filters, reload, keyboard and storage errors: record separately.
Do not claim checks you did not perform.
## Change boundaries
Filter logic: core.mjs visibleTasks.
DOM and storage orchestration: app.js.
Layout and controls: style.css and index.html.
Unknowns and next task: fill from evidence.
读懂失败路径:每个判断都指出依据
在 app.js 找 submit 事件,再对照 core.mjs 的 addTask。只输入空白时,trim 后长度为 0,addTask 会抛出 title-length;事件的 catch 显示讯息并 return,因此这次不会执行后面的 persist、清空输入或 render。这是阅读程式得到的路径,不能填成已亲自按过按钮。以相同方法追一次 localStorage 写入失败,确认它会设 storageAvailable 为 false,后续资料仍可在这个分页暂存,却不保证重载后保留。
再检查两个容易写错的导览结论:「切换筛选会保存资料」与「三项测试通过就证明按钮正常」。前者不符 filter 的 change 只呼叫 render;后者把核心函式测试扩张为 DOM 实测。将下面段落补进 project-map.md,并把尚未实测的栏位保留 NOT RUN。若找不到所引函式,先核对是否开了 expected 副本,再修正导览,仍不更动五个程式档。
## Evidence and limits
- Blank input: core.mjs/addTask throws; app.js/submit catches and returns before persist.
- Filter change: app.js connects change to render; that handler does not persist.
- Count: app.js/render counts all tasks, not only the displayed subset.
- Storage failure: app.js/persist disables further writes after a failed setItem.
- Automated baseline: node --test core.test.mjs; record actual exit and totals.
- Browser submit/filter/reload checks: NOT RUN until performed.
常见误判、停止与验收
Codex 说需要安装套件时,要求指出哪个档案宣告相依;只列目录却不能说明资料流,就指定追查一次 submit;把测试全过等同画面全正常,就要求列出未测边界。若找不到档案先核对根目录,不在整台电脑任意搜寻。同名函式出现在其他副本时,要用实际路径辨认,避免读 expected 却把结论套到 broken。
能依地图指出新增、勾选、筛选及重新整理各经过哪个函式,并说明至少一项仍未验证的行为,才算读懂这次范围。最后在伺服器终端机 Ctrl+C 停止,保留地图并核对五档与原始 expected 一致。若意外修改,只从保留原版还原那个档案,别重设整个专案。图中 1 是基准,2 是追查,3 是用证据核对;接下来才能实作功能实作功能:完成待办筛选从 start 材料补上 Active/Completed 筛选,保留资料格式并用正常与边界案例验收。阅读全文。
返回 Codex 教学总目录Codex 学习中心:完整教程目录从安装、第一个任务到 MD 规则与进阶集成,规划 60 篇 Codex 教程、十个单元。按程度、平台、需求或命令搜索下一篇;尚未公开的教程会标示状态,方便安排学习路线。阅读全文
阅读完整文字说明
Three numbered stages: identify the starting point, perform the exercise, and verify the result. Original illustration, not a product screenshot.
同主题延伸阅读
生活分享
Codex 学习中心:完整教程目录
从安装、第一个任务到 MD 规则与进阶集成,规划 60 篇 Codex 教程、十个单元。按程度、平台、需求或命令搜索下一篇;尚未公开的教程会标示状态,方便安排学习路线。
生活分享
Worktree 与多任务隔离
Worktree 让同一个 Git 程式库有不同的工作目录,各自承接不同分支。它适合让两项工作分开改档,但资料库、连接埠与外部服务仍可能共用,不能把档案隔离当成所有资源隔离。
生活分享
实战:制作小网站
从 brief.md 规划并制作 Small Steps 待办网站,完成新增、完成、删除、筛选与本机资料保存。将 HTML、CSS、资料函式、画面事件与测试分开,以 Node 测试和浏览器操作验收,并留下可重新启动与还原的交接纪录。
生活分享
用量与效率:减少重工
记录任务条件、模型选项、时间与成果,找出能减少无效重试和过多上下文的调整。
引用本文的文章
最新旅游情报攻略

攻略东京
东京住哪一区:新宿、上野、东京站、涩谷、浅草、池袋、银座七区比较,机场交通、住宿税、行李寄送一次看
东京住哪一区?用同一套标准比较新宿、上野、东京站、涩谷、浅草、池袋、银座七个区域:从成田、羽田机场怎么过来、有哪些线路、周边有什么、街区氛围、适合谁。附比较表与山手线示意图,以及 2026 年 9 月核实的东京都住宿税(2027 年 4 月改为 3%)和机场宅急便寄送行李的规则。
- 预算
- 酒店

攻略东京
东京交通票券怎么选:Suica/Welcome Suica、Tokyo Subway Ticket、JR Pass 值不值得买
第一次去东京,每人先用一张 IC 卡按次付费(Welcome Suica 免押金、有效期 28 天)。一天搭四趟以上地铁,再加买 2,000 日元的 Tokyo Subway Ticket 72 小时券;只玩东京、不去关西,买 JR Pass 一定不划算。用决策图比较 TOURIST PASMO、iPhone 里的 Suica、东京 Metro 一日券能搭什么、不能搭什么;价格于 2026 年 9 月核实。
- 交通
- 预算

攻略东京
东京迪士尼乐园、海洋攻略:票价、梦幻泉乡 Fantasy Springs、尊享卡 DPA 与预约等候卡怎么用,第一次去选哪个园区
东京迪士尼一日护照采用浮动票价,2026 年 9 月平日大多为 9,900 日元、周末为 10,900 日元,官网每天 14:00 开售两个月后同一天的门票;免费的优先通行卡已不在官网服务清单,缩短排队时间只剩付费的迪士尼尊享卡(每人每次 1,000 至 3,500 日元)。另有运营时间与 25 周年活动、预约等候卡与报名体验、梦幻泉乡如何进入,以及第一次去选乐园还是海洋;2026 年 9 月通过东京迪士尼度假区官网核实。
- 行程范例
- 亲子