Dashboard Settings Reference
Workspace review policy defaults, revisioned settings writes, and the limits of the operator-parity dashboard.
Review policy is one stored JSON document for the workspace. This page describes the settings API on son-of-anton-operator-parity, branch feat/greptile-operator-parity (P/ below), and the editor in anton-ui-trace-parity. That branch is not merged into the son-of-anton-review engine on feat/cloudflare-native (R/). The native engine can hydrate and pin policy from its own D1 snapshot; writing a different deployment's policy does not configure it.
Where policy lives
- Storage: D1 table
review_policy_settings, rowid = 'workspace', with arevisioncounter (P/src/review-policy-store.js:59-89). - API:
/operator/api/settingsonP/cloudflare/.GETreturns{ ok, settings, revision, updatedAt }.PATCHaccepts{ revision, settings }and merges over the saved policy. Stale revisions return409; bodies over 256 KiB return413(P/cloudflare/src/review-policy-api.js:5-63). - Audit: a successful policy write and its
review_policy_auditentry share a D1 batch.GET /operator/api/settings/audit?q=&limit=&offset=returns policy audit plus memory/SCM audit where those tables exist. Limit 1 to 100, default 50 (P/src/review-policy-store.js:69-110). - Usage:
GET /operator/api/settings/usage?from=YYYY-MM-DD&to=YYYY-MM-DDreports model/chat telemetry. UTC date range defaults to month start through today; incomplete telemetry produces unknown values, not zero (P/src/review-policy-store.js:26-38,112-168). - Defaults:
DEFAULT_REVIEW_POLICYinsrc/operator-review-policy.js. Missing fields in a patch fall back to the stored value, then to the default.
# Read current policy and revision
curl -sS "$ANTON_OPERATOR/operator/api/settings" \
-H "authorization: Bearer $SON_OF_ANTON_OPERATOR_READ_TOKEN"
# Raise strictness. Revision must match the GET above.
curl -sS -X PATCH "$ANTON_OPERATOR/operator/api/settings" \
-H "authorization: Bearer $SON_OF_ANTON_OPERATOR_ADMIN_TOKEN" \
-H 'content-type: application/json' \
-d '{"revision": 3, "settings": {"strictness": "medium"}}'ANTON_OPERATOR is your parity Worker origin in these examples, not an application env setting. Use the revision actually returned by GET, not the illustrative 3. Canonical SON_OF_ANTON_ tokens take precedence over GILF_ fallbacks.
The handler requires OPERATOR_ACTOR supplied by the outer authenticated Worker. This is not an independently provisioned service binding: the Worker derives the actor and injects it. For legacy bearer callers it accepts x-operator-actor or defaults to service-admin; JSON cannot supply identity. Generated anton_ machine keys cannot write policy or read the main settings document; their read scope permits settings usage only (P/cloudflare/src/worker.js:65-80,115-146).
The parity Settings view groups Repositories, Code providers, Code review, Summary, Checks & approval, Sandbox execution, Memory permissions, Models, Usage & limits, Audit log and API keys. Repositories also edits the workspace auto-enable policy and has separate per-repo writes. Models is a browse-only view, not a model selector that saves configuration (anton-ui-trace-parity/src/views/Settings.tsx:16-27,209-218,247-264). The original anton-ui does not contain this policy editor.
Code review tab
| Key | Default | Rule | Effect |
|---|---|---|---|
autoEnableNewRepos | false | boolean | Repos with no stored config are reviewed only if this is on or they were reviewed before (src/scm-store.js) |
autoReviewNewCommits | true | boolean | false skips synchronize events |
reviewDrafts | false | boolean | false returns draft_review_disabled for drafts |
fileChangeLimit | 500 | integer 1 to 100000 | PRs over the limit return file_change_limit |
filters | [] | rule list, see below | Empty list matches every PR |
customInstructions | "" | string, max 20000 chars | Passed to the reviewer as guidance (src/review-policy-runtime.js) |
strictness | low | low, medium, high | Filters published findings, see below |
commentHeader | "" | string, max 500 chars | Prepended to the review comment |
updatePrDescription | false | boolean | Writes the summary between anton-review-summary markers in the PR body |
promptToFix | false | boolean | Appends a copyable "Prompt to Fix" block listing actionable findings |
featureTips | false | boolean | Appends a footer listing @anton commands |
Strictness (filterReviewFindings):
low: publish every finding.medium: drop medium-priority findings only when they carry a recognized confidence value below 0.8. Missing confidence is retained; the model finding schema does not require it.high: drop medium and low priority findings.
Findings ranked blocker, critical or high, or whose text matches security, injection, XSS, CSRF, SSRF, memory leak, infinite loop, null dereference or missing validation, are always kept. See Triggers and Commands for how these knobs gate a run.
Summary tab
Five sections share one shape: { enabled, collapsible, defaultOpen }, all booleans.
| Section | Default |
|---|---|
summary.summary | enabled, not collapsible |
summary.confidence | enabled, not collapsible |
summary.files | enabled, not collapsible |
summary.diagram | enabled, not collapsible |
summary.outsideDiff | enabled, collapsible, closed |
A disabled section is omitted. A collapsible section renders as <details>, opened when defaultOpen is true (src/review-format.js appendSection). Disabling summary.confidence also disables auto approval.
Checks & approval tab
| Key | Default | Rule | Effect |
|---|---|---|---|
statusChecks.enabled | true | boolean | Enable check-run publication, not a commit-status API. Disabling skips new checks but completes an existing check as neutral (R/src/review-service.js:1038-1059). |
statusChecks.requiredConfidence | 0 | integer 0 to 5 | Above 0, missing/below-threshold confidence gives failure; adequate confidence with incomplete/unpinned semantic coverage gives neutral, not success |
statusChecks.postStatusComments | false | boolean | Permit queued/failure status comments where the service posts them |
autoApprove.enabled | false | boolean | Allow APPROVE reviews |
autoApprove.maxRisk | low | low, medium, high, critical | Highest PR risk that may still be approved |
autoApprove.instructions | "" | string, max 20000 chars | Stored with the policy |
autoApprove.filters | [] | rule list | PR must match these and the review filters |
Auto approval (mayAutoApprove) needs all of: confidence 5, complete semantic coverage with no failed or skipped workers, no missing validations, every finding at nit or info level with no protected match, a non-draft PR, and a head SHA that equals the SHA the coverage was computed on. The publisher refuses APPROVE without a pinned head commit (src/github-publisher.js publishReview). Everything else publishes as COMMENT.
Sandbox execution tab
| Key | Default | Rule |
|---|---|---|
execution.mode | always | always, never, filters |
execution.filters | [] | rule list, used only when mode is filters |
shouldRunExecution returns true, false, or the filter result. See Validation and Evidence.
Memory permissions tab
| Key | Default | Rule |
|---|---|---|
memoryRuleCreation | ADMINS_ONLY | ADMINS_ONLY, MEMBERS, EVERYONE |
Stored and validated, but not an enforced runtime rule-creation authorization gate in the inspected engine. Do not rely on this enum to grant or restrict memory writes; the parity API's route authentication is separate.
Usage & limits tab
| Key | Default | Rule | Effect |
|---|---|---|---|
pausedAuthors | [] | max 500 logins, lowercased, deduped | Paused authors are skipped even on manual @anton review |
monthlyModelBudgetUsd | null | null or number 0 to 1e9 | At admission, refuses with monthly_model_budget_reached when current-month known model cost meets the cap; missing or stale usage refuses with model_budget_usage_unavailable. Not a reservation system or a strict concurrent-spend ceiling. |
Filter rules
filters, autoApprove.filters and execution.filters share one grammar. A PR matches when any rule matches, and a rule matches when all its conditions match.
{
"filters": [
{ "conditions": [
{ "field": "targetBranch", "operator": "is", "values": ["main", "release/*"] },
{ "field": "label", "operator": "is_not", "values": ["skip-review"] }
] }
]
}| Field | Operators | Values |
|---|---|---|
label, author, repository | is, is_not | strings; repository must be owner/repo |
targetBranch, sourceBranch, path | is, is_not | safe globs |
title, keyword | contains, not_contains | substrings, case-insensitive |
draft | is, is_not | none |
filesChanged | at_most, more_than | one integer string, 0 to 100000 |
If the PR metadata a condition needs is missing, the decision is deferred, not denied.
Validation
PATCH returns 400 with a message naming the path, for example Unknown or invalid field: settings.foo.
- Unknown fields are rejected at every level, including inside rules and conditions.
- Max 50 rules per list, 1 to 20 conditions per rule, max 50 values per condition, each value 1 to 500 chars.
- Globs allow
A-Z a-z 0-9 _ . @ space / ? * -. Empty segments,.,..and**glued to other text are rejected. - Control characters (U+0000 to U+001F except tab, newline and carriage return, plus U+007F) are rejected in every string.
- Integers must be safe integers within range. Booleans must be booleans.
Models and API keys tabs
The Models tab is read-only. It shows configured-key presence, selected provider and known model ids from the backend snapshot; it does not probe the actual review process or return provider credentials. OpenRouter is recommended; OpenAI, Anthropic and Codex are alternatives. See Model providers before selecting variables: Node reads the legacy runner names, and the native container only receives a restricted environment projection.
The API keys tab manages operator machine keys, not model credentials. POST /operator/api/keys with { name, scopes } returns the token once; storage keeps its SHA-256 hash, 14-character prefix and metadata. Scopes are only read and memory:write; default scope is read. POST /operator/api/keys/:id/revoke revokes it. Creation/listing/revocation require the administrative bearer route, not another generated machine key (P/src/operator-api-keys.js:1-3,65-109; P/cloudflare/src/worker.js:71,115-135).
Source evidence and runtime limits
- Policy defaults, validation and filters:
R/src/operator-review-policy.js:25-108,110-180; the correspondingP/src/operator-review-policy.jshas the same definitions. - Strictness and approval:
R/src/operator-review-policy.js:183-238. Approval also checks risk ceiling and both filter lists.R/src/github-publisher.js:50-65pins approval to a head. - Check conclusions and rendering:
R/src/review-format.js:127-159,186-245. Coverage failure is not equivalent to a failed numeric confidence threshold. - Runtime policy and budget admission:
R/src/review-policy-runtime.js:26-53,74-90;R/src/codex-review-runner.js:2376-2392. - Native policy snapshot:
R/cloudflare-native/src/d1-store-adapter.js:153-172; settings routes remain onP/cloudflare/src/worker.js:145-146.
For conflicts, authorization failures or a missing endpoint, see Troubleshooting. No saved policy value can enable an unforwarded native V5 flag.