)]}'
{
  "log": [
    {
      "commit": "3b9f1370612e690a0b7f230f05e688930db4c6d3",
      "tree": "59d25d3b6c0e50e6b440910103c493fa8786fb8f",
      "parents": [
        "897fc8c4d4961863c8fde6331aa6ebee9e31244d"
      ],
      "author": {
        "name": "Luffy",
        "email": "52o@qq52o.cn",
        "time": "Fri Jul 17 22:38:41 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 22:38:41 2026 +0800"
      },
      "message": "fix: edit question fails when short links enabled (#1554)\n\nClose #1553"
    },
    {
      "commit": "897fc8c4d4961863c8fde6331aa6ebee9e31244d",
      "tree": "b126559082063876158a51c597faedfa4247771e",
      "parents": [
        "2758e23381541ed8a2a92d2079c3f447277c4d73"
      ],
      "author": {
        "name": "Luffy",
        "email": "52o@qq52o.cn",
        "time": "Tue Jul 14 16:03:24 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 14 16:03:24 2026 +0800"
      },
      "message": "fix: add missing license entry for mozillazg-go-unidecode (#1552)"
    },
    {
      "commit": "2758e23381541ed8a2a92d2079c3f447277c4d73",
      "tree": "ccb806832d33f5978c2c8ed3f0e7634497a4e8d0",
      "parents": [
        "9d9f5d06a8a3d732b01458800fd9df9ca34aef6c"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Thu Jul 09 17:29:44 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri Jul 10 10:19:39 2026 +0800"
      },
      "message": "fix: update version to 2.0.2 in Makefile and README\n"
    },
    {
      "commit": "9d9f5d06a8a3d732b01458800fd9df9ca34aef6c",
      "tree": "257535169feeba6ac84150340fa29eb9ad1b3b20",
      "parents": [
        "c589b59dd5f16d59b389ec4da8f8e1a97ac8ef04"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Wed Jul 08 16:34:37 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri Jul 10 10:19:39 2026 +0800"
      },
      "message": "fix: enhance user admin service to manage API keys and filter answer visibility\n"
    },
    {
      "commit": "c589b59dd5f16d59b389ec4da8f8e1a97ac8ef04",
      "tree": "ce842076a5ed6d6426f2e0b4c48aadb0b698e023",
      "parents": [
        "dc8443176818cd91e33939de999b0ef9f610b38b"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Wed Jul 08 12:27:43 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri Jul 10 10:19:39 2026 +0800"
      },
      "message": "fix: enhance answer visibility checks for user permissions\n"
    },
    {
      "commit": "dc8443176818cd91e33939de999b0ef9f610b38b",
      "tree": "54323c7c06f91eef2ce043ed6139099f79ae971c",
      "parents": [
        "0705ea6baeaf2fc3a2abdff8ef75b6b5a0b26e67"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Wed Jul 08 11:05:24 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri Jul 10 10:19:39 2026 +0800"
      },
      "message": "fix(build): update Docker build process to use buildx and streamline image tagging\n"
    },
    {
      "commit": "0705ea6baeaf2fc3a2abdff8ef75b6b5a0b26e67",
      "tree": "c586a1f7b02ad3fe47e96c8b020226be1e400dcf",
      "parents": [
        "c52e2eeb1f3893eed898213c48198432addfec77"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Wed Jul 08 10:41:28 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri Jul 10 10:19:39 2026 +0800"
      },
      "message": "fix(tests): add mock methods for cache OAuth state in new question notification tests\n"
    },
    {
      "commit": "c52e2eeb1f3893eed898213c48198432addfec77",
      "tree": "c307236ef870b76ff9d3586fd0633105b306ff29",
      "parents": [
        "58dbe2c02759d60a6bdab5fe3711e2eb2c5b295b"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Wed Jul 08 10:37:30 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri Jul 10 10:19:39 2026 +0800"
      },
      "message": "fix(build): update Go version in Dockerfile to 1.25-alpine\n"
    },
    {
      "commit": "58dbe2c02759d60a6bdab5fe3711e2eb2c5b295b",
      "tree": "1ba3d1c74a81a39e328efdaf1c58aca32a023e80",
      "parents": [
        "88c288fdda2ccb4690f3bba3b6cc570389fe9e6b"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Wed Jul 08 10:31:16 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri Jul 10 10:19:39 2026 +0800"
      },
      "message": "fix(build): streamline Docker image build process in CI configuration\n"
    },
    {
      "commit": "88c288fdda2ccb4690f3bba3b6cc570389fe9e6b",
      "tree": "d116f94f1c889e4b5a3e6607a23e39a30d403642",
      "parents": [
        "f5e25dcb8d7c793316161ce1a6925edb596e1d2e"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Tue Jul 07 19:32:24 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri Jul 10 10:19:39 2026 +0800"
      },
      "message": "fix(tests): update goroutine handling in new question email worker tests\n"
    },
    {
      "commit": "f5e25dcb8d7c793316161ce1a6925edb596e1d2e",
      "tree": "0c4920dba728a1475917f16e58741b166655f88a",
      "parents": [
        "e06311a51403224d9b9a7aace4d960c7960f6986"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Tue Jul 07 19:03:27 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri Jul 10 10:19:39 2026 +0800"
      },
      "message": "fix(notification): remove buffer size parameter from new question email worker for test\n"
    },
    {
      "commit": "e06311a51403224d9b9a7aace4d960c7960f6986",
      "tree": "51af37da56b82f484e207301a6504758c89940f4",
      "parents": [
        "cb9739421154ad4e3c9d214ae5042343b10ef91c"
      ],
      "author": {
        "name": "Artur Iusupov",
        "email": "iusupov.aa@phystech.edu",
        "time": "Wed Jul 01 13:30:44 2026 +0400"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri Jul 10 10:19:39 2026 +0800"
      },
      "message": "fix(notification): make new question email queue configurable\n"
    },
    {
      "commit": "cb9739421154ad4e3c9d214ae5042343b10ef91c",
      "tree": "a4daaa0d19dab66320be586b86b5541c259ab2b3",
      "parents": [
        "dda51232b9a61631dcb1b4e49bcefd31d83c8deb"
      ],
      "author": {
        "name": "Artur Iusupov",
        "email": "iusupov.aa@phystech.edu",
        "time": "Sat Jun 27 23:35:28 2026 +0400"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri Jul 10 10:19:39 2026 +0800"
      },
      "message": "fix(notification): move new question email throttling to worker\n"
    },
    {
      "commit": "dda51232b9a61631dcb1b4e49bcefd31d83c8deb",
      "tree": "500cbaa611d0b2d30eaec1a64866b9d39c8822a5",
      "parents": [
        "a00cb2d38c018187ca73d409400f3c0c8f15294c"
      ],
      "author": {
        "name": "Artur Iusupov",
        "email": "iusupov.aa@phystech.edu",
        "time": "Wed Jun 17 12:13:56 2026 +0400"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri Jul 10 10:19:39 2026 +0800"
      },
      "message": "feat(notification): add interval for new question emails\n"
    },
    {
      "commit": "a00cb2d38c018187ca73d409400f3c0c8f15294c",
      "tree": "c069d6985ed470492fddedd0fb54f65bc156e444",
      "parents": [
        "f92a0fe140328bd180e46792557fd93f03e2e651"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Tue Jul 07 16:26:45 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri Jul 10 10:19:39 2026 +0800"
      },
      "message": "fix: update goroutine handling and context imports for consistency\n"
    },
    {
      "commit": "f92a0fe140328bd180e46792557fd93f03e2e651",
      "tree": "33091ca5636e13cebcf1386fa9a62d27c55ec5d9",
      "parents": [
        "b575fe893bda63ede1112d8262fdef85893b4e1e"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Tue Jul 07 15:05:47 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri Jul 10 10:19:39 2026 +0800"
      },
      "message": "Harden Accept-Language parsing\n"
    },
    {
      "commit": "b575fe893bda63ede1112d8262fdef85893b4e1e",
      "tree": "3a79281e29cb3344a72054fe18915c7699437e7b",
      "parents": [
        "54b1b35df5aec3b80c834c35546cf8a35d927395"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Tue Jul 07 14:33:21 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri Jul 10 10:19:39 2026 +0800"
      },
      "message": "Harden avatar cleanup ownership checks\n"
    },
    {
      "commit": "54b1b35df5aec3b80c834c35546cf8a35d927395",
      "tree": "ad74e1df8fc63069fb0cce06ff92e8163f045794",
      "parents": [
        "06a0f742f22cb309908ab19cd73657368d9a0726"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Tue Jul 07 12:18:55 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri Jul 10 10:19:39 2026 +0800"
      },
      "message": "Align revision audit permission checks\n"
    },
    {
      "commit": "06a0f742f22cb309908ab19cd73657368d9a0726",
      "tree": "5952df8853925c2095f4a2e118e7204091b9138c",
      "parents": [
        "3a5a15fe77319c62dd814fa07998f5bc53df35e1"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Thu Jul 02 17:41:16 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri Jul 10 10:19:39 2026 +0800"
      },
      "message": "fix external login account binding\n"
    },
    {
      "commit": "3a5a15fe77319c62dd814fa07998f5bc53df35e1",
      "tree": "7f1bf6d70ea78ebda6e9a3f002400267b937d44a",
      "parents": [
        "7123326515377a49b9f673dd8db6daa9c871ab47"
      ],
      "author": {
        "name": "Artur Iusupov",
        "email": "iusupov.aa@phystech.edu",
        "time": "Tue Jun 09 01:39:27 2026 +0400"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri Jul 10 10:19:39 2026 +0800"
      },
      "message": "fix(site): require explicit email verification setting\n\nReplace OptionalBool with an explicit require_email_verification value for the login settings save request while keeping legacy read defaults intact.\n\nUse positive RequireEmailVerification naming through the registration flow and inline the site setting mapping.\n\nAdd validation, save-path, and registration coverage for the explicit email verification setting.\n"
    },
    {
      "commit": "7123326515377a49b9f673dd8db6daa9c871ab47",
      "tree": "3fbef5733b50f79e0f8d53b0f1c044ffe9a45b90",
      "parents": [
        "4aa52a6b521c5088b5706b1500a5d27c02fa04de"
      ],
      "author": {
        "name": "Artur Iusupov",
        "email": "iusupov.aa@phystech.edu",
        "time": "Fri Jun 05 00:42:00 2026 +0400"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri Jul 10 10:19:39 2026 +0800"
      },
      "message": "feat(site): allow disabling email verification\n"
    },
    {
      "commit": "4aa52a6b521c5088b5706b1500a5d27c02fa04de",
      "tree": "17e111fad71e697f80ccb49989cacffa88a1c0c0",
      "parents": [
        "9234d8024630a41400282f6dab619f716551f815"
      ],
      "author": {
        "name": "hgaol",
        "email": "dhangao@hotmail.com",
        "time": "Tue Jun 09 15:26:11 2026 +0000"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri Jul 10 10:19:39 2026 +0800"
      },
      "message": "fix: accept answer fails when short links enabled (#1541)\n\nThe ownership check added to AcceptAnswer compared the answer\u0027s QuestionID\nagainst the request\u0027s QuestionID directly. When short links are enabled,\nanswerRepo.GetByID re-encodes QuestionID to its short form while the\ncontroller de-shorts req.QuestionID to its long form, so the two encodings\nof the same question never matched and every accept returned \"Answer do not\nfound\". Normalize both ids via uid.DeShortID before comparing, preserving the\nprivilege-escalation guard for answers that truly belong to another question.\n"
    },
    {
      "commit": "9234d8024630a41400282f6dab619f716551f815",
      "tree": "f7aeeabcf2c58e1f5e8a654acf2051e616fd9582",
      "parents": [
        "10be96814ecf980d8993ef0ac23715f778945e63"
      ],
      "author": {
        "name": "hhc7",
        "email": "169754973+hhc7@users.noreply.github.com",
        "time": "Tue Jun 02 13:55:35 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri Jul 10 10:19:39 2026 +0800"
      },
      "message": "fix: scope JSON 500 to API routes, skip rewriting already-flushed responses\n"
    },
    {
      "commit": "10be96814ecf980d8993ef0ac23715f778945e63",
      "tree": "a536dd4b6d1b2e50e2466db49978f477e75037db",
      "parents": [
        "a6d867e4ccc36b7519e65742b8039a9c685cd808"
      ],
      "author": {
        "name": "hhc7",
        "email": "169754973+hhc7@users.noreply.github.com",
        "time": "Thu May 28 18:04:27 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri Jul 10 10:19:39 2026 +0800"
      },
      "message": "feat: add recovery middleware to handle panic gracefully\n"
    },
    {
      "commit": "a6d867e4ccc36b7519e65742b8039a9c685cd808",
      "tree": "e429170c77cbfb2d55142b8fa0af580802192042",
      "parents": [
        "4b8de1897b34bb040ec955538a5377a041afffe0"
      ],
      "author": {
        "name": "Ahmed Qasid",
        "email": "ahmad.kassyd@gmail.com",
        "time": "Wed Jun 03 17:06:26 2026 +0300"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri Jul 10 10:19:39 2026 +0800"
      },
      "message": "fix: avoid topic fallback for non-Latin titles via pragmatic ASCII transliteration (#1526)\n\n# fix: avoid `topic` fallback for non-Latin titles via pragmatic ASCII\ntransliteration\n\n\u003e **Scope update (in response to review):** this PR is intentionally\nbroader than its original \"Arabic-only\" framing. The implementation\nchanges URL slug generation for **every non-Latin, non-CJK script** that\n`slugify` previously stripped — see *Scope* below for the explicit list.\nThe goal is *not* linguistically correct romanization; it is \"avoid\ncollapsing to `/topic` by producing a usable ASCII slug.\"\n\n## What this PR is (and isn\u0027t)\n\n**Goal:** when a question title contains characters outside Basic Latin\n/ Latin Extended / CJK Han, generate a URL slug that is a deterministic\nASCII approximation instead of letting `slugify` strip everything and\nfalling back to the literal `\"topic\"`.\n\n**Non-goal:** this is *not* a linguistically correct multi-language\nromanizer. The output is a machine-acceptable ASCII slug, not what a\nnative speaker would choose. For example, `こんにちは` → `konnichiha` (not\nthe more natural `kon\u0027nichiwa`), `ไทย` → `aithy` (not `thai`). Treat the\nslug as an opaque, stable, indexable identifier — the\npath-after-`/questions/\u003cid\u003e/` is for SEO and shareability, the canonical\nreference is always the ID.\n\n## The bug\n\nPure non-Latin titles previously got stripped by `slugify.Slugify`, hit\nthe empty-result fallback in `htmltext.UrlTitle`, and collapsed to the\nliteral slug `\"topic\"`. On a live multilingual site, every Arabic / Thai\n/ Japanese-hiragana / Korean / Hebrew / Cyrillic question ended up at\n`/questions/\u003cid\u003e/topic`.\n\n## The fix\n\n`UrlTitle()` gets a `convertNonLatin` pre-step that mirrors the existing\n`convertChinese` pre-step pattern, using\n`github.com/mozillazg/go-unidecode` (same author as `go-pinyin` already\nin the repo, to minimise new-dep friction).\n\n```\nUrlTitle(title)\n  → convertChinese(title)        // pre-existing: Han-block → pinyin\n  → convertNonLatin(title)       // NEW: detect non-Latin letters → unidecode to ASCII\n  → clearEmoji / slugify / url.QueryEscape / cutLongTitle (unchanged)\n```\n\nThe non-Latin detector skips ASCII, Latin-1 Supplement, Latin\nExtended-A/B, and CJK Han. Inputs that hit none of those non-Latin\nletter categories short-circuit and return unchanged, so Latin-only and\nChinese-only inputs remain byte-identical (pinned by tests).\n\n## Scope — what scripts are affected\n\nThis PR changes behavior for **any** title containing letters in scripts\nthat `slugify` doesn\u0027t handle. Confirmed by tests in\n`pkg/htmltext/htmltext_test.go`:\n\n| Script | Example title | Before | After |\n| --- | --- | --- | --- |\n| Arabic | `كيف حالك` | `topic` | `kyf-hlk` |\n| Mixed Latin + Arabic | `مرحبا hello` | `hello` | `mrhb-hello` |\n| Thai | `ไทย ไทย` | `topic` | `aithy-aithy` |\n| Japanese hiragana | `こんにちは` | `topic` | `konnichiha` |\n| Korean | `안녕하세요` | `topic` | `annyeonghaseyo` |\n| Hebrew | `שלום עולם` | `topic` | `shlvm-vlm` |\n| Cyrillic | `Привет мир` | `topic` | `privet-mir` |\n\n**Unchanged:**\n\n| Case | Behavior |\n| --- | --- |\n| Pure Latin (`hello world`) | unchanged → `hello-world` |\n| Pure Chinese (`这是一个，标题，title`) | unchanged → `zhe-shi-yi-ge-biao-ti`\n(pinyin path) |\n| Japanese with Han-block kanji (`日本`) | unchanged → `ri-ben` (caught by\npre-existing pinyin path; treated as Chinese reading, not Japanese — a\npre-existing limitation, **not** introduced by this PR) |\n| Emoji only (`😂😂😂`) | unchanged → `topic` |\n| Empty / whitespace | unchanged → `topic` |\n\n## Transliteration quality — explicit acknowledgement\n\n`go-unidecode` is a generic Unicode → ASCII approximation. It is **not**\na per-language romanization library. Specifically:\n\n- It will pick *one* approximation per codepoint regardless of language\ncontext. `ใ` → `ai` (Thai romanization is `i` or `ai` depending on\nstandard), `한` → `han`, `語` → `Yu` (Chinese pinyin reading even when\nused in Japanese), etc.\n- The result is *good enough* to be a stable, URL-safe,\nhuman-recognizable handle, but speakers of the source language will not\nconsider it \"correct.\"\n- It is deterministic, so the same title always produces the same slug —\nimportant since `url_title` is recomputed on every request.\n\nIf maintainers prefer to scope this PR more narrowly (e.g. Arabic only,\nand reject Thai/Hebrew/Cyrillic/etc.), the detector in\n`containsNonLatin` can be tightened to specific Unicode blocks — but\nthat means the other scripts continue to collapse to `topic`, which is\nthe bug we\u0027re trying to fix. I\u0027d argue the broader fix is preferable to\na piecemeal one, but happy to narrow if you want.\n\n## Live deployment / real-world verification\n\nThis patch has been running in production on\n**[ask.namasoft.com](https://ask.namasoft.com)** (an Apache Answer\ninstance we operate) since deployment, built directly from this branch\nvia `docker compose build`. The site hosts Arabic-language questions, so\nthe fix exercises the affected code path on every page load.\n\nSample question URL on the deployed instance:\n\n\u003e `https://ask.namasoft.com/questions/10010000000000115`\n\nThe slug in the URL is the transliterated Arabic title rather than\n`topic`. No data migration was needed since `url_title` is computed on\nevery request from `Title` and never persisted (see *Why this is safe to\nship* below).\n\n## Admin-configurable\n\nThe transliteration is gated by a package-level `atomic.Bool` (default\n**on**, since the current behavior is objectively broken for affected\nusers):\n\n- `htmltext.SetTransliterateNonLatin(enabled bool)`\n- `htmltext.IsTransliterateNonLatinEnabled() bool`\n\nThis is deliberately the minimum surface needed to satisfy \"the setting\nmust be readable from `UrlTitle()`\". A follow-up PR can add an admin UI\nsection that calls `SetTransliterateNonLatin` on save and on startup,\nwithout having to re-plumb every `htmltext.UrlTitle` call site through\n`context.Context`.\n\n**Default choice — please confirm:** I picked **default-on** because the\nexisting `topic` behavior is a bug for affected users. If you\u0027d prefer\ndefault-off for strict backward compat on existing installs, flip the\n`init()` in `pkg/htmltext/htmltext.go` to `Store(false)` and surface the\ntoggle as opt-in.\n\n## Why this is safe to ship\n\n- `url_title` is **not** a persisted column. It\u0027s not on the `Question`\nentity in `internal/entity/question_entity.go`, no migration has ever\nadded/dropped it, and every call site (`question_service.go`,\n`revision_service.go`, `vote_service.go`,\nsearch/report/review/rank/comment services, controllers, repos)\nrecomputes it from `Title` at response-build time via\n`htmltext.UrlTitle(...)`.\n- That means the fix is read-only: existing rows light up with correct\nslugs on the next request, with no migration and no data rewrite.\n- Rollback is just redeploying the prior image; nothing on disk changes.\n\n## Test coverage\n\n`pkg/htmltext/htmltext_test.go`:\n\n- **`TestUrlTitleTable`** — table-driven, one case per affected script\n(the full matrix above), plus:\n  - `empty` → `topic`\n  - `pure latin unchanged` → byte-identical to pre-fix\n- `pure chinese unchanged` → byte-identical to pre-fix (pins existing\npinyin behavior)\n- `japanese kanji goes through pinyin path unchanged` → documents the\npre-existing Han-block limitation\n  - `emoji only falls back to topic` → unchanged\n- `long arabic truncates at cutLongTitle boundary` → exercises the\n150-byte cap and UTF-8 boundary safety\n- **`TestUrlTitleTransliterationToggle`** — with the toggle off,\nnon-Latin titles collapse to `topic` (pre-fix behavior); with it on,\nthey transliterate.\n- Existing `TestUrlTitle` left untouched.\n\nTest plan for reviewers:\n\n- [ ] `go test ./pkg/htmltext/...` — all pass\n- [ ] Visit the live sample URL above and confirm slug is\ntransliterated, not `topic`\n- [ ] Verify Chinese / Latin / emoji-only / empty behavior is\nbyte-identical to `main` (covered by table tests)\n\n## Out of scope (intentionally)\n\n- No admin UI / site setting plumbing in this PR — see\n*Admin-configurable* above. Happy to do the React `Non-Latin Languages\nHandling` admin page + `SiteType` + service / controller / migration in\na follow-up if maintainers want it.\n- No change to the `\"topic\"` empty-result fallback.\n- No plugin interface for slug generation — mirrored the existing\n`convertChinese` pre-step pattern instead.\n- No per-language romanization library — this is an explicit non-goal;\nsee *Transliteration quality* above.\n\n## Issues / discussion\n\nI didn\u0027t find an existing upstream issue covering this — happy to be\npointed at one if there is.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\nCo-authored-by: LinkinStars \u003clinkinstar@foxmail.com\u003e"
    },
    {
      "commit": "4b8de1897b34bb040ec955538a5377a041afffe0",
      "tree": "811a614e751a670be9068372153e4102e8bcd183",
      "parents": [
        "09eaa5b7e3acefcde37cf6cce8a8317ad24568cf"
      ],
      "author": {
        "name": "Luffy",
        "email": "52o@qq52o.cn",
        "time": "Tue Jun 02 11:50:54 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri Jul 10 10:19:39 2026 +0800"
      },
      "message": "fix: update license entries\n"
    },
    {
      "commit": "09eaa5b7e3acefcde37cf6cce8a8317ad24568cf",
      "tree": "f683171e4d7357c16d227c23199a9884775b8708",
      "parents": [
        "2746bf5b455fa67f1bec6178c75121397a3816f5"
      ],
      "author": {
        "name": "Luke Gao",
        "email": "dhangao@hotmail.com",
        "time": "Sat May 30 15:33:54 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri Jul 10 10:19:39 2026 +0800"
      },
      "message": "feat: add reasoning content to AI conversation records and update related components (#1530)\n\nFix #1524 \n\nRoot cause\n\nDeepSeek\u0027s reasoning models stream reasoning_content alongside content.\nAnswer ignored it, so follow-up requests failed with 400: The\nreasoning_content in the thinking mode must be passed back to the API,\nand the thinking text was never shown or saved.\n\nFix\n\n- Capture reasoning_content from the stream and pass it back to theAPI\non subsequent rounds.\n - Persist it with the conversation (new DB column via migrationv2.0.2).\n- Render it in the chat UI as a collapsible \"Thinking…/Thoughts\"panel\nabove the answer.\n\nCompatibility\n\nNullable column, omitempty field, UI hides the panel when empty — old\nconversations and non-reasoning models behave exactly as before.\n\nDemo\n\n\n\nhttps://github.com/user-attachments/assets/49b1a2a1-9133-4ac2-bbeb-860215a50285"
    },
    {
      "commit": "2746bf5b455fa67f1bec6178c75121397a3816f5",
      "tree": "c5a4a5601496737906182383cdea79882b9b814a",
      "parents": [
        "f9941827b1dd19786e6d8f1e817add7593316114"
      ],
      "author": {
        "name": "robin",
        "email": "robin@rnode.me",
        "time": "Mon May 25 10:45:38 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Mon May 25 10:46:54 2026 +0800"
      },
      "message": "fix: update copyright year to 2026\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "f9941827b1dd19786e6d8f1e817add7593316114",
      "tree": "b5939bbf0817183595f7d8c50fa17f3f36467a54",
      "parents": [
        "48b4622aca60a8ddd230d5cca9304127cb3c0d9c"
      ],
      "author": {
        "name": "Luffy",
        "email": "52o@qq52o.cn",
        "time": "Fri May 22 16:18:15 2026 +0800"
      },
      "committer": {
        "name": "Robin",
        "email": "hello@robinren.me",
        "time": "Mon May 25 10:38:59 2026 +0800"
      },
      "message": "fix: missing uuid license\n"
    },
    {
      "commit": "48b4622aca60a8ddd230d5cca9304127cb3c0d9c",
      "tree": "8726b040a0022675d92c4bf2b214fc2451d77f1d",
      "parents": [
        "2a442d333cca27bd9a87601c927a8e3be7503987"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Wed May 20 12:09:59 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Wed May 20 14:27:00 2026 +0800"
      },
      "message": "chore: update Docker actions to specific versions for consistency\n"
    },
    {
      "commit": "2a442d333cca27bd9a87601c927a8e3be7503987",
      "tree": "808a0a244160629e52be92ce0a5fc08d453244ff",
      "parents": [
        "84204a718ae7e657aee0afc3013d5d9acd8806de"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Wed May 20 12:02:09 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Wed May 20 14:27:00 2026 +0800"
      },
      "message": "chore: update Docker actions to latest versions for improved stability\n"
    },
    {
      "commit": "84204a718ae7e657aee0afc3013d5d9acd8806de",
      "tree": "5817874eda5010090091b2b4e65fbdb9564c7db5",
      "parents": [
        "5be5c84a262e30535fbe00250aab14082ad035e3"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Wed May 20 11:42:35 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Wed May 20 14:27:00 2026 +0800"
      },
      "message": "chore: update GitHub Actions to use latest versions of setup actions\n"
    },
    {
      "commit": "5be5c84a262e30535fbe00250aab14082ad035e3",
      "tree": "655000fbd80f0d843b88eb6db519a2c0ab41bfcb",
      "parents": [
        "a218924ba0174fd4518b9b21ea36f7f63eddef7d"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Wed May 20 11:28:50 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Wed May 20 11:29:14 2026 +0800"
      },
      "message": "chore: update version to 2.0.1\n"
    },
    {
      "commit": "a218924ba0174fd4518b9b21ea36f7f63eddef7d",
      "tree": "00a62787c77b0b9728b5cc4a4a2f97307db6f14b",
      "parents": [
        "b1da65fbe49fa48a3e9bb626e20df667ee8d8bb8",
        "316417961ad03525d8f2b06263a3a900e1664aa3"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Wed May 20 11:20:08 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Wed May 20 11:20:08 2026 +0800"
      },
      "message": "Merge remote-tracking branch \u0027origin/dev\u0027 into test\n"
    },
    {
      "commit": "316417961ad03525d8f2b06263a3a900e1664aa3",
      "tree": "4a4c674385d6f9a7d05093a9122e15ae5c52a624",
      "parents": [
        "ab236f2d6a272c5dc6de313b83086e6392e089e3"
      ],
      "author": {
        "name": "robin",
        "email": "robin@rnode.me",
        "time": "Mon May 18 20:01:32 2026 +0800"
      },
      "committer": {
        "name": "Robin",
        "email": "hello@robinren.me",
        "time": "Tue May 19 10:15:36 2026 +0800"
      },
      "message": "fix: attachment upload broken after v2.0.0 upgrade (#1525)\n\n- base.ts: add replaceRange method to CodeMirror adapter\n- file.tsx: use replaceSelection to insert loading text (fixes RangeError)\n- file.tsx: use useState/useEffect for stable editorState reference in async callbacks\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "b1da65fbe49fa48a3e9bb626e20df667ee8d8bb8",
      "tree": "a61f00a28d96a6c97e610bc82aec7734726b1012",
      "parents": [
        "0aca063077ccc6c41a514142713ee8b5bf06c991",
        "11091244f64e5a7e472edcd477c1ff4124eca7c3"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Mon May 11 12:16:58 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Mon May 11 12:16:58 2026 +0800"
      },
      "message": "Merge remote-tracking branch \u0027origin/fix/2.0.1/chat\u0027 into test\n"
    },
    {
      "commit": "0aca063077ccc6c41a514142713ee8b5bf06c991",
      "tree": "8f686bb207f3e9e0f1ad188da3d9daf56cf2cbad",
      "parents": [
        "97924574c4e92b46567ce866feb84f490f2195e4",
        "ab236f2d6a272c5dc6de313b83086e6392e089e3"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Mon May 11 12:16:49 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Mon May 11 12:16:49 2026 +0800"
      },
      "message": "Merge remote-tracking branch \u0027origin/dev\u0027 into test\n"
    },
    {
      "commit": "11091244f64e5a7e472edcd477c1ff4124eca7c3",
      "tree": "34160ab0bc5ad774db7ae5569030f4674163f6de",
      "parents": [
        "d1a4092c61ccd41988d1033fce47eb513adb433e"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Mon May 11 12:05:18 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Mon May 11 12:05:18 2026 +0800"
      },
      "message": "fix(user): enhance avatar validation by adding checks for custom avatars and file ownership\n"
    },
    {
      "commit": "d1a4092c61ccd41988d1033fce47eb513adb433e",
      "tree": "6e91a7d0ca8b6931eb2e29b73c7d3cb549bcf3f7",
      "parents": [
        "11c80384f13a27e27c871c05bb353489d1363ee2"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Sat May 09 16:07:09 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Sat May 09 16:07:09 2026 +0800"
      },
      "message": "fix(email): enhance email templates by escaping HTML characters in dynamic content\n"
    },
    {
      "commit": "11c80384f13a27e27c871c05bb353489d1363ee2",
      "tree": "cd0076065a41e7892be337ed4389fff7c88294f5",
      "parents": [
        "9da00a807db70ebd9033dc8298707d0a1e68ce52"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Sat May 09 15:13:50 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Sat May 09 15:13:50 2026 +0800"
      },
      "message": "fix(chat): enhance visibility checks by adding admin moderator support in answer and comment services\n"
    },
    {
      "commit": "ab236f2d6a272c5dc6de313b83086e6392e089e3",
      "tree": "07729ca5e7df3b0f727c253ac7122080ba8c64cb",
      "parents": [
        "e3831b6f525a17ce26e3a4d6c69076e96e2f9c59"
      ],
      "author": {
        "name": "Herrtian",
        "email": "70463940+Herrtian@users.noreply.github.com",
        "time": "Fri May 01 17:19:43 2026 +0200"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri May 08 20:09:04 2026 +0800"
      },
      "message": "fix(helm): keep install port aligned with service port\n\nSigned-off-by: Tian Teng \u003ctian.teng@emerson.com\u003e\n"
    },
    {
      "commit": "97924574c4e92b46567ce866feb84f490f2195e4",
      "tree": "228b8b74788aec73a1c7d6b6d95ac89010d98d44",
      "parents": [
        "2dbe594da270b533eff2d88ff7e62316078b14de",
        "e3831b6f525a17ce26e3a4d6c69076e96e2f9c59"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri May 08 19:58:22 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri May 08 19:58:22 2026 +0800"
      },
      "message": "Merge remote-tracking branch \u0027origin/dev\u0027 into test\n"
    },
    {
      "commit": "e3831b6f525a17ce26e3a4d6c69076e96e2f9c59",
      "tree": "c9d2cce2d422e93b7307733d2888c169cbc240c9",
      "parents": [
        "c93f3bc5c354853f70aa78b9c53b4507585d809c"
      ],
      "author": {
        "name": "hgaol",
        "email": "dhangao@hotmail.com",
        "time": "Wed Apr 22 23:31:07 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri May 08 19:57:19 2026 +0800"
      },
      "message": "refactor: streamline plugin initialization by removing redundant search syncer registration\n"
    },
    {
      "commit": "c93f3bc5c354853f70aa78b9c53b4507585d809c",
      "tree": "e0ccfba422278ca5fbbb6dee6432ee2a297a9b32",
      "parents": [
        "278fdfd8c3bc53521b42ccf5b6d38d8203aa5c90"
      ],
      "author": {
        "name": "hgaol",
        "email": "dhangao@hotmail.com",
        "time": "Wed Apr 22 23:30:51 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri May 08 19:57:19 2026 +0800"
      },
      "message": "refactor: simplify SaveSiteAI method by removing unnecessary error handling\n"
    },
    {
      "commit": "278fdfd8c3bc53521b42ccf5b6d38d8203aa5c90",
      "tree": "9499f46ec2f55587f682fa8862ce8a133f778b29",
      "parents": [
        "2836d0ea819906fd08574261d4f3fd696f9967cb"
      ],
      "author": {
        "name": "hgaol",
        "email": "dhangao@hotmail.com",
        "time": "Wed Apr 22 22:58:58 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri May 08 19:57:19 2026 +0800"
      },
      "message": "refactor: rename UpdateSearch to updateSearch for consistency\n"
    },
    {
      "commit": "2836d0ea819906fd08574261d4f3fd696f9967cb",
      "tree": "46dd3a11f5c0c2422e2e01964bc7143361de8b06",
      "parents": [
        "ac7bdda074efcc8a6122cda6f1b7af2ff04f14dd"
      ],
      "author": {
        "name": "hgaol",
        "email": "dhangao@hotmail.com",
        "time": "Wed Apr 22 22:46:24 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri May 08 19:57:19 2026 +0800"
      },
      "message": "chore: add Apache License header to multiple files\n"
    },
    {
      "commit": "ac7bdda074efcc8a6122cda6f1b7af2ff04f14dd",
      "tree": "b877f74ce5e4edb15ebb58f3d658037ac82c503c",
      "parents": [
        "057679a2bf586b2ebaf95ec2eed7a78d6aa7074f"
      ],
      "author": {
        "name": "hgaol",
        "email": "dhangao@hotmail.com",
        "time": "Wed Apr 22 22:21:33 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri May 08 19:57:19 2026 +0800"
      },
      "message": "fix lint\n"
    },
    {
      "commit": "057679a2bf586b2ebaf95ec2eed7a78d6aa7074f",
      "tree": "91d43e3b1c2f51a0531166ebfc964042254a84d5",
      "parents": [
        "5d923f8ca32edaade5377bf0e9200288e0823b9b"
      ],
      "author": {
        "name": "hgaol",
        "email": "dhangao@hotmail.com",
        "time": "Wed Apr 22 22:02:29 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri May 08 19:57:19 2026 +0800"
      },
      "message": "refactor: remove unused build-local-vector-plugins target and delete VECTOR_SEARCH_DESIGN.md\n"
    },
    {
      "commit": "5d923f8ca32edaade5377bf0e9200288e0823b9b",
      "tree": "e04919411204b6d6e92d686acef0f4f7af1a96d2",
      "parents": [
        "7d0714dd1a777de08765f081ed2e4f95e80f30e9"
      ],
      "author": {
        "name": "hgaol",
        "email": "dhangao@hotmail.com",
        "time": "Tue Apr 21 23:14:43 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri May 08 19:57:19 2026 +0800"
      },
      "message": "feat: add vector sync service and integrate with answer and question services\n"
    },
    {
      "commit": "7d0714dd1a777de08765f081ed2e4f95e80f30e9",
      "tree": "91b2fe09c9e305cc04338e16e760eaf2ccef5d3f",
      "parents": [
        "8dd55af6cd6bcec61066a4678a0ead020b752dfe"
      ],
      "author": {
        "name": "hgaol",
        "email": "dhangao@hotmail.com",
        "time": "Sun Apr 12 13:39:07 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri May 08 19:57:19 2026 +0800"
      },
      "message": "fix lint\n"
    },
    {
      "commit": "8dd55af6cd6bcec61066a4678a0ead020b752dfe",
      "tree": "348c6138bc2682c823af76ae5389a1dfb33cf89e",
      "parents": [
        "22c2a5c276c5dd53014450ecd99009d305ab7118"
      ],
      "author": {
        "name": "hgaol",
        "email": "dhangao@hotmail.com",
        "time": "Sun Apr 12 13:31:52 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri May 08 19:57:19 2026 +0800"
      },
      "message": "fix lint\n"
    },
    {
      "commit": "22c2a5c276c5dd53014450ecd99009d305ab7118",
      "tree": "92a221b1ad42e862788bb55228ddaf4ecd56428b",
      "parents": [
        "f346bcc8fa629b9eb27f594d81cfb49e765d7ac5"
      ],
      "author": {
        "name": "hgaol",
        "email": "dhangao@hotmail.com",
        "time": "Sun Apr 12 13:22:00 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri May 08 19:57:19 2026 +0800"
      },
      "message": "feat: implement vector search plugin and syncer for question/answer embeddings\n\n- Added a new vector search syncer to aggregate questions and answers with comments for vector embedding.\n- Introduced a new VectorSearch interface and related structures for managing vector storage and similarity search.\n- Refactored embedding service to delegate semantic search to the new vector search plugin.\n- Removed embedding-related fields from SiteAIProvider and UI forms as part of the transition to the new vector search architecture.\n- Updated plugin registration to include vector search capabilities.\n- Cleaned up embedding service methods and removed unused dependencies.\n"
    },
    {
      "commit": "f346bcc8fa629b9eb27f594d81cfb49e765d7ac5",
      "tree": "7da6655ac8430b8d44a41ed9e405c6b478c35406",
      "parents": [
        "dc71f4a29243bc597d7d1640438490e6b13394be"
      ],
      "author": {
        "name": "hgaol",
        "email": "dhangao@hotmail.com",
        "time": "Mon Mar 02 19:26:16 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri May 08 19:57:19 2026 +0800"
      },
      "message": "update init tables\n"
    },
    {
      "commit": "dc71f4a29243bc597d7d1640438490e6b13394be",
      "tree": "38438962cef08e381ae571c6e384bc9f2f164776",
      "parents": [
        "dea18f997c6f94fe7493d6cfe4236cd4a0082f6a"
      ],
      "author": {
        "name": "hgaol",
        "email": "dhangao@hotmail.com",
        "time": "Mon Mar 02 19:02:06 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri May 08 19:57:19 2026 +0800"
      },
      "message": "fix lint issue\n"
    },
    {
      "commit": "dea18f997c6f94fe7493d6cfe4236cd4a0082f6a",
      "tree": "8e6b2ac87e0bf4c99d98b710af526587028224c6",
      "parents": [
        "71d11b6205de522624d3154f080a04e9436732d3"
      ],
      "author": {
        "name": "hgaol",
        "email": "dhangao@hotmail.com",
        "time": "Mon Mar 02 18:37:04 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri May 08 19:57:19 2026 +0800"
      },
      "message": "feat: support semantic search in AI chat and embedding ability\n"
    },
    {
      "commit": "71d11b6205de522624d3154f080a04e9436732d3",
      "tree": "cc10dfce764704afd546a71b9cb2b6ef4ca51a49",
      "parents": [
        "ff997cb0142fc8f1943a726a86ea1a514d57e044"
      ],
      "author": {
        "name": "hgaol",
        "email": "dhangao@hotmail.com",
        "time": "Mon Apr 13 00:00:33 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Wed Apr 15 19:43:57 2026 +0800"
      },
      "message": "fix: resolve local plugin paths to absolute and enhance module replacement logic\n"
    },
    {
      "commit": "9da00a807db70ebd9033dc8298707d0a1e68ce52",
      "tree": "193dac1e596b30f9aa97280aa56bf08d90bfea20",
      "parents": [
        "cfc3e54f30cc5e01afb7110ecc1da9152d0a3a41"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Wed Apr 15 16:15:13 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Wed Apr 15 16:15:13 2026 +0800"
      },
      "message": "fix(build): enhance module replacement handling for v2+ versions and implement local cloning\n"
    },
    {
      "commit": "cfc3e54f30cc5e01afb7110ecc1da9152d0a3a41",
      "tree": "6ef4f9369789600ae8b7789204f0639fd18be45f",
      "parents": [
        "6fc25c69f4efaac0c4f34ce7401ac3b6baab59df"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Wed Mar 25 19:31:31 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Wed Mar 25 19:31:31 2026 +0800"
      },
      "message": "fix(image): enhance image decoding by implementing format-specific checks for JPEG, PNG, and GIF\n"
    },
    {
      "commit": "2dbe594da270b533eff2d88ff7e62316078b14de",
      "tree": "5e9e1e7900e843dd3ffe24af4b2cd34344ee6e1c",
      "parents": [
        "36b548140e986afe6111d03c53322b088be2412f"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Wed Mar 04 12:04:52 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Wed Mar 04 12:04:52 2026 +0800"
      },
      "message": "fix(short_id): enhance GetEnableShortID to support gin context for short ID flag retrieval\n"
    },
    {
      "commit": "36b548140e986afe6111d03c53322b088be2412f",
      "tree": "f204cc1e39afb92f8d382aeb515b3714c71a90ad",
      "parents": [
        "3c5c47b91bbd2ffd1d8170c6d0ce80e8b8c6ba21",
        "ff997cb0142fc8f1943a726a86ea1a514d57e044"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Tue Mar 03 12:17:41 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Tue Mar 03 12:17:41 2026 +0800"
      },
      "message": "Merge remote-tracking branch \u0027origin/dev\u0027 into test\n"
    },
    {
      "commit": "3c5c47b91bbd2ffd1d8170c6d0ce80e8b8c6ba21",
      "tree": "12165c2e1ef2d9f0023058b47723fffc9be8dc8d",
      "parents": [
        "659d1f6ad9152ff8edf1f7d742d96fa18deb6882",
        "6fc25c69f4efaac0c4f34ce7401ac3b6baab59df"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Tue Mar 03 12:17:36 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Tue Mar 03 12:17:36 2026 +0800"
      },
      "message": "Merge remote-tracking branch \u0027origin/fix/2.0.1/chat\u0027 into test\n"
    },
    {
      "commit": "6fc25c69f4efaac0c4f34ce7401ac3b6baab59df",
      "tree": "8f3c84a79d16853865ba7cacebb355cfa8f63bd4",
      "parents": [
        "869b040e92d66f344ca9f581592aa8044d399828"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Tue Mar 03 12:17:20 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Tue Mar 03 12:17:20 2026 +0800"
      },
      "message": "fix(auth): add API key scope checks to enhance authorization security\n"
    },
    {
      "commit": "ff997cb0142fc8f1943a726a86ea1a514d57e044",
      "tree": "49a5b9d2f3b6a84a813f771327379044a62adac7",
      "parents": [
        "09599e4c20699990c5303748b27428701315148a"
      ],
      "author": {
        "name": "maishivamhoo123",
        "email": "maishivamhoo@gmail.com",
        "time": "Mon Feb 09 12:27:17 2026 +0530"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Mon Mar 02 17:37:43 2026 +0800"
      },
      "message": "fix: update migration version to v2.0.1 and remove default value for TEXT column\n"
    },
    {
      "commit": "09599e4c20699990c5303748b27428701315148a",
      "tree": "5ab6578c50741b3cdbf5665247ebd314fafbc41f",
      "parents": [
        "844c73cd7fbb893e17bf4435288626241bf58b9d"
      ],
      "author": {
        "name": "maishivamhoo123",
        "email": "maishivamhoo@gmail.com",
        "time": "Fri Feb 06 22:27:05 2026 +0530"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Mon Mar 02 17:37:43 2026 +0800"
      },
      "message": "style: apply gofmt formatting\n"
    },
    {
      "commit": "844c73cd7fbb893e17bf4435288626241bf58b9d",
      "tree": "c4a2ef63c6a677f109c1fd6506b8361d9f3d17de",
      "parents": [
        "d6cb1b119f5888a5897c31830608e44656d1254d"
      ],
      "author": {
        "name": "maishivamhoo123",
        "email": "maishivamhoo@gmail.com",
        "time": "Fri Feb 06 22:07:53 2026 +0530"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Mon Mar 02 17:37:43 2026 +0800"
      },
      "message": "fix: change avatar column type to TEXT to support long URLs\n"
    },
    {
      "commit": "d6cb1b119f5888a5897c31830608e44656d1254d",
      "tree": "03ae7b544231d9689037469d3babb280dc0a54d5",
      "parents": [
        "52880f9d5a0c4f5bcc1a278fb79e5a7b86548139"
      ],
      "author": {
        "name": "MakiWinster",
        "email": "makiiiiiiiho@gmail.com",
        "time": "Thu Feb 19 18:19:52 2026 +0800"
      },
      "committer": {
        "name": "dashuai",
        "email": "lishuailing@sifou.com",
        "time": "Mon Mar 02 16:14:07 2026 +0800"
      },
      "message": "fix: update bubble user background color for dark mode\n"
    },
    {
      "commit": "52880f9d5a0c4f5bcc1a278fb79e5a7b86548139",
      "tree": "ffc2fd1e5a337ebc9da4065c94fe87ce637a5604",
      "parents": [
        "7952075ce5b0ce5998a72f6833a0588ac40616e2"
      ],
      "author": {
        "name": "MakiWinster",
        "email": "makiiiiiiiho@gmail.com",
        "time": "Tue Feb 17 10:38:40 2026 +0800"
      },
      "committer": {
        "name": "dashuai",
        "email": "lishuailing@sifou.com",
        "time": "Mon Mar 02 16:14:07 2026 +0800"
      },
      "message": "fix: update bubble user background color for dark mode\n"
    },
    {
      "commit": "659d1f6ad9152ff8edf1f7d742d96fa18deb6882",
      "tree": "f373258ba0f02bd40b7498da819d0e065193c850",
      "parents": [
        "7952075ce5b0ce5998a72f6833a0588ac40616e2",
        "869b040e92d66f344ca9f581592aa8044d399828"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Mon Feb 09 23:36:02 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Mon Feb 09 23:36:02 2026 +0800"
      },
      "message": "Merge remote-tracking branch \u0027origin/fix/2.0.1/chat\u0027 into test\n"
    },
    {
      "commit": "7952075ce5b0ce5998a72f6833a0588ac40616e2",
      "tree": "50a10d3d8f010e4ffb750a7b508936737eb819a7",
      "parents": [
        "52d057ef1849f7f763b975e9c339c380c1738e47"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Mon Feb 09 23:35:17 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Mon Feb 09 23:35:17 2026 +0800"
      },
      "message": "fix: normalize ObjectID and CommentID in comment requests\n"
    },
    {
      "commit": "52d057ef1849f7f763b975e9c339c380c1738e47",
      "tree": "a47911ac97d35ac1830ed27a3c1daec268b8ff13",
      "parents": [
        "638fb082c56431397a3c63d00f3fc57c6b57f08d"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Mon Feb 09 20:27:37 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Mon Feb 09 20:27:37 2026 +0800"
      },
      "message": "fix: add ID validation and normalization functions for comment handling\n"
    },
    {
      "commit": "869b040e92d66f344ca9f581592aa8044d399828",
      "tree": "49404f4cc2885f26012dd7e8aceebf0136913d52",
      "parents": [
        "0db88d63e304ee217353fd6c29f6987865889d1c"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri Feb 06 20:31:54 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri Feb 06 20:31:54 2026 +0800"
      },
      "message": "fix(auth): enhance admin user cache management and add status checks for email verification and suspension\n"
    },
    {
      "commit": "0db88d63e304ee217353fd6c29f6987865889d1c",
      "tree": "083ad7d6c75f79107c96d95290ecabbc644e0a3d",
      "parents": [
        "92994b49976b6206a7000d045d924ec4fd5be1be"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri Feb 06 18:07:52 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri Feb 06 18:07:52 2026 +0800"
      },
      "message": "fix(chat): implement HTML rendering for display content\n"
    },
    {
      "commit": "92994b49976b6206a7000d045d924ec4fd5be1be",
      "tree": "80fe9cf3a4356da2521f2b3231a4ae0ace7fce93",
      "parents": [
        "638fb082c56431397a3c63d00f3fc57c6b57f08d"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri Feb 06 15:32:45 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri Feb 06 15:32:45 2026 +0800"
      },
      "message": "fix: add IsAdminModerator field to request structs and implement visibility checks for timeline objects\n"
    },
    {
      "commit": "638fb082c56431397a3c63d00f3fc57c6b57f08d",
      "tree": "f0885c3c0a08762e083a5f4ff8c60c67eceb1512",
      "parents": [
        "fca80abbaf3807cf50c2927982033f282dc7effa"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Thu Feb 05 16:17:32 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Thu Feb 05 16:17:32 2026 +0800"
      },
      "message": "fix: enhance bracket handling in formatting and add concurrency test for internationalization\n"
    },
    {
      "commit": "fca80abbaf3807cf50c2927982033f282dc7effa",
      "tree": "ad611f4c484fc8f0fda75d378a5990affa3fdb1c",
      "parents": [
        "a6bfd402b68091b4e84f98255c48caa9dbefe17d"
      ],
      "author": {
        "name": "kumfo",
        "email": "kumfo@sifou.com",
        "time": "Tue Feb 03 11:07:48 2026 +0800"
      },
      "committer": {
        "name": "kumfo",
        "email": "kumfo@sifou.com",
        "time": "Tue Feb 03 11:07:48 2026 +0800"
      },
      "message": "fix: correct variable name in JSON unmarshal for site general information\n"
    },
    {
      "commit": "a6bfd402b68091b4e84f98255c48caa9dbefe17d",
      "tree": "e07b3121309e8b1bdc0d40e01d7666f554045b0b",
      "parents": [
        "a55b4c65d214b72c85d64261b6d85b68eacef66e"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Thu Jan 29 17:01:18 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Thu Jan 29 17:02:43 2026 +0800"
      },
      "message": "fix: update AI provider configuration ID in default settings\n"
    },
    {
      "commit": "a55b4c65d214b72c85d64261b6d85b68eacef66e",
      "tree": "90052ee9237595ece16ef1596a7a1340bced2a42",
      "parents": [
        "5ec9d8b6235b2e4a4c139999464870479b58c229"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Thu Jan 29 16:59:46 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Thu Jan 29 17:02:43 2026 +0800"
      },
      "message": "fix: update Russian translation for unlist post title\n"
    },
    {
      "commit": "5ec9d8b6235b2e4a4c139999464870479b58c229",
      "tree": "77fac9d7ecdb694d6d75832a0ff0e4f9d8b20484",
      "parents": [
        "ff6b5736c3ab702e7a9669f6ef37205575a1f783"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Thu Jan 29 16:59:39 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Thu Jan 29 17:02:43 2026 +0800"
      },
      "message": "fix: add AI provider configuration to initialization data\n"
    },
    {
      "commit": "ff6b5736c3ab702e7a9669f6ef37205575a1f783",
      "tree": "3742f6d3792cb500176caa8913bc57824ae1402a",
      "parents": [
        "d47d7cc452ee2784a783d99b75fa06eadc462ba2"
      ],
      "author": {
        "name": "shuai",
        "email": "lishuailing@sifou.com",
        "time": "Thu Jan 29 17:00:56 2026 +0800"
      },
      "committer": {
        "name": "dashuai",
        "email": "lishuailing@sifou.com",
        "time": "Thu Jan 29 17:02:15 2026 +0800"
      },
      "message": "fix: admin users-setting page title should be users\n"
    },
    {
      "commit": "d47d7cc452ee2784a783d99b75fa06eadc462ba2",
      "tree": "a7cec514de7b68d552d36e4ded238bcd70339405",
      "parents": [
        "90022ce039b2973a12481117f92a3180ee92c7f3"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Thu Jan 29 16:48:42 2026 +0800"
      },
      "committer": {
        "name": "dashuai",
        "email": "lishuailing@sifou.com",
        "time": "Thu Jan 29 16:50:25 2026 +0800"
      },
      "message": "fix: update Indonesian and Russian translations for tag creation and appreciation\n"
    },
    {
      "commit": "90022ce039b2973a12481117f92a3180ee92c7f3",
      "tree": "fab2ddf91d8be333719069a5a3596bb411071b36",
      "parents": [
        "50a96809d834e23e96205f70be8ebf36c98a5201"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Thu Jan 29 16:48:35 2026 +0800"
      },
      "committer": {
        "name": "dashuai",
        "email": "lishuailing@sifou.com",
        "time": "Thu Jan 29 16:50:25 2026 +0800"
      },
      "message": "fix: integrate API key authentication into existing services and routes\n"
    },
    {
      "commit": "50a96809d834e23e96205f70be8ebf36c98a5201",
      "tree": "5d77f0356d6a8154afa3fe49bb23ed5435a2f161",
      "parents": [
        "a08c12474816749be0432eabe6082f4dc392c039"
      ],
      "author": {
        "name": "shuai",
        "email": "lishuailing@sifou.com",
        "time": "Thu Jan 29 16:44:42 2026 +0800"
      },
      "committer": {
        "name": "dashuai",
        "email": "lishuailing@sifou.com",
        "time": "Thu Jan 29 16:50:25 2026 +0800"
      },
      "message": "fix: Installation of the fourth part of form validation error\n"
    },
    {
      "commit": "a08c12474816749be0432eabe6082f4dc392c039",
      "tree": "809c54a13b3276da5e53545e4427d60e42b08a39",
      "parents": [
        "b522a168e34ed954cf9f530c205d55daa4d4c7a7"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Thu Jan 29 12:26:53 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Thu Jan 29 12:28:40 2026 +0800"
      },
      "message": "fix: update translations for Czech, Indonesian, and Russian languages\n"
    },
    {
      "commit": "b522a168e34ed954cf9f530c205d55daa4d4c7a7",
      "tree": "ca84b04ea933528390634e42f9f3f416fe67701b",
      "parents": [
        "e5cb38bd74491ba53f01c5c7f67c1192463f7b95"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Thu Jan 29 11:15:08 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Thu Jan 29 11:15:38 2026 +0800"
      },
      "message": "feat: add GetConfigByKeyFromDB method to retrieve config directly\n"
    },
    {
      "commit": "e5cb38bd74491ba53f01c5c7f67c1192463f7b95",
      "tree": "2504b61b7f48c5de4c1033769b78d6505b2b3f0f",
      "parents": [
        "7dfb8b320e596225bac2be355fcc2abcbc232237"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Wed Jan 28 17:29:56 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Wed Jan 28 17:30:31 2026 +0800"
      },
      "message": "chore: add license files and update Go version to 1.24.0\n"
    },
    {
      "commit": "7dfb8b320e596225bac2be355fcc2abcbc232237",
      "tree": "0dcf76e23a76a9d8d64806426c2690c31e391f8d",
      "parents": [
        "34c1e8a38a4ea6bcd140508afb71bcd373757bff"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Wed Jan 28 16:24:27 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jan 28 16:24:27 2026 +0800"
      },
      "message": "New translations (#1486)\n\nCo-authored-by: Sunny \u003c1147886+sunshineg@users.noreply.github.com\u003e"
    },
    {
      "commit": "34c1e8a38a4ea6bcd140508afb71bcd373757bff",
      "tree": "3619de1b1ba1618bb33e4b0c23f1e3d43d8c490c",
      "parents": [
        "4fd96675f356de5932948c40f658e47370b80394"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Wed Jan 28 15:45:39 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Wed Jan 28 15:45:39 2026 +0800"
      },
      "message": "docs(Makefile): upgrade version to 2.0.0\n"
    },
    {
      "commit": "4fd96675f356de5932948c40f658e47370b80394",
      "tree": "08b521c3eefce4a7ed0ac4305e5d5cae0266083a",
      "parents": [
        "a5edc4fc013fa30b2281d1b63539c4f9cc85d6e5"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Wed Jan 28 12:11:28 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Wed Jan 28 12:11:28 2026 +0800"
      },
      "message": "fix: improve Brotli compression handling and validate user input in vote status\n"
    },
    {
      "commit": "a5edc4fc013fa30b2281d1b63539c4f9cc85d6e5",
      "tree": "7d932414b1453c7fb819fd31c741367eb5671935",
      "parents": [
        "2a99d234ea405522879c4bbad84544dc6ae3b7e5"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Wed Jan 28 11:15:40 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Wed Jan 28 11:15:40 2026 +0800"
      },
      "message": "feat: add advanced site settings and related API endpoints\n"
    },
    {
      "commit": "2a99d234ea405522879c4bbad84544dc6ae3b7e5",
      "tree": "3f0550411fe87d2cedd64641414dac2db30c8668",
      "parents": [
        "8b61cad0143bf2978e75a0e02c7ca1c0de3bc309",
        "9fbf9e4ff44aca7d6aa3ca112215d54652f7ef2b"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Wed Jan 28 11:13:44 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Wed Jan 28 11:13:44 2026 +0800"
      },
      "message": "Merge remote-tracking branch \u0027origin/feat/1.8.0/new-cp-fe\u0027 into test\n\n# Conflicts:\n#\tdocs/docs.go\n#\tdocs/swagger.json\n#\tdocs/swagger.yaml\n#\tinternal/base/constant/site_type.go\n#\tinternal/controller/ai_controller.go\n#\tinternal/controller/siteinfo_controller.go\n#\tinternal/migrations/migrations.go\n#\tinternal/schema/siteinfo_schema.go\n#\tinternal/service/mock/siteinfo_repo_mock.go\n"
    },
    {
      "commit": "8b61cad0143bf2978e75a0e02c7ca1c0de3bc309",
      "tree": "7d932414b1453c7fb819fd31c741367eb5671935",
      "parents": [
        "bdd1949a96dc7f33971425d6cc62fa1ecfd60c88"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Tue Jan 27 17:49:29 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Tue Jan 27 17:49:29 2026 +0800"
      },
      "message": "fix(lint): resolve the lint issue\n"
    },
    {
      "commit": "bdd1949a96dc7f33971425d6cc62fa1ecfd60c88",
      "tree": "ea3eb264487ca5bf8472d3f3c30df9447cdc11ea",
      "parents": [
        "9ea13af8606976a447e6f3b416c325627ee4fa79",
        "b83d0214c70126bbb6c97db38e9c239480eb2df7"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Tue Jan 27 17:39:45 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Tue Jan 27 17:39:45 2026 +0800"
      },
      "message": "Merge remote-tracking branch \u0027origin/dev\u0027 into test\n\n# Conflicts:\n#\tgo.mod\n#\tinternal/base/translator/provider.go\n"
    },
    {
      "commit": "9ea13af8606976a447e6f3b416c325627ee4fa79",
      "tree": "c53aa916259a639307c05fe98dbd8cf1b170878b",
      "parents": [
        "ef54781b77bf7010dae6f4dd3a56520919b1e43a"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Tue Jan 27 17:38:47 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Tue Jan 27 17:38:47 2026 +0800"
      },
      "message": "feat(revision): enhance revision management with object status handling\n"
    },
    {
      "commit": "b83d0214c70126bbb6c97db38e9c239480eb2df7",
      "tree": "da5a624095debeac82d821d177eff7e3b93e8493",
      "parents": [
        "5be6ec9e71f74995b6c48377d42a12292f34abca"
      ],
      "author": {
        "name": "ferhat elmas",
        "email": "elmas.ferhat@gmail.com",
        "time": "Fri Jan 23 21:43:40 2026 +0100"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Tue Jan 27 16:08:00 2026 +0800"
      },
      "message": "feat(ci): add lint action\n\nrelated to #1432\n\nSigned-off-by: ferhat elmas \u003celmas.ferhat@gmail.com\u003e\n"
    },
    {
      "commit": "ef54781b77bf7010dae6f4dd3a56520919b1e43a",
      "tree": "89d72478645ced9b3920a0b49d63b3001559a5a8",
      "parents": [
        "cc1567ac4ba4a13b972e9c0b7f28e8320c3bd7ca"
      ],
      "author": {
        "name": "shuai",
        "email": "lishuailing@sifou.com",
        "time": "Mon Jan 26 14:29:20 2026 +0800"
      },
      "committer": {
        "name": "shuai",
        "email": "lishuailing@sifou.com",
        "time": "Mon Jan 26 14:29:20 2026 +0800"
      },
      "message": "fix: mcp menu moved to ai assistant\n"
    },
    {
      "commit": "cc1567ac4ba4a13b972e9c0b7f28e8320c3bd7ca",
      "tree": "262ec4e33315c0582eb6a071aef6a187a01c4f93",
      "parents": [
        "f403eadb2c8b7b560623325c4d0dc49406468bdb"
      ],
      "author": {
        "name": "shuai",
        "email": "lishuailing@sifou.com",
        "time": "Mon Jan 26 14:25:25 2026 +0800"
      },
      "committer": {
        "name": "shuai",
        "email": "lishuailing@sifou.com",
        "time": "Mon Jan 26 14:25:25 2026 +0800"
      },
      "message": "fix: Fix incorrect default value when the input type is number in SchemeForm.\n"
    },
    {
      "commit": "f403eadb2c8b7b560623325c4d0dc49406468bdb",
      "tree": "262db2a5d13d6771d796e80a771a1ebac1d907bb",
      "parents": [
        "94c030829d94910179ff8f3a03285f5f8c51bbdd"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri Jan 23 17:28:19 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri Jan 23 17:28:19 2026 +0800"
      },
      "message": "feat: add AI conversation management endpoints and update related schemas\n"
    },
    {
      "commit": "94c030829d94910179ff8f3a03285f5f8c51bbdd",
      "tree": "482bc96151a8ff466b183c10d5093929493258ec",
      "parents": [
        "ce5aadf30dba2d7a9d01362a4e39af07c51030a2"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri Jan 23 17:22:13 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri Jan 23 17:25:46 2026 +0800"
      },
      "message": "fix: correct loop iteration in AI conversation rounds\n"
    },
    {
      "commit": "ce5aadf30dba2d7a9d01362a4e39af07c51030a2",
      "tree": "cb25fe376a2ccdf65b073e23ddd66d8fbd2e4483",
      "parents": [
        "dc7f75212845dc851e95fe6cb7f2e19b9faf8550"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri Jan 23 17:09:05 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri Jan 23 17:25:42 2026 +0800"
      },
      "message": "feat: add AI configuration support with related controllers and services\n"
    },
    {
      "commit": "9fbf9e4ff44aca7d6aa3ca112215d54652f7ef2b",
      "tree": "1d0aa8cbe1c9d205190d927ba44d298fb0b6811c",
      "parents": [
        "c1549d2909856d6bac6af7e94cc3afc979e00ed0"
      ],
      "author": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri Jan 23 17:22:13 2026 +0800"
      },
      "committer": {
        "name": "LinkinStars",
        "email": "linkinstar@foxmail.com",
        "time": "Fri Jan 23 17:22:13 2026 +0800"
      },
      "message": "fix: correct loop iteration in AI conversation rounds\n"
    }
  ],
  "next": "dc7f75212845dc851e95fe6cb7f2e19b9faf8550"
}
