A button on every page, triage in the open, and an AI channel that turns a labelled bug into a reviewed pull request. What runs on its own today, and why one step is still a person.
Every screen in commvita has a Feedback button in its top bar. Press it and a short form opens with the page you were on already filled in. You give it a title, pick a category, describe what happened, and send. That’s the whole of the user’s job.
The categories are the ones that matter to a platform team: a bug, a feature request, a roles issue where someone can’t reach what they should, and a training need where the system is fine and the person needs showing. Each item gets a reference, a priority and a status, and the page it came from travels with it, so nobody has to ask “where were you when this happened?”
Feedback lands in an administration screen where the platform team reviews it. An item moves from new to under review, then to approved, resolved or rejected. When it’s approved a backlog reference is recorded against it, so the person who raised it can be told which build it landed in.
Triage is done by a person, and we’d rather say that plainly than dress it up. A reviewer reads the item, re-tags the category if the submitter picked the wrong one, sets the priority, and decides. Rejections carry a note. Nothing is silently closed.
From the moment an approved bug becomes a labelled issue in the code repository, the rest can run without a person typing. A pipeline picks up any issue labelled as a bug, hands the title and description to an AI coding agent with the codebase in front of it, and asks for the root cause and a targeted fix.
That label is the trigger. Today a member of the platform team applies it after triage, with the feedback reference in the issue. That’s the manual step in “semi-manual”.
It works on a branch named for the issue, is told to make targeted changes only and add nothing beyond what the fix requires, and is confined to the application code.
If the agent changed anything, it commits and opens a pull request that closes the issue. If it changed nothing, no pull request is made and the issue stays open for a person.
The pull request carries a checklist: changes scoped to the bug, no side effects on clinical logic or patient data, tests pass, a human engineer approved. The same thirty build checks and five thousand tests run on it as on any other change.
Once merged it ships in the next build, the fix is written into the build register with its reasoning, and the feedback item’s backlog reference points at it.
The pipeline is built. The join between the feedback screen and the issue tracker isn’t. A reviewer approves an item and raises the labelled issue by hand, which takes a minute and is the deliberate control point.
Closing that gap is a small piece of work, and we haven’t done it on purpose. Feedback arrives from real users on real pages, and some of it describes a roles problem or a training need that no code change would fix. Pushing every item straight into an AI channel would generate pull requests for things that aren’t bugs. The classification step is where a person earns their keep, and we’d rather keep a human there until the triage itself is reliable enough to trust.
What the platform could do next, and hasn’t, is have the configured AI provider suggest a category and a theme for each new item, with a plain fallback when no provider is set. That’s on the enhancement list and it isn’t built, so it isn’t claimed here. When it is, the reviewer’s job becomes confirming a suggestion instead of reading from cold, and the label can follow approval automatically.
A fix on this platform isn’t a line changed. It’s a line changed, a test that would have caught it, and a note in the build register saying what was wrong and why it was wrong. That discipline applies to a fix an agent proposes as much as to one a founder writes.
The build register is why the loop closes. Every build records what changed and the reasoning, and where a defect turned out to be one of a class the platform has met before, it says so and names the earlier instance. A quarter of the register’s entries describe a defect class recurring, which is the kind of fact you only learn if you write everything down. The help guide for the page regenerates on the next build, and the build check fails if a page’s source changed and its guide didn’t.
| Surface | Route | What it does | Status |
|---|---|---|---|
| Feedback button | every page | Title, category, description, page captured automatically | ● Live |
| Feedback administration | /feedback-admin | Review, re-tag, prioritise, approve, reject, backlog reference | ● Live |
| Feedback API | /feedback | Create, list, update, message thread | ● Live |
| AI bug-fix pipeline | code repository | Labelled issue to reviewed pull request | ● Live, triggered by hand |