Ember Moth's Blog

为世界上所有的美好而战!

TL;DR — NovelEvolver 最核心的设计,不是“在写作工具旁边接了一个 LLM”,而是把小说项目本身建模成一个带世界状态的本地工作区:正文树负责承载创作结构,时间锚点负责切分故事状态,辅助资料按时间层叠加成快照,底层再用 bare Git repo + SQLite virtual workdir 管理当前态和历史态。这样一来,分支、提交、语义化 diff、以及项目感知 AI,才真正建立在同一套数据模型之上。


阅读全文 »

TL;DR#169 对我来说不是“加一个插件入口”,而是把 PPanel 从一个固定功能集的后端,往“可扩展平台”推进了一步。我最后选择了 WASM + wazero + WASI 这条路线:宿主只暴露受控能力,插件通过 plugin.protoenv.* host functions 跟宿主通信;HTTP 侧不直接热改主路由树,而是用固定 dispatcher 做动态分发;同时,我还把开发侧一起补齐,做了 ppanel-sdk,用 Rust 宏、host wrapper 和一个轻量 async runtime 把底层 ABI 封装掉。现在回头看,#169 最难的其实不是“让插件跑起来”,而是在第一版里接受很多保守取舍:实例池先锁在 1,异步先把 ABI 形状立住,数据库能力先做白名单收敛。也正因为这些取舍,这套系统最后才能比较稳地落地。


阅读全文 »

TL;DR — 这次迁移不是“把 import 从 gin 改成 hertz”这么简单,而是一次分层完成的渐进式重构:先抽离 transport 层,再做 Gin 兼容层,最后把热点路由和关键中间件原生化到 Hertz。中间我们甚至短暂用 Fiber 验证过 fallback 方案。最重要的收获不是“换了框架”,而是沉淀出一套对存量 Go 服务可复制的迁移方法。


阅读全文 »

TL;DR — 为已有项目新增第二种数据库支持,工作量远大于”加个驱动依赖”。
本文记录 ppanel-server 从 MySQL-only 到同时支持 MySQL + PostgreSQL 的完整改造:重构配置抽象层、拆分两套迁移 DDL、修复 model 层 20+ 个 MySQL 专属写法、顺带优化搜索索引。
涉及 2 个 PR、6 次提交、约 40 个文件改动。最有价值的发现是:引入异构数据库测试,意外暴露了一个 MySQL 下潜伏了半年的隐性 bug。


阅读全文 »
0%