Dentolize · Composable Sandbox QA Walkthrough
On this pageBusiness viewThe questions you will actually getEscalation checklist

For Support

Who you are supporting here is not a clinic. This feature has no customer-facing surface — no screen in the clinic app, the patient portal, or the mobile app changed. If a customer asks about it, the honest answer is that it is an internal engineering tool.

The people who will bring you questions are engineers and QA staff using the workflow. This page is your triage guide for them.


Business view

The one-paragraph explanation

The Sandbox QA workflow runs an AI agent against a pull request's preview environment. It used to be one long automatic pipeline. Now it is four separate buttons — review, plan, test, fix — that a person runs one at a time, reading and correcting the AI's output on the pull request between each step. full-auto still runs the whole chain unattended.

The three comments people will ask about

CommentPosted byEditable?
🔍 QA code reviewreviewYes — plan reads your edits
🧪 QA test planplanYes — test runs exactly this
🧪 QA review (results)test, fix, full-autoNo point — overwritten each run

Each is a single comment that gets overwritten. There is no history in the thread; older versions live in the workflow run's artifacts.


The questions you will actually get

"I edited the plan and it tested something completely different."

Three possible causes, in order of likelihood:

  1. They dispatched full-auto instead of test. full-auto does not read

edited comments — it regenerates the review and plan from scratch. Only plan and test fetch your edits (.github/workflows/sandbox-qa.yml:61). Fix: dispatch test.

  1. They deleted the marker line. The comment starts with an invisible

<!-- sandbox-qa-plan -->. If it was removed while editing, the workflow can't find the comment. Symptom: a second plan comment appears alongside theirs. Fix: paste the marker back as the first line.

  1. They re-dispatched plan after editing. Re-running a stage overwrites

that stage's own comment with fresh AI output. Fix: edit, then move forward, never sideways.

"The run is green but it says 0 stories."

The agent's stories.json was unparsable. The workflow logs a warning and carries on rather than failing (.github/workflows/sandbox-qa.yml:156). Nothing was tested.

Send them to: the workflow run → Artifacts → download → inspect stories.json.

"The comment says to check agent.log but there's no artifact."

Real gap. The upload step only runs if the agent emitted its state directory (.github/workflows/sandbox-qa.yml:242). If the agent crashed before that point, there is nothing to upload — and that is exactly when the error message fires.

Fix: read the raw job log in the Actions tab instead. Everything the agent wrote to stderr, including the live progress stream, is there.

"There are 40 issues on my PR and only 20 stories."

Expected. test files a fresh set of issues every run and does not deduplicate. Only fix updates existing issues in place (.github/workflows/sandbox-qa.yml:161).

Fix: filter by the pr-<number> label and bulk-close before re-testing. For iterating on failures, prefer fix, or test with scope: failed-only (fewer stories, though still new issues).

"All the issues are closed, so we're good, right?"

Not necessarily. Issues close on PASS, FIXED, and SKIPPED (.github/workflows/sandbox-qa.yml:176). A story the agent never attempted closes its issue and looks identical to one that passed.

Fix: read the summary comment's tally, which breaks skips out: 12 stories: 9 ✅ · 2 ❌ · 0 🔧 · 1 ⏭️.

"The workflow failed on issues.create."

Most likely a story with priority: "critical", which attaches a critical label (.github/workflows/sandbox-qa.yml:199). That label is not created automatically — only ai-automated and the PR label are (:144-150). If critical doesn't exist in the repo, the API call throws and the publish step dies partway through, having already filed some issues.

Fix: create the critical label in the repository, re-dispatch. Expect some duplicate issues from the partial first run.

"My gh workflow run script broke."

The input was renamed: modeaction, and all option values changed. There is no backward-compatible alias.

OldNew
-f mode=test-only-f action=test
-f mode=fix-issues-f action=fix
-f mode=plan-only-f action=plan
-f mode=execute-f action=test
-f mode=full-auto-f action=full-auto

Full table with caveats: Migration.

"It's been running for hours and my sandbox won't deploy."

Expected mechanics, not a bug. The QA job may run up to 300 minutes (.github/workflows/sandbox-qa.yml:58), concurrency does not cancel in-progress runs (:48), and the homelab has a single runner slot shared with sandbox deploys.

Fix: if the run looks wedged, cancel it from the Actions tab. Nothing else in the repo will move until it ends.

"Why did an AI commit to my branch?"

fix and full-auto push commits — that is what they are for (permissions: contents: write, .github/workflows/sandbox-qa.yml:51). review, plan, and test never do. test is the dropdown default, so accidental commits require actively choosing fix or full-auto.

Guidance: review AI commits like any other contributor's. Nothing in this repository constrains what fix may change.

"Nothing was posted to my PR at all."

Check whether the branch actually has an open PR. The workflow is dispatched on a ref, not a PR, so a branch without one is legal — it logs "no open PR" and continues, keeping results in the artifact only (.github/workflows/sandbox-qa.yml:72, :115).


Escalation checklist

Before escalating to the platform team, collect:

  1. The workflow run URL (every AI comment embeds it as [run](…)).
  2. The action and scope that were dispatched.
  3. The artifact — or, if there isn't one, the raw job log.
  4. Whether the review/plan comments were edited, and whether the markers are

still intact.

Roughly half the advertised behavior lives in a script on the homelab host (/opt/homelab/sandbox/bin/sandbox-qa), not in this repository — so "the agent did the wrong thing" is nearly always a host-side question, while "the comment/issue/artifact came out wrong" is a workflow question. The dividing line is documented in Operating notes.