-
0.4.1
StableAll checks were successfulCI / test (push) Successful in 1m29sCI / release-exercise (push) Has been skippedCI / self-guards (push) Successful in 6sCI / action-exercise (push) Successful in 5sCI / docs-sync-exercise (push) Successful in 5srelease / release (push) Successful in 11sreleased this
2026-08-04 16:09:39 +00:00 | 393 commits to main since this releaseAdded
-
forge_release_exists,forge_commit_pulls,forge_tag_create,
forge_release_createandforge_pr_createon both backends, so the
release path names no client (#191). -
The forgejo backend serves one PR object at
/commits/{sha}/pullwhere
GitHub serves an array at/pulls; both verbs emit the array shape, so
the call site carries one expression (#191). -
Forgejo creates tags at
POST /tags— it serves/git/refsGET-only,
so GitHub's ref-POST would have 404'd there forever (#191). -
forgejo_api_baserefuses whenREPOis empty. Every verb interpolates
it and every call reaches the network through there, sorepos//…—
whose 404 reads as "no release" and "no PRs" — is now impossible (#191). -
Release asset names are percent-encoded. The hook contract permits any
filename, and the name travels as a query value: a space made curl reject
the URL and&/#/+/%silently renamed the asset (#191). -
lib/forge.sh— the forge selector:forge_detectnames the forge from
the runner's own environment,forge_clientnames the client it needs, and
forge_preflightrefuses loudly before any sweep when the two disagree
(#188). -
The reconcilers and
labels-scoperun that preflight first, so a
GitHub-shaped client on a Forgejo instance is a named refusal instead of a
sweep that reads nothing and reports success (#188). -
lib/closes_references.sh— the closing-keyword parser, sibling of
refs_references, so "which issues does this PR close" is answered from a
PR body rather than from GitHub's GraphQL API (#188). -
lib/forge-github.shandlib/forge-forgejo.sh— one call surface, two
backends, selected byforge_select; no forge branching at the call sites
(#188). -
The forgejo backend proves each paginated gather complete against the
server'sx-total-countand refuses loudly when it cannot — a missing
header is a refusal, not a pass (#188).
Changed
-
docs/CONSUMERS.md's artifact-hook recovery no longer tells operators to
rungh release createby hand — on a Forgejo runner there is nogh.
It names the forge-neutral tag-door path first, with both clients shown
(#191). -
issueflow-reconcilegathers open and merged PRs over REST instead of
gh api graphql. Forgejo serves no GraphQL at all, so the two queries were
replaced rather than translated; both forges returnnumberandbody
from/pullsin the same shape (#188). -
forge_apiowns the page size, because each forge silently ignores the
other's parameter:per_page=100reads 30 items on Forgejo andlimit=100
reads 30 on GitHub, both HTTP 200. No call site names one (#188). -
Outstanding review requests are derived from the reviews on the current head
rather than fromrequested_reviewers, which Forgejo never clears — read
raw there, a PR would sit atstate:bots-reviewingforever (#188).
Fixed
-
The release doors run on a Forgejo consumer.
lib/facts.shand
release.ymlgathered and published throughgh, which the runner image
does not ship, so the merge door readlabeled=nofor a correctly
labeled ceremony PR and the tag door died at the publish (#191). -
A release fact that could not be read is no longer reported as a definite
no. A completed read finding no label is stillnoand still
fail-closed; a read that did not complete refuses and emits no fact
(#191). -
labels-scopeno longer fails to compile its jq program on jq 1.6, which
the Forgejo runner image ships:labelis a reserved word in jq's grammar,
so$labelis a syntax error there and every scope derivation died before
reading the config (#188). -
labels-reconcileandlabels-scopeno longer exit 0 on a Forgejo
consumer having read zero facts — measured onheavy-duty/rig, where the
sweep printedreconciled.over an empty PR list and scope reported "no
labeler.yml" for a file that exists (#188). -
forge_timelineprojects Forgejo's label events (.type/.body/
.user.login) into the GitHub shape (.event/.actor.login) so the
ruling ladder reads the same board on both forges (#188). -
forge_pr_activityno longer calls/pulls/{n}/commentson Forgejo
(HTTP 404); inline review comments come from reviews with
comments_count > 0(#188). -
CI installs shellcheck before linting, matching actionlint — the Forgejo
runner image does not ship it (#188).
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
3 downloads
-