浅念
29204bc08a
docs(plan): 选图拦截 v2 设计——硬封锁+仅本机判定
...
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-29 14:14:06 +08:00
浅念
3833bc3bc6
docs(plan): 服务端历史缩略图 + 上传中心空态引导设计方案
...
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-29 11:38:23 +08:00
浅念
c68e7115e4
docs(plan): 海报语言切换设计方案(弹层内中/English 切换)
...
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-29 10:57:17 +08:00
浅念
7e5c550fb3
feat(app): block selecting already-uploaded photos at picker tap (double-tap to force)
...
方案 A(选图点选拦截):multiImagePickerProvider 经 wechat_assets_picker
10.1.3 官方钩子 AssetPickerConfig.selectPredicate 挂 PickerDuplicateGate——
点选「已上传到目标相册」的照片当场拦下(SnackBar 提示),再次点击同一张
强制选择(escape hatch)。
- MultiImagePicker typedef 增参 accountId/albumId(拦截判定范围=当前
目标相册;相册详情/连拍页两处调用点传入);
- 判定口径同 checkDuplicatesUnified:本机 TaskStore(同账号+相册+
completed,filename+bytes)∪ 服务器单项预检(bytes;本机命中短路
服务器,点选延迟考量);任一半场异常按该半场无命中,fileSize 失败等
整体异常直接放行——enqueue 弹窗 + init 409 兜底不变;
- per-asset 判定缓存(二次点击瞬回)+ 二次点击放行集;取消选择恒放行
且不预热放行集;
- AssetEntity 事实适配(PickerAssetFact 测试接缝):fileSize 为
photo_manager 3.12 的 Future<int> 平台通道 getter(entity.dart:778),
惰性求值;title 为 String?(Android 恒有值;iOS 需 needTitle——null
时本机半场跳过,服务器按 bytes 仍可判);
- l10n pickerDuplicateBlocked(zh/en);测试替身签名同步
(album_detail/capture_page 页测 + integration_test app_boot),
页测补 (accountId, albumId) 接线断言;gate 五态用例入 enqueue_test。
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-29 10:10:49 +08:00
浅念
328140494f
docs(plan): picker tap-time duplicate gate (option A) — incremental plan
...
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-29 09:51:41 +08:00
浅念
c64db3c53a
docs: 广告位轮播验收记录与实施计划 Task 13 勾选(线上部署完成)
...
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-29 09:35:37 +08:00
浅念
041cfc77b7
docs: 广告位实施计划 Task 5-12 勾选
...
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-29 01:59:57 +08:00
浅念
60b675a908
feat(sync): 对账清单 ad 实体当前态清扫
...
Task 8(ads-carousel):cn reconcile 增 entityType='ad' 分支——纯 SELECT
当前态映射(sortOrder/createdAt 确定性排序,albumId 恒空串信封约定),
载荷复用 ads/ad-payload.ts 单一出处(与业务事务内即时事件逐字节同形,
纯函数模块无依赖环);DTO SYNC_ENTITY_TYPES 追加 'ad'(对齐契约 enum)。
随附质量审查两项:
- ads.service list() 行→AdminAdItem 映射复用 toItem(删 ~14 行内联重复,
⑮ 补 admin list 200 形状断言覆盖重构路径);
- 新增 test/ads-extensions.spec.ts 守护 AD_IMAGE_EXTENSIONS ===
UPLOAD_CONTENT_TYPES 派生归一扩展名集合(jpeg→jpg),防三处白名单漂移。
测试基建:reset.ts RESET_TABLES 补 'ads'(Task 6 建表遗漏,固定 id 直种
依赖跨 spec 清场);reconcile.e2e-spec 追加 ⑤(红→绿,5/5)。
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-29 00:22:13 +08:00
浅念
d86f452bed
docs: 广告位设计 404 码 ALBUM_NOT_PUBLIC 纠正入档 + 实施计划 Task 1-4 勾选
...
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-28 23:03:32 +08:00
浅念
539597e9f0
feat(storage): 广告对象键布局(staging + 版本化终键)
...
adsStagingObjectKey(两步上传 presignPut 直传位)+ adObjectKey
(版本段=entityVersion:换图必然 bump 版本→新键,copyIfAbsent
禁止覆盖语义下天然防重复/防串图);index.ts 按名再导出供 Task 6/7
ads.service 消费。设计方案 §2.1/§3 终键布局同步回填(偏差登记)。
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-28 23:01:09 +08:00
浅念
7d744da56e
docs: 广告位实施计划——评审修订(inbox 依赖暂存豁免 ad 关键补丁/常量指针纠正/组件测试补齐/compose 全路径)
...
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-28 18:41:54 +08:00
浅念
3b7d37110a
docs: 广告位设计补轮播图左上角「广告」可见小标签(合规可识别性)
...
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-28 18:25:49 +08:00
浅念
678225e8b5
docs(plan): upload duplicate pre-check at enqueue moment — incremental plan
...
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-28 18:25:24 +08:00
浅念
8453167b39
docs: 广告位设计补部署顺序硬约束(ov 先 cn 后,DTO IsIn 整批拒收已核实)、广告图 2MB 上限、量级假设登记
...
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-28 18:24:00 +08:00
浅念
ab412a3630
docs: 广告位设计补 enabled 翻转的 sync inbox 直测用例(评审建议)
...
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-28 18:16:15 +08:00
浅念
0220a9cc05
docs: 广告位设计评审修订——createdAt 进投影/载荷、inbox disabled=删行、albumId 恒空串、head 校验补 contentType
...
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-28 18:14:00 +08:00
浅念
573a559e4a
docs: 广告位轮播设计方案(全局+定向投放/两步上传/outbox 同步投影/sessionStorage 关闭)
...
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-28 18:09:35 +08:00
浅念
65cd6849cc
docs(plan): Task 9 checklist — GIF/truncated source cases for crop
...
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-28 16:02:57 +08:00
浅念
97db504e25
docs(plan): fix manifest snippet (VISUAL_USER_SELECTED has no maxSdkVersion) + expand Task 9 checklist
...
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-28 15:04:42 +08:00
浅念
cc47278f50
docs: upload speedup plan v2 — 9 tasks after full re-review
...
- Task 7 camera WYSIWYG aspect + pinch zoom (two-pointer test, throttled setZoom)
- Task 8 server-dedup app integration (force passthrough, PHOTO_DUPLICATE
classification, l10n) — closes the 409 dead-end from 90dcc58
- Task 6 crop: crop_your_image 2.0.0 callback API + Isolate.run pixel pipeline
- Stale claims fixed (album_detail dedup already wired in 638dd9b ), pre-flight
parallel-session check added
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-28 13:34:03 +08:00
浅念
441a24a54c
docs: upload speed optimization plan draft
...
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-28 11:33:04 +08:00
浅念
90dcc58c33
feat(uploads): P0-1 batch 4 — server-side duplicate photo detection (409 + force + index)
...
契约 UploadInitRequest 加 force(bool,仅 owner/admin 跳过查重)。
服务端 init 事务前置查重:同 albumId + uploaderId + bytes 的非 deleted
照片已存在 → 409 PHOTO_DUPLICATE。photos 表加 idx_photos_dedup 索引
(迁移 20260928120000)。
App UploadInitRequest 加 force 字段 + toJson 序列化。
本地查重(层 1)+ 服务端查重(层 2)双层防线到位。
API typecheck ✅ · app analyze ✅ · 397/397 ✅ · contract lint ✅
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-28 11:29:29 +08:00
浅念
33f347cdea
feat(app): P0 batch 3 — offline detection with engine pause/resume + UI banner
...
P0-4 离线感知:
- connectivity_plus → NetworkAvailability(online/offline/unknown)
- engine_scope 三重绑定:有账号+有网 → start;任一失去 → stop(在途不中断)
- 网络恢复 → start + onNetworkRestored(waitingNetwork 即时重试)
- HomePage 顶部离线黄条(wifi_off + i18n 双语)
P0-5 更正:EXIF 方向已由服务端 sharp .rotate() 自动转正——v2 分析误报
397/397 全绿、analyze 0
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-28 11:23:51 +08:00
浅念
98e073d8c8
docs: App potential issues v2 — full analysis with server-side dedup (confirmed, ready to execute)
...
v2 补齐 v1 自查发现的 8 个漏洞:三重指纹(filename+bytes+CRC32)、批量弹窗
(单次确认非逐张)、photos 表 dedup 索引、force 权限约束(owner/admin)、
上传并发限制(3)、相册开关预检、上传进度百分比、磁盘空间预检。
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-28 10:24:46 +08:00
浅念
32eb4ceb8e
docs: 观众链接统一境外源定稿(后台分享/嵌入/App二维码均 ov 域名)
...
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-24 14:46:54 +08:00
浅念
76380477a0
docs: 验收记录补嵌入组件 EMBED_ORIGIN 修正(cn 后台嵌入代码改指 ov 域名)
...
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-24 14:01:12 +08:00
浅念
e5302e3929
docs: 正式环境双地域部署计划与验收记录
...
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-24 13:41:47 +08:00
浅念
2332d24591
docs(g4): clipboard HTTP-context fix record
...
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-23 17:04:45 +08:00
浅念
f2cd26e523
docs: register embed-slot soft-delete acceptance
...
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-23 13:41:27 +08:00
浅念
e3f40c696d
docs(ui06): dedupe task table rows
...
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-23 10:56:33 +08:00
浅念
63b3e539fd
docs: register asset status acceptance — admin branding tab shows current banner/cover/logo
...
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-23 10:56:14 +08:00
浅念
2409beb7c2
docs: register album soft-delete acceptance — full-chain verified on test server
...
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-23 10:20:57 +08:00
浅念
2b2ae7a083
docs: banner/cover fallback live verification — cover-only album renders banner atop viewer (server 8e674a9 images, migration applied)
...
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-23 10:19:36 +08:00
浅念
5982e13996
docs(ui06): register sidebar nav regression fix — click-verified all 5 menu items
...
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-23 09:17:30 +08:00
浅念
6074fc8ed3
feat(ui06): App line A0-A7 — nav pill removal, light segments, bare summary, token alignment to app-preview
...
- tokens:次文字 #69778E、soft/card-border/seg 色组、输入圆角 10(kRadiusField)
- theme:导航 indicatorColor 透明+显式选中蓝;卡片去阴影改 1px #EDF0F5 边框;输入边框同步
- 新组件 SegmentTabs(#EDF1F6 轨道/选中实蓝/light 浅蓝变体/null 无高亮)替换 M3 SegmentedButton
- 上传中心:摘要去白卡直排+主数字 32/40;completed 次级筛选无高亮语义保留
- 相册卡 scrim 30% 起 #0C1728E8;导航角标红底白字白边;登录主标题 27/700
- theme_test 三处旧规格断言随 UI06 值更新;397/397 全绿、analyze 0 issues
- 真机证据:MuMu + 测试服务器 API,登录/相册/详情/上传 4 页截图确认达标
- 登记偏差:语义色保持对比度合规深色版;视口矩阵随 G2;详见验收记录 §6
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-23 08:09:20 +08:00
浅念
8dc0073597
docs(ui06): B4 acceptance — full record for B3b-e batches, README index, final 20-page evidence
...
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-23 07:07:15 +08:00
浅念
f2002e1d21
docs(ui06): B2+B3a acceptance — card grid, photo grid w/ signed thumbs, viewer, summary header deployed
...
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-22 23:27:53 +08:00
浅念
cebe3d1e2e
docs(ui06): B1 acceptance — deploy ui06-fb3743d web image + after-b1 screenshots
...
- 服务器端构建(UI04 双补丁先例),cn web 滚动 healthy,server 栈未动
- 侧栏分组 DOM 实测:工作空间(相册管理/展示位管理)+组织与治理(账号管理/用户同步/用量统计)
- 登录页/布局壳对照通过;业务页内部留待 B2/B3
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-22 23:06:47 +08:00
浅念
e27a602328
feat(ui06): B0 baseline — before screenshots (20 pages) + contract checks + acceptance skeleton
...
- capture-before.cjs: Playwright 脚本(env 注入凭据),对测试服务器 32005 后台 1440×1000 全页截图
- 契约核对四项全为纯前端工作:cover/preview 服务端已实现(签名 URL 900s),
CreatePayload 仅下载开关,embed v2 字段 E06 已落地
- 主题链路确认:systemMainColor[0] → 运行时 --el-color-primary 派生
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-22 22:48:47 +08:00
浅念
37d88da4bc
docs(ui05,ui06): admin analysis+HTML preview, app-preview evidence, UI06 unified visual plan
...
- admin-preview-2026-09-22/ 20页新版后台HTML原型+截图+validation(UI05 交付)
- app-preview-2026-09-22/ 截图/validation/check 脚本入库及小改
- admin-redesign-concept 概念图
- UI05 管理后台分析与新版设计说明、用户列表分页计划文档
- UI06 全端视觉统一实施方案(以两个 HTML 预览为唯一视觉基准)
- services/api g4-sync-once 手动同步脚本
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-22 22:42:00 +08:00
浅念
dbf958613f
docs(ui04): deployment section in acceptance record (amends fe2428e evidence)
...
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-22 19:45:01 +08:00
浅念
1cf12be904
docs(g4): build-env incidents (Hub outage → server-side build; nginx:alpine entrypoint hang patch)
...
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-22 19:10:27 +08:00
浅念
8c4906c2f2
feat(embed,ui04): E07 acceptance — matrix completion, hostile-CSS hardening, measurements and record closure
...
- E07 e2e (7 cases): 4-viewport fixed size, narrow shrink + dual-slot 12px stack, single/static + empty state + two-photo loop copies, broken-thumb drop, reducedMotion stop with manual arrows, forged postMessage rejected, hostile CSS (!important box-sizing/border) with inline-important countermeasures + duplicate script dedup
- loader v2: geometry-critical properties upgraded to inline !important (beats host stylesheet !important)
- pre-existing fixes: likes.spec view-count assertion vs concurrent session's AlbumHeader unicode icons (toContainText); embed-v2 host port moved to 3998 (3999 collides with embed-crossorigin under parallel full runs); prettier formatting of two concurrent-session files (formatting-only)
- evidence: matrix EMB-A01..A16 closed in acceptance record (mechanism-level items honestly marked), measurements (loader v2 9885B/gzip 3959B, first-load 1 GET + 1 WS, DOM<=16), refreshed screenshots/recordings, master plan UI-04 note
- regression: root lint/typecheck/test 12 packages green; embed suites 43/43; admin embed-slots 5/5; journey pre-existing env failure reproduced at clean HEAD (registered)
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-22 18:56:38 +08:00
浅念
40ec6aad40
docs(g4): pagination+profile iteration & 12h sync interval record
...
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-22 18:31:44 +08:00
浅念
3bba8d1dc5
feat(admin,viewer,ui04): E06 management preview and v2 integration — real-component preview page, form mode fields, README
...
- viewer /embed-preview route: real EmbedStream with sample photography (picsum seeds), zero requests/WS (preview mode), postMessage config + simulated bursts through the real validation pipeline
- EmbedStream: preview prop (disables real WS subscription per §8.2 isolation) + exposed simulateBurst
- admin form: displayMode radio (new default), fixed 195x280 readonly, speed slider, reactions switch; v1 layout fields hidden in v2 (not silently effective)
- admin preview: v2 branch embeds the real preview iframe, white v2 handle, simulate-like tool button with sample-data note
- README-embed: v2 section (integration, hard sizing/docking, interactions/limits, artifact/version caching)
- tests: admin vitest 83 (+1 v2 placement), admin e2e 5 (v1 pinned carousel regression + full v2 chain incl. preview WYSIWYG heart and ov settings projection), viewer 244, v2 e2e 16
Note: part of the admin-side E06 changes (form/preview/utils/locales, mid-state of e2e spec) was swept into parallel commit eebf3b3 by a concurrent session's git add; this commit carries the final state of the remaining files and completes the set.
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-22 18:20:50 +08:00
浅念
91c85e196a
feat(viewer,ui04): E05 realtime hearts + effect-demo alignment (initial offset, heart params, decode gate, bidirectional manual scroll)
...
- reactions.ts pure fns: delta->hearts sampling, burstId dedupe (TTL/capacity), pending-visible cache (5s/50), 250ms emission throttle with merge
- useEmbedReactions: read-only RealtimeClient subscription on album.publicToken (no viewer-page side effects, A15), rebind teardown, 10s grace disconnect, no fake bubbles on WS failure
- ReactionLayer: demo-frozen heart effect (12/16/20 sizes, two colors, 110px rise, 1.6s ease-out, 300ms stagger, max 8, drop-shadow) in unscoped block (created elements lack scoped hash)
- demo alignment: initial offset 32px, decode+500ms startup gate, 1:1 drag, arrows +-40, focus-tip, bidirectional manual scroll (manualScroll), loader handle 100x44 exact styles, <=599px offset default 12
- tests: +8 reactions unit (244 viewer), e2e E05: real cross-context like -> heart on correct photo (EMB-A09), zero likes/visits submission (EMB-A15), 16s hearts recording
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-22 17:38:02 +08:00
浅念
ccf0c29659
docs(g4): test-server deployment evidence (230 users synced, ops notes)
...
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-22 17:14:31 +08:00
浅念
3a8a1cf69e
docs(g4): real-key live sync evidence (230 users, idempotent, V1.1 credentials verified)
...
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-22 16:58:09 +08:00
浅念
e583575702
docs(g4): acceptance record for uniservice user source integration
...
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-22 16:51:58 +08:00
浅念
42878f115b
docs(g4): uniservice open/v1/users API contract + implementation plan
...
Co-Authored-By: Claude Code <noreply@anthropic.com >
2026-09-22 16:21:26 +08:00