从制造角度读几何
同一个圆柱面,是折弯、是孔壁、还是去毛刺圆角,取决于它怎么被做出来。折弯认的是「内外两张圆柱面半径差恰好等于料厚」这一对同轴关系——不在配对里的圆柱面,一次性排除掉孔壁与装饰圆角。
关键数走两条独立路径
展开毛坯用体积恒等式兜底:塑性变形材料不增不减,所以毛坯净面积恒等于 V/t。这条式子没有可调参数,对不上就说明漏摊了面板或重复计入——它抓出过 7 处算法缺陷。
不确定的不装懂
K 因子从几何推不出来,所以毛坯给的是区间不是一个数;翻边孔的预冲孔并列给出两条独立算法的结果,标成待裁定项。该由人定的,标出来交给人。
非钣金件也不空手而归
铣削件 / 回转体 / 铸件照样给出类型判断与依据、孔与凸台清单。钣金专用口径此时明确标注「不适用」——而不是填个 0 让人误以为「这是块没折弯的钣金」。
整包 ZIP 传上来,来源不丢
一包图纸拖进来自动解包,目录并进文件名(订单A/支架/左板.step → 订单A__支架__左板.step),并记下它来自哪个包、包内原路径——之后按压缩包一键筛出「这单有哪些件」。路径穿越、解压炸弹、中文名乱码都已处理。
一份数据,多种取用
60+ 字段、10 个分组,一份定义同时供网页表格、Excel/CSV 导出与 JSON API。看到的列就是导出的列,不存在两边对不上。
结果落盘,重启不丢
解析结果与缩略图写到磁盘,重启即用。缓存的钥匙里带着计算代码指纹:改算法必然作废,改样式、改译名不掉——用旧版本算出来的数,比重算慢糟得多。
除几何内核外零依赖
只依赖 OCCT(读 STEP、算几何),其余全部标准库——连 xlsx / CSV 的写出器、ZIP 解包、账号体系都是现写的。装得上、跑得动、好审计。
测试环境上域名:共享账号、分开数据(2026-08-17)
用户:"线上正式版本用现在的域名,dev 环境改成用 metalmaster-dev 的域名。 两个环境共享同一套用户名和密码,但是底层的数据要区分开。"
- 测试环境
metalmaster-dev.ymp1.yuanmu-ai.com(分支 dev,工作树 MetalMaster-dev,数据根 /srv/metalmaster-dev,端口 8766)。nginx 配置 与生产同一套代理规则,限速区名/SSL 会话缓存名错开,另加 X-Robots-Tag: noindex(两个站内容高度相似,别互相抢排名)。证书按 「先装只监听 80 的 acme 配置、签完再启用 443」两步走,解开"证书与 nginx 互为前提"的环。 - 账号共用、数据分开:
MM_USERS_FILE 只把 users.json 一个文件指到 共享位置。只共享用户表——sessions/activity 每次请求都在写,而 _save 是整份重写不是追加,两个进程共用一个文件必然互相覆盖。 - 用户表热同步(真机联调 401 才暴露的缺口):用户表只在启动时读进内存, 于是"共享"只在重启那一瞬间成立。补
sync_users():认证前 stat 版本戳 (mtime_ns + size),文件没动什么都不做。不能只在"查无此人"时同步—— 改密时人还在表里、只是摘要过期;写表前也先同步,别覆盖对方刚建的号。 - 门禁 2 条(共享语义与数据隔离、跨进程热同步),变异 5 刀全红。
落地页开更新日志与博客;分支策略与 CI 上闸门(2026-08-17)
用户:"landing 页里面也增加一个 blog 和 changelog 的环节……都是静态的信息, 每次更新发布之前都应该把它们刷新一下"、"未来上线应该有一个 PR 的过程"、 "只有合到 main 上才能正常安装使用,其他的合到 dev 分支在测试环境做"。
/changelog 与 /blog(公开静态页,与 /welcome 同级,不碰用户数据): 更新日志直接读仓库 CHANGELOG.md 渲染——发布带着仓库走,页面天然是 最新的,不存在"忘了刷新"的第二份;博客读 docs/blog/*.md。落地页新增 「最近更新」「博客」两节各列最新三条。服务端 md 渲染器与助手气泡同一条 安全纪律(先整体转义、后替换),slug 走白名单。首发两篇:墨迹一本帐、 助手看得见零件也听得见意见。- 分支策略落成闸门:
deploy/restart.sh 开头查分支,非 main 拒绝部署 (紧急逃生 MM_ALLOW_BRANCH=1);新增 deploy/restart-dev.sh 起测试环境 (/srv/metalmaster-dev :8766,与生产数据根/端口隔开);CI push 触发加 dev;docs/RELEASE.md 写清 PR 流程与发布前清单(含"刷新静态信息")。 规矩不靠自觉——tests/test_release_process.py 5 条钉死,变异 4 刀全红。 - 修一处让 CI 3.10 矩阵必炸的语法:装配页标题用了嵌套 f-string 带转义 引号(PEP 701,3.12+),本机 3.12 完全看不出来。顺手加全仓体检门禁: 按
pyproject 声明的 Python 下限扫,声明支持 3.10 就不许偷用 3.12 语法。
助手顺手收集产品反馈(2026-08-17)
用户:"助手只需要筛选一下是不是跟产品优化有关的问题,如果有的话就直接 存下来。未来你可以通过这些反馈来持续优化。"
- 工具箱第五件
save_feedback:模型在对话里听到产品问题或改进建议 (数据算错、功能不好用、希望增加什么)就提炼成一两句存进反馈本,并告诉 用户已记录——不用等用户点「反馈」按钮。筛选标准写在系统提示里:普通 提问、闲聊、对回答的追问不记。 - 与手动反馈同一本帐(feedback.jsonl)、同一个后台,带页面定位与算法 指纹;来源标
via: copilot,后台显示「·助手代录」——处理时知道这是 模型提炼过的转述,不是用户原文。这是工具箱里唯一的"写",写的只是 反馈登记,不碰分析数据、不触发计算。 - 真机验证:一句"利用率要是能按整张钢板套料算就好了"被提炼落盘 (模型自己补全了"排版嵌套"的术语);紧接着的"板厚是多少"没被误存。 变异 2 刀(不标来源 / 装存没存)全红。
2026-08-17墨迹一本帐:工程图排布的整体避让
出工程图最难的不是画几何,是把标注放对地方:尺寸数字、零件气球、剖切字母、基准符号,每一样都要找一块没被占用的空地。此前我们的避让是零散的——气球看气球的登记,外移数字看数字的登记,视图名看自己的包围盒。各记各的帐,帐本之间就是盲区:右上角
2026-08-17让页面助手看得见零件,也听得见意见
MetalMaster 的每个分析页面右下角有一个对话助手。它了解当前页面已算好的一切:板厚、折弯明细、孔表、工艺类型结论。但直到最近,它有两个短板:认不出零件的长相,也留不住用户随口说出的意见。这周把两块都补上了。