docs(integration): quick-start must show secrets: inherit for ALL consumers (γ path under-specified — Surveyor dec5) #135
Labels
No labels
bump
major
bump
minor
bump
patch
kind/bug
kind/chore
kind/docs
kind/feature
priority/critical
priority/high
priority/low
priority/medium
size/L
size/M
size/S
size/XL
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit#135
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The gap
Per Surveyor dec5 review on the first external consumer adoption (frankenbit/cellblock#168 + 10287cf),
docs/integration.md's quick-start under-specifies the workflow_call secrets contract for path-γ (manifest-via-PR, noRELEASE_TOOLKIT_TOKEN) consumers.The substrate fact
.forgejo/workflows/_release.ymlreferencessecrets.RELEASE_TOOLKIT_TOKENunconditionally (lines 189 + 228 — both decide + act steps' env blocks). The bash layer falls back to GITHUB_TOKEN via:-when the secret resolves empty, BUT:GITHUB_TOKENis auto-available)secrets: inheriton the workflow_callsecrets: inherit, Forgejo's expression-engine behavior on the missing secret reference is UNTESTED — per release-toolkit#89, Forgejo's workflow_call secrets handling is finickyHow the gap surfaced
Toolkit-self always runs with
secrets: inheritbecause it dogfoods path-α withRELEASE_TOOLKIT_TOKENprovisioned. So the toolkit has only ever exercised the with-inherit shape. The integration.md quick-start (lines 211-219 indocs/integration.md) shows the consumer wiring WITHOUTsecrets: inherit, mentions it only in the path-α section (where it's natural because the consumer is provisioning a token).A path-γ consumer following the quick-start lands on a shape the toolkit has never run.
Proposed fix
Docs (this tracker's scope)
Update
docs/integration.mdquick-start to showsecrets: inheriton the workflow_call for ALL consumers, with a short comment noting why:Same edit applies to the consumer template at
.forgejo/workflows/release.yml(toolkit-self's own consumer wrapper) — actually, toolkit-self's own wrapper ALREADY hassecrets: inherit; the integration.md template is the under-specified one.Optional substrate hardening
The unconditional
secrets.RELEASE_TOOLKIT_TOKENreference could be made conditional on the env-block level (only declare the env var when path-α conditions hold), eliminating the inherit requirement for path-γ consumers. This is a substrate change with its own design space; not blocking the docs fix.Test seam consideration
A bats-level test for "consumer template includes
secrets: inherit" could be added as a regression guard (similar to theworkflows.batsschema checks).Refs
secrets: inheritto cellblock's release.yml inlineEmpirical update 2026-06-26
The cellblock adoption PR (cellblock#168) was merged at 22:27:53 — BEFORE Surveyor's
dec5review surfaced this gap — so the without-secrets: inheritshape ran end-to-end as cellblock's first cut.Empirical result: Forgejo's behavior on the missing
secrets.RELEASE_TOOLKIT_TOKENreference (nosecrets: inheriton the consumer wrapper) is benign:release-decide.shran cleanly (env block referenced the missing secret → resolved to empty → bash:-fell back toGITHUB_TOKEN)draft-release.shran cleanly (same shape)So this tracker's docs scope is non-blocking (the substrate works without
inherit), but the gap is still real: a consumer readingintegration.md's quick-start doesn't know the un-inherit shape is actually validated; the toolkit-self template HASsecrets: inherit; the inconsistency is real even if functionally moot.Revised scope
secrets: inheritin the quick-start consistently with what the toolkit-self does, with a note explaining the (now-validated):-fallback as the substrate-honest mechanismsecrets: inherit": still useful as a regression-guard for the docs decisionBanking
This tracker stays open for the docs fix; the substrate-hardening sub-scope becomes a "nice to have" rather than load-bearing. Surveyor's
dec5catch was correct CAUTION (don't gamble on a real consumer's first cut), and the empirical run vindicates the unconditional-reference shape as substrate-honest behavior.Cellblock's first cut was the abstraction-boundary test exactly as Surveyor's c28c framing predicted — surfaced one real gap (these docs) + one non-blocking quirk (Ghost author on path-γ).
Closing — implemented in PR #136 (test-seams + docs sprint).
docs/integration.mdquick-start template now showssecrets: inheritconsistently with toolkit-self's own consumer wrapper, with the substrate-honest justification (unconditional reference + bash :- fallback) inlinetests/workflows.batsgained a regression guard asserting the consumer wrapper hassecrets: inheriton every workflow_call job — catches a future edit that would re-introduce the documented-vs-validated gapEmpirical update from the cellblock first-cut adoption (2026-06-26): the un-inherit shape ran end-to-end without failure (Forgejo resolved the missing reference benignly; bash
${VAR:-}fell back toGITHUB_TOKENper ADR-0007). So the gap was docs-consistency rather than a substrate blocker; the docs fix closes the consumer-reading-the-docs confusion vector.Close-keyword from #136 didn't fire; cleaning up the tracker now.
secrets: inherit— both overstate it (RECOMMENDED, not required) #197