Commit graph

274 commits

Author SHA1 Message Date
codex-bot-andresmgsl
4bce62e1fa test(labels): prove merge-base fallback 2026-08-31 21:20:35 +00:00
codex-bot-andresmgsl
4ce43c4a3b test(labels): document isolated fixture state 2026-08-31 21:11:30 +00:00
codex-bot-andresmgsl
328c8707df test(labels): reproduce moving base-tip warning 2026-08-31 21:04:41 +00:00
codex-bot-andresmgsl
e2aa834601 test: derive preflight in release path fixtures 2026-08-31 13:55:25 +00:00
codex-bot-andresmgsl
f19658ea82 test: isolate preflight fact environments 2026-08-31 11:24:53 +00:00
codex-bot-andresmgsl
7bd331a44d fix: resume stranded merge-door publishes 2026-08-31 11:17:49 +00:00
codex-bot-andresmgsl
153a408e10 feat: decide when merge-door releases resume 2026-08-31 11:15:01 +00:00
codex-bot-andresmgsl
3104aac6f3 test: specify release preflight contract 2026-08-31 11:12:22 +00:00
codex-bot-andresmgsl
fe4ec57ff2 test: document deferred fixture expansion 2026-08-30 09:31:16 +00:00
codex-bot-andresmgsl
734676ab7d fix: guard tag release publication 2026-08-30 09:27:08 +00:00
codex-bot-andresmgsl
2ab9902c38 test: expose non-atomic Forgejo releases 2026-08-30 09:23:48 +00:00
codex-bot-andresmgsl
0ea0cf50af test: guard needs-triage label description 2026-08-25 20:18:20 +00:00
484eb79623 Merge pull request 'fix: restore Forgejo workflow names' (#261) from build/243-forgejo-workflow-name into main
Reviewed-on: heavy-duty/ceremony#261
Reviewed-by: kimi-bot-andresmgsl <andres+4@heavyduty.builders>
Reviewed-by: claude-bot-andresmgsl <andres+1@heavyduty.builders>
Reviewed-by: glm-bot-andresmgsl <andres+5@heavyduty.builders>
2026-08-25 11:52:50 +00:00
codex-bot-andresmgsl
54a9334363 test: complete Forgejo workflow-name matrix 2026-08-25 08:53:52 +00:00
codex-bot-andresmgsl
9f54eb98bf test: expose missing Forgejo workflow names 2026-08-25 08:41:27 +00:00
codex-bot-andresmgsl
1cd8a6996f test: reject forge path doctrine copies 2026-08-25 07:33:25 +00:00
codex-bot-andresmgsl
17b99183ca test: guard release path doctrine 2026-08-25 07:31:39 +00:00
codex-bot-andresmgsl
7fa202acb5 docs: preserve fork-label rationale 2026-08-25 04:37:41 +00:00
codex-bot-andresmgsl
0790745645 fix: qualify fork label coverage 2026-08-25 03:56:57 +00:00
codex-bot-andresmgsl
311ef304fc test(labels): require fork-safe write gating 2026-08-24 23:56:06 +00:00
codex-bot-andresmgsl
a2b9b30930 test: expose target-head stranded fragments 2026-08-24 20:14:09 +00:00
a1bac15a8b Merge pull request 'fix: exhaust Forgejo timeline pagination' (#254) from build/240-exhaustive-timeline into main
Reviewed-on: heavy-duty/ceremony#254
Reviewed-by: glm-bot-andresmgsl <andres+5@heavyduty.builders>
Reviewed-by: kimi-bot-andresmgsl <andres+4@heavyduty.builders>
Reviewed-by: claude-bot-andresmgsl <andres+1@heavyduty.builders>
2026-08-24 19:58:11 +00:00
codex-bot-andresmgsl
1164640a08 test: close exhaustive pagination review gaps 2026-08-24 18:01:04 +00:00
codex-bot-andresmgsl
40ebcea462 fix: exhaust Forgejo timeline pagination 2026-08-24 17:53:13 +00:00
codex-bot-andresmgsl
8c0f5d53d7 test: expose truncated Forgejo timelines 2026-08-24 17:50:50 +00:00
codex-bot-andresmgsl
d712f0636f fix: preserve Refs keyword boundaries (#234) 2026-08-24 16:13:19 +00:00
codex-bot-andresmgsl
5232027361 test: mark Refs fixture Markdown literal (#234) 2026-08-24 16:06:12 +00:00
codex-bot-andresmgsl
b2048f63bd test: pin Refs token boundaries (#234) 2026-08-24 16:02:01 +00:00
codex-bot-andresmgsl
f0f3907618 test: exercise GitHub review-request selector 2026-08-24 14:42:36 +00:00
codex-bot-andresmgsl
22865aba54 test: preserve superseded request question names 2026-08-24 12:46:42 +00:00
codex-bot-andresmgsl
6f5ce8f994 fix: drive round state from live review requests 2026-08-24 12:42:11 +00:00
codex-bot-andresmgsl
0160f6a883 fix: read live review requests from each forge 2026-08-24 12:38:03 +00:00
codex-bot-andresmgsl
1cd46028ed test(labels): guard Forgejo comment ingestion 2026-08-23 23:29:09 +00:00
codex-bot-andresmgsl
c2cca7c1be test(labels): mark indirect filter probe call 2026-08-23 23:17:14 +00:00
codex-bot-andresmgsl
58e58f2ada fix(labels): grade Forgejo review states 2026-08-23 23:13:05 +00:00
codex-bot-andresmgsl
e5ebbf57fb test(labels): reproduce Forgejo review vocabulary gaps 2026-08-23 23:11:11 +00:00
codex-bot-andresmgsl
2029c9f520 test: pin Forgejo mergeability distinctions 2026-08-23 17:40:06 +00:00
codex-bot-andresmgsl
9a37db4b18 feat: derive release windows from membership records 2026-08-23 01:06:54 +00:00
codex-bot-andresmgsl
d493c993b7 test: drive release membership records 2026-08-23 01:01:17 +00:00
codex-bot-andresmgsl
832a41b647 test: update roster drift fixture 2026-08-22 22:22:53 +00:00
a953884826 Merge pull request '.github/labels.conf + CONTRIBUTING + labels.test — the panel names an identity that can actually review (#222)' (#223) from build/222-panel-glm into main
Reviewed-on: heavy-duty/ceremony#223
Reviewed-by: kimi-reviewer-andresmgsl <andres+4@heavyduty.builders>
Reviewed-by: glm-reviewer-andresmgsl <andres+5@heavyduty.builders>
2026-08-06 18:32:33 +00:00
2b49d6ef59 fix(labels): the panel names an identity that can actually review (#222)
kimi-reviewer-andresmgsl is temporarily unavailable, and with a three-identity
panel it sits in the required set for every possible author — so no new PR
could converge while it is down. glm-reviewer-andresmgsl takes the seat.

The roster guard from #195 is bidirectional, so three files move together:
the conf, CONTRIBUTING's table, and the test's table-side mutation, which
must name an identity the table carries or it stops testing anything.

Refs #222
2026-08-06 11:33:42 +00:00
clad2
960e581f91 test(labels): remove the remaining dead event-name assignments
All three schedule-simulation probes carried the assignment the script no
longer reads. This time the head was verified clean BEFORE the push, not
after. Refs #215
2026-08-05 21:39:45 +00:00
clad2
7d387dd936 test(labels): drop the now-dead event-name assignment SC2034 flagged
The script stopped reading GITHUB_EVENT_NAME with the input gate; the
previous commit pushed with this red because I trusted an && echo that
printed nothing. Refs #215
2026-08-05 21:35:55 +00:00
clad2
6986deede7 fix(labels): the bootstrap keys on the BOOTSTRAP input, never the event name
The venue drill caught what no hermetic test had: with the workflow_call
bridge delivering "no" perfectly, drill runs 16/17 still bootstrapped. The
script gated on GITHUB_EVENT_NAME = workflow_dispatch and never read
$BOOTSTRAP at all; the wrapper's only coupling was exporting the event name
for yes. Correct while an operator's manual dispatch was the only dispatch
there was — inert from #209 on, when the trigger job made every machine wake
a workflow_dispatch event. Runs 459/523 bootstrapped for this reason, not
for the input-delivery defect, which is real but was never the operative
cause of the observed re-upserts.

The script now gates on ${BOOTSTRAP:-no} = yes; the wrapper passes the input
through untouched; the hermetic suite pins the exact regression pair (a
dispatch event with no/unset creates and deletes nothing) alongside the
yes path's full create+delete assertions.

Refs #215
2026-08-05 21:32:21 +00:00
clad2
baa683211e fix(labels): pass bootstrap through the workflow_call boundary it was lost at
A called workflow cannot read the caller's dispatch inputs on this forge:
github.event.inputs is empty inside workflow_call even though the top-level
caller receives the value in both contexts (probe runs 6/7). The sweep's gate
read exactly that, so every dispatch-woken sweep bootstrapped — runs 459 and
523, ~20 label upserts per board event — while the trigger honestly logged
bootstrap=no.

The bridge, per the #6361 contract: labels-sweep.yml declares
workflow_call.inputs.bootstrap (string, default "no"); the dogfood caller and
the published CONSUMERS.md stub pass it via with.bootstrap with empty mapped
to "no" at the caller — kimi's edge: on schedule the top-level context is
empty, and an empty that slipped through would have turned every cron into a
bootstrap. The gate feeds the declared input to labels-reconcile unchanged,
so an invalid value meets the action's own yes|no refusal.

test/labels-bootstrap.test.sh pins every hop: the declared boundary, both
gates as the identity, no expression reading github.event.inputs (scoped to
${{ }} bodies — the file's prose names the context to explain it), the two
pass-throughs byte-exact, and the four value paths driven through the shipped
expressions into the action's real validator. Mutations: dropping the
declaration reds 4, dropping the pass-through reds 3, restoring the old gate
reds 2.

Refs #215
2026-08-05 21:06:29 +00:00
clad2
ed5ce8953a Merge remote-tracking branch 'origin/main' into build/205-dispatch-rest 2026-08-05 17:55:07 +00:00
clad2
3bde48f24c test(labels): unset GITHUB_API_URL in the no-api case — env preserves it
Plain `env` preserves the parent environment, and on the runner every step
arrives with GITHUB_API_URL set — the premise of the fix under test — so the
unset-refusal case inherited it and never exercised the refusal. It passed
only in a dev shell that lacks the variable: the environment distance
UPSTREAM-SYNC.md step 7 warns about, in the test written the same day
(@kimi-reviewer-andresmgsl, run 468).

Refs #205
2026-08-05 17:35:28 +00:00
clad2
0c2db9d85a test(labels): remove the stale never-silenced check, superseded behaviourally
The check grepped the gh workflow run line #205 removes, so it passed on
every REST implementation including one that swallows a failed POST — a
green assertion whose name claimed an invariant its implementation could not
observe. Its replacement lives in test/labels-dispatch.test.sh: a transport
failure must fail the extracted step, plus a code-aware no-|| true guard
(@codex-reviewer-andresmgsl, !213 review round 2).

Refs #205
2026-08-05 17:27:17 +00:00
clad2
37e31ffd85 fix(labels): refuse an unset API root, name transport failures, update the docs
Three corrections from @codex-reviewer-andresmgsl's review of 935a813.

1. `api="${GITHUB_API_URL:-https://api.github.com}"` guessed GitHub when the
   variable was absent — driven with a recording curl, it reported success
   after POSTing to api.github.com from this forge. That is the "Never
   'probably github'" rule, and the same unset-environment refusal #201 just
   established for docs-sync. It now refuses before any request, and the test
   asserts zero calls were made: refusing after a POST is not refusing.

2. The "never silenced with || true" invariant was still asserted by grepping
   the gh line this port removed, so it passed on any REST implementation
   including one that swallows a failed POST. It is rebound behaviourally: a
   curl that dies at the transport must fail the step. Doing that revealed the
   step failed with a bare exit 7 and no sentence, so it now names the failure
   — owning the diagnostic is the whole point of the surrounding code.

3. docs/CONSUMERS.md and both caller comments still described `gh workflow
   run` as the mechanism. They describe the REST dispatch now, and the manual
   bootstrap command carries a forge-neutral curl form beside the gh one: a
   cross-forge runbook that sends this forge to a missing binary is wrong even
   where the prose around it is right.

Refs #205
2026-08-05 17:16:30 +00:00