ontoref/reflection/templates/supersede_adr.nu.j2
Jesús Pérez 0396e4037b
Some checks failed
Nickel Type Check / Nickel Type Checking (push) Has been cancelled
Rust CI / Security Audit (push) Has been cancelled
Rust CI / Check + Test + Lint (nightly) (push) Has been cancelled
Rust CI / Check + Test + Lint (stable) (push) Has been cancelled
chore: add ontology and reflection
2026-03-13 00:21:04 +00:00

62 lines
2.9 KiB
Django/Jinja

#!/usr/bin/env nu
# Generated by: typedialog form reflection/forms/supersede_adr.ncl
# Superseding: {{ old_adr_id }}{{ new_adr_id }}
# Reason: {{ supersession_reason }}{{ supersession_note }}
let old_file = "{{ old_adr_file }}"
let new_file = "{{ new_adr_file }}"
let old_id = "{{ old_adr_id }}"
let new_id = "{{ new_adr_id }}"
# ── Step 1: Patch old ADR ────────────────────────────────────────────────────
# Read source, replace status and add superseded_by.
# Uses sed — safe only for the exact patterns below.
let old_src = open $old_file
# Verify current status is Accepted before patching
let current_status = (nickel export $old_file | from json | get status)
if $current_status != "Accepted" {
error make { msg: $"Expected status = Accepted in ($old_file), got ($current_status)" }
}
$old_src
| str replace --regex "status\\s*=\\s*'Accepted" $"status = 'Superseded"
| str replace --regex "(status\\s*=\\s*'Superseded,)" $"$1\n superseded_by = \"($new_id)\","
| save --force $old_file
print $"✓ ($old_file): status = Superseded, superseded_by = ($new_id)"
# ── Step 2: Verify old ADR exports ───────────────────────────────────────────
do { nickel export $old_file | ignore } | complete | if $in.exit_code != 0 {
error make { msg: $"($old_file) failed to export after patch — revert and fix manually" }
}
print $"✓ ($old_file) exports cleanly"
# ── Step 3: Verify new ADR exports ───────────────────────────────────────────
do { nickel export $new_file | ignore } | complete | if $in.exit_code != 0 {
error make { msg: $"($new_file) failed to export — fix before committing" }
}
let new_status = (nickel export $new_file | from json | get status)
print $"✓ ($new_file) exports cleanly with status = ($new_status)"
# ── Step 4: Verify supersession chain ────────────────────────────────────────
let new_supersedes = (nickel export $new_file | from json | get supersedes? | default "")
if $new_supersedes != $old_id {
print $"⚠ ($new_file) does not have supersedes = \"($old_id)\" — chain integrity broken"
print $" Add: supersedes = \"($old_id)\" to ($new_file) before committing"
} else {
print $"✓ Supersession chain intact: ($new_id).supersedes = ($old_id)"
}
# ── Step 5: Commit ────────────────────────────────────────────────────────────
print ""
print "Run when ready to commit:"
print $" git add ($old_file) ($new_file)"
print $" git commit -m \"adr: ($old_id) superseded by ($new_id) — {{ supersession_note }}\""