浅念
|
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 |
|
浅念
|
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 |
|
浅念
|
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 |
|
浅念
|
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 |
|
浅念
|
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 |
|
浅念
|
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 |
|