Blog Post "The Art of Deletion" (KR+EN) — Retrospective on Things We Built and Removed
SummaryWrote the blog material carried over from Sprint 244 — "The Art of Deletion" (deleting-with-discipline.mdx) KR+EN, category retrospective, order 12, relatedAdrs sprint-157/189/193/201. The user-confirmed direction is to frame it not as 'what we deleted' but as 'how to delete safely' as a methodology. Using the ADR graph (built in S189 → removed in S193) and search (built in S157 → removed in S201) as examples, three principles of deletion are derived: ①before starting, use grep to separate feature-exclusive assets (minisearch·search* i18n·SearchDoc / graph components ×5·buildGraph·44 i18n keys) from shared assets (buildUrl·groupByKind·kind* i18n / related-ADR text links·inline mermaid) ②kill dead fields together with the feature (searchDocs·outgoingLinks) ③deletion breaks outside its target (the S201 incident: grep scope limited to blog/ → missed the root check-adr-links.mjs validating search-index.json (exit 2) → not a required check, so main merged broken → caught by the /stop gate). Scribe authored (9c50de1) → Critic (Codex gpt-5.5, session 019eb181) ✅ mergeable (Critical/High/Medium 0, fact consistency all 12 items matched against ADRs·KR↔EN 1:1·correct agent attribution) → one Low (sprint-157 relatedAdrs asymmetric omission) fixed by Scribe (2a903b1). Verification crosscheck --strict 0 (KR/EN 14)·SSG EXIT=0 (new KR+EN routes)·doc-refs 465 clean·CI green·post-merge main green. PR #438 squash c8e4ee4.
Goal
- Write the blog material ("Things We Built and Removed") carried over from Sprint 244.
- User-confirmed direction: "The Art of Deletion" — frame it not as "what we deleted" but as "how to delete safely" as a methodology, with the two cases (ADR graph built in S189 → removed in S193, ADR search built in S157 → removed in S201) placed as examples of that methodology.
- Apply the blog pattern established in Sprint 237/244 (register consistency + crosscheck --strict + blog Critic).
Background
- AlgoSu later removed two carefully built features in full: the ADR relationship graph (S189 mermaid-based
/adr/graphpage + mini graph + legend/filter → fully removed in S193), and ADR full-text search (S157 MiniSearch + build-timesearch-index.json→ removed in S201). - During /start, asked the user for the narrative center of gravity → confirmed "art of deletion focus" (how to delete safely) + category
retrospective.
Decisions
D1. Narrative frame — "The Art of Deletion" methodology (user)
- Not a retrospective of "what we deleted" but a methodology of "how to delete safely". The two cases serve only as examples. The goal is to convey to the reader the discipline a solo developer follows when removing a feature.
D2. category·meta — retrospective / order 12 / relatedAdrs ×4
- category
retrospective(same classification as baekjoon-gone, a retrospective topic). order 12 (previous max 11 = model-selection-strategy). - relatedAdrs ["sprint-157","sprint-189","sprint-193","sprint-201"] — search built·graph built·graph removed·search removed. The draft omitted sprint-157 (included graph-built 189 but excluded search-built 157 = asymmetric), but it was added after Critic flagged it as a Low (D4).
D3. The three principles (the spine)
- Split with grep before deleting — feature-exclusive vs shared assets. Evidence: S201 (exclusive = minisearch dependency·search* i18n keys·SearchDoc type·toSearchDoc/toPlainText / shared preserved = kind*/metaSprint i18n·buildUrl/groupByKind/mapBySprint/filterAdrsByTopic), S193 (graph-exclusive = 5 components·buildGraph/getSubgraph/filterAdjacency·44 i18n keys·fixtures / preserved = related-ADR text links·inline mermaid·--diagram-bg/grid tokens).
- Kill dead fields together with the feature — AdrIndex.searchDocs (S201), AdrDoc.outgoingLinks (S193), both explicitly removed as dead fields.
- (climax) Deletion breaks outside its target — the S201 incident: the first PR limited grep scope to
blog/→ missed the rootscripts/check-adr-links.mjsvalidating the existence of the deletedsearch-index.json(exit 2) → the CIBuild Blog (SSG)job failed, but since it was not a required check the squash merge proceeded → main merged broken → caught by the local check-adr-links run in the/stopgate → patched in a follow-up PR. Lesson: code referencing a deleted file can live outside that file's directory; open the grep scope to the whole repository.
D4. (post-Critic) Add sprint-157 to relatedAdrs
- Critic Low: the body explicitly states "the ADR search built in Sprint 157 was removed in Sprint 201," yet relatedAdrs omitted sprint-157 (no runtime impact due to graceful skip, but asymmetric). frontmatter curation is Scribe's domain → re-delegated a 1-line addition to Scribe (KR/EN simultaneously,
2a903b1).
Implementation
Authoring (Scribe, 9c50de1)
- New:
blog/content/posts/deleting-with-discipline.mdx(KR, SSOT) +blog/content/posts-en/deleting-with-discipline.mdx(EN, 1:1), 105 lines each. - Title "The Art of Deletion". MDX components: Problem/Decision/Result/Callout (type="info"). Register: consistent with model-selection-strategy.mdx (solo-developer first-person retrospective).
- Scribe's pre-authoring fact-consistency check: after reading all 4 source ADRs (157/189/193/201), cross-checked the figures used — 44 i18n keys (22 each KR/EN), dead field names, check-adr-links exit 2, not-a-required-check, /stop capture, CI 37/0 (S193), all ✅.
Low fix (Scribe, 2a903b1)
- Added "sprint-157" to the relatedAdrs array (KR/EN). Re-confirmed crosscheck --strict EXIT=0, then atomic commit.
Verification
- crosscheck --strict 0 violations (blog posts KR/EN 14 each).
- blog SSG build EXIT=0 — confirmed new routes
/posts/deleting-with-discipline+/en/posts/deleting-with-disciplinegenerated. - doc-refs lint 465 files clean (regression fixtures 8/8).
- Critic (Codex gpt-5.5 --base 95ae0b3, session
019eb181) ✅ mergeable — Critical/High/Medium 0. Across all 4 axes: ①fact consistency all 12 items matched against ADRs ②KR↔EN 1:1 (sections·MDX·figures·symbols) ③model/agent attribution (Critic=Codex correct, 0 misattribution) ④MDX tag balance 4:4·frontmatter format valid. Only one Low (sprint-157 relatedAdrs) recommended → fixed in D4. - CI (PR #438) all checks green (0 fail) → squash merge
c8e4ee4→ post-merge main run success.