AGENTS.md section 11 requires ASCII-only code paths and no check enforces it; main carries 750 non-ASCII lines #1578
Labels
No labels
bump
major
bump
minor
bump
patch
kind
bug
kind
chore
kind
docs
kind
epic
kind
feature
loop/paused
mirror-drift
priority
critical
priority
high
priority
low
priority
medium
size
L
size
M
size
S
size
XL
status
blocked
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
frankenbit/release-toolkit#1578
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
AGENTS.md section 11 requires three code paths to be ASCII-only and nothing checks it, so main carries 750 non-ASCII lines across 30 files.
The rule covers
scripts/*.sh,tests/*.batsand.forgejo/workflows/*.yml. Measured onmainate830e94by two readers independently: 30 files, 750 lines,tests/workflows.batsalone with 239. No check undercmd/,internal/,scripts/,tests/or.forgejo/reads the property -- and that main is green while carrying the drift is itself the proof.Worked instance: #1577 added three em-dashes to
scripts/pr-gates.shandtests/pr-gates.bats, and all 18 CI contexts passed. A human reading AGENTS.md caught it. The consequence is measured, not theoretical -- on bats 1.11.0 the em-dash in a test name made that arm vanish,Executed 28 instead of expected 29, exit 1.The remedy is the operator's call, because the options differ in cost rather than correctness:
log()lines bats asserts on), relax the rest to a convention. Smaller, and admits the rule has been aspirational.Acceptance criteria:
f87c0d37b7, reviewed asf87c0d37b7)f87c0d37b7, reviewed asf87c0d37b7)f87c0d37b7, reviewed asf87c0d37b7)Found by Surveyor in review 7476 of #1577, measured by both of us. Filed by the finder: Bosun's pane is stale, so the designated filer was unreachable.
Operator decision, 2026-10-13: sweep and gate whole files.
I put three options to Alex with the measurement that distinguishes them, rather than asking cold:
Also measured, and it narrowed one of §11's own stated reasons:
workflow-parse-check.shgrades all 26 workflows with the pinned Forgejo validator and is green onmainwith 18 of them carrying non-ASCII — so the validator does not reject them today.The options were sweep-and-gate (repair all 750, gate whole files), narrow-the-rule (gate only hazardous positions, ~106 lines, leave 567 comment lines as prose), and gate-new-violations-only (grandfather the existing drift). Alex chose the first, with the cost stated up front: a large mechanical diff across 30 files, mostly comment prose.
One thing I got wrong in presenting it: I described sweep-and-gate as having "zero judgement calls at the border." It has six, and one of them fails silently — the contracts-doc grammar delimiter. That is why the gate carries a declared exemption table rather than a clean sweep, and it is recorded in AGENTS.md §11 under When the character is LOAD BEARING.
AC1 is satisfied. The criteria tick after the merge per AGENTS.md §15 step 6.
Landed and closed by hand.
forgejo/mainis byte-identical to the approved head, so the landed commit IS the reviewed one. Verified in the landed tree rather than in the branch:scripts/ascii-only-check.shis present andtests.ymlcarries onec14step.What shipped: 815 substitutions across 27 files, 34 fused
section/pararepairs, the gate asc14, 10 arms intests/ascii-only-check.bats, and AGENTS.md §11 rewritten — the extended table, a third measured "Why" (bats drops an em-dash-named arm), the load-bearing rule, and the needle hazard.Three exemptions, six lines, each named by CONSTRUCT rather than line number — which mattered: the delimiter moved from line 45 to 47 mid-review when a comment block landed above it, and the first version of the table was already wrong in output a human reads.
Two findings worth more than the diff, both from review:
rtis Go; the sweep hyphenated a workflow's needle forPASS — %sand broke a control that CI structurally cannot see, because that workflow has nopull_requesttrigger. Two static instruments missed it; only buildingrtand running the control found it.Three non-blocking residuals from review 7483 and 7485 were taken rather than deferred, including the one that pins the
c14step by executing its ownrun:block. Set L tracks what remains before the v0.68.0 cut.