What's in this release
Headline pairing: /drain ships AND the upgrade pipeline can actually deliver it. This release lands the four-ticket drain port (T1–T4) plus the keystone self-healing-sync fix (#371) that closes the long-standing upgrade-pipeline gap. Downstream forks that /upgrade to v1.5.0 inherit a working autonomous-merge drain stack, the agent-merge gate, a bootstrap-time templating mechanism, the platform-shape /bootstrap-agents variant, doctor-script convergence, an upgraded /report-issue flag surface, a split-and-honest CI job shape, and — for the first time — a sync mechanism that can deliver future runtime-protected fixes cleanly.
This is the largest release since v1.2.0. 28 PRs ship between v1.4.0 (2026-06-01) and v1.5.0 (2026-06-13).
Added
-
/drainskill + supporting runtime — drain port T1–T4 (#464, #478, #479, #482) — autonomous overnight processing of the Ready column, with a safety-class taxonomy (safety:internal/:reversible/:hot/:flagged), anagent-merge.ymlgate workflow, adrain-merge-bridge.ymlworkflow that closes theworkflow_dispatch/workflow_callgap, adrain.mdorchestrator skill spec, a 5-state summary renderer (emit-drain-summary.mjswith 36 unit tests), provider-specific deploy-status and observability-baseline scripts (render-deploy-status.mjs,sentry-baseline.mjs), and an institutional-knowledge layer covering 7 Patterns and 6 Lessons accumulated during empirical development. Two ADRs (docs/adr/0001-*.md,0002-*.md) document the architectural decisions;docs/drain-customization.mdis the Layer 4 contract;docs/drain-known-limitations.mdis the v1 transparency surface. -
Bootstrap-time templating mechanism (#478, part of T2) —
scripts/substitute-config-placeholders.sh(idempotent sed pass;--checkmode for CI smoke tests) reads.gembaflow-config.jsonand substitutes four canonical placeholders ({{org}},{{board.id}},{{bot.worker}},{{bot.reviewer}}) into shipped skill specs at bootstrap. New step 7 in.claude/commands/bootstrap-workflow.mdruns the substitution.docs/PLATFORM-GUIDE.mddocuments the convention. The four-placeholder set is deliberately narrow — fork deploy URLs use$PUBLIC_BASE_URLenv var, runtime repo names resolve viagh repo view. Both consumers of the mechanism (work-ticket.mdanddrain.md) now ship parameterized. -
/bootstrap-agents --variant platform(#481) — net-new flag that swaps the agent roster for platform-shape projects (frameworks, harnesses, distribution pipelines). Default--variant productis unchanged. The platform variant installs six templates derived fromvibeacademy/gembaflow-meta's calibrated roster:framework-architect,github-ticket-worker,platform-backlog-prioritizer,pr-reviewer,release-engineer,swarm-planner. Memory references parameterized to generic language;docs/SDLC.md§ 2 documents the decision criteria. -
/report-issueflag surface improvements (#469, #475, #476, #477) — adds--dry-run(zeroapi.github.comcalls) and--fixture-repo <slug>(retargetsgh issue create --repoto a test fixture) for QE iteration without polluting the upstream tracker; both flags mutually exclusive. Addssyncto the component taxonomy. Renames--force-codespaces-token→--try-anyway(hidden alias preserved for backward compat). New.github/workflows/auto-close-test-fixtures.ymlautomatically closesva-worker-authored test-fixture downstream-report issues that match the title prefix — completes the QE-pollution loop closure. -
/doctorclone-freshness convergence (#472, #484) — both.claude/commands/doctor.md(the skill spec) andscripts/doctor.sh(the underlying script) now run an early "Verify the clone is current with origin" check. Emits PASS (current), WARN with the commits-behind count and most-recent upstream commit subject (stale), or SKIP with a clear reason (offline, no upstream tracking, not a git repo, nogitbinary). State-free; never fails the doctor run. -
/review-to-ticketsslash command (#395) + worker→reviewer auto-handoff (#397) + swarm mode forgithub-ticket-worker(#392) — closes the loop between review and backlog, automates the green-CI handoff to the PR reviewer, and lets the worker operate in isolated worktrees for/swarmruns. -
Selectable assistant modes for the main Claude session (#409) —
.claude/modes/registry with five framework modes (default,scaffolded,socratic,terse-expert,shipping-coach), each a third-person persona assertion plus behavioral heuristics./modeis the convenience wrapper. -
audit-local-customizations.sh+/upgradeintegration (#468) — pre-/upgradeaudit surfaces every framework-controlled file modified locally since the fork was bootstrapped but NOT in.gembaflow-overrides. Read-only; surfaces the silent-clobber risk before the sync runs. -
Auto-update board status on PR merge (#466) — new
.github/workflows/auto-board-status.ymlfires on PR-merged events, readsclosingIssuesReferences, and moves each closed-issue's board item to Done. Opt-in via three repo variables + one secret (PAT withprojectscope). -
DEPRECATED_CHECK_ALIASESmechanism inscripts/verify-bot-permissions.sh(#402) — when a future release renames a CI check, the rename PR can add a one-line alias entry so forks have a graceful one-release window to update their.github/workflows/ci.yml. -
scripts/doctor.shclone-freshness check (#484) — see above; converges shell-driven and slash-command paths.
Changed
-
scripts/template-sync.shself-heals runtime-protected files after the sync loop (#486, closes #371) — the keystone fix that makes this release adoptable. New post-sync-loop block re-copiesscripts/template-sync.shandscripts/lib/overrides.shfrom the just-downloaded release tarball IF (a) they differ from upstream AND (b) the path is NOT in.gembaflow-overrides. The currently-running script process is in memory; only the on-disk file gets refreshed; the next/upgradereads the refreshed code. Refreshed files ride the sync PR with a new> [!IMPORTANT] Runtime-protected files refreshed (post-run)callout. See "Propagation note" below — existing forks need a one-time manual refresh on first upgrade to v1.5.0. -
version-parityCI job split intojson-validate+version-parity(#471) — the former umbrella bundled two unrelated checks; failed-job names now match their purpose. Fork action required, see "Fork-maintained files you must update" below. -
scripts/report-issue.shflag rename--force-codespaces-token→--try-anyway(#476) — flag name now describes actual behavior; old name preserved as a hidden backward-compat alias. -
validate-version-parity.shis lenient by default — opt-in for strict mode (#467) — divergence now emitsWARNand exits 0 unless the fork sets"enforceVersionParity": truein.gembaflow-version. -
.github/workflows/auto-triage.ymlno longer applies theP1label (#470) — Priority is canonical on the project board, not a repo label. The## Auto-Triagecomment remains as both the operator-facing signal and the idempotency marker. Maintainers can now safely delete theP1/P2/P3label definitions. -
Root
.gitignorecovers framework-generated artifacts (#399) —.gembaflow-reports/, legacy.agile-flow-reports/, and legacy.agile-flow-versionare now ignored. Removes the recurring/upgradeclean-tree precheck failure on every fork that has ever run/report-issue. -
Release notes now require a "Fork-maintained files you must update" section (#401) — establishes the convention being followed in this very document.
Fixed
-
docs/UPGRADING.mdadds a pre-rebrand fork section (#465) — documents the one-linesedpatch v1.0.x forks must apply to escape theKeyError: 'tag_name'crash on first/upgrade(root cause: v1.0.x'stemplate-sync.shusescurl -sfwithout-L). Belt-and-braces alternative pinsUPSTREAM_REPO=vibeacademy/gembaflowto eliminate the redirect at the source. -
docs/TICKET-FORMAT.mdexample uses###headers, not dash-banners (#400) — the Concrete Example's Power-Section markers were--- A. Environment Context ---style which renders as horizontal rules if copied out as a template. Switched to### A. Environment Context. -
docs/report-issue.mddocuments board-canonical priority convention (#403) — the severity field in the report's YAML front matter is informational; priority is canonical on the project board's Priority field.
Removed
scripts/test-report-issue.sh(455 lines) +docs/reports/report-issue-acceptance-template.html(362 lines) retired (#483) — the legacy test file tested a pre-rebrand.gembaflow-meta/upstreamAPI that the currentscripts/report-issue.shno longer has. Canonical replacement isscripts/report-issue.test.sh(12 assertions via PATH-shimmedgh, shipped with #469). The HTML output template is removed alongside since it can no longer be regenerated.
Documentation
-
Drain stack documentation set (#482) — 5 new docs:
docs/adr/0001-*.md,docs/adr/0002-*.md,docs/drain-customization.md,docs/drain-known-limitations.md,docs/drain-institutional-knowledge.md.docs/PLATFORM-GUIDE.mdcross-references all 5 from the "Bootstrap-time templated values" section. -
Nested-subagent limitation documented in auto-handoff invariants (#398) — both
github-ticket-worker.mdandpr-reviewer.mdnow carry a "Known limitation: nested subagent contexts" subsection.
Migration notes
Required action for every fork after /upgrade to v1.5.0:
-
Manually refresh
scripts/template-sync.shandscripts/lib/overrides.shONCE. See "Propagation note" below for the exact commands. -
Branch-protected forks: add
json-validateto the required-status-checks list on themainruleset. The existingversion-parityentry stays. Without the update,json-validateruns but does not gate.scripts/verify-bot-permissions.sh(shipped with #471) asserts the new expected list — running it after upgrade will report "Missing required status checks: json-validate" until you update the ruleset.
Optional:
-
If your fork depended on the strict
validate-version-parity.sh(CI failing on every fork-vs-framework version divergence), add"enforceVersionParity": trueto.gembaflow-versionto preserve the old behavior. Otherwise, divergence will nowWARNrather thanFAIL. -
If your fork hosts a project-board with
auto-board-statusenabled (#466), set the three repo variables + one secret perdocs/CI-CD-GUIDE.md. Opt-in; framework default is disabled.
Fork-maintained files you must update
-
Required CI check added:
json-validate(#471). Update your fork's branch protection ruleset to requirejson-validatein addition toversion-parity. Existingversion-parityentry stays — its scope has narrowed to.gembaflow-versionvspackage.jsonparity only; JSON validation moved tojson-validate. -
Removed legacy script:
scripts/test-report-issue.sh(#483). If your fork's/upgradepost-flight or any operator script runsbash scripts/test-report-issue.sh, switch tobash scripts/report-issue.test.sh(the canonical replacement shipped in v1.4.x via #469's predecessor work — present in your fork already). -
Removed legacy artifact:
docs/reports/report-issue-acceptance-template.html(#483). If your fork's docs reference this URL, update or remove the reference.
Propagation note
This release modifies scripts/template-sync.sh and scripts/lib/overrides.sh (both are in RUNTIME_PROTECTED_PATHS).
Fresh forks (provisioned after v1.5.0): the self-heal mechanism shipped in #371 fires automatically on their first /upgrade. No action required.
Existing forks (bootstrapped on v1.4.0 or earlier): one-time manual refresh required on first /upgrade to v1.5.0. The OLD sync script in your fork lacks the post-loop self-heal (that's exactly what #371 adds), so the upgrade will pull every other v1.5.0 file but leave the two runtime-protected scripts at their pre-v1.5.0 versions. Run:
# After running /upgrade to v1.5.0, run this ONCE per fork:
curl -fsSL "https://raw.githubusercontent.com/vibeacademy/gembaflow/v1.5.0/scripts/template-sync.sh" -o scripts/template-sync.sh
curl -fsSL "https://raw.githubusercontent.com/vibeacademy/gembaflow/v1.5.0/scripts/lib/overrides.sh" -o scripts/lib/overrides.sh
chmod +x scripts/template-sync.sh
git add scripts/template-sync.sh scripts/lib/overrides.sh
git commit -m "chore(sync): manual refresh of runtime-protected scripts for v1.5.0 (per release notes)"From v1.5.0 onward, the self-heal block runs automatically on every /upgrade — no future runtime-protected fix will need a manual refresh.
Verification: after the manual refresh, your scripts/template-sync.sh should contain the comment block beginning with # 7.5. Self-healing post-sync refresh of runtime-protected files (#371). grep -c "Self-healing post-sync refresh" scripts/template-sync.sh should return 1.