Skip to content

cleanup(writings): convert legacy /page/ to klappy:// URIs (Phase 2 PR-2.2) + amend campaign doc#145

Merged
klappy merged 1 commit intomainfrom
cleanup/writings-link-rot
Apr 26, 2026
Merged

cleanup(writings): convert legacy /page/ to klappy:// URIs (Phase 2 PR-2.2) + amend campaign doc#145
klappy merged 1 commit intomainfrom
cleanup/writings-link-rot

Conversation

@klappy
Copy link
Copy Markdown
Owner

@klappy klappy commented Apr 26, 2026

Summary

Phase 2 PR-2.2 of the link-rot-elimination campaign. Converts legacy /page/... markdown link patterns and one typo klappy:// URI in writings/ to canonical klappy:// URIs that resolve through the protocol per klappy://canon/principles/identity-resolved-by-protocol.

The recursive moment: the resolver is the first user of itself. Every new klappy:// URI in this PR was test-resolved against live prod (oddkit v0.25.0) before commit. Validates the resolver and fixes the link rot in one motion.

Writings cleanup (10 link edits across 3 files)

File Changes
writings/getting-started-with-odd-and-oddkit.md 4 /page/ patterns → klappy:// URIs
writings/from-passive-to-proactive.md 4 /page/ patterns → klappy:// URIs
writings/agentic-software-development.md 1 typo URI: klappy://writings/nothing-new-even-aiklappy://writings/preface-nothing-new-even-ai (verified via resolver — the actual canonical URI for this article)

URIs verified resolving against live prod before commit

  • klappy://writings/the-journey-from-ai-tasks-to-ai-augmented-workflows
  • klappy://docs/oddkit/proactive/proactive-bootstrap
  • klappy://docs/examples/project-instructions-template
  • klappy://writings/learning-in-the-open
  • klappy://writings/getting-started-with-odd-and-oddkit
  • klappy://writings/preface-nothing-new-even-ai

Out-of-scope (deliberately left alone)

klappy://draft-zeros/appendix-a-the-biblical-roots in writings/the-broken-wall-and-the-buried-talent.md returns NOT_FOUND because the target is a draft-zero (stability: placeholder in its frontmatter) and is filtered from the index by design. A published essay linking to an unpublished draft is a different problem class — content gap, not link rot. Will not be "fixed" by URI substitution; needs separate decision (publish the appendix, remove the link, or accept the draft-link convention).

Campaign sequencing doc amendment (bundled per operator decision)

docs/planning/link-rot-elimination-campaign.md updated:

  1. Named the explicit promote PR step (main → prod) for any oddkit change touching load-bearing surface. CF auto-deploys from prod, not main. The original draft elided this; PR-2.1 surfaced it when prod stayed on 0.24.0 after merging to main. (promote: 0.25.0 to prod (oddkit_resolve action — link-rot Phase 2) oddkit#142 was the promote PR for PR-2.1.)
  2. Corrected PR-2.2's scope: dropped the "re-audit the 49 from April-9 audit" task. On inspection, those 49 are correctly classified as intentional (template placeholders, deployed site routes, historical archive references) and fall outside writings/ scope. The new resolver wouldn't reclassify them.
  3. Recorded both amendments in the Origin section as v2.1.

Both amendments preserve the campaign's KISS shape; neither adds new artifacts.

What this does NOT do

  • Does not implement oddkit_audit (PR-2.3, separate)
  • Does not enforce CI gating (Phase 3, separate)
  • Does not touch the draft-zero biblical-roots issue (out of scope, content-gap not link-rot)
  • Does not address the 49 from the April 9 audit (out of scope per amendment 2 above)

Refs


Note

Low Risk
Low risk documentation-only change: updates internal links and planning text with no runtime or build logic modifications. Main risk is accidental broken/incorrect URIs if any were mis-resolved.

Overview
Updates public writings to eliminate legacy /page/... markdown links by switching them to canonical klappy:// URIs, and fixes one incorrect klappy://writings/... target.

Amends docs/planning/link-rot-elimination-campaign.md to clarify Phase 2 PR ownership/scope (including dropping the “re-audit the 49” task) and to add an explicit main → prod promote PR step for load-bearing oddkit changes.

Reviewed by Cursor Bugbot for commit 7167d1a. Bugbot is set up for automated code reviews on this repo. Configure here.

… amend campaign doc

Phase 2 PR-2.2 of the link-rot-elimination campaign. Resolver is the
first user of itself: every new klappy:// URI was test-resolved against
live prod (oddkit v0.25.0) before commit.

Writings cleanup (10 link edits across 3 files):
- writings/getting-started-with-odd-and-oddkit.md (4 /page/ → klappy://)
- writings/from-passive-to-proactive.md (4 /page/ → klappy://)
- writings/agentic-software-development.md (1 typo URI:
  klappy://writings/nothing-new-even-ai → klappy://writings/preface-nothing-new-even-ai
  — verified via resolver, the actual canonical URI)

Verified resolves before commit:
- klappy://writings/the-journey-from-ai-tasks-to-ai-augmented-workflows
- klappy://docs/oddkit/proactive/proactive-bootstrap
- klappy://docs/examples/project-instructions-template
- klappy://writings/learning-in-the-open
- klappy://writings/getting-started-with-odd-and-oddkit
- klappy://writings/preface-nothing-new-even-ai

Out-of-scope notes (will not be "fixed" by this PR):
- klappy://draft-zeros/appendix-a-the-biblical-roots in
  writings/the-broken-wall-and-the-buried-talent.md is NOT_FOUND because
  the target is a draft-zero with stability=placeholder and is filtered
  from the index by design. A published essay linking to an unpublished
  draft is a different problem class — content gap, not link rot.

Campaign doc amendment (bundled per operator decision):
- Named the explicit promote PR (main → prod) step for oddkit changes;
  CF auto-deploys from prod, not main. The original draft elided this
  because the author hadn't observed the prod-branch convention; PR-2.1
  surfaced it when prod stayed on 0.24.0 after the merge to main.
- Corrected PR-2.2's scope: dropped the "re-audit the 49" task. The
  April 9 audit's 49 remaining items are correctly classified as
  intentional (template placeholders, site routes, historical archive
  refs); they fall outside writings/ and don't need re-classification
  via the new resolver.
- Recorded both amendments in Origin section as v2.1.

Refs:
- klappy://docs/oddkit/specs/oddkit-resolve (DRAFT v4 — KISS, in prod)
- klappy://canon/principles/identity-resolved-by-protocol
- klappy://docs/planning/link-rot-elimination-campaign (v2.1 amendment)
- klappy://canon/principles/vodka-architecture
- klappy/oddkit#140 (resolver implementation, merged + promoted)
- klappy/oddkit#142 (promote PR, merged)
@klappy klappy merged commit d1cff6b into main Apr 26, 2026
1 check passed
@klappy klappy deleted the cleanup/writings-link-rot branch April 26, 2026 20:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant