v0.2.0 — runs-on parameterization + fragment newline normalization #3
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
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit#3
Loading…
Add table
Add a link
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?
Scope
Two fixes surfaced post-v0.1.0 cut, both blocking real-consumer adoption. Per operator + Bosun (α) ratification: cut v0.1.1 properly via toolkit's own machinery rather than force-moving the published v0.1.0 tag.
Version-label settle: original framing was v0.1.1 (patch); operator α-settled to v0.2.0 (minor) per SemVer-precedent discussion — adding a required
runs_oninput is structurally a breaking change for v0.1.0 consumers, even though "patch avoids removing or renaming" doesn't explicitly cover required-input additions. AC text below preserves the original v0.1.1 phrasing for substrate-of-record-integrity; ticks annotate the actual shipping version where relevant.Fix 1:
runs-onparameterizationThe 4 reusable workflows (
_release-prep.yml/_release-draft.yml/_release-publish.yml/_manifest-check.yml) hard-coderuns-on: docker. The alcatraz Forgejo runner config has nodockerlabel — available labels aredotnet / godot / python / go / playwright / squadron-test / docker-build / squadron-deploy. The reusables would never schedule.Surfaced when starting cellblock greenfield adoption (cellblock#162). My oversight at authoring-time; should have grepped the runner config before specifying.
Change: add
runs_onas aworkflow_callinput (required: true, no default) to each reusable. Consumers must specify a label that exists in their Forgejo's runner config. Workflows reference it viaruns-on: ${{ inputs.runs_on }}.This IS a breaking change for any consumer pinning to
@v0.1.0— but no consumers exist yet so the practical blast radius is zero. Documented in CHANGELOG as a### Fixedentry; semantic note indocs/integration.mdthat consumers MUST specifyruns_on.Fix 2: Tool-side fragment newline normalization
Per operator's hard-wrap framing during v0.1.0 cut: hard-wrapped fragment bullets render with literal line breaks through some pipelines (GFM-soft-break-as-
<br>renderers, RSS/email/notifications, plain-text copy-paste). v0.1.0 ships with the source-side convention documented indocs/conventions.md; v0.1.1 adds defensive tool-side normalization.Change:
scripts/lib/fragments.sh::categorize_fragmentscollapses single-newline-within-paragraph runs to spaces while preserving:keep their newline)Consumers who hard-wrap by accident get the right output anyway; the source-side convention becomes defensive rather than just advisory.
Self-cut via toolkit's own reusables (deferred from v0.1.0 §ACs)
v0.1.0 was cut via local script invocation (bootstrap chicken-and-egg). v0.1.1 will add the toolkit's own
.forgejo/workflows/release.yml+release-draft.yml+manifest-check.ymlreferencing toolkit@v0.1.1(anticipating the cut). v0.1.1 itself uses local-script-cut one more time; v0.1.2+ fully dogfoods.Note: requires the runs-on fix from Fix 1 to land FIRST in the cut content (i.e., v0.1.1's released reusables have the parameterization).
Acceptance criteria
runs_onworkflow_call input + reference${{ inputs.runs_on }}in jobs — verified all 4 of_release-prep.yml+_release-draft.yml+_release-publish.yml+_manifest-check.ymlreference${{ inputs.runs_on }}(PR #5, commit64adc7b)tests/workflows.bats) updated to verifyruns_onis a required input — verified 10runs_onmentions in workflows.bats including the schema-regression test (PR #5)fragments.sh::categorize_fragmentscollapses single-newlines-in-paragraph to spaces — verified_normalize_paragraph_continuationsawk state machine +categorize_fragmentspipes each fragment through it (PR #5, commitf490312)tests/fragments.batsfor the normalization (preserve paragraphs / preserve indented sublists / preserve fenced code blocks) — verified 7@test "normalize: ..."cases (PR #5)changelog.d/<id>.fixed.mdfragments documenting both fixes — both shipped + consumed at cut; content now in CHANGELOG.md v0.2.0 ### Fixed section (note:3.fixed-2.mdhad to be manually folded into prep PR due to parser bug filed as release-toolkit#9)docs/integration.mdupdated with theruns_onparameter note + the convention move from "advisory" to "defensive" — verified "About the runs_on parameter" subsection + "Defensive from v0.2.0" framing in conventions.md (PR #5).forgejo/workflows/release.yml+release-draft.yml+manifest-check.ymladded (consumer-side; references toolkit@v0.1.1— shipped as@v0.2.0per α settle) — verified all 3 consumer-shape workflows on main (PR #6 merged)scripts/release-prep.sh --bump minor(PR #8 release-prep merged ata521998)git tag -l 'v*'Cross-tracker impact
Unblocks:
manifest-check.ymlworkflow lands referencing@v0.2.0Doesn't fully unblock tmux-tell#617 (5 remaining gap items deferred to v0.3 — see release-toolkit#4).
v0.2.x scope surfaced during the cut + filed for v0.2.1:
— QM, 2026-06-24, per operator α + Bosun 8cb5 ratification. All ACs canonically probed against main 2026-06-24 18:08 + ticked; release-toolkit v0.2.0 shipped + published.
v0.1.1 — runs-on parameterization + fragment newline normalizationto v0.2.0 — runs-on parameterization + fragment newline normalizationClosing: v0.2.0 shipped
All 9 ACs canonically probed + verified against main + ticked. Probes:
grep -l 'inputs.runs_on' .forgejo/workflows/_*.ymlgrep -c 'runs_on' tests/workflows.batsgrep -c '_normalize_paragraph_continuations' scripts/lib/fragments.shgrep -c '^@test "normalize' tests/fragments.batsgrep -c 'Defensive newline normalization' CHANGELOG.md+ runs-on bulletgrep -c 'About the.*runs_on' docs/integration.md+Defensive fromin conventions.mdls .forgejo/workflows/for release.yml + release-draft.yml + manifest-check.ymlcat VERSION+git tag -l 'v*'draft=false, published_at=2026-06-24T16:55:53+02:00Substantive day's arc: v0.1.0 → v0.2.0 in single day with multiple substrate-care recoveries (release-toolkit#9 parser bug surfaced during the cut, release-toolkit#10 sudo assumption surfaced during PR #6 CI, alcatraz-infra#67 runner label drift surfaced before that). Both v0.2.1 scope items filed; alcatraz-infra ci-go image patched + re-built (commit 7715b14).
Closing per all-ACs-verified-done discipline (
feedback_ac_tick_discipline+feedback_self_probe_asymmetry— banked today; canonical-probe of each AC before tick rather than propagating derived state).Forward work surfaced:
quartermaster referenced this issue2026-07-02 01:13:42 +02:00
quartermaster referenced this issue2026-07-06 09:54:48 +02:00