No reviewers
Labels
No labels
bump
major
bump
minor
bump
patch
kind/bug
kind/chore
kind/docs
kind/feature
priority/critical
priority/high
priority/low
priority/medium
size/L
size/M
size/S
size/XL
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit!161
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "i/cleanup-pre-v1-unicode-keep"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Pre-1.0 cleanup-bundle Sprint 1: mechanical Unicode → ASCII sweep across code paths + tests/.keep removal + AGENTS.md sections 11/12 codifying the disciplines.
Closes #149 (workflow YAML Unicode), #150 (compose-scripts + bats Unicode), #151 (.keep audit).
Substitutions (ASCII discipline)
—em-dash-→right-arrow->αGreek alphaalphaγGreek gammagamma§section signsection×multiplyx…ellipsis...∈element-ofin≠not-equal!=The
path-alpha/path-gammajargon (ADR-0007) becomes spelled in code paths; the ADR documents themselves retain the Greek letters.Scope vs tracker inventory
Honest expansion: the trackers' inventories listed ~319 occurrences across ~23 files; the actual in-spirit sweep covers ~411 occurrences across 30 files, because the inventory missed:
scripts/check-self-bootstrap.sh(added per #124, recently merged)scripts/setup-bump-labels.shtests/check-self-bootstrap.bats_manifest-check.yml,manifest-check.yml,check-self-bootstrap.yml)Choosing the wider scope keeps the "ASCII-only in code paths" discipline consistent rather than leaving a Unicode patch on the secondary workflows.
Files touched
.forgejo/workflows/scripts/(incl.scripts/lib/)tests/tests/.keepdeleted (no longer load-bearing — 13 bats files now)AGENTS.md— new sections 11 (ASCII discipline) + 12 (load-bearing.keep)Preserved:
changelog.d/.keep(LOAD-BEARING perrelease-prep.sh:364delete_fragments changelog.dafter each cut),examples/go-project/.keep+examples/node-project/.keep(deferred to #152).Verification
docs/+AGENTS.md(existing content) +README.md+CHANGELOG.md+decisions/UNTOUCHED — verified viagit diff --stat.Decision-tree
—→-(single hyphen), not--(double)? The trackers list-as primary with--only "where the em-dash separates clauses." In practice, em-dash usage was almost entirely intra-sentence punctuation where single hyphen reads cleanly with surrounding spaces (a — b→a - b).§→section(full word), notsec.? Reads more naturally inline:AGENTS.md section 2flows better thanAGENTS.md sec. 2. Cost: 4 extra characters per occurrence (7 total instances). Worth the readability.Composition with AGENTS.md section 2
This PR touches compose-scripts in the AGENTS.md section 2 mechanism-of-touch list. In-cycle re-pin required before the next cut. The #124 backstop will fire red on
push:mainuntil a re-pin PR lands (expected behavior, not a defect — see AGENTS.md section 2.3).Re-pin sequencing for v0.11.1 cut:
v0.11.1-rc.1at post-merge HEAD.forgejo/workflows/release.yml@v0.11.1-rc.1release.ymlat new ref → rolling PR for v0.11.1What this PR does NOT do
docs/,AGENTS.md(existing prose),README.md,CHANGELOG.md, or fragment files — Unicode latitude preserved thereexamples/*/.keepfiles — those follow from #152's resolution (populate vs retire)Refs
.keep)APPROVED — ASCII sweep + .keep audit (head
1e7bbf1, official/gating)Mechanical sweep, but I verified the two load-bearing claims at source and both hold. Honestly scoped, well-codified. FF-feasible, 361/361. Clean opener for the pre-1.0 wave.
ASCII scope — honestly bounded, in-scope complete ✅
§11 declares the boundary precisely: code-paths (
scripts/*.sh,tests/*.bats,.forgejo/workflows/*.yml) ASCII-only; markdown (AGENTS.md,docs/,README,CHANGELOG) + fragments keep Unicode latitude. Verified at source: agrep -P '[^\x00-\x7F]'acrossscripts/ tests/ .forgejo/returns only.forgejo/pull_request_template.md— which is markdown, not a workflow YAML, so it's correctly out of scope (same class as AGENTS.md's 60 Unicode lines). So the in-scope trees are fully ASCII-clean, and the residuals aren't misses — they're the declared boundary. The rationale lands too: the lint-security + bats-lockstep + look-alike concerns apply to parsed code-paths, not rendered docs, so "code ASCII / docs Unicode" is the right cut, not an arbitrary one. The honest-expansion (411 swept vs trackers' 319 — incl. check-self-bootstrap.sh/.bats + setup-bump-labels.sh + the 3 secondary YAMLs) is exactly the thoroughness I'd want: swept what's actually in-scope, not just what the trackers enumerated.changelog.d/.keepload-bearing — verified against the contract ✅The §12 claim isn't hand-waved; it's true against the actual code.
delete_fragments()(fragments.sh:477) doesrm -f -- "$path"only overlist_fragments "$dir"— i.e. files matching the fragment glob..keepdoesn't match, so it survives the post-cut sweep. Without it,changelog.d/goes empty after the first cut → vanishes from git (no empty-dir tracking) → the documented first-cut bootstrap (touch changelog.d/.keep, integration.md Step 2) loses its anchor. So.keepis genuinely load-bearing, and §12 documents why (the glob-non-match) rather than just that. Correct..keep audit — right calls
tests/.keepdropped: safe —tests/has real.batsfiles holding the dir; §12 documents the removal-once-populated rule. ✓examples/*/.keepdeferred to #152: correct (the dir-populate is the natural place to retire them). ✓.keepAND document load-bearing-ness here") is the right embodied-not-re-caught placement.bats lockstep ✅
361/361 — the sweep converted Unicode in
log()strings AND the matching[[ "$output" == *"..."* ]]bats assertions in lockstep, so nothing silently broke. That lockstep risk is exactly what §11 names as a rationale, and the green confirms it was handled.Nit (non-blocking): §12's
delete_fragments ... (line 364 as of 2026-06-27)line-ref will drift, but it's hedged with the date AND anchored on the function name — resilient enough. Leave it.Closes #149/#150/#151. Clean to self-merge → v0.11.1 cut via the §2 re-pin path. Good Sprint-1 of the wave — mechanical in substance, but the scope-honesty and the load-bearing-marker discipline are the parts that'll pay forward. 🎯