Clean up stale branches (and decide on a minimal CI gate) #22

Closed
opened 2026-08-06 06:25:33 +00:00 by mathias · 1 comment
Owner

Three merged/abandoned branches are lingering on mathias/skills. Pick up in a future sprint planning session.

  • tbd/feat-own-the-task-add-delegation-0cec7202 — squash-merged as PR #21, safe to delete
  • feat/add-dream-skill — status unverified
  • feat/experiment-spec-skill — status unverified

Verify the latter two are merged or genuinely abandoned before deleting.

Related: tbd_ship fails closed when no CI runs exist for the head commit, so shipped skills never auto-merge or clean up their branch in this repo. Worth deciding whether to add a minimal CI gate (frontmatter/lint check on */SKILL.md) so the trunk-based path completes end to end.

Three merged/abandoned branches are lingering on `mathias/skills`. Pick up in a future sprint planning session. - `tbd/feat-own-the-task-add-delegation-0cec7202` — squash-merged as PR #21, safe to delete - `feat/add-dream-skill` — status unverified - `feat/experiment-spec-skill` — status unverified Verify the latter two are merged or genuinely abandoned before deleting. Related: `tbd_ship` fails closed when no CI runs exist for the head commit, so shipped skills never auto-merge or clean up their branch in this repo. Worth deciding whether to add a minimal CI gate (frontmatter/lint check on `*/SKILL.md`) so the trunk-based path completes end to end.
mathias added the risk/mediumsize/stype/chore labels 2026-08-27 05:25:45 +00:00
Author
Owner

Both halves done — CI gate first, then the branches.

The CI gate (3112b4c, released as v0.8.0)

release.yml → ci.yml, two jobs:

  • gate — task check + task test on every push and every pull_request to main, fetch-depth: 0 so the manifest/tag parity assertion actually has tags to compare against.
  • tag — the existing semver-from-trailer logic, unchanged, but needs: gate and if: push && ref == refs/heads/main.

The pull_request trigger is the part tbd_ship needs: it fails closed when no CI run exists for the head commit, which is why shipped skills in this repo never auto-merged.

Also fixed while in there: the tagger pushed the plugin.json bump commit and the tag as two pushes. The gate runs task check on that bump commit, and check asserts manifest == latest tag — so there was a window where it would legitimately fail on a commit that was correct. Now both refs go up in one git push origin HEAD:main "$TAG".

tests/ci_gate_test.sh (7 assertions) pins the wiring: PR trigger present, both tasks invoked, tag needs gate, no second ungated workflow file left behind. Mutation-checked — deleting needs: gate turns it red.

Evidence it gates in both directions

run head conclusion
green path #24 3112b4c (main) success → tagged v0.8.0, plugin.json bumped to 0.8.0
red path #25 aaf2aba (throwaway branch, skills/tdd/SKILL.md deleted) failure → no tag created; git tag still tops out at v0.8.0

The red run is the one that matters. Before this, task check and the 28-case shell suite ran nowhere — the estate backlog classification lists this repo's CI as no_test_step, fails open: green while having tested nothing. It now fails closed.

One deliberate gap: the tagger's own plugin.json bump commit gets no run, because Gitea does not re-trigger workflows on a push made with the runner's token. That is the recursion guard doing its job and the commit only touches a version string.

Stale branches

All three verified merged-by-content before deletion — none was reachable from main (squash merges), and each one's file had simply been relocated into skills/ by the later reorg:

branch tip file identical to main
feat/add-dream-skill c739f4c dream/SKILL.md → skills/dream/SKILL.md yes (diff clean)
feat/experiment-spec-skill 5ff7989 experiment-spec/SKILL.md → skills/experiment-spec/SKILL.md yes
tbd/feat-own-the-task-add-delegation-0cec7202 561044d own-the-task/SKILL.md → skills/own-the-task/SKILL.md yes

Deleted. git branch -r is now origin/main alone.

Worth noting for #15: that last branch also carried three SKILLS_INDEX.md rows that the squash-merge dropped, which is plausibly the same mechanism behind the missing experiment-spec and dream index rows.

Both halves done — CI gate first, then the branches. ## The CI gate (`3112b4c`, released as `v0.8.0`) `release.yml` → `ci.yml`, two jobs: - **`gate`** — `task check` + `task test` on every push and every `pull_request` to main, `fetch-depth: 0` so the manifest/tag parity assertion actually has tags to compare against. - **`tag`** — the existing semver-from-trailer logic, unchanged, but `needs: gate` and `if: push && ref == refs/heads/main`. The pull_request trigger is the part `tbd_ship` needs: it fails closed when no CI run exists for the head commit, which is why shipped skills in this repo never auto-merged. Also fixed while in there: the tagger pushed the `plugin.json` bump commit and the tag as **two** pushes. The gate runs `task check` on that bump commit, and check asserts `manifest == latest tag` — so there was a window where it would legitimately fail on a commit that was correct. Now both refs go up in one `git push origin HEAD:main "$TAG"`. `tests/ci_gate_test.sh` (7 assertions) pins the wiring: PR trigger present, both tasks invoked, `tag` needs `gate`, no second ungated workflow file left behind. Mutation-checked — deleting `needs: gate` turns it red. ### Evidence it gates in both directions | | run | head | conclusion | |---|---|---|---| | green path | [#24](https://git.d-ma.be/mathias/skills/actions/runs/4831) | `3112b4c` (main) | **success** → tagged `v0.8.0`, `plugin.json` bumped to 0.8.0 | | red path | [#25](https://git.d-ma.be/mathias/skills/actions/runs/4832) | `aaf2aba` (throwaway branch, `skills/tdd/SKILL.md` deleted) | **failure** → no tag created; `git tag` still tops out at `v0.8.0` | The red run is the one that matters. Before this, `task check` and the 28-case shell suite ran nowhere — the estate backlog classification lists this repo's CI as `no_test_step`, *fails open*: green while having tested nothing. It now fails closed. One deliberate gap: the tagger's own `plugin.json` bump commit gets no run, because Gitea does not re-trigger workflows on a push made with the runner's token. That is the recursion guard doing its job and the commit only touches a version string. ## Stale branches All three verified merged-by-content before deletion — none was reachable from `main` (squash merges), and each one's file had simply been relocated into `skills/` by the later reorg: | branch | tip | file | identical to main | |---|---|---|---| | `feat/add-dream-skill` | `c739f4c` | `dream/SKILL.md` → `skills/dream/SKILL.md` | yes (`diff` clean) | | `feat/experiment-spec-skill` | `5ff7989` | `experiment-spec/SKILL.md` → `skills/experiment-spec/SKILL.md` | yes | | `tbd/feat-own-the-task-add-delegation-0cec7202` | `561044d` | `own-the-task/SKILL.md` → `skills/own-the-task/SKILL.md` | yes | Deleted. `git branch -r` is now `origin/main` alone. Worth noting for #15: that last branch also carried three `SKILLS_INDEX.md` rows that the squash-merge dropped, which is plausibly the same mechanism behind the missing `experiment-spec` and `dream` index rows.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: mathias/skills#22