<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>ZengLiangYi Blog</title>
    <description>Frontend engineering, AI coding and open-source practice</description>
    <link>https://zengliangyi.com</link>
    <atom:link href="https://zengliangyi.com/en/rss.xml" rel="self" type="application/rss+xml"/>
    <language>en</language>
    <lastBuildDate>Fri, 23 Oct 2026 04:22:12 GMT</lastBuildDate>
    <item>
      <title>Fixing 1px Carousel Seams: Subpixel Layout and Scale Fixes</title>
      <link>https://zengliangyi.com/en/blog/carousel-subpixel-1px-seam/</link>
      <guid>https://zengliangyi.com/en/blog/carousel-subpixel-1px-seam/</guid>
      <description>Debug 1px mobile carousel seams caused by subpixel rounding. Compare negative margins, CSS translation, and scale transforms to eliminate rendering gaps.</description>
      <pubDate>Tue, 13 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>CSS</category>
        <category>Web Development</category>
        <category>Swiper</category>
        <category>Performance</category>
    </item>
    <item>
      <title>Google Indexing in Astro: Incremental Cache-Driven Submissions</title>
      <link>https://zengliangyi.com/en/blog/google-indexing-incremental-cache/</link>
      <guid>https://zengliangyi.com/en/blog/google-indexing-incremental-cache/</guid>
      <description>How to fix Google indexing deadlocks in static Astro sites using incremental cache-driven API submissions, Git SHA hashing, and sitemap lastmod timestamps.</description>
      <pubDate>Tue, 13 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>Astro</category>
        <category>SEO</category>
        <category>Google</category>
        <category>Automation</category>
    </item>
    <item>
      <title>AI Conversation Formats: JSONL Events vs SQLite Snapshots</title>
      <link>https://zengliangyi.com/en/blog/ai-conversation-format-divergence/</link>
      <guid>https://zengliangyi.com/en/blog/ai-conversation-format-divergence/</guid>
      <description>Compare 5 AI adapter formats: separate JSONL events from SQLite keys, and inspect indexed, orphan, and unknown-version chat transcripts in memory stores.</description>
      <pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Node.js</category>
        <category>SQLite</category>
    </item>
    <item>
      <title>How Claude Code, Cursor, Copilot, and Trae Store Chats on Disk</title>
      <link>https://zengliangyi.com/en/blog/ai-conversation-management-options/</link>
      <guid>https://zengliangyi.com/en/blog/ai-conversation-management-options/</guid>
      <description>Compare Claude Code, Cursor, Copilot, and Trae storage paths. Distinguish raw copies from exports, and verify migration retention with test manifests.</description>
      <pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Node.js</category>
        <category>SQLite</category>
    </item>
    <item>
      <title>Five AI conversation parsers: retained fields and loss boundaries</title>
      <link>https://zengliangyi.com/en/blog/ai-conversation-parser-boundaries/</link>
      <guid>https://zengliangyi.com/en/blog/ai-conversation-parser-boundaries/</guid>
      <description>Build an acceptance matrix from Claude Code, Codex, Cursor, Trae, and Copilot parsers, checking tool flags, thinking, order, and snapshot coverage.</description>
      <pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>TypeScript</category>
        <category>Node.js</category>
    </item>
    <item>
      <title>AI SDK Provider Abstraction: Capabilities and Protocols</title>
      <link>https://zengliangyi.com/en/blog/ai-sdk-provider-abstraction/</link>
      <guid>https://zengliangyi.com/en/blog/ai-sdk-provider-abstraction/</guid>
      <description>Test 7 ChatCrystal providers and AI SDK factories with offline mocks for Responses, Chat Completions, embeddings, and structured output rejection.</description>
      <pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Node.js</category>
        <category>TypeScript</category>
    </item>
    <item>
      <title>Bulk import with 1000 conversations: cost and performance checks</title>
      <link>https://zengliangyi.com/en/blog/bulk-import-performance-plan/</link>
      <guid>https://zengliangyi.com/en/blog/bulk-import-performance-plan/</guid>
      <description>Separate parsing, SQL writes, WASM export, and summary queues; use synthetic inputs to check retention and data equivalence.</description>
      <pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>SQLite</category>
        <category>Performance</category>
    </item>
    <item>
      <title>CLI knowledge workflows: exits, JSON contracts, and final states</title>
      <link>https://zengliangyi.com/en/blog/cli-knowledge-workflow/</link>
      <guid>https://zengliangyi.com/en/blog/cli-knowledge-workflow/</guid>
      <description>Check current CLI commands and JSON shapes; reject false success with synthetic process and per-ID state checks before scheduling and recovery.</description>
      <pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>CLI</category>
        <category>Automation</category>
    </item>
    <item>
      <title>Review AI coding conversations: denominators, quality, and reuse</title>
      <link>https://zengliangyi.com/en/blog/conversation-knowledge-retrospective/</link>
      <guid>https://zengliangyi.com/en/blog/conversation-knowledge-retrospective/</guid>
      <description>Audit source and length denominators, false accepts and rejects, and empty samples; separate current filtering, summaries, and measured reuse.</description>
      <pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Knowledge management</category>
        <category>Evaluation</category>
    </item>
    <item>
      <title>Fastify and Electron: Desktop Startup &amp; Shutdown Boundaries</title>
      <link>https://zengliangyi.com/en/blog/fastify-electron-service-lifecycle/</link>
      <guid>https://zengliangyi.com/en/blog/fastify-electron-service-lifecycle/</guid>
      <description>Trace ChatCrystal local, cloud, and onboarding modes, verify CommonJS loading and port contention, and inspect window and shutdown boundaries.</description>
      <pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Node.js</category>
        <category>Electron</category>
    </item>
    <item>
      <title>Graph-Assisted Refactoring: Turning Relational Clues into Checks</title>
      <link>https://zengliangyi.com/en/blog/graph-assisted-refactoring/</link>
      <guid>https://zengliangyi.com/en/blog/graph-assisted-refactoring/</guid>
      <description>Turn note and code graph relations into verifiable fault checks: trace candidate edges, check dependencies, and avoid treating links as proof.</description>
      <pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Knowledge graph</category>
        <category>Testing</category>
    </item>
    <item>
      <title>MCP Boundaries: Discovery, Identity, and Call Permissions</title>
      <link>https://zengliangyi.com/en/blog/mcp-protocol-boundaries/</link>
      <guid>https://zengliangyi.com/en/blog/mcp-protocol-boundaries/</guid>
      <description>Examine Model Context Protocol boundaries: tool discovery, server instance tracking, and execution permissions in reviewable developer environments.</description>
      <pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>MCP</category>
        <category>Node.js</category>
    </item>
    <item>
      <title>SourceAdapter internals: identity, content hashes, and reimport</title>
      <link>https://zengliangyi.com/en/blog/source-adapter-internals/</link>
      <guid>https://zengliangyi.com/en/blog/source-adapter-internals/</guid>
      <description>Trace ChatCrystal’s registry, importer, and remote payload to verify identity, canonical hashes, metadata shortcuts, and parser-version boundaries.</description>
      <pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>TypeScript</category>
        <category>Node.js</category>
    </item>
    <item>
      <title>sql.js WASM Persistence: Memory, Exports &amp; Nested Savepoints</title>
      <link>https://zengliangyi.com/en/blog/sqljs-wasm-persistence/</link>
      <guid>https://zengliangyi.com/en/blog/sqljs-wasm-persistence/</guid>
      <description>Trace ChatCrystal’s database lifecycle with sql.js 1.14.2 fixtures, separating SQL commits, exports, file writes, foreign-key restoration, and nested rollback.</description>
      <pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Node.js</category>
        <category>SQLite</category>
    </item>
    <item>
      <title>Team knowledge sharing: tokens, approval, and instance boundaries</title>
      <link>https://zengliangyi.com/en/blog/team-knowledge-sharing-plan/</link>
      <guid>https://zengliangyi.com/en/blog/team-knowledge-sharing-plan/</guid>
      <description>Separate current cloud tokens from proposed member permissions; test read operations and batch approval on fixtures and define recovery responsibilities.</description>
      <pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Knowledge management</category>
        <category>Security</category>
    </item>
    <item>
      <title>Vectra Vector Search: Metadata, Updates, and Local Cache</title>
      <link>https://zengliangyi.com/en/blog/vectra-search-internals/</link>
      <guid>https://zengliangyi.com/en/blog/vectra-search-internals/</guid>
      <description>Inspect Vectra 0.15.0 query and storage paths with temporary indexes, observing external metadata, files left after cancellation, and instance-cache boundaries.</description>
      <pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Node.js</category>
        <category>SQLite</category>
    </item>
    <item>
      <title>Building an Embedding Service: Text, Chunks, and Commits</title>
      <link>https://zengliangyi.com/en/blog/embedding-service-design/</link>
      <guid>https://zengliangyi.com/en/blog/embedding-service-design/</guid>
      <description>Read ChatCrystal’s actual embedding pipeline, separate text selection, soft chunking, vector validation, and commits, and verify boundaries offline.</description>
      <pubDate>Tue, 06 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>AI</category>
        <category>Node.js</category>
    </item>
    <item>
      <title>Code tooling: the actual roles of Biome, ESLint, and formatting</title>
      <link>https://zengliangyi.com/en/blog/lint-format-tooling/</link>
      <guid>https://zengliangyi.com/en/blog/lint-format-tooling/</guid>
      <description>Read ChatCrystal’s scripts and Flat Config, verify ESLint diagnostics offline, and distinguish syntax rules, type checking, formatting, and CI gates.</description>
      <pubDate>Tue, 06 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>TypeScript</category>
        <category>Node.js</category>
    </item>
    <item>
      <title>A Minimal MCP Server: Register Tools &amp; Verify Stdio Calls</title>
      <link>https://zengliangyi.com/en/blog/mcp-server-implementation/</link>
      <guid>https://zengliangyi.com/en/blog/mcp-server-implementation/</guid>
      <description>Build an offline addition tool with TypeScript SDK, verify protocol discovery and calls, and inspect ChatCrystal adapter integration boundaries.</description>
      <pubDate>Tue, 06 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>MCP</category>
        <category>Node.js</category>
    </item>
    <item>
      <title>Conversation Parsing: JSONL, Events, and SQLite Read Boundaries</title>
      <link>https://zengliangyi.com/en/blog/multi-format-conversation-parsing/</link>
      <guid>https://zengliangyi.com/en/blog/multi-format-conversation-parsing/</guid>
      <description>Trace ChatCrystal parsers with offline fixtures to test line framing and SQLite snapshots, separating decoding from message normalization guarantees.</description>
      <pubDate>Tue, 06 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Node.js</category>
        <category>SQLite</category>
    </item>
    <item>
      <title>Release Engineering: npm, Electron, and Tag-Driven CI</title>
      <link>https://zengliangyi.com/en/blog/npm-release-ci/</link>
      <guid>https://zengliangyi.com/en/blog/npm-release-ci/</guid>
      <description>Trace ChatCrystal release workflows, verify tag plans, package fixtures, and failure exits offline, identifying steps that still require acceptance.</description>
      <pubDate>Tue, 06 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Node.js</category>
        <category>GitHub Actions</category>
    </item>
    <item>
      <title>p-queue tasks: boundaries of limits, retries, and cancellation</title>
      <link>https://zengliangyi.com/en/blog/pqueue-task-queues/</link>
      <guid>https://zengliangyi.com/en/blog/pqueue-task-queues/</guid>
      <description>Read ChatCrystal’s queue and tracker, distinguish task starts from model requests, and verify offline that clearing waiting work does not interrupt active work.</description>
      <pubDate>Tue, 06 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Node.js</category>
        <category>TypeScript</category>
    </item>
    <item>
      <title>SourceAdapter design: separate discovery, scanning, and parsing</title>
      <link>https://zengliangyi.com/en/blog/source-adapter-design/</link>
      <guid>https://zengliangyi.com/en/blog/source-adapter-design/</guid>
      <description>Read ChatCrystal’s adapter and import contracts, verify selective parsing with fixtures, and check registration, enablement, identity, and version boundaries.</description>
      <pubDate>Tue, 06 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>TypeScript</category>
        <category>Node.js</category>
    </item>
    <item>
      <title>Structured JSON Prompts: Field Design &amp; Verifiable Evidence</title>
      <link>https://zengliangyi.com/en/blog/structured-json-prompts/</link>
      <guid>https://zengliangyi.com/en/blog/structured-json-prompts/</guid>
      <description>Use ChatCrystal’s summaries and relations to define fields, visible evidence, and counterexamples, then distinguish shape and evidence checks with offline Zod.</description>
      <pubDate>Tue, 06 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>AI</category>
        <category>Node.js</category>
    </item>
    <item>
      <title>TanStack Query Data Flow: Keys, Invalidation, and Queries</title>
      <link>https://zengliangyi.com/en/blog/tanstack-query-data-flow/</link>
      <guid>https://zengliangyi.com/en/blog/tanstack-query-data-flow/</guid>
      <description>Trace ChatCrystal hooks and API, verify parameterized query keys and prefix invalidation, and distinguish accepted requests from background refreshes.</description>
      <pubDate>Tue, 06 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>React</category>
        <category>TypeScript</category>
    </item>
    <item>
      <title>Testing Strategy: Counterexamples for SQL, Functions &amp; APIs</title>
      <link>https://zengliangyi.com/en/blog/testing-strategy/</link>
      <guid>https://zengliangyi.com/en/blog/testing-strategy/</guid>
      <description>Check ChatCrystal’s Node test entry points, practice dependency isolation, SQL rollback, and Fastify inject offline, and state what those tests do not cover.</description>
      <pubDate>Tue, 06 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Node.js</category>
        <category>TypeScript</category>
    </item>
    <item>
      <title>TypeScript monorepo configuration: types and runtime boundaries</title>
      <link>https://zengliangyi.com/en/blog/typescript-monorepo-configuration/</link>
      <guid>https://zengliangyi.com/en/blog/typescript-monorepo-configuration/</guid>
      <description>Check ChatCrystal’s shared types, server, Vite client, and Electron settings, then reproduce an alias failure that passes compilation but fails at runtime.</description>
      <pubDate>Tue, 06 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>TypeScript</category>
        <category>Node.js</category>
    </item>
    <item>
      <title>Vectra local search: fixed vectors, filters, and persistence</title>
      <link>https://zengliangyi.com/en/blog/vectra-local-search/</link>
      <guid>https://zengliangyi.com/en/blog/vectra-local-search/</guid>
      <description>Run a deterministic Vectra 0.15.0 exercise in a temporary directory to check cosine scores, metadata filters, reopening, and canceled updates.</description>
      <pubDate>Tue, 06 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>AI</category>
        <category>Node.js</category>
    </item>
    <item>
      <title>AI SDK structured notes: adapters, schemas, and business checks</title>
      <link>https://zengliangyi.com/en/blog/ai-sdk-structured-notes/</link>
      <guid>https://zengliangyi.com/en/blog/ai-sdk-structured-notes/</guid>
      <description>Read ChatCrystal’s AI SDK 7 calls, distinguish provider adaptation from output shape and factual validity, and test description limits with offline Zod.</description>
      <pubDate>Mon, 05 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>AI</category>
        <category>Node.js</category>
    </item>
    <item>
      <title>Electron tray and window state: hide, restore, and quit</title>
      <link>https://zengliangyi.com/en/blog/electron-tray-window-state/</link>
      <guid>https://zengliangyi.com/en/blog/electron-tray-window-state/</guid>
      <description>Read ChatCrystal’s mode-aware tray, saved window bounds, and shutdown flow, including what persistence restores and which failures still need testing.</description>
      <pubDate>Mon, 05 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Electron</category>
        <category>Node.js</category>
    </item>
    <item>
      <title>Fastify production files: one port, SPA fallback, and failures</title>
      <link>https://zengliangyi.com/en/blog/fastify-production-static-service/</link>
      <guid>https://zengliangyi.com/en/blog/fastify-production-static-service/</guid>
      <description>Check ChatCrystal’s build outputs and static-root discovery, then use isolated inject exercises to distinguish pages, unknown APIs, and missing assets.</description>
      <pubDate>Mon, 05 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Fastify</category>
        <category>Node.js</category>
    </item>
    <item>
      <title>Electron Basics: Main Process, WebPages, and Bounded IPC</title>
      <link>https://zengliangyi.com/en/blog/electron-app-basics/</link>
      <guid>https://zengliangyi.com/en/blog/electron-app-basics/</guid>
      <description>Follow ChatCrystal’s modes, BrowserWindow, preload, and Fastify startup to understand desktop permissions and lifecycle boundaries.</description>
      <pubDate>Sun, 04 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Electron</category>
        <category>Desktop Apps</category>
    </item>
    <item>
      <title>Evaluate embedding retrieval with fixed notes and labeled queries</title>
      <link>https://zengliangyi.com/en/blog/embedding-retrieval-evaluation/</link>
      <guid>https://zengliangyi.com/en/blog/embedding-retrieval-evaluation/</guid>
      <description>Compare local and cloud embeddings with labeled queries and separate indexes, checking rebuild completion, retrieval quality, and resource costs.</description>
      <pubDate>Sun, 04 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Embedding</category>
        <category>Evaluation</category>
    </item>
    <item>
      <title>Learn Fastify from ChatCrystal: plugins, validation, and failures</title>
      <link>https://zengliangyi.com/en/blog/learn-fastify-with-chatcrystal/</link>
      <guid>https://zengliangyi.com/en/blog/learn-fastify-with-chatcrystal/</guid>
      <description>Read the actual createServer and route boundaries, then use an isolated inject exercise to check success, invalid input, and missing routes.</description>
      <pubDate>Sun, 04 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Fastify</category>
        <category>Node.js</category>
    </item>
    <item>
      <title>Comparing LLM Summaries: Fixed Inputs and Verifiable Evidence</title>
      <link>https://zengliangyi.com/en/blog/llm-summary-evaluation/</link>
      <guid>https://zengliangyi.com/en/blog/llm-summary-evaluation/</guid>
      <description>Evaluate local vs cloud LLM summarization on identical transcripts, field review, and failure logs, separating model quality from app pipelines.</description>
      <pubDate>Sun, 04 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>LLM</category>
        <category>Evaluation</category>
    </item>
    <item>
      <title>sql.js Practice: In-Memory SQLite, Foreign Keys, and Saves</title>
      <link>https://zengliangyi.com/en/blog/sqljs-wasm-basics/</link>
      <guid>https://zengliangyi.com/en/blog/sqljs-wasm-basics/</guid>
      <description>Read ChatCrystal’s loading, transaction, and export boundaries, then verify foreign keys, rollback, and reload with an isolated exercise.</description>
      <pubDate>Sun, 04 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>SQLite</category>
        <category>WebAssembly</category>
    </item>
    <item>
      <title>Tailwind CSS v4 and Vite: Compiling Utilities and Variables</title>
      <link>https://zengliangyi.com/en/blog/tailwind-v4-vite-setup/</link>
      <guid>https://zengliangyi.com/en/blog/tailwind-v4-vite-setup/</guid>
      <description>Check ChatCrystal’s two-package installation, Vite plugin, and CSS variable themes while separating build-time utilities from runtime values.</description>
      <pubDate>Sun, 04 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Tailwind CSS</category>
        <category>Vite</category>
    </item>
    <item>
      <title>Getting started with ChatCrystal: install, import, and search</title>
      <link>https://zengliangyi.com/en/blog/chatcrystal-getting-started/</link>
      <guid>https://zengliangyi.com/en/blog/chatcrystal-getting-started/</guid>
      <description>Verify installation, the local service, both model configurations, import, summarization, and search with the actual ChatCrystal 0.6.1 CLI.</description>
      <pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Node.js</category>
        <category>Knowledge management</category>
    </item>
    <item>
      <title>Set up ChatCrystal MCP: make Claude Code calls reviewable</title>
      <link>https://zengliangyi.com/en/blog/chatcrystal-mcp-setup/</link>
      <guid>https://zengliangyi.com/en/blog/chatcrystal-mcp-setup/</guid>
      <description>Connect ChatCrystal to Claude Code with a project-scoped stdio server, then verify its seven tools, HTTP backend, approvals, and request path.</description>
      <pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>MCP</category>
        <category>Claude Code</category>
    </item>
    <item>
      <title>Importing Claude Code history: paths, parsing, and verification</title>
      <link>https://zengliangyi.com/en/blog/claude-code-conversation-import/</link>
      <guid>https://zengliangyi.com/en/blog/claude-code-conversation-import/</guid>
      <description>Check history paths, JSONL filtering, incremental import, and watcher limitations against the current ChatCrystal adapter.</description>
      <pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Claude Code</category>
        <category>Data parsing</category>
    </item>
    <item>
      <title>Filtering Claude Code JSONL: Events, Blocks, and Omissions</title>
      <link>https://zengliangyi.com/en/blog/claude-code-jsonl-noise-filter/</link>
      <guid>https://zengliangyi.com/en/blog/claude-code-jsonl-noise-filter/</guid>
      <description>Follow ChatCrystal relevance checks, content extraction, and tag cleanup to distinguish top-level filtering from nested thinking and tool flags.</description>
      <pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Claude Code</category>
        <category>JSONL</category>
        <category>Data parsing</category>
    </item>
    <item>
      <title>Claude Code memory workflow: recall, verify, then write back</title>
      <link>https://zengliangyi.com/en/blog/claude-code-memory-workflow/</link>
      <guid>https://zengliangyi.com/en/blog/claude-code-memory-workflow/</guid>
      <description>Use recall_for_task, validate_task_memory, and write_task_memory as an auditable workflow without treating MCP configuration as an automatic-memory guarantee.</description>
      <pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>MCP</category>
        <category>Claude Code</category>
    </item>
    <item>
      <title>Configuring Cloud LLMs: Providers, Endpoints, and Summaries</title>
      <link>https://zengliangyi.com/en/blog/cloud-llm-configuration/</link>
      <guid>https://zengliangyi.com/en/blog/cloud-llm-configuration/</guid>
      <description>Follow ChatCrystal provider registrations to configure remote generation and check native APIs, gateways, persisted settings, credentials, and test boundaries.</description>
      <pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>LLM</category>
        <category>Configuration</category>
    </item>
    <item>
      <title>Importing Codex, Trae, and Copilot: verify each history format</title>
      <link>https://zengliangyi.com/en/blog/codex-trae-copilot-import/</link>
      <guid>https://zengliangyi.com/en/blog/codex-trae-copilot-import/</guid>
      <description>Check source directories, event extraction, and snapshot boundaries in ChatCrystal, then verify each adapter against a conversation you know.</description>
      <pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Data parsing</category>
        <category>Knowledge management</category>
    </item>
    <item>
      <title>Memory Budgets for Large Chat Imports: Measure Before Batching</title>
      <link>https://zengliangyi.com/en/blog/conversation-import-memory-budget/</link>
      <guid>https://zengliangyi.com/en/blog/conversation-import-memory-budget/</guid>
      <description>Profile memory peaks in large chat imports with sql.js and task queues. Size batches from reproducible benchmarks instead of arbitrary fixed thresholds.</description>
      <pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Import</category>
        <category>Performance</category>
    </item>
    <item>
      <title>Importing Cursor history: workspace metadata and global messages</title>
      <link>https://zengliangyi.com/en/blog/cursor-conversation-import/</link>
      <guid>https://zengliangyi.com/en/blog/cursor-conversation-import/</guid>
      <description>Trace how ChatCrystal joins Cursor SQLite data, discovers orphan sessions, and extracts messages, then verify the import with a known conversation.</description>
      <pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Cursor</category>
        <category>SQLite</category>
        <category>Data parsing</category>
    </item>
    <item>
      <title>Parsing Cursor SQLite: Debugging Missing Messages Across Tables</title>
      <link>https://zengliangyi.com/en/blog/cursor-sqlite-parser-pitfalls/</link>
      <guid>https://zengliangyi.com/en/blog/cursor-sqlite-parser-pitfalls/</guid>
      <description>Check paired databases, key prefixes, unknown versions, and orphan discovery to distinguish unreadable data, parsing omissions, and absent records.</description>
      <pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Cursor</category>
        <category>SQLite</category>
        <category>Data parsing</category>
    </item>
    <item>
      <title>Configuring Embeddings: Model Selection and Rebuilding</title>
      <link>https://zengliangyi.com/en/blog/embedding-model-configuration/</link>
      <guid>https://zengliangyi.com/en/blog/embedding-model-configuration/</guid>
      <description>Check task support, actual embedding inputs, and index compatibility, then accept model settings and changes with known notes and no-answer queries.</description>
      <pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Embedding</category>
        <category>Vector search</category>
    </item>
    <item>
      <title>LLMs and embeddings: separate tasks, even with one provider</title>
      <link>https://zengliangyi.com/en/blog/llm-and-embedding-separation/</link>
      <guid>https://zengliangyi.com/en/blog/llm-and-embedding-separation/</guid>
      <description>Distinguish text generation from vector generation, then verify ChatCrystal model settings, connection tests, and index rebuilding boundaries.</description>
      <pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>AI</category>
        <category>Vector search</category>
    </item>
    <item>
      <title>Note Relations and Graph Views: Discover, Project, and Verify</title>
      <link>https://zengliangyi.com/en/blog/note-relations-and-graph/</link>
      <guid>https://zengliangyi.com/en/blog/note-relations-and-graph/</guid>
      <description>Trace ChatCrystal relation APIs, candidate discovery, and graph projections, keeping generated edges and tag co-occurrence within verified boundaries.</description>
      <pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Knowledge graph</category>
        <category>Relations</category>
    </item>
    <item>
      <title>Ollama Local Workflow: Generation, Vectors, and Retrieval</title>
      <link>https://zengliangyi.com/en/blog/ollama-local-workflow/</link>
      <guid>https://zengliangyi.com/en/blog/ollama-local-workflow/</guid>
      <description>Run local LLMs with Ollama: test generation endpoints, embedding dimensions, vector consistency, and ChatCrystal integration boundaries offline.</description>
      <pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Ollama</category>
        <category>Local-first</category>
    </item>
    <item>
      <title>Recover a debugging solution: retrieve, read, then verify reuse</title>
      <link>https://zengliangyi.com/en/blog/recover-debugging-notes/</link>
      <guid>https://zengliangyi.com/en/blog/recover-debugging-notes/</guid>
      <description>Use a constructed debugging scenario to check notes, vectors, and search results, then compare the original conversation with the current project.</description>
      <pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Semantic search</category>
        <category>Debugging</category>
    </item>
    <item>
      <title>Semantic Search and Context: Finding Hidden Code Dependencies</title>
      <link>https://zengliangyi.com/en/blog/semantic-search-relation-context/</link>
      <guid>https://zengliangyi.com/en/blog/semantic-search-relation-context/</guid>
      <description>Combine vector search with one-hop graph relation expansion in code refactoring, keeping similarity scores, candidates, and sources verifiable on disk.</description>
      <pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Semantic search</category>
        <category>Knowledge graph</category>
    </item>
    <item>
      <title>Semantic Search: Candidate Deduplication and Graph Context</title>
      <link>https://zengliangyi.com/en/blog/semantic-search-workflow/</link>
      <guid>https://zengliangyi.com/en/blog/semantic-search-workflow/</guid>
      <description>Trace query vectors, candidate growth, lexical boosts, and relation expansion in ChatCrystal, distinguishing list filtering from semantic retrieval.</description>
      <pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Semantic search</category>
        <category>RAG</category>
    </item>
    <item>
      <title>Vectra index recovery: separate state, cleanup, and rebuilding</title>
      <link>https://zengliangyi.com/en/blog/vectra-index-recovery/</link>
      <guid>https://zengliangyi.com/en/blog/vectra-index-recovery/</guid>
      <description>Diagnose semantic-search failures across note status, Vectra files, and cleanup tasks, then choose a single-note or full-index recovery path.</description>
      <pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Vectra</category>
        <category>Troubleshooting</category>
    </item>
    <item>
      <title>Integrating PaddleOCR-VL: Building a Document Inspection Tool</title>
      <link>https://zengliangyi.com/en/blog/paddleocr-vl-api-proofreading/</link>
      <guid>https://zengliangyi.com/en/blog/paddleocr-vl-api-proofreading/</guid>
      <description>Connect to Baidu PaddleOCR-VL using Python standard library: manage async polling, coordinate bounding boxes, and build a document proofreading UI.</description>
      <pubDate>Sat, 19 Sep 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>Python</category>
        <category>JavaScript</category>
        <category>PaddleOCR-VL</category>
        <category>Document Parsing</category>
    </item>
    <item>
      <title>Why translate: none Failed Only in Production</title>
      <link>https://zengliangyi.com/en/blog/tailwind-translate-minifier-css-layer/</link>
      <guid>https://zengliangyi.com/en/blog/tailwind-translate-minifier-css-layer/</guid>
      <description>Debug Lightning CSS transform merging in production. Learn why !important fails and use Tailwind variable overrides and layer orders to fix displacement.</description>
      <pubDate>Fri, 11 Sep 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>CSS</category>
        <category>Tailwind</category>
        <category>Build</category>
        <category>Debugging</category>
    </item>
    <item>
      <title>Exporting ChatCrystal Notes to Obsidian</title>
      <link>https://zengliangyi.com/en/blog/chatcrystal-to-obsidian/</link>
      <guid>https://zengliangyi.com/en/blog/chatcrystal-to-obsidian/</guid>
      <description>Export every page of ChatCrystal notes, build Obsidian links with stable IDs, and distinguish a readable snapshot from editing and incremental synchronization.</description>
      <pubDate>Thu, 11 Jun 2026 01:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Obsidian</category>
        <category>Node.js</category>
        <category>Knowledge management</category>
    </item>
    <item>
      <title>Choosing a Local Vector Store: Vectra, Chroma, and hnswlib</title>
      <link>https://zengliangyi.com/en/blog/local-vector-database-selection/</link>
      <guid>https://zengliangyi.com/en/blog/local-vector-database-selection/</guid>
      <description>Compare Vectra, Chroma, and hnswlib through ChatCrystal’s deployment constraints: integration, retrieval cost, backups, and recovery boundaries.</description>
      <pubDate>Tue, 09 Jun 2026 01:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>TypeScript</category>
        <category>Vector search</category>
        <category>Architecture</category>
    </item>
    <item>
      <title>Understanding Five AI Conversation Data Formats</title>
      <link>https://zengliangyi.com/en/blog/ai-conversation-data-formats/</link>
      <guid>https://zengliangyi.com/en/blog/ai-conversation-data-formats/</guid>
      <description>How ChatCrystal parses Claude Code, Codex, Cursor, Trae, and Copilot records, and where JSONL messages, event streams, SQLite KV stores, and snapshots differ.</description>
      <pubDate>Tue, 09 Jun 2026 00:45:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>TypeScript</category>
        <category>AI</category>
        <category>Data parsing</category>
    </item>
    <item>
      <title>Knowledge Bases for AI Agents: Recall, Validate, and Write Back</title>
      <link>https://zengliangyi.com/en/blog/agent-knowledge-memory-loop/</link>
      <guid>https://zengliangyi.com/en/blog/agent-knowledge-memory-loop/</guid>
      <description>Use ChatCrystal MCP tools and task memory to build scoped, revisable agent memory, separating real tool capabilities from automation promises.</description>
      <pubDate>Fri, 05 Jun 2026 01:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>MCP</category>
        <category>AI Agent</category>
        <category>Knowledge management</category>
    </item>
    <item>
      <title>From RAG to Knowledge Graphs: Preserving Context in Retrieval</title>
      <link>https://zengliangyi.com/en/blog/rag-and-knowledge-graphs/</link>
      <guid>https://zengliangyi.com/en/blog/rag-and-knowledge-graphs/</guid>
      <description>Compare keyword search, vectors, and knowledge graphs. Trace one-hop candidate expansion in ChatCrystal and identify boundaries relationships cannot prove.</description>
      <pubDate>Fri, 05 Jun 2026 00:45:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>RAG</category>
        <category>Knowledge graphs</category>
        <category>Retrieval</category>
    </item>
    <item>
      <title>Local-First and Cloud AI: Understanding Data Boundaries</title>
      <link>https://zengliangyi.com/en/blog/local-first-ai-data-boundaries/</link>
      <guid>https://zengliangyi.com/en/blog/local-first-ai-data-boundaries/</guid>
      <description>Trace storage, embeddings, summaries, and agent recall in ChatCrystal to identify which data boundaries local-first architecture actually controls.</description>
      <pubDate>Thu, 04 Jun 2026 00:30:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>ChatCrystal</category>
        <category>Architecture</category>
        <category>Privacy</category>
        <category>AI</category>
    </item>
    <item>
      <title>Using AudioContext suspend/resume as a Streaming A/V Sync Gate</title>
      <link>https://zengliangyi.com/en/blog/audiocontext-stream-sync-gate/</link>
      <guid>https://zengliangyi.com/en/blog/audiocontext-stream-sync-gate/</guid>
      <description>Freeze and release the AudioContext timeline as streamed frames arrive, so frame availability drives playback while audio and video remain synchronized.</description>
      <pubDate>Mon, 16 Mar 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>TypeScript</category>
        <category>web audio api</category>
        <category>a/v sync</category>
    </item>
    <item>
      <title>Stable React Event Subscriptions: useEffect to useEffectEvent</title>
      <link>https://zengliangyi.com/en/blog/react-stable-event-subscriptions/</link>
      <guid>https://zengliangyi.com/en/blog/react-stable-event-subscriptions/</guid>
      <description>Prevent WebSocket, EventEmitter, and DOM listeners from resubscribing on every callback change, using a ref proxy or React 19.2 useEffectEvent.</description>
      <pubDate>Mon, 16 Mar 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>React</category>
        <category>hooks</category>
        <category>event subscriptions</category>
    </item>
    <item>
      <title>Token Refresh Races Under Concurrent 401 Responses</title>
      <link>https://zengliangyi.com/en/blog/token-refresh-race-condition/</link>
      <guid>https://zengliangyi.com/en/blog/token-refresh-race-condition/</guid>
      <description>How to collapse concurrent 401 responses into one token refresh, retry queued requests safely, and settle every waiting Promise when refresh fails.</description>
      <pubDate>Mon, 16 Mar 2026 00:00:00 GMT</pubDate>
      <author>曾亮懿</author>
      <category>TypeScript</category>
        <category>authentication</category>
        <category>concurrency</category>
    </item>
  </channel>
</rss>