## truecourse-ai/truecourse — v0.8.1-next.0…v0.9.0

_59 commits._

### Features
- **feat: a pull request is checked at its head against its base (#928)** (4f47a9c)
- **feat(guard): interface authoring reads the live screen, after the seed, and the api map reads Next.js pages-router handlers (#927)** (3fa38a8)
- **feat(landing): send pageviews to Google Analytics beside PostHog (#932)** (4b81f8b)
- **feat(context): Jira projects and Confluence spaces as document sources (#919)** (690a6ab)
- **feat(guard): every generated flow is reconciled against the committed one, never re-invented (#925)** (96dcf1c)
- **feat(guard): an LLM step re-runs only when an input that can change its output changed (#924)** (f81adc7)
- **feat(landing): the wordmark is set in the logo's own face, and says who backs it (#920)** (a638cc2)
- **feat: Usage page and Credits, a workspace on TrueCourse's key against a granted balance (#918)** (8e783f2)
- **feat(github): connect the same GitHub account to more than one workspace (#916)** (e20c8b1)
- **feat: Join Discord in the sidebar, PostHog in the dashboard, landing for the hosted app (#910)** (2903280)
- **feat(auth): invite members by link (#908)** (9727fbd)
- **feat(azure): read the LLM concurrency limits from Key Vault (#905)** (7d492a9)
- **feat(guard): support provider control and improve authoring reliability (#903)** (ded1003)
- **feat(azure): deploy the hosted app to Azure VMs (#901)** (f0f5339)
- **feat(dashboard): Context belongs to the workspace, and the product-owner dashboard reads real data (#900)** (2d99a28)
- **feat(guard): scope authoring context and confirm typed web failures (#899)** (06a50fe)
- **feat(dashboard): the Agent page lists every run of the workspace and opens each as its verbatim conversation (#896)** (41ea11a)
- **feat(guard): verify case coverage and isolate scenario data (#894)** (37a2ba5)
- **feat(activity): stream dashboard runs and persist history in Postgres (#889)** (54d679d)
- **feat(dashboard): the Sources tab of a connected repository reads and edits its stored web sources (#887)** (abeb884)
- **feat(dashboard): the Coverage tab of a connected repository reads the stored coverage (#886)** (164af10)
- **feat(guard): the baseline run closes the onboarding chain, and generate stops losing its world (#885)** (e5c5588)
- **feat(guard): generate runs as the hosted job setup chains into, the Corpus tab reads the stored corpus (#884)** (41c2e74)
- **feat(guard): setup runs as agent sessions and as the hosted job the scan chains into (#883)** (da7b752)
- **feat(one-product): WorkOS auth + Postgres in the base, repos connect through the GitHub App (#882)** (86dae6c)
- **feat(one-product): plan of record + preview dashboard on the ported agent loop (#881)** (77adc75)
- **feat(landing): blog posts show a live view count (#878)** (eafab32)
- **feat(landing): blog post "We read the docs and ran the product. They disagreed." (#875)** (32a8a22)
- **feat(landing): adopt the twin-sail logo and favicon (#874)** (aa3dbba)

### Fixes
- **fix(mapper): discover TanStack routes, oRPC APIs and Drizzle namespaces (#938)** (68541fd)
- **fix(llm): preserve Gemini tool schemas and guide setup sessions (#937)** (fc05501)
- **fix(guard): a model-written regex carries its flags in a flags field (#930)** (09edc8d)
- **fix(guard): a flow worker that answers blocked is asked to repair once, not until its budget runs out (#931)** (52c3f81)
- **fix(landing): the how it works screens share one canvas height (#922)** (52ba510)
- **fix(llm): a model that loses its place is stopped, not waited out and paid for (#921)** (d863de1)
- **fix(guard): make setup survive a cold clone and stop the verify rounds it wasted (#914)** (9b0ad3b)
- **fix(auth): invite links say less, come back after a switch, and a removed member is really out (#915)** (e1acdb9)
- **fix(server): one process entry for every edition (#912)** (5b217aa)
- **fix(guard): keep failed build output and survive idle Postgres client errors (#911)** (42fba4a)
- **fix(guard): re-boot a server that lost its port instead of calling it a crash (#909)** (b357562)
- **fix(azure): the release helper owns the systemd unit (#904)** (09e530c)
- **fix(guard): use workspace provider and recover claim extraction (#897)** (64d57bf)
- **fix(azure): use 4 vCPU Consumption apps (#893)** (76f8d32)
- **perf(dev): run workspace packages from source with tsx (#892)** (de6284e)
- **fix(dashboard): constrain interfaces table width (#891)** (4cfd085)
- **fix(guard): repair interface discovery, generation, and dashboard coverage (#890)** (b20630e)
- **fix(dashboard): constrain table columns and stabilize filter toolbars (#888)** (edf6edf)
- **fix(landing): let inline code wrap on mobile (#876)** (9e885cb)

### Backend
- **MCP server for developers (TRU-24) (#935)** (30f7928)
- **Google Gemini as a provider on Settings › Models (TRU-120) (#933)** (a467b69)
- **A run's tokens say how many were cheap, and each is priced at its own rate (#929)** (640b6ab)
- **One model, one way to reach it, and a workspace that says what it builds (#923)** (5e76ac3)
- **Require complete flow tests and preserve Guard prerequisites (#898)** (65c2542)

### Docs
- **docs: simplify README pull request checks (#939)** (d03f2c9)
- **docs(readme): the truecourse npm package is deprecated (TRU-131) (#936)** (a7a3725)
- **docs(readme): how-it-works animation (#934)** (6bac127)

### Chore
- **chore(azure): drop the Container Apps templates and docs (#913)** (3624b28)
- **chore(azure): name the dev VM stack truecourse-dev (#907)** (7f86b32)
- **refactor: one app, one edition line, no CLI (the migration) (#902)** (2fbeff6)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/truecourse-ai/truecourse?utm_source=github-action)._