浅念
|
a1dc1ff7a3
|
feat(chat): 页面级 basePath 引导(路径模式静态面)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-19 18:28:22 +08:00 |
|
浅念
|
0baa9ab2ed
|
feat(widget): 脚本地址自推导 basePath(路径模式端点前缀)
spec 2026-10-19 §4: 路径模式(/t/<slug>/static/widget.js)下从 script.src
剥尾推导 basePath,brand/avatar 三分支/WS 四处端点构造统一加前缀;
Host 模式 indexOf 命中在 0 → basePath="" 端点零变化。
test_theme_static.py 头像锚定守卫随构造更新(wsBase + basePath + …,
语义不变:绝对锚定 + 禁相对路径)。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-19 18:13:49 +08:00 |
|
浅念
|
3862577143
|
test: 路径模式全链与限流隔离钉位
Task 3:TestPathPrefixRouting 追加 5 用例——
- chat REST 全链(建会话/resume/公开历史,全程 /t/ 前缀 + 未知 Host)
- 限流隔离:同 IP 同设备双租户独立计数(打满 jiancai 30 上限 429,
auto 消息通路仍 200——Task 2 桶键含 slug 的验收钉位)
- _PREFIX_RE.groupindex == {}(TENANT_SLUG_RE 派生捕获组漂移守护)
- WS 停用租户路径模式 1013(Host 未知,1013 只能出自路径分支)
- 双层前缀 /t/a/t/b 仅剥一层(剩余路径无路由 → 路由层 JSON 404)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-19 17:51:46 +08:00 |
|
浅念
|
9b97eafa1c
|
feat(middleware): /t/<slug>/ 路径前缀解析(与 Host 模式共存)
- TenantHostMiddleware 增路径前缀分支:raw_path 直判 slug 段(未编码
[a-z0-9-],%61uto/大写/点号不匹配落 Host 解析);仅带尾斜杠形态剥离;
path 定长切割(保留前缀尾斜杠为剩余路径领头斜杠),raw_path 按解码
path 重编码重算(非长度截断),orig_path 留痕;未知 404/ws 1008、
停用 503/ws 1013 与 Host 模式同语义
- _PREFIX_RE 字符类取自 registry.TENANT_SLUG_RE(掐 ^$ 锚)单一事实源;
tenant_routes 的 SLUG_RE 换源同常量别名 import(删本地定义与 import re)
- 评审折入:registry 空 sites 分支注释纠正为生产可达(DB 源全站点停用
合法状态),test_registry 用例 docstring 同步;conftest ADMIN_PASSWORD
注释补硬编码登录用例警示
- 新增 TestPathPrefixRouting 13 用例(全链/拒绝族/停用/site 覆盖/豁免
优先/direct-ASGI 改写钉位/WS 双例/路径优先)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-19 17:27:01 +08:00 |
|
浅念
|
6fc43c1f1c
|
fix(tests): conftest 钉 ADMIN_PASSWORD 出厂值——测试对本地 .env 封闭
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-19 16:52:36 +08:00 |
|
浅念
|
e08a675363
|
feat(registry): resolve_by_slug 路径模式解析 + TENANT_SLUG_RE 常量上提
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-19 16:36:13 +08:00 |
|
浅念
|
85627901d0
|
docs: 计划评审收口(TDD 判别用例/实测锚点/签名对齐/拼接安全四防线)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-19 16:21:36 +08:00 |
|
浅念
|
1c91870c76
|
docs: 单域名多租户实施计划(11 任务 4 批)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-19 15:55:35 +08:00 |
|
浅念
|
e0e49144d4
|
docs: spec 用户终审两处补强(空串 XFF 回退/无尾斜杠措辞)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-19 15:48:01 +08:00 |
|
浅念
|
5e289b9eb6
|
docs: spec 终审收尾(§1 末段一词/§3.1 raw_path 直判为准)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-19 15:27:37 +08:00 |
|
浅念
|
b4c03181ce
|
docs: spec 评审收口(XFF 取末段纠偏/raw_path 重算/清扫范围修正)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-19 15:23:00 +08:00 |
|
浅念
|
5b7c828777
|
docs: 单域名多租户(路径前缀路由)+ 上线收口项设计 spec
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-19 15:10:13 +08:00 |
|
浅念
|
6d6d8a8e32
|
chore: Batch 4 收口——终审 Minor 处置记档 + WallAdvanced 注释修正
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 21:56:02 +08:00 |
|
浅念
|
1df1fc7922
|
fix(admin): 重建 watch 补 slug 源(防缺组租户切换草稿泄漏)
c6bd542 拆分后的分组 watch 只盯组 props 引用——seed 租户快照可能缺组
(如无 ai/contact/misc 组),两家租户都缺时切租户该组 prop 走
undefined→undefined 引用不变、watch 不触发,上一家租户的草稿留在当前
租户界面(dirty 也残留)。旧的全量耦合顺带防住了它,拆分后暴露。
修复:六个 pane 的重建 watch 源统一加 () => props.slug 兜底——slug 变化
即强制重建(缺组时空槽归位、dirty 归 false);单卡保存路径不受影响
(组引用照常换新触发)。覆盖 CredsPane 三卡 + WallPane / PromptsPane /
ContactFormPane / EngineFormPane / MiscFormPane(均已声明 slug prop,
index.vue 挂载处均已传 activeSlug,零接线改动)。
顺手:CredsPane 测试态注释仍提已删除的 resetAll → 改提三卡 watch;
计划文档 Task 15 段落末补 Batch 1 遗留打磨项处置注记(色列宽度/头像
提示样式经 Task 16 走查目检后定夺)。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 21:40:29 +08:00 |
|
浅念
|
c6bd54229d
|
fix(admin): CredsPane 单卡保存不再联动重置兄弟卡
旧 array-source watch 盯 [emailGroup, pushGroup, aiGroup] 三元数组——任一
组引用变化即 resetAll 三卡齐重建:单卡保存(如 email)后父层 onPaneSaved
换整份快照引用,push/ai 卡上未保存的编辑被静默丢弃(Task 14 评审挂账)。
改为三表各自 watch 本组 props 引用:父层保存回写是 {...snapshot, [group]:
config} 展开——只有被保存组引用换新,兄弟组引用不动 → 只重建该卡;切租户/
回滚时快照先置 null 再整份换新,三组引用齐变 → 三卡全量重置(行为保持)。
resetAll 相应拆为 resetEmailCard / resetPushCard / resetAiCard(备注/错误/
测试态随所属卡重置)。
自查两场景:改 email 保存 → push 草稿与 dirty 均保留;切租户 → 三卡齐重置。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 21:23:18 +08:00 |
|
浅念
|
f92a4be139
|
polish(admin): 各页空态与文案轻量打磨
- 会话列表/推送日志表空态给动作指引(empty-text,不再落 Element 默认「暂无数据」)
- 统计六图空态文案经 useChart 新增 emptyText 参数下发「暂无数据——产生会话后展示分析」
(textContent 替代 innerHTML,缺省值不变,其余消费方零影响)
- 平台设置存储总览空表指引「暂无设置项——从上方推荐键开始」
- 租户详情站点表空态指引「暂无站点——点右上角「新建站点」创建」
- CredsPane 邮件测试 hint 的字面 **已保存** 星号改 <b>(模板不吃 markdown)
- 品牌预览卡右侧副标去掉与新增副标题重复的「本地简化」字样
- 仪表盘/租户列表/会话页既有 ElEmpty 已是动作指引文案,核对后无需改动
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 21:21:53 +08:00 |
|
浅念
|
914bd49128
|
docs: Batch 3 完成记档
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 21:16:10 +08:00 |
|
浅念
|
26dc93bc31
|
fix(admin): 头像上传基线只回写持久化字段(防脏检测假阴性)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 21:14:23 +08:00 |
|
浅念
|
e2aa166701
|
fix(admin): 脏保护三缺陷(brand 丢弃空操作/头像假脏/取消高亮错位)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 21:08:57 +08:00 |
|
浅念
|
edf58ce0a0
|
feat(admin): 未保存离开保护(Batch 3 收口)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 20:42:18 +08:00 |
|
浅念
|
250ffdfa53
|
feat(admin): contact/engine/misc 表单 pane + JsonGroup 退役
Task 13(feature/config-ux Batch 3):contact/engine/misc 三组从通用
JSON 整组编辑退役为专用表单卡——ContactFormPane(双开关 + 模板语言)、
EngineFormPane(限流数值 + context_seed_keys 高级折叠)、MiscFormPane
(国名 → 区号行编辑),共用新 KeyValueEditor 行编辑器(直改 reactive
rows,与 ScenarioCard 同契约);JsonGroupPane.vue 删除,model.ts 通用
JSON 组区块(JsonGroupKey/jsonGroupDraft/parseJsonGroupDraft/
JSON_GROUP_FIELDS)与对应测试一并退役;rowsToRecord/recordToRows 补
JSDoc(Task 12 评审折入)。
vitest 182 passed(185 − 3 旧 JSON 组用例);vue-tsc + vite build 零错误。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 20:23:26 +08:00 |
|
浅念
|
4dd74d6682
|
feat(admin): contact/engine/misc 表单映射纯函数
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 20:03:09 +08:00 |
|
浅念
|
8b430565d6
|
feat(admin): PromptsPane 重组(company_facts 主面+引擎级折叠)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 19:50:03 +08:00 |
|
浅念
|
f4907c1e27
|
docs: Batch 2 完成记档
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 19:45:45 +08:00 |
|
浅念
|
12b8dab5f0
|
feat(admin): WallPane 重组为场景卡+高级折叠(Batch 2 收口)
- 主面换 ConfigCard 卡壳:WALL_SCENARIOS 双状态场景卡 + no_contact 三键
白话行编辑 + cc_templates 四组封闭语言集 + 试金石面板(整块平移)
- 高级区 WallAdvanced 挂载(正则/单正则/reminders,默认折叠);旧池区/
正则区/提醒区/旧 collapse 结构与失效辅助全部删除(grep 零残留)
- 保存链加模板变量保护:collectRemovedWallVariables 集差检出被删的
{intl}/{shown} 等运行期占位符 → ElMessageBox 二次确认(先于试金石)
- emits 追加 navigate;index.vue WallPane 挂载处接线 @navigate
- ScenarioCard 评审折入:requiredMissing 收紧(空白行保留但两池全空的
必留语言也预警);× 删除钮键盘可达(role/tabindex/enter/space);
addLang 严格正则注记(异常存量语言码可显示可删不可重加)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 19:34:31 +08:00 |
|
浅念
|
0553ccc32c
|
feat(admin): WallAdvanced 高级折叠区(正则/提醒迁移)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 19:20:58 +08:00 |
|
浅念
|
79374a5c1d
|
docs: Task10 补 Task8 评审折入项(空白行预警/×键盘可达/正则注记)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 19:16:55 +08:00 |
|
浅念
|
ab0cf9f64e
|
feat(admin): WallScenarioCard 双状态场景卡组件
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 19:08:59 +08:00 |
|
浅念
|
36fe534029
|
fix(admin): 变量集差替代配对递归(删尾行/整键检出)+ 标签契约钉位
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 19:03:36 +08:00 |
|
浅念
|
2e6811a55b
|
feat(admin): wall 重组辅助纯函数(场景卡/语言并集/模板变量保护)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 18:49:04 +08:00 |
|
浅念
|
d480a9f04e
|
docs: Batch 1 完成记档
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 18:46:41 +08:00 |
|
浅念
|
680c4bade6
|
feat(admin): 品牌卡套视觉基线(Batch 1 收口)
- 品牌表单 ElCard → ConfigCard(图标/副标题/信息条/footer/danger 行);
表单双列 grid(标题|主色、WhatsApp|邮箱 同排;头像/欢迎语/话题/占位/隐私 span-2);
保存备注移 footer-right、重置出厂移 #danger(既有 resetting/onResetBrand 逻辑不动)
- 预览卡头加副标题「本地简化预览(真机效果以嵌入站点为准)」(cc-subtitle 观感)
- CredsPane 挂载处补 @navigate=onGroupSelect 接线;email 卡 info 去「带 • 的」前缀
(push/ai 卡核实无该串);头注释同步收口
- 剪除 pane 条件链尾部 v-else 占位死分支(activeGroupLabel/ALL_NAV_ITEMS/
.placeholder-card/.save-bar 等配套同清)
- form-grid 样式与 CredsPane 同款规则就地复用(不建共用文件)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 18:34:09 +08:00 |
|
浅念
|
20ab561859
|
docs: Task6 补评审折入项(navigate 接线/•文案清理/死分支剪除)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 18:26:18 +08:00 |
|
浅念
|
06e28e4435
|
feat(admin): 凭据页套视觉基线+SecretField 四件套
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 18:15:23 +08:00 |
|
浅念
|
712c5f9027
|
feat(admin): 配置中心导航分层双模式(常用/高级/版本独立)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 17:31:00 +08:00 |
|
浅念
|
f087b96adf
|
docs: 计划 Task3 代码块同步组件变量名修正
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 17:24:35 +08:00 |
|
浅念
|
46dfbef176
|
fix(admin): ConfigCard footer 守卫修正(footer-left/right 判定)+ 主题变量对齐
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 17:21:38 +08:00 |
|
浅念
|
2e00db16b9
|
feat(admin): ConfigCard 视觉基线卡壳
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 17:10:02 +08:00 |
|
浅念
|
6881ccc3cd
|
feat(admin): SecretField 密钥四件套组件
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 17:02:19 +08:00 |
|
浅念
|
0a413526bb
|
feat(admin): secretFieldState 密钥四态展示纯函数
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 16:52:25 +08:00 |
|
浅念
|
eb2220c26c
|
docs: 计划二轮修复(GroupKey 显式联合/v-else-if 链位/onPaneSaved 名)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 16:41:45 +08:00 |
|
浅念
|
bae51b00e3
|
docs: 计划评审修复(SecretField 接线/引擎测试咬合/退役时序/导入约定)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 16:36:05 +08:00 |
|
浅念
|
faf981ec9b
|
docs: 配置中心优化实施计划(4 批 16 任务)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 16:25:59 +08:00 |
|
浅念
|
5b4b767334
|
chore: gitignore 增补 .superpowers/(brainstorm 工作区)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 16:15:21 +08:00 |
|
浅念
|
5bb891aade
|
docs: spec 评审收口(cc_templates 语言封闭集 + 测试计数措辞)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 16:14:45 +08:00 |
|
浅念
|
3bb0147311
|
docs: 配置中心易用性与视觉优化设计 spec
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 16:09:41 +08:00 |
|
浅念
|
5ae32589da
|
docs: 终态基线 632+2skip
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 14:04:54 +08:00 |
|
浅念
|
a20d53887d
|
fix: 终审微修(admin no-cache/PII挂账/死配置清理)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 14:03:50 +08:00 |
|
浅念
|
dcf9d4b54c
|
chore: Phase 4 收尾——部署工件齐备,项目四阶段完成
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 13:45:14 +08:00 |
|
浅念
|
7cdb4fc970
|
chore: 锁屏与通知组件删除(enabled:false的最终清理)
Phase 3 终审 M-1/M-2 摘入口后组件保留待决,本提交最终删除:
- art-screen-lock/ 与 art-notification/ 组件目录
- component.ts screen-lock 全局组件项、headerBar.ts notification 项
- types/config HeaderBarFeatureConfig.notification 字段、
useHeaderBar shouldShowNotification
- art-header-bar 通知按钮/挂载/showNotice/visibleNotice/
bodyCloseNotice 与 document 点击监听、.notice-button 样式
- components.d.ts 两条目;crypto-js 依赖全套(env.d.ts 声明/
package.json/lockfile/optimizeDeps)——唯一消费方是锁屏
- en/zh 孤儿语言键(notice.* / lockScreen.* / topBar.user.lockScreen)
与 mittBus openLockScreen 事件类型(无发射/订阅方)
grep 零残留;vitest 164 passed;build 通过(主 chunk 358.45→355.84 kB,
crypto-js 出预构建);auto-imports.d.ts 行尾漂移已还原。
CLAUDE.md Phase 4 清理单 6/7 结项(并补记 8/9 随 Task 5E/5D 结项)。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 10:43:13 +08:00 |
|