浅念
|
84aa302c8e
|
docs: Task1-9 完成记档
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 22:55:23 +08:00 |
|
浅念
|
348e0b5527
|
fix(admin): es 尾巴空=整键丢弃(spec §3.2 管道身份泄漏修复)
审核页 es 收尾句留空的原语义「不触 es 池(保持快照原值)」是误读——
spec §3.2 要求整键丢弃:出厂 es 池带行业身份(如建材档案的
tuberías),保留快照会把上一行业的收尾句继续投给本租户的西语客户。
- model.ts:新增 applyWallDispatch 纯函数(wall 保存步载荷落地——
非 null 语言覆写、null 语言整键删除);wallPoolDispatch/WallDispatch
及三处旧「不触 es 池」注记全部改为整键丢弃语义
- index.vue:wall 步改用 applyWallDispatch;es 输入 placeholder 改
「留空 = 丢弃现有 es 池」;进审核页后台拉取现 es 池,留空且有句时
展示丢弃预览(破坏性操作不静默);skipAvatar 勾选保存中禁用
(防 for-of 期间改动 saveSteps 计算源)
- 测试:原「es新句为null_整键删除」用例名实不符(断言的是保快照)
已正名并移交载荷断言;新增 applyWallDispatch 两用例——tuberías
泄漏链回归钉('es' in payload === false)+ 其余语言键透传
后端安全性已核实:boundary_filter 的 pools.get(lang) or pools["en"]
使缺 es 回退到新 EN 尾巴;wall_schema 仅必留 en/zh。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 22:51:30 +08:00 |
|
浅念
|
bd3e193f28
|
fix(site-import): warningsLevel 补「跳过」关键词(Task9 备忘折入)
crawl 层注记(logo 下载失败/超限/格式不符、子页抓取失败/非 HTML/
过薄)均含「跳过」且影响产出内容——归 warning 级需人工复核;
钉 5 条 crawler 实文测试。vitest 207。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 22:32:45 +08:00 |
|
浅念
|
44c53429d9
|
feat(admin): 从网站导入对话框与审核页
Task 9 装配:site-import/index.vue 单文件两形态——导入对话框(URL
启动/3s 轮询五键/phase 文案/failed retry 复活形态/7.5 分钟窗口/404
过期终态/放弃确认)与审核页 fullscreen dialog(品牌表单+头像
dataURL 预览与跳过勾选/四件套 tabs 等宽编辑+UTF-8 字节计数/墙尾巴
三语单行/联系方式两开关/warnings 分级黄条)。
保存序列执行器按 buildSaveSequence 依次调既有端点(每步 GET 在该步
执行时取,avatar 上传写的版本不丢);wall 步消费 Task 9 备忘新增的
wallPoolDispatch 纯函数(保存时新鲜 GET 池判断逐语言替换/追加,
append 提示「原池含人工编辑句」),contact 步读-改-写仅覆写两开关。
部分失败停当前组,重试跳过已完成组。
两入口接线:租户详情抽屉(超管,停用禁用)与配置中心页头(两角色,
slug=当前租户上下文),completed 后各自刷新。
测试 201→206(wallPoolDispatch 五例 TDD);pnpm build 零错误;
dts 行尾漂移按纪律还原。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 22:30:44 +08:00 |
|
浅念
|
1e006d8f45
|
docs: Task9 消费方备忘(池分派纯函数/追加提示/跳过关键词)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 22:07:56 +08:00 |
|
浅念
|
daf594ac3a
|
fix(site-import): crawl 层注记并入草稿包 warnings(Task8 评审折入,spec §3.1)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 22:07:54 +08:00 |
|
浅念
|
323588c54d
|
feat(admin): site-import API 与模型纯函数
Task 8(TDD):草稿包→表单/保存序列/warnings 分级纯函数 + POST/GET
API 薄封装。事实源 app/platform/routes/site_import_routes.py(GET 五键
无 failed_phase——retry 对 failed 一律展示后端 409 兜底)与 generator.py
build() 的 spec §4 草稿包形状。保存序列沉淀 spec §5 顺序语义(brand 的
GET 在头像上传之后)与 deflections_contact 池形态分派注记,Task 9 装配
消费。前端 vitest 188 → 201。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 21:56:05 +08:00 |
|
浅念
|
17a5c9ec1c
|
docs: Task8/9 消费方备忘(五键形状/retry展示策略)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 21:43:55 +08:00 |
|
浅念
|
57adf8e2a6
|
feat(site-import): POST/GET API 与挂载
Task 7(spec §4):/api/platform/tenants/{slug}/site-import 两端点,
_tenant_guard 守租户(两角色)。POST 校验链:鉴权 → 租户存在/未停用
(404/403) → 形态预检(retry 只认 generate+task_id 非空;新建 URL 复用
safe_fetch._validate_url 单一事实源——scheme/内网字面量/端口,POST 即拒
400「仅支持公网网站地址」) → task.start;异常映射 ImportRateLimited→429 /
ConcurrentLimit→409 / LookupError→404 / ValueError→409(str(exc) 作
detail,任务层白话文案透出)。GET 五键 status/phase/pages/draft/error,
(slug,task_id) 联合索引即越权防线,过期 404「任务不存在或已过期」。
main.py 照 config_routes 位置挂载。测试 15 条(管线全打桩)。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 21:33:00 +08:00 |
|
浅念
|
e1e97dac2c
|
fix(site-import): FetchError 白话化映射(spec §6 行1)+ 预算语义注记
_pipeline 增 FetchError 分支(先于通用异常兜底):入口页不可达/超时——
最高频真实失败路径——映射白话文案「网站打不开或响应太慢——检查 URL」
+ phase=crawl(不可 retry);ImportTask docstring 的抓取失败归档口径
同步对齐。crawler 模块 docstring 注记 MAX_PAGES 预算语义(只计成功入编
页,链接农场广度消耗由总超时/并发/频控三层兜底)。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 21:16:46 +08:00 |
|
浅念
|
3daabd7866
|
docs: Task7 消费方备忘(异常映射/轮询字段)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 21:11:22 +08:00 |
|
浅念
|
8f2a73c5d4
|
feat(site-import): 抓取编排与内存任务表
crawler:BFS ≤10 页(深度 ≤2)+ 入口双重门(非 html 零页/SPA 空壳)+
薄子页跳过 + CSS/logo 15s 追抓(MIME+魔数双验 ≤2MB → base64 data URL)
+ 总文本 <1K 内容不足 + 主色默认 #066fc0 回退;logo 相对路径对入口绝对化。
task:(slug, task_id) 联合索引内存表 + 30 分钟惰性清理 + 强引用防 GC +
全平台并发 ≤2(复活同占名额)+ 频控 3 次/15min(新建与 retry 同计,
SlidingWindowCounter 同款独立实例)+ 7 分钟总超时兜底(生成段超时标
generate 可 retry=generate 复活不重抓)+ 内容不足三触发失败文案映射。
conftest 增 autouse 复位夹具(任务表/频控单例跨测试隔离)。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 20:57:50 +08:00 |
|
浅念
|
2e40901d26
|
docs: Task6 消费方备忘(build签名/超时语义/es降级)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 20:26:03 +08:00 |
|
浅念
|
57a9d3f344
|
fix(site-import): specs_published 严格 is True 判定(字符串false防静默错分支)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 20:25:40 +08:00 |
|
浅念
|
e924b3a6a4
|
feat(site-import): 两段生成器与数字校验器
Task 5:app/platform/site_import/generator.py——AI 两段(行业分析/
内容填槽,GEN1/GEN2 系统提示含数据边界声明与 JSON 严格指令)+
数字校验器(全半角/单位/千分位/波浪号归一比对,违例剔除+孤立单位
清理)+ spec §4 草稿组装(占位符填槽/出厂默认兜底/规格公开分支/
模板残留剔除/墙尾巴三语 es 降级 null)。create_provider 加可选
max_tokens 透传(默认 None 既有调用零影响);MAX_TOKENS_TARGET=8192
(Task 1 探针结论)。AI 调用 wait_for 120s 包裹,超时不吃重试预算。
测试 38 条(provider 全 fake),全量 774 passed + 2 skipped。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 20:10:16 +08:00 |
|
浅念
|
255c273f6b
|
docs: Task5 消费方备忘(占位符实数/双填/语言分统称)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 19:44:33 +08:00 |
|
浅念
|
70e1355489
|
feat(site-import): 行为骨架模板与 few-shot 语料
- template/ 四件套:system/extractor/evaluator 骨架 + placeholders.json 占位符清单
(system 15 个占位符,固定段与 jiancai 原文逐字一致——行级来源审计 0 缺失)
- fewshot/ 语料摘录:yotaienergys/televicsic 两生产租户四件套行业化片段
(10592 字节 ≤18000 上限),README 含来源声明与数据治理记档
- tests/test_site_import_template.py:行业残留黑名单/占位符对称/红线锚点/
行级来源/fewshot 尺寸与用途段守卫,7 条
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 19:35:08 +08:00 |
|
浅念
|
74c2915f25
|
fix(site-import): extract 清洗未闭合块/style 守卫/logo 日期钉位
评审收口三项:clean_html 配对块清理后兜底删 EOF 未闭合块(>500KB
截断防 script/style 泄漏误判 is_thin,顺序钉死配对先行);style 属性
正则补 \s 守卫(data-style 不参与配色计数);FIXTURE_WP 旧日期 logo
前置使日期优先真被甄别(首现即胜的伪绿不再成立)。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 19:06:57 +08:00 |
|
浅念
|
c44aad6abd
|
docs: Task6 消费方备忘(默认色/入口去重/截断兜底)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 19:00:44 +08:00 |
|
浅念
|
00614876d8
|
feat(site-import): HTML 清洗与抽取纯函数
spec §3.1 Task 3:clean_html(去 script/style/nav/footer/header/注释 +
空白折叠 + 8K 截断)、extract_color(内联 style+CSS 合并计数,白黑灰
排除,平票首现)、extract_logo_url(/YYYY/MM/ 日期新者胜出)、
extract_contacts(wa.me 归一 E164 + mailto)、find_residue(模板残留
清单)、discover_links(同源绝对化去锚去询,关键词稳定排前)、is_thin。
零新依赖(stdlib regex),纯函数无 IO,15 测试钉位。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 18:51:04 +08:00 |
|
浅念
|
2a2485fc07
|
fix(site-import): BLOCKED_NETS 补 v6 未指定/组播/保留段与 NAT64
- ::/128(v6 版 0.0.0.0,此前两层防线均放行)+ 224.0.0.0/4(组播)
+ 240.0.0.0/4(保留/广播,含 255.255.255.255)+ 64:ff9b::/96(NAT64)
+ 198.18.0.0/15(基准段)
- 测试 +9:六段参数化钉位、http://[::]/x URL 层拒绝、重定向协议切换
(302→ftp://)第二跳拦截、DNS rebinding 端到端(真实 client 仅打桩
getaddrinfo 返 10.x,证明连接层校验先于连接发生)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 18:37:05 +08:00 |
|
浅念
|
9f556ebe95
|
feat(site-import): SSRF 连接层校验 fetch 原语
- ValidatingBackend:connect_tcp 处 anyio.getaddrinfo 解析→禁段校验→
只连已验 IP 字面量(anyio 对 IP 字面量跳过 DNS,闭合 rebinding TOCTOU;
TLS/SNI 由 httpcore 以原 hostname 包,证书校验不受影响)
- 双层防线:fetch URL 层预检(scheme/host/端口白名单+IP 字面量禁段)
+ 连接层逐跳 DNS 后校验;手动重定向 ≤5 跳每跳重校验
- 私有口(_pool 替换/AnyIOStream/异常映射)由版本探针测试钉位
- tests/test_safe_fetch.py 29 条:禁段参数化/连接层拒绝/重定向私网拦截/
上限边界/请求真实路由经校验后端(anyio 层打桩离线全链路)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 18:17:19 +08:00 |
|
浅念
|
0d6a82ba14
|
feat(glm): max_tokens 可选透传(site-import 前置)
max_tokens 探针结论: 8192 可用(glm-4-flash 实测 max_tokens=8192 调用成功返回,finish_reason=stop;Task 5 可按 8192 取值)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 17:23:36 +08:00 |
|
浅念
|
29953b9fc8
|
docs: site-import 计划评审收口(6 硬伤+8 建议)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 16:57:55 +08:00 |
|
浅念
|
196df2dea7
|
docs: 网站自动导入实施计划(10 任务 5 批)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 16:46:49 +08:00 |
|
浅念
|
45b0ff6891
|
docs: site-import spec 复审建议四项(测试覆盖/时间口径/max_tokens 目标值/非 HTML 入口映射)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 16:37:03 +08:00 |
|
浅念
|
2942a8d511
|
docs: site-import spec 新视角评审收口(7 硬伤+9 建议:品牌四件生成路径/审核页墙尾巴区/POST 限流/超时对齐/anyio/模型上限/空值兜底等)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 16:33:53 +08:00 |
|
浅念
|
0fe12b261c
|
docs: site-import spec 用户终审九项补强(主色排除/logo 格式/总超时/retry形状/联合索引/JSON容错/内容不足/UX细节/中文关键词)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 16:22:37 +08:00 |
|
浅念
|
f29f4bc3d6
|
docs: site-import spec 终审两个文案 nit(API 数/retry 语义引 §3.3)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 16:16:58 +08:00 |
|
浅念
|
13e6c06c4d
|
docs: site-import spec 评审收口(403 语义/es 尾巴/SSRF 连接层实现细节/GC 坑等)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 16:14:48 +08:00 |
|
浅念
|
ff5095168e
|
docs: 网站自动导入知识库设计 spec
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 16:02:32 +08:00 |
|
浅念
|
6b6f35d64f
|
chore(deploy): compose 宿主端口 env 化(APP_HOST/APP_PORT,默认 127.0.0.1:8018)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 09:54:19 +08:00 |
|
浅念
|
f6a8d51aa0
|
chore: 收口——终审 Minor 2 注释修正 + 各 Batch 完成记档
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-19 20:00:48 +08:00 |
|
浅念
|
9315dba228
|
docs(deploy): 共享域名模式部署工件
模板:共享域名 server 块注释示例(kefu.example.com 占位,WS 升级头
落 regex location ^/t/[a-z0-9-]+/ws/——路径模式 WS 真实路径带 /t 前缀);
XFF 追加式语义注记(登录限流取末段,勿改覆盖式);--root-path 禁用
边界(root_path 前移 raw_path,路径前缀解析永不命中)。
手册:§3.6 共享域名模式(概念/零 DNS 接入流程/地址形态表/无尾斜杠
404 语义/部署注记三条);§6.5 加租户补共享域名零反代路径;1Panel
注记补 ws.conf regex 形态。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-19 19:44:46 +08:00 |
|
浅念
|
e1eae007b4
|
feat(admin): 创建向导域名可跳过(纯路径模式租户)
步骤②本就无强制域名校验(validateWizardStep 只门控步骤 0/2,
提交侧 filter(Boolean) 空列表即 domains:[],后端 default_factory=list
默认空)——本次只补文案引导:ElStep 标题加(可跳过)、步骤内 tip 写明
留空即共享域名路径模式租户(嵌入代码在配置中心-品牌与外观生成)、
头注释同步。向导无摘要步骤,域名数 0 展示属正常,均无需改动。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-19 19:37:35 +08:00 |
|
浅念
|
5813fc91c7
|
feat(admin): 嵌入代码双形态 + shared_widget_domain 平台键
- 后端 GET /api/platform/settings/widget-domain:读平台设置键
shared_widget_domain(settings_store 内存快照,PUT settings 后热刷新
即时可见);platform_user 两种角色可读(超管配置/租户管理员生成嵌入
代码——与 settings CRUD 的 require_super 不同,非密钥无敏感面);
空串/非字符串视同未配置 → null
- config/center 嵌入卡双形态(spec 2026-10-19 §5):域名形态 +
共享域名形态(/t/<slug>/static/widget.js,路径前缀即租户标识);
可用性规则(两料齐双形态/无域名仅共享/共享未配仅域名/都无引导文案)
与生效态回退;data-site 两形态通用
- normalizeSharedDomain 主机名字符集校验(拒引号/尖括号/空格——防
配置侧把恶意字符注入生成的 script src 串)+ buildEmbedCode 纯函数,
vitest 6 例钉位
- 平台设置页新增「共享域名」组(shared_widget_domain 推荐键,表驱动
渲染自动生效);settings API 模块加 getWidgetDomain
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-19 19:24:56 +08:00 |
|
浅念
|
f938118fee
|
feat(limits): 限流器过期键周期清扫(内存上限铁律)
LoginLimiter._fails 与 rate_limit._buckets 只增不删——懒清理只覆盖被
回访的键,扫号换 IP/设备轮换产生的键永不被回访 → 进程长跑缓慢累积。
两处各加 sweep()(全表清「全部时间戳均已出窗」的键,窗沿 <= 与既有
保留判据 t > now - W 同沿),main.lifespan 起周期任务(300s loop)
启动创建/关停取消(cancel 后 await 落地,不留 pending task)。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-19 18:59:22 +08:00 |
|
浅念
|
4f58398ac2
|
feat(auth): 登录限流 IP 取 XFF 末段(防首段轮换伪造)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-19 18:40:47 +08:00 |
|
浅念
|
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 |
|