Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ project.private.config.json
# Local agent/tooling state
.agents/
.claude/
.understand-anything/
skills-lock.json

# Runtime logs
Expand Down
5 changes: 2 additions & 3 deletions DESIGN_SYSTEM.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,12 +55,11 @@ The project currently has no frontend build step and no mini program npm depende
## Component Patterns

- `BottomAction`: fixed above the custom tab bar, opaque, with one short title, one helper line, and one primary action. Use it for page-level submit actions so primary buttons do not hide behind the tab bar.
- `FormSection`: grouped form area with a section title, helper note, and related fields. Use it instead of one long undifferentiated form card.
- `FormSection`: grouped form area with a section title and related fields. Helper notes are optional and should be omitted when field labels and placeholders already explain the task.
- `CategoryOption`: two-column direct-choice buttons for small option sets such as task categories. Prefer this over a picker when the choices are few and user-facing.
- `DrawerCounter`: compact number block in bottom drawers to make counts scannable without adding another sentence.
- `SignalPill`: small metric tile for repeated task-card signals such as confirmation count, stale count, and remaining time.
- `PublishReadiness`: compact checklist near the top of the publish form. It should show identity, content, category, and location completion so the fixed submit action can explain or trigger the next required step.
- `LocationCheck`: explicit location confirmation block in the publish form. Use it when location is required for correctness; show idle, loading, ready, and failed states without moving the submit button, and make retry language non-technical.
- Publish readiness should be expressed through `LocationCheck` and the fixed `BottomAction`; avoid adding a separate checklist when the bottom action can name the next required step.
- `TrustInsight`: detail-page section placed before trust actions. Summarize confirmations, stale reports, reports, and comment count into one cautious status sentence, then show compact segmented metrics and the next sensible action. Use it to explain the counts without implying absolute trust.
- `MapListEntry`: keep the collapsed map list entry as a compact top-right `cover-view` button with the label and count on one centered text line, such as "列表 6". Do not split the label and count into separate baseline-sensitive nodes, and do not use a bottom dock for this entry.
- `MapToolRow`: location and discover controls sit together at the lower-right of the map above the custom tab bar. Keep them as `cover-view` controls with solid backgrounds, and keep selected task cards above this tool row so icons remain tappable.
Expand Down
2 changes: 2 additions & 0 deletions harness/candidate-publish-trust-report.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

日期:2026-06-13

说明:这是历史候选分支报告,不是当前发布页手测清单;当前 UI 已移除单独的发布准备度清单卡片,发布状态由定位块和底部主按钮承载。

分支:`codex/iter-candidate-publish-trust`

基础:`codex/iter-publish-flow` HEAD `2187007`
Expand Down
25 changes: 12 additions & 13 deletions harness/check-trust-insight.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,13 @@ function insight(overrides = {}, commentCount = 0) {
}, commentCount);
}

function assertSignalNotesAreShort(result) {
function assertVisibleSignals(result) {
assert.equal(result.signals.length, 4);
for (const signal of result.signals) {
assert(
signal.note.length <= 6,
`${signal.key} note is too long for the four-metric row: ${signal.note}`
);
assert.ok(signal.key);
assert.ok(signal.label);
assert.equal(typeof signal.value, 'number');
assert.ok(signal.tone);
}
}

Expand All @@ -34,8 +35,7 @@ function assertSignalNotesAreShort(result) {
assert.equal(result.title, '有确认信号');
assert.match(result.body, /4次确认信号/);
assert.doesNotMatch(result.title, /有效|可信|可靠/);
assert.match(`${result.body}${result.hint}`, /现场|评论/);
assertSignalNotesAreShort(result);
assertVisibleSignals(result);
}

{
Expand All @@ -44,7 +44,7 @@ function assertSignalNotesAreShort(result) {
assert.equal(result.title, '存在多次举报');
assert.match(result.body, /2次举报/);
assert.doesNotMatch(result.title, /确认/);
assertSignalNotesAreShort(result);
assertVisibleSignals(result);
}

{
Expand All @@ -53,32 +53,31 @@ function assertSignalNotesAreShort(result) {
assert.equal(result.title, '可能已经过时');
assert.match(result.body, /3次过时反馈/);
assert.doesNotMatch(result.title, /确认/);
assertSignalNotesAreShort(result);
assertVisibleSignals(result);
}

{
const result = insight({ status: 'resolved', confirmations: 2, reportCount: 2 }, 3);
assert.equal(result.tone, 'done');
assert.equal(result.title, '任务已关闭');
assert.match(result.body, /历史线索/);
assertSignalNotesAreShort(result);
assertVisibleSignals(result);
}

{
const result = insight({ status: 'expired', confirmations: 2, staleCount: 3 }, 2);
assert.equal(result.tone, 'neutral');
assert.equal(result.title, '任务已过期');
assert.match(result.body, /2条历史线索/);
assertSignalNotesAreShort(result);
assertVisibleSignals(result);
}

{
const result = insight({}, 5);
assert.equal(result.tone, 'neutral');
assert.equal(result.title, '先看评论线索');
assert.match(result.body, /5条评论/);
assert.match(result.hint, /提问|补充/);
assertSignalNotesAreShort(result);
assertVisibleSignals(result);
}

console.log('Trust insight checks passed.');
40 changes: 38 additions & 2 deletions harness/claude-progress.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
- 标准初始化入口:`bash harness/init.sh`
- 标准基础验证:`npm run check:json`,`node harness/check-harness.mjs`
- 当前最高优先级未完成功能:`map-feed-001`
- 当前正在实现的用户请求:AB 组 DevTools service-port config forensics,为 9420 blocker 增加只读配置层取证,确认 Service Port UI/config 是否 disabled、端口是否匹配,以及配置结果不能替代真实 UI evidence
- 当前 blocker:AB 轮只读配置取证显示 DevTools 配置摘要中 `security.enableServicePort=false` 且 `security.port=9420`,同时端口仍无 listener、IPv4/IPv6 均 `ECONNREFUSED`;这说明下一步应由用户在 WeChat DevTools UI 中人工确认并开启 Settings -> Security Settings -> Service Port,真实朋友圈菜单、系统分享面板、payload、CloudBase attribution、窄屏和真机转化仍未产生 passed evidence
- 当前正在实现的用户请求:服务优化,在不影响功能的前提下简化所有操作和非必要展示;每次修改后 3 个子 agent 审阅,两票通过才算通过
- 当前 blocker:静态门禁已通过;WeChat DevTools service port 9420 仍不可连接,因此真实 DevTools/真机视觉和点击验收尚未执行

## 会话记录

Expand Down Expand Up @@ -1298,3 +1298,39 @@
- 更新过的文件或工件:`pages/publish/publish.js`,`scripts/check-publish-flow.mjs`,`harness/feature_list.json`,`harness/claude-progress.md`
- 已知风险或未解决问题:尚未在真实 WeChat DevTools/真机中手动确认发布页初始高亮为 `长期`;DevTools service port 9420 仍阻塞,readiness 不能替代 UI passed evidence。云端路径仍需部署更新后的 `posts` 云函数
- 下一步最佳动作:在 DevTools UI 手动打开当前 worktree,确认发布页初始有效期高亮 `长期`,发布后详情页显示 `长期有效`
### Session 094UploadPackageSize

- 日期:2026-06-25
- 分支:`main`
- 本轮目标:修复用户反馈 WeChat DevTools 上传报错 `Error: 系统错误,错误码:80051, source size 48278KB exceed max limit 2MB`
- 根因:原始项目 checkout `/Users/bytedance/git/x` 中存在未跟踪的 `.understand-anything/` 本地分析产物目录,体积约 49MB;`project.config.json` 的 `miniprogramRoot` 为 `./` 且 `packOptions.ignore` 为空,DevTools 上传源码包时容易把该目录和其他本地工具目录一起纳入上传扫描,和报错中的 `48278KB` 高度吻合
- 已完成:`.gitignore` 新增 `.understand-anything/`;`project.config.json` 的 `packOptions.ignore` 新增 `.git`、`.agents`、`.claude`、`.github`、`.understand-anything`、`harness`、`scripts`、`log` 目录,避免本地工具、harness、脚本和 git 元数据进入小程序上传包;未删除任何本地产物,未改动小程序运行代码
- 运行过的验证:使用 bundled Node PATH 运行 `node scripts/check-json.mjs`、`node harness/check-harness.mjs`、`git diff --check`、按 `packOptions.ignore` 估算上传源码体积、最终 `bash harness/init.sh`
- 已记录证据:`node scripts/check-json.mjs` 输出 `Checked 11 JSON files.`;`node harness/check-harness.mjs` 输出 `Harness OK: 6 features checked.`;`git diff --check` 无输出;体积估算输出 `Approx packed source after packOptions.ignore: 579KB across 92 files`;最终 `bash harness/init.sh` 完整跑通并输出 `Harness init complete.`
- 已知风险或未解决问题:尚未由 WeChat DevTools 实际重新上传/预览验证;如果 DevTools 仍使用旧缓存,建议清理编译缓存或重新打开 `/Users/bytedance/git/x` 后再上传
- 下一步最佳动作:在 WeChat DevTools 中重新上传或预览当前项目,确认不再出现 `source size ... exceed max limit 2MB`

### Session 095ServiceSimplification

- 日期:2026-07-02
- 分支:`main`
- 本轮目标:按用户 goal 做服务优化,在不影响功能的前提下简化所有操作和非必要展示;每次修改后启动 3 个子 agent 审阅,至少 2 票 PASS 才算通过
- 已完成:移除发布页单独准备度卡片和表单说明,保留定位块与底部主按钮状态;简化地图列表头部,移除重复分类说明和附近计数;简化详情页分享接收、发布后扩散、普通分享、TrustInsight、动作接力和评论接力中的辅助说明行;简化管理台、反馈页、我的发布、动态和个人页的重复副标题、空态提示和反馈计数;删除地图页已不展示的 `activeCategoryText`/`viewportPostCount` 状态和管理页已不展示的 `stats.feedback`
- 已完成:同步收窄发布状态和 TrustInsight 的数据/检查,移除已删除展示依赖的 `readiness.items`、`readiness.completionText`、`trustInsight.hint` 和 signal note 断言;`scripts/check-devtools-readiness.mjs` 内联 service simplification guard,覆盖活跃 readiness/smoke/runbook 文档和相关页面 JS/WXML/WXSS,防止重新引入旧准备度卡片、旧说明块、旧计数状态或未跟踪检查脚本依赖
- 已完成:更新活跃设计/手测/readiness 文档,把当前发布验收口径统一为“发布状态、定位块、底部主按钮”;历史候选报告保留历史事实但明确标注不是当前发布页手测清单
- 运行过的验证:`pwd`;读取 `harness/claude-progress.md`、`harness/feature_list.json`、`git log --oneline -5`;使用 bundled Node PATH 运行 `bash harness/init.sh`;`node --check pages/map/map.js`、`node --check pages/admin/admin.js`、`node --check pages/publish/publish-state.js`、`node --check scripts/check-devtools-readiness.mjs`、`node --check scripts/check-publish-flow.mjs`、`node --check scripts/check-candidate-flow.mjs`、`node --check utils/format.js`;`node --no-warnings scripts/check-devtools-readiness.mjs`;`npm run check`;`git diff --check`;旧展示/旧文档术语定向 `rg`
- 已记录证据:`npm run check` 输出 `Checked 11 JSON files.`、`Harness OK: 6 features checked.`、`Service simplification checks passed.` 和最终 `DevTools readiness checks passed. Static gates passed; DevTools and real-device visual acceptance are still required.`;`bash harness/init.sh` 输出 `Harness init complete.`;`git diff --check` 无输出;最终复审 Franklin、Ptolemy、Ramanujan 三票 PASS,无 Critical/Important findings,满足“两票通过”规则
- 已知风险或未解决问题:没有执行真实 WeChat DevTools/真机视觉和点击验收;readiness 仍报告 9420 service port blocked / connection refused,这只能说明环境入口阻塞,不能写作 UI passed evidence。复审提出若后续继续极限清理,可再移除未渲染的 `nextAction.note` 和部分详情 helper 的旧字段,但它们不影响当前用户功能或可见展示
- 下一步最佳动作:在 WeChat DevTools service port 恢复后,用发布、地图列表、详情信任动作/评论/分享、管理处置、反馈提交、个人页下一步做一次真实 UI smoke,并把结果记录为 passed/failed/blocked/not_covered

### Session 096PullAndPublishPageStyle

- 日期:2026-07-02
- 分支:`main`
- 本轮目标:按用户要求拉取最新代码,并根据截图优化发布页样式,减少“卡片套卡片”的层级感,修正底部状态标题/禁用按钮颜色问题
- 已完成:`git fetch origin` 后用 `git pull --ff-only --autostash origin main` 快进到 `a69d464`;保留远端默认长期/自定义有效期发布逻辑,同时解决 autostash 与本地服务简化改动在 `harness/claude-progress.md`、`pages/publish/publish-state.js`、`scripts/check-publish-flow.mjs` 的冲突
- 已完成:发布页表单容器去掉全局 `panel` 叠层,改为单一轻量表单面板;`form-section` 改为透明分区和分隔线,去掉内层卡片边框/背景;底部 `publish-action` 状态标题颜色改为品牌深绿,禁用主按钮改成不透明浅绿底和更高对比文字
- 运行过的验证:`node --check pages/publish/publish-state.js`;`node --check scripts/check-publish-flow.mjs`;`node --no-warnings scripts/check-publish-flow.mjs`;`npm run check`;`bash harness/init.sh`;`git diff --check`;`git diff --cached --check`
- 已记录证据:发布流专项输出 `Publish flow checks passed.`;`npm run check` 输出 `Checked 11 JSON files.`、`Harness OK: 6 features checked.`、`Service simplification checks passed.` 和最终 `DevTools readiness checks passed. Static gates passed; DevTools and real-device visual acceptance are still required.`;`bash harness/init.sh` 输出 `Harness init complete.`;两条 diff whitespace 检查均无输出
- 已知风险或未解决问题:没有执行真实 WeChat DevTools/真机视觉验收;readiness 仍报告 9420 service port blocked / connection refused。`git pull --autostash` 因冲突保留了 `stash@{0}` 作为备份,当前改动已应用到工作区并解决冲突,未删除该备份
- 下一步最佳动作:在 DevTools 手动打开发布页,确认截图中的表单层级已经变为单层面板、底部“还差标题/补标题”状态颜色对比正常,并实际点选 `长期/自定义` 有效期回归发布流程
2 changes: 1 addition & 1 deletion harness/devtools-port-forensics-checklist.md
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,6 @@ O 组不执行恢复动作,只把建议交给有本机 UI 权限的执行者
- 打开微信开发者工具 UI,进入“设置 -> 安全设置”,确认“服务端口”开启;若 UI 显示关闭,手动开启后重新做只读端口检查。
- 确认当前只保留必要的 DevTools 实例;如果多个项目或多个版本同时运行,先人工识别当前项目和端口归属。
- 正常退出整个 DevTools app 后重开,不只关闭模拟器窗口;恢复前保存必要的脱敏 blocked 摘要。
- 重新打开目标 worktree 后,先跑端口 access 检查,再做 DevTools 编译、地图首屏、发布准备度、详情信任动作和真机预览 smoke。
- 重新打开目标 worktree 后,先跑端口 access 检查,再做 DevTools 编译、地图首屏、发布状态、详情信任动作和真机预览 smoke。
- 若 `9420` 长期 blocked,可人工切换服务端口、升级或重装 DevTools、换机器验证,或改用 UI 手测路径记录 CLI blocked。
- 恢复后仍需按真实 DevTools UI / 真机旅程记录 `passed`、`failed`、`blocked` 或 `not_covered`;端口恢复本身不能替代产品 smoke 证据。
2 changes: 1 addition & 1 deletion harness/devtools-port-forensics-product-brief.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ O 组不再重复恢复动作,也不继续扩大 smoke 或业务验证范围

## 用户价值

真实 DevTools 或真机 smoke 仍是判断地图首屏、发布准备度、定位授权、详情信任区、评论和图片链路的必要证据。O 组的价值不是让这些用户旅程通过,而是降低误判成本:
真实 DevTools 或真机 smoke 仍是判断地图首屏、发布状态、定位授权、详情信任区、评论和图片链路的必要证据。O 组的价值不是让这些用户旅程通过,而是降低误判成本:

- 让后续执行者知道当前 blocker 是 DevTools 环境入口问题,不是已复现的产品缺陷。
- 把“CLI 可执行”“进程存在”“端口声明”“端口监听”拆开,避免任一单点被误写成 smoke ready。
Expand Down
10 changes: 5 additions & 5 deletions harness/devtools-readiness-checklist.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# DevTools / 真机发布准备度手测清单
# DevTools / 真机发布流程手测清单

日期:2026-06-14

Expand Down Expand Up @@ -133,22 +133,22 @@
### 4.1 游客与登录态

- [ ] 游客进入发布页。
- 通过标准:登录提示、发布准备度和底部主按钮状态一致,不能绕过登录发布。
- 通过标准:登录提示、位置确认状态和底部主按钮状态一致,不能绕过登录发布。
- 失败证据:首屏截图和点击主按钮后的表现。
- [ ] 已登录用户进入发布页。
- 通过标准:登录提示消失或降级,表单可编辑,底部主按钮按准备度变化
- 通过标准:登录提示消失或降级,表单可编辑,底部主按钮按表单和位置状态变化
- 失败证据:登录态截图,记录登录方式。
- [ ] 登录状态切换后返回发布页。
- 通过标准:页面状态刷新,不沿用游客禁用态或旧用户信息。
- 失败证据:切换前后录屏。

### 4.2 必填校验与准备度状态
### 4.2 必填校验与发布状态

- [ ] 空表单直接点击主按钮。
- 通过标准:提示第一个需要补齐的字段,不提交空任务。
- 失败证据:点击后 toast / 文案截图。
- [ ] 逐项填写标题、详情、分类、地点、有效期。
- 通过标准:发布准备度和按钮说明同步更新,没有状态滞后。
- 通过标准:底部按钮说明同步更新,没有状态滞后。
- 失败证据:逐项截图或录屏。
- [ ] 输入超长标题、超长正文、超长地点。
- 通过标准:计数、换行、省略和按钮区域稳定,不出现横向滚动或遮挡。
Expand Down
8 changes: 4 additions & 4 deletions harness/devtools-readiness-product-brief.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

## 2. H 组非目标

- 不新增功能,不修改发布准备度状态机、详情 TrustInsight、评论入口、地图列表或存储逻辑。
- 不新增功能,不修改发布状态机、详情 TrustInsight、评论入口、地图列表或存储逻辑。
- 不用自动脚本替代 WeChat DevTools 或真机手测。
- 不把 DevTools CLI、云函数、Storage 的环境问题当作产品功能已通过。
- 不提交代码,不调整其它 harness 文件。
Expand Down Expand Up @@ -46,9 +46,9 @@
- 详情页标题、分类、地点、距离、状态、有效期与列表展示一致。
- 隐藏或过期任务不应出现在普通地图列表中;如无法构造数据,记录为“未覆盖”。

### 4.2 发布准备度与定位失败重试
### 4.2 发布状态与定位失败重试

- 首次进入发布页时观察准备度清单,字段缺失、定位等待、定位失败、位置已确认的文案和主按钮状态要一致
- 首次进入发布页时观察定位块和底部主按钮,字段缺失、定位等待、定位失败、位置已确认的文案和按钮状态要一致
- 拒绝定位或模拟定位失败后,重试入口可见,点击后状态有明确变化。
- 标题、详情、分类、有效期、位置确认都完成前,主按钮不得表现为可发布。
- 提交中态不得允许重复提交。
Expand Down Expand Up @@ -141,7 +141,7 @@ DevTools/真机环境:

用户旅程结论:
- 地图列表到详情:
- 发布准备度/定位失败重试:
- 发布状态/定位失败重试:
- 发布成功后详情跳转:
- 详情 TrustInsight/评论入口:
- 图片/云端路径:
Expand Down
Loading
Loading