<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>长鸿笔记</title><description>Harper 的技术笔记。专注于后端逻辑与自动化实现。</description><link>https://changhorizon.com/</link><item><title>一个需求从聊天到上线 — AI Agent 驱动 Calendly 预约功能的全过程</title><link>https://changhorizon.com/posts/0x1b-calendly-integration-from-chat-to-production/</link><guid isPermaLink="true">https://changhorizon.com/posts/0x1b-calendly-integration-from-chat-to-production/</guid><description>从 IM 中的一行需求消息开始：销售团队要在网站上嵌入 Calendly 预约。Agent 发现了旧页面中的语义冲突、提出了几种交互方案、实现了环境驱动的配置方案，并在上线后追踪了外部依赖阻塞。</description><pubDate>Fri, 24 Jul 2026 04:00:00 GMT</pubDate></item><item><title>为 AI Agent 设计跨运行时会话追踪协议 — track-agent-sessions 的构建过程</title><link>https://changhorizon.com/posts/0x1a-agent-session-tracking-protocol/</link><guid isPermaLink="true">https://changhorizon.com/posts/0x1a-agent-session-tracking-protocol/</guid><description>构建一个可复用的 Agent Skill，用于追踪会话生命周期：登记、结束、中断恢复，并在 Codex 和 opencode 两个运行环境之间保持状态一致性。记录协议设计、安装验证和边界决策。</description><pubDate>Fri, 17 Jul 2026 04:00:00 GMT</pubDate></item><item><title>把个人经验编译为 AI Agent 可复用资产 — Praxis 知识库的架构思路</title><link>https://changhorizon.com/posts/0x19-praxis-knowledge-compiler-for-ai-agents/</link><guid isPermaLink="true">https://changhorizon.com/posts/0x19-praxis-knowledge-compiler-for-ai-agents/</guid><description>构建一个以 AI Agent 为目标用户的知识库：从真实问题出发，经过调查、决策、验证，最终沉淀为可复用的认知模型和 Agent Skill。记录整个架构的取舍过程。</description><pubDate>Fri, 10 Jul 2026 04:00:00 GMT</pubDate></item><item><title>mysqladmin ping 骗了我——Unix socket 和 TCP 之间的调试陷阱</title><link>https://changhorizon.com/posts/0x18-mysqladmin-ping-tcp-debugging/</link><guid isPermaLink="true">https://changhorizon.com/posts/0x18-mysqladmin-ping-tcp-debugging/</guid><description>MySQL 容器启动了，mysqladmin ping 返回 alive，应用却说 connection refused。排查发现 ping 走的是 Unix socket，TCP 端口根本还没就绪。记录这个误导了我好几个小时的调试经历。</description><pubDate>Sun, 28 Jun 2026 05:00:00 GMT</pubDate></item><item><title>优惠码批量生成系统的设计 — Stripe Promotion Codes + 自建管理层</title><link>https://changhorizon.com/posts/0x17-stripe-promo-code-system/</link><guid isPermaLink="true">https://changhorizon.com/posts/0x17-stripe-promo-code-system/</guid><description>在 Stripe Checkout 基础上构建优惠码批量管理系统：批次管理、三档折扣、带前缀的编码规则、一键导出 CSV，以及设计过程中&quot;哪些功能留给 Stripe，哪些自己做&quot;的边界决策。</description><pubDate>Thu, 04 Jun 2026 09:00:00 GMT</pubDate></item><item><title>库存可用量计算重构 — 把散落的硬编码公式收敛为一句话</title><link>https://changhorizon.com/posts/0x16-inventory-formula-refactoring/</link><guid isPermaLink="true">https://changhorizon.com/posts/0x16-inventory-formula-refactoring/</guid><description>记录一次 WMS 系统中库存可用量计算公式的重构：从 22 处散落的硬编码逻辑收敛为可配置的业务规则，让&quot;预留量是否参与可用量计算&quot;成为客户级别的开关。</description><pubDate>Mon, 01 Jun 2026 16:00:00 GMT</pubDate></item><item><title>为 AI 编码助手设计 Git 工作流规则 — 从混乱到可控</title><link>https://changhorizon.com/posts/0x15-git-skill-for-ai-agents/</link><guid isPermaLink="true">https://changhorizon.com/posts/0x15-git-skill-for-ai-agents/</guid><description>记录为 AI 编码 Agent 设计 Git 行为规则的过程：从分支权限、提交约束、推送禁令到边界场景处理，形成一套让非人类协作者也能安全操作 Git 的工作流规范。</description><pubDate>Tue, 26 May 2026 14:20:00 GMT</pubDate></item><item><title>生产服务器备份审计与体系建设 — 从 5 台零轮转到全线 7 天保留</title><link>https://changhorizon.com/posts/0x14-server-backup-audit/</link><guid isPermaLink="true">https://changhorizon.com/posts/0x14-server-backup-audit/</guid><description>记录一次对 5 台生产服务器的只读 SSH 巡检与备份体系建设全过程：从发现 2 台完全无备份、5 台均无轮转、3 台密码明文泄露，到分类修复部署、统一 7 天保留策略、释放 52GB 磁盘空间。</description><pubDate>Tue, 19 May 2026 10:30:00 GMT</pubDate></item><item><title>无框架 PHP 项目的渐进式工程化改造</title><link>https://changhorizon.com/posts/0x13-php-project-refactoring/</link><guid isPermaLink="true">https://changhorizon.com/posts/0x13-php-project-refactoring/</guid><description>记录如何将一个扁平结构的 PHP 营销站点改造为具有 Composer 自动加载、PSR-4 命名空间、public/ 入口隔离和视图层的工程化项目，而不引入重量级框架。</description><pubDate>Thu, 14 May 2026 14:30:00 GMT</pubDate></item><item><title>RAG + 本地/在线 LLM：一个可离线的 AI 客服架构</title><link>https://changhorizon.com/posts/0x12-rag-ai-customer-service-architecture/</link><guid isPermaLink="true">https://changhorizon.com/posts/0x12-rag-ai-customer-service-architecture/</guid><description>记录如何为一个 SaaS 营销站搭建 RAG 驱动的 AI 客服系统：FastAPI 后端、FAISS 向量检索、本地 Ollama + 可选在线 LLM，以及从纯在线到本地优先的架构演进。</description><pubDate>Wed, 13 May 2026 14:00:00 GMT</pubDate></item><item><title>「未实现」还是「不实现」：PPS 脚手架的设计选择</title><link>https://changhorizon.com/posts/0x11-pps-design-choices/</link><guid isPermaLink="true">https://changhorizon.com/posts/0x11-pps-design-choices/</guid><description>PPS 是一个 PHP 脚手架工具，它不做占位符替换、不创建代码目录、在构造函数里做 I/O。当 AI 把这五个设计点列为 bug 时，我才意识到——这些选择不是没有理由的，但如果不把理由写出来，别人就会用自己的框架来评判。</description><pubDate>Tue, 12 May 2026 13:00:00 GMT</pubDate></item><item><title>全量 Vendor Rebrand：9 个 PHP 包从 hizpark 到 changhorizon 的实践记录</title><link>https://changhorizon.com/posts/0x10-vendor-rebrand-records/</link><guid isPermaLink="true">https://changhorizon.com/posts/0x10-vendor-rebrand-records/</guid><description>记录一次完整的 PHP 包生态 vendor 切换过程：9 个已发布包、跨包依赖、命名空间变更、CI 适配、版本号策略——以及关于 composer.lock 和脚手架设计哲学的思考。</description><pubDate>Tue, 12 May 2026 11:00:00 GMT</pubDate></item><item><title>mPDF 6.0 动态图片渲染踩坑：当 base64、PNG、绝对路径全都失效</title><link>https://changhorizon.com/posts/0x0f-mpdf-6-dynamic-image-rendering/</link><guid isPermaLink="true">https://changhorizon.com/posts/0x0f-mpdf-6-dynamic-image-rendering/</guid><description>在 PHP 5.6 遗留系统中用 mPDF 6.0 生成含动态签名图片的工单 PDF。本以为 base64 data URI 或绝对路径就能解决，结果 PNG 在 mPDF 中怎么都渲染不出来。本文记录四种方案的完整排查过程和最终解决方案。</description><pubDate>Tue, 05 May 2026 12:00:00 GMT</pubDate></item><item><title>在 PHP 5.6 遗留系统中设计 Shopify 模块：架构取舍</title><link>https://changhorizon.com/posts/0x0e-shopify-module-architecture-legacy-constraints/</link><guid isPermaLink="true">https://changhorizon.com/posts/0x0e-shopify-module-architecture-legacy-constraints/</guid><description>在 PHP 5.6、无框架、无 Composer 的老旧 WMS 中设计一个多层架构的 Shopify 集成模块。本文记录分层设计、GraphQL 集成、多店铺 OAuth 等关键决策背后的取舍逻辑。</description><pubDate>Sat, 02 May 2026 15:00:00 GMT</pubDate></item><item><title>工单系统的重生：从 Demo 到 WMS 集成</title><link>https://changhorizon.com/posts/0x0d-wms-workorder-architecture/</link><guid isPermaLink="true">https://changhorizon.com/posts/0x0d-wms-workorder-architecture/</guid><description>一个 5 字段的 stub 表单如何通过完整设计重构为可用的工单系统？记录从 Demo 前端到旧系统后端的架构适配全过程，包括数据库规范化、替换决策和 PHP 5.6 下的技术约束。</description><pubDate>Sat, 02 May 2026 13:00:00 GMT</pubDate></item><item><title>设计经验的容器：AI Skill 的迭代过程</title><link>https://changhorizon.com/posts/0x0c-skill-iteration-process/</link><guid isPermaLink="true">https://changhorizon.com/posts/0x0c-skill-iteration-process/</guid><description>从生成日报到设计完整的工作流规范——记录一个 AI Skill 如何通过对话迭代逐步成型，以及从中总结的 Skill 设计三原则。</description><pubDate>Sat, 02 May 2026 11:00:00 GMT</pubDate></item><item><title>三层防御：设计安全的危险操作</title><link>https://changhorizon.com/posts/0x0b-three-layer-defense/</link><guid isPermaLink="true">https://changhorizon.com/posts/0x0b-three-layer-defense/</guid><description>一个删除按钮引发的思考——Controller 校验、Repository SQL 保护、DB 约束兜底，三层防御模式让&quot;手滑&quot;不会变成&quot;灾难&quot;。</description><pubDate>Fri, 01 May 2026 14:00:00 GMT</pubDate></item><item><title>Shopify OAuth 跨账号授权：一个调试中的意外发现</title><link>https://changhorizon.com/posts/0x0a-shopify-oauth-cross-account-auth/</link><guid isPermaLink="true">https://changhorizon.com/posts/0x0a-shopify-oauth-cross-account-auth/</guid><description>用错误的 App 凭据居然授权成功了？一次 Shopify OAuth 调试中发现的跨账号授权机制。原来 client_id 是应用的全域身份证，绑的不是账号而是应用本身。</description><pubDate>Fri, 01 May 2026 11:00:00 GMT</pubDate></item><item><title>从 Pine 到回测 — 构建本地交易信号系统</title><link>https://changhorizon.com/posts/0x09-local-trading-signal-system/</link><guid isPermaLink="true">https://changhorizon.com/posts/0x09-local-trading-signal-system/</guid><description>记录如何搭建一个本地交易信号系统：SQLite 数据仓库自动同步多周期 K 线、Python DSL 策略框架、回测引擎，以及将 TradingView Pine Script 策略移植到本地回测的完整过程。</description><pubDate>Thu, 30 Apr 2026 10:30:00 GMT</pubDate></item><item><title>扩展 AI 编码助手的本地能力 — 浏览器自动化与共享终端</title><link>https://changhorizon.com/posts/0x08-extend-ai-agent-local-capabilities/</link><guid isPermaLink="true">https://changhorizon.com/posts/0x08-extend-ai-agent-local-capabilities/</guid><description>记录如何为 AI 编码助手集成浏览器自动化（playwright-cli）和共享终端（tmux）能力，实现从纯文本交互到操作本地 Chrome 浏览器、协作远程服务器的完整工具链。</description><pubDate>Wed, 29 Apr 2026 11:00:00 GMT</pubDate></item><item><title>从单体到管道：解耦订单同步与发货单创建</title><link>https://changhorizon.com/posts/0x07-decouple-order-sync-and-shipment-creation/</link><guid isPermaLink="true">https://changhorizon.com/posts/0x07-decouple-order-sync-and-shipment-creation/</guid><description>一个 PHP 5.6 遗留系统中，如何将一条 600 行的同步脚本拆解为两个独立步骤，以及为什么这次解耦暴露了三个原本被掩盖的 P0 级安全问题。</description><pubDate>Tue, 28 Apr 2026 12:00:00 GMT</pubDate></item><item><title>WMS 与 Shopify 的数据交响：订单同步全链路解析</title><link>https://changhorizon.com/posts/0x06-wms-shopify-order-sync-architecture/</link><guid isPermaLink="true">https://changhorizon.com/posts/0x06-wms-shopify-order-sync-architecture/</guid><description>从客户在 Shopify 下单到仓库发货再到物流回传，完整解析一个 PHP 5.6 遗留系统中订单同步的全链路数据流 —— 没有产品同步、没有库存推送，为什么系统依然正常运转？</description><pubDate>Tue, 28 Apr 2026 10:30:00 GMT</pubDate></item><item><title>本地开发 SSL 证书踩坑实录 — 通配符、SAN 与 Chrome 信任链</title><link>https://changhorizon.com/posts/0x05-local-dev-ssl-cert-troubleshooting/</link><guid isPermaLink="true">https://changhorizon.com/posts/0x05-local-dev-ssl-cert-troubleshooting/</guid><description>一个本地开发 HTTPS 证书问题的完整排查记录：Chrome 报 ERR_CERT_COMMON_NAME_INVALID 而 curl 正常，最终定位到通配符 SAN 不匹配裸域名、Chrome 证书存储策略变更、多同名 CA 冲突三重问题。</description><pubDate>Mon, 27 Apr 2026 12:30:00 GMT</pubDate></item><item><title>图片比例自动归类与裁剪系统设计</title><link>https://changhorizon.com/posts/0x04-image-ratio-auto-classification/</link><guid isPermaLink="true">https://changhorizon.com/posts/0x04-image-ratio-auto-classification/</guid><description>从零设计一个稳定、可靠且具备等幂性的图片处理系统，完整记录设计目标、ETL 事务模型和异常处理策略。</description><pubDate>Mon, 27 Apr 2026 10:00:00 GMT</pubDate></item><item><title>构建自动化的 Build in Public 工作流</title><link>https://changhorizon.com/posts/0x03-build-in-public-workflow/</link><guid isPermaLink="true">https://changhorizon.com/posts/0x03-build-in-public-workflow/</guid><description>记录如何利用 opencode 的 AGENTS.md、Skill 和自定义脚本，构建一套从日常编码到博客发布的自动化管线，实现 build in public 的低成本持续输出。</description><pubDate>Sun, 26 Apr 2026 10:30:00 GMT</pubDate></item><item><title>基于 git-archive 的项目打包</title><link>https://changhorizon.com/posts/0x02-git-pack/</link><guid isPermaLink="true">https://changhorizon.com/posts/0x02-git-pack/</guid><description>记录开发 git-pack 工具的过程，通过封装 git-archive 实现多格式扩展、智能版本命名及排除模式注入的原子化打包方案。</description><pubDate>Tue, 24 Mar 2026 13:00:00 GMT</pubDate></item><item><title>系统观测与 Conky 配置</title><link>https://changhorizon.com/posts/0x01-conky-setup/</link><guid isPermaLink="true">https://changhorizon.com/posts/0x01-conky-setup/</guid><description>记录在 Deepin Linux 下使用 Conky 构建系统监控底座的过程，包括多时区显示与出口 IP 实时抓取的实现。</description><pubDate>Tue, 24 Mar 2026 10:30:00 GMT</pubDate></item></channel></rss>