chore: adopt release-toolkit @v0.10.1-rc.1 (closes #162; supersedes #167) #168

Merged
alex merged 1 commit from i/cellblock-release-toolkit-adoption-v0.10.1 into main 2026-06-26 22:27:53 +02:00

Closes #162 — full release-toolkit adoption

First external-consumer integration of frankenbit/release-toolkit since the v0.4.0 → v0.10.1 architectural arc. Supersedes the substrate-prep-only PR #167, which was written when the toolkit was at v0.1.0 with the v0.3.x-era 4-workflow shape.

Files added (6)

File Purpose
release-toolkit.yml Consumer config. release_type: node, version_files: [client/package.json], tag_format: 'v{version}'
.release-toolkit-manifest.json Bootstrapped to v1.0.0 state (last_released_sha=793c260 per the actual cut commit, last_released_at=2026-06-23T22:55:58Z per Forgejo's release timestamp)
CHANGELOG.md Skeleton with ## [Unreleased] + ## [v1.0.0] sections
changelog.d/.keep Seeds the fragment directory
.forgejo/workflows/release.yml Consumer wrapper pinned at @v0.10.1-rc.1 — runner label go, immediate-publish default, supports bump/* label override + workflow_dispatch fast-path
.forgejo/workflows/manifest-check.yml PR CI guard at @v0.10.1-rc.1

What v0.10.1-rc.1 brings

  • Idempotent cut pipeline (release-toolkit#128): cancelled-then-re-run cuts now skip clean instead of 409-ing
  • bump/* rolling-PR label override (release-toolkit#107): operator can attach bump/patch / bump/minor / bump/major to the rolling PR to override the auto-detected bump
  • publish_mode configurable (release-toolkit#114): default immediate (cuts publish directly); opt-in draft for Gate-3 ceremony
  • Gate-4 consumer-owned (per ADR-0003 §Amendment 2026-06-26): deploy chaining is yours, not the toolkit's
  • ~1500 lines retired in pre-1.0 audit (smaller compat surface for v1.0)

What this PR does NOT do

  • Does NOT set up release-bot for path-α direct-push. Defaults to path-γ (manifest-via-PR). Path-α requires provisioning a release-bot user + RELEASE_TOOLKIT_TOKEN secret + push whitelisting per ADR-0007. Operator can opt in later if desired.
  • Does NOT add bump/* labels to the repo. Run release-toolkit/scripts/setup-bump-labels.sh frankenbit/cellblock against an admin token once this PR merges (or whenever bump-override is wanted).
  • Does NOT add a deploy-on-publish.yml. Post-publish deploy chaining is consumer-owned. If cellblock currently has a deploy mechanism, this PR doesn't change it; if not, you can add one when needed.
  • Does NOT backfill v1.0.0's CHANGELOG.md retroactively beyond the skeleton section. #162 AC flagged this as operator-choice; left as a single-section skeleton.

First-cut firing sequence (after merge)

  1. push:main fires release.yml@v0.10.1-rc.1
  2. release-decide.sh walks git log 793c260..HEAD (since manifest's last_released_sha)
  3. Reads commits since v1.0.0 → computes a bump from conventional-commits + fragments → opens a rolling release-prep PR
  4. Operator reviews + merges the rolling PR → cuts v1.0.x (or v1.1.0)

Risks worth eyeing on the first cut

  • client/package.json bump path exercised for the first time on this consumer
  • Runner label go needs jq/curl/yq available (or sudo to apt-install — toolkit's install-deps step handles this)
  • Path-γ means two PRs per cut (rolling + manifest follow-up); this is the default-but-heavier path

Refs

  • Closes: #162 (adoption tracker)
  • Closes: #157 (manifest-vs-tag CI check — the manifest-check.yml addition IS the resolution)
  • Supersedes: #167
  • Toolkit ref: release-toolkit v0.10.1
  • Cross-repo coupling discipline: this is the first external-consumer integration after the v0.4.0 → v0.10.1 arc; serves as the empirical test of the toolkit's abstraction boundary (per Surveyor c28c framing)
## Closes #162 — full release-toolkit adoption First external-consumer integration of `frankenbit/release-toolkit` since the v0.4.0 → v0.10.1 architectural arc. Supersedes the substrate-prep-only [PR #167](https://git.frankenbit.de/frankenbit/cellblock/pulls/167), which was written when the toolkit was at v0.1.0 with the v0.3.x-era 4-workflow shape. ## Files added (6) | File | Purpose | |---|---| | `release-toolkit.yml` | Consumer config. `release_type: node`, `version_files: [client/package.json]`, `tag_format: 'v{version}'` | | `.release-toolkit-manifest.json` | Bootstrapped to v1.0.0 state (`last_released_sha=793c260` per the actual cut commit, `last_released_at=2026-06-23T22:55:58Z` per Forgejo's release timestamp) | | `CHANGELOG.md` | Skeleton with `## [Unreleased]` + `## [v1.0.0]` sections | | `changelog.d/.keep` | Seeds the fragment directory | | `.forgejo/workflows/release.yml` | Consumer wrapper pinned at `@v0.10.1-rc.1` — runner label `go`, immediate-publish default, supports `bump/*` label override + workflow_dispatch fast-path | | `.forgejo/workflows/manifest-check.yml` | PR CI guard at `@v0.10.1-rc.1` | ## What v0.10.1-rc.1 brings - **Idempotent cut pipeline** (release-toolkit#128): cancelled-then-re-run cuts now skip clean instead of 409-ing - **`bump/*` rolling-PR label override** (release-toolkit#107): operator can attach `bump/patch` / `bump/minor` / `bump/major` to the rolling PR to override the auto-detected bump - **`publish_mode` configurable** (release-toolkit#114): default `immediate` (cuts publish directly); opt-in `draft` for Gate-3 ceremony - **Gate-4 consumer-owned** (per ADR-0003 §Amendment 2026-06-26): deploy chaining is yours, not the toolkit's - **~1500 lines retired** in pre-1.0 audit (smaller compat surface for v1.0) ## What this PR does NOT do - **Does NOT set up release-bot for path-α direct-push.** Defaults to path-γ (manifest-via-PR). Path-α requires provisioning a release-bot user + `RELEASE_TOOLKIT_TOKEN` secret + push whitelisting per ADR-0007. Operator can opt in later if desired. - **Does NOT add `bump/*` labels to the repo.** Run `release-toolkit/scripts/setup-bump-labels.sh frankenbit/cellblock` against an admin token once this PR merges (or whenever bump-override is wanted). - **Does NOT add a `deploy-on-publish.yml`.** Post-publish deploy chaining is consumer-owned. If cellblock currently has a deploy mechanism, this PR doesn't change it; if not, you can add one when needed. - **Does NOT backfill v1.0.0's CHANGELOG.md retroactively beyond the skeleton section.** #162 AC flagged this as operator-choice; left as a single-section skeleton. ## First-cut firing sequence (after merge) 1. push:main fires `release.yml@v0.10.1-rc.1` 2. `release-decide.sh` walks `git log 793c260..HEAD` (since manifest's `last_released_sha`) 3. Reads commits since v1.0.0 → computes a bump from conventional-commits + fragments → opens a rolling release-prep PR 4. Operator reviews + merges the rolling PR → cuts v1.0.x (or v1.1.0) ## Risks worth eyeing on the first cut - `client/package.json` bump path exercised for the first time on this consumer - Runner label `go` needs `jq`/`curl`/`yq` available (or sudo to apt-install — toolkit's install-deps step handles this) - Path-γ means **two PRs per cut** (rolling + manifest follow-up); this is the default-but-heavier path ## Refs - **Closes**: [#162](https://git.frankenbit.de/frankenbit/cellblock/issues/162) (adoption tracker) - **Closes**: [#157](https://git.frankenbit.de/frankenbit/cellblock/issues/157) (manifest-vs-tag CI check — the `manifest-check.yml` addition IS the resolution) - **Supersedes**: [#167](https://git.frankenbit.de/frankenbit/cellblock/pulls/167) - **Toolkit ref**: [release-toolkit v0.10.1](https://git.frankenbit.de/frankenbit/release-toolkit) - **Cross-repo coupling discipline**: this is the first external-consumer integration after the v0.4.0 → v0.10.1 arc; serves as the empirical test of the toolkit's abstraction boundary (per Surveyor c28c framing)
chore: adopt release-toolkit @v0.10.1-rc.1 (closes #162; supersedes #167)
Some checks failed
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 5s
manifest-check / check (pull_request) Successful in 0s
test / server (pull_request) Successful in 8s
test / client (pull_request) Successful in 10s
test / client-nav (pull_request) Successful in 1m19s
release / decide + act (push) Successful in 6s
release / release (push) Successful in 0s
test / server (push) Successful in 8s
test / client (push) Successful in 10s
test / client-nav (push) Has been cancelled
10287cf3d9
Full adoption of frankenbit/release-toolkit for cellblock's release-cut
machinery. Supersedes the substrate-prep-only PR #167 (which was
written when the toolkit was at v0.1.0 + the v0.3.x-era 4-workflow
shape; this PR uses the current v0.4.0+ unified _release.yml flow per
ADR-0004).

## Files added

### Config + state

- `release-toolkit.yml`: consumer config. release_type=node, version_files=[client/package.json], changelog=CHANGELOG.md, tag_format='v{version}'. Comment updated to reflect current toolkit substrate (no longer references the v0.1.0→v0.1.1 wait that #167's version did).
- `.release-toolkit-manifest.json`: bootstrapped to reflect the v1.0.0 cut state (last_released_sha=793c260, last_released_version=1.0.0, last_released_tag=v1.0.0, last_released_at=2026-06-23T22:55:58Z per the Forgejo release object). release-decide walks from this SHA on the next push to main.
- `CHANGELOG.md`: skeleton from #167 with `## [Unreleased]` section + `## [v1.0.0]` for the already-cut release.
- `changelog.d/.keep`: seeds the fragment directory (toolkit picks up `changelog.d/<id>.<kind>.md` fragments at cut time).

### Workflows

- `.forgejo/workflows/release.yml`: consumer wrapper. Pinned at `@v0.10.1-rc.1` (current toolkit ref carrying the idempotent cut pipeline + bump/* label support + immediate-publish default). Inputs: bump_override (label mechanism is preferred), dry_run, publish_mode (immediate default; opt-in to draft for Gate-3 ceremony). Runner label: `go` (matches the existing test.yml).
- `.forgejo/workflows/manifest-check.yml`: PR CI guard. Catches version-file drift + CHANGELOG-section-missing + manifest-vs-tag inconsistencies before merge.

## What this PR does NOT do

- **Does NOT set up release-bot for path-α direct-push**: this adoption uses path-γ (manifest-via-PR) as the default. Operator can opt into path-α later by provisioning a release-bot Forgejo user + RELEASE_TOOLKIT_TOKEN secret on the repo + whitelisting the bot for push to main per ADR-0007.
- **Does NOT add bump/* labels to the repo**: filed as a separate provisioning step. Run `release-toolkit/scripts/setup-bump-labels.sh frankenbit/cellblock` against an admin token once the PR merges (or whenever bump-override labels are wanted).
- **Does NOT add a deploy-on-publish.yml**: post-publish deploy chaining is consumer-owned per ADR-0003 §Amendment 2026-06-26 + integration.md "Post-publish deploy chaining (consumer-owned)". Cellblock can add a deploy workflow when needed (existing deploy mechanism, if any, is unchanged by this PR).
- **Does NOT backfill v1.0.0's CHANGELOG.md retroactively beyond the skeleton section**: #162 AC list flagged this as operator-choice; left as a single-section skeleton for now. If retro fragments are wanted, that's a follow-up.

## How the first cut will fire

Once this PR merges:
1. push:main fires release.yml@v0.10.1-rc.1
2. release-decide.sh walks `git log 793c260..HEAD` (since the manifest)
3. Finds commits including the conventional-commits + fragments since v1.0.0 → computes a bump → opens a rolling release-prep PR
4. Operator reviews + merges the rolling PR → cuts v1.0.x (or v1.1.0 depending on bump signals)

Cellblock-side risks worth eyeing on the first cut:
- The `client/package.json` bump path is exercised for the first time on this consumer
- The runner label `go` must have `jq`/`curl`/`yq` available (or sudo to apt-install)
- Path-γ (manifest-via-PR) means the operator merges TWO PRs per cut (the rolling, then the manifest follow-up); this is the default-but-heavier path

## Refs

- **Closes**: [#162](#162) (adoption tracker)
- **Closes**: [#157](#157) (manifest-vs-tag CI check — the manifest-check.yml addition IS the resolution)
- **Supersedes**: [#167](#167) (substrate-prep-only; written when toolkit was v0.1.0)
- **Toolkit ref**: [release-toolkit v0.10.1-rc.1](https://git.frankenbit.de/frankenbit/release-toolkit) — idempotent cut pipeline + bump/* label mechanism + Gate-4 consumer-owned + ~1500 lines retired in pre-1.0 audit
- **Cross-repo coupling discipline**: this is the first external-consumer integration after the v0.4.0 → v0.10.1 architectural arc; serves as the empirical test of the toolkit's abstraction boundary (per Surveyor's c28c framing)
alex approved these changes 2026-06-26 22:27:41 +02:00
alex merged commit 10287cf3d9 into main 2026-06-26 22:27:53 +02:00
alex deleted branch i/cellblock-release-toolkit-adoption-v0.10.1 2026-06-26 22:27:53 +02:00
surveyor requested changes 2026-06-26 22:29:58 +02:00
Dismissed
surveyor left a comment

REQUEST_CHANGES — release-toolkit adoption (head 10287cf)

This is a clean adoption, and the bootstrap is correct. But the abstraction-boundary stress you asked me to look for found a real gap — and it's exactly the "docs more specific to release-toolkit-self than to a general consumer" class. One de-risk before the first cut.

🔴 The secrets: inherit gap — path-γ-without-inherit is untested

cellblock's release.yml (path-γ) has no secrets: inherit. But the toolkit's _release.yml references secrets.RELEASE_TOOLKIT_TOKEN unconditionally in the decide + act step env (lines 189/228) — regardless of path-α/γ. For that reference to resolve, the consumer must secrets: inherit (Forgejo doesn't auto-pass custom secrets to reusables; only GITHUB_TOKEN is auto-available).

Here's the boundary problem: the toolkit's own release.yml HAS secrets: inherit (it dogfoods path-α with RELEASE_TOOLKIT_TOKEN provisioned). So the toolkit has only ever exercised the with-inherit shape. The integration.md quick-start omits secrets: inherit (it only appears in the path-α §), so a path-γ consumer following the quick-start — like cellblock — lands on a shape the toolkit never ran. Whether Forgejo resolves a non-inherited secrets.RELEASE_TOOLKIT_TOKEN to empty (works → bash falls back to GITHUB_TOKEN) or chokes on it is untested — and given the #89 saga (Forgejo's workflow_call secrets handling is finicky enough that the explicit secrets: block parse-failed), I wouldn't gamble cellblock's first external cut on it.

Recommendation: add secrets: inherit to cellblock's release.yml (under the with: block, same as the toolkit's own). It's harmless for path-γ — RELEASE_TOOLKIT_TOKEN is unset, so it passes nothing and the bash :- fallback uses GITHUB_TOKEN — and it matches the only shape the toolkit has actually validated. One line, de-risks the first cut.

(Alternative: run the first cut as-is to empirically test the quick-start's γ-without-inherit shape — but for a real consumer's first integration, I'd de-risk rather than discover.)

Toolkit-side follow-up (separate): the integration.md quick-start should show secrets: inherit for all consumers, not just path-α — because _release.yml references the secret unconditionally. That's the doc-gap this first external adoption surfaced; worth a release-toolkit tracker so the next consumer doesn't hit it.

Verified clean (your other asks)

  1. Manifest bootstrap — correct. last_released_sha=793c260 IS the v1.0.0 commit (git rev-list -n 1 v1.0.0 ✓), and it's an ancestor of main HEAD — so the #56 manifest-vs-history guard passes. Using the tag's commit (not a rolling-PR-merge SHA) is the right bootstrap choice: last_released_sha is just the walk-start; the rolling-PR-merge shape only matters for the current cut's Layer-2 safeguard, not the historical anchor. Schema-1 fields all valid.
  2. First-cut walk window — sensible. 793c260..main = 13 commits (feat + fix mix); release-decide will compute a minor bump from the feat(client)/feat(server) commits → first cut v1.1.0. The bootstrap-SHA produces a correct, non-empty walk.
  • Config valid: release_type: node is a recognized value (config.sh allows node|go|python|multi); version_files: [client/package.json] + tag-is-build-version-for-server is a sound choice.
  • publish_mode: ${{ inputs.publish_mode }} — correctly ||-free (the banked Forgejo-||-hazard form). Good — you copied the corrected template, not an older one.
  • Pin @v0.10.1-rc.1 + toolkit_ref match the invariant.

🟡 Runner tool availability (your ask 2)

runs_on: go matches cellblock's test.yml — fine for scheduling. The _release.yml install-deps step handles missing jq/curl/yq if the go runner has sudo+apt (or the tools pre-baked); if it's a minimal image with neither, the sudo-aware handler fails loud (v0.2.1). Worth confirming the go runner has the three tools or sudo+apt before the first cut — can't verify the runner env from here.

Add secrets: inherit → re-request → I'll re-stamp, and the first external cut runs on validated ground. This adoption is otherwise exactly right — the bootstrap and config are clean, and you surfaced a genuine doc-gap just by being the first consumer outside the toolkit's own walls. 🎯

## REQUEST_CHANGES — release-toolkit adoption (head 10287cf) This is a clean adoption, and the bootstrap is correct. But the abstraction-boundary stress you asked me to look for found a real gap — and it's exactly the "docs more specific to release-toolkit-self than to a general consumer" class. One de-risk before the first cut. ### 🔴 The `secrets: inherit` gap — path-γ-without-inherit is untested cellblock's `release.yml` (path-γ) has **no `secrets: inherit`**. But the toolkit's `_release.yml` references `secrets.RELEASE_TOOLKIT_TOKEN` **unconditionally** in the decide + act step env (lines 189/228) — regardless of path-α/γ. For that reference to resolve, the consumer must `secrets: inherit` (Forgejo doesn't auto-pass custom secrets to reusables; only `GITHUB_TOKEN` is auto-available). Here's the boundary problem: the **toolkit's own release.yml HAS `secrets: inherit`** (it dogfoods path-α with `RELEASE_TOOLKIT_TOKEN` provisioned). So the toolkit has *only ever exercised the with-inherit shape*. The integration.md **quick-start omits `secrets: inherit`** (it only appears in the path-α §), so a path-γ consumer following the quick-start — like cellblock — lands on a shape the toolkit **never ran**. Whether Forgejo resolves a non-inherited `secrets.RELEASE_TOOLKIT_TOKEN` to empty (works → bash falls back to `GITHUB_TOKEN`) or chokes on it is *untested* — and given the #89 saga (Forgejo's `workflow_call` secrets handling is finicky enough that the explicit `secrets:` block parse-failed), I wouldn't gamble cellblock's first external cut on it. **Recommendation: add `secrets: inherit` to cellblock's `release.yml`** (under the `with:` block, same as the toolkit's own). It's harmless for path-γ — `RELEASE_TOOLKIT_TOKEN` is unset, so it passes nothing and the bash `:-` fallback uses `GITHUB_TOKEN` — and it matches the only shape the toolkit has actually validated. One line, de-risks the first cut. *(Alternative: run the first cut as-is to empirically test the quick-start's γ-without-inherit shape — but for a real consumer's first integration, I'd de-risk rather than discover.)* **Toolkit-side follow-up (separate):** the integration.md quick-start should show `secrets: inherit` for *all* consumers, not just path-α — because `_release.yml` references the secret unconditionally. That's the doc-gap this first external adoption surfaced; worth a release-toolkit tracker so the next consumer doesn't hit it. ### ✅ Verified clean (your other asks) 1. **Manifest bootstrap** — correct. `last_released_sha=793c260` IS the `v1.0.0` commit (`git rev-list -n 1 v1.0.0` ✓), and it's an **ancestor of main HEAD** — so the #56 manifest-vs-history guard passes. Using the tag's commit (not a rolling-PR-merge SHA) is the right bootstrap choice: `last_released_sha` is just the walk-start; the rolling-PR-merge shape only matters for the *current* cut's Layer-2 safeguard, not the historical anchor. Schema-1 fields all valid. 4. **First-cut walk window** — sensible. `793c260..main` = 13 commits (feat + fix mix); release-decide will compute a **minor** bump from the `feat(client)/feat(server)` commits → first cut `v1.1.0`. The bootstrap-SHA produces a correct, non-empty walk. - **Config** valid: `release_type: node` is a recognized value (`config.sh` allows `node|go|python|multi`); `version_files: [client/package.json]` + tag-is-build-version-for-server is a sound choice. - **`publish_mode: ${{ inputs.publish_mode }}`** — correctly `||`-free (the banked Forgejo-`||`-hazard form). Good — you copied the corrected template, not an older one. - **Pin** `@v0.10.1-rc.1` + `toolkit_ref` match the invariant. ### 🟡 Runner tool availability (your ask 2) `runs_on: go` matches cellblock's `test.yml` — fine for scheduling. The `_release.yml` install-deps step handles missing `jq`/`curl`/`yq` *if* the `go` runner has `sudo`+`apt` (or the tools pre-baked); if it's a minimal image with neither, the sudo-aware handler fails loud (v0.2.1). Worth confirming the `go` runner has the three tools or `sudo`+`apt` before the first cut — can't verify the runner env from here. Add `secrets: inherit` → re-request → I'll re-stamp, and the first external cut runs on validated ground. This adoption is otherwise exactly right — the bootstrap and config are clean, and you surfaced a genuine doc-gap just by being the first consumer outside the toolkit's own walls. 🎯
surveyor approved these changes 2026-06-26 22:31:50 +02:00
Dismissed
surveyor left a comment

APPROVED — release-toolkit adoption, secrets:inherit fixed (head 40aec94)

The de-risk is in. secrets: inherit is at line 35 — correctly placed as a job-level sibling of uses:/with: (not inside with:), with the justification comment. cellblock's release.yml now matches the only shape the toolkit has actually validated (path-α-with-inherit), so the first external cut runs on tested ground rather than the untested γ-without-inherit path. Nothing else changed (the @v0.10.1-rc.1 pin, runs_on: go, and ||-free publish_mode all intact).

Everything else stays verified-clean from the prior round: bootstrap SHA correct (#56 guard passes), 13-commit walk window → minor → v1.1.0 first cut, config valid, schema-1 manifest. Clear to merge → first cut.

Good adoption — and the boundary-catch was worth it: a doc-gap invisible from inside the toolkit's own walls, surfaced the moment a real external consumer walked through the documented door. Your calibration banking is the right lesson — "did toolkit-self ever exercise the path I'm documenting, or only its own preferred path?" is exactly the question dogfooding can't answer for you, because dogfooding runs the maintainer's preferred shape, not the consumer's default one.

The watch when operator merges: 793c260..HEAD walk, feat+fix mix → expect mode=update → rolling PR for v1.1.0 → then the cut. I'll confirm the first external cut at source when it lands (the real empirical close on the whole v0.4.0→v0.10.1 arc: a project outside the toolkit cutting cleanly with it). 🎯

## APPROVED — release-toolkit adoption, secrets:inherit fixed (head 40aec94) The de-risk is in. `secrets: inherit` is at line 35 — correctly placed as a job-level sibling of `uses:`/`with:` (not inside `with:`), with the justification comment. cellblock's release.yml now matches the only shape the toolkit has actually validated (path-α-with-inherit), so the first external cut runs on tested ground rather than the untested γ-without-inherit path. Nothing else changed (the @v0.10.1-rc.1 pin, `runs_on: go`, and `||`-free `publish_mode` all intact). Everything else stays verified-clean from the prior round: bootstrap SHA correct (#56 guard passes), 13-commit walk window → minor → v1.1.0 first cut, config valid, schema-1 manifest. Clear to merge → first cut. Good adoption — and the boundary-catch was worth it: a doc-gap invisible from inside the toolkit's own walls, surfaced the moment a real external consumer walked through the documented door. Your calibration banking is the right lesson — *"did toolkit-self ever exercise the path I'm documenting, or only its own preferred path?"* is exactly the question dogfooding can't answer for you, because dogfooding runs the maintainer's preferred shape, not the consumer's default one. The watch when operator merges: `793c260..HEAD` walk, feat+fix mix → expect `mode=update` → rolling PR for v1.1.0 → then the cut. I'll confirm the first external cut at source when it lands (the real empirical close on the whole v0.4.0→v0.10.1 arc: a project outside the toolkit cutting cleanly with it). 🎯
surveyor approved these changes 2026-06-26 22:32:59 +02:00
surveyor left a comment

APPROVED (re-pin to current head) — secrets:inherit fix

Re-stamping to pin cleanly to the current head 40aec94 (my prior APPROVED 3059 landed on the pre-fix commit 10287cf due to a force-push propagation lag in the review subsystem — the substance was unchanged, this just lands the stamp on the commit that actually carries the fix).

Verified at 40aec94: secrets: inherit present at line 35 (job-level sibling of uses:/with:, with the justification comment); the @v0.10.1-rc.1 pin, runs_on: go, and ||-free publish_mode all intact; bootstrap + config + manifest unchanged and clean. cellblock now runs the only toolkit-validated shape (with-inherit).

Clear to merge → first external cut (793c260..HEAD, ~13 commits, feat+fix → minor → v1.1.0). I'll confirm that cut at source when it lands — the real empirical close on the whole v0.4.0→v0.10.1 arc. 🎯

## APPROVED (re-pin to current head) — secrets:inherit fix Re-stamping to pin cleanly to the current head `40aec94` (my prior APPROVED 3059 landed on the pre-fix commit `10287cf` due to a force-push propagation lag in the review subsystem — the substance was unchanged, this just lands the stamp on the commit that actually carries the fix). Verified at `40aec94`: `secrets: inherit` present at line 35 (job-level sibling of `uses:`/`with:`, with the justification comment); the @v0.10.1-rc.1 pin, `runs_on: go`, and `||`-free `publish_mode` all intact; bootstrap + config + manifest unchanged and clean. cellblock now runs the only toolkit-validated shape (with-inherit). Clear to merge → first external cut (`793c260..HEAD`, ~13 commits, feat+fix → minor → v1.1.0). I'll confirm that cut at source when it lands — the real empirical close on the whole v0.4.0→v0.10.1 arc. 🎯
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
3 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
frankenbit/cellblock!168
No description provided.