Skip to content

release-gates: scaffold v0.1 gate protocol + E2E box + verdict schema#2

Merged
Antawari merged 1 commit into
v0.1from
antawari/bon-356-release-gate-scaffold
Apr 17, 2026
Merged

release-gates: scaffold v0.1 gate protocol + E2E box + verdict schema#2
Antawari merged 1 commit into
v0.1from
antawari/bon-356-release-gate-scaffold

Conversation

@Antawari
Copy link
Copy Markdown
Contributor

Summary

Stands up the release-gate discipline for v0.1. Scaffold only — runnable completion is split across BON-356's six children.

  • docs/release-gates.md — the operative protocol: tiers, reviewer cadence, E2E box, fixture contract, cost logging (Fork C), API key handling, re-publish checklist, rollback, release train.
  • tests/e2e/schemas/verdict.schema.json — Draft-07 schema. Seven mechanical assertions. Tightening the bar means adding an assertion here.
  • tests/e2e/Dockerfileubuntu:24.04 + python3.12 + node20 + @anthropic-ai/claude-code. Local execution only.
  • tests/e2e/scripts/e2e-box.sh — host driver. Needs .env at repo root with ANTHROPIC_API_KEY.
  • tests/e2e/scripts/e2e-runner.sh — container runner. Scaffold with TODOs tied to BON-359 for final CLI invocation once the fixture's gate/check-verdict.sh lands.
  • docs/release-gate-tickets.md — Linear drafts for BON-356 epic + 6 children (to be filed when Linear OAuth is live).

Context

  • Repo flipped private at session start. Reversible.
  • Fixture repo created at BonfireAI/bonfire-e2e-fixture (private).
  • v0.1 integration branch live at origin.
  • This PR targets v0.1, not main.

Test plan

  • python3 -c 'json.load(open(schema))' — schema parses
  • bash -n clean on both scripts
  • chmod +x on both scripts (shipped as 100755)
  • Wizard review (Ishtar)
  • code-reviewer review (superpowers agent)
  • Docker build succeeds on a fresh Pop!_OS 24.04 machine (post-merge smoke)
  • docs/release-gates.md re-read against BON-179 vision for consistency

Follow-ups (BON-356 family)

Ticket Scope
BON-357 branch protection rules on main and v0.1 (UI click)
BON-358 this PR (the doc + schema half)
BON-359 complete runner + exact claude-cli invocation + verdict writer
BON-360 fixture repo content — broken-test harness + gate/check-verdict.sh
BON-361 per-wave gate checklist PR template
BON-362 audit open branches/PRs for fit

🤖 Generated with Claude Code

Stands up the release-gate discipline for v0.1.

- docs/release-gates.md — tiers (infra / integration / E2E / release),
  reviewer cadence (Wizard + code-reviewer), E2E box spec, fixture
  contract, cost logging (Fork C), API key handling, re-publish
  checklist, rollback, release train lifecycle.
- tests/e2e/schemas/verdict.schema.json — Draft-07 schema for the
  release-gate verdict artifact. The schema IS the contract; tighten
  the bar by adding assertions here.
- tests/e2e/Dockerfile — ubuntu:24.04 + python3.12 + node20 +
  @anthropic-ai/claude-code. Local execution only.
- tests/e2e/scripts/e2e-box.sh — host-side driver.
- tests/e2e/scripts/e2e-runner.sh — container-side runner (scaffold;
  completed by BON-359 once the fixture lands).
- docs/release-gate-tickets.md — Linear drafts for BON-356 epic and
  its six children (to be filed when Linear OAuth is live).

Context: repo flipped private at session start. Fixture repo created
at BonfireAI/bonfire-e2e-fixture (private). v0.1 integration branch
live at origin. E2E runs LOCAL ONLY — never in CI.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@Antawari Antawari merged commit 3fcfa06 into v0.1 Apr 17, 2026
@Antawari Antawari deleted the antawari/bon-356-release-gate-scaffold branch April 17, 2026 00:28
Antawari added a commit that referenced this pull request Apr 17, 2026
Fixes ISSUE #1 from the retrospective review of PR #2 (tracked in
issue #3). The scaffolded runner did `git clone https://` of the
private fixture repo inside the container — anonymous HTTPS fails,
and stuffing a token into the container to work around that grows
the secret surface.

New flow: the host clones via SSH into .e2e-runs/<run-id>/target
(host SSH keys handle auth) and bind-mounts the directory into the
container at /workspace/target. The box reaches only
api.anthropic.com; GitHub is unreachable from inside.

Changes
- tests/e2e/scripts/e2e-box.sh: host clone + fixture bind-mount
- tests/e2e/scripts/e2e-runner.sh: in-container clone replaced by
  mount sanity check
- docs/release-gates.md: §Flow step 2 rewritten; offline-box
  security property documented

Closes issue #3 checkbox #1.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Antawari added a commit that referenced this pull request Apr 17, 2026
)

Fixes ISSUE #1 from the retrospective review of PR #2 (tracked in
issue #3). The scaffolded runner did `git clone https://` of the
private fixture repo inside the container — anonymous HTTPS fails,
and stuffing a token into the container to work around that grows
the secret surface.

New flow: the host clones via SSH into .e2e-runs/<run-id>/target
(host SSH keys handle auth) and bind-mounts the directory into the
container at /workspace/target. The box reaches only
api.anthropic.com; GitHub is unreachable from inside.

Changes
- tests/e2e/scripts/e2e-box.sh: host clone + fixture bind-mount
- tests/e2e/scripts/e2e-runner.sh: in-container clone replaced by
  mount sanity check
- docs/release-gates.md: §Flow step 2 rewritten; offline-box
  security property documented

Closes issue #3 checkbox #1.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Antawari added a commit that referenced this pull request Apr 17, 2026
… family)

The file was a staging ground while Linear OAuth was fragile during S054.
All 9 tickets are now filed in Linear under epic BON-421:

- BON-422 (v0.1 branch + protection) — Done
- BON-423 (release-gates.md + verdict schema) — Done
- BON-424 E2E box runnable completion — Backlog
- BON-425 fixture target repo populate — Backlog (blocks 424)
- BON-426 per-wave gate checklist template — Backlog
- BON-427 audit open branches — Backlog
- BON-428 canonical branch-name assertion — Backlog (PR #2 retro)
- BON-429 Pin the gate — Backlog (PR #2 retro)

Renumbering note: drafts were BON-356–364 when written; Operation Seal
(private lane, S055) consumed BON-361 + BON-362 overnight, so the
public tickets landed at BON-421–429. Linear auto-numbers monotonically
across the team.

File stays until epic BON-421 closes at v0.1.0 publish. Then delete.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Antawari added a commit that referenced this pull request Apr 17, 2026
… family) (#5)

* release-gates: scaffold v0.1 gate protocol + E2E box + verdict schema (#2)

Stands up the release-gate discipline for v0.1.

- docs/release-gates.md — tiers (infra / integration / E2E / release),
  reviewer cadence (Wizard + code-reviewer), E2E box spec, fixture
  contract, cost logging (Fork C), API key handling, re-publish
  checklist, rollback, release train lifecycle.
- tests/e2e/schemas/verdict.schema.json — Draft-07 schema for the
  release-gate verdict artifact. The schema IS the contract; tighten
  the bar by adding assertions here.
- tests/e2e/Dockerfile — ubuntu:24.04 + python3.12 + node20 +
  @anthropic-ai/claude-code. Local execution only.
- tests/e2e/scripts/e2e-box.sh — host-side driver.
- tests/e2e/scripts/e2e-runner.sh — container-side runner (scaffold;
  completed by BON-359 once the fixture lands).
- docs/release-gate-tickets.md — Linear drafts for BON-356 epic and
  its six children (to be filed when Linear OAuth is live).

Context: repo flipped private at session start. Fixture repo created
at BonfireAI/bonfire-e2e-fixture (private). v0.1 integration branch
live at origin. E2E runs LOCAL ONLY — never in CI.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* e2e: host-clone fixture, bind-mount into box (no creds in container) (#4)

Fixes ISSUE #1 from the retrospective review of PR #2 (tracked in
issue #3). The scaffolded runner did `git clone https://` of the
private fixture repo inside the container — anonymous HTTPS fails,
and stuffing a token into the container to work around that grows
the secret surface.

New flow: the host clones via SSH into .e2e-runs/<run-id>/target
(host SSH keys handle auth) and bind-mounts the directory into the
container at /workspace/target. The box reaches only
api.anthropic.com; GitHub is unreachable from inside.

Changes
- tests/e2e/scripts/e2e-box.sh: host clone + fixture bind-mount
- tests/e2e/scripts/e2e-runner.sh: in-container clone replaced by
  mount sanity check
- docs/release-gates.md: §Flow step 2 rewritten; offline-box
  security property documented

Closes issue #3 checkbox #1.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs(release-gate-tickets): replace drafts with Linear links (BON-421 family)

The file was a staging ground while Linear OAuth was fragile during S054.
All 9 tickets are now filed in Linear under epic BON-421:

- BON-422 (v0.1 branch + protection) — Done
- BON-423 (release-gates.md + verdict schema) — Done
- BON-424 E2E box runnable completion — Backlog
- BON-425 fixture target repo populate — Backlog (blocks 424)
- BON-426 per-wave gate checklist template — Backlog
- BON-427 audit open branches — Backlog
- BON-428 canonical branch-name assertion — Backlog (PR #2 retro)
- BON-429 Pin the gate — Backlog (PR #2 retro)

Renumbering note: drafts were BON-356–364 when written; Operation Seal
(private lane, S055) consumed BON-361 + BON-362 overnight, so the
public tickets landed at BON-421–429. Linear auto-numbers monotonically
across the team.

File stays until epic BON-421 closes at v0.1.0 publish. Then delete.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Antawari added a commit that referenced this pull request Apr 17, 2026
… family)

Retry of PR #5 which accidentally targeted main instead of v0.1 and was
reverted in PR #6. This PR is explicitly --base v0.1.

All 9 release-gate tickets are now filed in Linear under epic BON-421:
- BON-422 v0.1 branch + protection — Done
- BON-423 release-gates.md + verdict schema — Done
- BON-424 E2E box runnable completion — Backlog
- BON-425 fixture target repo populate — Backlog (blocks 424)
- BON-426 per-wave gate checklist template — Backlog
- BON-427 audit open branches — Backlog
- BON-428 canonical branch-name assertion — Backlog (PR #2 retro)
- BON-429 Pin the gate — Backlog (PR #2 retro)

File stays on v0.1 until epic BON-421 closes at v0.1.0 publish.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Antawari added a commit that referenced this pull request Apr 17, 2026
… family) (#7)

Retry of PR #5 which accidentally targeted main instead of v0.1 and was
reverted in PR #6. This PR is explicitly --base v0.1.

All 9 release-gate tickets are now filed in Linear under epic BON-421:
- BON-422 v0.1 branch + protection — Done
- BON-423 release-gates.md + verdict schema — Done
- BON-424 E2E box runnable completion — Backlog
- BON-425 fixture target repo populate — Backlog (blocks 424)
- BON-426 per-wave gate checklist template — Backlog
- BON-427 audit open branches — Backlog
- BON-428 canonical branch-name assertion — Backlog (PR #2 retro)
- BON-429 Pin the gate — Backlog (PR #2 retro)

File stays on v0.1 until epic BON-421 closes at v0.1.0 publish.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant