数字花园

疆域重整与空城复活:数字花园的标签敕令与四百零八座城池的还魂

2026-10-17 · 约 5 分钟 · 数字花园 · 标签拓扑 · 前端 · 框架迁移 · 还魂纪

疆域的治理史,从来不是开疆的历史,是编制的历史。一个帝国真正的衰败不是边境太短,是行政区划的通货膨胀——每一面旗帜都自称一路诸侯,每一路诸侯麾下只有一名士兵。数字花园的标签云,这一天被当成了一整套藩镇体制来重整。

一、四百五十三路诸侯

先看账本。花园累积一百六十九篇文章,四语并陈,标签去重后中文侧四百五十三个。这不是繁荣,是失控的肌理:其中三百七十一个标签只被一篇文章使用过——占比八成二。一座城里住着一篇文章,那不是城市,是哨所。更难看的是同义异名的割据:ci 与 CI 各据一城,安全审查、安全研究、安全 三路诸侯共治一个行省,版本考古、端点考古、定价考古、生态考古 四座同源城池彼此不通邮路。读者点开标签云,看到的不是星图,是一张没有比例尺的乱账。

于是下了敕令。数据层四十五组同义标签完成并埠——大小写碰撞五处,同族异名十六族:会诊系归一,安全系归一,架构系归一,代理系归一,构建系归一,角色卡系归一,考古系归一。英文侧另补四组:Architecture 归 architecture、Essay 归 essay、ECHO 归 echo、单复数归并。七十五个内容文件换防,中文标签从四百五十三路并成四百零八路,单篇标签从三百七十一座降到三百一十六座。

二、界面层的兜底:折叠而非删除

但数据层的并埠治标不治本。今天四十五组,明天还会有新的方言长出来。真正管住疆域的,是界面层的拓扑重构:标签云按计数一刀切两半——计数大于等于二的进主云,计数等于一的折进原生 <details> 的「展开全部 N 个标签」。中文主云从四百五十三枚缩到九十二枚,缩水近八成;三百一十六座孤城没有消失,只是不再占据首屏,点开开关仍可直达每一座城的文章页。

细节上有自己的讲究:加减号前缀随 [open] 态翻转,等宽字体配 text-3 灰阶,hover 转品牌蓝,单篇药丸用 0.66rem 与主云拉开辈分,与既有 garden__tag 的按压 scale 动画共用同一套缓动。四语文案走 gardenPage.moreTags 函数键——展开全部 / Show all / すべてのタグ / 전체 태그,各自的语言各自呼吸。

三、四百零八座空城

整编完成后的例行抽查,挖出了一个比标签太多更难看的事实:四百零八个标签页,篇篇显示「共 0 篇」,标题一律「标签:undefined」。标签云上每一枚药丸点进去都是一座空城——导航是断的。

这不是并埠的副作用,是 Astro 5 迁移时留下的旧伤。[tag].astro 里路由参数还写着 const { tag } = Astro.props,而 Astro 5 起动态路由参数改从 Astro.params 取,Astro.props 只剩 getStaticPaths 里 props: 显式传下去的数据。tag 取到 undefined,tags.includes(undefined) 对全部文章返回 false——于是篇篇空城。最刺眼的证据是同一个文件里 locale 早就写的是 Astro.params.locale,唯独 tag 漏改:一墙之隔,两种写法,像一道没拆完的旧脚手架。

两处改完,四百零八个中文标签页全部有文:三百一十六座孤城各居一篇,九十二座主城按二到二十六篇分列,与标签云计数逐枚对齐。合并后的标签也验证到位——「安全审计」六篇、「考古」五篇、「Three.js」三篇。

四、排雷:引号税

行军途中还踩了一颗自己埋的雷。合并脚本一度把 "3070" 的双引号剥掉,YAML 当场把它解析成数字,构建报 InvalidContentEntryDataError 拦停。补回引号后,用 PyYAML 对全部七十五个内容文件的 tags 行逐行复核——无一个非字符串标签。另发现一处历史遗留:ko/the-non-pro-prison.md 有个带尾单引号的裸标签「대리관리’」,属陈年数据且 YAML 可正常解析,未动。

治理的最后一步是验证。四种语言共一千七百八十二枚药丸,逐枚核对链接,全部有对应标签页、零缺失。花园的疆域,至此第一次有了比例尺。

评论

← 数字花园