Skip to content

Commit a0b06a0

Browse files
rubenvdlindeConduction Release Bot
andauthored
ci: restore the OpenSpec Sync caller on development (#284)
#42 dropped this caller on 2026-08-04, and its reasoning was sound: every run in the workflow's history was a startup failure reporting `jobs=0` — an unresolvable reusable workflow, so no log, no step, no verdict, just a permanently red branch. As that PR put it, a permanently-red workflow is worse than an absent one, because the next genuine failure lands on an already-red branch and cannot be told apart from the standing noise. That argument was right. The condition behind it is gone. 1. THE UNRESOLVABLE REF WAS ALREADY FIXED — one day earlier. 9a695ae landed on `main` on 2026-08-03: "fix all 8 shared-workflow callers on main (wrong org)". The repair and the removal crossed in mid-air: `main` got the fix, `development` got the deletion, and since main sits 345 commits behind development the two branches never met. Both changes look correct in isolation; together they left the app with a working caller on the branch that does not trigger it and no caller on the branch that does. 2. IT HAS NOW BEEN OBSERVED WORKING. Dispatched against main on 2026-08-21, this exact caller ran to success and created 12 OpenSpec issues — the first non-zero result this workflow has ever produced. The file added here is byte-identical to that copy apart from comments. ON THE EXPIRED TOKEN. #42 and openregister#2111 both attributed the failure to an expired project-board PAT. That is not what was blocking it here: launchpad has no PROJECT_TOKEN secret at all, and the run above succeeded regardless. PROJECT_TOKEN is for the project BOARD; the issues are written with the workflow's own github.token. The line is kept so board sync starts working by itself if a token is ever added, and is inert while the secret is absent. WHY DEVELOPMENT AND NOT ONLY MAIN. The push trigger watches `development`, and GitHub reads the workflow file from the branch being pushed. With the file only on main that trigger can never fire — which is why today's sync had to be kicked by hand with an explicit `--ref main`, and why it covered only main's 16 changes while development's 28 stayed unsynced. Related: ConductionNL/.github#529 fixed a separate defect in the shared workflow that was killing sync runs fleet-wide — a hardcoded label description of 153 characters against GitHub's 100-character limit, which failed the whole run rather than just that label. Co-authored-by: Conduction Release Bot <release-bot@conduction.nl>
1 parent b9224d5 commit a0b06a0

1 file changed

Lines changed: 51 additions & 0 deletions

File tree

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
name: OpenSpec Sync
2+
3+
# RESTORED, on evidence that the condition which justified dropping it is gone.
4+
#
5+
# This caller was removed from `development` in #42 on 2026-08-04 for a good
6+
# reason: every run in its history was a startup failure reporting `jobs=0`.
7+
# That is the signature of a reusable workflow that never resolved — no log, no
8+
# step, no verdict, just a permanently red branch. As #42 put it, a
9+
# permanently-red workflow is worse than an absent one, because the next
10+
# genuine failure lands on an already-red branch and cannot be told apart from
11+
# the standing noise. That argument was correct.
12+
#
13+
# What has changed since:
14+
#
15+
# 1. The unresolvable ref was FIXED — on `main`, by 9a695ae on 2026-08-03
16+
# ("fix all 8 shared-workflow callers on main (wrong org)"), one day
17+
# BEFORE #42 dropped this file from development. The fix and the removal
18+
# crossed: `main` got the repair, `development` got the deletion, and
19+
# because main is 345 commits behind development the two never met.
20+
#
21+
# 2. It has now been observed working. Dispatched against main on
22+
# 2026-08-21, this exact caller ran to success and created 12 OpenSpec
23+
# issues — the first non-zero result this workflow has ever produced.
24+
#
25+
# On the PROJECT_TOKEN: #42 and openregister#2111 both attributed the failure
26+
# to an expired project-board PAT. That is not what blocks it here — launchpad
27+
# has no PROJECT_TOKEN secret at all, and the 2026-08-21 run succeeded anyway.
28+
# The token is for the project BOARD; the issues themselves are written with
29+
# the workflow's own github.token. The line below is kept so the board sync
30+
# starts working by itself if a token is ever added, and is harmless while the
31+
# secret is absent.
32+
#
33+
# Why it belongs on `development` and not only on `main`: the push trigger
34+
# below watches `development`, and GitHub reads the workflow file from the
35+
# branch being pushed. With the file only on main, that trigger could never
36+
# fire — which is why the sync had to be kicked by hand and why only main's 16
37+
# changes were covered while development's 28 went unsynced.
38+
39+
on:
40+
push:
41+
branches: [development]
42+
paths: ['openspec/**']
43+
workflow_dispatch:
44+
45+
jobs:
46+
sync:
47+
uses: ConductionNL/.github/.github/workflows/openspec-sync.yml@main
48+
with:
49+
app-name: launchpad
50+
secrets:
51+
PROJECT_TOKEN: ${{ secrets.PROJECT_TOKEN }}

0 commit comments

Comments
 (0)