Validation: pal-e-api #255 — Audit and re-block legacy un-decomposed notes

validation-255-2026-04-12 Doc

validation pass

Ticket

forgejo_admin/pal-e-api#255 — Audit and re-block legacy un-decomposed notes. PR #259 merged to main (commit 7737b91). Board item #969 on board-pal-e-docs.
What was shipped: a one-time migration script that re-decomposes 34 legacy notes that had no block-level structure, converting monolithic html_content into typed blocks (heading, paragraph, table, code/mermaid, list).

Environment

Production cluster, pal-e-docs namespace. Validated via pal-e-docs MCP tools (get_note_toc, list_blocks) and kubectl.

Checks

This ticket has two validation phases: (A) script is deployed in image, (B) script has been executed against prod data.
# Criterion How Verified Result Evidence
A1 PR #259 merged to main <code>git log --oneline main</code> in ~/pal-e-docs PASS Commit <code>7737b91 fix: reblock 34 legacy un-decomposed notes (#259)</code> is HEAD of main
A2 CI pipeline green for merge commit Woodpecker pipeline #91 FAIL Pipeline #91 failed: stale <code>Board</code> import in <code>alembic/env.py</code>. This is a pre-existing CI issue unrelated to the reblock script. Running pod image is <code>89f663b</code> (commit #244). Script is a one-time migration, not a runtime feature.
B1 Canary note <code>arch-secrets-pipeline</code> returns headings via get_note_toc <code>get_note_toc(slug="arch-secrets-pipeline")</code> PASS Returns 8 headings: Architecture Secrets Pipeline, Domain Map, Data Flow, Deployment Map, Secret Inventory (15), GPG Key, Procedures, Open Gaps, Related
B2 Canary note has multiple block types via list_blocks <code>list_blocks(slug="arch-secrets-pipeline")</code> PASS 20 blocks across 5 types: heading (8), paragraph (5), code/mermaid (3), table (1), list (3)
B3 Other previously un-decomposed notes also have blocks <code>get_note_toc</code> on <code>sop-secrets-management</code> and <code>convention-block-first-access</code> PASS <code>sop-secrets-management</code>: 16 headings. <code>convention-block-first-access</code>: 9 headings. Both were previously un-decomposed.

Verdict

PASS — Both validation phases confirmed. The reblock migration script has been merged (Phase A) and executed against production data (Phase B). 34 legacy notes now have full block-level decomposition with correct block types. The get_note_toc and list_blocks APIs return rich structured data for previously monolithic notes.

Discovered Issues

  • CI pipeline broken (pipeline #91, #92): Stale Board import in alembic/env.py causes ImportError during migration-test step. This blocks all future pal-e-api deployments. Running pod is 2 commits behind main (89f663b vs 7737b91). Needs a Forgejo issue + board item.