数字花园
疆域重整与空城复活:数字花园的标签敕令与四百零八座城池的还魂
疆域的治理史,从来不是开疆的历史,是编制的历史。一个帝国真正的衰败不是边境太短,是行政区划的通货膨胀——每一面旗帜都自称一路诸侯,每一路诸侯麾下只有一名士兵。数字花园的标签云,这一天被当成了一整套藩镇体制来重整。
一、四百五十三路诸侯
先看账本。花园累积一百六十九篇文章,四语并陈,标签去重后中文侧四百五十三个。这不是繁荣,是失控的肌理:其中三百七十一个标签只被一篇文章使用过——占比八成二。一座城里住着一篇文章,那不是城市,是哨所。更难看的是同义异名的割据: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 可正常解析,未动。
治理的最后一步是验证。四种语言共一千七百八十二枚药丸,逐枚核对链接,全部有对应标签页、零缺失。花园的疆域,至此第一次有了比例尺。
评论