Task · CAOT-0030

OpenBao onboarding for release-please and docs-sync

Description

release-please.yml already references the permission set release-please-codingagent2otel, which does not exist yet. There is no PAT fallback: the old tokens are revoked and unrecoverable, so the only route is an OpenBao permission set, policy and JWT role.

Acceptance Criteria

Definition of Done

Implementation Plan

Wave 1 lane 11: root creates additive OpenBao/GitHub release plumbing from live sibling shape, wires shared workflows and repository settings, then proves the release broker mint step and release PR.

Implementation Notes

Authorised by Rob 2026-09-22: the wave may run bao login -method=oidc at any time and create the permission set, ACL policy and JWT role this repo needs, in line with the other repos. Additive only - never modify or delete another consumer’s objects, and a shared permission set is not yours to edit.

Runbook: ~/repos/chat-personal/camden/openbao/runbooks/CI-SECRETS.md, section “Adding a consumer”. It wins over any summary.

Non-guessable values: BAO_ADDR https://openbao.saga-turtle.ts.net rknightion installation_id 152037622 rknightion owner id 12484127 this repo’s numeric id 1381225038 permission set / role name release-please-codingagent2otel runner_environment claim github-hosted

Read a live sibling and copy its actual shape rather than deriving names from docs: bao read auth/gha/role/release-please-codexlb2otel -> the exact token_policies name and bound_claims bao policy read -> the exact HCL

Failure signatures: auth/gha/login 400 the role does not exist under the name the workflow passed; bao list auth/gha/role first login ok, mint 403 the policy the role names does not exist; the role write accepts any policy name unchecked bound_claims type error it must be a JSON body, not the key=value CLI form OIDC request returns nothing the job is missing permissions: id-token: write mint finds no repository wrong installation_id; repositories is scoped within an installation

After onboarding, always bao policy read the exact name the role carries. portina shipped with a role naming a policy that had never been written; login succeeded and every mint 403’d for months.

Evidence bar: a green release-please run whose mint step was SKIPPED is not evidence. Read the mint step’s own output and quote the run id.

docs-sync is deferred, not done: it needs a docs-sync-codingagent2otel JWT role under the shared docs-sync permission set, an edit to docs-repos.json in m7kni/m7kni-net-site, and this repo wired for doc publication, which it is not.

docs-sync is NOT part of this task’s delivery. It is tracked separately as CAOT-0038 and was deferred out of wave 1 by Rob on 2026-09-22. This task creates the release-please objects only. The shared docs-sync permission set and its policy stay read-only.

Final Summary

OpenBao permission set, exact-path policy, and JWT role were created and read back; run 35715966330 proved the mint step and release PR 2, and run 35720241045 minted again and cut v0.1.0 with manifest 0.1.0. No legacy PAT was created; docs-sync remains separately deferred as CAOT-0038.

View the source file on GitHub