Digital Garden
Territorial Reorganization and the Resurrection of Empty Cities: The Tag Edict of the Digital Garden
The history of governing a territory is never the history of conquest — it is the history of organization. An empire does not truly decay because its borders are short; it decays from the inflation of administrative divisions, where every banner calls itself a lordship and every lordship commands exactly one soldier. The tag cloud of the digital garden was reorganized on this day as if it were an entire feudal system.
I. The 453 Lords
Start with the ledger. The garden has accumulated 169 articles across four languages, and after deduplication the Chinese side alone carried 453 distinct tags. That is not prosperity — it is uncontrolled tissue: 371 of those tags were used by exactly one article, a share above eighty-two percent. A city with one article is not a city; it is a watchpost. Worse was the fragmentation of synonyms: ci and CI each held a city, while 安全审查, 安全研究 and 安全 — three lords jointly ruling one province — never exchanged mail; 版本考古, 端点考古, 定价考古 and 生态考古, four cities of common origin, remained unreachable from one another. A reader opening the tag cloud saw not a star map but an unscaled chaos of accounts.
So the edict went out. Forty-five synonym families were merged at the data layer — five case collisions and sixteen clans of near-kin: the clinic family into one, the security family into one, the architecture family into one, the proxy family into one, the build family into one, the character-card family into one, the archaeology family into one. The English side took four more: Architecture into architecture, Essay into essay, ECHO into echo, and singular/plural into one. Seventy-five content files changed garrisons; the Chinese tag count fell from 453 lords to 408, and single-use tags from 371 cities to 316.
II. The Interface Safety Net: Folding, Not Deleting
But data-layer merging treats the symptom, not the disease. Forty-five families today, and new dialects will sprout tomorrow. What actually governs the territory is the topological reconstruction at the interface layer: the tag cloud is split in two by count — those counted at two or more enter the main cloud, those counted at exactly one fold into a native <details> reading “Show all N tags”. The Chinese main cloud shrank from 453 pills to 92, nearly eighty percent smaller; the 316 solitary cities did not vanish, they simply stopped occupying the first screen, and opening the switch still leads directly to every city’s article page.
The details carry their own discipline: a plus/minus prefix flips with the [open] state, a monospace face paired with text-3 grey, hover turning brand blue, and single-post pills set at 0.66rem to mark seniority against the main cloud, sharing the same easing as the existing garden__tag press-scale animation. The four-language copy runs through the gardenPage.moreTags function key — Show all / すべてのタグ / 전체 태그 — each language breathing on its own.
III. The 408 Empty Cities
The routine audit after the reorganization exposed something uglier than too many tags: all 408 tag pages displayed “0 posts”, and every title read “Tag: undefined”. Every pill in the tag cloud led to an empty city — navigation was severed.
This was not a side effect of the merger but an old wound left by the Astro 5 migration. In [tag].astro the route parameter still read const { tag } = Astro.props, whereas from Astro 5 onward dynamic route parameters are taken from Astro.params, and Astro.props retains only what getStaticPaths explicitly passes down via props:. tag came back undefined, and tags.includes(undefined) returned false for every article — hence empty cities throughout. The sharpest evidence sat in the same file: locale had long been written as Astro.params.locale, with only tag left unchanged — two idioms separated by a wall, like a scaffold that was never dismantled.
With both corrected, all 408 Chinese tag pages carried articles: 316 solitary cities each housed one, and the 92 main cities were distributed from two to twenty-six, aligning pill for pill with the tag cloud. The merged tags verified in place too — “安全审计” six, “考古” five, “Three.js” three.
IV. Defusing Mines: The Tax of Quotation Marks
A self-laid mine went off mid-campaign. The merge script had once stripped the double quotes from "3070", YAML promptly parsed it as a number, and the build halted on InvalidContentEntryDataError. The quotes were restored, and every tags line across all seventy-five content files was re-verified line by line with PyYAML — not a single non-string tag. One historical remnant was also found: ko/the-non-pro-prison.md carries a bare tag with a trailing apostrophe, 「대리관리’」, legacy data that YAML parses fine, so it was left untouched.
Governance’s final step is verification. Across four languages, 1,782 pills were checked one by one against their links — every one had a matching tag page, zero missing. The garden’s territory, for the first time, has a scale.
Comments