Releases: mickyarun/bodhiorchard
Release list
## Pluggable AI provider — Claude, GitHub Copilot, or OpenAI Codex
Pluggable AI provider — Claude, GitHub Copilot, or OpenAI Codex
Each organization now chooses which agent CLI runs its codebase-aware work. Pick your provider in the setup wizard and Settings → AI Configuration; every agent task — specs, chat, design, estimation, scans, triage — runs on it.
Highlights
- Three providers, one selector. Claude Code, GitHub Copilot, or OpenAI Codex, switchable per org. All reach the same BUD/code-graph tools through the built-in MCP bridge.
- Flexible auth per provider. Hybrid mode inherits your host login (
claude login,gh/Copilot, orcodex login) so agents run on your existing subscription — or paste an API key/token, stored encrypted (Fernet AES-128). - In-wizard connection test for the selected provider before you commit.
- Provider-native repo setup. The first scan writes the right config for your provider — Claude →
.claude/, Codex →.codex/hooks.json+config.toml, Copilot →.github/hooks/, plusAGENTS.md— all wired to the same dev-activity / BUD-todo hooks so tracking works everywhere. - Live progress for Codex & Copilot — runs now stream tool activity instead of showing a static spinner.
- Provider-aware Agent Prompts. Model/effort dropdowns reflect the active provider (Copilot runs on auto-selected models).
Notes
- Claude behavior is unchanged; existing orgs keep running exactly as before.
- Ollama (local models) is next on the roadmap.
v1.3.3
What's Changed
- fix(minigames): bound submitted score to each game's own max by @mickyarun in #258
- feat(minigames): make all three games server-authoritative via Colyseus by @mickyarun in #259
- chore(frontend): enable npm-merge-driver in .gitattributes by @mickyarun in #260
- fix(minigames): score fishing hook from the client's in-cast time by @mickyarun in #261
- fix(minigames): show fishing result instantly, stop snapping the bobber by @mickyarun in #262
- fix(minigames): match optimistic fishing score to the reported instant by @mickyarun in #263
- feat(minigames): ramp Pollen Pop — faster, denser, more varied over time by @mickyarun in #270
- feat(race): dynamic pack-framing spectator camera by @mickyarun in #271
- fix(minigames): cap Pollen Pop end density, speed it up, jitter the cadence by @mickyarun in #272
- feat(minigames): randomise the Lake Fishing bobber per cast by @mickyarun in #273
- feat(minigames): lives + escalating levels for Fishing and Pollen Pop by @mickyarun in #274
- feat(minigames): firefly anti-bot guards + clear inflated leaderboard scores by @mickyarun in #275
- feat(buds,bugs): unblock PM/manager workflows and add bug numbers by @mickyarun in #276
- feat(sp): rework Skill Points to credit the people who did the work by @mickyarun in #277
Full Changelog: v1.3.2...v1.3.3
v1.3.2 — Podman-friendly frontend DNS
Fixes
Self-hosting on Podman now works out of the box. The frontend nginx container previously hardcoded Docker's embedded-DNS address (127.0.0.11) for resolving the backend upstream. Under Podman that resolver lives on the network gateway instead, so every /api/* request failed with 502 Bad Gateway and the setup screen couldn't reach the backend.
nginx now auto-detects the container's DNS resolver from /etc/resolv.conf at startup, so the same image runs unchanged on Docker, Podman, and rootless Podman — no manual config edits. The runtime DNS re-resolution that keeps nginx pointed at the right backend after a --force-recreate is preserved.
Full diff: #257
v1.3.1 This release introduces the Company Quiz Game — a daily, AI-generated knowledge game built from your own product data — plus timezone-aware mini-game nudges, org-wide high-score shout-outs, and two garden reliability fixes.
✨ Highlights
🧠 Company Quiz Game (#252)
A daily knowledge game that tests how well your team understands what you've built:
AI-drafted, human-approved — questions are generated from your feature registry into a review queue; admins edit/approve/reject, and only approved questions ever go live. No unreviewed AI output reaches the team.
Three formats — multiple-choice, scramble, and fill-in-the-blank, auto-rotating so it stays fresh.
Runs on your schedule — opens on admin-selected weekdays (default Mon & Fri) at a set time in your org's timezone, with a live countdown and an answer-+-explanation reveal when the window closes.
Competitive & rewarding — accuracy + speed scoring, a monthly leaderboard, and the month's top scorer earns SP (a genuine tie splits the prize). Slack DMs announce when a quiz opens (with the SP prize on the line) and post the standings at reveal.
Surfaced right on the dashboard garden, alongside the mini-games. Configure it under Settings → Quiz Game.
🎮 Mini-games
Daily Slack nudge now fires at 09:00 in each org's own timezone (#248)
New high scores are broadcast to the whole org on Slack (#250)
🐛 Fixes
Garden: self-heal invisible repo trees caused by a corrupt IndexedDB cache (#249)
Garden: stop canvas input from bleeding through open dialogs (#251)
📝 Upgrade notes
The Company Quiz Game adds new database tables; the Alembic migration runs automatically on backend startup. It's enabled by default and can be turned off per-org in Settings → Quiz Game.
Full Changelog: v1.3.0...v1.3.1
v1.3.0 — Living Garden & Race Day 🌳🏁
This release is all about the 3D world coming alive: a top-to-bottom performance and visual rewrite of the Living Garden, a brand-new mini-games arcade with leaderboards, a richer racing experience, and a refreshed public landing site + docs.
🌳 Living Garden — rewritten for speed and beauty
A ground-up overhaul of the PlayCanvas dashboard world (#247):
Much faster. Hardware instancing, smarter draw-call batching, a parallelized scene build, and incremental updates — a single repo change now regrows just that one tree instead of rebuilding the whole world. Holds 60fps even at 24+ repos.
Prettier. New single-source color theme, spring-morning lighting, camera post-processing, grass that sways in the wind, drifting pollen, and a dense painterly grass field.
A world worth visiting. Natural wood-bark trees, a teak-plank swimming pool, a packed-earth village with a campfire, benches, yards, and a washing line.
🎮 Mini-games arcade (new!)
A new way to take a break in the garden (#247):
Two games — Lake Fishing and Pollen Pop — with a daily play streak.
Per-game leaderboards, now first-class tabs on the Leaderboard page right next to XP and the race circuits.
A daily Slack nudge to keep your streak alive and call out who's leading.
Games are pure fun: they never award XP — XP stays reserved for real development work.
🏁 Racing
Invite colleagues by Slack DM to race, with a reusable member picker and a more robust test setup (#235).
Boost pads and hurdles added to tracks — with knockdowns, jumps, and speed-scaled launch arcs (#236).
A new circular/organic-loop track with laps, a roadside village, and AI dev bots to race against (#242).
🌐 Landing site & docs
The cramped single-page landing is now a 6-page SEO marketing site with animation (#240).
README restructured as a proper landing page, with reference docs moved into docs/ (#243), refreshed promo imagery and screenshots (#244), and shipped features (Slack bot, GitHub webhook, test-gen, CI/CD) now marked Live today (#246).
🐛 Fixes
Vuetify components now correctly inherit the Hallmark body font (#239).
Full changelog: v1.2.0...v1.3.0
🌿 v1.2.0 — A fresh coat of paint, and a starting gun 🏁
This release reskins Bodhiorchard end-to-end around a new forest design system, adds automatic light/dark theming, and ships Racing v2.
🎨 A whole new look — the Forest design system
Every screen redesigned around a "living garden" visual language.
- Forest palette — a deep-forest dark canvas, one disciplined leaf-green accent, and a reserved harvest-gold for reward moments (XP, shipped BUDs, the leaderboard podium).
- New typography — Bricolage Grotesque for headings & the wordmark, Geist for the UI, JetBrains Mono for code.
- Light & Dark, automatically — the app now follows your OS colour scheme and switches live (e.g. at sunset). Prefer a fixed mode? Pick Auto · Light · Dark in the user menu and it's remembered.
Highlights
- BUD detail keeps the phase tabs and section toolbar pinned as you scroll a long document.
- Leaderboard gets a gold podium for #1 and a focused, readable ranking.
- Design Systems cards now render the extracted palette as real colour swatches.
- Methodology is now a polished, cinematic landing page.
- Consistent passes across the BUD board, Dashboard, Features, Bugs, Skills, Members, and Settings, plus accessibility touches (visible focus rings, reduced-motion support, theme-aware tooltips & scrollbars).
🏁 Racing v2
Race your teammates through the 3D garden.
- Lobby → track → podium — invite racers, line up in the lobby, race, and see podium results.
- Stamina mechanic — manage stamina across the race, with a quick intro and a live stamina bar.
- Invite flow — invite one or more colleagues, with live invite toasts and a watch banner for spectators.
- A finish banner, proximity hotkeys, and a per-distance race leaderboard.
👥 Teams
- Group org members into teams and map them to the repositories they own, so new work auto-routes to the right squad based on which repos a BUD touches.
🛠 Under the hood
- Priority-aware smart BUD assignment with a yield-offer flow.
- Numerous light-theme correctness fixes and component cleanups.
v1.1.0
v1.0.1 - Teams: route work to the squad that owns the code
Auto-assignment now narrows to the team that owns a BUD's impacted repos
before applying the existing capacity, skill, recency, and round-robin
scoring. Plus async background jobs for the Danger Zone skill rerun and
proper navigation feedback when opening a BUD.
Highlights
- Teams as a first-class concept (Members → Teams). A team is a
named set of org members mapped to one or more repos. Three new
tables with composite FKs that make cross-org membership a DB-level
impossibility. - Team-scoped auto-assignment. The role picker intersects with team
membership when a BUD hasimpacted_repos. Falls back to org-wide
with a banner warning when no team owns the impacted repo — never
stalls silently. - Per-repo TODO splitting at DEVELOPMENT entry. Multi-repo BUDs
now distribute TODOs across each repo's team developers instead of
dumping every TODO on the lead. - Members page consolidated into two tabs (People / Teams);
/settings/teamsredirects so old bookmarks keep working. - BUD board Team filter alongside the existing assignee / priority
filters. - Danger Zone skill rerun moved to the async-job pattern — no more
axios client-side timeouts on 20-repo orgs. - Opening a BUD shows immediate feedback via a layout-level route
progress bar + a page-shaped skeleton loader.
Migration
One new migration runs on backend start; no data backfill required.
Existing orgs get empty Teams — admins create them via Members → Teams.
Tenant safety
The three new Teams join tables enforce tenant alignment via composite
FKs back to teams, org_to_user, and tracked_repositories.
Cross-org membership or repo ownership is rejected at the database
layer regardless of application bugs.
What's Changed
- fix(skills): run Danger Zone skill rerun as a background job by @mickyarun in #218
- fix(buds): add navigation feedback so opening a BUD never feels stuck by @mickyarun in #224
- feat(teams): team-scoped BUD auto-assignment + Members → Teams tab by @mickyarun in #225
Stable Initial Version
What's Changed
- Relicense AGPL-3.0 → Apache 2.0 + add IP-independence NOTICE by @mickyarun in #48
- Public-launch follow-ups: BUD canonicalization, public-readiness docs, landing page by @mickyarun in #49
- README polish: move independence note to footer, mark Anthropic direct API as supported by @mickyarun in #50
- README + landing-page narrative restructure: How It Runs, AI Engines, Manifesto, FAQ, JSON-LD schema by @mickyarun in #51
- Position as Agent-Driven Development methodology (not agentic SDLC) by @mickyarun in #52
- feat: MCP-ify BUD design read/write + cascade reassignment to TODOs by @mickyarun in #53
- feat: surface BUD ↔ Feature links in Requirements tab + audit timeline by @mickyarun in #54
- fix+feat: BUD design wireframe preview, linked-features UI, PM agent grounding by @mickyarun in #55
- prompt: wireframes are plain HTML — drop Vue/Vuetify, retire v-app autowrap by @mickyarun in #56
- feat: BUD ↔ Feature links UI, wireframe preview fixes, todo regen on chat edit by @mickyarun in #57
- refactor: regenerate BUD todos only at DEVELOPMENT-phase transition by @mickyarun in #58
- scan: domain-overlap guard + compound-bigram cluster labels by @mickyarun in #60
- chore: replace customer-specific placeholders with generic ones by @mickyarun in #61
- feat(buds): Notion-style TODO board + agent-driven generation via job queue by @mickyarun in #59
- removed the deployment file by @tanu-atoa in #62
- chore(backend): clear all mypy --strict errors + open-source PR gates by @mickyarun in #63
- fix(ci): unblock Dependabot PRs (hatchling pin + DCO bot exemption) by @mickyarun in #90
- chore(deps)(deps): update tzdata requirement from >=2024.1 to >=2026.2 in /backend by @dependabot[bot] in #84
- chore(deps)(deps): update python-dotenv requirement from >=1.0.0 to >=1.2.2 in /backend by @dependabot[bot] in #81
- chore(ci)(deps): bump actions/setup-node from 4 to 6 by @dependabot[bot] in #64
- chore(ci)(deps): bump googleapis/release-please-action from 4 to 5 by @dependabot[bot] in #66
- chore(deps)(deps): update bcrypt requirement from <4.1 to <5.1 in /backend by @dependabot[bot] in #77
- chore(deps)(deps): bump the multiplayer-minor-patch group across 1 directory with 2 updates by @dependabot[bot] in #70
- chore(deps)(deps): bump the frontend-minor-patch group across 1 directory with 8 updates by @dependabot[bot] in #74
- perf(design): real --resume + iteration_model + no-link fallback by @mickyarun in #89
- chore(ci)(deps): bump amannn/action-semantic-pull-request from 5 to 6 by @dependabot[bot] in #65
- chore(ci)(deps): bump github/codeql-action from 3 to 4 by @dependabot[bot] in #67
- chore(ci)(deps): bump actions/setup-python from 5 to 6 by @dependabot[bot] in #69
- chore(ci)(deps): bump actions/checkout from 4 to 6 by @dependabot[bot] in #68
- feat(security): layered defense for --dangerously-skip-permissions claude subprocess by @mickyarun in #92
- fix(claude-guard): post-merge bug fixes — MCP unblock, NPROC, env-exfil by @mickyarun in #93
- chore(ci): drop CodeQL quality queries, keep security-extended by @mickyarun in #94
- fix(security): block partial-SSRF in GitHub install-repo client by @mickyarun in #95
- refactor(bud-detail): split into focused subcomponents + composables by @mickyarun in #97
- feat(bud): phase-gated section edits + role fallback chain by @mickyarun in #98
- feat(bud-chat): session resume for all states + log-leak + concurrency + design auto-trigger fix by @mickyarun in #99
- fix(security): truncate password input to 72 bytes before bcrypt by @mickyarun in #100
- fix(bud-design): per-design cancel, per-repo banners, tracker loop fixes by @mickyarun in #101
- feat(bud-chat): durable resume, cancel, and restart recovery for AI Editor chats by @mickyarun in #102
- feat(pr-merge,features): phase 5 Redis-stream redesign + lineage UI by @mickyarun in #103
- feat(skills): custom skills per agent type, per-BUD stage overrides, override-aware resolver by @mickyarun in #104
- fix(skills): prune orphan agent_skills rows mis-tagged by step-4 fallback by @mickyarun in #105
- feat(scan,pr-merge): route subsequent scans through the diff-based engine by @mickyarun in #106
- fix(rbac): manager team:manage + developer buds:edit seed by @mickyarun in #107
- feat(design-systems): user customisations preserved across re-extraction by @mickyarun in #120
- fix(scan): include .bodhiorchard/mcp_bridge.py in bootstrap PR by @mickyarun in #121
- fix(nginx): proxy /mcp/ to backend for example-repo bridges by @mickyarun in #122
- fix(hooks): resolve tracked repo by basename when laptop path misses by @mickyarun in #123
- fix(xp): resolve PR author to BUD assignee when github_username misses by @mickyarun in #124
- feat(xp): stage-gated XP awards split among BUD contributors by @mickyarun in #125
- feat(code-review): classify git-auth failures + retry-once + explicit cwd by @mickyarun in #126
- fix(rbac): grant QA role buds:test for evidence upload + result entry by @mickyarun in #127
- fix(github): preserve valid inline review comments on 422 by @mickyarun in #128
- fix(github): post code-review on every re-run, not just the first by @mickyarun in #129
- fix(storage): surface S3 errors as FileStorageError + bump success log by @mickyarun in #133
- feat(qa-evidence): pydantic-settings storage
- filename sanitiser + scoped UI errors by @mickyarun in #134
- feat: external-LLM mode + remote MCP endpoint + per-phase auto-generate by @mickyarun in #136
- fix(mcp-connect): show full URL when VITE_API_BASE_URL is a bare path by @mickyarun in #137
- feat(mcp): write-side BYO-AI tools + append-only BUD edit history by @mickyarun in #138
- fix(webhook): use webhook_event= kwarg to avoid structlog event collision by @mickyarun in #132
- fix(bud-assignment): phase-scope continuity to stop cross-phase bleed by @mickyarun in #135
- fix(security): safe_join helper + targeted path-injection guards by @mickyarun in #142
- fix(qa-evidence): always-visible delete button on evidence tile by @mickyarun in #140
- feat(qa): allow reverting manual result to pending by @mickyarun in #141
- feat(tech-spec): figma URL on Design tab + local-Claude tech-spec generation by @mickyarun in #143
- feat(figma-tech-spec): add figma URL field and make tech spec sections universal by @mickyarun in #146
- feat(mcp): accept bud_number on get_bud_by_id by @mickyarun in #147
- fix(narrow-synthesis): containment tier + deactivate filter prevent wrong-deactivation by @mickyarun in #148
- fix(dev): add missing dev-start.sh referenced by package.json by @mickyarun in #149
- feat(bud-board): add title and assignee filters to kanban header by @mickyarun in #150
- feat(slack): feature Q&A + harden triage duplicate det...