Son of Anton Docs
Getting started

Anatomy of a Review

Every section of a Son of Anton review body and check run, and what each one means.

This page describes the publisher and formatter in son-of-anton-review on feat/cloudflare-native. It applies when a run reaches live publication. Native shadow runs use a recording publisher; policy-skipped runs are not completed semantic reviews. The expanded dashboard policy API is in the separate son-of-anton-operator-parity tree, not the native main Worker.

What gets posted

Publication is keyed by review run, not by PR lifetime. A new head or a new manual-comment variant can create another run. The publisher exposes these surfaces:

SurfaceWhereBehaviour
PR reviewReviews tabPOSTed with a <!-- anton-review <key> --> marker and pinned commit. Event is COMMENT, or APPROVE when the full auto-approval policy passes. It is not edited in place across pushes.
Check runChecks tab, named Son of Anton / reviewCreated when no check ID is stored, then PATCHed through run transitions. Enabled by default; policy can disable it.
Status commentsPR conversationOff by default (statusChecks.postStatusComments). Receipt and completion comments are separate POSTs with their own markers, not one continuously edited sticky comment.

There are no inline per-line comments or suggestion patches in this publisher. It also supports an optional PR-description update, described below. Publication claims and receipts reduce duplicate mutations; an ambiguous remote outcome still needs reconciliation before retrying.

The header line

The check run summary is one line:

[CLEAR] Safe to merge. Analyst confidence 4/5.
[CAUTION] Safe to merge with 2 high-risk follow-ups. Analyst confidence 3/5. Required confidence 4/5 was not met.
[BLOCK] Not safe to merge until 1 blocker is fixed. Analyst confidence 2/5.
  • Merge status is CLEAR, CAUTION, or BLOCK. Blockers force BLOCK. High findings, a needs-attention verdict, incomplete validation, or an analyzer failure force at least CAUTION.
  • Analyst confidence N/5 is a recorded 1 to 5 score, not a probability or proof that validation passed. The deterministic docs-only path also supplies a score. When confidence display is enabled but no score exists, the summary says Analyst confidence was not recorded. Disabling summary.confidence hides that text.
  • When statusChecks.requiredConfidence is set above 0 and the score falls short, the line ends with Required confidence N/5 was not met. and a CLEAR status is downgraded to CAUTION.

Check run conclusion

ConditionConclusion
requiredConfidence > 0 and score missing or below itfailure
Merge status is CAUTION or BLOCKneutral
requiredConfidence > 0 but semantic coverage is incomplete, degraded, or pinned to a different headneutral
Otherwisesuccess

Blockers therefore do not produce success. In this conclusion function, failure requires a configured confidence threshold; it does not mean that every blocking finding makes the GitHub check fail. A threshold can come from stored policy, not necessarily a dashboard.

Review body sections

Sections appear in this order. Empty sections are omitted.

SectionContent
Custom headerOptional commentHeader text from policy.
Son of Anton SummaryOne-paragraph overview plus bullet highlights.
Merge StatusCLEAR, CAUTION, or BLOCK and the merge verdict sentence. Always shown.
Analyst Confidence: N/5The reasoning behind the score.
Important Files ChangedTable of Filename and Overview.
FindingsFindings not established as outside the diff. Missing changed-path metadata is unknown scope, not evidence that a finding is outside it.
Outside-Diff FindingsFindings on paths not in the PR. Collapsible by default.
Validation StatusValidation evidence lines and MISSING: items. Always shown when present.
Cross-Repo ImpactSupplied impact bullets. The graph is repository-scoped; the heading does not prove a multi-repository index or a verified effect in another repo.
Competitor BenchmarkOnly when competitor review context was captured. Winner, benchmark confidence, agreements, misses, action items.
ASCII FlowA fenced text block with plain-text arrows and boxes. The prompt forbids Mermaid syntax here.
Prompt to FixOff by default (promptToFix). A quoted prompt listing actionable findings, pinned to the head commit.
FooterReviewed by Son of Anton for commit <sha>.

Findings

Each finding is one bullet:

- **HIGH** Missing null check on session token in `src/auth/session.js`
  - The body explains the defect and how to reproduce it.
  - Evidence: log https://...
  - Unverified: Finding claims execution-backed evidence but no evidence artifact ... was persisted for it.
  • The model schema requires severity, category, path, title, body and contextIds. Model severities are blocker, high, medium, low; the renderer uppercases whatever severity it receives. There are no required line-number fields.
  • The renderer prepends [unverified] only when evidenceStatus is explicitly unverified. It does not independently verify artifacts. Execution-artifact processing is gated by GILF_EVIDENCE_ARTIFACTS; enforcement additionally uses GILF_EVIDENCE_REQUIRE_ARTIFACTS. Both are off by default and neither is forwarded by the native container env allowlist.
  • Policy strictness=low leaves findings unchanged. medium hides medium findings only when a declared confidence is below 0.8; unknown confidence remains visible. high hides medium and low findings except protected findings. Blocker/high findings and findings matching the safety-protection rules are retained.

Validation Status

Validation entries are strings supplied by the runner. These are illustrative formats, not output from a particular run:

PASS test: `npm test` succeeded in 42s.
FAIL lint: `npm run lint` exited with status 1. Output: ...
SKIPPED validation: no standard validation scripts were declared.
INCONCLUSIVE build: `npm run build` was not run. validation process aborted in the sandbox.
MISSING: Codex semantic analysis was skipped because this was an automatic docs-only review.

SKIPPED means the named operation did not run. Automatic docs-only reviews can use a deterministic semantic fast path when there is no review memory, operator guidance, manual command or competitor context, and GILF_CODEX_FOR_DOCS_ONLY has not enabled the model pass. That fast path returns CAUTION, confidence 3/5, no findings and a missing-semantic-analysis entry. A manual @anton review bypasses this semantic skip, but does not necessarily force sandbox validation on a docs-only diff or bypass executor/policy failures.

Finding evolution across pushes

The service compares available prior findings with the current result and stores findingEvolution. Matching uses fingerprints and similarity:

LabelMeaning
newNo prior finding matched by fingerprint or similarity.
persistingExact match with a prior finding.
modifiedSimilar to a prior finding but the text or location changed.
resolvedA previous finding is omitted and not retained in the unresolved set. This classification alone is not proof of a fix.
unresolvedAn omitted prior concern remains unverified, with its source provenance retained.

These labels are stored, not rendered as finding tags in the review body. Same-head continuity uses evidence-backed dispositions rather than silently dropping old concerns. The outcome ledger records unknown when the new semantic analysis is incomplete. Do not equate evolution labels with the addressed-rate methodology of the separate parity reports API.

PR description block

With updatePrDescription enabled (default off), the review markdown is also written into the PR description between owned markers:

<!-- anton-review-summary:start -->
...review markdown...
<!-- anton-review-summary:end -->

With neither marker present, the block is appended. With one valid pair it is replaced, preserving the surrounding text. A lone marker, duplicates, reversed markers, reserved markers in the generated review, or an unreadable description causes refusal. The publisher also refuses if a fresh GitHub read shows that the PR head moved.

What stored review policy can hide

The summary.* settings control optional sections. Each has enabled, collapsible, and defaultOpen. These are their defaults:

{
  "summary": {
    "summary": { "enabled": true, "collapsible": false, "defaultOpen": false },
    "confidence": { "enabled": true, "collapsible": false, "defaultOpen": false },
    "files": { "enabled": true, "collapsible": false, "defaultOpen": false },
    "diagram": { "enabled": true, "collapsible": false, "defaultOpen": false },
    "outsideDiff": { "enabled": true, "collapsible": true, "defaultOpen": false }
  }
}

Merge Status and the footer always render. Main findings and validation/impact sections render when populated and are not controlled by these section toggles; finding filtering still applies. Outside-Diff Findings can be hidden, and hiding them also excludes those findings from Prompt to Fix. Optional featureTips can add a tip before the footer.

Rerun a review

Authorized commenters (OWNER, MEMBER, COLLABORATOR by default) can comment:

@anton rerun

@anton review and @anton rerun request a manual run; a new comment ID gives it a new variant. @gilf is a parser alias. Node resolves the target from its stored PR head, so it needs an earlier PR event; the native consumer resolves a missing head from GitHub. Node also replies to status and help, whereas the native consumer ignores those commands. See Triggers and commands.

On this page